Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / libs / tisram / soc / n2_l2d_sp_512kb_cust_l / n2_l2d_sp_512kb_cust / rtl / n2_l2d_16kb_cust.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: n2_l2d_16kb_cust.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program 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, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module n2_l2d_16kb_cust (
36 waysel_c4,
37 waysel_err_c3,
38 set_c3b,
39 coloff_c3b_l,
40 coloff_c4_l,
41 coloff_c5,
42 wen_c3b,
43 readen_c5,
44 worden_c3b,
45 l1clk,
46 wrd_lo0_b_l,
47 wrd_lo1_b_l,
48 wrd_hi0_b_l,
49 wrd_hi1_b_l,
50 red_adr,
51 cred,
52 tstmodclk_l,
53 wee_l,
54 vnw_ary,
55 saout_lo0_bc_l,
56 saout_lo1_bc_l,
57 saout_hi0_bc_l,
58 saout_hi1_bc_l);
59wire coloff_c3b_l_unused;
60wire bank_select;
61wire coloff_c4;
62wire [7:0] set_c4;
63wire [1:0] spare_word_enable;
64wire select_red_odd;
65wire select_red_even;
66
67
68
69input [7:0] waysel_c4;
70input waysel_err_c3; // Active when multiple way sel is on
71input [8:0] set_c3b; // After b-latch
72input coloff_c3b_l; // After b-latch+inv
73input coloff_c4_l; // stage+inv
74input [1:0] coloff_c5; // 2-stage
75input wen_c3b; // Write-enable, after b-latch
76input readen_c5; //
77input [3:0] worden_c3b; // After b-latch
78input l1clk; // After l1clk hdr
79input [19:0] wrd_lo0_b_l; //
80input [18:0] wrd_lo1_b_l; //
81input [19:0] wrd_hi0_b_l; //
82input [18:0] wrd_hi1_b_l; //
83input [9:0] red_adr; // Redudancy address
84input [77:0] cred; // Redudancy address
85input tstmodclk_l; //NEW
86input wee_l; //NEW
87input vnw_ary; //NEW
88
89//output bnken_lat; // Address latch enable (1.5cycle)
90output [19:0] saout_lo0_bc_l; // C5bc output from senseamp
91output [18:0] saout_lo1_bc_l; // C5bc output from senseamp
92output [19:0] saout_hi0_bc_l; // C5bc output from senseamp
93output [18:0] saout_hi1_bc_l; // C5bc output from senseamp
94
95//reg rd_data_out_sel_c5b;
96//reg select_read_data_c5b;
97reg select_read_data_c5b_hi_rgt;
98reg select_read_data_c5b_hi_lft;
99reg select_read_data_c5b_lo_rgt;
100reg select_read_data_c5b_lo_lft;
101reg select_read_data_all_c5b;
102reg select_read_red_all_c5b;
103
104//reg select_read_red_c5b;
105reg select_read_red_c5b_hi_rgt;
106reg select_read_red_c5b_hi_lft;
107reg select_read_red_c5b_lo_rgt;
108reg select_read_red_c5b_lo_lft;
109
110//reg bnken_lat;
111
112reg [19:0] saout_lo0_bc_l; // C5bc output from senseamp
113reg [18:0] saout_lo1_bc_l; // C5bc output from senseamp
114reg [19:0] saout_hi0_bc_l; // C5bc output from senseamp
115reg [18:0] saout_hi1_bc_l; // C5bc output from senseamp
116
117reg [79:0] read_data;
118wire [79:0] rd_data;
119wire [79:0] wr_data;
120reg rd_spare_0,rd_spare_1;
121wire wr_spare_0,wr_spare_1;
122
123wire [19:0] saout_hi0_b_out_l, saout_lo0_b_out_l;
124wire [18:0] saout_hi1_b_out_l, saout_lo1_b_out_l;
125wire [19:0] red_lo0_b_out_l;
126wire [18:0] red_lo1_b_out_l;
127wire [19:0] red_hi0_b_out_l;
128wire [18:0] red_hi1_b_out_l;
129
130wire [1:0] coloff_c5_rgt;
131wire [1:0] coloff_c5_lft;
132wire red_sel_rgt;
133wire red_sel_lft;
134
135
136
137
138reg [19:0] mem_lo0_way0 [255:0];
139reg [18:0] mem_lo1_way0 [255:0];
140reg [19:0] mem_hi0_way0 [255:0];
141reg [18:0] mem_hi1_way0 [255:0];
142reg [255:0] mem_way0_spare_0;
143reg [255:0] mem_way0_spare_1;
144
145reg [19:0] mem_lo0_way1 [255:0];
146reg [18:0] mem_lo1_way1 [255:0];
147reg [19:0] mem_hi0_way1 [255:0];
148reg [18:0] mem_hi1_way1 [255:0];
149reg [255:0] mem_way1_spare_0;
150reg [255:0] mem_way1_spare_1;
151
152reg [19:0] mem_lo0_way2 [255:0];
153reg [18:0] mem_lo1_way2 [255:0];
154reg [19:0] mem_hi0_way2 [255:0];
155reg [18:0] mem_hi1_way2 [255:0];
156reg [255:0] mem_way2_spare_0;
157reg [255:0] mem_way2_spare_1;
158
159
160reg [19:0] mem_lo0_way3 [255:0];
161reg [18:0] mem_lo1_way3 [255:0];
162reg [19:0] mem_hi0_way3 [255:0];
163reg [18:0] mem_hi1_way3 [255:0];
164reg [255:0] mem_way3_spare_0;
165reg [255:0] mem_way3_spare_1;
166
167
168reg [19:0] mem_lo0_way4 [255:0];
169reg [18:0] mem_lo1_way4 [255:0];
170reg [19:0] mem_hi0_way4 [255:0];
171reg [18:0] mem_hi1_way4 [255:0];
172reg [255:0] mem_way4_spare_0;
173reg [255:0] mem_way4_spare_1;
174
175
176reg [19:0] mem_lo0_way5 [255:0];
177reg [18:0] mem_lo1_way5 [255:0];
178reg [19:0] mem_hi0_way5 [255:0];
179reg [18:0] mem_hi1_way5 [255:0];
180reg [255:0] mem_way5_spare_0;
181reg [255:0] mem_way5_spare_1;
182
183
184reg [19:0] mem_lo0_way6 [255:0];
185reg [18:0] mem_lo1_way6 [255:0];
186reg [19:0] mem_hi0_way6 [255:0];
187reg [18:0] mem_hi1_way6 [255:0];
188reg [255:0] mem_way6_spare_0;
189reg [255:0] mem_way6_spare_1;
190
191
192reg [19:0] mem_lo0_way7 [255:0];
193reg [18:0] mem_lo1_way7 [255:0];
194reg [19:0] mem_hi0_way7 [255:0];
195reg [18:0] mem_hi1_way7 [255:0];
196reg [255:0] mem_way7_spare_0;
197reg [255:0] mem_way7_spare_1;
198
199//reg bnken_lat_c52;
200reg [19:0] saout_lo0_bc; // C5bc output from senseamp
201reg [18:0] saout_lo1_bc; // C5bc output from senseamp
202reg [19:0] saout_hi0_bc; // C5bc output from senseamp
203reg [18:0] saout_hi1_bc; // C5bc output from senseamp
204
205
206//reg [19:0] saout_lo0_bc_d; // C5bc output from senseamp
207//reg [18:0] saout_lo1_bc_d; // C5bc output from senseamp
208//reg [19:0] saout_hi0_bc_d; // C5bc output from senseamp
209//reg [18:0] saout_hi1_bc_d; // C5bc output from senseamp
210
211//reg set_banken_lat, reset_banken_lat;
212
213reg [19:0] saout_lo0_bc_c5b_l;
214reg [18:0] saout_lo1_bc_c5b_l;
215reg [19:0] saout_hi0_bc_c5b_l;
216reg [18:0] saout_hi1_bc_c5b_l;
217
218reg [19:0] saout_lo0_bc_d_l;
219reg [18:0] saout_lo1_bc_d_l;
220reg [19:0] saout_hi0_bc_d_l;
221reg [18:0] saout_hi1_bc_d_l;
222
223
224assign coloff_c3b_l_unused = coloff_c3b_l;
225
226
227//always@(posedge l1clk)
228//begin
229// if(~coloff_c3b_l)
230// set_banken_lat <= 1'b1;
231// else set_banken_lat <= 1'b0;
232//end
233//
234//always@(negedge l1clk)
235//begin
236// if(coloff_c4_l)
237// reset_banken_lat <= 1'b1;
238// else reset_banken_lat <= 1'b0;
239//end
240//
241//always@(set_banken_lat or reset_banken_lat)
242//begin
243// if(set_banken_lat )
244// bnken_lat <= 1'b1;
245// else if(reset_banken_lat )
246// bnken_lat <= 1'b0;
247//end
248
249
250reg [7:0] waysel_c5;
251reg [8:0] index_c4;
252reg [8:0] set_c5;
253reg wen_c4;
254reg [3:0] worden_c4;
255
256
257
258reg bank_select_c5;
259reg waysel_err_c3b, waysel_err_c4,waysel_err_c5;
260
261always@(l1clk or coloff_c4_l)
262begin
263 if(~l1clk & coloff_c4_l)
264 waysel_err_c3b <= waysel_err_c3;
265end
266
267
268
269
270
271always@(posedge l1clk)
272begin
273 waysel_err_c4 <= waysel_err_c3b;
274 waysel_err_c5 <= waysel_err_c4;
275 waysel_c5[7:0] <= waysel_c4[7:0];
276 index_c4[8:0] <= set_c3b[8:0];
277 set_c5[8:0] <= index_c4[8:0];
278 worden_c4[3:0] <= worden_c3b[3:0];
279 wen_c4 <= wen_c3b;
280 bank_select_c5 <= bank_select;
281end
282
283
284assign coloff_c4 = ~coloff_c4_l;
285assign bank_select = index_c4[8];
286
287//reg [19:0] saout_lo0_bc_c5b;
288//reg [18:0] saout_lo1_bc_c5b;
289//reg [19:0] saout_hi0_bc_c5b;
290//reg [18:0] saout_hi1_bc_c5b;
291
292
293
294
295
296
297assign set_c4[7:0] = index_c4[7:0];
298wire [19:0] wrd_lo0_a;
299wire [19:0] wrd_hi0_a;
300wire [18:0] wrd_lo1_a;
301wire [18:0] wrd_hi1_a;
302
303reg [19:0] wrd_lo0_a_reg;
304reg [19:0] wrd_hi0_a_reg;
305reg [18:0] wrd_lo1_a_reg;
306reg [18:0] wrd_hi1_a_reg;
307
308
309always@(posedge l1clk)
310begin
311wrd_lo0_a_reg[19:0] <= ~wrd_lo0_b_l[19:0];
312wrd_hi0_a_reg[19:0] <= ~wrd_hi0_b_l[19:0];
313wrd_lo1_a_reg[18:0] <= ~wrd_lo1_b_l[18:0];
314wrd_hi1_a_reg[18:0] <= ~wrd_hi1_b_l[18:0];
315end
316
317
318
319// COL redudancy
320
321//reg [255:0] red_reg1;
322//reg [255:0] red_reg2;
323
324wire [79:0] cred_mod;
325
326
327assign cred_mod[79:0] = {cred[77:59],1'b0,cred[58:19],1'b0,cred[18:0]};
328
329
330//assign spare_word_enable[1] = cred_mod[19] ? worden_c4[3] : worden_c4[2];
331//assign spare_word_enable[0] = cred_mod[59] ? worden_c4[3] : worden_c4[2];
332
333
334assign wr_data[19:0] =
335{wr_spare_0, wrd_lo1_a_reg[4], wrd_hi0_a_reg[4],wrd_lo0_a_reg[4],
336wrd_hi1_a_reg[3], wrd_lo1_a_reg[3], wrd_hi0_a_reg[3],wrd_lo0_a_reg[3],
337wrd_hi1_a_reg[2], wrd_lo1_a_reg[2], wrd_hi0_a_reg[2],wrd_lo0_a_reg[2],
338wrd_hi1_a_reg[1], wrd_lo1_a_reg[1], wrd_hi0_a_reg[1],wrd_lo0_a_reg[1],
339wrd_hi1_a_reg[0], wrd_lo1_a_reg[0], wrd_hi0_a_reg[0],wrd_lo0_a_reg[0]};
340
341assign wr_data[39:20] = {
342 wrd_lo1_a_reg[9], wrd_hi0_a_reg[9],wrd_lo0_a_reg[9],
343wrd_hi1_a_reg[8], wrd_lo1_a_reg[8], wrd_hi0_a_reg[8],wrd_lo0_a_reg[8],
344wrd_hi1_a_reg[7], wrd_lo1_a_reg[7], wrd_hi0_a_reg[7],wrd_lo0_a_reg[7],
345wrd_hi1_a_reg[6], wrd_lo1_a_reg[6], wrd_hi0_a_reg[6],wrd_lo0_a_reg[6],
346wrd_hi1_a_reg[5], wrd_lo1_a_reg[5], wrd_hi0_a_reg[5],wrd_lo0_a_reg[5], wrd_hi1_a_reg[4]};
347
348
349assign wr_data[59:40] = {
350wrd_lo1_a_reg[14], wrd_hi0_a_reg[14],wrd_lo0_a_reg[14],
351wrd_hi1_a_reg[13], wrd_lo1_a_reg[13], wrd_hi0_a_reg[13],wrd_lo0_a_reg[13],
352wrd_hi1_a_reg[12], wrd_lo1_a_reg[12], wrd_hi0_a_reg[12],wrd_lo0_a_reg[12],
353wrd_hi1_a_reg[11], wrd_lo1_a_reg[11], wrd_hi0_a_reg[11],wrd_lo0_a_reg[11],
354wrd_hi1_a_reg[10], wrd_lo1_a_reg[10], wrd_hi0_a_reg[10],wrd_lo0_a_reg[10], wrd_hi1_a_reg[9]};
355
356assign wr_data[79:60] = {
357wrd_hi0_a_reg[19], wrd_lo0_a_reg[19],
358wrd_hi1_a_reg[18], wrd_lo1_a_reg[18], wrd_hi0_a_reg[18],wrd_lo0_a_reg[18],
359wrd_hi1_a_reg[17], wrd_lo1_a_reg[17], wrd_hi0_a_reg[17],wrd_lo0_a_reg[17],
360wrd_hi1_a_reg[16], wrd_lo1_a_reg[16], wrd_hi0_a_reg[16],wrd_lo0_a_reg[16],
361wrd_hi1_a_reg[15], wrd_lo1_a_reg[15], wrd_hi0_a_reg[15],wrd_lo0_a_reg[15], wrd_hi1_a_reg[14],wr_spare_1};
362
363
364integer i;
365reg [80:0] data;
366
367always@(cred_mod or wr_data)
368begin
369if (~cred_mod[0]) begin
370 data[0] = wr_data[0];
371end
372
373for(i=0; i<18; i=i+1)
374begin
375 data[i+1] = cred_mod[i] ? wr_data[i] : wr_data[i+1];
376end
377
378data[19] = cred_mod[18] ? wr_data[18] : cred_mod[20] ? wr_data[20] : 1'b0;
379
380for(i=21;i<40;i=i+1)
381begin
382 data[i-1] = cred_mod[i] ? wr_data[i] : wr_data[i-1];
383end
384
385
386if (~cred_mod[39]) begin
387 data[39] = wr_data[39];
388end
389
390if (~cred_mod[40]) begin
391 data[40] = wr_data[40];
392end
393
394for(i=40;i<59;i=i+1)
395begin
396 data[i+1] = cred_mod[i] ? wr_data[i] : wr_data[i+1];
397end
398
399data[60] = cred_mod[59] ? wr_data[59] : cred_mod[61] ? wr_data[61] : 1'b0;
400
401for(i=62;i<80;i=i+1)
402begin
403 data[i-1] = cred_mod[i] ? wr_data[i] : wr_data[i-1];
404end
405
406if (~cred_mod[79]) begin
407 data[79] = wr_data[79];
408end
409
410end
411
412
413assign { wrd_hi0_a[19], wrd_lo0_a[19],
414wrd_hi1_a[18], wrd_lo1_a[18], wrd_hi0_a[18],wrd_lo0_a[18],
415wrd_hi1_a[17], wrd_lo1_a[17], wrd_hi0_a[17],wrd_lo0_a[17],
416wrd_hi1_a[16], wrd_lo1_a[16], wrd_hi0_a[16],wrd_lo0_a[16],
417wrd_hi1_a[15], wrd_lo1_a[15], wrd_hi0_a[15],wrd_lo0_a[15],
418wrd_hi1_a[14],wr_spare_1} = data[79:60];
419
420assign {
421wrd_lo1_a[14], wrd_hi0_a[14],wrd_lo0_a[14],
422wrd_hi1_a[13], wrd_lo1_a[13], wrd_hi0_a[13],wrd_lo0_a[13],
423wrd_hi1_a[12], wrd_lo1_a[12], wrd_hi0_a[12],wrd_lo0_a[12],
424wrd_hi1_a[11], wrd_lo1_a[11], wrd_hi0_a[11],wrd_lo0_a[11],
425wrd_hi1_a[10], wrd_lo1_a[10], wrd_hi0_a[10],wrd_lo0_a[10],wrd_hi1_a[9]} = data[59:40];
426
427assign {
428wrd_lo1_a[9], wrd_hi0_a[9],wrd_lo0_a[9],
429wrd_hi1_a[8], wrd_lo1_a[8], wrd_hi0_a[8],wrd_lo0_a[8],
430wrd_hi1_a[7], wrd_lo1_a[7], wrd_hi0_a[7],wrd_lo0_a[7],
431wrd_hi1_a[6], wrd_lo1_a[6], wrd_hi0_a[6],wrd_lo0_a[6],
432wrd_hi1_a[5], wrd_lo1_a[5], wrd_hi0_a[5],wrd_lo0_a[5], wrd_hi1_a[4]} = data[39:20];
433
434assign {
435wr_spare_0, wrd_lo1_a[4], wrd_hi0_a[4],wrd_lo0_a[4],
436wrd_hi1_a[3], wrd_lo1_a[3], wrd_hi0_a[3],wrd_lo0_a[3],
437wrd_hi1_a[2], wrd_lo1_a[2], wrd_hi0_a[2],wrd_lo0_a[2],
438wrd_hi1_a[1], wrd_lo1_a[1], wrd_hi0_a[1],wrd_lo0_a[1],
439wrd_hi1_a[0], wrd_lo1_a[0], wrd_hi0_a[0],wrd_lo0_a[0]} = data[19:0];
440
441
442
443wire [79:0] worden_data;
444wire [19:0] worden_lo0;
445wire [19:0] worden_hi0;
446wire [18:0] worden_lo1;
447wire [18:0] worden_hi1;
448
449
450assign worden_data[19:0] =
451{spare_word_enable[0], worden_c4[2], worden_c4[1],worden_c4[0],
452worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
453worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
454worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
455worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0]};
456
457assign worden_data[39:20] = {
458 worden_c4[2], worden_c4[1],worden_c4[0],
459worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
460worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
461worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
462worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3]};
463
464
465assign worden_data[59:40] = {
466 worden_c4[2], worden_c4[1],worden_c4[0],
467worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
468worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
469worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
470worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3]};
471
472assign worden_data[79:60] = {
473 worden_c4[1],worden_c4[0],
474worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
475worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
476worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
477worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3],spare_word_enable[1]};
478
479reg [79:0] worden_shift;
480
481
482
483always@(cred_mod or worden_data or wen_c4 or coloff_c4)
484begin
485if (wen_c4 & coloff_c4)
486begin
487if (~cred_mod[0]) begin
488 worden_shift[0] = worden_data[0];
489end
490
491for(i=0; i<18; i=i+1)
492begin
493 worden_shift[i+1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i+1] ? worden_data[i+1] : 1'b0;
494end
495
496worden_shift[19] = cred_mod[18] ? worden_data[18] : cred_mod[20] ? worden_data[20] : 1'b0;
497
498for(i=21;i<40;i=i+1)
499begin
500 worden_shift[i-1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i-1] ? worden_data[i-1] : 1'b0;
501end
502
503
504if (~cred_mod[39]) begin
505 worden_shift[39] = worden_data[39];
506end
507
508if (~cred_mod[40]) begin
509 worden_shift[40] = worden_data[40];
510end
511
512for(i=40;i<59;i=i+1)
513begin
514 worden_shift[i+1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i+1] ? worden_data[i+1] : 1'b0;
515end
516
517worden_shift[60] = cred_mod[59] ? worden_data[59] : cred_mod[61] ? worden_data[61] : 1'b0;
518
519for(i=62;i<80;i=i+1)
520begin
521 worden_shift[i-1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i-1] ? worden_data[i-1] : 1'b0;
522end
523
524if (~cred_mod[79]) begin
525 worden_shift[79] = worden_data[79];
526end
527
528end
529else worden_shift[79:0] = 80'b0;
530
531end
532
533
534assign { worden_hi0[19], worden_lo0[19],
535worden_hi1[18], worden_lo1[18], worden_hi0[18],worden_lo0[18],
536worden_hi1[17], worden_lo1[17], worden_hi0[17],worden_lo0[17],
537worden_hi1[16], worden_lo1[16], worden_hi0[16],worden_lo0[16],
538worden_hi1[15], worden_lo1[15], worden_hi0[15],worden_lo0[15],
539worden_hi1[14],spare_word_enable[1]} = worden_shift[79:60];
540
541assign {
542worden_lo1[14], worden_hi0[14],worden_lo0[14],
543worden_hi1[13], worden_lo1[13], worden_hi0[13],worden_lo0[13],
544worden_hi1[12], worden_lo1[12], worden_hi0[12],worden_lo0[12],
545worden_hi1[11], worden_lo1[11], worden_hi0[11],worden_lo0[11],
546worden_hi1[10], worden_lo1[10], worden_hi0[10],worden_lo0[10],worden_hi1[9]} = worden_shift[59:40];
547
548assign {
549worden_lo1[9], worden_hi0[9],worden_lo0[9],
550worden_hi1[8], worden_lo1[8], worden_hi0[8],worden_lo0[8],
551worden_hi1[7], worden_lo1[7], worden_hi0[7],worden_lo0[7],
552worden_hi1[6], worden_lo1[6], worden_hi0[6],worden_lo0[6],
553worden_hi1[5], worden_lo1[5], worden_hi0[5],worden_lo0[5], worden_hi1[4]} = worden_shift[39:20];
554
555assign {
556spare_word_enable[0], worden_lo1[4], worden_hi0[4],worden_lo0[4],
557worden_hi1[3], worden_lo1[3], worden_hi0[3],worden_lo0[3],
558worden_hi1[2], worden_lo1[2], worden_hi0[2],worden_lo0[2],
559worden_hi1[1], worden_lo1[1], worden_hi0[1],worden_lo0[1],
560worden_hi1[0], worden_lo1[0], worden_hi0[0],worden_lo0[0]} = worden_shift[19:0];
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579always@(l1clk or wen_c4 or set_c4 or waysel_c4 or waysel_err_c4 or worden_c4 or wrd_lo0_a or
580 wrd_hi0_a or wrd_lo1_a or wrd_hi1_a or coloff_c4 or bank_select or wr_spare_0 or
581 wr_spare_1 or wee_l or worden_hi0 or worden_lo0 or worden_lo1 or worden_hi1 or spare_word_enable
582 or vnw_ary)
583begin
584
585////////////////////////////////////////////////////////////////
586// Read all entries for a given set
587////////////////////////////////////////////////////////////////
588
589////////////////////////////////////////////////////////////////
590// Write data computation
591////////////////////////////////////////////////////////////////
592
593///////////////////////////////////////////////////////////////
594// Write to memory
595//////////////////////////////////////////////////////////////
596
597
598
599 #0
600
601
602//if(wen_c4 & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4))
603if(~l1clk & wee_l & wen_c4 & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
604begin
605 if(waysel_c4[0])
606 begin
607 mem_lo0_way0[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way0[set_c4]);
608 mem_hi0_way0[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way0[set_c4]);
609 mem_lo1_way0[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way0[set_c4]);
610 mem_hi1_way0[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way0[set_c4]);
611 mem_way0_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way0_spare_0[set_c4]);
612 mem_way0_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way0_spare_1[set_c4]);
613 end
614 else if(waysel_c4[1])
615 begin
616 mem_lo0_way1[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way1[set_c4]);
617 mem_hi0_way1[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way1[set_c4]);
618 mem_lo1_way1[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way1[set_c4]);
619 mem_hi1_way1[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way1[set_c4]);
620 mem_way1_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way1_spare_0[set_c4]);
621 mem_way1_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way1_spare_1[set_c4]);
622 end
623 else if(waysel_c4[2])
624 begin
625 mem_lo0_way2[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way2[set_c4]);
626 mem_lo1_way2[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way2[set_c4]);
627 mem_hi0_way2[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way2[set_c4]);
628 mem_hi1_way2[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way2[set_c4]);
629 mem_way2_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way2_spare_0[set_c4]);
630 mem_way2_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way2_spare_1[set_c4]);
631 end
632 else if(waysel_c4[3])
633 begin
634 mem_lo0_way3[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way3[set_c4]);
635 mem_lo1_way3[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way3[set_c4]);
636 mem_hi0_way3[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way3[set_c4]);
637 mem_hi1_way3[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way3[set_c4]);
638 mem_way3_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way3_spare_0[set_c4]);
639 mem_way3_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way3_spare_1[set_c4]);
640 end
641 else if(waysel_c4[4])
642 begin
643 mem_lo0_way4[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way4[set_c4]);
644 mem_lo1_way4[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way4[set_c4]);
645 mem_hi0_way4[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way4[set_c4]);
646 mem_hi1_way4[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way4[set_c4]);
647 mem_way4_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way4_spare_0[set_c4]);
648 mem_way4_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way4_spare_1[set_c4]);
649 end
650 else if(waysel_c4[5])
651 begin
652 mem_lo0_way5[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way5[set_c4]);
653 mem_lo1_way5[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way5[set_c4]);
654 mem_hi0_way5[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way5[set_c4]);
655 mem_hi1_way5[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way5[set_c4]);
656 mem_way5_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way5_spare_0[set_c4]);
657 mem_way5_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way5_spare_1[set_c4]);
658 end
659 else if(waysel_c4[6])
660 begin
661 mem_lo0_way6[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way6[set_c4]);
662 mem_lo1_way6[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way6[set_c4]);
663 mem_hi0_way6[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way6[set_c4]);
664 mem_hi1_way6[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way6[set_c4]);
665 mem_way6_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way6_spare_0[set_c4]);
666 mem_way6_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way6_spare_1[set_c4]);
667 end
668 else if(waysel_c4[7])
669 begin
670 mem_lo0_way7[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way7[set_c4]);
671 mem_lo1_way7[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way7[set_c4]);
672 mem_hi0_way7[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way7[set_c4]);
673 mem_hi1_way7[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way7[set_c4]);
674 mem_way7_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way7_spare_0[set_c4]);
675 mem_way7_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way7_spare_1[set_c4]);
676 end
677 end
678end
679
680//always@(waysel_c4 or set_c4 or bnken_lat )
681always@(waysel_c4 or set_c4 or coloff_c4_l or vnw_ary)
682
683begin
684
685
686 #0
687
688if(~coloff_c4_l & vnw_ary)
689begin
690 if(waysel_c4[0])
691 begin
692 saout_lo0_bc[19:0] <= mem_lo0_way0[set_c4];
693 saout_lo1_bc[18:0] <= mem_lo1_way0[set_c4];
694 saout_hi0_bc[19:0] <= mem_hi0_way0[set_c4];
695 saout_hi1_bc[18:0] <= mem_hi1_way0[set_c4];
696 rd_spare_0 <= mem_way0_spare_0[set_c4];
697 rd_spare_1 <= mem_way0_spare_1[set_c4];
698 end
699 else if(waysel_c4[1])
700 begin
701 saout_lo0_bc[19:0] <= mem_lo0_way1[set_c4];
702 saout_lo1_bc[18:0] <= mem_lo1_way1[set_c4];
703 saout_hi0_bc[19:0] <= mem_hi0_way1[set_c4];
704 saout_hi1_bc[18:0] <= mem_hi1_way1[set_c4];
705 rd_spare_0 <= mem_way1_spare_0[set_c4];
706 rd_spare_1 <= mem_way1_spare_1[set_c4];
707 end
708 else if(waysel_c4[2])
709 begin
710 saout_lo0_bc[19:0] <= mem_lo0_way2[set_c4];
711 saout_lo1_bc[18:0] <= mem_lo1_way2[set_c4];
712 saout_hi0_bc[19:0] <= mem_hi0_way2[set_c4];
713 saout_hi1_bc[18:0] <= mem_hi1_way2[set_c4];
714 rd_spare_0 <= mem_way2_spare_0[set_c4];
715 rd_spare_1 <= mem_way2_spare_1[set_c4];
716 end
717 else if(waysel_c4[3])
718 begin
719 saout_lo0_bc[19:0] <= mem_lo0_way3[set_c4];
720 saout_lo1_bc[18:0] <= mem_lo1_way3[set_c4];
721 saout_hi0_bc[19:0] <= mem_hi0_way3[set_c4];
722 saout_hi1_bc[18:0] <= mem_hi1_way3[set_c4];
723 rd_spare_0 <= mem_way3_spare_0[set_c4];
724 rd_spare_1 <= mem_way3_spare_1[set_c4];
725 end
726 else if(waysel_c4[4])
727 begin
728 saout_lo0_bc[19:0] <= mem_lo0_way4[set_c4];
729 saout_lo1_bc[18:0] <= mem_lo1_way4[set_c4];
730 saout_hi0_bc[19:0] <= mem_hi0_way4[set_c4];
731 saout_hi1_bc[18:0] <= mem_hi1_way4[set_c4];
732 rd_spare_0 <= mem_way4_spare_0[set_c4];
733 rd_spare_1 <= mem_way4_spare_1[set_c4];
734 end
735 else if(waysel_c4[5])
736 begin
737 saout_lo0_bc[19:0] <= mem_lo0_way5[set_c4];
738 saout_lo1_bc[18:0] <= mem_lo1_way5[set_c4];
739 saout_hi0_bc[19:0] <= mem_hi0_way5[set_c4];
740 saout_hi1_bc[18:0] <= mem_hi1_way5[set_c4];
741 rd_spare_0 <= mem_way5_spare_0[set_c4];
742 rd_spare_1 <= mem_way5_spare_1[set_c4];
743 end
744 else if(waysel_c4[6])
745 begin
746 saout_lo0_bc[19:0] <= mem_lo0_way6[set_c4];
747 saout_lo1_bc[18:0] <= mem_lo1_way6[set_c4];
748 saout_hi0_bc[19:0] <= mem_hi0_way6[set_c4];
749 saout_hi1_bc[18:0] <= mem_hi1_way6[set_c4];
750 rd_spare_0 <= mem_way6_spare_0[set_c4];
751 rd_spare_1 <= mem_way6_spare_1[set_c4];
752 end
753 else if(waysel_c4[7])
754 begin
755 saout_lo0_bc[19:0] <= mem_lo0_way7[set_c4];
756 saout_lo1_bc[18:0] <= mem_lo1_way7[set_c4];
757 saout_hi0_bc[19:0] <= mem_hi0_way7[set_c4];
758 saout_hi1_bc[18:0] <= mem_hi1_way7[set_c4];
759 rd_spare_0 <= mem_way7_spare_0[set_c4];
760 rd_spare_1 <= mem_way7_spare_1[set_c4];
761 end
762end
763end
764
765
766// READ
767// Data is read out of the above array in c4 and gets registered and latched
768// to become a c5b signal which gets muxed and goes to dmux
769
770
771reg rd_spare_0_d_l,rd_spare_1_d_l;
772reg rdd_spare_0,rdd_spare_1;
773reg tstmodclk_c3b_l;
774always@(posedge l1clk)
775begin
776 saout_lo0_bc_d_l[19:0] <= ~saout_lo0_bc[19:0];
777 saout_lo1_bc_d_l[18:0] <= ~saout_lo1_bc[18:0];
778 saout_hi0_bc_d_l[19:0] <= ~saout_hi0_bc[19:0];
779 saout_hi1_bc_d_l[18:0] <= ~saout_hi1_bc[18:0];
780 rd_spare_0_d_l <= ~rd_spare_0;
781 rd_spare_1_d_l <= ~rd_spare_1;
782end
783
784always@(negedge l1clk)
785begin
786 saout_lo0_bc_c5b_l[19:0] <= saout_lo0_bc_d_l[19:0];
787 saout_lo1_bc_c5b_l[18:0] <= saout_lo1_bc_d_l[18:0];
788 saout_hi0_bc_c5b_l[19:0] <= saout_hi0_bc_d_l[19:0];
789 saout_hi1_bc_c5b_l[18:0] <= saout_hi1_bc_d_l[18:0];
790 rdd_spare_0 <= rd_spare_0_d_l;
791 rdd_spare_1 <= rd_spare_1_d_l;
792 tstmodclk_c3b_l <= tstmodclk_l;
793end
794
795
796assign rd_data[19:0] =
797 {rdd_spare_0, saout_lo1_bc_c5b_l[4], saout_hi0_bc_c5b_l[4],saout_lo0_bc_c5b_l[4],
798 saout_hi1_bc_c5b_l[3], saout_lo1_bc_c5b_l[3], saout_hi0_bc_c5b_l[3],saout_lo0_bc_c5b_l[3],
799 saout_hi1_bc_c5b_l[2], saout_lo1_bc_c5b_l[2], saout_hi0_bc_c5b_l[2],saout_lo0_bc_c5b_l[2],
800 saout_hi1_bc_c5b_l[1], saout_lo1_bc_c5b_l[1], saout_hi0_bc_c5b_l[1],saout_lo0_bc_c5b_l[1],
801 saout_hi1_bc_c5b_l[0], saout_lo1_bc_c5b_l[0], saout_hi0_bc_c5b_l[0],saout_lo0_bc_c5b_l[0]};
802
803 assign rd_data[39:20] = {
804 saout_lo1_bc_c5b_l[9], saout_hi0_bc_c5b_l[9],saout_lo0_bc_c5b_l[9],
805 saout_hi1_bc_c5b_l[8], saout_lo1_bc_c5b_l[8], saout_hi0_bc_c5b_l[8],saout_lo0_bc_c5b_l[8],
806 saout_hi1_bc_c5b_l[7], saout_lo1_bc_c5b_l[7], saout_hi0_bc_c5b_l[7],saout_lo0_bc_c5b_l[7],
807 saout_hi1_bc_c5b_l[6], saout_lo1_bc_c5b_l[6], saout_hi0_bc_c5b_l[6],saout_lo0_bc_c5b_l[6],
808 saout_hi1_bc_c5b_l[5], saout_lo1_bc_c5b_l[5], saout_hi0_bc_c5b_l[5],saout_lo0_bc_c5b_l[5], saout_hi1_bc_c5b_l[4]};
809
810
811 assign rd_data[59:40] = {
812 saout_lo1_bc_c5b_l[14], saout_hi0_bc_c5b_l[14],saout_lo0_bc_c5b_l[14],
813 saout_hi1_bc_c5b_l[13], saout_lo1_bc_c5b_l[13], saout_hi0_bc_c5b_l[13],saout_lo0_bc_c5b_l[13],
814 saout_hi1_bc_c5b_l[12], saout_lo1_bc_c5b_l[12], saout_hi0_bc_c5b_l[12],saout_lo0_bc_c5b_l[12],
815 saout_hi1_bc_c5b_l[11], saout_lo1_bc_c5b_l[11], saout_hi0_bc_c5b_l[11],saout_lo0_bc_c5b_l[11],
816 saout_hi1_bc_c5b_l[10], saout_lo1_bc_c5b_l[10], saout_hi0_bc_c5b_l[10],saout_lo0_bc_c5b_l[10], saout_hi1_bc_c5b_l[9]};
817
818 assign rd_data[79:60] = {
819 saout_hi0_bc_c5b_l[19], saout_lo0_bc_c5b_l[19],
820 saout_hi1_bc_c5b_l[18], saout_lo1_bc_c5b_l[18], saout_hi0_bc_c5b_l[18],saout_lo0_bc_c5b_l[18],
821 saout_hi1_bc_c5b_l[17], saout_lo1_bc_c5b_l[17], saout_hi0_bc_c5b_l[17],saout_lo0_bc_c5b_l[17],
822 saout_hi1_bc_c5b_l[16], saout_lo1_bc_c5b_l[16], saout_hi0_bc_c5b_l[16],saout_lo0_bc_c5b_l[16],
823 saout_hi1_bc_c5b_l[15], saout_lo1_bc_c5b_l[15], saout_hi0_bc_c5b_l[15],saout_lo0_bc_c5b_l[15], saout_hi1_bc_c5b_l[14],rdd_spare_1};
824
825
826 always@(cred_mod or rd_data)
827 begin
828
829 for(i=0;i<19;i=i+1)
830 begin
831 read_data[i] = cred_mod[i] ? rd_data[i+1] : rd_data[i];
832 end
833
834 for(i=20;i<40;i=i+1)
835 begin
836 read_data[i] = cred_mod[i] ? rd_data[i-1] : rd_data[i];
837 end
838
839
840 for(i=40;i<60;i=i+1)
841 begin
842 read_data[i] = cred_mod[i] ? rd_data[i+1] : rd_data[i];
843 end
844
845 for(i=61;i<80;i=i+1)
846 begin
847 read_data[i] = cred_mod[i] ? rd_data[i-1] : rd_data[i];
848 end
849
850 end
851
852
853
854 assign { saout_hi0_b_out_l[19], saout_lo0_b_out_l[19],
855 saout_hi1_b_out_l[18], saout_lo1_b_out_l[18], saout_hi0_b_out_l[18],saout_lo0_b_out_l[18],
856 saout_hi1_b_out_l[17], saout_lo1_b_out_l[17], saout_hi0_b_out_l[17],saout_lo0_b_out_l[17],
857 saout_hi1_b_out_l[16], saout_lo1_b_out_l[16], saout_hi0_b_out_l[16],saout_lo0_b_out_l[16],
858 saout_hi1_b_out_l[15], saout_lo1_b_out_l[15], saout_hi0_b_out_l[15],saout_lo0_b_out_l[15],
859 saout_hi1_b_out_l[14]} = read_data[79:61];
860
861 assign {saout_lo1_b_out_l[14], saout_hi0_b_out_l[14],saout_lo0_b_out_l[14],
862 saout_hi1_b_out_l[13], saout_lo1_b_out_l[13], saout_hi0_b_out_l[13],saout_lo0_b_out_l[13],
863 saout_hi1_b_out_l[12], saout_lo1_b_out_l[12], saout_hi0_b_out_l[12],saout_lo0_b_out_l[12],
864 saout_hi1_b_out_l[11], saout_lo1_b_out_l[11], saout_hi0_b_out_l[11],saout_lo0_b_out_l[11],
865 saout_hi1_b_out_l[10], saout_lo1_b_out_l[10], saout_hi0_b_out_l[10],saout_lo0_b_out_l[10],
866 saout_hi1_b_out_l[9]} = read_data[59:40];
867
868 assign { saout_lo1_b_out_l[9], saout_hi0_b_out_l[9],saout_lo0_b_out_l[9],
869 saout_hi1_b_out_l[8], saout_lo1_b_out_l[8], saout_hi0_b_out_l[8],saout_lo0_b_out_l[8],
870 saout_hi1_b_out_l[7], saout_lo1_b_out_l[7], saout_hi0_b_out_l[7],saout_lo0_b_out_l[7],
871 saout_hi1_b_out_l[6], saout_lo1_b_out_l[6], saout_hi0_b_out_l[6],saout_lo0_b_out_l[6],
872 saout_hi1_b_out_l[5], saout_lo1_b_out_l[5], saout_hi0_b_out_l[5],saout_lo0_b_out_l[5],
873 saout_hi1_b_out_l[4]} = read_data[39:20];
874
875 assign {saout_lo1_b_out_l[4], saout_hi0_b_out_l[4],saout_lo0_b_out_l[4],
876 saout_hi1_b_out_l[3], saout_lo1_b_out_l[3], saout_hi0_b_out_l[3],saout_lo0_b_out_l[3],
877 saout_hi1_b_out_l[2], saout_lo1_b_out_l[2], saout_hi0_b_out_l[2],saout_lo0_b_out_l[2],
878 saout_hi1_b_out_l[1], saout_lo1_b_out_l[1], saout_hi0_b_out_l[1],saout_lo0_b_out_l[1],
879 saout_hi1_b_out_l[0], saout_lo1_b_out_l[0], saout_hi0_b_out_l[0],saout_lo0_b_out_l[0]} = read_data[18:0];
880
881assign red_sel_rgt = |cred[19:18];
882assign red_sel_lft = |cred[59:58];
883
884assign coloff_c5_rgt[1] = coloff_c5[1] | red_sel_rgt & coloff_c5[0];
885assign coloff_c5_rgt[0] = coloff_c5[0] | red_sel_rgt & coloff_c5[1];
886assign coloff_c5_lft[1] = coloff_c5[1] | red_sel_lft & coloff_c5[0];
887assign coloff_c5_lft[0] = coloff_c5[0] | red_sel_lft & coloff_c5[1];
888
889
890
891
892
893
894
895
896
897
898
899always@(negedge l1clk)
900begin
901select_read_data_all_c5b <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & (|coloff_c5) & readen_c5 & wee_l & ~waysel_err_c4);
902select_read_red_all_c5b <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & (|coloff_c5) & readen_c5 & wee_l & ~waysel_err_c4);
903
904select_read_data_c5b_hi_rgt <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
905 (readen_c5 & coloff_c5_rgt[1] & ~waysel_err_c5);
906select_read_data_c5b_hi_lft <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
907 (readen_c5 & coloff_c5_lft[1] & ~waysel_err_c5);
908select_read_data_c5b_lo_rgt <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
909 (readen_c5 & coloff_c5_rgt[0] & ~waysel_err_c5);
910select_read_data_c5b_lo_lft <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
911 (readen_c5 & coloff_c5_lft[0] & ~waysel_err_c5);
912select_read_red_c5b_hi_rgt <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
913 (readen_c5 & coloff_c5_rgt[1] & ~waysel_err_c5);
914select_read_red_c5b_hi_lft <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
915 (readen_c5 & coloff_c5_lft[1] & ~waysel_err_c5);
916select_read_red_c5b_lo_rgt <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
917 (readen_c5 & coloff_c5_rgt[0] & ~waysel_err_c5);
918select_read_red_c5b_lo_lft <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
919 (readen_c5 & coloff_c5_lft[0] & ~waysel_err_c5);
920end
921
922
923//assign saout_lo0_bc_l[19:0] = select_read_data_c5b ? saout_lo0_bc_c5b_l[19:0] :
924// select_read_red_c5b ? red_lo0_out[19:0] : 20'hFFFFF;
925//assign saout_lo1_bc_l[18:0] = select_read_data_c5b ? saout_lo1_bc_c5b_l[18:0] :
926// select_read_red_c5b ? red_lo1_out[18:0] : 19'h7FFFF;
927//assign saout_hi0_bc_l[19:0] = select_read_data_c5b ? saout_hi0_bc_c5b_l[19:0] :
928// select_read_red_c5b ? red_hi0_out[19:0] : 20'hFFFFF;
929//assign saout_hi1_bc_l[18:0] = select_read_data_c5b ? saout_hi1_bc_c5b_l[18:0] :
930// select_read_red_c5b ? red_hi1_out[18:0] : 19'h7FFFF;
931//
932always@(select_read_red_c5b_lo_rgt or select_read_red_c5b_lo_lft or select_read_red_c5b_hi_rgt or select_read_red_c5b_hi_lft or
933 select_read_data_c5b_lo_rgt or select_read_data_c5b_lo_lft or select_read_data_c5b_hi_rgt or select_read_data_c5b_hi_lft
934 or red_lo0_b_out_l or red_hi0_b_out_l or red_lo1_b_out_l or saout_hi1_b_out_l
935 or saout_lo0_b_out_l or red_hi0_b_out_l or saout_lo1_b_out_l or saout_hi1_b_out_l or tstmodclk_c3b_l or l1clk)
936begin
937
938if(tstmodclk_c3b_l)
939begin
940saout_lo0_bc_l[9:0] = select_read_red_c5b_lo_rgt ? red_lo0_b_out_l[9:0] :
941 select_read_data_c5b_lo_rgt ? saout_lo0_b_out_l[9:0] : 10'h3FF;
942saout_lo0_bc_l[19:10] = select_read_red_c5b_lo_lft ? red_lo0_b_out_l[19:10] :
943 select_read_data_c5b_lo_lft ? saout_lo0_b_out_l[19:10] : 10'h3FF;
944saout_hi0_bc_l[9:0] = select_read_red_c5b_lo_rgt ? red_hi0_b_out_l[9:0] :
945 select_read_data_c5b_lo_rgt ? saout_hi0_b_out_l[9:0] : 10'h3FF;
946saout_hi0_bc_l[19:10] = select_read_red_c5b_lo_lft ? red_hi0_b_out_l[19:10] :
947 select_read_data_c5b_lo_lft ? saout_hi0_b_out_l[19:10] : 10'h3FF;
948saout_lo1_bc_l[9:0] = select_read_red_c5b_hi_rgt ? red_lo1_b_out_l[9:0] :
949 select_read_data_c5b_hi_rgt ? saout_lo1_b_out_l[9:0] : 10'h3FF;
950saout_lo1_bc_l[18:10] = select_read_red_c5b_hi_lft ? red_lo1_b_out_l[18:10] :
951 select_read_data_c5b_hi_lft ? saout_lo1_b_out_l[18:10] : 9'h1FF;
952saout_hi1_bc_l[8:0] = select_read_red_c5b_hi_rgt ? red_hi1_b_out_l[8:0] :
953 select_read_data_c5b_hi_rgt ? saout_hi1_b_out_l[8:0] : 9'h1FF;
954saout_hi1_bc_l[18:9] = select_read_red_c5b_hi_lft ? red_hi1_b_out_l[18:9] :
955 select_read_data_c5b_hi_lft ? saout_hi1_b_out_l[18:9] : 10'h3FF;
956end
957else
958begin
959saout_lo0_bc_l[19:0] = select_read_red_all_c5b ? red_lo0_b_out_l[19:0] :
960 select_read_data_all_c5b ? saout_lo0_b_out_l[19:0] : 20'bx;
961saout_hi0_bc_l[19:0] = select_read_red_all_c5b ? red_hi0_b_out_l[19:0] :
962 select_read_data_all_c5b ? saout_hi0_b_out_l[19:0] : 20'bx;
963saout_lo1_bc_l[18:0] = select_read_red_all_c5b ? red_lo1_b_out_l[18:0] :
964 select_read_data_all_c5b ? saout_lo1_b_out_l[18:0] : 19'bx;
965saout_hi1_bc_l[18:0] = select_read_red_all_c5b ? red_hi1_b_out_l[18:0] :
966 select_read_data_all_c5b ? saout_hi1_b_out_l[18:0] : 19'bx;
967
968//saout_lo0_bc_l[19:0] = select_read_data_all_c5b ? saout_lo0_bc_c5b_l[19:0] : 20'hFFFFF;
969//saout_lo1_bc_l[18:0] = select_read_data_all_c5b ? saout_lo1_bc_c5b_l[18:0] : 19'hFFFFF;
970//saout_hi0_bc_l[19:0] = select_read_data_all_c5b ? saout_hi0_bc_c5b_l[19:0] : 20'hFFFFF;
971//saout_hi1_bc_l[18:0] = select_read_data_all_c5b ? saout_hi1_bc_c5b_l[18:0] : 19'hFFFFF;
972end
973end
974
975
976//assign repair_saout_lo0_bc_l[9:0] =
977//select_read_red_c5b_lo_rgt ? red_lo0_b_out_l[9:0] : select_read_data_c5b_lo_rgt ? saout_lo0_b_out_l[9:0] : 10'h3FF ;
978//assign repair_saout_lo0_bc_l[19:10] =
979//select_read_red_c5b_lo_lft ? red_lo0_b_out_l[19:10] : select_read_data_c5b_lo_lft ? saout_lo0_b_out_l[19:10] : 10'h3FF ;
980//assign repair_saout_hi0_bc_l[9:0] =
981//select_read_red_c5b_lo_rgt ? red_hi0_b_out_l[9:0] : select_read_data_c5b_lo_rgt ? saout_hi0_b_out_l[9:0] : 10'h3FF ;
982//assign repair_saout_hi0_bc_l[19:10] =
983//select_read_red_c5b_lo_lft ? red_hi0_b_out_l[19:10] : select_read_data_c5b_lo_lft ? saout_hi0_b_out_l[19:10] : 10'h3FF ;
984//assign repair_saout_lo1_bc_l[9:0] =
985//select_read_red_c5b_hi_rgt ? red_lo1_b_out_l[9:0] : select_read_data_c5b_hi_rgt ? saout_lo1_b_out_l[9:0] : 10'h3FF ;
986//assign repair_saout_lo1_bc_l[18:10] =
987//select_read_red_c5b_hi_lft ? red_lo1_b_out_l[18:10] : select_read_data_c5b_hi_lft ? saout_lo1_b_out_l[18:10] : 9'h1FF ;
988//assign repair_saout_hi1_bc_l[8:0] =
989//select_read_red_c5b_hi_rgt ? red_hi1_b_out_l[8:0] : select_read_data_c5b_hi_rgt ? saout_hi1_b_out_l[8:0] : 9'h1FF ;
990//assign repair_saout_hi1_bc_l[18:9] =
991//select_read_red_c5b_hi_lft ? red_hi1_b_out_l[18:9] : select_read_data_c5b_hi_lft ? saout_hi1_b_out_l[18:9] : 10'h3FF ;
992//
993//
994//assign norepair_saout_lo0_bc_l[19:0] = select_read_data_all_c5b ? saout_lo0_bc_c5b_l[19:0] : 20'hFFFFF;
995//assign norepair_saout_lo1_bc_l[18:0] = select_read_data_all_c5b ? saout_lo1_bc_c5b_l[18:0] : 19'hFFFFF;
996//assign norepair_saout_hi0_bc_l[19:0] = select_read_data_all_c5b ? saout_hi0_bc_c5b_l[19:0] : 20'hFFFFF;
997//assign norepair_saout_hi1_bc_l[18:0] = select_read_data_all_c5b ? saout_hi1_bc_c5b_l[18:0] : 19'hFFFFF;
998//
999//`endif
1000//
1001//`ifdef AXIS_SMEM
1002//
1003// always@(negedge l1clk)
1004// begin
1005// axis_saout_lo0_bc[19:0] = saout_lo0_bc[19:0];
1006// axis_saout_lo1_bc[18:0] = saout_lo1_bc[18:0];
1007// axis_saout_hi0_bc[19:0] = saout_hi0_bc[19:0];
1008// axis_saout_hi1_bc[18:0] = saout_hi1_bc[18:0];
1009// end
1010// assign saout_lo0_bc_l[19:0] = axis_select_read_data_c5b ? axis_saout_lo0_bc[19:0] : 20'hFFFFF;
1011// assign saout_lo1_bc_l[18:0] = axis_select_read_data_c5b ? axis_saout_lo1_bc[18:0] : 19'h7FFFF;
1012// assign saout_hi0_bc_l[19:0] = axis_select_read_data_c5b ? axis_saout_hi0_bc[19:0] : 20'hFFFFF;
1013// assign saout_hi1_bc_l[18:0] = axis_select_read_data_c5b ? axis_saout_hi1_bc[18:0] : 19'h7FFFF;
1014//
1015//`else
1016//assign saout_lo0_bc_l[19:0] = ~tstmodclk_c3b_l ? repair_saout_lo0_bc_l[19:0] : norepair_saout_lo0_bc_l[19:0];
1017//assign saout_lo1_bc_l[18:0] = ~tstmodclk_c3b_l ? repair_saout_lo1_bc_l[18:0] : norepair_saout_lo1_bc_l[18:0];
1018//assign saout_hi0_bc_l[19:0] = ~tstmodclk_c3b_l ? repair_saout_hi0_bc_l[19:0] : norepair_saout_hi0_bc_l[19:0];
1019//assign saout_hi1_bc_l[18:0] = ~tstmodclk_c3b_l ? repair_saout_hi1_bc_l[18:0] : norepair_saout_hi1_bc_l[18:0];
1020
1021///////////////////////////////////////////////////////////////////////////////////////////////
1022
1023// REDUDANCY
1024
1025reg [19:0] red_lo0_odd_0;
1026reg [18:0] red_lo1_odd_0;
1027reg [19:0] red_hi0_odd_0;
1028reg [18:0] red_hi1_odd_0;
1029reg [19:0] red_lo0_even_0;
1030reg [18:0] red_lo1_even_0;
1031reg [19:0] red_hi0_even_0;
1032reg [18:0] red_hi1_even_0;
1033reg redrow_way0_spare_odd_0;
1034reg redrow_way0_spare_even_0;
1035reg redrow_way0_spare_odd_1;
1036reg redrow_way0_spare_even_1;
1037
1038reg [19:0] red_lo0_odd_1;
1039reg [18:0] red_lo1_odd_1;
1040reg [19:0] red_hi0_odd_1;
1041reg [18:0] red_hi1_odd_1;
1042reg [19:0] red_lo0_even_1;
1043reg [18:0] red_lo1_even_1;
1044reg [19:0] red_hi0_even_1;
1045reg [18:0] red_hi1_even_1;
1046reg redrow_way1_spare_odd_0;
1047reg redrow_way1_spare_even_0;
1048reg redrow_way1_spare_odd_1;
1049reg redrow_way1_spare_even_1;
1050
1051reg [19:0] red_lo0_odd_2;
1052reg [18:0] red_lo1_odd_2;
1053reg [19:0] red_hi0_odd_2;
1054reg [18:0] red_hi1_odd_2;
1055reg [19:0] red_lo0_even_2;
1056reg [18:0] red_lo1_even_2;
1057reg [19:0] red_hi0_even_2;
1058reg [18:0] red_hi1_even_2;
1059reg redrow_way2_spare_odd_0;
1060reg redrow_way2_spare_even_0;
1061reg redrow_way2_spare_odd_1;
1062reg redrow_way2_spare_even_1;
1063
1064reg [19:0] red_lo0_odd_3;
1065reg [18:0] red_lo1_odd_3;
1066reg [19:0] red_hi0_odd_3;
1067reg [18:0] red_hi1_odd_3;
1068reg [19:0] red_lo0_even_3;
1069reg [18:0] red_lo1_even_3;
1070reg [19:0] red_hi0_even_3;
1071reg [18:0] red_hi1_even_3;
1072reg redrow_way3_spare_odd_0;
1073reg redrow_way3_spare_even_0;
1074reg redrow_way3_spare_odd_1;
1075reg redrow_way3_spare_even_1;
1076
1077reg [19:0] red_lo0_odd_4;
1078reg [18:0] red_lo1_odd_4;
1079reg [19:0] red_hi0_odd_4;
1080reg [18:0] red_hi1_odd_4;
1081reg [19:0] red_lo0_even_4;
1082reg [18:0] red_lo1_even_4;
1083reg [19:0] red_hi0_even_4;
1084reg [18:0] red_hi1_even_4;
1085reg redrow_way4_spare_odd_0;
1086reg redrow_way4_spare_even_0;
1087reg redrow_way4_spare_odd_1;
1088reg redrow_way4_spare_even_1;
1089
1090reg [19:0] red_lo0_odd_5;
1091reg [18:0] red_lo1_odd_5;
1092reg [19:0] red_hi0_odd_5;
1093reg [18:0] red_hi1_odd_5;
1094reg [19:0] red_lo0_even_5;
1095reg [18:0] red_lo1_even_5;
1096reg [19:0] red_hi0_even_5;
1097reg [18:0] red_hi1_even_5;
1098reg redrow_way5_spare_odd_0;
1099reg redrow_way5_spare_even_0;
1100reg redrow_way5_spare_odd_1;
1101reg redrow_way5_spare_even_1;
1102
1103reg [19:0] red_lo0_odd_6;
1104reg [18:0] red_lo1_odd_6;
1105reg [19:0] red_hi0_odd_6;
1106reg [18:0] red_hi1_odd_6;
1107reg [19:0] red_lo0_even_6;
1108reg [18:0] red_lo1_even_6;
1109reg [19:0] red_hi0_even_6;
1110reg [18:0] red_hi1_even_6;
1111reg redrow_way6_spare_odd_0;
1112reg redrow_way6_spare_even_0;
1113reg redrow_way6_spare_odd_1;
1114reg redrow_way6_spare_even_1;
1115
1116reg [19:0] red_lo0_odd_7;
1117reg [18:0] red_lo1_odd_7;
1118reg [19:0] red_hi0_odd_7;
1119reg [18:0] red_hi1_odd_7;
1120reg [19:0] red_lo0_even_7;
1121reg [18:0] red_lo1_even_7;
1122reg [19:0] red_hi0_even_7;
1123reg [18:0] red_hi1_even_7;
1124reg redrow_way7_spare_odd_0;
1125reg redrow_way7_spare_even_0;
1126reg redrow_way7_spare_odd_1;
1127reg redrow_way7_spare_even_1;
1128
1129
1130
1131reg [19:0] red_lo0_out_bc;
1132reg [18:0] red_lo1_out_bc;
1133reg [19:0] red_hi0_out_bc;
1134reg [18:0] red_hi1_out_bc;
1135reg redrow_rd_spare_0;
1136reg redrow_rd_spare_1;
1137
1138reg [19:0] red_lo0_out_bc_d_l;
1139reg [18:0] red_lo1_out_bc_d_l;
1140reg [19:0] red_hi0_out_bc_d_l;
1141reg [18:0] red_hi1_out_bc_d_l;
1142reg redrow_rd_spare_0_d_l;
1143reg redrow_rd_spare_1_d_l;
1144
1145reg [19:0] red_lo0_bc_c5b_l;
1146reg [19:0] red_hi0_bc_c5b_l;
1147reg [18:0] red_lo1_bc_c5b_l;
1148reg [18:0] red_hi1_bc_c5b_l;
1149reg redrow_rdd_spare_0;
1150reg redrow_rdd_spare_1;
1151
1152wire [79:0] red_rd_data;
1153reg [79:0] red_read_data;
1154
1155// Folloing 2 assigns detects a red index to hit with incoming index
1156// and assert. While writing and reading the way info is looked at
1157
1158assign select_red_odd = (red_adr[9:8] == 2'b11) & (red_adr[7:1] == set_c3b[7:1])
1159 & set_c3b[0] & red_adr[0];
1160assign select_red_even = (red_adr[9:8] == 2'b11) & (red_adr[7:1] == set_c3b[7:1])
1161 & ~set_c3b[0] & ~red_adr[0];
1162
1163
1164always@(wee_l or l1clk or wen_c4 or set_c4 or waysel_c4 or waysel_err_c4 or bank_select or coloff_c4 or worden_c4 or
1165 select_red_odd or select_red_even or worden_lo0 or worden_hi0 or worden_lo1 or worden_hi1 or wrd_lo0_a
1166 or wrd_hi0_a or wrd_lo1_a or wrd_hi1_a or wr_spare_0 or wr_spare_1 or spare_word_enable or vnw_ary)
1167begin
1168// Odd row to be written
1169if(~l1clk & wee_l & wen_c4 & select_red_odd & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
1170 begin
1171 if(waysel_c4[0])
1172 begin
1173 red_lo0_odd_0 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_0);
1174 red_hi0_odd_0 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_0);
1175 red_lo1_odd_0 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_0);
1176 red_hi1_odd_0 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_0);
1177 redrow_way0_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way0_spare_odd_0);
1178 redrow_way0_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way0_spare_odd_1);
1179 end
1180 else if(waysel_c4[1])
1181 begin
1182 red_lo0_odd_1 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_1);
1183 red_hi0_odd_1 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_1);
1184 red_lo1_odd_1 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_1);
1185 red_hi1_odd_1 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_1);
1186 redrow_way1_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way1_spare_odd_0);
1187 redrow_way1_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way1_spare_odd_1);
1188 end
1189 else if(waysel_c4[2])
1190 begin
1191 red_lo0_odd_2 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_2);
1192 red_hi0_odd_2 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_2);
1193 red_lo1_odd_2 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_2);
1194 red_hi1_odd_2 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_2);
1195 redrow_way2_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way2_spare_odd_0);
1196 redrow_way2_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way2_spare_odd_1);
1197 end
1198 else if(waysel_c4[3])
1199 begin
1200 red_lo0_odd_3 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_3);
1201 red_hi0_odd_3 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_3);
1202 red_lo1_odd_3 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_3);
1203 red_hi1_odd_3 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_3);
1204 redrow_way3_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way3_spare_odd_0);
1205 redrow_way3_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way3_spare_odd_1);
1206 end
1207 else if(waysel_c4[4])
1208 begin
1209 red_lo0_odd_4 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_4);
1210 red_hi0_odd_4 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_4);
1211 red_lo1_odd_4 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_4);
1212 red_hi1_odd_4 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_4);
1213 redrow_way4_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way4_spare_odd_0);
1214 redrow_way4_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way4_spare_odd_1);
1215 end
1216 else if(waysel_c4[5])
1217 begin
1218 red_lo0_odd_5 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_5);
1219 red_hi0_odd_5 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_5);
1220 red_lo1_odd_5 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_5);
1221 red_hi1_odd_5 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_5);
1222 redrow_way5_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way5_spare_odd_0);
1223 redrow_way5_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way5_spare_odd_1);
1224 end
1225 else if(waysel_c4[6])
1226 begin
1227 red_lo0_odd_6 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_6);
1228 red_hi0_odd_6 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_6);
1229 red_lo1_odd_6 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_6);
1230 red_hi1_odd_6 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_6);
1231 redrow_way6_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way6_spare_odd_0);
1232 redrow_way6_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way6_spare_odd_1);
1233 end
1234 else if(waysel_c4[7])
1235 begin
1236 red_lo0_odd_7 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_7);
1237 red_hi0_odd_7 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_7);
1238 red_lo1_odd_7 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_7);
1239 red_hi1_odd_7 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_7);
1240 redrow_way7_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way7_spare_odd_0);
1241 redrow_way7_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way7_spare_odd_1);
1242 end
1243 end
1244
1245
1246// Even rows to be written
1247if(~l1clk & wee_l & wen_c4 & select_red_even & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
1248 begin
1249 if(waysel_c4[0])
1250 begin
1251 red_lo0_even_0 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_0);
1252 red_hi0_even_0 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_0);
1253 red_lo1_even_0 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_0);
1254 red_hi1_even_0 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_0);
1255 redrow_way0_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way0_spare_even_0);
1256 redrow_way0_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way0_spare_even_1);
1257 end
1258 else if(waysel_c4[1])
1259 begin
1260 red_lo0_even_1 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_1);
1261 red_hi0_even_1 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_1);
1262 red_lo1_even_1 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_1);
1263 red_hi1_even_1 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_1);
1264 redrow_way1_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way1_spare_even_0);
1265 redrow_way1_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way1_spare_even_1);
1266 end
1267 else if(waysel_c4[2])
1268 begin
1269 red_lo0_even_2 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_2);
1270 red_hi0_even_2 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_2);
1271 red_lo1_even_2 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_2);
1272 red_hi1_even_2 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_2);
1273 redrow_way2_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way2_spare_even_0);
1274 redrow_way2_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way2_spare_even_1);
1275 end
1276 else if(waysel_c4[3])
1277 begin
1278 red_lo0_even_3 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_3);
1279 red_hi0_even_3 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_3);
1280 red_lo1_even_3 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_3);
1281 red_hi1_even_3 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_3);
1282 redrow_way3_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way3_spare_even_0);
1283 redrow_way3_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way3_spare_even_1);
1284 end
1285 else if(waysel_c4[4])
1286 begin
1287 red_lo0_even_4 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_4);
1288 red_hi0_even_4 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_4);
1289 red_lo1_even_4 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_4);
1290 red_hi1_even_4 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_4);
1291 redrow_way4_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way4_spare_even_0);
1292 redrow_way4_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way4_spare_even_1);
1293 end
1294 else if(waysel_c4[5])
1295 begin
1296 red_lo0_even_5 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_5);
1297 red_hi0_even_5 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_5);
1298 red_lo1_even_5 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_5);
1299 red_hi1_even_5 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_5);
1300 redrow_way5_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way5_spare_even_0);
1301 redrow_way5_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way5_spare_even_1);
1302 end
1303 else if(waysel_c4[6])
1304 begin
1305 red_lo0_even_6 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_6);
1306 red_hi0_even_6 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_6);
1307 red_lo1_even_6 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_6);
1308 red_hi1_even_6 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_6);
1309 redrow_way6_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way6_spare_even_0);
1310 redrow_way6_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way6_spare_even_1);
1311 end
1312 else if(waysel_c4[7])
1313 begin
1314 red_lo0_even_7 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_7);
1315 red_hi0_even_7 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_7);
1316 red_lo1_even_7 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_7);
1317 red_hi1_even_7 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_7);
1318 redrow_way7_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way7_spare_even_0);
1319 redrow_way7_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way7_spare_even_1);
1320 end
1321end
1322end
1323
1324// read out
1325always@(waysel_c4 or coloff_c4_l or set_c4 or vnw_ary)
1326begin
1327if(~coloff_c4_l & vnw_ary)
1328 begin
1329 if(waysel_c4[0])
1330 begin
1331 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_0 : red_lo0_even_0;
1332 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_0 : red_lo1_even_0;
1333 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_0 : red_hi0_even_0;
1334 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_0 : red_hi1_even_0;
1335 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way0_spare_odd_0 : redrow_way0_spare_even_0;
1336 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way0_spare_odd_1 : redrow_way0_spare_even_1;
1337 end
1338 else if(waysel_c4[1])
1339 begin
1340 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_1 : red_lo0_even_1;
1341 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_1 : red_lo1_even_1;
1342 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_1 : red_hi0_even_1;
1343 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_1 : red_hi1_even_1;
1344 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way1_spare_odd_0 : redrow_way1_spare_even_0;
1345 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way1_spare_odd_1 : redrow_way1_spare_even_1;
1346 end
1347 else if(waysel_c4[2])
1348 begin
1349 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_2 : red_lo0_even_2;
1350 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_2 : red_lo1_even_2;
1351 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_2 : red_hi0_even_2;
1352 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_2 : red_hi1_even_2;
1353 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way2_spare_odd_0 : redrow_way2_spare_even_0;
1354 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way2_spare_odd_1 : redrow_way2_spare_even_1;
1355 end
1356 else if(waysel_c4[3])
1357 begin
1358 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_3 : red_lo0_even_3;
1359 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_3 : red_lo1_even_3;
1360 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_3 : red_hi0_even_3;
1361 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_3 : red_hi1_even_3;
1362 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way3_spare_odd_0 : redrow_way3_spare_even_0;
1363 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way3_spare_odd_1 : redrow_way3_spare_even_1;
1364 end
1365 else if(waysel_c4[4])
1366 begin
1367 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_4 : red_lo0_even_4;
1368 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_4 : red_lo1_even_4;
1369 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_4 : red_hi0_even_4;
1370 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_4 : red_hi1_even_4;
1371 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way4_spare_odd_0 : redrow_way4_spare_even_0;
1372 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way4_spare_odd_1 : redrow_way4_spare_even_1;
1373 end
1374 else if(waysel_c4[5])
1375 begin
1376 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_5 : red_lo0_even_5;
1377 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_5 : red_lo1_even_5;
1378 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_5 : red_hi0_even_5;
1379 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_5 : red_hi1_even_5;
1380 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way5_spare_odd_0 : redrow_way5_spare_even_0;
1381 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way5_spare_odd_1 : redrow_way5_spare_even_1;
1382 end
1383 else if(waysel_c4[6])
1384 begin
1385 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_6 : red_lo0_even_6;
1386 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_6 : red_lo1_even_6;
1387 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_6 : red_hi0_even_6;
1388 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_6 : red_hi1_even_6;
1389 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way6_spare_odd_0 : redrow_way6_spare_even_0;
1390 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way6_spare_odd_1 : redrow_way6_spare_even_1;
1391 end
1392 else if(waysel_c4[7])
1393 begin
1394 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_7 : red_lo0_even_7;
1395 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_7 : red_lo1_even_7;
1396 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_7 : red_hi0_even_7;
1397 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_7 : red_hi1_even_7;
1398 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way7_spare_odd_0 : redrow_way7_spare_even_0;
1399 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way7_spare_odd_1 : redrow_way7_spare_even_1;
1400 end
1401end
1402end
1403
1404always@(negedge l1clk)
1405begin
1406 red_lo0_out_bc_d_l <= ~red_lo0_out_bc;
1407 red_hi0_out_bc_d_l <= ~red_hi0_out_bc;
1408 red_lo1_out_bc_d_l <= ~red_lo1_out_bc;
1409 red_hi1_out_bc_d_l <= ~red_hi1_out_bc;
1410 redrow_rd_spare_0_d_l <= ~redrow_rd_spare_0;
1411 redrow_rd_spare_1_d_l <= ~redrow_rd_spare_1;
1412end
1413
1414always@(posedge l1clk)
1415begin
1416 red_lo0_bc_c5b_l <= red_lo0_out_bc_d_l;
1417 red_hi0_bc_c5b_l <= red_hi0_out_bc_d_l;
1418 red_lo1_bc_c5b_l <= red_lo1_out_bc_d_l;
1419 red_hi1_bc_c5b_l <= red_hi1_out_bc_d_l;
1420 redrow_rdd_spare_0 <= redrow_rd_spare_0_d_l;
1421 redrow_rdd_spare_1 <= redrow_rd_spare_1_d_l;
1422end
1423
1424assign red_rd_data[19:0] =
1425 {redrow_rdd_spare_0, red_lo1_bc_c5b_l[4], red_hi0_bc_c5b_l[4],red_lo0_bc_c5b_l[4],
1426 red_hi1_bc_c5b_l[3], red_lo1_bc_c5b_l[3], red_hi0_bc_c5b_l[3],red_lo0_bc_c5b_l[3],
1427 red_hi1_bc_c5b_l[2], red_lo1_bc_c5b_l[2], red_hi0_bc_c5b_l[2],red_lo0_bc_c5b_l[2],
1428 red_hi1_bc_c5b_l[1], red_lo1_bc_c5b_l[1], red_hi0_bc_c5b_l[1],red_lo0_bc_c5b_l[1],
1429 red_hi1_bc_c5b_l[0], red_lo1_bc_c5b_l[0], red_hi0_bc_c5b_l[0],red_lo0_bc_c5b_l[0]};
1430
1431 assign red_rd_data[39:20] = {
1432 red_lo1_bc_c5b_l[9], red_hi0_bc_c5b_l[9],red_lo0_bc_c5b_l[9],
1433 red_hi1_bc_c5b_l[8], red_lo1_bc_c5b_l[8], red_hi0_bc_c5b_l[8],red_lo0_bc_c5b_l[8],
1434 red_hi1_bc_c5b_l[7], red_lo1_bc_c5b_l[7], red_hi0_bc_c5b_l[7],red_lo0_bc_c5b_l[7],
1435 red_hi1_bc_c5b_l[6], red_lo1_bc_c5b_l[6], red_hi0_bc_c5b_l[6],red_lo0_bc_c5b_l[6],
1436 red_hi1_bc_c5b_l[5], red_lo1_bc_c5b_l[5], red_hi0_bc_c5b_l[5],red_lo0_bc_c5b_l[5], red_hi1_bc_c5b_l[4]};
1437
1438
1439 assign red_rd_data[59:40] = {
1440 red_lo1_bc_c5b_l[14], red_hi0_bc_c5b_l[14],red_lo0_bc_c5b_l[14],
1441 red_hi1_bc_c5b_l[13], red_lo1_bc_c5b_l[13], red_hi0_bc_c5b_l[13],red_lo0_bc_c5b_l[13],
1442 red_hi1_bc_c5b_l[12], red_lo1_bc_c5b_l[12], red_hi0_bc_c5b_l[12],red_lo0_bc_c5b_l[12],
1443 red_hi1_bc_c5b_l[11], red_lo1_bc_c5b_l[11], red_hi0_bc_c5b_l[11],red_lo0_bc_c5b_l[11],
1444 red_hi1_bc_c5b_l[10], red_lo1_bc_c5b_l[10], red_hi0_bc_c5b_l[10],red_lo0_bc_c5b_l[10], red_hi1_bc_c5b_l[9]};
1445
1446 assign red_rd_data[79:60] = {
1447 red_hi0_bc_c5b_l[19], red_lo0_bc_c5b_l[19],
1448 red_hi1_bc_c5b_l[18], red_lo1_bc_c5b_l[18], red_hi0_bc_c5b_l[18],red_lo0_bc_c5b_l[18],
1449 red_hi1_bc_c5b_l[17], red_lo1_bc_c5b_l[17], red_hi0_bc_c5b_l[17],red_lo0_bc_c5b_l[17],
1450 red_hi1_bc_c5b_l[16], red_lo1_bc_c5b_l[16], red_hi0_bc_c5b_l[16],red_lo0_bc_c5b_l[16],
1451 red_hi1_bc_c5b_l[15], red_lo1_bc_c5b_l[15], red_hi0_bc_c5b_l[15],red_lo0_bc_c5b_l[15], red_hi1_bc_c5b_l[14],redrow_rdd_spare_1};
1452
1453
1454 always@(cred_mod or red_rd_data)
1455 begin
1456
1457 for(i=0;i<19;i=i+1)
1458 begin
1459 red_read_data[i] = cred_mod[i] ? red_rd_data[i+1] : red_rd_data[i];
1460 end
1461
1462 for(i=20;i<40;i=i+1)
1463 begin
1464 red_read_data[i] = cred_mod[i] ? red_rd_data[i-1] : red_rd_data[i];
1465 end
1466
1467
1468 for(i=40;i<60;i=i+1)
1469 begin
1470 red_read_data[i] = cred_mod[i] ? red_rd_data[i+1] : red_rd_data[i];
1471 end
1472
1473 for(i=61;i<80;i=i+1)
1474 begin
1475 red_read_data[i] = cred_mod[i] ? red_rd_data[i-1] : red_rd_data[i];
1476 end
1477
1478 end
1479
1480
1481
1482 assign { red_hi0_b_out_l[19], red_lo0_b_out_l[19],
1483 red_hi1_b_out_l[18], red_lo1_b_out_l[18], red_hi0_b_out_l[18],red_lo0_b_out_l[18],
1484 red_hi1_b_out_l[17], red_lo1_b_out_l[17], red_hi0_b_out_l[17],red_lo0_b_out_l[17],
1485 red_hi1_b_out_l[16], red_lo1_b_out_l[16], red_hi0_b_out_l[16],red_lo0_b_out_l[16],
1486 red_hi1_b_out_l[15], red_lo1_b_out_l[15], red_hi0_b_out_l[15],red_lo0_b_out_l[15],
1487 red_hi1_b_out_l[14]} = red_read_data[79:61];
1488
1489 assign {red_lo1_b_out_l[14], red_hi0_b_out_l[14],red_lo0_b_out_l[14],
1490 red_hi1_b_out_l[13], red_lo1_b_out_l[13], red_hi0_b_out_l[13],red_lo0_b_out_l[13],
1491 red_hi1_b_out_l[12], red_lo1_b_out_l[12], red_hi0_b_out_l[12],red_lo0_b_out_l[12],
1492 red_hi1_b_out_l[11], red_lo1_b_out_l[11], red_hi0_b_out_l[11],red_lo0_b_out_l[11],
1493 red_hi1_b_out_l[10], red_lo1_b_out_l[10], red_hi0_b_out_l[10],red_lo0_b_out_l[10],
1494 red_hi1_b_out_l[9]} = red_read_data[59:40];
1495
1496 assign { red_lo1_b_out_l[9], red_hi0_b_out_l[9],red_lo0_b_out_l[9],
1497 red_hi1_b_out_l[8], red_lo1_b_out_l[8], red_hi0_b_out_l[8],red_lo0_b_out_l[8],
1498 red_hi1_b_out_l[7], red_lo1_b_out_l[7], red_hi0_b_out_l[7],red_lo0_b_out_l[7],
1499 red_hi1_b_out_l[6], red_lo1_b_out_l[6], red_hi0_b_out_l[6],red_lo0_b_out_l[6],
1500 red_hi1_b_out_l[5], red_lo1_b_out_l[5], red_hi0_b_out_l[5],red_lo0_b_out_l[5],
1501 red_hi1_b_out_l[4]} = red_read_data[39:20];
1502
1503 assign {red_lo1_b_out_l[4], red_hi0_b_out_l[4],red_lo0_b_out_l[4],
1504 red_hi1_b_out_l[3], red_lo1_b_out_l[3], red_hi0_b_out_l[3],red_lo0_b_out_l[3],
1505 red_hi1_b_out_l[2], red_lo1_b_out_l[2], red_hi0_b_out_l[2],red_lo0_b_out_l[2],
1506 red_hi1_b_out_l[1], red_lo1_b_out_l[1], red_hi0_b_out_l[1],red_lo0_b_out_l[1],
1507 red_hi1_b_out_l[0], red_lo1_b_out_l[0], red_hi0_b_out_l[0],red_lo0_b_out_l[0]} = red_read_data[18:0];
1508
1509
1510//////////////////////////////////////////////////////////////////////////////
1511// col redudancy
1512// hi1, lo1, hi0, lo0
1513
1514//assign cred_mod_lo0[18:0] = cred_mod[18:0];
1515//assign cred_mod_hi0[38:19] = cred_mod[38:19];
1516//assign cred_mod_lo1[58:39] = cred_mod[58:39];
1517//assign cred_mod_hi1[77:59] = cred_mod[77:59];
1518
1519// mux 0+1
1520// mux 19 spare
1521// mux 18 and spare
1522// mux 38 and 37
1523// mux 77
1524
1525
1526
1527
1528endmodule
1529