OpenCores
URL https://opencores.org/ocsvn/rtf65002/rtf65002/trunk

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [rtl/] [verilog/] [rtf65002_icachemem4k.v] - Blame information for rev 32

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 32 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2013  Robert Finch, Stratford
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@opencores.org
6
//       ||
7
//
8
// This source file is free software: you can redistribute it and/or modify 
9
// it under the terms of the GNU Lesser General Public License as published 
10
// by the Free Software Foundation, either version 3 of the License, or     
11
// (at your option) any later version.                                      
12
//                                                                          
13
// This source file is distributed in the hope that it will be useful,      
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
16
// GNU General Public License for more details.                             
17
//                                                                          
18
// You should have received a copy of the GNU General Public License        
19
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
20
//                                                                          
21
// ============================================================================
22
//
23
module rtf65002_icachemem4k(wclk, wr, adr, dat, rclk, pc, insn);
24
input wclk;
25
input wr;
26
input [33:0] adr;
27
input [31:0] dat;
28
input rclk;
29
input [31:0] pc;
30
output reg [63:0] insn;
31
 
32
wire [63:0] insn0;
33
wire [63:0] insn1;
34
wire [31:0] pcp8 = pc + 32'd8;
35
reg [31:0] rpc;
36
 
37
always @(posedge rclk)
38
        rpc <= pc;
39
 
40
// memL and memH combined allow a 64 bit read
41
syncRam512x32_1rw1r ramL0
42
(
43
        .wrst(1'b0),
44
        .wclk(wclk),
45
        .wce(~adr[2]),
46
        .we(wr),
47
        .wadr(adr[11:3]),
48
        .i(dat),
49
        .wo(),
50
        .rrst(1'b0),
51
        .rclk(rclk),
52
        .rce(1'b1),
53
        .radr(pc[11:3]),
54
        .o(insn0[31:0])
55
);
56
 
57
syncRam512x32_1rw1r ramH0
58
(
59
        .wrst(1'b0),
60
        .wclk(wclk),
61
        .wce(adr[2]),
62
        .we(wr),
63
        .wadr(adr[11:3]),
64
        .i(dat),
65
        .wo(),
66
        .rrst(1'b0),
67
        .rclk(rclk),
68
        .rce(1'b1),
69
        .radr(pc[11:3]),
70
        .o(insn0[63:32])
71
);
72
 
73
syncRam512x32_1rw1r ramL1
74
(
75
        .wrst(1'b0),
76
        .wclk(wclk),
77
        .wce(~adr[2]),
78
        .we(wr),
79
        .wadr(adr[11:3]),
80
        .i(dat),
81
        .wo(),
82
        .rrst(1'b0),
83
        .rclk(rclk),
84
        .rce(1'b1),
85
        .radr(pcp8[11:3]),
86
        .o(insn1[31:0])
87
);
88
 
89
syncRam512x32_1rw1r ramH1
90
(
91
        .wrst(1'b0),
92
        .wclk(wclk),
93
        .wce(adr[2]),
94
        .we(wr),
95
        .wadr(adr[11:3]),
96
        .i(dat),
97
        .wo(),
98
        .rrst(1'b0),
99
        .rclk(rclk),
100
        .rce(1'b1),
101
        .radr(pcp8[11:3]),
102
        .o(insn1[63:32])
103
);
104
 
105
always @(rpc or insn0 or insn1)
106
case(rpc[2:0])
107
3'd0:   insn <= insn0[63:0];
108
3'd1:   insn <= {insn1[7:0],insn0[63:8]};
109
3'd2:   insn <= {insn1[15:0],insn0[63:16]};
110
3'd3:   insn <= {insn1[23:0],insn0[63:24]};
111
3'd4:   insn <= {insn1[31:0],insn0[63:32]};
112
3'd5:   insn <= {insn1[39:0],insn0[63:40]};
113
3'd6:   insn <= {insn1[47:0],insn0[63:48]};
114
3'd7:   insn <= {insn1[55:0],insn0[63:56]};
115
endcase
116
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.