Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / ifu / rtl / ifu_cmu_msb_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: ifu_cmu_msb_ctl.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 ifu_cmu_msb_ctl (
36 tcu_scan_en,
37 l2clk,
38 scan_in,
39 tcu_pce_ov,
40 spc_aclk,
41 spc_bclk,
42 lsu_ifu_cmu_pmen,
43 l15_spc_cpkt,
44 ftu_fetch_f,
45 ftu_cmiss,
46 ftu_inv_req,
47 ftu_redirect,
48 cmu_req_st,
49 cmu_canleave_st,
50 lsc_l15_valid,
51 cmu_data_ready,
52 lsc_fill_rtn2,
53 mdp_mbhit_q,
54 mct_early_req,
55 mct_real_wom,
56 mct_upd_addr,
57 cmu_has_dup_miss,
58 mct_rst_dupmiss,
59 mct_fill_complete,
60 mct_ignore_cmiss,
61 mct_clken,
62 scan_out) ;
63wire pce_ov;
64wire stop;
65wire siclk;
66wire soclk;
67wire se;
68wire l1clk;
69wire pmen_lat_scanin;
70wire pmen_lat_scanout;
71wire [7:0] ftu_fetch_c;
72wire ifu_pmen;
73wire [7:0] cmu_has_dup_miss_din;
74wire [7:0] mct_e0_wom;
75wire [7:0] mct_e1_wom;
76wire [7:0] mct_e2_wom;
77wire [7:0] mct_e3_wom;
78wire [7:0] mct_e4_wom;
79wire [7:0] mct_e5_wom;
80wire [7:0] mct_e6_wom;
81wire [7:0] mct_e7_wom;
82wire dup_miss_lat_scanin;
83wire dup_miss_lat_scanout;
84wire [7:0] mct_real_miss;
85wire cmu_mbhit_c;
86wire redirect_reg_scanin;
87wire redirect_reg_scanout;
88wire [7:0] ftu_redirect_lat;
89wire [7:0] csm_rmwbit_reset;
90wire set_e0wom_bit0;
91wire [7:0] mdp_e0_wom;
92wire reset_e0wom_bit0;
93wire next_e0wom_bit0;
94wire set_e1wom_bit0;
95wire [7:0] mdp_e1_wom;
96wire reset_e1wom_bit0;
97wire next_e1wom_bit0;
98wire set_e2wom_bit0;
99wire [7:0] mdp_e2_wom;
100wire reset_e2wom_bit0;
101wire next_e2wom_bit0;
102wire set_e3wom_bit0;
103wire [7:0] mdp_e3_wom;
104wire reset_e3wom_bit0;
105wire next_e3wom_bit0;
106wire set_e4wom_bit0;
107wire [7:0] mdp_e4_wom;
108wire reset_e4wom_bit0;
109wire next_e4wom_bit0;
110wire set_e5wom_bit0;
111wire [7:0] mdp_e5_wom;
112wire reset_e5wom_bit0;
113wire next_e5wom_bit0;
114wire set_e6wom_bit0;
115wire [7:0] mdp_e6_wom;
116wire reset_e6wom_bit0;
117wire next_e6wom_bit0;
118wire set_e7wom_bit0;
119wire [7:0] mdp_e7_wom;
120wire reset_e7wom_bit0;
121wire next_e7wom_bit0;
122wire set_e0wom_bit1;
123wire reset_e0wom_bit1;
124wire next_e0wom_bit1;
125wire set_e1wom_bit1;
126wire reset_e1wom_bit1;
127wire next_e1wom_bit1;
128wire set_e2wom_bit1;
129wire reset_e2wom_bit1;
130wire next_e2wom_bit1;
131wire set_e3wom_bit1;
132wire reset_e3wom_bit1;
133wire next_e3wom_bit1;
134wire set_e4wom_bit1;
135wire reset_e4wom_bit1;
136wire next_e4wom_bit1;
137wire set_e5wom_bit1;
138wire reset_e5wom_bit1;
139wire next_e5wom_bit1;
140wire set_e6wom_bit1;
141wire reset_e6wom_bit1;
142wire next_e6wom_bit1;
143wire set_e7wom_bit1;
144wire reset_e7wom_bit1;
145wire next_e7wom_bit1;
146wire set_e0wom_bit2;
147wire reset_e0wom_bit2;
148wire next_e0wom_bit2;
149wire set_e1wom_bit2;
150wire reset_e1wom_bit2;
151wire next_e1wom_bit2;
152wire set_e2wom_bit2;
153wire reset_e2wom_bit2;
154wire next_e2wom_bit2;
155wire set_e3wom_bit2;
156wire reset_e3wom_bit2;
157wire next_e3wom_bit2;
158wire set_e4wom_bit2;
159wire reset_e4wom_bit2;
160wire next_e4wom_bit2;
161wire set_e5wom_bit2;
162wire reset_e5wom_bit2;
163wire next_e5wom_bit2;
164wire set_e6wom_bit2;
165wire reset_e6wom_bit2;
166wire next_e6wom_bit2;
167wire set_e7wom_bit2;
168wire reset_e7wom_bit2;
169wire next_e7wom_bit2;
170wire set_e0wom_bit3;
171wire reset_e0wom_bit3;
172wire next_e0wom_bit3;
173wire set_e1wom_bit3;
174wire reset_e1wom_bit3;
175wire next_e1wom_bit3;
176wire set_e2wom_bit3;
177wire reset_e2wom_bit3;
178wire next_e2wom_bit3;
179wire set_e3wom_bit3;
180wire reset_e3wom_bit3;
181wire next_e3wom_bit3;
182wire set_e4wom_bit3;
183wire reset_e4wom_bit3;
184wire next_e4wom_bit3;
185wire set_e5wom_bit3;
186wire reset_e5wom_bit3;
187wire next_e5wom_bit3;
188wire set_e6wom_bit3;
189wire reset_e6wom_bit3;
190wire next_e6wom_bit3;
191wire set_e7wom_bit3;
192wire reset_e7wom_bit3;
193wire next_e7wom_bit3;
194wire set_e0wom_bit4;
195wire reset_e0wom_bit4;
196wire next_e0wom_bit4;
197wire set_e1wom_bit4;
198wire reset_e1wom_bit4;
199wire next_e1wom_bit4;
200wire set_e2wom_bit4;
201wire reset_e2wom_bit4;
202wire next_e2wom_bit4;
203wire set_e3wom_bit4;
204wire reset_e3wom_bit4;
205wire next_e3wom_bit4;
206wire set_e4wom_bit4;
207wire reset_e4wom_bit4;
208wire next_e4wom_bit4;
209wire set_e5wom_bit4;
210wire reset_e5wom_bit4;
211wire next_e5wom_bit4;
212wire set_e6wom_bit4;
213wire reset_e6wom_bit4;
214wire next_e6wom_bit4;
215wire set_e7wom_bit4;
216wire reset_e7wom_bit4;
217wire next_e7wom_bit4;
218wire set_e0wom_bit5;
219wire reset_e0wom_bit5;
220wire next_e0wom_bit5;
221wire set_e1wom_bit5;
222wire reset_e1wom_bit5;
223wire next_e1wom_bit5;
224wire set_e2wom_bit5;
225wire reset_e2wom_bit5;
226wire next_e2wom_bit5;
227wire set_e3wom_bit5;
228wire reset_e3wom_bit5;
229wire next_e3wom_bit5;
230wire set_e4wom_bit5;
231wire reset_e4wom_bit5;
232wire next_e4wom_bit5;
233wire set_e5wom_bit5;
234wire reset_e5wom_bit5;
235wire next_e5wom_bit5;
236wire set_e6wom_bit5;
237wire reset_e6wom_bit5;
238wire next_e6wom_bit5;
239wire set_e7wom_bit5;
240wire reset_e7wom_bit5;
241wire next_e7wom_bit5;
242wire set_e0wom_bit6;
243wire reset_e0wom_bit6;
244wire next_e0wom_bit6;
245wire set_e1wom_bit6;
246wire reset_e1wom_bit6;
247wire next_e1wom_bit6;
248wire set_e2wom_bit6;
249wire reset_e2wom_bit6;
250wire next_e2wom_bit6;
251wire set_e3wom_bit6;
252wire reset_e3wom_bit6;
253wire next_e3wom_bit6;
254wire set_e4wom_bit6;
255wire reset_e4wom_bit6;
256wire next_e4wom_bit6;
257wire set_e5wom_bit6;
258wire reset_e5wom_bit6;
259wire next_e5wom_bit6;
260wire set_e6wom_bit6;
261wire reset_e6wom_bit6;
262wire next_e6wom_bit6;
263wire set_e7wom_bit6;
264wire reset_e7wom_bit6;
265wire next_e7wom_bit6;
266wire set_e0wom_bit7;
267wire reset_e0wom_bit7;
268wire next_e0wom_bit7;
269wire set_e1wom_bit7;
270wire reset_e1wom_bit7;
271wire next_e1wom_bit7;
272wire set_e2wom_bit7;
273wire reset_e2wom_bit7;
274wire next_e2wom_bit7;
275wire set_e3wom_bit7;
276wire reset_e3wom_bit7;
277wire next_e3wom_bit7;
278wire set_e4wom_bit7;
279wire reset_e4wom_bit7;
280wire next_e4wom_bit7;
281wire set_e5wom_bit7;
282wire reset_e5wom_bit7;
283wire next_e5wom_bit7;
284wire set_e6wom_bit7;
285wire reset_e6wom_bit7;
286wire next_e6wom_bit7;
287wire set_e7wom_bit7;
288wire reset_e7wom_bit7;
289wire next_e7wom_bit7;
290wire e0_wom_reg_f_scanin;
291wire e0_wom_reg_f_scanout;
292wire e1_wom_reg_f_scanin;
293wire e1_wom_reg_f_scanout;
294wire e2_wom_reg_f_scanin;
295wire e2_wom_reg_f_scanout;
296wire e3_wom_reg_f_scanin;
297wire e3_wom_reg_f_scanout;
298wire e4_wom_reg_f_scanin;
299wire e4_wom_reg_f_scanout;
300wire e5_wom_reg_f_scanin;
301wire e5_wom_reg_f_scanout;
302wire e6_wom_reg_f_scanin;
303wire e6_wom_reg_f_scanout;
304wire e7_wom_reg_f_scanin;
305wire e7_wom_reg_f_scanout;
306wire [7:0] cmu_fill_wom;
307wire [7:0] data_ready_bf;
308wire data_ready_reg_f_scanin;
309wire data_ready_reg_f_scanout;
310wire [7:0] data_ready_f;
311wire data_ready_reg_c_scanin;
312wire data_ready_reg_c_scanout;
313wire [7:0] data_ready_c;
314wire spares_scanin;
315wire spares_scanout;
316
317
318input tcu_scan_en ;
319input l2clk;
320input scan_in;
321input tcu_pce_ov; // scan signals
322input spc_aclk;
323input spc_bclk;
324
325input lsu_ifu_cmu_pmen;
326
327input [8:6] l15_spc_cpkt;
328
329input [7:0] ftu_fetch_f; //from ftu tsm
330input [7:0] ftu_cmiss; //from ftu tsm
331input [7:0] ftu_inv_req; //from ftu tsm
332input [7:0] ftu_redirect; //from ftu tsm
333
334input [7:0] cmu_req_st;
335input [7:0] cmu_canleave_st;
336input [7:0] lsc_l15_valid;
337
338
339input [7:0] cmu_data_ready; // rtn pkt ready
340input lsc_fill_rtn2; // second pkt being returned, any data rdy
341
342input [7:0] mdp_mbhit_q; // Raw hit in miss buffer
343
344
345output mct_early_req;
346
347output [7:0] mct_real_wom; // real wom bits
348
349
350
351output [7:0] mct_upd_addr; //one-hot signal, selects one MB line to be updated
352
353
354
355output [7:0] cmu_has_dup_miss; //indicates thr0 dup miss exists, goes to CMSM0
356output [7:0] mct_rst_dupmiss; // reset duplicate miss wait state
357output [7:0] mct_fill_complete; // signal fill complete 2 cycles after data ready
358output mct_ignore_cmiss; // ignore cmiss for 3 cycles when data is being returned
359
360
361output [7:0] mct_clken;
362
363output scan_out;
364
365// scan renames
366assign pce_ov = tcu_pce_ov;
367assign stop = 1'b0;
368assign siclk = spc_aclk;
369assign soclk = spc_bclk;
370assign se = tcu_scan_en ;
371// end scan
372
373//output mdp_cache_bit; //cacheable bit from MB to CMSB
374//output mdp_par_bit; //parity bit from MB to ??
375//assign l2clk = clk;
376
377///////////////////////////////////////////////////
378// clock header
379///////////////////////////////////////////////////
380ifu_cmu_msb_ctl_l1clkhdr_ctl_macro clkgen (
381 .l2clk(l2clk),
382 .l1en (1'b1 ),
383 .l1clk(l1clk),
384 .pce_ov(pce_ov),
385 .stop(stop),
386 .se(se)
387);
388////////////////////////////////////////////////////////
389//
390// Form clk enable for misbuffer
391ifu_cmu_msb_ctl_msff_ctl_macro__width_9 pmen_lat (
392 .scan_in(pmen_lat_scanin),
393 .scan_out(pmen_lat_scanout),
394 .l1clk ( l1clk ),
395 .din ({ ftu_fetch_f[7:0],lsu_ifu_cmu_pmen}),
396 .dout ({ ftu_fetch_c[7:0], ifu_pmen}),
397 .siclk(siclk),
398 .soclk(soclk)
399);
400
401
402assign mct_clken[7:0] = ftu_fetch_c[7:0] | ~{8{ifu_pmen}};
403
404
405////////////////////////////////////////////////////////
406// Duplicate miss logic
407// Detect whether there exists a duplicate miss for
408// current thread (or PA). WOM bit entries are used
409// to detect this duplicate miss. Diagonal bits are ignored
410// because they indicate REAL MISS.
411// mct_e*_wom are next_wom bits
412// mdp_e*_wom are latched wom bits
413////////////////////////////////////////////////////////
414assign cmu_has_dup_miss_din[0] = (mct_e0_wom[7] | mct_e0_wom[6] | mct_e0_wom[5] | mct_e0_wom[4] |
415 mct_e0_wom[3] | mct_e0_wom[2] | mct_e0_wom[1]);
416assign cmu_has_dup_miss_din[1] = (mct_e1_wom[7] | mct_e1_wom[6] | mct_e1_wom[5] | mct_e1_wom[4] |
417 mct_e1_wom[3] | mct_e1_wom[2] | mct_e1_wom[0]);
418assign cmu_has_dup_miss_din[2] = (mct_e2_wom[7] | mct_e2_wom[6] | mct_e2_wom[5] | mct_e2_wom[4] |
419 mct_e2_wom[3] | mct_e2_wom[1] | mct_e2_wom[0]);
420assign cmu_has_dup_miss_din[3] = (mct_e3_wom[7] | mct_e3_wom[6] | mct_e3_wom[5] | mct_e3_wom[4] |
421 mct_e3_wom[2] | mct_e3_wom[1] | mct_e3_wom[0]);
422assign cmu_has_dup_miss_din[4] = (mct_e4_wom[7] | mct_e4_wom[6] | mct_e4_wom[5] | mct_e4_wom[3] |
423 mct_e4_wom[2] | mct_e4_wom[1] | mct_e4_wom[0]);
424assign cmu_has_dup_miss_din[5] = (mct_e5_wom[7] | mct_e5_wom[6] | mct_e5_wom[4] | mct_e5_wom[3] |
425 mct_e5_wom[2] | mct_e5_wom[1] | mct_e5_wom[0]);
426assign cmu_has_dup_miss_din[6] = (mct_e6_wom[7] | mct_e6_wom[5] | mct_e6_wom[4] | mct_e6_wom[3] |
427 mct_e6_wom[2] | mct_e6_wom[1] | mct_e6_wom[0]);
428assign cmu_has_dup_miss_din[7] = (mct_e7_wom[6] | mct_e7_wom[5] | mct_e7_wom[4] | mct_e7_wom[3] |
429 mct_e7_wom[2] | mct_e7_wom[1] | mct_e7_wom[0]);
430
431
432ifu_cmu_msb_ctl_msff_ctl_macro__width_8 dup_miss_lat (
433 .scan_in(dup_miss_lat_scanin),
434 .scan_out(dup_miss_lat_scanout),
435 .l1clk ( l1clk ),
436 .din ({ cmu_has_dup_miss_din[7:0]}),
437 .dout ({ cmu_has_dup_miss[7:0]}),
438 .siclk(siclk),
439 .soclk(soclk)
440);
441
442////////////////////////////////////////////////////////
443// Generate update signal for address, cacheable bit,
444// parity and replace way bits.
445////////////////////////////////////////////////////////
446// enables for miss buffer
447assign mct_upd_addr[7:0] = (ftu_cmiss[7:0] | ftu_inv_req[7:0]);
448
449assign mct_real_miss[7:0] = ftu_cmiss[7:0] & {8{~cmu_mbhit_c}};
450////////////////////////////////////////////////////////
451// WOM bits to be filled in the WOM field of MB
452// If there is a flush, set the whole column to '0'.
453// If there is a cmiss, then use mbhit signal to select
454// the bit to be set.
455////////////////////////////////////////////////////////
456
457// raw mbhit is generated if incoming address bits 39:5 match the
458// missbuffer entry and
459// neither incoming nor the missbuffer entries are non-cacheable and
460// neither incoming nor the missbuffer entries are inval_req
461
462
463assign cmu_mbhit_c = mdp_mbhit_q[0] | mdp_mbhit_q[1] | mdp_mbhit_q[2] | mdp_mbhit_q[3]
464 | mdp_mbhit_q[4] | mdp_mbhit_q[5] | mdp_mbhit_q[6] | mdp_mbhit_q[7];
465
466
467assign mct_early_req = |(ftu_cmiss[7:0]) & ~cmu_mbhit_c;
468
469
470////////////////////////////////////////////////////////
471////////////////////////////////////////////////////////
472// SET the WOM bits
473// Each thread sets an entire column in WOM array
474////////////////////////////////////////////////////////
475
476// Reset the diagonal WOM bits which are the real miss bits
477// 1.When a Real Miss is flushed and it has no dup misses and no mbhit_q,
478// 2.When in canleave state, and has no dup misses and no mbhit_q
479// 3.Fill complete
480
481// use delayed version of ftu_redirect for resetting real miss wom bit, but use raw
482// version to reset dup miss wom bit.
483ifu_cmu_msb_ctl_msff_ctl_macro__width_8 redirect_reg (
484 .scan_in(redirect_reg_scanin),
485 .scan_out(redirect_reg_scanout),
486 .l1clk(l1clk),
487 .din (ftu_redirect[7:0]),
488 .dout (ftu_redirect_lat[7:0]),
489 .siclk(siclk),
490 .soclk(soclk)
491);
492
493assign csm_rmwbit_reset[7:0] = (cmu_req_st[7:0] & ftu_redirect_lat[7:0] & ~lsc_l15_valid[7:0] & ~cmu_has_dup_miss[7:0] & ~mdp_mbhit_q[7:0]) |
494 (cmu_canleave_st[7:0] & ~lsc_l15_valid[7:0] & ~cmu_has_dup_miss[7:0] & ~mdp_mbhit_q[7:0]) |
495 mct_fill_complete[7:0];
496
497// Thread0
498////////////////////////////////////////////////////////
499assign set_e0wom_bit0 = mdp_e0_wom[0] | mct_real_miss[0];
500assign reset_e0wom_bit0 = csm_rmwbit_reset[0];
501assign next_e0wom_bit0 = set_e0wom_bit0 & ~reset_e0wom_bit0;
502
503assign set_e1wom_bit0 = mdp_e1_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[1]);
504assign reset_e1wom_bit0 = ftu_redirect[0] | mct_fill_complete[1];
505assign next_e1wom_bit0 = set_e1wom_bit0 & ~reset_e1wom_bit0;
506
507assign set_e2wom_bit0 = mdp_e2_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[2]);
508assign reset_e2wom_bit0 = ftu_redirect[0] | mct_fill_complete[2];
509assign next_e2wom_bit0 = set_e2wom_bit0 & ~reset_e2wom_bit0;
510
511assign set_e3wom_bit0 = mdp_e3_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[3]);
512assign reset_e3wom_bit0 = ftu_redirect[0] | mct_fill_complete[3];
513assign next_e3wom_bit0 = set_e3wom_bit0 & ~reset_e3wom_bit0;
514
515assign set_e4wom_bit0 = mdp_e4_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[4]);
516assign reset_e4wom_bit0 = ftu_redirect[0] | mct_fill_complete[4];
517assign next_e4wom_bit0 = set_e4wom_bit0 & ~reset_e4wom_bit0;
518
519assign set_e5wom_bit0 = mdp_e5_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[5]);
520assign reset_e5wom_bit0 = ftu_redirect[0] | mct_fill_complete[5];
521assign next_e5wom_bit0 = set_e5wom_bit0 & ~reset_e5wom_bit0;
522
523assign set_e6wom_bit0 = mdp_e6_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[6]);
524assign reset_e6wom_bit0 = ftu_redirect[0] | mct_fill_complete[6];
525assign next_e6wom_bit0 = set_e6wom_bit0 & ~reset_e6wom_bit0;
526
527assign set_e7wom_bit0 = mdp_e7_wom[0] | (ftu_cmiss[0] & mdp_mbhit_q[7]);
528assign reset_e7wom_bit0 = ftu_redirect[0] | mct_fill_complete[7];
529assign next_e7wom_bit0 = set_e7wom_bit0 & ~reset_e7wom_bit0;
530
531////////////////////////////////////////////////////////
532// Thread1
533////////////////////////////////////////////////////////
534assign set_e0wom_bit1 = mdp_e0_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[0]);
535assign reset_e0wom_bit1 = ftu_redirect[1] | mct_fill_complete[0];
536assign next_e0wom_bit1 = set_e0wom_bit1 & ~reset_e0wom_bit1;
537
538assign set_e1wom_bit1 = mdp_e1_wom[1] | mct_real_miss[1];
539assign reset_e1wom_bit1 = csm_rmwbit_reset[1];
540assign next_e1wom_bit1 = set_e1wom_bit1 & ~reset_e1wom_bit1;
541
542assign set_e2wom_bit1 = mdp_e2_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[2]);
543assign reset_e2wom_bit1 = ftu_redirect[1] | mct_fill_complete[2];
544assign next_e2wom_bit1 = set_e2wom_bit1 & ~reset_e2wom_bit1;
545
546assign set_e3wom_bit1 = mdp_e3_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[3]);
547assign reset_e3wom_bit1 = ftu_redirect[1] | mct_fill_complete[3];
548assign next_e3wom_bit1 = set_e3wom_bit1 & ~reset_e3wom_bit1;
549
550assign set_e4wom_bit1 = mdp_e4_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[4]);
551assign reset_e4wom_bit1 = ftu_redirect[1] | mct_fill_complete[4];
552assign next_e4wom_bit1 = set_e4wom_bit1 & ~reset_e4wom_bit1;
553
554assign set_e5wom_bit1 = mdp_e5_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[5]);
555assign reset_e5wom_bit1 = ftu_redirect[1] | mct_fill_complete[5];
556assign next_e5wom_bit1 = set_e5wom_bit1 & ~reset_e5wom_bit1;
557
558assign set_e6wom_bit1 = mdp_e6_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[6]);
559assign reset_e6wom_bit1 = ftu_redirect[1] | mct_fill_complete[6];
560assign next_e6wom_bit1 = set_e6wom_bit1 & ~reset_e6wom_bit1;
561
562assign set_e7wom_bit1 = mdp_e7_wom[1] | (ftu_cmiss[1] & mdp_mbhit_q[7]);
563assign reset_e7wom_bit1 = ftu_redirect[1] | mct_fill_complete[7];
564assign next_e7wom_bit1 = set_e7wom_bit1 & ~reset_e7wom_bit1;
565
566////////////////////////////////////////////////////////
567// Thread2
568////////////////////////////////////////////////////////
569assign set_e0wom_bit2 = mdp_e0_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[0]);
570assign reset_e0wom_bit2 = ftu_redirect[2] | mct_fill_complete[0];
571assign next_e0wom_bit2 = set_e0wom_bit2 & ~reset_e0wom_bit2;
572
573assign set_e1wom_bit2 = mdp_e1_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[1]);
574assign reset_e1wom_bit2 = ftu_redirect[2] | mct_fill_complete[1];
575assign next_e1wom_bit2 = set_e1wom_bit2 & ~reset_e1wom_bit2;
576
577assign set_e2wom_bit2 = mdp_e2_wom[2] | mct_real_miss[2];
578assign reset_e2wom_bit2 = csm_rmwbit_reset[2];
579assign next_e2wom_bit2 = set_e2wom_bit2 & ~reset_e2wom_bit2;
580
581assign set_e3wom_bit2 = mdp_e3_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[3]);
582assign reset_e3wom_bit2 = ftu_redirect[2] | mct_fill_complete[3];
583assign next_e3wom_bit2 = set_e3wom_bit2 & ~reset_e3wom_bit2;
584
585assign set_e4wom_bit2 = mdp_e4_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[4]);
586assign reset_e4wom_bit2 = ftu_redirect[2] | mct_fill_complete[4];
587assign next_e4wom_bit2 = set_e4wom_bit2 & ~reset_e4wom_bit2;
588
589assign set_e5wom_bit2 = mdp_e5_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[5]);
590assign reset_e5wom_bit2 = ftu_redirect[2] | mct_fill_complete[5];
591assign next_e5wom_bit2 = set_e5wom_bit2 & ~reset_e5wom_bit2;
592
593assign set_e6wom_bit2 = mdp_e6_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[6]);
594assign reset_e6wom_bit2 = ftu_redirect[2] | mct_fill_complete[6];
595assign next_e6wom_bit2 = set_e6wom_bit2 & ~reset_e6wom_bit2;
596
597assign set_e7wom_bit2 = mdp_e7_wom[2] | (ftu_cmiss[2] & mdp_mbhit_q[7]);
598assign reset_e7wom_bit2 = ftu_redirect[2] | mct_fill_complete[7];
599assign next_e7wom_bit2 = set_e7wom_bit2 & ~reset_e7wom_bit2;
600
601////////////////////////////////////////////////////////
602// Thread3
603////////////////////////////////////////////////////////
604assign set_e0wom_bit3 = mdp_e0_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[0]);
605assign reset_e0wom_bit3 = ftu_redirect[3] | mct_fill_complete[0];
606assign next_e0wom_bit3 = set_e0wom_bit3 & ~reset_e0wom_bit3;
607
608assign set_e1wom_bit3 = mdp_e1_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[1]);
609assign reset_e1wom_bit3 = ftu_redirect[3] | mct_fill_complete[1];
610assign next_e1wom_bit3 = set_e1wom_bit3 & ~reset_e1wom_bit3;
611
612assign set_e2wom_bit3 = mdp_e2_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[2]);
613assign reset_e2wom_bit3 = ftu_redirect[3] | mct_fill_complete[2];
614assign next_e2wom_bit3 = set_e2wom_bit3 & ~reset_e2wom_bit3;
615
616assign set_e3wom_bit3 = mdp_e3_wom[3] | mct_real_miss[3];
617assign reset_e3wom_bit3 = csm_rmwbit_reset[3];
618assign next_e3wom_bit3 = set_e3wom_bit3 & ~reset_e3wom_bit3;
619
620assign set_e4wom_bit3 = mdp_e4_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[4]);
621assign reset_e4wom_bit3 = ftu_redirect[3] | mct_fill_complete[4];
622assign next_e4wom_bit3 = set_e4wom_bit3 & ~reset_e4wom_bit3;
623
624assign set_e5wom_bit3 = mdp_e5_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[5]);
625assign reset_e5wom_bit3 = ftu_redirect[3] | mct_fill_complete[5];
626assign next_e5wom_bit3 = set_e5wom_bit3 & ~reset_e5wom_bit3;
627
628assign set_e6wom_bit3 = mdp_e6_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[6]);
629assign reset_e6wom_bit3 = ftu_redirect[3] | mct_fill_complete[6];
630assign next_e6wom_bit3 = set_e6wom_bit3 & ~reset_e6wom_bit3;
631
632assign set_e7wom_bit3 = mdp_e7_wom[3] | (ftu_cmiss[3] & mdp_mbhit_q[7]);
633assign reset_e7wom_bit3 = ftu_redirect[3] | mct_fill_complete[7];
634assign next_e7wom_bit3 = set_e7wom_bit3 & ~reset_e7wom_bit3;
635
636////////////////////////////////////////////////////////
637// Thread4
638////////////////////////////////////////////////////////
639assign set_e0wom_bit4 = mdp_e0_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[0]);
640assign reset_e0wom_bit4 = ftu_redirect[4] | mct_fill_complete[0];
641assign next_e0wom_bit4 = set_e0wom_bit4 & ~reset_e0wom_bit4;
642
643assign set_e1wom_bit4 = mdp_e1_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[1]);
644assign reset_e1wom_bit4 = ftu_redirect[4] | mct_fill_complete[1];
645assign next_e1wom_bit4 = set_e1wom_bit4 & ~reset_e1wom_bit4;
646
647assign set_e2wom_bit4 = mdp_e2_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[2]);
648assign reset_e2wom_bit4 = ftu_redirect[4] | mct_fill_complete[2];
649assign next_e2wom_bit4 = set_e2wom_bit4 & ~reset_e2wom_bit4;
650
651assign set_e3wom_bit4 = mdp_e3_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[3]);
652assign reset_e3wom_bit4 = ftu_redirect[4] | mct_fill_complete[3];
653assign next_e3wom_bit4 = set_e3wom_bit4 & ~reset_e3wom_bit4;
654
655assign set_e4wom_bit4 = mdp_e4_wom[4] | mct_real_miss[4];
656assign reset_e4wom_bit4 = csm_rmwbit_reset[4];
657assign next_e4wom_bit4 = set_e4wom_bit4 & ~reset_e4wom_bit4;
658
659assign set_e5wom_bit4 = mdp_e5_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[5]);
660assign reset_e5wom_bit4 = ftu_redirect[4] | mct_fill_complete[5];
661assign next_e5wom_bit4 = set_e5wom_bit4 & ~reset_e5wom_bit4;
662
663assign set_e6wom_bit4 = mdp_e6_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[6]);
664assign reset_e6wom_bit4 = ftu_redirect[4] | mct_fill_complete[6];
665assign next_e6wom_bit4 = set_e6wom_bit4 & ~reset_e6wom_bit4;
666
667assign set_e7wom_bit4 = mdp_e7_wom[4] | (ftu_cmiss[4] & mdp_mbhit_q[7]);
668assign reset_e7wom_bit4 = ftu_redirect[4] | mct_fill_complete[7];
669assign next_e7wom_bit4 = set_e7wom_bit4 & ~reset_e7wom_bit4;
670
671////////////////////////////////////////////////////////
672// Thread5
673////////////////////////////////////////////////////////
674assign set_e0wom_bit5 = mdp_e0_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[0]);
675assign reset_e0wom_bit5 = ftu_redirect[5] | mct_fill_complete[0];
676assign next_e0wom_bit5 = set_e0wom_bit5 & ~reset_e0wom_bit5;
677
678assign set_e1wom_bit5 = mdp_e1_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[1]);
679assign reset_e1wom_bit5 = ftu_redirect[5] | mct_fill_complete[1];
680assign next_e1wom_bit5 = set_e1wom_bit5 & ~reset_e1wom_bit5;
681
682assign set_e2wom_bit5 = mdp_e2_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[2]);
683assign reset_e2wom_bit5 = ftu_redirect[5] | mct_fill_complete[2];
684assign next_e2wom_bit5 = set_e2wom_bit5 & ~reset_e2wom_bit5;
685
686assign set_e3wom_bit5 = mdp_e3_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[3]);
687assign reset_e3wom_bit5 = ftu_redirect[5] | mct_fill_complete[3];
688assign next_e3wom_bit5 = set_e3wom_bit5 & ~reset_e3wom_bit5;
689
690assign set_e4wom_bit5 = mdp_e4_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[4]);
691assign reset_e4wom_bit5 = ftu_redirect[5] | mct_fill_complete[4];
692assign next_e4wom_bit5 = set_e4wom_bit5 & ~reset_e4wom_bit5;
693
694assign set_e5wom_bit5 = mdp_e5_wom[5] | mct_real_miss[5];
695assign reset_e5wom_bit5 = csm_rmwbit_reset[5];
696assign next_e5wom_bit5 = set_e5wom_bit5 & ~reset_e5wom_bit5;
697
698assign set_e6wom_bit5 = mdp_e6_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[6]);
699assign reset_e6wom_bit5 = ftu_redirect[5] | mct_fill_complete[6];
700assign next_e6wom_bit5 = set_e6wom_bit5 & ~reset_e6wom_bit5;
701
702assign set_e7wom_bit5 = mdp_e7_wom[5] | (ftu_cmiss[5] & mdp_mbhit_q[7]);
703assign reset_e7wom_bit5 = ftu_redirect[5] | mct_fill_complete[7];
704assign next_e7wom_bit5 = set_e7wom_bit5 & ~reset_e7wom_bit5;
705
706////////////////////////////////////////////////////////
707// Thread6
708////////////////////////////////////////////////////////
709assign set_e0wom_bit6 = mdp_e0_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[0]);
710assign reset_e0wom_bit6 = ftu_redirect[6] | mct_fill_complete[0];
711assign next_e0wom_bit6 = set_e0wom_bit6 & ~reset_e0wom_bit6;
712
713assign set_e1wom_bit6 = mdp_e1_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[1]);
714assign reset_e1wom_bit6 = ftu_redirect[6] | mct_fill_complete[1];
715assign next_e1wom_bit6 = set_e1wom_bit6 & ~reset_e1wom_bit6;
716
717assign set_e2wom_bit6 = mdp_e2_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[2]);
718assign reset_e2wom_bit6 = ftu_redirect[6] | mct_fill_complete[2];
719assign next_e2wom_bit6 = set_e2wom_bit6 & ~reset_e2wom_bit6;
720
721assign set_e3wom_bit6 = mdp_e3_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[3]);
722assign reset_e3wom_bit6 = ftu_redirect[6] | mct_fill_complete[3];
723assign next_e3wom_bit6 = set_e3wom_bit6 & ~reset_e3wom_bit6;
724
725assign set_e4wom_bit6 = mdp_e4_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[4]);
726assign reset_e4wom_bit6 = ftu_redirect[6] | mct_fill_complete[4];
727assign next_e4wom_bit6 = set_e4wom_bit6 & ~reset_e4wom_bit6;
728
729assign set_e5wom_bit6 = mdp_e5_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[5]);
730assign reset_e5wom_bit6 = ftu_redirect[6] | mct_fill_complete[5];
731assign next_e5wom_bit6 = set_e5wom_bit6 & ~reset_e5wom_bit6;
732
733assign set_e6wom_bit6 = mdp_e6_wom[6] | mct_real_miss[6];
734assign reset_e6wom_bit6 = csm_rmwbit_reset[6];
735assign next_e6wom_bit6 = set_e6wom_bit6 & ~reset_e6wom_bit6;
736
737assign set_e7wom_bit6 = mdp_e7_wom[6] | (ftu_cmiss[6] & mdp_mbhit_q[7]);
738assign reset_e7wom_bit6 = ftu_redirect[6] | mct_fill_complete[7];
739assign next_e7wom_bit6 = set_e7wom_bit6 & ~reset_e7wom_bit6;
740
741////////////////////////////////////////////////////////
742// Thread7
743////////////////////////////////////////////////////////
744assign set_e0wom_bit7 = mdp_e0_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[0]);
745assign reset_e0wom_bit7 = ftu_redirect[7] | mct_fill_complete[0];
746assign next_e0wom_bit7 = set_e0wom_bit7 & ~reset_e0wom_bit7;
747
748assign set_e1wom_bit7 = mdp_e1_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[1]);
749assign reset_e1wom_bit7 = ftu_redirect[7] | mct_fill_complete[1];
750assign next_e1wom_bit7 = set_e1wom_bit7 & ~reset_e1wom_bit7;
751
752assign set_e2wom_bit7 = mdp_e2_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[2]);
753assign reset_e2wom_bit7 = ftu_redirect[7] | mct_fill_complete[2];
754assign next_e2wom_bit7 = set_e2wom_bit7 & ~reset_e2wom_bit7;
755
756assign set_e3wom_bit7 = mdp_e3_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[3]);
757assign reset_e3wom_bit7 = ftu_redirect[7] | mct_fill_complete[3];
758assign next_e3wom_bit7 = set_e3wom_bit7 & ~reset_e3wom_bit7;
759
760assign set_e4wom_bit7 = mdp_e4_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[4]);
761assign reset_e4wom_bit7 = ftu_redirect[7] | mct_fill_complete[4];
762assign next_e4wom_bit7 = set_e4wom_bit7 & ~reset_e4wom_bit7;
763
764assign set_e5wom_bit7 = mdp_e5_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[5]);
765assign reset_e5wom_bit7 = ftu_redirect[7] | mct_fill_complete[5];
766assign next_e5wom_bit7 = set_e5wom_bit7 & ~reset_e5wom_bit7;
767
768assign set_e6wom_bit7 = mdp_e6_wom[7] | (ftu_cmiss[7] & mdp_mbhit_q[6]);
769assign reset_e6wom_bit7 = ftu_redirect[7] | mct_fill_complete[6];
770assign next_e6wom_bit7 = set_e6wom_bit7 & ~reset_e6wom_bit7;
771
772assign set_e7wom_bit7 = mdp_e7_wom[7] | mct_real_miss[7];
773assign reset_e7wom_bit7 = csm_rmwbit_reset[7];
774assign next_e7wom_bit7 = set_e7wom_bit7 & ~reset_e7wom_bit7;
775
776assign mct_e0_wom[7:0] = ({next_e0wom_bit7, next_e0wom_bit6, next_e0wom_bit5, next_e0wom_bit4,
777 next_e0wom_bit3, next_e0wom_bit2, next_e0wom_bit1, next_e0wom_bit0});
778assign mct_e1_wom[7:0] = ({next_e1wom_bit7, next_e1wom_bit6, next_e1wom_bit5, next_e1wom_bit4,
779 next_e1wom_bit3, next_e1wom_bit2, next_e1wom_bit1, next_e1wom_bit0});
780assign mct_e2_wom[7:0] = ({next_e2wom_bit7, next_e2wom_bit6, next_e2wom_bit5, next_e2wom_bit4,
781 next_e2wom_bit3, next_e2wom_bit2, next_e2wom_bit1, next_e2wom_bit0});
782assign mct_e3_wom[7:0] = ({next_e3wom_bit7, next_e3wom_bit6, next_e3wom_bit5, next_e3wom_bit4,
783 next_e3wom_bit3, next_e3wom_bit2, next_e3wom_bit1, next_e3wom_bit0});
784assign mct_e4_wom[7:0] = ({next_e4wom_bit7, next_e4wom_bit6, next_e4wom_bit5, next_e4wom_bit4,
785 next_e4wom_bit3, next_e4wom_bit2, next_e4wom_bit1, next_e4wom_bit0});
786assign mct_e5_wom[7:0] = ({next_e5wom_bit7, next_e5wom_bit6, next_e5wom_bit5, next_e5wom_bit4,
787 next_e5wom_bit3, next_e5wom_bit2, next_e5wom_bit1, next_e5wom_bit0});
788assign mct_e6_wom[7:0] = ({next_e6wom_bit7, next_e6wom_bit6, next_e6wom_bit5, next_e6wom_bit4,
789 next_e6wom_bit3, next_e6wom_bit2, next_e6wom_bit1, next_e6wom_bit0});
790assign mct_e7_wom[7:0] = ({next_e7wom_bit7, next_e7wom_bit6, next_e7wom_bit5, next_e7wom_bit4,
791 next_e7wom_bit3, next_e7wom_bit2, next_e7wom_bit1, next_e7wom_bit0});
792
793ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e0_wom_reg_f (
794 .scan_in(e0_wom_reg_f_scanin),
795 .scan_out(e0_wom_reg_f_scanout),
796 .l1clk( l1clk ),
797 .din ({mct_e0_wom[7:0]}),
798 .dout ({mdp_e0_wom[7:0]}),
799 .siclk(siclk),
800 .soclk(soclk)
801);
802
803ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e1_wom_reg_f (
804 .scan_in(e1_wom_reg_f_scanin),
805 .scan_out(e1_wom_reg_f_scanout),
806 .l1clk( l1clk ),
807 .din ({mct_e1_wom[7:0]}),
808 .dout ({mdp_e1_wom[7:0]}),
809 .siclk(siclk),
810 .soclk(soclk)
811);
812
813ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e2_wom_reg_f (
814 .scan_in(e2_wom_reg_f_scanin),
815 .scan_out(e2_wom_reg_f_scanout),
816 .l1clk( l1clk ),
817 .din ({mct_e2_wom[7:0]}),
818 .dout ({mdp_e2_wom[7:0]}),
819 .siclk(siclk),
820 .soclk(soclk)
821);
822
823ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e3_wom_reg_f (
824 .scan_in(e3_wom_reg_f_scanin),
825 .scan_out(e3_wom_reg_f_scanout),
826 .l1clk( l1clk ),
827 .din ({mct_e3_wom[7:0]}),
828 .dout ({mdp_e3_wom[7:0]}),
829 .siclk(siclk),
830 .soclk(soclk)
831);
832
833ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e4_wom_reg_f (
834 .scan_in(e4_wom_reg_f_scanin),
835 .scan_out(e4_wom_reg_f_scanout),
836 .l1clk( l1clk ),
837 .din ({mct_e4_wom[7:0]}),
838 .dout ({mdp_e4_wom[7:0]}),
839 .siclk(siclk),
840 .soclk(soclk)
841);
842
843ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e5_wom_reg_f (
844 .scan_in(e5_wom_reg_f_scanin),
845 .scan_out(e5_wom_reg_f_scanout),
846 .l1clk( l1clk ),
847 .din ({mct_e5_wom[7:0]}),
848 .dout ({mdp_e5_wom[7:0]}),
849 .siclk(siclk),
850 .soclk(soclk)
851);
852
853ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e6_wom_reg_f (
854 .scan_in(e6_wom_reg_f_scanin),
855 .scan_out(e6_wom_reg_f_scanout),
856 .l1clk( l1clk ),
857 .din ({mct_e6_wom[7:0]}),
858 .dout ({mdp_e6_wom[7:0]}),
859 .siclk(siclk),
860 .soclk(soclk)
861);
862
863ifu_cmu_msb_ctl_msff_ctl_macro__width_8 e7_wom_reg_f (
864 .scan_in(e7_wom_reg_f_scanin),
865 .scan_out(e7_wom_reg_f_scanout),
866 .l1clk( l1clk ),
867 .din ({mct_e7_wom[7:0]}),
868 .dout ({mdp_e7_wom[7:0]}),
869 .siclk(siclk),
870 .soclk(soclk)
871);
872
873assign mct_real_wom[7:0] = {mdp_e7_wom[7],mdp_e6_wom[6],mdp_e5_wom[5],mdp_e4_wom[4],
874 mdp_e3_wom[3],mdp_e2_wom[2],mdp_e1_wom[1],mdp_e0_wom[0]};
875
876assign cmu_fill_wom[7:0] = ({8{~l15_spc_cpkt[8] & ~l15_spc_cpkt[7] & ~l15_spc_cpkt[6]}} & mdp_e0_wom[7:0]) |
877 ({8{~l15_spc_cpkt[8] & ~l15_spc_cpkt[7] & l15_spc_cpkt[6]}} & mdp_e1_wom[7:0]) |
878 ({8{~l15_spc_cpkt[8] & l15_spc_cpkt[7] & ~l15_spc_cpkt[6]}} & mdp_e2_wom[7:0]) |
879 ({8{~l15_spc_cpkt[8] & l15_spc_cpkt[7] & l15_spc_cpkt[6]}} & mdp_e3_wom[7:0]) |
880 ({8{ l15_spc_cpkt[8] & ~l15_spc_cpkt[7] & ~l15_spc_cpkt[6]}} & mdp_e4_wom[7:0]) |
881 ({8{ l15_spc_cpkt[8] & ~l15_spc_cpkt[7] & l15_spc_cpkt[6]}} & mdp_e5_wom[7:0]) |
882 ({8{ l15_spc_cpkt[8] & l15_spc_cpkt[7] & ~l15_spc_cpkt[6]}} & mdp_e6_wom[7:0]) |
883 ({8{ l15_spc_cpkt[8] & l15_spc_cpkt[7] & l15_spc_cpkt[6]}} & mdp_e7_wom[7:0]);
884
885assign mct_rst_dupmiss[7:0] = cmu_fill_wom[7:0] & {8{lsc_fill_rtn2}};
886
887////////////////////////////////////////////////////////////////
888// Ignore CMISS
889////////////////////////////////////////////////////////////////
890// Ignore cmiss, if cmiss occurs in either of following three cycles
891// | bf | f | C |
892// |---------------------------------------------------------
893// | DATA_READY | CMISS | CMISS |
894// | CMISS | (same line) | (same line) |
895// | (cmiss on same line| | |
896// | as data_ready) | | |
897//
898
899assign data_ready_bf[7:0] = cmu_data_ready[7:0];
900
901ifu_cmu_msb_ctl_msff_ctl_macro__width_8 data_ready_reg_f (
902 .scan_in(data_ready_reg_f_scanin),
903 .scan_out(data_ready_reg_f_scanout),
904 .l1clk( l1clk ),
905 .din ({data_ready_bf[7:0]}),
906 .dout ({data_ready_f[7:0]}),
907 .siclk(siclk),
908 .soclk(soclk)
909);
910
911ifu_cmu_msb_ctl_msff_ctl_macro__width_8 data_ready_reg_c (
912 .scan_in(data_ready_reg_c_scanin),
913 .scan_out(data_ready_reg_c_scanout),
914 .l1clk( l1clk ),
915 .din ({data_ready_f[7:0]}),
916 .dout ({data_ready_c[7:0]}),
917 .siclk(siclk),
918 .soclk(soclk)
919);
920
921
922
923// ignore cache miss if it is a dup miss and a data ready for the parent thread has been sent
924// on one of prev 3 cycles.
925assign mct_ignore_cmiss = (mdp_mbhit_q[0] & (data_ready_bf[0] | data_ready_f[0] | data_ready_c[0])) |
926 (mdp_mbhit_q[1] & (data_ready_bf[1] | data_ready_f[1] | data_ready_c[1])) |
927 (mdp_mbhit_q[2] & (data_ready_bf[2] | data_ready_f[2] | data_ready_c[2])) |
928 (mdp_mbhit_q[3] & (data_ready_bf[3] | data_ready_f[3] | data_ready_c[3])) |
929 (mdp_mbhit_q[4] & (data_ready_bf[4] | data_ready_f[4] | data_ready_c[4])) |
930 (mdp_mbhit_q[5] & (data_ready_bf[5] | data_ready_f[5] | data_ready_c[5])) |
931 (mdp_mbhit_q[6] & (data_ready_bf[6] | data_ready_f[6] | data_ready_c[6])) |
932 (mdp_mbhit_q[7] & (data_ready_bf[7] | data_ready_f[7] | data_ready_c[7])) ;
933
934
935// signal fill complete 2 cycles after data ready
936assign mct_fill_complete[7:0] = data_ready_c[7:0];
937
938////////////////////////////////////////////////////////
939// SPARE CELLS
940////////////////////////////////////////////////////////
941ifu_cmu_msb_ctl_spare_ctl_macro__num_2 spares (
942 .scan_in(spares_scanin),
943 .scan_out(spares_scanout),
944 .l1clk (l1clk),
945 .siclk(siclk),
946 .soclk(soclk)
947);
948////////////////////////////////////////////////////////
949
950supply0 vss;
951supply1 vdd;
952// fixscan start:
953assign pmen_lat_scanin = scan_in ;
954assign dup_miss_lat_scanin = pmen_lat_scanout ;
955assign redirect_reg_scanin = dup_miss_lat_scanout ;
956assign e0_wom_reg_f_scanin = redirect_reg_scanout ;
957assign e1_wom_reg_f_scanin = e0_wom_reg_f_scanout ;
958assign e2_wom_reg_f_scanin = e1_wom_reg_f_scanout ;
959assign e3_wom_reg_f_scanin = e2_wom_reg_f_scanout ;
960assign e4_wom_reg_f_scanin = e3_wom_reg_f_scanout ;
961assign e5_wom_reg_f_scanin = e4_wom_reg_f_scanout ;
962assign e6_wom_reg_f_scanin = e5_wom_reg_f_scanout ;
963assign e7_wom_reg_f_scanin = e6_wom_reg_f_scanout ;
964assign data_ready_reg_f_scanin = e7_wom_reg_f_scanout ;
965assign data_ready_reg_c_scanin = data_ready_reg_f_scanout ;
966assign spares_scanin = data_ready_reg_c_scanout ;
967assign scan_out = spares_scanout ;
968
969// fixscan end:
970endmodule
971
972
973
974
975
976
977// any PARAMS parms go into naming of macro
978
979module ifu_cmu_msb_ctl_l1clkhdr_ctl_macro (
980 l2clk,
981 l1en,
982 pce_ov,
983 stop,
984 se,
985 l1clk);
986
987
988 input l2clk;
989 input l1en;
990 input pce_ov;
991 input stop;
992 input se;
993 output l1clk;
994
995
996
997
998
999cl_sc1_l1hdr_8x c_0 (
1000
1001
1002 .l2clk(l2clk),
1003 .pce(l1en),
1004 .l1clk(l1clk),
1005 .se(se),
1006 .pce_ov(pce_ov),
1007 .stop(stop)
1008);
1009
1010
1011
1012endmodule
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026// any PARAMS parms go into naming of macro
1027
1028module ifu_cmu_msb_ctl_msff_ctl_macro__width_9 (
1029 din,
1030 l1clk,
1031 scan_in,
1032 siclk,
1033 soclk,
1034 dout,
1035 scan_out);
1036wire [8:0] fdin;
1037wire [7:0] so;
1038
1039 input [8:0] din;
1040 input l1clk;
1041 input scan_in;
1042
1043
1044 input siclk;
1045 input soclk;
1046
1047 output [8:0] dout;
1048 output scan_out;
1049assign fdin[8:0] = din[8:0];
1050
1051
1052
1053
1054
1055
1056dff #(9) d0_0 (
1057.l1clk(l1clk),
1058.siclk(siclk),
1059.soclk(soclk),
1060.d(fdin[8:0]),
1061.si({scan_in,so[7:0]}),
1062.so({so[7:0],scan_out}),
1063.q(dout[8:0])
1064);
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077endmodule
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091// any PARAMS parms go into naming of macro
1092
1093module ifu_cmu_msb_ctl_msff_ctl_macro__width_8 (
1094 din,
1095 l1clk,
1096 scan_in,
1097 siclk,
1098 soclk,
1099 dout,
1100 scan_out);
1101wire [7:0] fdin;
1102wire [6:0] so;
1103
1104 input [7:0] din;
1105 input l1clk;
1106 input scan_in;
1107
1108
1109 input siclk;
1110 input soclk;
1111
1112 output [7:0] dout;
1113 output scan_out;
1114assign fdin[7:0] = din[7:0];
1115
1116
1117
1118
1119
1120
1121dff #(8) d0_0 (
1122.l1clk(l1clk),
1123.siclk(siclk),
1124.soclk(soclk),
1125.d(fdin[7:0]),
1126.si({scan_in,so[6:0]}),
1127.so({so[6:0],scan_out}),
1128.q(dout[7:0])
1129);
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142endmodule
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152// Description: Spare gate macro for control blocks
1153//
1154// Param num controls the number of times the macro is added
1155// flops=0 can be used to use only combination spare logic
1156
1157
1158module ifu_cmu_msb_ctl_spare_ctl_macro__num_2 (
1159 l1clk,
1160 scan_in,
1161 siclk,
1162 soclk,
1163 scan_out);
1164wire si_0;
1165wire so_0;
1166wire spare0_flop_unused;
1167wire spare0_buf_32x_unused;
1168wire spare0_nand3_8x_unused;
1169wire spare0_inv_8x_unused;
1170wire spare0_aoi22_4x_unused;
1171wire spare0_buf_8x_unused;
1172wire spare0_oai22_4x_unused;
1173wire spare0_inv_16x_unused;
1174wire spare0_nand2_16x_unused;
1175wire spare0_nor3_4x_unused;
1176wire spare0_nand2_8x_unused;
1177wire spare0_buf_16x_unused;
1178wire spare0_nor2_16x_unused;
1179wire spare0_inv_32x_unused;
1180wire si_1;
1181wire so_1;
1182wire spare1_flop_unused;
1183wire spare1_buf_32x_unused;
1184wire spare1_nand3_8x_unused;
1185wire spare1_inv_8x_unused;
1186wire spare1_aoi22_4x_unused;
1187wire spare1_buf_8x_unused;
1188wire spare1_oai22_4x_unused;
1189wire spare1_inv_16x_unused;
1190wire spare1_nand2_16x_unused;
1191wire spare1_nor3_4x_unused;
1192wire spare1_nand2_8x_unused;
1193wire spare1_buf_16x_unused;
1194wire spare1_nor2_16x_unused;
1195wire spare1_inv_32x_unused;
1196
1197
1198input l1clk;
1199input scan_in;
1200input siclk;
1201input soclk;
1202output scan_out;
1203
1204cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
1205 .siclk(siclk),
1206 .soclk(soclk),
1207 .si(si_0),
1208 .so(so_0),
1209 .d(1'b0),
1210 .q(spare0_flop_unused));
1211assign si_0 = scan_in;
1212
1213cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
1214 .out(spare0_buf_32x_unused));
1215cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
1216 .in1(1'b1),
1217 .in2(1'b1),
1218 .out(spare0_nand3_8x_unused));
1219cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
1220 .out(spare0_inv_8x_unused));
1221cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
1222 .in01(1'b1),
1223 .in10(1'b1),
1224 .in11(1'b1),
1225 .out(spare0_aoi22_4x_unused));
1226cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
1227 .out(spare0_buf_8x_unused));
1228cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
1229 .in01(1'b1),
1230 .in10(1'b1),
1231 .in11(1'b1),
1232 .out(spare0_oai22_4x_unused));
1233cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
1234 .out(spare0_inv_16x_unused));
1235cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
1236 .in1(1'b1),
1237 .out(spare0_nand2_16x_unused));
1238cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
1239 .in1(1'b0),
1240 .in2(1'b0),
1241 .out(spare0_nor3_4x_unused));
1242cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
1243 .in1(1'b1),
1244 .out(spare0_nand2_8x_unused));
1245cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
1246 .out(spare0_buf_16x_unused));
1247cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
1248 .in1(1'b0),
1249 .out(spare0_nor2_16x_unused));
1250cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
1251 .out(spare0_inv_32x_unused));
1252
1253cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
1254 .siclk(siclk),
1255 .soclk(soclk),
1256 .si(si_1),
1257 .so(so_1),
1258 .d(1'b0),
1259 .q(spare1_flop_unused));
1260assign si_1 = so_0;
1261
1262cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
1263 .out(spare1_buf_32x_unused));
1264cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
1265 .in1(1'b1),
1266 .in2(1'b1),
1267 .out(spare1_nand3_8x_unused));
1268cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
1269 .out(spare1_inv_8x_unused));
1270cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
1271 .in01(1'b1),
1272 .in10(1'b1),
1273 .in11(1'b1),
1274 .out(spare1_aoi22_4x_unused));
1275cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
1276 .out(spare1_buf_8x_unused));
1277cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
1278 .in01(1'b1),
1279 .in10(1'b1),
1280 .in11(1'b1),
1281 .out(spare1_oai22_4x_unused));
1282cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
1283 .out(spare1_inv_16x_unused));
1284cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
1285 .in1(1'b1),
1286 .out(spare1_nand2_16x_unused));
1287cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
1288 .in1(1'b0),
1289 .in2(1'b0),
1290 .out(spare1_nor3_4x_unused));
1291cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
1292 .in1(1'b1),
1293 .out(spare1_nand2_8x_unused));
1294cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
1295 .out(spare1_buf_16x_unused));
1296cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
1297 .in1(1'b0),
1298 .out(spare1_nor2_16x_unused));
1299cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
1300 .out(spare1_inv_32x_unused));
1301assign scan_out = so_1;
1302
1303
1304
1305endmodule
1306