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_32kb_cust.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: n2_l2d_32kb_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_32kb_cust (
36 waysel_c3,
37 waysel_err_c3,
38 set_c3,
39 coloff_c3,
40 coloff_c4_l,
41 coloff_c5,
42 rd_wr_c3,
43 readen_c5,
44 l2clk,
45 fuse_l2d_data_in_00,
46 fuse_l2d_rid_00,
47 fuse_l2d_wren_00,
48 fuse_l2d_reset_00_l,
49 sel_quad_00,
50 red_d_out_00,
51 fuse_l2d_data_in_01,
52 fuse_l2d_rid_01,
53 fuse_l2d_wren_01,
54 fuse_l2d_reset_01_l,
55 sel_quad_01,
56 red_d_out_01,
57 red_top_d_00,
58 red_top_d_01,
59 tcu_pce_ov,
60 tcu_pce,
61 se,
62 tcu_clk_stop,
63 wrd0lo_b_l,
64 wrd0hi_b_l,
65 wrd1lo_b_l,
66 wrd1hi_b_l,
67 ldin0lo_b,
68 ldin0hi_b,
69 ldin1lo_b,
70 ldin1hi_b,
71 worden_c3,
72 tstmodclk_l,
73 wee_l,
74 vnw_ary,
75 ldout0lo_b00,
76 ldout0hi_b00,
77 ldout1lo_b00,
78 ldout1hi_b00);
79wire [7:0] waysel_top_c4;
80wire [8:0] set_top_c3b;
81wire coloff_top_c3b_l;
82wire writeen_top_c3b;
83wire [3:0] worden_top_c3b;
84wire l1clk;
85wire [9:0] red_addr_top_01;
86wire [77:0] cred;
87wire [19:0] sat_lo0_bc_l;
88wire [19:0] sat_hi0_bc_l;
89wire [18:0] sat_lo1_bc_l;
90wire [18:0] sat_hi1_bc_l;
91wire [7:0] waysel_bot_c4;
92wire [8:0] set_bot_c3b;
93wire coloff_bot_c3b_l;
94wire writeen_bot_c3b;
95wire [3:0] worden_bot_c3b;
96wire [9:0] red_addr_bot_00;
97wire [19:0] sab_lo0_bc_l;
98wire [19:0] sab_hi0_bc_l;
99wire [18:0] sab_lo1_bc_l;
100wire [18:0] sab_hi1_bc_l;
101
102
103
104input [7:0] waysel_c3;
105input waysel_err_c3;
106input [8:0] set_c3;
107input coloff_c3;
108input coloff_c4_l; // check if 1 bit
109input [1:0] coloff_c5; // check if 1 bit
110input rd_wr_c3;
111input readen_c5;
112input l2clk;
113
114
115input [9:0] fuse_l2d_data_in_00;
116input [2:0] fuse_l2d_rid_00;
117input fuse_l2d_wren_00;
118input fuse_l2d_reset_00_l;
119input sel_quad_00;
120output [9:0] red_d_out_00;
121
122input [9:0] fuse_l2d_data_in_01;
123input [2:0] fuse_l2d_rid_01;
124input fuse_l2d_wren_01;
125input fuse_l2d_reset_01_l;
126input sel_quad_01;
127output [9:0] red_d_out_01;
128
129input [9:0] red_top_d_00;
130input [9:0] red_top_d_01;
131
132input tcu_pce_ov;
133input tcu_pce;
134input se;
135input tcu_clk_stop;
136input [19:0] wrd0lo_b_l;
137input [19:0] wrd0hi_b_l;
138input [18:0] wrd1lo_b_l;
139input [18:0] wrd1hi_b_l;
140input [19:0] ldin0lo_b;
141input [19:0] ldin0hi_b;
142input [18:0] ldin1lo_b;
143input [18:0] ldin1hi_b;
144input [3:0] worden_c3;
145input tstmodclk_l;
146input wee_l;
147input vnw_ary; //NEW
148
149output [19:0] ldout0lo_b00;
150output [19:0] ldout0hi_b00;
151output [18:0] ldout1lo_b00;
152output [18:0] ldout1hi_b00;
153
154
155n2_l2d_16kb_cust set_top
156 (
157 .waysel_c4 (waysel_top_c4[7:0]),
158 .waysel_err_c3 (waysel_err_c3),
159 .set_c3b (set_top_c3b[8:0]),
160 .coloff_c3b_l (coloff_top_c3b_l),
161 .coloff_c4_l (coloff_c4_l),
162 .coloff_c5 (coloff_c5[1:0]),
163 .wen_c3b (writeen_top_c3b),
164 .readen_c5 (readen_c5),
165 .worden_c3b (worden_top_c3b[3:0]),
166 .l1clk (l1clk),
167 .wrd_lo0_b_l (wrd0lo_b_l[19:0]),
168 .wrd_hi0_b_l (wrd0hi_b_l[19:0]),
169 .wrd_lo1_b_l (wrd1lo_b_l[18:0]),
170 .wrd_hi1_b_l (wrd1hi_b_l[18:0]),
171// .bnken_lat (bnken_lat),
172 .red_adr (red_addr_top_01[9:0]),
173 .cred (cred[77:0]),
174// .fuse_l2d_reset (fuse_l2d_reset_00_l_buf),
175 .saout_lo0_bc_l (sat_lo0_bc_l[19:0]),
176 .saout_hi0_bc_l (sat_hi0_bc_l[19:0]),
177 .saout_lo1_bc_l (sat_lo1_bc_l[18:0]),
178 .saout_hi1_bc_l (sat_hi1_bc_l[18:0]),
179 .tstmodclk_l (tstmodclk_l), //NEW
180 .wee_l (wee_l), //NEW
181 .vnw_ary (vnw_ary) //NEW
182 );
183
184n2_l2d_16kb_cust set_bot
185 (
186 .waysel_c4 (waysel_bot_c4[7:0]),
187 .waysel_err_c3 (waysel_err_c3),
188 .set_c3b (set_bot_c3b[8:0]),
189 .coloff_c3b_l (coloff_bot_c3b_l),
190 .coloff_c4_l (coloff_c4_l),
191 .coloff_c5 (coloff_c5[1:0]),
192 .wen_c3b (writeen_bot_c3b),
193 .readen_c5 (readen_c5),
194 .worden_c3b (worden_bot_c3b[3:0]),
195 .l1clk (l1clk),
196 .wrd_lo0_b_l (wrd0lo_b_l[19:0]),
197 .wrd_hi0_b_l (wrd0hi_b_l[19:0]),
198 .wrd_lo1_b_l (wrd1lo_b_l[18:0]),
199 .wrd_hi1_b_l (wrd1hi_b_l[18:0]),
200 .red_adr (red_addr_bot_00[9:0]),
201// .bnken_lat (),
202 .cred (cred[77:0]),
203// .fuse_l2d_reset (fuse_l2d_reset_01_l_buf),
204 .saout_lo0_bc_l (sab_lo0_bc_l[19:0]),
205 .saout_hi0_bc_l (sab_hi0_bc_l[19:0]),
206 .saout_lo1_bc_l (sab_lo1_bc_l[18:0]),
207 .saout_hi1_bc_l (sab_hi1_bc_l[18:0]),
208 .tstmodclk_l (tstmodclk_l), //NEW
209 .wee_l (wee_l), //NEW
210 .vnw_ary (vnw_ary) //NEW
211 );
212
213
214n2_l2d_dmux78_cust data_mux
215 (
216 .waysel_c3 (waysel_c3[7:0]), // should be 15:0
217 .set_c3 (set_c3[8:0]),
218 .coloff_c3 (coloff_c3),
219// .coloff_c4_l (coloff_c4_l),
220// .coloff_c5 (coloff_c5[1:0]),
221 .rd_wr_c3 (rd_wr_c3),
222// .readen_c5 (readen_c5),
223 .worden_c3 (worden_c3[3:0]),
224 .l2clk (l2clk),
225 .tcu_pce_ov (tcu_pce_ov),
226 .tcu_pce (tcu_pce),
227 .se (se),
228 .tcu_clk_stop (tcu_clk_stop),
229 .waysel_top_c4 (waysel_top_c4[7:0]),
230 .waysel_bot_c4 (waysel_bot_c4[7:0]),
231 .set_top_c3b (set_top_c3b[8:0]),
232 .set_bot_c3b (set_bot_c3b[8:0]),
233// .coloff_top_c3b_l (coloff_top_c3b_l),
234// .coloff_bot_c3b_l (coloff_bot_c3b_l),
235// .coloff_top_c4_l (coloff_top_c4_l),
236// .coloff_bot_c4_l (coloff_bot_c4_l),
237// .coloff_top_c5 (coloff_top_c5),
238// .coloff_bot_c5 (coloff_bot_c5),
239 .writeen_top_c3b (writeen_top_c3b),
240 .writeen_bot_c3b (writeen_bot_c3b),
241// .readen_top_c5 (readen_top_c5),
242// .readen_bot_c5 (readen_bot_c5),
243 .l1clk (l1clk),
244 .worden_top_c3b (worden_top_c3b[3:0]),
245 .worden_bot_c3b (worden_bot_c3b[3:0]),
246 .sat_lo0_bc_l (sat_lo0_bc_l[19:0]),
247 .sat_hi0_bc_l (sat_hi0_bc_l[19:0]),
248 .sat_lo1_bc_l (sat_lo1_bc_l[18:0]),
249 .sat_hi1_bc_l (sat_hi1_bc_l[18:0]),
250 .sab_lo0_bc_l (sab_lo0_bc_l[19:0]),
251 .sab_hi0_bc_l (sab_hi0_bc_l[19:0]),
252 .sab_lo1_bc_l (sab_lo1_bc_l[18:0]),
253 .sab_hi1_bc_l (sab_hi1_bc_l[18:0]),
254 .ldin0lo_b (ldin0lo_b[19:0]),
255 .ldin0hi_b (ldin0hi_b[19:0]),
256 .ldin1lo_b (ldin1lo_b[18:0]),
257 .ldin1hi_b (ldin1hi_b[18:0]),
258// .bnken_lat (bnken_lat),
259 .ldout0lo_b (ldout0lo_b00[19:0]),
260 .ldout1lo_b (ldout1lo_b00[18:0]),
261 .ldout0hi_b (ldout0hi_b00[19:0]),
262 .ldout1hi_b (ldout1hi_b00[18:0]),
263 .red_d_out_00 (red_d_out_00[9:0]),
264 .red_d_in_00 (fuse_l2d_data_in_00[9:0]),
265 .fuse_l2d_rid_00 (fuse_l2d_rid_00[2:0]),
266 .fuse_l2d_wren_00 (fuse_l2d_wren_00),
267 .fuse_l2d_reset_00_l (fuse_l2d_reset_00_l),
268 .sel_quad_00 (sel_quad_00),
269 .red_d_out_01 (red_d_out_01[9:0]),
270 .red_top_d_00 (red_top_d_00[9:0]),
271 .red_top_d_01 (red_top_d_01[9:0]),
272 .red_d_in_01 (fuse_l2d_data_in_01[9:0]),
273 .fuse_l2d_rid_01 (fuse_l2d_rid_01[2:0]),
274 .fuse_l2d_wren_01 (fuse_l2d_wren_01),
275 .fuse_l2d_reset_01_l (fuse_l2d_reset_01_l),
276 .sel_quad_01 (sel_quad_01),
277 .cred (cred[77:0]),
278// .fuse_l2d_reset_00_l_buf (fuse_l2d_reset_00_l_buf),
279// .fuse_l2d_reset_01_l_buf (fuse_l2d_reset_01_l_buf),
280 .red_addr_top (red_addr_top_01),
281 .red_addr_bot (red_addr_bot_00),
282 .coloff_c4_l(coloff_c4_l),
283 .coloff_top_c3b_l(coloff_top_c3b_l),
284 .coloff_bot_c3b_l(coloff_bot_c3b_l)
285 );
286
287endmodule
288
289
290
291
292module n2_l2d_16kb_cust (
293 waysel_c4,
294 waysel_err_c3,
295 set_c3b,
296 coloff_c3b_l,
297 coloff_c4_l,
298 coloff_c5,
299 wen_c3b,
300 readen_c5,
301 worden_c3b,
302 l1clk,
303 wrd_lo0_b_l,
304 wrd_lo1_b_l,
305 wrd_hi0_b_l,
306 wrd_hi1_b_l,
307 red_adr,
308 cred,
309 tstmodclk_l,
310 wee_l,
311 vnw_ary,
312 saout_lo0_bc_l,
313 saout_lo1_bc_l,
314 saout_hi0_bc_l,
315 saout_hi1_bc_l);
316wire coloff_c3b_l_unused;
317wire bank_select;
318wire coloff_c4;
319wire [7:0] set_c4;
320wire [1:0] spare_word_enable;
321wire select_red_odd;
322wire select_red_even;
323
324
325
326input [7:0] waysel_c4;
327input waysel_err_c3; // Active when multiple way sel is on
328input [8:0] set_c3b; // After b-latch
329input coloff_c3b_l; // After b-latch+inv
330input coloff_c4_l; // stage+inv
331input [1:0] coloff_c5; // 2-stage
332input wen_c3b; // Write-enable, after b-latch
333input readen_c5; //
334input [3:0] worden_c3b; // After b-latch
335input l1clk; // After l1clk hdr
336input [19:0] wrd_lo0_b_l; //
337input [18:0] wrd_lo1_b_l; //
338input [19:0] wrd_hi0_b_l; //
339input [18:0] wrd_hi1_b_l; //
340input [9:0] red_adr; // Redudancy address
341input [77:0] cred; // Redudancy address
342input tstmodclk_l; //NEW
343input wee_l; //NEW
344input vnw_ary; //NEW
345
346//output bnken_lat; // Address latch enable (1.5cycle)
347output [19:0] saout_lo0_bc_l; // C5bc output from senseamp
348output [18:0] saout_lo1_bc_l; // C5bc output from senseamp
349output [19:0] saout_hi0_bc_l; // C5bc output from senseamp
350output [18:0] saout_hi1_bc_l; // C5bc output from senseamp
351
352//reg rd_data_out_sel_c5b;
353//reg select_read_data_c5b;
354reg select_read_data_c5b_hi_rgt;
355reg select_read_data_c5b_hi_lft;
356reg select_read_data_c5b_lo_rgt;
357reg select_read_data_c5b_lo_lft;
358reg select_read_data_all_c5b;
359reg select_read_red_all_c5b;
360
361//reg select_read_red_c5b;
362reg select_read_red_c5b_hi_rgt;
363reg select_read_red_c5b_hi_lft;
364reg select_read_red_c5b_lo_rgt;
365reg select_read_red_c5b_lo_lft;
366
367//reg bnken_lat;
368
369reg [19:0] saout_lo0_bc_l; // C5bc output from senseamp
370reg [18:0] saout_lo1_bc_l; // C5bc output from senseamp
371reg [19:0] saout_hi0_bc_l; // C5bc output from senseamp
372reg [18:0] saout_hi1_bc_l; // C5bc output from senseamp
373
374reg [79:0] read_data;
375wire [79:0] rd_data;
376wire [79:0] wr_data;
377reg rd_spare_0,rd_spare_1;
378wire wr_spare_0,wr_spare_1;
379
380wire [19:0] saout_hi0_b_out_l, saout_lo0_b_out_l;
381wire [18:0] saout_hi1_b_out_l, saout_lo1_b_out_l;
382wire [19:0] red_lo0_b_out_l;
383wire [18:0] red_lo1_b_out_l;
384wire [19:0] red_hi0_b_out_l;
385wire [18:0] red_hi1_b_out_l;
386
387wire [1:0] coloff_c5_rgt;
388wire [1:0] coloff_c5_lft;
389wire red_sel_rgt;
390wire red_sel_lft;
391
392
393
394
395reg [19:0] mem_lo0_way0 [255:0];
396reg [18:0] mem_lo1_way0 [255:0];
397reg [19:0] mem_hi0_way0 [255:0];
398reg [18:0] mem_hi1_way0 [255:0];
399reg [255:0] mem_way0_spare_0;
400reg [255:0] mem_way0_spare_1;
401
402reg [19:0] mem_lo0_way1 [255:0];
403reg [18:0] mem_lo1_way1 [255:0];
404reg [19:0] mem_hi0_way1 [255:0];
405reg [18:0] mem_hi1_way1 [255:0];
406reg [255:0] mem_way1_spare_0;
407reg [255:0] mem_way1_spare_1;
408
409reg [19:0] mem_lo0_way2 [255:0];
410reg [18:0] mem_lo1_way2 [255:0];
411reg [19:0] mem_hi0_way2 [255:0];
412reg [18:0] mem_hi1_way2 [255:0];
413reg [255:0] mem_way2_spare_0;
414reg [255:0] mem_way2_spare_1;
415
416
417reg [19:0] mem_lo0_way3 [255:0];
418reg [18:0] mem_lo1_way3 [255:0];
419reg [19:0] mem_hi0_way3 [255:0];
420reg [18:0] mem_hi1_way3 [255:0];
421reg [255:0] mem_way3_spare_0;
422reg [255:0] mem_way3_spare_1;
423
424
425reg [19:0] mem_lo0_way4 [255:0];
426reg [18:0] mem_lo1_way4 [255:0];
427reg [19:0] mem_hi0_way4 [255:0];
428reg [18:0] mem_hi1_way4 [255:0];
429reg [255:0] mem_way4_spare_0;
430reg [255:0] mem_way4_spare_1;
431
432
433reg [19:0] mem_lo0_way5 [255:0];
434reg [18:0] mem_lo1_way5 [255:0];
435reg [19:0] mem_hi0_way5 [255:0];
436reg [18:0] mem_hi1_way5 [255:0];
437reg [255:0] mem_way5_spare_0;
438reg [255:0] mem_way5_spare_1;
439
440
441reg [19:0] mem_lo0_way6 [255:0];
442reg [18:0] mem_lo1_way6 [255:0];
443reg [19:0] mem_hi0_way6 [255:0];
444reg [18:0] mem_hi1_way6 [255:0];
445reg [255:0] mem_way6_spare_0;
446reg [255:0] mem_way6_spare_1;
447
448
449reg [19:0] mem_lo0_way7 [255:0];
450reg [18:0] mem_lo1_way7 [255:0];
451reg [19:0] mem_hi0_way7 [255:0];
452reg [18:0] mem_hi1_way7 [255:0];
453reg [255:0] mem_way7_spare_0;
454reg [255:0] mem_way7_spare_1;
455
456//reg bnken_lat_c52;
457reg [19:0] saout_lo0_bc; // C5bc output from senseamp
458reg [18:0] saout_lo1_bc; // C5bc output from senseamp
459reg [19:0] saout_hi0_bc; // C5bc output from senseamp
460reg [18:0] saout_hi1_bc; // C5bc output from senseamp
461
462
463//reg [19:0] saout_lo0_bc_d; // C5bc output from senseamp
464//reg [18:0] saout_lo1_bc_d; // C5bc output from senseamp
465//reg [19:0] saout_hi0_bc_d; // C5bc output from senseamp
466//reg [18:0] saout_hi1_bc_d; // C5bc output from senseamp
467
468//reg set_banken_lat, reset_banken_lat;
469
470reg [19:0] saout_lo0_bc_c5b_l;
471reg [18:0] saout_lo1_bc_c5b_l;
472reg [19:0] saout_hi0_bc_c5b_l;
473reg [18:0] saout_hi1_bc_c5b_l;
474
475reg [19:0] saout_lo0_bc_d_l;
476reg [18:0] saout_lo1_bc_d_l;
477reg [19:0] saout_hi0_bc_d_l;
478reg [18:0] saout_hi1_bc_d_l;
479
480
481assign coloff_c3b_l_unused = coloff_c3b_l;
482
483
484//always@(posedge l1clk)
485//begin
486// if(~coloff_c3b_l)
487// set_banken_lat <= 1'b1;
488// else set_banken_lat <= 1'b0;
489//end
490//
491//always@(negedge l1clk)
492//begin
493// if(coloff_c4_l)
494// reset_banken_lat <= 1'b1;
495// else reset_banken_lat <= 1'b0;
496//end
497//
498//always@(set_banken_lat or reset_banken_lat)
499//begin
500// if(set_banken_lat )
501// bnken_lat <= 1'b1;
502// else if(reset_banken_lat )
503// bnken_lat <= 1'b0;
504//end
505
506
507reg [7:0] waysel_c5;
508reg [8:0] index_c4;
509reg [8:0] set_c5;
510reg wen_c4;
511reg [3:0] worden_c4;
512
513
514
515reg bank_select_c5;
516reg waysel_err_c3b, waysel_err_c4,waysel_err_c5;
517
518always@(l1clk or coloff_c4_l)
519begin
520 if(~l1clk & coloff_c4_l)
521 waysel_err_c3b <= waysel_err_c3;
522end
523
524
525
526
527
528always@(posedge l1clk)
529begin
530 waysel_err_c4 <= waysel_err_c3b;
531 waysel_err_c5 <= waysel_err_c4;
532 waysel_c5[7:0] <= waysel_c4[7:0];
533 index_c4[8:0] <= set_c3b[8:0];
534 set_c5[8:0] <= index_c4[8:0];
535 worden_c4[3:0] <= worden_c3b[3:0];
536 wen_c4 <= wen_c3b;
537 bank_select_c5 <= bank_select;
538end
539
540
541assign coloff_c4 = ~coloff_c4_l;
542assign bank_select = index_c4[8];
543
544//reg [19:0] saout_lo0_bc_c5b;
545//reg [18:0] saout_lo1_bc_c5b;
546//reg [19:0] saout_hi0_bc_c5b;
547//reg [18:0] saout_hi1_bc_c5b;
548
549
550
551
552
553
554assign set_c4[7:0] = index_c4[7:0];
555wire [19:0] wrd_lo0_a;
556wire [19:0] wrd_hi0_a;
557wire [18:0] wrd_lo1_a;
558wire [18:0] wrd_hi1_a;
559
560reg [19:0] wrd_lo0_a_reg;
561reg [19:0] wrd_hi0_a_reg;
562reg [18:0] wrd_lo1_a_reg;
563reg [18:0] wrd_hi1_a_reg;
564
565
566always@(posedge l1clk)
567begin
568wrd_lo0_a_reg[19:0] <= ~wrd_lo0_b_l[19:0];
569wrd_hi0_a_reg[19:0] <= ~wrd_hi0_b_l[19:0];
570wrd_lo1_a_reg[18:0] <= ~wrd_lo1_b_l[18:0];
571wrd_hi1_a_reg[18:0] <= ~wrd_hi1_b_l[18:0];
572end
573
574
575
576// COL redudancy
577
578//reg [255:0] red_reg1;
579//reg [255:0] red_reg2;
580
581wire [79:0] cred_mod;
582
583
584assign cred_mod[79:0] = {cred[77:59],1'b0,cred[58:19],1'b0,cred[18:0]};
585
586
587//assign spare_word_enable[1] = cred_mod[19] ? worden_c4[3] : worden_c4[2];
588//assign spare_word_enable[0] = cred_mod[59] ? worden_c4[3] : worden_c4[2];
589
590
591assign wr_data[19:0] =
592{wr_spare_0, wrd_lo1_a_reg[4], wrd_hi0_a_reg[4],wrd_lo0_a_reg[4],
593wrd_hi1_a_reg[3], wrd_lo1_a_reg[3], wrd_hi0_a_reg[3],wrd_lo0_a_reg[3],
594wrd_hi1_a_reg[2], wrd_lo1_a_reg[2], wrd_hi0_a_reg[2],wrd_lo0_a_reg[2],
595wrd_hi1_a_reg[1], wrd_lo1_a_reg[1], wrd_hi0_a_reg[1],wrd_lo0_a_reg[1],
596wrd_hi1_a_reg[0], wrd_lo1_a_reg[0], wrd_hi0_a_reg[0],wrd_lo0_a_reg[0]};
597
598assign wr_data[39:20] = {
599 wrd_lo1_a_reg[9], wrd_hi0_a_reg[9],wrd_lo0_a_reg[9],
600wrd_hi1_a_reg[8], wrd_lo1_a_reg[8], wrd_hi0_a_reg[8],wrd_lo0_a_reg[8],
601wrd_hi1_a_reg[7], wrd_lo1_a_reg[7], wrd_hi0_a_reg[7],wrd_lo0_a_reg[7],
602wrd_hi1_a_reg[6], wrd_lo1_a_reg[6], wrd_hi0_a_reg[6],wrd_lo0_a_reg[6],
603wrd_hi1_a_reg[5], wrd_lo1_a_reg[5], wrd_hi0_a_reg[5],wrd_lo0_a_reg[5], wrd_hi1_a_reg[4]};
604
605
606assign wr_data[59:40] = {
607wrd_lo1_a_reg[14], wrd_hi0_a_reg[14],wrd_lo0_a_reg[14],
608wrd_hi1_a_reg[13], wrd_lo1_a_reg[13], wrd_hi0_a_reg[13],wrd_lo0_a_reg[13],
609wrd_hi1_a_reg[12], wrd_lo1_a_reg[12], wrd_hi0_a_reg[12],wrd_lo0_a_reg[12],
610wrd_hi1_a_reg[11], wrd_lo1_a_reg[11], wrd_hi0_a_reg[11],wrd_lo0_a_reg[11],
611wrd_hi1_a_reg[10], wrd_lo1_a_reg[10], wrd_hi0_a_reg[10],wrd_lo0_a_reg[10], wrd_hi1_a_reg[9]};
612
613assign wr_data[79:60] = {
614wrd_hi0_a_reg[19], wrd_lo0_a_reg[19],
615wrd_hi1_a_reg[18], wrd_lo1_a_reg[18], wrd_hi0_a_reg[18],wrd_lo0_a_reg[18],
616wrd_hi1_a_reg[17], wrd_lo1_a_reg[17], wrd_hi0_a_reg[17],wrd_lo0_a_reg[17],
617wrd_hi1_a_reg[16], wrd_lo1_a_reg[16], wrd_hi0_a_reg[16],wrd_lo0_a_reg[16],
618wrd_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};
619
620
621integer i;
622reg [80:0] data;
623
624always@(cred_mod or wr_data)
625begin
626if (~cred_mod[0]) begin
627 data[0] = wr_data[0];
628end
629
630for(i=0; i<18; i=i+1)
631begin
632 data[i+1] = cred_mod[i] ? wr_data[i] : wr_data[i+1];
633end
634
635data[19] = cred_mod[18] ? wr_data[18] : cred_mod[20] ? wr_data[20] : 1'b0;
636
637for(i=21;i<40;i=i+1)
638begin
639 data[i-1] = cred_mod[i] ? wr_data[i] : wr_data[i-1];
640end
641
642
643if (~cred_mod[39]) begin
644 data[39] = wr_data[39];
645end
646
647if (~cred_mod[40]) begin
648 data[40] = wr_data[40];
649end
650
651for(i=40;i<59;i=i+1)
652begin
653 data[i+1] = cred_mod[i] ? wr_data[i] : wr_data[i+1];
654end
655
656data[60] = cred_mod[59] ? wr_data[59] : cred_mod[61] ? wr_data[61] : 1'b0;
657
658for(i=62;i<80;i=i+1)
659begin
660 data[i-1] = cred_mod[i] ? wr_data[i] : wr_data[i-1];
661end
662
663if (~cred_mod[79]) begin
664 data[79] = wr_data[79];
665end
666
667end
668
669
670assign { wrd_hi0_a[19], wrd_lo0_a[19],
671wrd_hi1_a[18], wrd_lo1_a[18], wrd_hi0_a[18],wrd_lo0_a[18],
672wrd_hi1_a[17], wrd_lo1_a[17], wrd_hi0_a[17],wrd_lo0_a[17],
673wrd_hi1_a[16], wrd_lo1_a[16], wrd_hi0_a[16],wrd_lo0_a[16],
674wrd_hi1_a[15], wrd_lo1_a[15], wrd_hi0_a[15],wrd_lo0_a[15],
675wrd_hi1_a[14],wr_spare_1} = data[79:60];
676
677assign {
678wrd_lo1_a[14], wrd_hi0_a[14],wrd_lo0_a[14],
679wrd_hi1_a[13], wrd_lo1_a[13], wrd_hi0_a[13],wrd_lo0_a[13],
680wrd_hi1_a[12], wrd_lo1_a[12], wrd_hi0_a[12],wrd_lo0_a[12],
681wrd_hi1_a[11], wrd_lo1_a[11], wrd_hi0_a[11],wrd_lo0_a[11],
682wrd_hi1_a[10], wrd_lo1_a[10], wrd_hi0_a[10],wrd_lo0_a[10],wrd_hi1_a[9]} = data[59:40];
683
684assign {
685wrd_lo1_a[9], wrd_hi0_a[9],wrd_lo0_a[9],
686wrd_hi1_a[8], wrd_lo1_a[8], wrd_hi0_a[8],wrd_lo0_a[8],
687wrd_hi1_a[7], wrd_lo1_a[7], wrd_hi0_a[7],wrd_lo0_a[7],
688wrd_hi1_a[6], wrd_lo1_a[6], wrd_hi0_a[6],wrd_lo0_a[6],
689wrd_hi1_a[5], wrd_lo1_a[5], wrd_hi0_a[5],wrd_lo0_a[5], wrd_hi1_a[4]} = data[39:20];
690
691assign {
692wr_spare_0, wrd_lo1_a[4], wrd_hi0_a[4],wrd_lo0_a[4],
693wrd_hi1_a[3], wrd_lo1_a[3], wrd_hi0_a[3],wrd_lo0_a[3],
694wrd_hi1_a[2], wrd_lo1_a[2], wrd_hi0_a[2],wrd_lo0_a[2],
695wrd_hi1_a[1], wrd_lo1_a[1], wrd_hi0_a[1],wrd_lo0_a[1],
696wrd_hi1_a[0], wrd_lo1_a[0], wrd_hi0_a[0],wrd_lo0_a[0]} = data[19:0];
697
698
699
700wire [79:0] worden_data;
701wire [19:0] worden_lo0;
702wire [19:0] worden_hi0;
703wire [18:0] worden_lo1;
704wire [18:0] worden_hi1;
705
706
707assign worden_data[19:0] =
708{spare_word_enable[0], worden_c4[2], worden_c4[1],worden_c4[0],
709worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
710worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
711worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
712worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0]};
713
714assign worden_data[39:20] = {
715 worden_c4[2], worden_c4[1],worden_c4[0],
716worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
717worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
718worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
719worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3]};
720
721
722assign worden_data[59:40] = {
723 worden_c4[2], worden_c4[1],worden_c4[0],
724worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
725worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
726worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
727worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3]};
728
729assign worden_data[79:60] = {
730 worden_c4[1],worden_c4[0],
731worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
732worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
733worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0],
734worden_c4[3], worden_c4[2], worden_c4[1],worden_c4[0], worden_c4[3],spare_word_enable[1]};
735
736reg [79:0] worden_shift;
737
738
739
740always@(cred_mod or worden_data or wen_c4 or coloff_c4)
741begin
742if (wen_c4 & coloff_c4)
743begin
744if (~cred_mod[0]) begin
745 worden_shift[0] = worden_data[0];
746end
747
748for(i=0; i<18; i=i+1)
749begin
750 worden_shift[i+1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i+1] ? worden_data[i+1] : 1'b0;
751end
752
753worden_shift[19] = cred_mod[18] ? worden_data[18] : cred_mod[20] ? worden_data[20] : 1'b0;
754
755for(i=21;i<40;i=i+1)
756begin
757 worden_shift[i-1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i-1] ? worden_data[i-1] : 1'b0;
758end
759
760
761if (~cred_mod[39]) begin
762 worden_shift[39] = worden_data[39];
763end
764
765if (~cred_mod[40]) begin
766 worden_shift[40] = worden_data[40];
767end
768
769for(i=40;i<59;i=i+1)
770begin
771 worden_shift[i+1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i+1] ? worden_data[i+1] : 1'b0;
772end
773
774worden_shift[60] = cred_mod[59] ? worden_data[59] : cred_mod[61] ? worden_data[61] : 1'b0;
775
776for(i=62;i<80;i=i+1)
777begin
778 worden_shift[i-1] = cred_mod[i] ? worden_data[i] : ~cred_mod[i-1] ? worden_data[i-1] : 1'b0;
779end
780
781if (~cred_mod[79]) begin
782 worden_shift[79] = worden_data[79];
783end
784
785end
786else worden_shift[79:0] = 80'b0;
787
788end
789
790
791assign { worden_hi0[19], worden_lo0[19],
792worden_hi1[18], worden_lo1[18], worden_hi0[18],worden_lo0[18],
793worden_hi1[17], worden_lo1[17], worden_hi0[17],worden_lo0[17],
794worden_hi1[16], worden_lo1[16], worden_hi0[16],worden_lo0[16],
795worden_hi1[15], worden_lo1[15], worden_hi0[15],worden_lo0[15],
796worden_hi1[14],spare_word_enable[1]} = worden_shift[79:60];
797
798assign {
799worden_lo1[14], worden_hi0[14],worden_lo0[14],
800worden_hi1[13], worden_lo1[13], worden_hi0[13],worden_lo0[13],
801worden_hi1[12], worden_lo1[12], worden_hi0[12],worden_lo0[12],
802worden_hi1[11], worden_lo1[11], worden_hi0[11],worden_lo0[11],
803worden_hi1[10], worden_lo1[10], worden_hi0[10],worden_lo0[10],worden_hi1[9]} = worden_shift[59:40];
804
805assign {
806worden_lo1[9], worden_hi0[9],worden_lo0[9],
807worden_hi1[8], worden_lo1[8], worden_hi0[8],worden_lo0[8],
808worden_hi1[7], worden_lo1[7], worden_hi0[7],worden_lo0[7],
809worden_hi1[6], worden_lo1[6], worden_hi0[6],worden_lo0[6],
810worden_hi1[5], worden_lo1[5], worden_hi0[5],worden_lo0[5], worden_hi1[4]} = worden_shift[39:20];
811
812assign {
813spare_word_enable[0], worden_lo1[4], worden_hi0[4],worden_lo0[4],
814worden_hi1[3], worden_lo1[3], worden_hi0[3],worden_lo0[3],
815worden_hi1[2], worden_lo1[2], worden_hi0[2],worden_lo0[2],
816worden_hi1[1], worden_lo1[1], worden_hi0[1],worden_lo0[1],
817worden_hi1[0], worden_lo1[0], worden_hi0[0],worden_lo0[0]} = worden_shift[19:0];
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836always@(l1clk or wen_c4 or set_c4 or waysel_c4 or waysel_err_c4 or worden_c4 or wrd_lo0_a or
837 wrd_hi0_a or wrd_lo1_a or wrd_hi1_a or coloff_c4 or bank_select or wr_spare_0 or
838 wr_spare_1 or wee_l or worden_hi0 or worden_lo0 or worden_lo1 or worden_hi1 or spare_word_enable
839 or vnw_ary)
840begin
841
842////////////////////////////////////////////////////////////////
843// Read all entries for a given set
844////////////////////////////////////////////////////////////////
845
846////////////////////////////////////////////////////////////////
847// Write data computation
848////////////////////////////////////////////////////////////////
849
850///////////////////////////////////////////////////////////////
851// Write to memory
852//////////////////////////////////////////////////////////////
853
854
855
856 #0
857
858
859//if(wen_c4 & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4))
860if(~l1clk & wee_l & wen_c4 & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
861begin
862 if(waysel_c4[0])
863 begin
864 mem_lo0_way0[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way0[set_c4]);
865 mem_hi0_way0[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way0[set_c4]);
866 mem_lo1_way0[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way0[set_c4]);
867 mem_hi1_way0[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way0[set_c4]);
868 mem_way0_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way0_spare_0[set_c4]);
869 mem_way0_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way0_spare_1[set_c4]);
870 end
871 else if(waysel_c4[1])
872 begin
873 mem_lo0_way1[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way1[set_c4]);
874 mem_hi0_way1[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way1[set_c4]);
875 mem_lo1_way1[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way1[set_c4]);
876 mem_hi1_way1[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way1[set_c4]);
877 mem_way1_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way1_spare_0[set_c4]);
878 mem_way1_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way1_spare_1[set_c4]);
879 end
880 else if(waysel_c4[2])
881 begin
882 mem_lo0_way2[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way2[set_c4]);
883 mem_lo1_way2[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way2[set_c4]);
884 mem_hi0_way2[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way2[set_c4]);
885 mem_hi1_way2[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way2[set_c4]);
886 mem_way2_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way2_spare_0[set_c4]);
887 mem_way2_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way2_spare_1[set_c4]);
888 end
889 else if(waysel_c4[3])
890 begin
891 mem_lo0_way3[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way3[set_c4]);
892 mem_lo1_way3[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way3[set_c4]);
893 mem_hi0_way3[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way3[set_c4]);
894 mem_hi1_way3[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way3[set_c4]);
895 mem_way3_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way3_spare_0[set_c4]);
896 mem_way3_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way3_spare_1[set_c4]);
897 end
898 else if(waysel_c4[4])
899 begin
900 mem_lo0_way4[set_c4] = (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way4[set_c4]);
901 mem_lo1_way4[set_c4] = (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way4[set_c4]);
902 mem_hi0_way4[set_c4] = (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way4[set_c4]);
903 mem_hi1_way4[set_c4] = (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way4[set_c4]);
904 mem_way4_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way4_spare_0[set_c4]);
905 mem_way4_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way4_spare_1[set_c4]);
906 end
907 else if(waysel_c4[5])
908 begin
909 mem_lo0_way5[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way5[set_c4]);
910 mem_lo1_way5[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way5[set_c4]);
911 mem_hi0_way5[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way5[set_c4]);
912 mem_hi1_way5[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way5[set_c4]);
913 mem_way5_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way5_spare_0[set_c4]);
914 mem_way5_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way5_spare_1[set_c4]);
915 end
916 else if(waysel_c4[6])
917 begin
918 mem_lo0_way6[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way6[set_c4]);
919 mem_lo1_way6[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way6[set_c4]);
920 mem_hi0_way6[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way6[set_c4]);
921 mem_hi1_way6[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way6[set_c4]);
922 mem_way6_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way6_spare_0[set_c4]);
923 mem_way6_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way6_spare_1[set_c4]);
924 end
925 else if(waysel_c4[7])
926 begin
927 mem_lo0_way7[set_c4] =(worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & mem_lo0_way7[set_c4]);
928 mem_lo1_way7[set_c4] =(worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & mem_lo1_way7[set_c4]);
929 mem_hi0_way7[set_c4] =(worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & mem_hi0_way7[set_c4]);
930 mem_hi1_way7[set_c4] =(worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & mem_hi1_way7[set_c4]);
931 mem_way7_spare_0[set_c4] = (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & mem_way7_spare_0[set_c4]);
932 mem_way7_spare_1[set_c4] = (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & mem_way7_spare_1[set_c4]);
933 end
934 end
935end
936
937//always@(waysel_c4 or set_c4 or bnken_lat )
938always@(waysel_c4 or set_c4 or coloff_c4_l or vnw_ary)
939
940begin
941
942
943 #0
944
945if(~coloff_c4_l & vnw_ary)
946begin
947 if(waysel_c4[0])
948 begin
949 saout_lo0_bc[19:0] <= mem_lo0_way0[set_c4];
950 saout_lo1_bc[18:0] <= mem_lo1_way0[set_c4];
951 saout_hi0_bc[19:0] <= mem_hi0_way0[set_c4];
952 saout_hi1_bc[18:0] <= mem_hi1_way0[set_c4];
953 rd_spare_0 <= mem_way0_spare_0[set_c4];
954 rd_spare_1 <= mem_way0_spare_1[set_c4];
955 end
956 else if(waysel_c4[1])
957 begin
958 saout_lo0_bc[19:0] <= mem_lo0_way1[set_c4];
959 saout_lo1_bc[18:0] <= mem_lo1_way1[set_c4];
960 saout_hi0_bc[19:0] <= mem_hi0_way1[set_c4];
961 saout_hi1_bc[18:0] <= mem_hi1_way1[set_c4];
962 rd_spare_0 <= mem_way1_spare_0[set_c4];
963 rd_spare_1 <= mem_way1_spare_1[set_c4];
964 end
965 else if(waysel_c4[2])
966 begin
967 saout_lo0_bc[19:0] <= mem_lo0_way2[set_c4];
968 saout_lo1_bc[18:0] <= mem_lo1_way2[set_c4];
969 saout_hi0_bc[19:0] <= mem_hi0_way2[set_c4];
970 saout_hi1_bc[18:0] <= mem_hi1_way2[set_c4];
971 rd_spare_0 <= mem_way2_spare_0[set_c4];
972 rd_spare_1 <= mem_way2_spare_1[set_c4];
973 end
974 else if(waysel_c4[3])
975 begin
976 saout_lo0_bc[19:0] <= mem_lo0_way3[set_c4];
977 saout_lo1_bc[18:0] <= mem_lo1_way3[set_c4];
978 saout_hi0_bc[19:0] <= mem_hi0_way3[set_c4];
979 saout_hi1_bc[18:0] <= mem_hi1_way3[set_c4];
980 rd_spare_0 <= mem_way3_spare_0[set_c4];
981 rd_spare_1 <= mem_way3_spare_1[set_c4];
982 end
983 else if(waysel_c4[4])
984 begin
985 saout_lo0_bc[19:0] <= mem_lo0_way4[set_c4];
986 saout_lo1_bc[18:0] <= mem_lo1_way4[set_c4];
987 saout_hi0_bc[19:0] <= mem_hi0_way4[set_c4];
988 saout_hi1_bc[18:0] <= mem_hi1_way4[set_c4];
989 rd_spare_0 <= mem_way4_spare_0[set_c4];
990 rd_spare_1 <= mem_way4_spare_1[set_c4];
991 end
992 else if(waysel_c4[5])
993 begin
994 saout_lo0_bc[19:0] <= mem_lo0_way5[set_c4];
995 saout_lo1_bc[18:0] <= mem_lo1_way5[set_c4];
996 saout_hi0_bc[19:0] <= mem_hi0_way5[set_c4];
997 saout_hi1_bc[18:0] <= mem_hi1_way5[set_c4];
998 rd_spare_0 <= mem_way5_spare_0[set_c4];
999 rd_spare_1 <= mem_way5_spare_1[set_c4];
1000 end
1001 else if(waysel_c4[6])
1002 begin
1003 saout_lo0_bc[19:0] <= mem_lo0_way6[set_c4];
1004 saout_lo1_bc[18:0] <= mem_lo1_way6[set_c4];
1005 saout_hi0_bc[19:0] <= mem_hi0_way6[set_c4];
1006 saout_hi1_bc[18:0] <= mem_hi1_way6[set_c4];
1007 rd_spare_0 <= mem_way6_spare_0[set_c4];
1008 rd_spare_1 <= mem_way6_spare_1[set_c4];
1009 end
1010 else if(waysel_c4[7])
1011 begin
1012 saout_lo0_bc[19:0] <= mem_lo0_way7[set_c4];
1013 saout_lo1_bc[18:0] <= mem_lo1_way7[set_c4];
1014 saout_hi0_bc[19:0] <= mem_hi0_way7[set_c4];
1015 saout_hi1_bc[18:0] <= mem_hi1_way7[set_c4];
1016 rd_spare_0 <= mem_way7_spare_0[set_c4];
1017 rd_spare_1 <= mem_way7_spare_1[set_c4];
1018 end
1019end
1020end
1021
1022
1023// READ
1024// Data is read out of the above array in c4 and gets registered and latched
1025// to become a c5b signal which gets muxed and goes to dmux
1026
1027
1028reg rd_spare_0_d_l,rd_spare_1_d_l;
1029reg rdd_spare_0,rdd_spare_1;
1030reg tstmodclk_c3b_l;
1031always@(posedge l1clk)
1032begin
1033 saout_lo0_bc_d_l[19:0] <= ~saout_lo0_bc[19:0];
1034 saout_lo1_bc_d_l[18:0] <= ~saout_lo1_bc[18:0];
1035 saout_hi0_bc_d_l[19:0] <= ~saout_hi0_bc[19:0];
1036 saout_hi1_bc_d_l[18:0] <= ~saout_hi1_bc[18:0];
1037 rd_spare_0_d_l <= ~rd_spare_0;
1038 rd_spare_1_d_l <= ~rd_spare_1;
1039end
1040
1041always@(negedge l1clk)
1042begin
1043 saout_lo0_bc_c5b_l[19:0] <= saout_lo0_bc_d_l[19:0];
1044 saout_lo1_bc_c5b_l[18:0] <= saout_lo1_bc_d_l[18:0];
1045 saout_hi0_bc_c5b_l[19:0] <= saout_hi0_bc_d_l[19:0];
1046 saout_hi1_bc_c5b_l[18:0] <= saout_hi1_bc_d_l[18:0];
1047 rdd_spare_0 <= rd_spare_0_d_l;
1048 rdd_spare_1 <= rd_spare_1_d_l;
1049 tstmodclk_c3b_l <= tstmodclk_l;
1050end
1051
1052
1053assign rd_data[19:0] =
1054 {rdd_spare_0, saout_lo1_bc_c5b_l[4], saout_hi0_bc_c5b_l[4],saout_lo0_bc_c5b_l[4],
1055 saout_hi1_bc_c5b_l[3], saout_lo1_bc_c5b_l[3], saout_hi0_bc_c5b_l[3],saout_lo0_bc_c5b_l[3],
1056 saout_hi1_bc_c5b_l[2], saout_lo1_bc_c5b_l[2], saout_hi0_bc_c5b_l[2],saout_lo0_bc_c5b_l[2],
1057 saout_hi1_bc_c5b_l[1], saout_lo1_bc_c5b_l[1], saout_hi0_bc_c5b_l[1],saout_lo0_bc_c5b_l[1],
1058 saout_hi1_bc_c5b_l[0], saout_lo1_bc_c5b_l[0], saout_hi0_bc_c5b_l[0],saout_lo0_bc_c5b_l[0]};
1059
1060 assign rd_data[39:20] = {
1061 saout_lo1_bc_c5b_l[9], saout_hi0_bc_c5b_l[9],saout_lo0_bc_c5b_l[9],
1062 saout_hi1_bc_c5b_l[8], saout_lo1_bc_c5b_l[8], saout_hi0_bc_c5b_l[8],saout_lo0_bc_c5b_l[8],
1063 saout_hi1_bc_c5b_l[7], saout_lo1_bc_c5b_l[7], saout_hi0_bc_c5b_l[7],saout_lo0_bc_c5b_l[7],
1064 saout_hi1_bc_c5b_l[6], saout_lo1_bc_c5b_l[6], saout_hi0_bc_c5b_l[6],saout_lo0_bc_c5b_l[6],
1065 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]};
1066
1067
1068 assign rd_data[59:40] = {
1069 saout_lo1_bc_c5b_l[14], saout_hi0_bc_c5b_l[14],saout_lo0_bc_c5b_l[14],
1070 saout_hi1_bc_c5b_l[13], saout_lo1_bc_c5b_l[13], saout_hi0_bc_c5b_l[13],saout_lo0_bc_c5b_l[13],
1071 saout_hi1_bc_c5b_l[12], saout_lo1_bc_c5b_l[12], saout_hi0_bc_c5b_l[12],saout_lo0_bc_c5b_l[12],
1072 saout_hi1_bc_c5b_l[11], saout_lo1_bc_c5b_l[11], saout_hi0_bc_c5b_l[11],saout_lo0_bc_c5b_l[11],
1073 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]};
1074
1075 assign rd_data[79:60] = {
1076 saout_hi0_bc_c5b_l[19], saout_lo0_bc_c5b_l[19],
1077 saout_hi1_bc_c5b_l[18], saout_lo1_bc_c5b_l[18], saout_hi0_bc_c5b_l[18],saout_lo0_bc_c5b_l[18],
1078 saout_hi1_bc_c5b_l[17], saout_lo1_bc_c5b_l[17], saout_hi0_bc_c5b_l[17],saout_lo0_bc_c5b_l[17],
1079 saout_hi1_bc_c5b_l[16], saout_lo1_bc_c5b_l[16], saout_hi0_bc_c5b_l[16],saout_lo0_bc_c5b_l[16],
1080 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};
1081
1082
1083 always@(cred_mod or rd_data)
1084 begin
1085
1086 for(i=0;i<19;i=i+1)
1087 begin
1088 read_data[i] = cred_mod[i] ? rd_data[i+1] : rd_data[i];
1089 end
1090
1091 for(i=20;i<40;i=i+1)
1092 begin
1093 read_data[i] = cred_mod[i] ? rd_data[i-1] : rd_data[i];
1094 end
1095
1096
1097 for(i=40;i<60;i=i+1)
1098 begin
1099 read_data[i] = cred_mod[i] ? rd_data[i+1] : rd_data[i];
1100 end
1101
1102 for(i=61;i<80;i=i+1)
1103 begin
1104 read_data[i] = cred_mod[i] ? rd_data[i-1] : rd_data[i];
1105 end
1106
1107 end
1108
1109
1110
1111 assign { saout_hi0_b_out_l[19], saout_lo0_b_out_l[19],
1112 saout_hi1_b_out_l[18], saout_lo1_b_out_l[18], saout_hi0_b_out_l[18],saout_lo0_b_out_l[18],
1113 saout_hi1_b_out_l[17], saout_lo1_b_out_l[17], saout_hi0_b_out_l[17],saout_lo0_b_out_l[17],
1114 saout_hi1_b_out_l[16], saout_lo1_b_out_l[16], saout_hi0_b_out_l[16],saout_lo0_b_out_l[16],
1115 saout_hi1_b_out_l[15], saout_lo1_b_out_l[15], saout_hi0_b_out_l[15],saout_lo0_b_out_l[15],
1116 saout_hi1_b_out_l[14]} = read_data[79:61];
1117
1118 assign {saout_lo1_b_out_l[14], saout_hi0_b_out_l[14],saout_lo0_b_out_l[14],
1119 saout_hi1_b_out_l[13], saout_lo1_b_out_l[13], saout_hi0_b_out_l[13],saout_lo0_b_out_l[13],
1120 saout_hi1_b_out_l[12], saout_lo1_b_out_l[12], saout_hi0_b_out_l[12],saout_lo0_b_out_l[12],
1121 saout_hi1_b_out_l[11], saout_lo1_b_out_l[11], saout_hi0_b_out_l[11],saout_lo0_b_out_l[11],
1122 saout_hi1_b_out_l[10], saout_lo1_b_out_l[10], saout_hi0_b_out_l[10],saout_lo0_b_out_l[10],
1123 saout_hi1_b_out_l[9]} = read_data[59:40];
1124
1125 assign { saout_lo1_b_out_l[9], saout_hi0_b_out_l[9],saout_lo0_b_out_l[9],
1126 saout_hi1_b_out_l[8], saout_lo1_b_out_l[8], saout_hi0_b_out_l[8],saout_lo0_b_out_l[8],
1127 saout_hi1_b_out_l[7], saout_lo1_b_out_l[7], saout_hi0_b_out_l[7],saout_lo0_b_out_l[7],
1128 saout_hi1_b_out_l[6], saout_lo1_b_out_l[6], saout_hi0_b_out_l[6],saout_lo0_b_out_l[6],
1129 saout_hi1_b_out_l[5], saout_lo1_b_out_l[5], saout_hi0_b_out_l[5],saout_lo0_b_out_l[5],
1130 saout_hi1_b_out_l[4]} = read_data[39:20];
1131
1132 assign {saout_lo1_b_out_l[4], saout_hi0_b_out_l[4],saout_lo0_b_out_l[4],
1133 saout_hi1_b_out_l[3], saout_lo1_b_out_l[3], saout_hi0_b_out_l[3],saout_lo0_b_out_l[3],
1134 saout_hi1_b_out_l[2], saout_lo1_b_out_l[2], saout_hi0_b_out_l[2],saout_lo0_b_out_l[2],
1135 saout_hi1_b_out_l[1], saout_lo1_b_out_l[1], saout_hi0_b_out_l[1],saout_lo0_b_out_l[1],
1136 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];
1137
1138assign red_sel_rgt = |cred[19:18];
1139assign red_sel_lft = |cred[59:58];
1140
1141assign coloff_c5_rgt[1] = coloff_c5[1] | red_sel_rgt & coloff_c5[0];
1142assign coloff_c5_rgt[0] = coloff_c5[0] | red_sel_rgt & coloff_c5[1];
1143assign coloff_c5_lft[1] = coloff_c5[1] | red_sel_lft & coloff_c5[0];
1144assign coloff_c5_lft[0] = coloff_c5[0] | red_sel_lft & coloff_c5[1];
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156always@(negedge l1clk)
1157begin
1158select_read_data_all_c5b <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & (|coloff_c5) & readen_c5 & wee_l & ~waysel_err_c4);
1159select_read_red_all_c5b <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & (|coloff_c5) & readen_c5 & wee_l & ~waysel_err_c4);
1160
1161select_read_data_c5b_hi_rgt <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1162 (readen_c5 & coloff_c5_rgt[1] & ~waysel_err_c5);
1163select_read_data_c5b_hi_lft <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1164 (readen_c5 & coloff_c5_lft[1] & ~waysel_err_c5);
1165select_read_data_c5b_lo_rgt <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1166 (readen_c5 & coloff_c5_rgt[0] & ~waysel_err_c5);
1167select_read_data_c5b_lo_lft <= (bank_select_c5 & ~(select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1168 (readen_c5 & coloff_c5_lft[0] & ~waysel_err_c5);
1169select_read_red_c5b_hi_rgt <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1170 (readen_c5 & coloff_c5_rgt[1] & ~waysel_err_c5);
1171select_read_red_c5b_hi_lft <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1172 (readen_c5 & coloff_c5_lft[1] & ~waysel_err_c5);
1173select_read_red_c5b_lo_rgt <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1174 (readen_c5 & coloff_c5_rgt[0] & ~waysel_err_c5);
1175select_read_red_c5b_lo_lft <=(bank_select_c5 & (select_red_odd | select_red_even) & (|waysel_c5) & wee_l) &
1176 (readen_c5 & coloff_c5_lft[0] & ~waysel_err_c5);
1177end
1178
1179
1180//assign saout_lo0_bc_l[19:0] = select_read_data_c5b ? saout_lo0_bc_c5b_l[19:0] :
1181// select_read_red_c5b ? red_lo0_out[19:0] : 20'hFFFFF;
1182//assign saout_lo1_bc_l[18:0] = select_read_data_c5b ? saout_lo1_bc_c5b_l[18:0] :
1183// select_read_red_c5b ? red_lo1_out[18:0] : 19'h7FFFF;
1184//assign saout_hi0_bc_l[19:0] = select_read_data_c5b ? saout_hi0_bc_c5b_l[19:0] :
1185// select_read_red_c5b ? red_hi0_out[19:0] : 20'hFFFFF;
1186//assign saout_hi1_bc_l[18:0] = select_read_data_c5b ? saout_hi1_bc_c5b_l[18:0] :
1187// select_read_red_c5b ? red_hi1_out[18:0] : 19'h7FFFF;
1188//
1189always@(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
1190 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
1191 or red_lo0_b_out_l or red_hi0_b_out_l or red_lo1_b_out_l or saout_hi1_b_out_l
1192 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)
1193begin
1194
1195if(tstmodclk_c3b_l)
1196begin
1197saout_lo0_bc_l[9:0] = select_read_red_c5b_lo_rgt ? red_lo0_b_out_l[9:0] :
1198 select_read_data_c5b_lo_rgt ? saout_lo0_b_out_l[9:0] : 10'h3FF;
1199saout_lo0_bc_l[19:10] = select_read_red_c5b_lo_lft ? red_lo0_b_out_l[19:10] :
1200 select_read_data_c5b_lo_lft ? saout_lo0_b_out_l[19:10] : 10'h3FF;
1201saout_hi0_bc_l[9:0] = select_read_red_c5b_lo_rgt ? red_hi0_b_out_l[9:0] :
1202 select_read_data_c5b_lo_rgt ? saout_hi0_b_out_l[9:0] : 10'h3FF;
1203saout_hi0_bc_l[19:10] = select_read_red_c5b_lo_lft ? red_hi0_b_out_l[19:10] :
1204 select_read_data_c5b_lo_lft ? saout_hi0_b_out_l[19:10] : 10'h3FF;
1205saout_lo1_bc_l[9:0] = select_read_red_c5b_hi_rgt ? red_lo1_b_out_l[9:0] :
1206 select_read_data_c5b_hi_rgt ? saout_lo1_b_out_l[9:0] : 10'h3FF;
1207saout_lo1_bc_l[18:10] = select_read_red_c5b_hi_lft ? red_lo1_b_out_l[18:10] :
1208 select_read_data_c5b_hi_lft ? saout_lo1_b_out_l[18:10] : 9'h1FF;
1209saout_hi1_bc_l[8:0] = select_read_red_c5b_hi_rgt ? red_hi1_b_out_l[8:0] :
1210 select_read_data_c5b_hi_rgt ? saout_hi1_b_out_l[8:0] : 9'h1FF;
1211saout_hi1_bc_l[18:9] = select_read_red_c5b_hi_lft ? red_hi1_b_out_l[18:9] :
1212 select_read_data_c5b_hi_lft ? saout_hi1_b_out_l[18:9] : 10'h3FF;
1213end
1214else
1215begin
1216saout_lo0_bc_l[19:0] = select_read_red_all_c5b ? red_lo0_b_out_l[19:0] :
1217 select_read_data_all_c5b ? saout_lo0_b_out_l[19:0] : 20'bx;
1218saout_hi0_bc_l[19:0] = select_read_red_all_c5b ? red_hi0_b_out_l[19:0] :
1219 select_read_data_all_c5b ? saout_hi0_b_out_l[19:0] : 20'bx;
1220saout_lo1_bc_l[18:0] = select_read_red_all_c5b ? red_lo1_b_out_l[18:0] :
1221 select_read_data_all_c5b ? saout_lo1_b_out_l[18:0] : 19'bx;
1222saout_hi1_bc_l[18:0] = select_read_red_all_c5b ? red_hi1_b_out_l[18:0] :
1223 select_read_data_all_c5b ? saout_hi1_b_out_l[18:0] : 19'bx;
1224
1225//saout_lo0_bc_l[19:0] = select_read_data_all_c5b ? saout_lo0_bc_c5b_l[19:0] : 20'hFFFFF;
1226//saout_lo1_bc_l[18:0] = select_read_data_all_c5b ? saout_lo1_bc_c5b_l[18:0] : 19'hFFFFF;
1227//saout_hi0_bc_l[19:0] = select_read_data_all_c5b ? saout_hi0_bc_c5b_l[19:0] : 20'hFFFFF;
1228//saout_hi1_bc_l[18:0] = select_read_data_all_c5b ? saout_hi1_bc_c5b_l[18:0] : 19'hFFFFF;
1229end
1230end
1231
1232
1233//assign repair_saout_lo0_bc_l[9:0] =
1234//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 ;
1235//assign repair_saout_lo0_bc_l[19:10] =
1236//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 ;
1237//assign repair_saout_hi0_bc_l[9:0] =
1238//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 ;
1239//assign repair_saout_hi0_bc_l[19:10] =
1240//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 ;
1241//assign repair_saout_lo1_bc_l[9:0] =
1242//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 ;
1243//assign repair_saout_lo1_bc_l[18:10] =
1244//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 ;
1245//assign repair_saout_hi1_bc_l[8:0] =
1246//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 ;
1247//assign repair_saout_hi1_bc_l[18:9] =
1248//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 ;
1249//
1250//
1251//assign norepair_saout_lo0_bc_l[19:0] = select_read_data_all_c5b ? saout_lo0_bc_c5b_l[19:0] : 20'hFFFFF;
1252//assign norepair_saout_lo1_bc_l[18:0] = select_read_data_all_c5b ? saout_lo1_bc_c5b_l[18:0] : 19'hFFFFF;
1253//assign norepair_saout_hi0_bc_l[19:0] = select_read_data_all_c5b ? saout_hi0_bc_c5b_l[19:0] : 20'hFFFFF;
1254//assign norepair_saout_hi1_bc_l[18:0] = select_read_data_all_c5b ? saout_hi1_bc_c5b_l[18:0] : 19'hFFFFF;
1255//
1256//`endif
1257//
1258//`ifdef AXIS_SMEM
1259//
1260// always@(negedge l1clk)
1261// begin
1262// axis_saout_lo0_bc[19:0] = saout_lo0_bc[19:0];
1263// axis_saout_lo1_bc[18:0] = saout_lo1_bc[18:0];
1264// axis_saout_hi0_bc[19:0] = saout_hi0_bc[19:0];
1265// axis_saout_hi1_bc[18:0] = saout_hi1_bc[18:0];
1266// end
1267// assign saout_lo0_bc_l[19:0] = axis_select_read_data_c5b ? axis_saout_lo0_bc[19:0] : 20'hFFFFF;
1268// assign saout_lo1_bc_l[18:0] = axis_select_read_data_c5b ? axis_saout_lo1_bc[18:0] : 19'h7FFFF;
1269// assign saout_hi0_bc_l[19:0] = axis_select_read_data_c5b ? axis_saout_hi0_bc[19:0] : 20'hFFFFF;
1270// assign saout_hi1_bc_l[18:0] = axis_select_read_data_c5b ? axis_saout_hi1_bc[18:0] : 19'h7FFFF;
1271//
1272//`else
1273//assign saout_lo0_bc_l[19:0] = ~tstmodclk_c3b_l ? repair_saout_lo0_bc_l[19:0] : norepair_saout_lo0_bc_l[19:0];
1274//assign saout_lo1_bc_l[18:0] = ~tstmodclk_c3b_l ? repair_saout_lo1_bc_l[18:0] : norepair_saout_lo1_bc_l[18:0];
1275//assign saout_hi0_bc_l[19:0] = ~tstmodclk_c3b_l ? repair_saout_hi0_bc_l[19:0] : norepair_saout_hi0_bc_l[19:0];
1276//assign saout_hi1_bc_l[18:0] = ~tstmodclk_c3b_l ? repair_saout_hi1_bc_l[18:0] : norepair_saout_hi1_bc_l[18:0];
1277
1278///////////////////////////////////////////////////////////////////////////////////////////////
1279
1280// REDUDANCY
1281
1282reg [19:0] red_lo0_odd_0;
1283reg [18:0] red_lo1_odd_0;
1284reg [19:0] red_hi0_odd_0;
1285reg [18:0] red_hi1_odd_0;
1286reg [19:0] red_lo0_even_0;
1287reg [18:0] red_lo1_even_0;
1288reg [19:0] red_hi0_even_0;
1289reg [18:0] red_hi1_even_0;
1290reg redrow_way0_spare_odd_0;
1291reg redrow_way0_spare_even_0;
1292reg redrow_way0_spare_odd_1;
1293reg redrow_way0_spare_even_1;
1294
1295reg [19:0] red_lo0_odd_1;
1296reg [18:0] red_lo1_odd_1;
1297reg [19:0] red_hi0_odd_1;
1298reg [18:0] red_hi1_odd_1;
1299reg [19:0] red_lo0_even_1;
1300reg [18:0] red_lo1_even_1;
1301reg [19:0] red_hi0_even_1;
1302reg [18:0] red_hi1_even_1;
1303reg redrow_way1_spare_odd_0;
1304reg redrow_way1_spare_even_0;
1305reg redrow_way1_spare_odd_1;
1306reg redrow_way1_spare_even_1;
1307
1308reg [19:0] red_lo0_odd_2;
1309reg [18:0] red_lo1_odd_2;
1310reg [19:0] red_hi0_odd_2;
1311reg [18:0] red_hi1_odd_2;
1312reg [19:0] red_lo0_even_2;
1313reg [18:0] red_lo1_even_2;
1314reg [19:0] red_hi0_even_2;
1315reg [18:0] red_hi1_even_2;
1316reg redrow_way2_spare_odd_0;
1317reg redrow_way2_spare_even_0;
1318reg redrow_way2_spare_odd_1;
1319reg redrow_way2_spare_even_1;
1320
1321reg [19:0] red_lo0_odd_3;
1322reg [18:0] red_lo1_odd_3;
1323reg [19:0] red_hi0_odd_3;
1324reg [18:0] red_hi1_odd_3;
1325reg [19:0] red_lo0_even_3;
1326reg [18:0] red_lo1_even_3;
1327reg [19:0] red_hi0_even_3;
1328reg [18:0] red_hi1_even_3;
1329reg redrow_way3_spare_odd_0;
1330reg redrow_way3_spare_even_0;
1331reg redrow_way3_spare_odd_1;
1332reg redrow_way3_spare_even_1;
1333
1334reg [19:0] red_lo0_odd_4;
1335reg [18:0] red_lo1_odd_4;
1336reg [19:0] red_hi0_odd_4;
1337reg [18:0] red_hi1_odd_4;
1338reg [19:0] red_lo0_even_4;
1339reg [18:0] red_lo1_even_4;
1340reg [19:0] red_hi0_even_4;
1341reg [18:0] red_hi1_even_4;
1342reg redrow_way4_spare_odd_0;
1343reg redrow_way4_spare_even_0;
1344reg redrow_way4_spare_odd_1;
1345reg redrow_way4_spare_even_1;
1346
1347reg [19:0] red_lo0_odd_5;
1348reg [18:0] red_lo1_odd_5;
1349reg [19:0] red_hi0_odd_5;
1350reg [18:0] red_hi1_odd_5;
1351reg [19:0] red_lo0_even_5;
1352reg [18:0] red_lo1_even_5;
1353reg [19:0] red_hi0_even_5;
1354reg [18:0] red_hi1_even_5;
1355reg redrow_way5_spare_odd_0;
1356reg redrow_way5_spare_even_0;
1357reg redrow_way5_spare_odd_1;
1358reg redrow_way5_spare_even_1;
1359
1360reg [19:0] red_lo0_odd_6;
1361reg [18:0] red_lo1_odd_6;
1362reg [19:0] red_hi0_odd_6;
1363reg [18:0] red_hi1_odd_6;
1364reg [19:0] red_lo0_even_6;
1365reg [18:0] red_lo1_even_6;
1366reg [19:0] red_hi0_even_6;
1367reg [18:0] red_hi1_even_6;
1368reg redrow_way6_spare_odd_0;
1369reg redrow_way6_spare_even_0;
1370reg redrow_way6_spare_odd_1;
1371reg redrow_way6_spare_even_1;
1372
1373reg [19:0] red_lo0_odd_7;
1374reg [18:0] red_lo1_odd_7;
1375reg [19:0] red_hi0_odd_7;
1376reg [18:0] red_hi1_odd_7;
1377reg [19:0] red_lo0_even_7;
1378reg [18:0] red_lo1_even_7;
1379reg [19:0] red_hi0_even_7;
1380reg [18:0] red_hi1_even_7;
1381reg redrow_way7_spare_odd_0;
1382reg redrow_way7_spare_even_0;
1383reg redrow_way7_spare_odd_1;
1384reg redrow_way7_spare_even_1;
1385
1386
1387
1388reg [19:0] red_lo0_out_bc;
1389reg [18:0] red_lo1_out_bc;
1390reg [19:0] red_hi0_out_bc;
1391reg [18:0] red_hi1_out_bc;
1392reg redrow_rd_spare_0;
1393reg redrow_rd_spare_1;
1394
1395reg [19:0] red_lo0_out_bc_d_l;
1396reg [18:0] red_lo1_out_bc_d_l;
1397reg [19:0] red_hi0_out_bc_d_l;
1398reg [18:0] red_hi1_out_bc_d_l;
1399reg redrow_rd_spare_0_d_l;
1400reg redrow_rd_spare_1_d_l;
1401
1402reg [19:0] red_lo0_bc_c5b_l;
1403reg [19:0] red_hi0_bc_c5b_l;
1404reg [18:0] red_lo1_bc_c5b_l;
1405reg [18:0] red_hi1_bc_c5b_l;
1406reg redrow_rdd_spare_0;
1407reg redrow_rdd_spare_1;
1408
1409wire [79:0] red_rd_data;
1410reg [79:0] red_read_data;
1411
1412// Folloing 2 assigns detects a red index to hit with incoming index
1413// and assert. While writing and reading the way info is looked at
1414
1415assign select_red_odd = (red_adr[9:8] == 2'b11) & (red_adr[7:1] == set_c3b[7:1])
1416 & set_c3b[0] & red_adr[0];
1417assign select_red_even = (red_adr[9:8] == 2'b11) & (red_adr[7:1] == set_c3b[7:1])
1418 & ~set_c3b[0] & ~red_adr[0];
1419
1420
1421always@(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
1422 select_red_odd or select_red_even or worden_lo0 or worden_hi0 or worden_lo1 or worden_hi1 or wrd_lo0_a
1423 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)
1424begin
1425// Odd row to be written
1426if(~l1clk & wee_l & wen_c4 & select_red_odd & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
1427 begin
1428 if(waysel_c4[0])
1429 begin
1430 red_lo0_odd_0 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_0);
1431 red_hi0_odd_0 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_0);
1432 red_lo1_odd_0 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_0);
1433 red_hi1_odd_0 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_0);
1434 redrow_way0_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way0_spare_odd_0);
1435 redrow_way0_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way0_spare_odd_1);
1436 end
1437 else if(waysel_c4[1])
1438 begin
1439 red_lo0_odd_1 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_1);
1440 red_hi0_odd_1 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_1);
1441 red_lo1_odd_1 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_1);
1442 red_hi1_odd_1 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_1);
1443 redrow_way1_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way1_spare_odd_0);
1444 redrow_way1_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way1_spare_odd_1);
1445 end
1446 else if(waysel_c4[2])
1447 begin
1448 red_lo0_odd_2 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_2);
1449 red_hi0_odd_2 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_2);
1450 red_lo1_odd_2 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_2);
1451 red_hi1_odd_2 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_2);
1452 redrow_way2_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way2_spare_odd_0);
1453 redrow_way2_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way2_spare_odd_1);
1454 end
1455 else if(waysel_c4[3])
1456 begin
1457 red_lo0_odd_3 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_3);
1458 red_hi0_odd_3 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_3);
1459 red_lo1_odd_3 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_3);
1460 red_hi1_odd_3 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_3);
1461 redrow_way3_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way3_spare_odd_0);
1462 redrow_way3_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way3_spare_odd_1);
1463 end
1464 else if(waysel_c4[4])
1465 begin
1466 red_lo0_odd_4 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_4);
1467 red_hi0_odd_4 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_4);
1468 red_lo1_odd_4 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_4);
1469 red_hi1_odd_4 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_4);
1470 redrow_way4_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way4_spare_odd_0);
1471 redrow_way4_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way4_spare_odd_1);
1472 end
1473 else if(waysel_c4[5])
1474 begin
1475 red_lo0_odd_5 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_5);
1476 red_hi0_odd_5 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_5);
1477 red_lo1_odd_5 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_5);
1478 red_hi1_odd_5 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_5);
1479 redrow_way5_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way5_spare_odd_0);
1480 redrow_way5_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way5_spare_odd_1);
1481 end
1482 else if(waysel_c4[6])
1483 begin
1484 red_lo0_odd_6 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_6);
1485 red_hi0_odd_6 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_6);
1486 red_lo1_odd_6 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_6);
1487 red_hi1_odd_6 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_6);
1488 redrow_way6_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way6_spare_odd_0);
1489 redrow_way6_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way6_spare_odd_1);
1490 end
1491 else if(waysel_c4[7])
1492 begin
1493 red_lo0_odd_7 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_odd_7);
1494 red_hi0_odd_7 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_odd_7);
1495 red_lo1_odd_7 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_odd_7);
1496 red_hi1_odd_7 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_odd_7);
1497 redrow_way7_spare_odd_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way7_spare_odd_0);
1498 redrow_way7_spare_odd_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way7_spare_odd_1);
1499 end
1500 end
1501
1502
1503// Even rows to be written
1504if(~l1clk & wee_l & wen_c4 & select_red_even & ~waysel_err_c4 & bank_select & coloff_c4 & (|worden_c4) & vnw_ary)
1505 begin
1506 if(waysel_c4[0])
1507 begin
1508 red_lo0_even_0 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_0);
1509 red_hi0_even_0 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_0);
1510 red_lo1_even_0 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_0);
1511 red_hi1_even_0 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_0);
1512 redrow_way0_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way0_spare_even_0);
1513 redrow_way0_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way0_spare_even_1);
1514 end
1515 else if(waysel_c4[1])
1516 begin
1517 red_lo0_even_1 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_1);
1518 red_hi0_even_1 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_1);
1519 red_lo1_even_1 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_1);
1520 red_hi1_even_1 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_1);
1521 redrow_way1_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way1_spare_even_0);
1522 redrow_way1_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way1_spare_even_1);
1523 end
1524 else if(waysel_c4[2])
1525 begin
1526 red_lo0_even_2 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_2);
1527 red_hi0_even_2 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_2);
1528 red_lo1_even_2 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_2);
1529 red_hi1_even_2 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_2);
1530 redrow_way2_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way2_spare_even_0);
1531 redrow_way2_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way2_spare_even_1);
1532 end
1533 else if(waysel_c4[3])
1534 begin
1535 red_lo0_even_3 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_3);
1536 red_hi0_even_3 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_3);
1537 red_lo1_even_3 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_3);
1538 red_hi1_even_3 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_3);
1539 redrow_way3_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way3_spare_even_0);
1540 redrow_way3_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way3_spare_even_1);
1541 end
1542 else if(waysel_c4[4])
1543 begin
1544 red_lo0_even_4 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_4);
1545 red_hi0_even_4 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_4);
1546 red_lo1_even_4 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_4);
1547 red_hi1_even_4 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_4);
1548 redrow_way4_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way4_spare_even_0);
1549 redrow_way4_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way4_spare_even_1);
1550 end
1551 else if(waysel_c4[5])
1552 begin
1553 red_lo0_even_5 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_5);
1554 red_hi0_even_5 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_5);
1555 red_lo1_even_5 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_5);
1556 red_hi1_even_5 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_5);
1557 redrow_way5_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way5_spare_even_0);
1558 redrow_way5_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way5_spare_even_1);
1559 end
1560 else if(waysel_c4[6])
1561 begin
1562 red_lo0_even_6 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_6);
1563 red_hi0_even_6 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_6);
1564 red_lo1_even_6 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_6);
1565 red_hi1_even_6 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_6);
1566 redrow_way6_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way6_spare_even_0);
1567 redrow_way6_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way6_spare_even_1);
1568 end
1569 else if(waysel_c4[7])
1570 begin
1571 red_lo0_even_7 <= (worden_lo0[19:0] & wrd_lo0_a[19:0] | ~worden_lo0[19:0] & red_lo0_even_7);
1572 red_hi0_even_7 <= (worden_hi0[19:0] & wrd_hi0_a[19:0] | ~worden_hi0[19:0] & red_hi0_even_7);
1573 red_lo1_even_7 <= (worden_lo1[18:0] & wrd_lo1_a[18:0] | ~worden_lo1[18:0] & red_lo1_even_7);
1574 red_hi1_even_7 <= (worden_hi1[18:0] & wrd_hi1_a[18:0] | ~worden_hi1[18:0] & red_hi1_even_7);
1575 redrow_way7_spare_even_0 <= (spare_word_enable[0] & wr_spare_0 | ~spare_word_enable[0] & redrow_way7_spare_even_0);
1576 redrow_way7_spare_even_1 <= (spare_word_enable[1] & wr_spare_1 | ~spare_word_enable[1] & redrow_way7_spare_even_1);
1577 end
1578end
1579end
1580
1581// read out
1582always@(waysel_c4 or coloff_c4_l or set_c4 or vnw_ary)
1583begin
1584if(~coloff_c4_l & vnw_ary)
1585 begin
1586 if(waysel_c4[0])
1587 begin
1588 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_0 : red_lo0_even_0;
1589 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_0 : red_lo1_even_0;
1590 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_0 : red_hi0_even_0;
1591 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_0 : red_hi1_even_0;
1592 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way0_spare_odd_0 : redrow_way0_spare_even_0;
1593 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way0_spare_odd_1 : redrow_way0_spare_even_1;
1594 end
1595 else if(waysel_c4[1])
1596 begin
1597 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_1 : red_lo0_even_1;
1598 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_1 : red_lo1_even_1;
1599 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_1 : red_hi0_even_1;
1600 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_1 : red_hi1_even_1;
1601 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way1_spare_odd_0 : redrow_way1_spare_even_0;
1602 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way1_spare_odd_1 : redrow_way1_spare_even_1;
1603 end
1604 else if(waysel_c4[2])
1605 begin
1606 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_2 : red_lo0_even_2;
1607 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_2 : red_lo1_even_2;
1608 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_2 : red_hi0_even_2;
1609 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_2 : red_hi1_even_2;
1610 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way2_spare_odd_0 : redrow_way2_spare_even_0;
1611 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way2_spare_odd_1 : redrow_way2_spare_even_1;
1612 end
1613 else if(waysel_c4[3])
1614 begin
1615 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_3 : red_lo0_even_3;
1616 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_3 : red_lo1_even_3;
1617 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_3 : red_hi0_even_3;
1618 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_3 : red_hi1_even_3;
1619 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way3_spare_odd_0 : redrow_way3_spare_even_0;
1620 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way3_spare_odd_1 : redrow_way3_spare_even_1;
1621 end
1622 else if(waysel_c4[4])
1623 begin
1624 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_4 : red_lo0_even_4;
1625 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_4 : red_lo1_even_4;
1626 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_4 : red_hi0_even_4;
1627 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_4 : red_hi1_even_4;
1628 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way4_spare_odd_0 : redrow_way4_spare_even_0;
1629 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way4_spare_odd_1 : redrow_way4_spare_even_1;
1630 end
1631 else if(waysel_c4[5])
1632 begin
1633 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_5 : red_lo0_even_5;
1634 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_5 : red_lo1_even_5;
1635 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_5 : red_hi0_even_5;
1636 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_5 : red_hi1_even_5;
1637 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way5_spare_odd_0 : redrow_way5_spare_even_0;
1638 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way5_spare_odd_1 : redrow_way5_spare_even_1;
1639 end
1640 else if(waysel_c4[6])
1641 begin
1642 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_6 : red_lo0_even_6;
1643 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_6 : red_lo1_even_6;
1644 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_6 : red_hi0_even_6;
1645 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_6 : red_hi1_even_6;
1646 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way6_spare_odd_0 : redrow_way6_spare_even_0;
1647 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way6_spare_odd_1 : redrow_way6_spare_even_1;
1648 end
1649 else if(waysel_c4[7])
1650 begin
1651 red_lo0_out_bc[19:0] <= (set_c4[0]) ? red_lo0_odd_7 : red_lo0_even_7;
1652 red_lo1_out_bc[18:0] <= (set_c4[0]) ? red_lo1_odd_7 : red_lo1_even_7;
1653 red_hi0_out_bc[19:0] <= (set_c4[0]) ? red_hi0_odd_7 : red_hi0_even_7;
1654 red_hi1_out_bc[18:0] <= (set_c4[0]) ? red_hi1_odd_7 : red_hi1_even_7;
1655 redrow_rd_spare_0 <= (set_c4[0]) ? redrow_way7_spare_odd_0 : redrow_way7_spare_even_0;
1656 redrow_rd_spare_1 <= (set_c4[0]) ? redrow_way7_spare_odd_1 : redrow_way7_spare_even_1;
1657 end
1658end
1659end
1660
1661always@(negedge l1clk)
1662begin
1663 red_lo0_out_bc_d_l <= ~red_lo0_out_bc;
1664 red_hi0_out_bc_d_l <= ~red_hi0_out_bc;
1665 red_lo1_out_bc_d_l <= ~red_lo1_out_bc;
1666 red_hi1_out_bc_d_l <= ~red_hi1_out_bc;
1667 redrow_rd_spare_0_d_l <= ~redrow_rd_spare_0;
1668 redrow_rd_spare_1_d_l <= ~redrow_rd_spare_1;
1669end
1670
1671always@(posedge l1clk)
1672begin
1673 red_lo0_bc_c5b_l <= red_lo0_out_bc_d_l;
1674 red_hi0_bc_c5b_l <= red_hi0_out_bc_d_l;
1675 red_lo1_bc_c5b_l <= red_lo1_out_bc_d_l;
1676 red_hi1_bc_c5b_l <= red_hi1_out_bc_d_l;
1677 redrow_rdd_spare_0 <= redrow_rd_spare_0_d_l;
1678 redrow_rdd_spare_1 <= redrow_rd_spare_1_d_l;
1679end
1680
1681assign red_rd_data[19:0] =
1682 {redrow_rdd_spare_0, red_lo1_bc_c5b_l[4], red_hi0_bc_c5b_l[4],red_lo0_bc_c5b_l[4],
1683 red_hi1_bc_c5b_l[3], red_lo1_bc_c5b_l[3], red_hi0_bc_c5b_l[3],red_lo0_bc_c5b_l[3],
1684 red_hi1_bc_c5b_l[2], red_lo1_bc_c5b_l[2], red_hi0_bc_c5b_l[2],red_lo0_bc_c5b_l[2],
1685 red_hi1_bc_c5b_l[1], red_lo1_bc_c5b_l[1], red_hi0_bc_c5b_l[1],red_lo0_bc_c5b_l[1],
1686 red_hi1_bc_c5b_l[0], red_lo1_bc_c5b_l[0], red_hi0_bc_c5b_l[0],red_lo0_bc_c5b_l[0]};
1687
1688 assign red_rd_data[39:20] = {
1689 red_lo1_bc_c5b_l[9], red_hi0_bc_c5b_l[9],red_lo0_bc_c5b_l[9],
1690 red_hi1_bc_c5b_l[8], red_lo1_bc_c5b_l[8], red_hi0_bc_c5b_l[8],red_lo0_bc_c5b_l[8],
1691 red_hi1_bc_c5b_l[7], red_lo1_bc_c5b_l[7], red_hi0_bc_c5b_l[7],red_lo0_bc_c5b_l[7],
1692 red_hi1_bc_c5b_l[6], red_lo1_bc_c5b_l[6], red_hi0_bc_c5b_l[6],red_lo0_bc_c5b_l[6],
1693 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]};
1694
1695
1696 assign red_rd_data[59:40] = {
1697 red_lo1_bc_c5b_l[14], red_hi0_bc_c5b_l[14],red_lo0_bc_c5b_l[14],
1698 red_hi1_bc_c5b_l[13], red_lo1_bc_c5b_l[13], red_hi0_bc_c5b_l[13],red_lo0_bc_c5b_l[13],
1699 red_hi1_bc_c5b_l[12], red_lo1_bc_c5b_l[12], red_hi0_bc_c5b_l[12],red_lo0_bc_c5b_l[12],
1700 red_hi1_bc_c5b_l[11], red_lo1_bc_c5b_l[11], red_hi0_bc_c5b_l[11],red_lo0_bc_c5b_l[11],
1701 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]};
1702
1703 assign red_rd_data[79:60] = {
1704 red_hi0_bc_c5b_l[19], red_lo0_bc_c5b_l[19],
1705 red_hi1_bc_c5b_l[18], red_lo1_bc_c5b_l[18], red_hi0_bc_c5b_l[18],red_lo0_bc_c5b_l[18],
1706 red_hi1_bc_c5b_l[17], red_lo1_bc_c5b_l[17], red_hi0_bc_c5b_l[17],red_lo0_bc_c5b_l[17],
1707 red_hi1_bc_c5b_l[16], red_lo1_bc_c5b_l[16], red_hi0_bc_c5b_l[16],red_lo0_bc_c5b_l[16],
1708 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};
1709
1710
1711 always@(cred_mod or red_rd_data)
1712 begin
1713
1714 for(i=0;i<19;i=i+1)
1715 begin
1716 red_read_data[i] = cred_mod[i] ? red_rd_data[i+1] : red_rd_data[i];
1717 end
1718
1719 for(i=20;i<40;i=i+1)
1720 begin
1721 red_read_data[i] = cred_mod[i] ? red_rd_data[i-1] : red_rd_data[i];
1722 end
1723
1724
1725 for(i=40;i<60;i=i+1)
1726 begin
1727 red_read_data[i] = cred_mod[i] ? red_rd_data[i+1] : red_rd_data[i];
1728 end
1729
1730 for(i=61;i<80;i=i+1)
1731 begin
1732 red_read_data[i] = cred_mod[i] ? red_rd_data[i-1] : red_rd_data[i];
1733 end
1734
1735 end
1736
1737
1738
1739 assign { red_hi0_b_out_l[19], red_lo0_b_out_l[19],
1740 red_hi1_b_out_l[18], red_lo1_b_out_l[18], red_hi0_b_out_l[18],red_lo0_b_out_l[18],
1741 red_hi1_b_out_l[17], red_lo1_b_out_l[17], red_hi0_b_out_l[17],red_lo0_b_out_l[17],
1742 red_hi1_b_out_l[16], red_lo1_b_out_l[16], red_hi0_b_out_l[16],red_lo0_b_out_l[16],
1743 red_hi1_b_out_l[15], red_lo1_b_out_l[15], red_hi0_b_out_l[15],red_lo0_b_out_l[15],
1744 red_hi1_b_out_l[14]} = red_read_data[79:61];
1745
1746 assign {red_lo1_b_out_l[14], red_hi0_b_out_l[14],red_lo0_b_out_l[14],
1747 red_hi1_b_out_l[13], red_lo1_b_out_l[13], red_hi0_b_out_l[13],red_lo0_b_out_l[13],
1748 red_hi1_b_out_l[12], red_lo1_b_out_l[12], red_hi0_b_out_l[12],red_lo0_b_out_l[12],
1749 red_hi1_b_out_l[11], red_lo1_b_out_l[11], red_hi0_b_out_l[11],red_lo0_b_out_l[11],
1750 red_hi1_b_out_l[10], red_lo1_b_out_l[10], red_hi0_b_out_l[10],red_lo0_b_out_l[10],
1751 red_hi1_b_out_l[9]} = red_read_data[59:40];
1752
1753 assign { red_lo1_b_out_l[9], red_hi0_b_out_l[9],red_lo0_b_out_l[9],
1754 red_hi1_b_out_l[8], red_lo1_b_out_l[8], red_hi0_b_out_l[8],red_lo0_b_out_l[8],
1755 red_hi1_b_out_l[7], red_lo1_b_out_l[7], red_hi0_b_out_l[7],red_lo0_b_out_l[7],
1756 red_hi1_b_out_l[6], red_lo1_b_out_l[6], red_hi0_b_out_l[6],red_lo0_b_out_l[6],
1757 red_hi1_b_out_l[5], red_lo1_b_out_l[5], red_hi0_b_out_l[5],red_lo0_b_out_l[5],
1758 red_hi1_b_out_l[4]} = red_read_data[39:20];
1759
1760 assign {red_lo1_b_out_l[4], red_hi0_b_out_l[4],red_lo0_b_out_l[4],
1761 red_hi1_b_out_l[3], red_lo1_b_out_l[3], red_hi0_b_out_l[3],red_lo0_b_out_l[3],
1762 red_hi1_b_out_l[2], red_lo1_b_out_l[2], red_hi0_b_out_l[2],red_lo0_b_out_l[2],
1763 red_hi1_b_out_l[1], red_lo1_b_out_l[1], red_hi0_b_out_l[1],red_lo0_b_out_l[1],
1764 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];
1765
1766
1767//////////////////////////////////////////////////////////////////////////////
1768// col redudancy
1769// hi1, lo1, hi0, lo0
1770
1771//assign cred_mod_lo0[18:0] = cred_mod[18:0];
1772//assign cred_mod_hi0[38:19] = cred_mod[38:19];
1773//assign cred_mod_lo1[58:39] = cred_mod[58:39];
1774//assign cred_mod_hi1[77:59] = cred_mod[77:59];
1775
1776// mux 0+1
1777// mux 19 spare
1778// mux 18 and spare
1779// mux 38 and 37
1780// mux 77
1781
1782
1783
1784
1785endmodule
1786
1787
1788module n2_l2d_dmux78_cust (
1789 waysel_c3,
1790 set_c3,
1791 coloff_c3,
1792 coloff_c4_l,
1793 rd_wr_c3,
1794 worden_c3,
1795 l2clk,
1796 tcu_pce_ov,
1797 tcu_pce,
1798 se,
1799 tcu_clk_stop,
1800 waysel_top_c4,
1801 waysel_bot_c4,
1802 set_top_c3b,
1803 set_bot_c3b,
1804 coloff_top_c3b_l,
1805 coloff_bot_c3b_l,
1806 writeen_top_c3b,
1807 writeen_bot_c3b,
1808 l1clk,
1809 worden_top_c3b,
1810 worden_bot_c3b,
1811 sat_lo0_bc_l,
1812 sat_hi0_bc_l,
1813 sat_lo1_bc_l,
1814 sat_hi1_bc_l,
1815 sab_lo0_bc_l,
1816 sab_hi0_bc_l,
1817 sab_lo1_bc_l,
1818 sab_hi1_bc_l,
1819 ldin0lo_b,
1820 ldin0hi_b,
1821 ldin1lo_b,
1822 ldin1hi_b,
1823 ldout0lo_b,
1824 ldout0hi_b,
1825 ldout1lo_b,
1826 ldout1hi_b,
1827 red_d_in_00,
1828 red_d_out_00,
1829 fuse_l2d_rid_00,
1830 fuse_l2d_wren_00,
1831 fuse_l2d_reset_00_l,
1832 sel_quad_00,
1833 red_d_in_01,
1834 red_d_out_01,
1835 fuse_l2d_rid_01,
1836 fuse_l2d_wren_01,
1837 fuse_l2d_reset_01_l,
1838 sel_quad_01,
1839 red_addr_top,
1840 red_addr_bot,
1841 red_top_d_00,
1842 red_top_d_01,
1843 cred);
1844
1845input [7:0] waysel_c3;
1846input [8:0] set_c3;
1847input coloff_c3;
1848input coloff_c4_l;
1849//input [1:0] coloff_c5;
1850input rd_wr_c3;
1851//input readen_c5;
1852input [3:0] worden_c3;
1853input l2clk;
1854input tcu_pce_ov;
1855input tcu_pce;
1856input se;
1857input tcu_clk_stop;
1858
1859output [7:0] waysel_top_c4;
1860output [7:0] waysel_bot_c4;
1861output [8:0] set_top_c3b; // Set 8 will be inverted for top/bot
1862output [8:0] set_bot_c3b; // Set 8 will be inverted for top/bot
1863output coloff_top_c3b_l;
1864output coloff_bot_c3b_l;
1865//output coloff_top_c4_l ;
1866//output coloff_bot_c4_l;
1867//output [1:0] coloff_top_c5;
1868//output [1:0] coloff_bot_c5;
1869output writeen_top_c3b;
1870output writeen_bot_c3b;
1871//output readen_top_c5;
1872//output readen_bot_c5;
1873output l1clk;
1874output [3:0] worden_top_c3b;
1875output [3:0] worden_bot_c3b;
1876
1877
1878input [19:0] sat_lo0_bc_l; // Senseamp out from top-16kb
1879input [19:0] sat_hi0_bc_l; // Senseamp out from top-16kb
1880input [18:0] sat_lo1_bc_l; // Senseamp out from top-16kb
1881input [18:0] sat_hi1_bc_l; // Senseamp out from top-16kb
1882input [19:0] sab_lo0_bc_l; // Senseamp out from bot-16kb
1883input [19:0] sab_hi0_bc_l; // Senseamp out from bot-16kb
1884input [18:0] sab_lo1_bc_l; // Senseamp out from bot-16kb
1885input [18:0] sab_hi1_bc_l; // Senseamp out from bot-16kb
1886input [19:0] ldin0lo_b;
1887input [19:0] ldin0hi_b;
1888input [18:0] ldin1lo_b;
1889input [18:0] ldin1hi_b;
1890//input bnken_lat; // Address latch enable (1.5cycle)
1891output [19:0] ldout0lo_b;
1892output [19:0] ldout0hi_b;
1893output [18:0] ldout1lo_b;
1894output [18:0] ldout1hi_b;
1895
1896
1897input [9:0] red_d_in_00;
1898output [9:0] red_d_out_00;
1899input [2:0] fuse_l2d_rid_00;
1900input fuse_l2d_wren_00;
1901input fuse_l2d_reset_00_l;
1902input sel_quad_00;
1903
1904input [9:0] red_d_in_01;
1905output [9:0] red_d_out_01;
1906input [2:0] fuse_l2d_rid_01;
1907input fuse_l2d_wren_01;
1908input fuse_l2d_reset_01_l;
1909input sel_quad_01;
1910
1911output [9:0] red_addr_top;
1912output [9:0] red_addr_bot;
1913// forwarded
1914input [9:0] red_top_d_00;
1915input [9:0] red_top_d_01;
1916
1917output [77:0] cred;
1918//output fuse_l2d_reset_00_l_buf;
1919//output fuse_l2d_reset_01_l_buf;
1920
1921reg [7:0] waysel_top_c4;
1922reg [7:0] waysel_bot_c4;
1923reg [8:0] set_top_c3b;
1924reg [8:0] set_bot_c3b;
1925reg writeen_top_c3b;
1926reg writeen_bot_c3b;
1927reg [3:0] worden_top_c3b;
1928reg [3:0] worden_bot_c3b;
1929reg coloff_top_c3b_l;
1930reg coloff_bot_c3b_l;
1931reg [7:0] waysel_top_c3b;
1932reg [7:0] waysel_bot_c3b;
1933//always@(posedge l2clk)
1934always@(negedge l2clk)
1935begin
1936 coloff_top_c3b_l <= ~coloff_c3;
1937 coloff_bot_c3b_l <= ~coloff_c3;
1938 worden_top_c3b[3:0] <= worden_c3[3:0];
1939 worden_bot_c3b[3:0] <= worden_c3[3:0];
1940 writeen_top_c3b <= ~rd_wr_c3;
1941 writeen_bot_c3b <= ~rd_wr_c3;
1942end
1943
1944//always@(negedge l2clk)
1945//always@(l2clk or bnken_lat)
1946always@(l2clk or coloff_c4_l)
1947begin
1948// if(~bnken_lat)
1949 if(~l2clk & coloff_c4_l)
1950 begin
1951 waysel_top_c3b[7:0] <= waysel_c3[7:0];
1952 waysel_bot_c3b[7:0] <= waysel_c3[7:0];
1953 set_bot_c3b[8:0] <= set_c3[8:0];
1954 set_top_c3b[8:0] <= {~set_c3[8],set_c3[7:0]};
1955
1956 end
1957end
1958
1959always@(posedge l2clk )
1960begin
1961waysel_top_c4[7:0] <= waysel_top_c3b[7:0];
1962waysel_bot_c4[7:0] <= waysel_bot_c3b[7:0];
1963end
1964//assign readen_top_c5 = readen_c5;
1965//assign readen_bot_c5 = readen_c5;
1966//assign coloff_top_c5 = coloff_c5[1:0];
1967//assign coloff_bot_c5 = coloff_c5[1:0];
1968//assign coloff_top_c4_l = coloff_c4_l;
1969//assign coloff_bot_c4_l = coloff_c4_l;
1970
1971
1972wire [19:0] sat_lo0_bc;
1973wire [19:0] sab_lo0_bc;
1974wire [19:0] sat_hi0_bc;
1975wire [19:0] sab_hi0_bc;
1976
1977wire [18:0] sat_lo1_bc;
1978wire [18:0] sab_lo1_bc;
1979wire [18:0] sat_hi1_bc;
1980wire [18:0] sab_hi1_bc;
1981
1982
1983//always@(posedge l1clk)
1984//begin
1985assign sat_lo0_bc[19:0] = ~sat_lo0_bc_l[19:0];
1986assign sab_lo0_bc[19:0] = ~sab_lo0_bc_l[19:0];
1987assign sat_hi0_bc[19:0] = ~sat_hi0_bc_l[19:0];
1988assign sab_hi0_bc[19:0] = ~sab_hi0_bc_l[19:0];
1989
1990assign sat_lo1_bc[18:0] = ~sat_lo1_bc_l[18:0];
1991assign sab_lo1_bc[18:0] = ~sab_lo1_bc_l[18:0];
1992assign sat_hi1_bc[18:0] = ~sat_hi1_bc_l[18:0];
1993assign sab_hi1_bc[18:0] = ~sab_hi1_bc_l[18:0];
1994//end
1995
1996
1997
1998n2_l2d_32kb_cust_or_macro__ports_3__width_20 or_ldout0lo_b
1999 (
2000 .dout (ldout0lo_b[19:0]),
2001 .din0 (sat_lo0_bc[19:0]),
2002 .din1 (sab_lo0_bc[19:0]),
2003 .din2 (ldin0lo_b[19:0])
2004 );
2005
2006n2_l2d_32kb_cust_or_macro__ports_3__width_20 or_ldout0hi_b
2007 (
2008 .dout (ldout0hi_b[19:0]),
2009 .din0 (sat_hi0_bc[19:0]),
2010 .din1 (sab_hi0_bc[19:0]),
2011 .din2 (ldin0hi_b[19:0])
2012 );
2013
2014n2_l2d_32kb_cust_or_macro__ports_3__width_19 or_ldout1lo_b
2015 (
2016 .dout (ldout1lo_b[18:0]),
2017 .din0 (sat_lo1_bc[18:0]),
2018 .din1 (sab_lo1_bc[18:0]),
2019 .din2 (ldin1lo_b[18:0])
2020 );
2021
2022
2023n2_l2d_32kb_cust_or_macro__ports_3__width_19 or_ldout1hi_b
2024 (
2025 .dout (ldout1hi_b[18:0]),
2026 .din0 (sat_hi1_bc[18:0]),
2027 .din1 (sab_hi1_bc[18:0]),
2028 .din2 (ldin1hi_b[18:0])
2029 );
2030
2031
2032cl_sc1_l1hdr_12x clk_hdr (
2033 .l2clk (l2clk),
2034 .se (se),
2035 .pce (tcu_pce),
2036 .pce_ov (tcu_pce_ov),
2037 .stop (tcu_clk_stop),
2038 .l1clk (l1clk)
2039 );
2040
2041
2042// Redudant row modelling
2043
2044
2045
2046reg [9:0] red_odd_0;
2047reg [9:0] red_odd_1;
2048reg [9:0] red_even_0;
2049reg [9:0] red_even_1;
2050reg [7:0] red_col_0;
2051reg [7:0] red_col_1;
2052//reg [9:0] red_d_out_00;
2053//reg [9:0] red_d_out_01;
2054
2055wire red_reg_clk_even_0;
2056wire red_reg_clk_even_1;
2057wire red_reg_clk_odd_0;
2058wire red_reg_clk_odd_1;
2059wire red_reg_clk_col_0;
2060wire red_reg_clk_col_1;
2061wire [9:0] red_data_00;
2062wire [9:0] red_data_01;
2063
2064// Initialize the register.
2065initial begin
2066
2067 red_odd_0[9:0] = 10'b0;
2068 red_odd_1[9:0] = 10'b0;
2069 red_even_0[9:0]= 10'b0;
2070 red_even_1[9:0]= 10'b0;
2071 red_col_0[7:0] = 8'b0;
2072 red_col_1[7:0] = 8'b0;
2073end
2074
2075assign red_reg_clk_even_0 =~((~l1clk & fuse_l2d_wren_00 & (fuse_l2d_rid_00[2:0]==3'b000) & sel_quad_00) | ~fuse_l2d_reset_00_l);
2076assign red_reg_clk_even_1 =~((~l1clk & fuse_l2d_wren_00 & (fuse_l2d_rid_00[2:0]==3'b010) & sel_quad_00) | ~fuse_l2d_reset_00_l);
2077assign red_reg_clk_col_0 =~((~l1clk & fuse_l2d_wren_00 & (fuse_l2d_rid_00[2:0]==3'b100) & sel_quad_00) | ~fuse_l2d_reset_00_l);
2078
2079assign red_reg_clk_odd_0 =~((~l1clk &fuse_l2d_wren_01& (fuse_l2d_rid_01[2:0]==3'b001) & sel_quad_01) | ~fuse_l2d_reset_01_l);
2080assign red_reg_clk_odd_1 =~((~l1clk &fuse_l2d_wren_01& (fuse_l2d_rid_01[2:0]==3'b011) & sel_quad_01) | ~fuse_l2d_reset_01_l);
2081assign red_reg_clk_col_1 =~((~l1clk &fuse_l2d_wren_01& (fuse_l2d_rid_01[2:0]==3'b101) & sel_quad_01) | ~fuse_l2d_reset_01_l);
2082
2083assign red_data_00[9:0] = red_d_in_00[9:0] & {10{fuse_l2d_reset_00_l}};
2084assign red_data_01[9:0] = red_d_in_01[9:0] & {10{fuse_l2d_reset_01_l}};
2085
2086always @(red_reg_clk_even_0 or red_reg_clk_even_1 or red_reg_clk_col_0 or red_reg_clk_odd_0 or red_reg_clk_odd_1 or red_reg_clk_col_1 or red_d_in_00 or red_d_in_01) begin
2087 if (~red_reg_clk_even_0) begin
2088 red_even_0[9:0] <= red_data_00[9:0];
2089 end
2090
2091 if (~red_reg_clk_even_1) begin
2092 red_even_1[9:0] <= red_data_00[9:0];
2093 end
2094
2095 if (~red_reg_clk_col_0) begin
2096 red_col_0[7:0] <= {red_data_00[9:8],red_data_00[5:0]};
2097 end
2098
2099 if (~red_reg_clk_odd_0) begin
2100 red_odd_0[9:0] <= red_data_01[9:0];
2101 end
2102
2103 if (~red_reg_clk_odd_1) begin
2104 red_odd_1[9:0] <= red_data_01[9:0];
2105 end
2106
2107 if (~red_reg_clk_col_1) begin
2108 red_col_1[7:0] <= {red_data_01[9:8],red_data_01[5:0]};
2109 end
2110end
2111
2112
2113// 00 = bot and 01 = top
2114
2115//always@(fuse_l2d_wren_00 or fuse_l2d_wren_01 or fuse_l2d_rid_01 or fuse_l2d_rid_00
2116// or red_d_in_00 or red_d_in_01 or sel_quad_00 or sel_quad_01)
2117//begin
2118// if(fuse_l2d_wren_00 & ~fuse_l2d_rid_00[0] & set_bot_c3b[8] & (fuse_l2d_rid_00[2:1]==2'b00) & sel_quad_00)
2119// red_even_0 <= red_d_in_00;
2120// else if(fuse_l2d_wren_00 & ~fuse_l2d_rid_00[0] & set_top_c3b[8] & (fuse_l2d_rid_01[2:1]==2'b01) & sel_quad_00)
2121// red_even_1 <= red_d_in_00;
2122// else if(fuse_l2d_wren_00 & ~fuse_l2d_rid_00[0] & (fuse_l2d_rid_01[2:1]==2'b10) & sel_quad_00)
2123// red_col_0 <= red_d_in_00[7:0];
2124//
2125// if(fuse_l2d_wren_01 & fuse_l2d_rid_01[0] & set_top_c3b[8] & (fuse_l2d_rid_01[2:1]==2'b00) & sel_quad_01)
2126// red_odd_0 <= red_d_in_01;
2127// else if(fuse_l2d_wren_01 & fuse_l2d_rid_01[0] & set_bot_c3b[8] & (fuse_l2d_rid_01[2:1]==2'b01) & sel_quad_01)
2128// red_odd_1 <= red_d_in_01;
2129// else if(fuse_l2d_wren_01 & fuse_l2d_rid_01[0] & (fuse_l2d_rid_01[2:1]==2'b10) & sel_quad_01)
2130// red_col_1 <= red_d_in_01[7:0];
2131//end
2132//
2133
2134//assign red_addr_top = set_top_c3b[0] ? red_odd_0 : red_even_0;
2135//assign red_addr_bot = set_top_c3b[0] ? red_odd_1 : red_even_1;
2136assign red_addr_top = set_top_c3b[0] ? red_odd_1 : red_even_1;
2137assign red_addr_bot = set_top_c3b[0] ? red_odd_0 : red_even_0;
2138
2139assign red_d_out_00[7:0] = (red_even_0[7:0] & {8{fuse_l2d_rid_00[2:0]==3'b000}}) |
2140 (red_even_1[7:0] & {8{fuse_l2d_rid_00[2:0]==3'b010}}) |
2141 ({2'b0,(red_col_0[5:0] & {6{fuse_l2d_rid_00[2:0]==3'b100}})}) |
2142 (red_top_d_00[7:0] & {8{~sel_quad_00}});
2143
2144assign red_d_out_00[9:8] = (red_even_0[9:8] & {2{fuse_l2d_rid_00[2:0]==3'b000}}) |
2145 (red_even_1[9:8] & {2{fuse_l2d_rid_00[2:0]==3'b010}}) |
2146 (red_col_0[7:6] & {2{fuse_l2d_rid_00[2:0]==3'b100}}) |
2147 (red_top_d_00[9:8] & {2{~sel_quad_00}});
2148
2149
2150
2151
2152assign red_d_out_01[7:0] = (red_odd_0[7:0] & {8{fuse_l2d_rid_01[2:0]==3'b001}}) |
2153 (red_odd_1[7:0] & {8{fuse_l2d_rid_01[2:0]==3'b011}}) |
2154 ({2'b0,(red_col_1[5:0] & {6{fuse_l2d_rid_01[2:0]==3'b101}})}) |
2155 (red_top_d_01[7:0] & {8{~sel_quad_01}});
2156
2157assign red_d_out_01[9:8] = (red_odd_0[9:8] & {2{fuse_l2d_rid_01[2:0]==3'b001}}) |
2158 (red_odd_1[9:8] & {2{fuse_l2d_rid_01[2:0]==3'b011}}) |
2159 (red_col_1[7:6] & {2{fuse_l2d_rid_01[2:0]==3'b101}}) |
2160 (red_top_d_01[9:8] & {2{~sel_quad_01}});
2161
2162
2163
2164//always@(fuse_l2d_rid_00)
2165//begin
2166//case(fuse_l2d_rid_00)
2167//3'b000 : begin
2168// red_d_out_00 = red_even_0;
2169// red_d_out_01 = 10'b0;
2170// end
2171//3'b010 : begin
2172// red_d_out_00 = red_even_1;
2173// red_d_out_01 = 10'b0;
2174// end
2175//3'b100 : begin
2176// red_d_out_00 = {2'b0,red_col_0};
2177// red_d_out_01 = 10'b0;
2178// end
2179//
2180//3'b001 : begin
2181// red_d_out_01 = red_odd_0;
2182// red_d_out_00 = 10'b0;
2183// end
2184//3'b011 : begin
2185// red_d_out_01 = red_odd_1;
2186// red_d_out_00 = 10'b0;
2187// end
2188//3'b101 : begin
2189// red_d_out_01 = {2'b0,red_col_1};
2190// red_d_out_00 = 10'b0;
2191// end
2192//
2193//default : begin
2194// red_d_out_00 = red_top_d_00;
2195// red_d_out_01 = red_top_d_01;
2196// end
2197//endcase
2198//end
2199
2200// Col redudancy
2201
2202//reg [7:0] red_col_0;
2203//reg [7:0] red_col_1;
2204
2205reg [38:0] cred0;
2206reg [38:0] cred1;
2207
2208// Initialize cred0, cred1
2209initial begin
2210 cred0[38:0] = 39'b0;
2211 cred1[38:0] = 39'b0;
2212end
2213
2214always@(red_col_0)
2215if(red_col_0[7] & red_col_0[6] & ~red_col_0[5])
2216case(red_col_0)
22178'b11_0_00000 : cred0[18:0] = 19'b111_1111_1111_1111_1111; //0
22188'b11_0_00001 : cred0[18:0] = 19'b111_1111_1111_1111_1110; //1
22198'b11_0_00010 : cred0[18:0] = 19'b111_1111_1111_1111_1100; //2
22208'b11_0_00011 : cred0[18:0] = 19'b111_1111_1111_1111_1000; //3
22218'b11_0_00100 : cred0[18:0] = 19'b111_1111_1111_1111_0000; //4
22228'b11_0_00101 : cred0[18:0] = 19'b111_1111_1111_1110_0000; //5
22238'b11_0_00110 : cred0[18:0] = 19'b111_1111_1111_1100_0000; //6
22248'b11_0_00111 : cred0[18:0] = 19'b111_1111_1111_1000_0000; //7
22258'b11_0_01000 : cred0[18:0] = 19'b111_1111_1111_0000_0000; //8
22268'b11_0_01001 : cred0[18:0] = 19'b111_1111_1110_0000_0000; //9
22278'b11_0_01010 : cred0[18:0] = 19'b111_1111_1100_0000_0000; //10
22288'b11_0_01011 : cred0[18:0] = 19'b111_1111_1000_0000_0000; //11
22298'b11_0_01100 : cred0[18:0] = 19'b111_1111_0000_0000_0000; //12
22308'b11_0_01101 : cred0[18:0] = 19'b111_1110_0000_0000_0000; //13
22318'b11_0_01110 : cred0[18:0] = 19'b111_1100_0000_0000_0000; //14
22328'b11_0_01111 : cred0[18:0] = 19'b111_1000_0000_0000_0000; //15
22338'b11_0_10000 : cred0[18:0] = 19'b111_0000_0000_0000_0000; //16
22348'b11_0_10001 : cred0[18:0] = 19'b110_0000_0000_0000_0000; //17
22358'b11_0_10010 : cred0[18:0] = 19'b100_0000_0000_0000_0000; //18
2236default : cred0[18:0] = 19'b0;
2237endcase
2238else cred0[18:0] = 19'b0;
2239
2240always@(red_col_0)
2241if(red_col_0[7] & red_col_0[6] & red_col_0[5])
2242case(red_col_0)
22438'b11_1_00000 : cred0[38:19] = 20'b1111_1111_1111_1111_1111;//0
22448'b11_1_00001 : cred0[38:19] = 20'b0111_1111_1111_1111_1111;//1
22458'b11_1_00010 : cred0[38:19] = 20'b0011_1111_1111_1111_1111;//2
22468'b11_1_00011 : cred0[38:19] = 20'b0001_1111_1111_1111_1111;//3
22478'b11_1_00100 : cred0[38:19] = 20'b0000_1111_1111_1111_1111;//4
22488'b11_1_00101 : cred0[38:19] = 20'b0000_0111_1111_1111_1111;//5
22498'b11_1_00110 : cred0[38:19] = 20'b0000_0011_1111_1111_1111;//6
22508'b11_1_00111 : cred0[38:19] = 20'b0000_0001_1111_1111_1111;//7
22518'b11_1_01000 : cred0[38:19] = 20'b0000_0000_1111_1111_1111;//8
22528'b11_1_01001 : cred0[38:19] = 20'b0000_0000_0111_1111_1111;//9
22538'b11_1_01010 : cred0[38:19] = 20'b0000_0000_0011_1111_1111;//10
22548'b11_1_01011 : cred0[38:19] = 20'b0000_0000_0001_1111_1111;//11
22558'b11_1_01100 : cred0[38:19] = 20'b0000_0000_0000_1111_1111;//12
22568'b11_1_01101 : cred0[38:19] = 20'b0000_0000_0000_0111_1111;//13
22578'b11_1_01110 : cred0[38:19] = 20'b0000_0000_0000_0011_1111;//14
22588'b11_1_01111 : cred0[38:19] = 20'b0000_0000_0000_0001_1111;//15
22598'b11_1_10000 : cred0[38:19] = 20'b0000_0000_0000_0000_1111;//16
22608'b11_1_10001 : cred0[38:19] = 20'b0000_0000_0000_0000_0111;//17
22618'b11_1_10010 : cred0[38:19] = 20'b0000_0000_0000_0000_0011;//18
22628'b11_1_10011 : cred0[38:19] = 20'b0000_0000_0000_0000_0001;//19
2263default : cred0[38:19] = 20'b0;
2264endcase
2265else cred0[38:19] = 20'b0;
2266
2267always@(red_col_1)
2268if(red_col_1[7] & red_col_1[6] & red_col_1[5])
2269case(red_col_1)
22708'b11_1_00000 : cred1[19:0] = 20'b1111_1111_1111_1111_1111; //0
22718'b11_1_00001 : cred1[19:0] = 20'b1111_1111_1111_1111_1110; //1
22728'b11_1_00010 : cred1[19:0] = 20'b1111_1111_1111_1111_1100; //2
22738'b11_1_00011 : cred1[19:0] = 20'b1111_1111_1111_1111_1000; //3
22748'b11_1_00100 : cred1[19:0] = 20'b1111_1111_1111_1111_0000; //4
22758'b11_1_00101 : cred1[19:0] = 20'b1111_1111_1111_1110_0000; //5
22768'b11_1_00110 : cred1[19:0] = 20'b1111_1111_1111_1100_0000; //6
22778'b11_1_00111 : cred1[19:0] = 20'b1111_1111_1111_1000_0000; //7
22788'b11_1_01000 : cred1[19:0] = 20'b1111_1111_1111_0000_0000; //8
22798'b11_1_01001 : cred1[19:0] = 20'b1111_1111_1110_0000_0000; //9
22808'b11_1_01010 : cred1[19:0] = 20'b1111_1111_1100_0000_0000; //10
22818'b11_1_01011 : cred1[19:0] = 20'b1111_1111_1000_0000_0000; //11
22828'b11_1_01100 : cred1[19:0] = 20'b1111_1111_0000_0000_0000; //12
22838'b11_1_01101 : cred1[19:0] = 20'b1111_1110_0000_0000_0000; //13
22848'b11_1_01110 : cred1[19:0] = 20'b1111_1100_0000_0000_0000; //14
22858'b11_1_01111 : cred1[19:0] = 20'b1111_1000_0000_0000_0000; //15
22868'b11_1_10000 : cred1[19:0] = 20'b1111_0000_0000_0000_0000; //16
22878'b11_1_10001 : cred1[19:0] = 20'b1110_0000_0000_0000_0000; //17
22888'b11_1_10010 : cred1[19:0] = 20'b1100_0000_0000_0000_0000; //18
22898'b11_1_10011 : cred1[19:0] = 20'b1000_0000_0000_0000_0000; //19
2290default : cred1[19:0] = 20'b0;
2291endcase
2292else cred1[19:0] = 20'b0;
2293
2294always@(red_col_1)
2295if(red_col_1[7] & red_col_1[6] & ~red_col_1[5])
2296case(red_col_1)
22978'b11_0_00000 : cred1[38:20] = 19'b111_1111_1111_1111_1111;//0
22988'b11_0_00001 : cred1[38:20] = 19'b011_1111_1111_1111_1111;//1
22998'b11_0_00010 : cred1[38:20] = 19'b001_1111_1111_1111_1111;//2
23008'b11_0_00011 : cred1[38:20] = 19'b000_1111_1111_1111_1111;//3
23018'b11_0_00100 : cred1[38:20] = 19'b000_0111_1111_1111_1111;//4
23028'b11_0_00101 : cred1[38:20] = 19'b000_0011_1111_1111_1111;//5
23038'b11_0_00110 : cred1[38:20] = 19'b000_0001_1111_1111_1111;//6
23048'b11_0_00111 : cred1[38:20] = 19'b000_0000_1111_1111_1111;//7
23058'b11_0_01000 : cred1[38:20] = 19'b000_0000_0111_1111_1111;//8
23068'b11_0_01001 : cred1[38:20] = 19'b000_0000_0011_1111_1111;//9
23078'b11_0_01010 : cred1[38:20] = 19'b000_0000_0001_1111_1111;//10
23088'b11_0_01011 : cred1[38:20] = 19'b000_0000_0000_1111_1111;//11
23098'b11_0_01100 : cred1[38:20] = 19'b000_0000_0000_0111_1111;//12
23108'b11_0_01101 : cred1[38:20] = 19'b000_0000_0000_0011_1111;//13
23118'b11_0_01110 : cred1[38:20] = 19'b000_0000_0000_0001_1111;//14
23128'b11_0_01111 : cred1[38:20] = 19'b000_0000_0000_0000_1111;//15
23138'b11_0_10000 : cred1[38:20] = 19'b000_0000_0000_0000_0111;//16
23148'b11_0_10001 : cred1[38:20] = 19'b000_0000_0000_0000_0011;//17
23158'b11_0_10010 : cred1[38:20] = 19'b000_0000_0000_0000_0001;//18
2316default : cred1[38:20] = 19'b0;
2317endcase
2318else cred1[38:20] = 19'b0;
2319
2320assign cred[77:0] = {cred1[38:0], cred0[38:0]};
2321//assign cred[77:0] = 78'b0;
2322
2323
2324//assign fuse_l2d_reset_00_buf = fuse_l2d_reset_00;
2325//assign fuse_l2d_reset_01_buf = fuse_l2d_reset_01;
2326
2327
2328
2329
2330endmodule
2331
2332
2333//
2334// or macro for ports = 2,3
2335//
2336//
2337
2338
2339
2340
2341
2342module n2_l2d_32kb_cust_or_macro__ports_3__width_20 (
2343 din0,
2344 din1,
2345 din2,
2346 dout);
2347 input [19:0] din0;
2348 input [19:0] din1;
2349 input [19:0] din2;
2350 output [19:0] dout;
2351
2352
2353
2354
2355
2356
2357or3 #(20) d0_0 (
2358.in0(din0[19:0]),
2359.in1(din1[19:0]),
2360.in2(din2[19:0]),
2361.out(dout[19:0])
2362);
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372endmodule
2373
2374
2375
2376
2377
2378//
2379// or macro for ports = 2,3
2380//
2381//
2382
2383
2384
2385
2386
2387module n2_l2d_32kb_cust_or_macro__ports_3__width_19 (
2388 din0,
2389 din1,
2390 din2,
2391 dout);
2392 input [18:0] din0;
2393 input [18:0] din1;
2394 input [18:0] din2;
2395 output [18:0] dout;
2396
2397
2398
2399
2400
2401
2402or3 #(19) d0_0 (
2403.in0(din0[18:0]),
2404.in1(din1[18:0]),
2405.in2(din2[18:0]),
2406.out(dout[18:0])
2407);
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417endmodule
2418
2419
2420
2421