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

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v7/] [rtl/] [twoway/] [FT64_regfile2w6r_oc.v] - Blame information for rev 60

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 60 robfinch
`timescale 1ns / 1ps
2
// ============================================================================
3
//        __
4
//   \\__/ o\    (C) 2013-2018  Robert Finch, Waterloo
5
//    \  __ /    All rights reserved.
6
//     \/_//     robfinch<remove>@finitron.ca
7
//       ||
8
//
9
// This source file is free software: you can redistribute it and/or modify 
10
// it under the terms of the GNU Lesser General Public License as published 
11
// by the Free Software Foundation, either version 3 of the License, or     
12
// (at your option) any later version.                                      
13
//                                                                          
14
// This source file is distributed in the hope that it will be useful,      
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
17
// GNU General Public License for more details.                             
18
//                                                                          
19
// You should have received a copy of the GNU General Public License        
20
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
21
//
22
//
23
// Register file with two write ports and six read ports.
24
// ============================================================================
25
//
26
`include "FT64_config.vh"
27
 
28
module FT64_regfileRam_sim(clka, ena, wea, addra, dina, clkb, enb, addrb, doutb);
29
parameter WID=64;
30
parameter RBIT = 11;
31
input clka;
32
input ena;
33
input [7:0] wea;
34
input [RBIT:0] addra;
35
input [WID-1:0] dina;
36
input clkb;
37
input enb;
38
input [RBIT:0] addrb;
39
output [WID-1:0] doutb;
40
 
41
integer n;
42
(* RAM_STYLE="BLOCK" *)
43
reg [64:0] mem [0:4095];
44
reg [RBIT:0] raddrb;
45
 
46
initial begin
47
        for (n = 0; n < 4096; n = n + 1)
48
                mem[n] = 0;
49
end
50
 
51
always @(posedge clka) if (ena & wea[0]) mem[addra][7:0] <= dina[7:0];
52
always @(posedge clka) if (ena & wea[1]) mem[addra][15:8] <= dina[15:8];
53
always @(posedge clka) if (ena & wea[2]) mem[addra][23:16] <= dina[23:16];
54
always @(posedge clka) if (ena & wea[3]) mem[addra][31:24] <= dina[31:24];
55
always @(posedge clka) if (ena & wea[4]) mem[addra][39:32] <= dina[39:32];
56
always @(posedge clka) if (ena & wea[5]) mem[addra][47:40] <= dina[47:40];
57
always @(posedge clka) if (ena & wea[6]) mem[addra][55:48] <= dina[55:48];
58
always @(posedge clka) if (ena & wea[7]) mem[addra][63:56] <= dina[63:56];
59
 
60
always @(posedge clkb)
61
        raddrb <= addrb;
62
assign doutb = mem[raddrb];
63
 
64
endmodule
65
 
66
module FT64_regfile2w6r_oc(clk4x, clk, wr0, wr1, we0, we1, wa0, wa1, i0, i1,
67
        rclk, ra0, ra1, ra2, ra3, ra4, ra5,
68
        o0, o1, o2, o3, o4, o5);
69
parameter WID=64;
70
parameter RBIT = 11;
71
input clk4x;
72
input clk;
73
input wr0;
74
input wr1;
75
input [7:0] we0;
76
input [7:0] we1;
77
input [RBIT:0] wa0;
78
input [RBIT:0] wa1;
79
input [WID-1:0] i0;
80
input [WID-1:0] i1;
81
input rclk;
82
input [RBIT:0] ra0;
83
input [RBIT:0] ra1;
84
input [RBIT:0] ra2;
85
input [RBIT:0] ra3;
86
input [RBIT:0] ra4;
87
input [RBIT:0] ra5;
88
output [WID-1:0] o0;
89
output [WID-1:0] o1;
90
output [WID-1:0] o2;
91
output [WID-1:0] o3;
92
output [WID-1:0] o4;
93
output [WID-1:0] o5;
94
 
95
reg wr;
96
reg [RBIT:0] wa;
97
reg [WID-1:0] i;
98
reg [7:0] we;
99
wire [WID-1:0] o00, o01, o02, o03, o04, o05;
100
reg wr1x;
101
reg [RBIT:0] wa1x;
102
reg [WID-1:0] i1x;
103
reg [7:0] we1x;
104
reg holdwr0,holdwr1;
105
reg [63:0] holdi0, holdi1;
106
reg [RBIT:0] holdwa0,holdwa1;
107
 
108
integer n;
109
 
110
`ifdef SIM
111
FT64_regfileRam_sim urf10 (
112
  .clka(clk4x),
113
  .ena(wr),
114
  .wea(we),
115
  .addra(wa),
116
  .dina(i),
117
  .clkb(rclk),
118
  .enb(1'b1),
119
  .addrb(ra0),
120
  .doutb(o00)
121
);
122
 
123
FT64_regfileRam_sim urf11 (
124
  .clka(clk4x),
125
  .ena(wr),
126
  .wea(we),
127
  .addra(wa),
128
  .dina(i),
129
  .clkb(rclk),
130
  .enb(1'b1),
131
  .addrb(ra1),
132
  .doutb(o01)
133
);
134
 
135
FT64_regfileRam_sim urf12 (
136
  .clka(clk4x),
137
  .ena(wr),
138
  .wea(we),
139
  .addra(wa),
140
  .dina(i),
141
  .clkb(rclk),
142
  .enb(1'b1),
143
  .addrb(ra2),
144
  .doutb(o02)
145
);
146
 
147
FT64_regfileRam_sim urf13 (
148
  .clka(clk4x),
149
  .ena(wr),
150
  .wea(we),
151
  .addra(wa),
152
  .dina(i),
153
  .clkb(rclk),
154
  .enb(1'b1),
155
  .addrb(ra3),
156
  .doutb(o03)
157
);
158
 
159
FT64_regfileRam_sim urf14 (
160
  .clka(clk4x),
161
  .ena(wr),
162
  .wea(we),
163
  .addra(wa),
164
  .dina(i),
165
  .clkb(rclk),
166
  .enb(1'b1),
167
  .addrb(ra4),
168
  .doutb(o04)
169
);
170
 
171
FT64_regfileRam_sim urf15 (
172
  .clka(clk4x),
173
  .ena(wr),
174
  .wea(we),
175
  .addra(wa),
176
  .dina(i),
177
  .clkb(rclk),
178
  .enb(1'b1),
179
  .addrb(ra5),
180
  .doutb(o05)
181
);
182
`else
183
FT64_regfileRam urf10 (
184
  .clka(clk4x),
185
  .ena(wr),
186
  .wea(we),
187
  .addra(wa),
188
  .dina(i),
189
  .clkb(rclk),
190
  .enb(1'b1),
191
  .web(1'b0),
192
  .addrb(ra0),
193
  .dinb(8'h00),
194
  .doutb(o00)
195
);
196
 
197
FT64_regfileRam urf11 (
198
  .clka(clk4x),
199
  .ena(wr),
200
  .wea(we),
201
  .addra(wa),
202
  .dina(i),
203
  .clkb(rclk),
204
  .enb(1'b1),
205
  .web(1'b0),
206
  .addrb(ra1),
207
  .dinb(8'h00),
208
  .doutb(o01)
209
);
210
 
211
FT64_regfileRam urf12 (
212
  .clka(clk4x),
213
  .ena(wr),
214
  .wea(we),
215
  .addra(wa),
216
  .dina(i),
217
  .clkb(rclk),
218
  .enb(1'b1),
219
  .web(1'b0),
220
  .addrb(ra2),
221
  .dinb(8'h00),
222
  .doutb(o02)
223
);
224
 
225
FT64_regfileRam urf13 (
226
  .clka(clk4x),
227
  .ena(wr),
228
  .wea(we),
229
  .addra(wa),
230
  .dina(i),
231
  .clkb(rclk),
232
  .enb(1'b1),
233
  .web(1'b0),
234
  .addrb(ra3),
235
  .dinb(8'h00),
236
  .doutb(o03)
237
);
238
 
239
FT64_regfileRam urf14 (
240
  .clka(clk4x),
241
  .ena(wr),
242
  .wea(we),
243
  .addra(wa),
244
  .dina(i),
245
  .clkb(rclk),
246
  .enb(1'b1),
247
  .web(1'b0),
248
  .addrb(ra4),
249
  .dinb(8'h00),
250
  .doutb(o04)
251
);
252
 
253
FT64_regfileRam urf15 (
254
  .clka(clk4x),
255
  .ena(wr),
256
  .wea(we),
257
  .addra(wa),
258
  .dina(i),
259
  .clkb(rclk),
260
  .enb(1'b1),
261
  .web(1'b0),
262
  .addrb(ra5),
263
  .dinb(8'h00),
264
  .doutb(o05)
265
);
266
`endif
267
 
268
// Record what was written in the previous clock cycle so that read
269
// forwarding logic may use it.
270
always @(posedge clk)
271
        holdwr0 <= wr0;
272
always @(posedge clk)
273
        holdwr1 <= wr1;
274
always @(posedge clk)
275
        holdwa0 <= wa0;
276
always @(posedge clk)
277
        holdwa1 <= wa1;
278
always @(posedge clk)
279
        holdi0 <= i0;
280
always @(posedge clk)
281
        holdi1 <= i1;
282
 
283
// The same clock edge that would normally update the register file is the
284
// clock edge that causes the data to disappear for the next cycle. The
285
// data needs to be held onto so that it can update the register file on
286
// the next 4x clock.
287
always @(posedge clk)
288
begin
289
        wr1x <= wr1;
290
        we1x <= we1;
291
        wa1x <= wa1;
292
        i1x <= i1;
293
end
294
 
295
reg wclk2;
296
always @(posedge clk4x)
297
begin
298
        wclk2 <= clk;
299
        if (clk & ~wclk2) begin
300
                wr <= wr0;
301
                we <= 8'hFF;
302
                wa <= wa0;
303
                i <= i0;
304
        end
305
        else if (clk & wclk2) begin
306
                wr <= wr1x;
307
                we <= 8'hFF;
308
                wa <= wa1x;
309
                i <= i1x;
310
        end
311
        else begin
312
                wr <= 1'b0;
313
                we <= 8'hFF;
314
                wa <= 'd0;
315
                i <= 'd0;
316
        end
317
end
318
 
319
 
320
function [63:0] fwdmux;
321
input [RBIT:0] ra;
322
input wr0;
323
input wr1;
324
input hwr0;
325
input hwr1;
326
input [RBIT:0] wa0;
327
input [RBIT:0] wa1;
328
input [RBIT:0] hwa0;
329
input [RBIT:0] hwa1;
330
input [63:0] i0;
331
input [63:0] i1;
332
input [63:0] hi0;
333
input [63:0] hi1;
334
input [63:0] oo;
335
begin
336
        if (ra[4:0]==5'd0)
337
                fwdmux = 64'd0;
338
        else if (wr1 && ra==wa1)
339
                fwdmux = i1;
340
        else if (wr0 && ra==wa0)
341
                fwdmux = i0;
342
        else if (hwr1 && ra==hwa1)
343
                fwdmux = hi1;
344
        else if (hwr0 && ra==hwa0)
345
                fwdmux = hi0;
346
        else
347
                fwdmux = oo;
348
end
349
endfunction
350
 
351
assign o0 = fwdmux(ra0,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o00);
352
assign o1 = fwdmux(ra1,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o01);
353
assign o2 = fwdmux(ra2,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o02);
354
assign o3 = fwdmux(ra3,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o03);
355
assign o4 = fwdmux(ra4,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o04);
356
assign o5 = fwdmux(ra5,wr0,wr1,holdwr0,holdwr1,wa0,wa1,holdwa0,holdwa1,i0,i1,holdi0,holdi1,o05);
357
 
358
/*
359
assign o0[7:0] = ra0[4:0]==5'd0 ? {8{1'b0}} :
360
        (wr1 && we1[0] && (ra0==wa1)) ? i1[7:0] :
361
        (wr0 && we0[0] && (ra0==wa0)) ? i0[7:0] : o00[7:0];
362
assign o0[15:8] = ra0[4:0]==5'd0 ? {8{1'b0}} :
363
        (wr1 && we1[1] && (ra0==wa1)) ? i1[15:8] :
364
        (wr0 && we0[1] && (ra0==wa0)) ? i0[15:8] : o00[15:8];
365
assign o0[23:16] = ra0[4:0]==5'd0 ? {8{1'b0}} :
366
        (wr1 && we1[2] && (ra0==wa1)) ? i1[23:16] :
367
        (wr0 && we0[2] && (ra0==wa0)) ? i0[23:16] : o00[23:16];
368
assign o0[31:24] = ra0[4:0]==5'd0 ? {8{1'b0}} :
369
        (wr1 && we1[3] && (ra0==wa1)) ? i1[31:24] :
370
        (wr0 && we0[3] && (ra0==wa0)) ? i0[31:24] : o00[31:24];
371
assign o0[39:32] = ra0[4:0]==5'd0 ? {8{1'b0}} :
372
        (wr1 && we1[4] && (ra0==wa1)) ? i1[39:32] :
373
        (wr0 && we0[4] && (ra0==wa0)) ? i0[39:32] : o00[39:32];
374
assign o0[47:40] = ra0[4:0]==5'd0 ? {8{1'b0}} :
375
        (wr1 && we1[5] && (ra0==wa1)) ? i1[47:40] :
376
        (wr0 && we0[5] && (ra0==wa0)) ? i0[47:40] : o00[47:40];
377
assign o0[55:48] = ra0[4:0]==5'd0 ? {8{1'b0}} :
378
        (wr1 && we1[6] && (ra0==wa1)) ? i1[55:48] :
379
        (wr0 && we0[6] && (ra0==wa0)) ? i0[55:48] : o00[55:48];
380
assign o0[63:56] = ra0[4:0]==5'd0 ? {8{1'b0}} :
381
        (wr1 && we1[7] && (ra0==wa1)) ? i1[63:56] :
382
        (wr0 && we0[7] && (ra0==wa0)) ? i0[63:56] : o00[63:56];
383
 
384
assign o1[7:0] = ra1[4:0]==5'd0 ? {8{1'b0}} :
385
        (wr1 && we1[0] && (ra1==wa1)) ? i1[7:0] :
386
        (wr0 && we0[0] && (ra1==wa0)) ? i0[7:0] : o01[7:0];
387
assign o1[15:8] = ra1[4:0]==5'd0 ? {8{1'b0}} :
388
        (wr1 && we1[1] && (ra1==wa1)) ? i1[15:8] :
389
        (wr0 && we0[1] && (ra1==wa0)) ? i0[15:8] : o01[15:8];
390
assign o1[23:16] = ra1[4:0]==5'd0 ? {8{1'b0}} :
391
        (wr1 && we1[2] && (ra1==wa1)) ? i1[23:16] :
392
        (wr0 && we0[2] && (ra1==wa0)) ? i0[23:16] : o01[23:16];
393
assign o1[31:24] = ra1[4:0]==5'd0 ? {8{1'b0}} :
394
        (wr1 && we1[3] && (ra1==wa1)) ? i1[31:24] :
395
        (wr0 && we0[3] && (ra1==wa0)) ? i0[31:24] : o01[31:24];
396
assign o1[39:32] = ra1[4:0]==5'd0 ? {8{1'b0}} :
397
        (wr1 && we1[4] && (ra1==wa1)) ? i1[39:32] :
398
        (wr0 && we0[4] && (ra1==wa0)) ? i0[39:32] : o01[39:32];
399
assign o1[47:40] = ra1[4:0]==5'd0 ? {8{1'b0}} :
400
        (wr1 && we1[5] && (ra1==wa1)) ? i1[47:40] :
401
        (wr0 && we0[5] && (ra1==wa0)) ? i0[47:40] : o01[47:40];
402
assign o1[55:48] = ra1[4:0]==5'd0 ? {8{1'b0}} :
403
        (wr1 && we1[6] && (ra1==wa1)) ? i1[55:48] :
404
        (wr0 && we0[6] && (ra1==wa0)) ? i0[55:48] : o01[55:48];
405
assign o1[63:56] = ra1[4:0]==5'd0 ? {8{1'b0}} :
406
        (wr1 && we1[7] && (ra1==wa1)) ? i1[63:56] :
407
        (wr0 && we0[7] && (ra1==wa0)) ? i0[63:56] : o01[63:56];
408
 
409
assign o2[7:0] = ra2[4:0]==5'd0 ? {8{1'b0}} :
410
        (wr1 && we1[0] && (ra2==wa1)) ? i1[7:0] :
411
        (wr0 && we0[0] && (ra2==wa0)) ? i0[7:0] : o02[7:0];
412
assign o2[15:8] = ra2[4:0]==5'd0 ? {8{1'b0}} :
413
        (wr1 && we1[1] && (ra2==wa1)) ? i1[15:8] :
414
        (wr0 && we0[1] && (ra2==wa0)) ? i0[15:8] : o02[15:8];
415
assign o2[23:16] = ra2[4:0]==5'd0 ? {8{1'b0}} :
416
        (wr1 && we1[2] && (ra2==wa1)) ? i1[23:16] :
417
        (wr0 && we0[2] && (ra2==wa0)) ? i0[23:16] : o02[23:16];
418
assign o2[31:24] = ra2[4:0]==5'd0 ? {8{1'b0}} :
419
        (wr1 && we1[3] && (ra2==wa1)) ? i1[31:24] :
420
        (wr0 && we0[3] && (ra2==wa0)) ? i0[31:24] : o02[31:24];
421
assign o2[39:32] = ra2[4:0]==5'd0 ? {8{1'b0}} :
422
        (wr1 && we1[4] && (ra2==wa1)) ? i1[39:32] :
423
        (wr0 && we0[4] && (ra2==wa0)) ? i0[39:32] : o02[39:32];
424
assign o2[47:40] = ra2[4:0]==5'd0 ? {8{1'b0}} :
425
        (wr1 && we1[5] && (ra2==wa1)) ? i1[47:40] :
426
        (wr0 && we0[5] && (ra2==wa0)) ? i0[47:40] : o02[47:40];
427
assign o2[55:48] = ra2[4:0]==5'd0 ? {8{1'b0}} :
428
        (wr1 && we1[6] && (ra2==wa1)) ? i1[55:48] :
429
        (wr0 && we0[6] && (ra2==wa0)) ? i0[55:48] : o02[55:48];
430
assign o2[63:56] = ra2[4:0]==5'd0 ? {8{1'b0}} :
431
        (wr1 && we1[7] && (ra2==wa1)) ? i1[63:56] :
432
        (wr0 && we0[7] && (ra2==wa0)) ? i0[63:56] : o02[63:56];
433
 
434
assign o3[7:0] = ra3[4:0]==5'd0 ? {8{1'b0}} :
435
        (wr1 && we1[0] && (ra3==wa1)) ? i1[7:0] :
436
        (wr0 && we0[0] && (ra3==wa0)) ? i0[7:0] : o03[7:0];
437
assign o3[15:8] = ra3[4:0]==5'd0 ? {8{1'b0}} :
438
        (wr1 && we1[1] && (ra3==wa1)) ? i1[15:8] :
439
        (wr0 && we0[1] && (ra3==wa0)) ? i0[15:8] : o03[15:8];
440
assign o3[23:16] = ra3[4:0]==5'd0 ? {8{1'b0}} :
441
        (wr1 && we1[2] && (ra3==wa1)) ? i1[23:16] :
442
        (wr0 && we0[2] && (ra3==wa0)) ? i0[23:16] : o03[23:16];
443
assign o3[31:24] = ra3[4:0]==5'd0 ? {8{1'b0}} :
444
        (wr1 && we1[3] && (ra3==wa1)) ? i1[31:24] :
445
        (wr0 && we0[3] && (ra3==wa0)) ? i0[31:24] : o03[31:24];
446
assign o3[39:32] = ra3[4:0]==5'd0 ? {8{1'b0}} :
447
        (wr1 && we1[4] && (ra3==wa1)) ? i1[39:32] :
448
        (wr0 && we0[4] && (ra3==wa0)) ? i0[39:32] : o03[39:32];
449
assign o3[47:40] = ra3[4:0]==5'd0 ? {8{1'b0}} :
450
        (wr1 && we1[5] && (ra3==wa1)) ? i1[47:40] :
451
        (wr0 && we0[5] && (ra3==wa0)) ? i0[47:40] : o03[47:40];
452
assign o3[55:48] = ra3[4:0]==5'd0 ? {8{1'b0}} :
453
        (wr1 && we1[6] && (ra3==wa1)) ? i1[55:48] :
454
        (wr0 && we0[6] && (ra3==wa0)) ? i0[55:48] : o03[55:48];
455
assign o3[63:56] = ra3[4:0]==5'd0 ? {8{1'b0}} :
456
        (wr1 && we1[7] && (ra3==wa1)) ? i1[63:56] :
457
        (wr0 && we0[7] && (ra3==wa0)) ? i0[63:56] : o03[63:56];
458
 
459
assign o4[7:0] = ra4[4:0]==5'd0 ? {8{1'b0}} :
460
        (wr1 && we1[0] && (ra4==wa1)) ? i1[7:0] :
461
        (wr0 && we0[0] && (ra4==wa0)) ? i0[7:0] : o04[7:0];
462
assign o4[15:8] = ra4[4:0]==5'd0 ? {8{1'b0}} :
463
        (wr1 && we1[1] && (ra4==wa1)) ? i1[15:8] :
464
        (wr0 && we0[1] && (ra4==wa0)) ? i0[15:8] : o04[15:8];
465
assign o4[23:16] = ra4[4:0]==5'd0 ? {8{1'b0}} :
466
        (wr1 && we1[2] && (ra4==wa1)) ? i1[23:16] :
467
        (wr0 && we0[2] && (ra4==wa0)) ? i0[23:16] : o04[23:16];
468
assign o4[31:24] = ra4[4:0]==5'd0 ? {8{1'b0}} :
469
        (wr1 && we1[3] && (ra4==wa1)) ? i1[31:24] :
470
        (wr0 && we0[3] && (ra4==wa0)) ? i0[31:24] : o04[31:24];
471
assign o4[39:32] = ra4[4:0]==5'd0 ? {8{1'b0}} :
472
        (wr1 && we1[4] && (ra4==wa1)) ? i1[39:32] :
473
        (wr0 && we0[4] && (ra4==wa0)) ? i0[39:32] : o04[39:32];
474
assign o4[47:40] = ra4[4:0]==5'd0 ? {8{1'b0}} :
475
        (wr1 && we1[5] && (ra4==wa1)) ? i1[47:40] :
476
        (wr0 && we0[5] && (ra4==wa0)) ? i0[47:40] : o04[47:40];
477
assign o4[55:48] = ra4[4:0]==5'd0 ? {8{1'b0}} :
478
        (wr1 && we1[6] && (ra4==wa1)) ? i1[55:48] :
479
        (wr0 && we0[6] && (ra4==wa0)) ? i0[55:48] : o04[55:48];
480
assign o4[63:56] = ra4[4:0]==5'd0 ? {8{1'b0}} :
481
        (wr1 && we1[7] && (ra4==wa1)) ? i1[63:56] :
482
        (wr0 && we0[7] && (ra4==wa0)) ? i0[63:56] : o04[63:56];
483
 
484
assign o5[7:0] = ra5[4:0]==5'd0 ? {8{1'b0}} :
485
        (wr1 && we1[0] && (ra5==wa1)) ? i1[7:0] :
486
        (wr0 && we0[0] && (ra5==wa0)) ? i0[7:0] : o05[7:0];
487
assign o5[15:8] = ra5[4:0]==5'd0 ? {8{1'b0}} :
488
        (wr1 && we1[1] && (ra5==wa1)) ? i1[15:8] :
489
        (wr0 && we0[1] && (ra5==wa0)) ? i0[15:8] : o05[15:8];
490
assign o5[23:16] = ra5[4:0]==5'd0 ? {8{1'b0}} :
491
        (wr1 && we1[2] && (ra5==wa1)) ? i1[23:16] :
492
        (wr0 && we0[2] && (ra5==wa0)) ? i0[23:16] : o05[23:16];
493
assign o5[31:24] = ra5[4:0]==5'd0 ? {8{1'b0}} :
494
        (wr1 && we1[3] && (ra5==wa1)) ? i1[31:24] :
495
        (wr0 && we0[3] && (ra5==wa0)) ? i0[31:24] : o05[31:24];
496
assign o5[39:32] = ra5[4:0]==5'd0 ? {8{1'b0}} :
497
        (wr1 && we1[4] && (ra5==wa1)) ? i1[39:32] :
498
        (wr0 && we0[4] && (ra5==wa0)) ? i0[39:32] : o05[39:32];
499
assign o5[47:40] = ra5[4:0]==5'd0 ? {8{1'b0}} :
500
        (wr1 && we1[5] && (ra5==wa1)) ? i1[47:40] :
501
        (wr0 && we0[5] && (ra5==wa0)) ? i0[47:40] : o05[47:40];
502
assign o5[55:48] = ra5[4:0]==5'd0 ? {8{1'b0}} :
503
        (wr1 && we1[6] && (ra5==wa1)) ? i1[55:48] :
504
        (wr0 && we0[6] && (ra5==wa0)) ? i0[55:48] : o05[55:48];
505
assign o5[63:56] = ra5[4:0]==5'd0 ? {8{1'b0}} :
506
        (wr1 && we1[7] && (ra5==wa1)) ? i1[63:56] :
507
        (wr0 && we0[7] && (ra5==wa0)) ? i0[63:56] : o05[63:56];
508
*/
509
/*
510
assign o5 = ra5[4:0]==5'd0 ? {WID{1'b0}} :
511
    (wr1 && (ra5==wa1)) ? i1 :
512
    (wr0 && (ra5==wa0)) ? i0 : o05;
513
 
514
*/
515
endmodule
516
 

powered by: WebSVN 2.1.0

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