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

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [rtl/] [verilog/] [rtf65002_icachemem2way.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_icachemem2way(whichrd, whichwr, wclk, wr, adr, dat, rclk, pc, insn);
24
input [1:0] whichrd;     // which set to read
25
input whichwr;                  // which set to update
26
input wclk;
27
input wr;
28
input [33:0] adr;
29
input [31:0] dat;
30
input rclk;
31
input [31:0] pc;
32
output reg [63:0] insn;
33
 
34
wire [63:0] insn0a,insn0b;
35
wire [63:0] insn1a,insn1b;
36
wire [31:0] pcp8 = pc + 32'd8;
37
reg [31:0] rpc;
38
 
39
always @(posedge rclk)
40
        rpc <= pc;
41
 
42
// memL and memH combined allow a 64 bit read
43
syncRam1kx32_1rw1r ramL0a
44
(
45
        .wrst(1'b0),
46
        .wclk(wclk),
47
        .wce(~adr[2] & ~whichwr),
48
        .we(wr),
49
        .wsel(4'hF),
50
        .wadr(adr[12:3]),
51
        .i(dat),
52
        .wo(),
53
        .rrst(1'b0),
54
        .rclk(rclk),
55
        .rce(1'b1),
56
        .radr(pc[12:3]),
57
        .o(insn0a[31:0])
58
);
59
 
60
syncRam1kx32_1rw1r ramH0a
61
(
62
        .wrst(1'b0),
63
        .wclk(wclk),
64
        .wce(adr[2] & ~whichwr),
65
        .we(wr),
66
        .wsel(4'hF),
67
        .wadr(adr[12:3]),
68
        .i(dat),
69
        .wo(),
70
        .rrst(1'b0),
71
        .rclk(rclk),
72
        .rce(1'b1),
73
        .radr(pc[12:3]),
74
        .o(insn0a[63:32])
75
);
76
 
77
syncRam1kx32_1rw1r ramL1a
78
(
79
        .wrst(1'b0),
80
        .wclk(wclk),
81
        .wce(~adr[2] & ~whichwr),
82
        .we(wr),
83
        .wsel(4'hF),
84
        .wadr(adr[12:3]),
85
        .i(dat),
86
        .wo(),
87
        .rrst(1'b0),
88
        .rclk(rclk),
89
        .rce(1'b1),
90
        .radr(pcp8[12:3]),
91
        .o(insn1a[31:0])
92
);
93
 
94
syncRam1kx32_1rw1r ramH1a
95
(
96
        .wrst(1'b0),
97
        .wclk(wclk),
98
        .wce(adr[2] & ~whichwr),
99
        .we(wr),
100
        .wsel(4'hF),
101
        .wadr(adr[12:3]),
102
        .i(dat),
103
        .wo(),
104
        .rrst(1'b0),
105
        .rclk(rclk),
106
        .rce(1'b1),
107
        .radr(pcp8[12:3]),
108
        .o(insn1a[63:32])
109
);
110
 
111
syncRam1kx32_1rw1r ramL0b
112
(
113
        .wrst(1'b0),
114
        .wclk(wclk),
115
        .wce(~adr[2] & whichwr),
116
        .we(wr),
117
        .wsel(4'hF),
118
        .wadr(adr[12:3]),
119
        .i(dat),
120
        .wo(),
121
        .rrst(1'b0),
122
        .rclk(rclk),
123
        .rce(1'b1),
124
        .radr(pc[12:3]),
125
        .o(insn0b[31:0])
126
);
127
 
128
syncRam1kx32_1rw1r ramH0b
129
(
130
        .wrst(1'b0),
131
        .wclk(wclk),
132
        .wce(adr[2] & whichwr),
133
        .we(wr),
134
        .wsel(4'hF),
135
        .wadr(adr[12:3]),
136
        .i(dat),
137
        .wo(),
138
        .rrst(1'b0),
139
        .rclk(rclk),
140
        .rce(1'b1),
141
        .radr(pc[12:3]),
142
        .o(insn0b[63:32])
143
);
144
 
145
syncRam1kx32_1rw1r ramL1b
146
(
147
        .wrst(1'b0),
148
        .wclk(wclk),
149
        .wce(~adr[2] & whichwr),
150
        .we(wr),
151
        .wsel(4'hF),
152
        .wadr(adr[12:3]),
153
        .i(dat),
154
        .wo(),
155
        .rrst(1'b0),
156
        .rclk(rclk),
157
        .rce(1'b1),
158
        .radr(pcp8[12:3]),
159
        .o(insn1b[31:0])
160
);
161
 
162
syncRam1kx32_1rw1r ramH1b
163
(
164
        .wrst(1'b0),
165
        .wclk(wclk),
166
        .wce(adr[2] & whichwr),
167
        .we(wr),
168
        .wsel(4'hF),
169
        .wadr(adr[12:3]),
170
        .i(dat),
171
        .wo(),
172
        .rrst(1'b0),
173
        .rclk(rclk),
174
        .rce(1'b1),
175
        .radr(pcp8[12:3]),
176
        .o(insn1b[63:32])
177
);
178
 
179
always @(rpc or insn0a or insn1a or insn0b or insn1b or whichrd)
180
case({whichrd,rpc[2:0]})
181
5'd0:   insn <= insn0a[63:0];
182
5'd1:   insn <= {insn1a[7:0],insn0a[63:8]};
183
5'd2:   insn <= {insn1a[15:0],insn0a[63:16]};
184
5'd3:   insn <= {insn1a[23:0],insn0a[63:24]};
185
5'd4:   insn <= {insn1a[31:0],insn0a[63:32]};
186
5'd5:   insn <= {insn1a[39:0],insn0a[63:40]};
187
5'd6:   insn <= {insn1a[47:0],insn0a[63:48]};
188
5'd7:   insn <= {insn1a[55:0],insn0a[63:56]};
189
5'd8:   insn <= insn0b[63:0];
190
5'd9:   insn <= {insn1b[7:0],insn0b[63:8]};
191
5'd10:  insn <= {insn1b[15:0],insn0b[63:16]};
192
5'd11:  insn <= {insn1b[23:0],insn0b[63:24]};
193
5'd12:  insn <= {insn1b[31:0],insn0b[63:32]};
194
5'd13:  insn <= {insn1b[39:0],insn0b[63:40]};
195
5'd14:  insn <= {insn1b[47:0],insn0b[63:48]};
196
5'd15:  insn <= {insn1b[55:0],insn0b[63:56]};
197
5'd16:  insn <= insn0a[63:0];
198
5'd17:  insn <= {insn1b[7:0],insn0a[63:8]};
199
5'd18:  insn <= {insn1b[15:0],insn0a[63:16]};
200
5'd19:  insn <= {insn1b[23:0],insn0a[63:24]};
201
5'd20:  insn <= {insn1b[31:0],insn0a[63:32]};
202
5'd21:  insn <= {insn1b[39:0],insn0a[63:40]};
203
5'd22:  insn <= {insn1b[47:0],insn0a[63:48]};
204
5'd23:  insn <= {insn1b[55:0],insn0a[63:56]};
205
5'd24:  insn <= insn0b[63:0];
206
5'd25:  insn <= {insn1a[7:0],insn0b[63:8]};
207
5'd26:  insn <= {insn1a[15:0],insn0b[63:16]};
208
5'd27:  insn <= {insn1a[23:0],insn0b[63:24]};
209
5'd28:  insn <= {insn1a[31:0],insn0b[63:32]};
210
5'd29:  insn <= {insn1a[39:0],insn0b[63:40]};
211
5'd30:  insn <= {insn1a[47:0],insn0b[63:48]};
212
5'd31:  insn <= {insn1a[55:0],insn0b[63:56]};
213
endcase
214
endmodule

powered by: WebSVN 2.1.0

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