Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / l2t / rtl / l2t_vlddir_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: l2t_vlddir_dp.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 l2t_vlddir_dp (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 tcu_aclk,
40 tcu_bclk,
41 tcu_scan_en,
42 tcu_clk_stop,
43 tcu_muxtest,
44 scan_out,
45 vuaddp_lru_way_c3,
46 vuaddp_fill_way_c3,
47 vuadpm_bistordiag_vd_data,
48 tag_hit_way_vld_c3,
49 arb_vuad_ce_err_c3,
50 vuaddp_vuad_evict_c3,
51 vuaddp_wr64_inst_c3,
52 vuaddp_st_to_data_array_c3,
53 vuaddp_vuad_sel_c2,
54 vuaddp_vuad_sel_c4,
55 vuaddp_vuad_sel_rd,
56 vuaddp_vuad_sel_c2_d1,
57 vuaddp_bistordiag_wr_vd_c4,
58 vuaddp_sel_vd_wr_data_byp,
59 vuad_array_rd_data_c1,
60 vlddir_vuad_array_wr_data_c4,
61 vlddir_dirty_evict_c3,
62 vlddir_vuad_valid_c2,
63 vlddir_diag_rd_vd_out,
64 vlddir_vd_ue_c2,
65 vlddir_vd_ce_c2,
66 vlddir_vd_synd_c2,
67 mux_valid_dirty_c1_sel0,
68 mux_valid_dirty_c1_sel1,
69 mux_valid_dirty_c1_sel2);
70wire stop;
71wire pce_ov;
72wire siclk;
73wire soclk;
74wire se;
75wire muxtst;
76wire vuaddp_vuad_sel_rd_c2_n;
77wire vuaddp_vuad_sel_rd_c2;
78wire ff_valid_clone_c2_scanin;
79wire ff_valid_clone_c2_scanout;
80wire ff_valid_dirty_c2_scanin;
81wire ff_valid_dirty_c2_scanout;
82wire vd_ecc_sync_zero;
83wire vlddir_vd_ue_c2_unbuff;
84wire vlddir_vd_ce_c2_n;
85wire [5:0] vlddir_vd_synd_c2_n;
86wire vuaddp_sel_vd_wr_data_byp_n;
87wire vuaddp_vuad_sel_c2_n;
88wire ff_valid_dirty_rd_c2_scanin;
89wire ff_valid_dirty_rd_c2_scanout;
90wire vuaddp_vuad_sel_c2_d1_n;
91wire ff_valid_dirty_c3_scanin;
92wire ff_valid_dirty_c3_scanout;
93wire [15:0] valid_fill_way_c3;
94wire [15:0] tag_hit_way_vld_c3_n;
95wire [15:0] vuaddp_hit_wayvld_c3;
96wire [15:0] vuaddp_lru_hit_way_c3;
97wire [15:0] vuaddp_lru_hit_way_c3_n;
98wire [15:0] dirty_byp_c3_in_1;
99wire [15:0] dirty_byp_c3_in_2;
100wire [15:0] vuaddp_lru_and_dirty_c3;
101wire vlddir_dirty_evict_c3_1_n;
102wire vuaddp_vuad_evict_c3_n;
103wire ff_valid_dirty_c4_scanin;
104wire ff_valid_dirty_c4_scanout;
105wire vuaddp_bistordiag_wr_vd_c4_n;
106wire vuaddp_vuad_sel_c4_n;
107wire ff_ecc_valid_dirty_wr_c5_scanin;
108wire ff_ecc_valid_dirty_wr_c5_scanout;
109wire ff_ecc_valid_dirty_wr_c52_scanin;
110wire ff_ecc_valid_dirty_wr_c52_scanout;
111
112
113
114
115input l2clk;
116input scan_in;
117input tcu_pce_ov;
118input tcu_aclk;
119input tcu_bclk;
120input tcu_scan_en;
121input tcu_clk_stop;
122input tcu_muxtest;
123
124output scan_out;
125
126// 100+ pins on the right.
127input [15:0] vuaddp_lru_way_c3; // Left
128input [15:0] vuaddp_fill_way_c3; // Left
129input [38:0] vuadpm_bistordiag_vd_data; // Left // This should be C4 data. // BS and SR VUAD ECC Change 8/9/04
130
131//input [15:0] vuaddp_hit_wayvld_c3; // Right
132
133input [15:0] tag_hit_way_vld_c3; // Right
134input arb_vuad_ce_err_c3; // Right
135// Left
136input vuaddp_vuad_evict_c3;
137input vuaddp_wr64_inst_c3;
138input vuaddp_st_to_data_array_c3;
139
140input vuaddp_vuad_sel_c2;
141input vuaddp_vuad_sel_c4;
142input vuaddp_vuad_sel_rd;
143input vuaddp_vuad_sel_c2_d1;
144
145input vuaddp_bistordiag_wr_vd_c4;
146input vuaddp_sel_vd_wr_data_byp; // should be a C6-c2 bypass
147
148// Bottom
149input [38:0] vuad_array_rd_data_c1 ;
150
151output [38:0] vlddir_vuad_array_wr_data_c4; // Bottom
152
153output vlddir_dirty_evict_c3; // TOP
154output [15:0] vlddir_vuad_valid_c2; // Top
155
156output [38:0] vlddir_diag_rd_vd_out ; // Left
157
158output vlddir_vd_ue_c2;
159output [1:0] vlddir_vd_ce_c2;
160output [5:0] vlddir_vd_synd_c2;
161
162input mux_valid_dirty_c1_sel0;
163input mux_valid_dirty_c1_sel1;
164input mux_valid_dirty_c1_sel2;
165
166
167assign stop = tcu_clk_stop;
168assign pce_ov = tcu_pce_ov;
169assign siclk = tcu_aclk;
170assign soclk = tcu_bclk;
171assign se = tcu_scan_en;
172assign muxtst = tcu_muxtest;
173
174wire [7:0] first_level_out;
175wire [3:0] second_level_out;
176wire [1:0] third_level_out;
177
178wire [15:0] valid_rd_byp_c2;
179wire [15:0] valid_rd_c2;
180wire [15:0] valid_byp_c1;
181wire [15:0] valid_byp_c3_in;
182wire [15:0] valid_byp_c3_in_buf;
183wire [15:0] valid_c1;
184wire [15:0] valid_c2;
185wire [15:0] valid_corr_c2; // BS and SR VUAD ECC Change 8/9/04
186wire [15:0] valid_fnl_c2; // BS and SR VUAD ECC Change 8/9/04
187wire [15:0] valid_c3;
188wire [15:0] valid_c4;
189wire [15:0] valid_wr_data_c5;
190wire [15:0] valid_wr_data_c52; // BS 03/11/04 extra cycle for mem access
191
192
193wire [15:0] dirty_byp_c2_in;
194wire [15:0] dirty_rd_byp_c2;
195wire [15:0] dirty_rd_c2;
196wire [15:0] dirty_byp_c1;
197wire [15:0] dirty_byp_c3_in;
198wire [15:0] dirty_byp_c3_in_buf;
199wire [15:0] dirty_c1;
200wire [15:0] dirty_c2;
201wire [15:0] dirty_corr_c2;
202wire [15:0] dirty_fnl_c2;
203wire [15:0] dirty_c3;
204wire [15:0] dirty_c4;
205wire [15:0] dirty_wr_data_c5;
206wire [15:0] dirty_wr_data_c52; // BS 03/11/04 extra cycle for mem access
207
208
209wire [15:0] valid_byp_c2c3;
210wire [15:0] valid_byp_c4c5;
211wire [15:0] dirty_byp_c2c3;
212wire [15:0] dirty_byp_c4c5;
213
214// BS and SR VUAD ECC Change 8/9/04
215
216wire [6:0] vd_ecc_wr_data_c3;
217wire [6:0] vd_ecc_wr_data_c4;
218wire [6:0] vd_ecc_wr_data_c5;
219wire [6:0] vd_ecc_wr_data_c52;
220wire [6:0] vd_ecc_rd_data_c2;
221wire [6:0] vd_ecc_c2;
222wire [6:0] vd_ecc_synd;
223
224
225////////////////////////////////////////////////////////////////////////////////
226// VALID BIT ( Use leftmost 16 dp pitches for the valid bit)
227// DIRTY bit ( use the right 16 dp pitches )
228////////////////////////////////////////////////////////////////////////////////
229
230
231// Row 17
232// Use a 2-1 mux flop here to reduce setup
233//inv_macro vuaddp_vuad_sel_rd_inv_slice (width=1,dinv=16x)
234// (
235// .dout (vuaddp_vuad_sel_rd_n ),
236// .din (vuaddp_vuad_sel_rd )
237// );
238
239l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_vuad_sel_rd_inv_c2_slice
240 (
241 .dout (vuaddp_vuad_sel_rd_c2_n ),
242 .din (vuaddp_vuad_sel_rd_c2 )
243 );
244//
245//mux_macro mux_valid_dirty_c1 (width=32,ports=2,mux=aonpe,stack=32r,dmux=8x)
246// (
247// .dout ({valid_c1[15:0],dirty_c1[15:0]}),
248// .din0 ({vuad_array_rd_data_c1[31:16],vuad_array_rd_data_c1[15:0]}),
249// .din1 ({valid_byp_c1[15:0],dirty_byp_c1[15:0]}),
250// .sel0 (vuaddp_vuad_sel_rd),
251// .sel1 (vuaddp_vuad_sel_rd_n)
252// );
253//
254
255//assign valid_c1[15:0] = vuaddp_vuad_sel_rd ? vuad_array_rd_data_c1[31:16] : valid_byp_c1[15:0];
256//assign dirty_c1[15:0] = vuaddp_vuad_sel_rd ? vuad_array_rd_data_c1[15:0] : dirty_byp_c1[15:0];
257//assign valid_byp_c1[15:0] = vuaddp_vuad_sel_c2orc3 ? valid_byp_c2c3[15:0] : valid_byp_c4c5[15:0];
258//assign dirty_byp_c1[15:0] = vuaddp_vuad_sel_c2orc3 ? dirty_byp_c2c3[15:0] : dirty_byp_c4c5[15:0];
259
260//assign mux_valid_dirty_c1_sel0 = vuaddp_vuad_sel_rd;
261//assign mux_valid_dirty_c1_sel1 = ~vuaddp_vuad_sel_rd & vuaddp_vuad_sel_c2orc3;
262//assign mux_valid_dirty_c1_sel2 = ~vuaddp_vuad_sel_rd & ~vuaddp_vuad_sel_c2orc3;
263
264
265l2t_vlddir_dp_mux_macro__dmux_32x__mux_pgnpe__stack_32r__width_32 mux_valid_dirty_c1
266 (
267 .dout({valid_c1[15:0],dirty_c1[15:0]}),
268 .din0({vuad_array_rd_data_c1[31:16],vuad_array_rd_data_c1[15:0]}),
269 .din1({valid_byp_c2c3[15:0],dirty_byp_c2c3[15:0]}),
270 .din2({valid_byp_c4c5[15:0],dirty_byp_c4c5[15:0]}),
271 .sel0(mux_valid_dirty_c1_sel0 ),
272 .sel1(mux_valid_dirty_c1_sel1 ),
273 .sel2(mux_valid_dirty_c1_sel2 ),
274 .muxtst(muxtst)
275 );
276
277
278//mux_macro mux_valid_dirty_byp_c1 (width=32,ports=2,mux=aonpe,stack=32r,dmux=8x)
279// (
280// .dout ({valid_byp_c1[15:0],dirty_byp_c1[15:0]}),
281// .din0 ({valid_byp_c2c3[15:0],dirty_byp_c2c3[15:0]}),
282// .din1 ({valid_byp_c4c5[15:0],dirty_byp_c4c5[15:0]}),
283// .sel0 (vuaddp_vuad_sel_c2orc3),
284// .sel1 (vuaddp_vuad_sel_c2orc3_n)
285// );
286//
287
288
289l2t_vlddir_dp_msff_macro__dmsff_32x__stack_16r__width_16 ff_valid_clone_c2
290 (
291 .scan_in(ff_valid_clone_c2_scanin),
292 .scan_out(ff_valid_clone_c2_scanout),
293 .dout(vlddir_vuad_valid_c2[15:0]),
294 .din(valid_c1[15:0]),
295 .clk(l2clk),
296 .en(1'b1),
297 .se(se),
298 .siclk(siclk),
299 .soclk(soclk),
300 .pce_ov(pce_ov),
301 .stop(stop)
302 ) ;
303
304l2t_vlddir_dp_msff_macro__dmsff_32x__stack_39r__width_39 ff_valid_dirty_c2
305 (
306 .scan_in(ff_valid_dirty_c2_scanin),
307 .scan_out(ff_valid_dirty_c2_scanout),
308 .dout({vd_ecc_c2[6:0],valid_c2[15:0],dirty_c2[15:0]}),
309 .din({vuad_array_rd_data_c1[38:32],valid_c1[15:0],dirty_c1[15:0]}),
310 .clk(l2clk),
311 .en(1'b1),
312 .se(se),
313 .siclk(siclk),
314 .soclk(soclk),
315 .pce_ov(pce_ov),
316 .stop(stop)
317 ) ;
318
319
320l2t_ecc39_dp vd_ecc_corr // BS and SR VUAD ECC Change 8/9/04
321 (
322 .dout ({valid_corr_c2[15:0],dirty_corr_c2[15:0]}),
323 .cflag (vd_ecc_synd[5:0]),
324 .pflag (vd_ecc_synd[6]),
325 .din ({valid_c2[15:0],dirty_c2[15:0]}),
326 .parity (vd_ecc_c2[6:0])
327 );
328
329// assign vlddir_vd_ue_c2 = ((|(vd_ecc_synd[5:0])) & ~vd_ecc_synd[6]) & vuaddp_vuad_sel_rd_c2 ;
330
331l2t_vlddir_dp_cmp_macro__width_8 cmp_vd_ecc_synd_nonzero
332 (
333 .dout (vd_ecc_sync_zero),
334 .din0 ({2'b0,vd_ecc_synd[5:0]}),
335 .din1 ({8'b0})
336 );
337
338l2t_vlddir_dp_nor_macro__ports_3__width_1 nor_vlddir_vd_ue_c2
339 (
340 .dout (vlddir_vd_ue_c2_unbuff),
341 .din0 (vd_ecc_synd[6]),
342 .din1 (vuaddp_vuad_sel_rd_c2_n),
343 .din2 (vd_ecc_sync_zero)
344 );
345
346l2t_vlddir_dp_buff_macro__dbuff_48x__width_1 buff_vlddir_vd_ue_c2
347 (
348 .dout (vlddir_vd_ue_c2),
349 .din (vlddir_vd_ue_c2_unbuff)
350 );
351
352// assign vlddir_vd_ce_c2 = (vd_ecc_synd[6] & (vuaddp_vuad_sel_rd_c2 )) ;
353l2t_vlddir_dp_nand_macro__width_1 nand_vlddir_ua_ce_c2
354 (
355 .dout (vlddir_vd_ce_c2_n),
356 .din0 (vd_ecc_synd[6]),
357 .din1 (vuaddp_vuad_sel_rd_c2)
358 );
359
360l2t_vlddir_dp_inv_macro__dinv_32x__width_2 inv_usaloc_ua_ce_c2
361 (
362 .dout ({vlddir_vd_ce_c2[0],vlddir_vd_ce_c2[1]}),
363 .din ({vlddir_vd_ce_c2_n,vlddir_vd_ce_c2_n})
364 );
365
366// assign vlddir_vd_synd_c2 = (vd_ecc_synd[5:0] & {6{(vuaddp_vuad_sel_rd_c2 )}}) ;
367
368l2t_vlddir_dp_nand_macro__width_6 nand_vlddir_vd_synd_c2_n
369 (
370 .dout (vlddir_vd_synd_c2_n[5:0]),
371 .din0 (vd_ecc_synd[5:0]),
372 .din1 ({6{vuaddp_vuad_sel_rd_c2}})
373 );
374
375l2t_vlddir_dp_inv_macro__dinv_48x__width_6 inv_vlddir_vd_synd_c2
376 (
377 .dout (vlddir_vd_synd_c2[5:0]),
378 .din (vlddir_vd_synd_c2_n[5:0])
379 );
380
381l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_32r__width_32 mux_fnl_valid_dirty_c2
382 (.dout({valid_fnl_c2[15:0],dirty_fnl_c2[15:0]}),
383 .din0 ({valid_corr_c2[15:0],dirty_corr_c2[15:0]}),
384 .din1 ({valid_c2[15:0],dirty_c2[15:0]}),
385 .sel0 (vuaddp_vuad_sel_rd_c2),
386 .sel1 (vuaddp_vuad_sel_rd_c2_n)
387 );
388
389//assign vlddir_vuad_valid_c2 = valid_c2 ; // Top Drive using a 40X driver.
390
391//buff_macro buff_vlddir_vuad_valid_c2 (width=16,dbuff=48x)
392// (
393// .dout (vlddir_vuad_valid_c2[15:0]),
394// .din (valid_c2[15:0])
395// );
396
397l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_sel_vd_wr_data_byp_inv_slice
398 (
399 .dout (vuaddp_sel_vd_wr_data_byp_n ),
400 .din (vuaddp_sel_vd_wr_data_byp )
401 );
402l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_39r__width_39 mux_valid_dirty_rd_c2
403 (
404 .dout ({vd_ecc_rd_data_c2[6:0],valid_rd_c2[15:0],dirty_rd_c2[15:0]}),
405 .din0 ({vd_ecc_wr_data_c52[6:0],valid_wr_data_c52[15:0],dirty_wr_data_c52[15:0]}),
406 .din1 ({vd_ecc_c2[6:0],valid_rd_byp_c2[15:0],dirty_rd_byp_c2[15:0]}),
407 .sel0 (vuaddp_sel_vd_wr_data_byp),
408 .sel1 (vuaddp_sel_vd_wr_data_byp_n)
409 ) ;
410
411l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_vuad_sel_c2_inv_slice
412 (
413 .dout (vuaddp_vuad_sel_c2_n ),
414 .din (vuaddp_vuad_sel_c2 )
415 );
416
417// Row 16, vuad rd data c2 flop
418l2t_vlddir_dp_msff_macro__stack_33r__width_33 ff_valid_dirty_rd_c2
419 (
420 .scan_in(ff_valid_dirty_rd_c2_scanin),
421 .scan_out(ff_valid_dirty_rd_c2_scanout),
422 .dout({vuaddp_vuad_sel_rd_c2,valid_rd_byp_c2[15:0],dirty_rd_byp_c2[15:0]}),
423 .din({vuaddp_vuad_sel_rd,vuad_array_rd_data_c1[31:16],vuad_array_rd_data_c1[15:0]}),
424 .clk(l2clk),
425 .en(1'b1),
426 .se(se),
427 .siclk(siclk),
428 .soclk(soclk),
429 .pce_ov(pce_ov),
430 .stop(stop)
431 );
432
433
434// Combinational row. Use a 20x Buffer
435// assign vlddir_diag_rd_vd_out[38:32] = vd_ecc_rd_data_c2[6:0];
436// assign vlddir_diag_rd_vd_out[31:16] = valid_rd_c2[15:0];
437// assign vlddir_diag_rd_vd_out[15:0] = dirty_rd_c2[15:0];
438
439
440l2t_vlddir_dp_buff_macro__dbuff_48x__width_39 buff_vlddir_diag_rd_vd_out
441 (
442 .dout (vlddir_diag_rd_vd_out[38:0]),
443 .din ({vd_ecc_rd_data_c2[6:0],valid_rd_c2[15:0],dirty_rd_c2[15:0]})
444 );
445
446// Row 12
447l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_32r__width_32 mux_valid_dirty_byp_c2c3
448 (
449 .dout ({valid_byp_c2c3[15:0],dirty_byp_c2c3[15:0]}),
450 .din0 ({valid_fnl_c2[15:0],dirty_fnl_c2[15:0]}),
451 .din1 ({valid_byp_c3_in[15:0],dirty_byp_c3_in[15:0]}),
452 .sel0 (vuaddp_vuad_sel_c2),
453 .sel1 (vuaddp_vuad_sel_c2_n)
454 );
455
456
457//// final bypass mux can be here.
458//inv_macro vuaddp_vuad_sel_c2orc3_inv_slice (width=1,dinv=16x)
459// (
460// .dout (vuaddp_vuad_sel_c2orc3_n ),
461// .din (vuaddp_vuad_sel_c2orc3 )
462// );
463//// ROw11
464//mux_macro mux_valid_dirty_byp_c1 (width=32,ports=2,mux=aonpe,stack=32r,dmux=8x)
465// (
466// .dout ({valid_byp_c1[15:0],dirty_byp_c1[15:0]}),
467// .din0 ({valid_byp_c2c3[15:0],dirty_byp_c2c3[15:0]}),
468// .din1 ({valid_byp_c4c5[15:0],dirty_byp_c4c5[15:0]}),
469// .sel0 (vuaddp_vuad_sel_c2orc3),
470// .sel1 (vuaddp_vuad_sel_c2orc3_n)
471// );
472//
473// Row 9
474
475// Use a 2-1 mux flop here to reduce setup and area
476l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_vuad_sel_c2_d1_inv_slice
477 (
478 .dout (vuaddp_vuad_sel_c2_d1_n ),
479 .din (vuaddp_vuad_sel_c2_d1 )
480 );
481
482l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_16r__width_16 mux_valid_dirty_byp_c2_in
483 (
484 .dout (dirty_byp_c2_in[15:0]),
485 .din0 (dirty_fnl_c2[15:0]),
486 .din1 (dirty_byp_c3_in[15:0]),
487 .sel0 (vuaddp_vuad_sel_c2_d1_n),
488 .sel1 (vuaddp_vuad_sel_c2_d1)
489 );
490
491l2t_vlddir_dp_msff_macro__stack_32r__width_32 ff_valid_dirty_c3
492 (
493 .scan_in(ff_valid_dirty_c3_scanin),
494 .scan_out(ff_valid_dirty_c3_scanout),
495 .dout({valid_c3[15:0],dirty_c3[15:0]}),
496 .din({valid_fnl_c2[15:0],dirty_byp_c2_in[15:0]}),
497 .clk(l2clk),
498 .en(1'b1),
499 .se(se),
500 .siclk(siclk),
501 .soclk(soclk),
502 .pce_ov(pce_ov),
503 .stop(stop)
504 );
505
506
507//////////////////////////////////////////////////////////////////
508//assign valid_byp_c3_in = (valid_c3 | vuaddp_fill_way_c3) &
509// ~( ({16{vuaddp_vuad_evict_c3}} & vuaddp_lru_way_c3) |
510// ({16{vuaddp_wr64_inst_c3}} & vuaddp_hit_wayvld_c3) );
511//
512//
513//
514l2t_vlddir_dp_or_macro__width_16 nand_valid_fill_way_c3
515 (
516 .dout (valid_fill_way_c3[15:0]),
517 .din0 (valid_c3[15:0]),
518 .din1 (vuaddp_fill_way_c3[15:0])
519 );
520
521//////// Timing fix bypassed vuad ctl ///////////////
522//inv_macro inv_arb_vuad_ce_err_c3 (width=1,dinv=16x)
523// (
524// .dout (arb_vuad_ce_err_c3_n),
525// .din (arb_vuad_ce_err_c3)
526// );
527//
528//
529l2t_vlddir_dp_inv_macro__dinv_16x__width_16 inv_tag_hit_way_vld_c3
530 (
531 .dout (tag_hit_way_vld_c3_n[15:0]),
532 .din (tag_hit_way_vld_c3[15:0])
533 );
534l2t_vlddir_dp_nor_macro__width_16 nor_vuaddp_hit_wayvld_c3
535 (
536 .dout (vuaddp_hit_wayvld_c3[15:0]),
537 .din0 (tag_hit_way_vld_c3_n[15:0]),
538 .din1 ({16{arb_vuad_ce_err_c3}})
539 );
540//////// Timing fix bypassed vuad ctl ///////////////
541
542
543l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__width_16 mux_lru_hit_way
544 (
545 .dout (vuaddp_lru_hit_way_c3[15:0]),
546 .din0 (vuaddp_lru_way_c3[15:0]),
547 .din1 (vuaddp_hit_wayvld_c3[15:0]),
548 .sel0 (vuaddp_vuad_evict_c3),
549 .sel1 (vuaddp_wr64_inst_c3)
550 );
551
552l2t_vlddir_dp_inv_macro__dinv_8x__width_16 inv_lru_hit_way_c3
553 (
554 .dout (vuaddp_lru_hit_way_c3_n[15:0]),
555 .din (vuaddp_lru_hit_way_c3[15:0])
556 );
557
558l2t_vlddir_dp_and_macro__width_16 nor_valid_byp_c3_in
559 (
560 .dout (valid_byp_c3_in[15:0]),
561 .din0 (vuaddp_lru_hit_way_c3_n[15:0]),
562 .din1 (valid_fill_way_c3[15:0])
563 );
564
565//////////////////////////////////////////////////////////////////
566//// Row8
567//assign dirty_byp_c3_in = ( dirty_c3 | ({16{vuaddp_st_to_data_array_c3}} & vuaddp_hit_wayvld_c3) )
568// &
569// ~( ({16{vuaddp_vuad_evict_c3}} & vuaddp_lru_way_c3) |
570// ({16{vuaddp_wr64_inst_c3}} & vuaddp_hit_wayvld_c3) );
571///////////////////////////////////////////////////////////////////////////////
572
573
574
575l2t_vlddir_dp_and_macro__width_16 nand_dirty_byp_c3_in_1
576 (
577 .dout (dirty_byp_c3_in_1[15:0]),
578 .din0 ({16{vuaddp_st_to_data_array_c3}}),
579 .din1 (vuaddp_hit_wayvld_c3[15:0])
580 );
581
582l2t_vlddir_dp_or_macro__width_16 nand_dirty_byp_c3_in
583 (
584 .dout (dirty_byp_c3_in_2[15:0]),
585 .din0 (dirty_byp_c3_in_1[15:0]),
586 .din1 (dirty_c3[15:0])
587 );
588
589l2t_vlddir_dp_and_macro__width_16 and_dirty_byp_c3_in_2
590 (
591 .dout (dirty_byp_c3_in[15:0]),
592 .din0 (dirty_byp_c3_in_2[15:0]),
593 .din1 (vuaddp_lru_hit_way_c3_n[15:0])
594 );
595
596
597//////////////////////////////////////////////////////////////////
598// assign vlddir_dirty_evict_c3 = vuaddp_vuad_evict_c3 & |(vuaddp_lru_way_c3 & dirty_c3) ;// Top
599
600l2t_vlddir_dp_and_macro__width_16 and_valid_dirty_c3
601 (
602 .dout (vuaddp_lru_and_dirty_c3[15:0]),
603 .din0 (vuaddp_lru_way_c3[15:0]),
604 .din1 (dirty_c3[15:0])
605 );
606
607l2t_vlddir_dp_cmp_macro__width_16 cmp_and_valid_dirty_c3
608 (
609 .dout (vlddir_dirty_evict_c3_1_n),
610 .din0 (vuaddp_lru_and_dirty_c3[15:0]),
611 .din1 (16'h0000)
612 );
613
614l2t_vlddir_dp_inv_macro__width_1 inv_vuaddp_vuad_evict_c3
615 (
616 .dout (vuaddp_vuad_evict_c3_n),
617 .din (vuaddp_vuad_evict_c3)
618 );
619
620l2t_vlddir_dp_nor_macro__width_1 nor_vlddir_dirty_evict_c3
621 (
622 .dout (vlddir_dirty_evict_c3),
623 .din0 (vuaddp_vuad_evict_c3_n),
624 .din1 (vlddir_dirty_evict_c3_1_n)
625 );
626
627//////////////////////////////////////////////////////////////////
628l2t_pgen32b_dp vd_ecc_gen
629 (
630 .parity (vd_ecc_wr_data_c3[6:0]),
631 .dout ({valid_byp_c3_in_buf[15:0],dirty_byp_c3_in_buf[15:0]}),
632 .din ({valid_byp_c3_in[15:0],dirty_byp_c3_in[15:0]})
633 );
634
635// Row 5, vuad C4 flop
636l2t_vlddir_dp_msff_macro__stack_39r__width_39 ff_valid_dirty_c4
637 (
638 .scan_in(ff_valid_dirty_c4_scanin),
639 .scan_out(ff_valid_dirty_c4_scanout),
640 .dout({vd_ecc_wr_data_c4[6:0],valid_c4[15:0],dirty_c4[15:0]}),
641 .din({vd_ecc_wr_data_c3[6:0],valid_byp_c3_in_buf[15:0],dirty_byp_c3_in_buf[15:0]}),
642 .clk(l2clk),
643 .en(1'b1),
644 .se(se),
645 .siclk(siclk),
646 .soclk(soclk),
647 .pce_ov(pce_ov),
648 .stop(stop)
649 ) ;
650
651
652l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_bistordiag_wr_vd_c4_inv_slice
653 (
654 .dout (vuaddp_bistordiag_wr_vd_c4_n ),
655 .din (vuaddp_bistordiag_wr_vd_c4 )
656 );
657
658l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_39r__width_39 mux_wr_array_valid_dirty_c4
659 (
660 .dout (vlddir_vuad_array_wr_data_c4[38:0]),
661 .din0 ({vd_ecc_wr_data_c4[6:0],valid_c4[15:0],dirty_c4[15:0]}),
662 .din1 (vuadpm_bistordiag_vd_data[38:0]),
663 .sel0 (vuaddp_bistordiag_wr_vd_c4_n),
664 .sel1 (vuaddp_bistordiag_wr_vd_c4)
665 ) ;
666
667l2t_vlddir_dp_inv_macro__dinv_16x__width_1 vuaddp_vuad_sel_c4_inv_slice
668 (
669 .dout (vuaddp_vuad_sel_c4_n ),
670 .din (vuaddp_vuad_sel_c4 )
671 );
672
673
674l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_32r__width_32 mux_valid_dirty_byp_c4c5
675 (
676 .dout ({valid_byp_c4c5[15:0],dirty_byp_c4c5[15:0]}),
677 .din0 ({valid_c4[15:0],dirty_c4[15:0]}),
678 .din1 ({valid_wr_data_c5[15:0],dirty_wr_data_c5[15:0]}),
679 .sel0 (vuaddp_vuad_sel_c4),
680 .sel1 (vuaddp_vuad_sel_c4_n)
681 ) ;
682
683// Row 2, Vuad C5 flop
684l2t_vlddir_dp_msff_macro__stack_39r__width_39 ff_ecc_valid_dirty_wr_c5
685 (
686 .scan_in(ff_ecc_valid_dirty_wr_c5_scanin),
687 .scan_out(ff_ecc_valid_dirty_wr_c5_scanout),
688 .dout({vd_ecc_wr_data_c5[6:0],valid_wr_data_c5[15:0],dirty_wr_data_c5[15:0]}),
689 .din({vd_ecc_wr_data_c4[6:0],valid_c4[15:0],dirty_c4[15:0]}),
690 .clk(l2clk),
691 .en(1'b1),
692 .se(se),
693 .siclk(siclk),
694 .soclk(soclk),
695 .pce_ov(pce_ov),
696 .stop(stop)
697 );
698
699//Row 1, Vuad C6 flop
700l2t_vlddir_dp_msff_macro__stack_39r__width_39 ff_ecc_valid_dirty_wr_c52 // BS 03/11/04 extra cycle for mem access
701 (
702 .scan_in(ff_ecc_valid_dirty_wr_c52_scanin),
703 .scan_out(ff_ecc_valid_dirty_wr_c52_scanout),
704 .dout({vd_ecc_wr_data_c52[6:0],valid_wr_data_c52[15:0],dirty_wr_data_c52[15:0]}),
705 .din({vd_ecc_wr_data_c5[6:0],valid_wr_data_c5[15:0],dirty_wr_data_c5[15:0]}),
706 .clk(l2clk),
707 .en(1'b1),
708 .se(se),
709 .siclk(siclk),
710 .soclk(soclk),
711 .pce_ov(pce_ov),
712 .stop(stop)
713 ) ;
714
715
716// fixscan start:
717assign ff_valid_clone_c2_scanin = scan_in ;
718assign ff_valid_dirty_c2_scanin = ff_valid_clone_c2_scanout;
719assign ff_valid_dirty_rd_c2_scanin = ff_valid_dirty_c2_scanout;
720assign ff_valid_dirty_c3_scanin = ff_valid_dirty_rd_c2_scanout;
721assign ff_valid_dirty_c4_scanin = ff_valid_dirty_c3_scanout;
722assign ff_ecc_valid_dirty_wr_c5_scanin = ff_valid_dirty_c4_scanout;
723assign ff_ecc_valid_dirty_wr_c52_scanin = ff_ecc_valid_dirty_wr_c5_scanout;
724assign scan_out = ff_ecc_valid_dirty_wr_c52_scanout;
725// fixscan end:
726endmodule
727
728
729
730//
731// invert macro
732//
733//
734
735
736
737
738
739module l2t_vlddir_dp_inv_macro__dinv_16x__width_1 (
740 din,
741 dout);
742 input [0:0] din;
743 output [0:0] dout;
744
745
746
747
748
749
750inv #(1) d0_0 (
751.in(din[0:0]),
752.out(dout[0:0])
753);
754
755
756
757
758
759
760
761
762
763endmodule
764
765
766
767
768
769// general mux macro for pass-gate and and-or muxes with/wout priority encoders
770// also for pass-gate with decoder
771
772
773
774
775
776// any PARAMS parms go into naming of macro
777
778module l2t_vlddir_dp_mux_macro__dmux_32x__mux_pgnpe__stack_32r__width_32 (
779 din0,
780 sel0,
781 din1,
782 sel1,
783 din2,
784 sel2,
785 muxtst,
786 dout);
787wire buffout0;
788wire buffout1;
789wire buffout2;
790
791 input [31:0] din0;
792 input sel0;
793 input [31:0] din1;
794 input sel1;
795 input [31:0] din2;
796 input sel2;
797 input muxtst;
798 output [31:0] dout;
799
800
801
802
803
804cl_dp1_muxbuff3_8x c0_0 (
805 .in0(sel0),
806 .in1(sel1),
807 .in2(sel2),
808 .out0(buffout0),
809 .out1(buffout1),
810 .out2(buffout2)
811);
812mux3 #(32) d0_0 (
813 .sel0(buffout0),
814 .sel1(buffout1),
815 .sel2(buffout2),
816 .in0(din0[31:0]),
817 .in1(din1[31:0]),
818 .in2(din2[31:0]),
819.dout(dout[31:0]),
820 .muxtst(muxtst)
821);
822
823
824
825
826
827
828
829
830
831
832
833
834
835endmodule
836
837
838
839
840
841
842// any PARAMS parms go into naming of macro
843
844module l2t_vlddir_dp_msff_macro__dmsff_32x__stack_16r__width_16 (
845 din,
846 clk,
847 en,
848 se,
849 scan_in,
850 siclk,
851 soclk,
852 pce_ov,
853 stop,
854 dout,
855 scan_out);
856wire l1clk;
857wire siclk_out;
858wire soclk_out;
859wire [14:0] so;
860
861 input [15:0] din;
862
863
864 input clk;
865 input en;
866 input se;
867 input scan_in;
868 input siclk;
869 input soclk;
870 input pce_ov;
871 input stop;
872
873
874
875 output [15:0] dout;
876
877
878 output scan_out;
879
880
881
882
883cl_dp1_l1hdr_8x c0_0 (
884.l2clk(clk),
885.pce(en),
886.aclk(siclk),
887.bclk(soclk),
888.l1clk(l1clk),
889 .se(se),
890 .pce_ov(pce_ov),
891 .stop(stop),
892 .siclk_out(siclk_out),
893 .soclk_out(soclk_out)
894);
895dff #(16) d0_0 (
896.l1clk(l1clk),
897.siclk(siclk_out),
898.soclk(soclk_out),
899.d(din[15:0]),
900.si({scan_in,so[14:0]}),
901.so({so[14:0],scan_out}),
902.q(dout[15:0])
903);
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924endmodule
925
926
927
928
929
930
931
932
933
934
935
936
937
938// any PARAMS parms go into naming of macro
939
940module l2t_vlddir_dp_msff_macro__dmsff_32x__stack_39r__width_39 (
941 din,
942 clk,
943 en,
944 se,
945 scan_in,
946 siclk,
947 soclk,
948 pce_ov,
949 stop,
950 dout,
951 scan_out);
952wire l1clk;
953wire siclk_out;
954wire soclk_out;
955wire [37:0] so;
956
957 input [38:0] din;
958
959
960 input clk;
961 input en;
962 input se;
963 input scan_in;
964 input siclk;
965 input soclk;
966 input pce_ov;
967 input stop;
968
969
970
971 output [38:0] dout;
972
973
974 output scan_out;
975
976
977
978
979cl_dp1_l1hdr_8x c0_0 (
980.l2clk(clk),
981.pce(en),
982.aclk(siclk),
983.bclk(soclk),
984.l1clk(l1clk),
985 .se(se),
986 .pce_ov(pce_ov),
987 .stop(stop),
988 .siclk_out(siclk_out),
989 .soclk_out(soclk_out)
990);
991dff #(39) d0_0 (
992.l1clk(l1clk),
993.siclk(siclk_out),
994.soclk(soclk_out),
995.d(din[38:0]),
996.si({scan_in,so[37:0]}),
997.so({so[37:0],scan_out}),
998.q(dout[38:0])
999);
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020endmodule
1021
1022
1023
1024
1025
1026//
1027// xor macro for ports = 2,3
1028//
1029//
1030
1031
1032
1033
1034
1035module l2t_vlddir_dp_xor_macro__dxor_8x__ports_3__width_1 (
1036 din0,
1037 din1,
1038 din2,
1039 dout);
1040 input [0:0] din0;
1041 input [0:0] din1;
1042 input [0:0] din2;
1043 output [0:0] dout;
1044
1045
1046
1047
1048
1049xor3 #(1) d0_0 (
1050.in0(din0[0:0]),
1051.in1(din1[0:0]),
1052.in2(din2[0:0]),
1053.out(dout[0:0])
1054);
1055
1056
1057
1058
1059
1060
1061
1062
1063endmodule
1064
1065
1066
1067
1068
1069//
1070// xor macro for ports = 2,3
1071//
1072//
1073
1074
1075
1076
1077
1078module l2t_vlddir_dp_xor_macro__dxor_16x__ports_3__width_1 (
1079 din0,
1080 din1,
1081 din2,
1082 dout);
1083 input [0:0] din0;
1084 input [0:0] din1;
1085 input [0:0] din2;
1086 output [0:0] dout;
1087
1088
1089
1090
1091
1092xor3 #(1) d0_0 (
1093.in0(din0[0:0]),
1094.in1(din1[0:0]),
1095.in2(din2[0:0]),
1096.out(dout[0:0])
1097);
1098
1099
1100
1101
1102
1103
1104
1105
1106endmodule
1107
1108
1109
1110
1111
1112//
1113// xor macro for ports = 2,3
1114//
1115//
1116
1117
1118
1119
1120
1121module l2t_vlddir_dp_xor_macro__dxor_16x__ports_2__width_1 (
1122 din0,
1123 din1,
1124 dout);
1125 input [0:0] din0;
1126 input [0:0] din1;
1127 output [0:0] dout;
1128
1129
1130
1131
1132
1133xor2 #(1) d0_0 (
1134.in0(din0[0:0]),
1135.in1(din1[0:0]),
1136.out(dout[0:0])
1137);
1138
1139
1140
1141
1142
1143
1144
1145
1146endmodule
1147
1148
1149
1150
1151
1152//
1153// invert macro
1154//
1155//
1156
1157
1158
1159
1160
1161module l2t_vlddir_dp_inv_macro__dinv_32x__width_1 (
1162 din,
1163 dout);
1164 input [0:0] din;
1165 output [0:0] dout;
1166
1167
1168
1169
1170
1171
1172inv #(1) d0_0 (
1173.in(din[0:0]),
1174.out(dout[0:0])
1175);
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185endmodule
1186
1187
1188
1189
1190
1191//
1192// nand macro for ports = 2,3,4
1193//
1194//
1195
1196
1197
1198
1199
1200module l2t_vlddir_dp_nand_macro__ports_3__width_1 (
1201 din0,
1202 din1,
1203 din2,
1204 dout);
1205 input [0:0] din0;
1206 input [0:0] din1;
1207 input [0:0] din2;
1208 output [0:0] dout;
1209
1210
1211
1212
1213
1214
1215nand3 #(1) d0_0 (
1216.in0(din0[0:0]),
1217.in1(din1[0:0]),
1218.in2(din2[0:0]),
1219.out(dout[0:0])
1220);
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230endmodule
1231
1232
1233
1234
1235
1236//
1237// nor macro for ports = 2,3
1238//
1239//
1240
1241
1242
1243
1244
1245module l2t_vlddir_dp_nor_macro__ports_2__width_1 (
1246 din0,
1247 din1,
1248 dout);
1249 input [0:0] din0;
1250 input [0:0] din1;
1251 output [0:0] dout;
1252
1253
1254
1255
1256
1257
1258nor2 #(1) d0_0 (
1259.in0(din0[0:0]),
1260.in1(din1[0:0]),
1261.out(dout[0:0])
1262);
1263
1264
1265
1266
1267
1268
1269
1270endmodule
1271
1272
1273
1274
1275
1276//
1277// xor macro for ports = 2,3
1278//
1279//
1280
1281
1282
1283
1284
1285module l2t_vlddir_dp_xor_macro__width_32 (
1286 din0,
1287 din1,
1288 dout);
1289 input [31:0] din0;
1290 input [31:0] din1;
1291 output [31:0] dout;
1292
1293
1294
1295
1296
1297xor2 #(32) d0_0 (
1298.in0(din0[31:0]),
1299.in1(din1[31:0]),
1300.out(dout[31:0])
1301);
1302
1303
1304
1305
1306
1307
1308
1309
1310endmodule
1311
1312
1313
1314
1315
1316//
1317// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
1318//
1319//
1320
1321
1322
1323
1324
1325module l2t_vlddir_dp_cmp_macro__width_8 (
1326 din0,
1327 din1,
1328 dout);
1329 input [7:0] din0;
1330 input [7:0] din1;
1331 output dout;
1332
1333
1334
1335
1336
1337
1338cmp #(8) m0_0 (
1339.in0(din0[7:0]),
1340.in1(din1[7:0]),
1341.out(dout)
1342);
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353endmodule
1354
1355
1356
1357
1358
1359//
1360// nor macro for ports = 2,3
1361//
1362//
1363
1364
1365
1366
1367
1368module l2t_vlddir_dp_nor_macro__ports_3__width_1 (
1369 din0,
1370 din1,
1371 din2,
1372 dout);
1373 input [0:0] din0;
1374 input [0:0] din1;
1375 input [0:0] din2;
1376 output [0:0] dout;
1377
1378
1379
1380
1381
1382
1383nor3 #(1) d0_0 (
1384.in0(din0[0:0]),
1385.in1(din1[0:0]),
1386.in2(din2[0:0]),
1387.out(dout[0:0])
1388);
1389
1390
1391
1392
1393
1394
1395
1396endmodule
1397
1398
1399
1400
1401
1402//
1403// buff macro
1404//
1405//
1406
1407
1408
1409
1410
1411module l2t_vlddir_dp_buff_macro__dbuff_48x__width_1 (
1412 din,
1413 dout);
1414 input [0:0] din;
1415 output [0:0] dout;
1416
1417
1418
1419
1420
1421
1422buff #(1) d0_0 (
1423.in(din[0:0]),
1424.out(dout[0:0])
1425);
1426
1427
1428
1429
1430
1431
1432
1433
1434endmodule
1435
1436
1437
1438
1439
1440//
1441// nand macro for ports = 2,3,4
1442//
1443//
1444
1445
1446
1447
1448
1449module l2t_vlddir_dp_nand_macro__width_1 (
1450 din0,
1451 din1,
1452 dout);
1453 input [0:0] din0;
1454 input [0:0] din1;
1455 output [0:0] dout;
1456
1457
1458
1459
1460
1461
1462nand2 #(1) d0_0 (
1463.in0(din0[0:0]),
1464.in1(din1[0:0]),
1465.out(dout[0:0])
1466);
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476endmodule
1477
1478
1479
1480
1481
1482//
1483// invert macro
1484//
1485//
1486
1487
1488
1489
1490
1491module l2t_vlddir_dp_inv_macro__dinv_32x__width_2 (
1492 din,
1493 dout);
1494 input [1:0] din;
1495 output [1:0] dout;
1496
1497
1498
1499
1500
1501
1502inv #(2) d0_0 (
1503.in(din[1:0]),
1504.out(dout[1:0])
1505);
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515endmodule
1516
1517
1518
1519
1520
1521//
1522// nand macro for ports = 2,3,4
1523//
1524//
1525
1526
1527
1528
1529
1530module l2t_vlddir_dp_nand_macro__width_6 (
1531 din0,
1532 din1,
1533 dout);
1534 input [5:0] din0;
1535 input [5:0] din1;
1536 output [5:0] dout;
1537
1538
1539
1540
1541
1542
1543nand2 #(6) d0_0 (
1544.in0(din0[5:0]),
1545.in1(din1[5:0]),
1546.out(dout[5:0])
1547);
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557endmodule
1558
1559
1560
1561
1562
1563//
1564// invert macro
1565//
1566//
1567
1568
1569
1570
1571
1572module l2t_vlddir_dp_inv_macro__dinv_48x__width_6 (
1573 din,
1574 dout);
1575 input [5:0] din;
1576 output [5:0] dout;
1577
1578
1579
1580
1581
1582
1583inv #(6) d0_0 (
1584.in(din[5:0]),
1585.out(dout[5:0])
1586);
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596endmodule
1597
1598
1599
1600
1601
1602// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1603// also for pass-gate with decoder
1604
1605
1606
1607
1608
1609// any PARAMS parms go into naming of macro
1610
1611module l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_32r__width_32 (
1612 din0,
1613 sel0,
1614 din1,
1615 sel1,
1616 dout);
1617wire buffout0;
1618wire buffout1;
1619
1620 input [31:0] din0;
1621 input sel0;
1622 input [31:0] din1;
1623 input sel1;
1624 output [31:0] dout;
1625
1626
1627
1628
1629
1630cl_dp1_muxbuff2_8x c0_0 (
1631 .in0(sel0),
1632 .in1(sel1),
1633 .out0(buffout0),
1634 .out1(buffout1)
1635);
1636mux2s #(32) d0_0 (
1637 .sel0(buffout0),
1638 .sel1(buffout1),
1639 .in0(din0[31:0]),
1640 .in1(din1[31:0]),
1641.dout(dout[31:0])
1642);
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656endmodule
1657
1658
1659// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1660// also for pass-gate with decoder
1661
1662
1663
1664
1665
1666// any PARAMS parms go into naming of macro
1667
1668module l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_39r__width_39 (
1669 din0,
1670 sel0,
1671 din1,
1672 sel1,
1673 dout);
1674wire buffout0;
1675wire buffout1;
1676
1677 input [38:0] din0;
1678 input sel0;
1679 input [38:0] din1;
1680 input sel1;
1681 output [38:0] dout;
1682
1683
1684
1685
1686
1687cl_dp1_muxbuff2_8x c0_0 (
1688 .in0(sel0),
1689 .in1(sel1),
1690 .out0(buffout0),
1691 .out1(buffout1)
1692);
1693mux2s #(39) d0_0 (
1694 .sel0(buffout0),
1695 .sel1(buffout1),
1696 .in0(din0[38:0]),
1697 .in1(din1[38:0]),
1698.dout(dout[38:0])
1699);
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713endmodule
1714
1715
1716
1717
1718
1719
1720// any PARAMS parms go into naming of macro
1721
1722module l2t_vlddir_dp_msff_macro__stack_33r__width_33 (
1723 din,
1724 clk,
1725 en,
1726 se,
1727 scan_in,
1728 siclk,
1729 soclk,
1730 pce_ov,
1731 stop,
1732 dout,
1733 scan_out);
1734wire l1clk;
1735wire siclk_out;
1736wire soclk_out;
1737wire [31:0] so;
1738
1739 input [32:0] din;
1740
1741
1742 input clk;
1743 input en;
1744 input se;
1745 input scan_in;
1746 input siclk;
1747 input soclk;
1748 input pce_ov;
1749 input stop;
1750
1751
1752
1753 output [32:0] dout;
1754
1755
1756 output scan_out;
1757
1758
1759
1760
1761cl_dp1_l1hdr_8x c0_0 (
1762.l2clk(clk),
1763.pce(en),
1764.aclk(siclk),
1765.bclk(soclk),
1766.l1clk(l1clk),
1767 .se(se),
1768 .pce_ov(pce_ov),
1769 .stop(stop),
1770 .siclk_out(siclk_out),
1771 .soclk_out(soclk_out)
1772);
1773dff #(33) d0_0 (
1774.l1clk(l1clk),
1775.siclk(siclk_out),
1776.soclk(soclk_out),
1777.d(din[32:0]),
1778.si({scan_in,so[31:0]}),
1779.so({so[31:0],scan_out}),
1780.q(dout[32:0])
1781);
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802endmodule
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812//
1813// buff macro
1814//
1815//
1816
1817
1818
1819
1820
1821module l2t_vlddir_dp_buff_macro__dbuff_48x__width_39 (
1822 din,
1823 dout);
1824 input [38:0] din;
1825 output [38:0] dout;
1826
1827
1828
1829
1830
1831
1832buff #(39) d0_0 (
1833.in(din[38:0]),
1834.out(dout[38:0])
1835);
1836
1837
1838
1839
1840
1841
1842
1843
1844endmodule
1845
1846
1847
1848
1849
1850// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1851// also for pass-gate with decoder
1852
1853
1854
1855
1856
1857// any PARAMS parms go into naming of macro
1858
1859module l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__stack_16r__width_16 (
1860 din0,
1861 sel0,
1862 din1,
1863 sel1,
1864 dout);
1865wire buffout0;
1866wire buffout1;
1867
1868 input [15:0] din0;
1869 input sel0;
1870 input [15:0] din1;
1871 input sel1;
1872 output [15:0] dout;
1873
1874
1875
1876
1877
1878cl_dp1_muxbuff2_8x c0_0 (
1879 .in0(sel0),
1880 .in1(sel1),
1881 .out0(buffout0),
1882 .out1(buffout1)
1883);
1884mux2s #(16) d0_0 (
1885 .sel0(buffout0),
1886 .sel1(buffout1),
1887 .in0(din0[15:0]),
1888 .in1(din1[15:0]),
1889.dout(dout[15:0])
1890);
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904endmodule
1905
1906
1907
1908
1909
1910
1911// any PARAMS parms go into naming of macro
1912
1913module l2t_vlddir_dp_msff_macro__stack_32r__width_32 (
1914 din,
1915 clk,
1916 en,
1917 se,
1918 scan_in,
1919 siclk,
1920 soclk,
1921 pce_ov,
1922 stop,
1923 dout,
1924 scan_out);
1925wire l1clk;
1926wire siclk_out;
1927wire soclk_out;
1928wire [30:0] so;
1929
1930 input [31:0] din;
1931
1932
1933 input clk;
1934 input en;
1935 input se;
1936 input scan_in;
1937 input siclk;
1938 input soclk;
1939 input pce_ov;
1940 input stop;
1941
1942
1943
1944 output [31:0] dout;
1945
1946
1947 output scan_out;
1948
1949
1950
1951
1952cl_dp1_l1hdr_8x c0_0 (
1953.l2clk(clk),
1954.pce(en),
1955.aclk(siclk),
1956.bclk(soclk),
1957.l1clk(l1clk),
1958 .se(se),
1959 .pce_ov(pce_ov),
1960 .stop(stop),
1961 .siclk_out(siclk_out),
1962 .soclk_out(soclk_out)
1963);
1964dff #(32) d0_0 (
1965.l1clk(l1clk),
1966.siclk(siclk_out),
1967.soclk(soclk_out),
1968.d(din[31:0]),
1969.si({scan_in,so[30:0]}),
1970.so({so[30:0],scan_out}),
1971.q(dout[31:0])
1972);
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993endmodule
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003//
2004// or macro for ports = 2,3
2005//
2006//
2007
2008
2009
2010
2011
2012module l2t_vlddir_dp_or_macro__width_16 (
2013 din0,
2014 din1,
2015 dout);
2016 input [15:0] din0;
2017 input [15:0] din1;
2018 output [15:0] dout;
2019
2020
2021
2022
2023
2024
2025or2 #(16) d0_0 (
2026.in0(din0[15:0]),
2027.in1(din1[15:0]),
2028.out(dout[15:0])
2029);
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039endmodule
2040
2041
2042
2043
2044
2045//
2046// invert macro
2047//
2048//
2049
2050
2051
2052
2053
2054module l2t_vlddir_dp_inv_macro__dinv_16x__width_16 (
2055 din,
2056 dout);
2057 input [15:0] din;
2058 output [15:0] dout;
2059
2060
2061
2062
2063
2064
2065inv #(16) d0_0 (
2066.in(din[15:0]),
2067.out(dout[15:0])
2068);
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078endmodule
2079
2080
2081
2082
2083
2084//
2085// nor macro for ports = 2,3
2086//
2087//
2088
2089
2090
2091
2092
2093module l2t_vlddir_dp_nor_macro__width_16 (
2094 din0,
2095 din1,
2096 dout);
2097 input [15:0] din0;
2098 input [15:0] din1;
2099 output [15:0] dout;
2100
2101
2102
2103
2104
2105
2106nor2 #(16) d0_0 (
2107.in0(din0[15:0]),
2108.in1(din1[15:0]),
2109.out(dout[15:0])
2110);
2111
2112
2113
2114
2115
2116
2117
2118endmodule
2119
2120
2121
2122
2123
2124// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2125// also for pass-gate with decoder
2126
2127
2128
2129
2130
2131// any PARAMS parms go into naming of macro
2132
2133module l2t_vlddir_dp_mux_macro__dmux_8x__mux_aonpe__ports_2__width_16 (
2134 din0,
2135 sel0,
2136 din1,
2137 sel1,
2138 dout);
2139wire buffout0;
2140wire buffout1;
2141
2142 input [15:0] din0;
2143 input sel0;
2144 input [15:0] din1;
2145 input sel1;
2146 output [15:0] dout;
2147
2148
2149
2150
2151
2152cl_dp1_muxbuff2_8x c0_0 (
2153 .in0(sel0),
2154 .in1(sel1),
2155 .out0(buffout0),
2156 .out1(buffout1)
2157);
2158mux2s #(16) d0_0 (
2159 .sel0(buffout0),
2160 .sel1(buffout1),
2161 .in0(din0[15:0]),
2162 .in1(din1[15:0]),
2163.dout(dout[15:0])
2164);
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178endmodule
2179
2180
2181//
2182// invert macro
2183//
2184//
2185
2186
2187
2188
2189
2190module l2t_vlddir_dp_inv_macro__dinv_8x__width_16 (
2191 din,
2192 dout);
2193 input [15:0] din;
2194 output [15:0] dout;
2195
2196
2197
2198
2199
2200
2201inv #(16) d0_0 (
2202.in(din[15:0]),
2203.out(dout[15:0])
2204);
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214endmodule
2215
2216
2217
2218
2219
2220//
2221// and macro for ports = 2,3,4
2222//
2223//
2224
2225
2226
2227
2228
2229module l2t_vlddir_dp_and_macro__width_16 (
2230 din0,
2231 din1,
2232 dout);
2233 input [15:0] din0;
2234 input [15:0] din1;
2235 output [15:0] dout;
2236
2237
2238
2239
2240
2241
2242and2 #(16) d0_0 (
2243.in0(din0[15:0]),
2244.in1(din1[15:0]),
2245.out(dout[15:0])
2246);
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256endmodule
2257
2258
2259
2260
2261
2262//
2263// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
2264//
2265//
2266
2267
2268
2269
2270
2271module l2t_vlddir_dp_cmp_macro__width_16 (
2272 din0,
2273 din1,
2274 dout);
2275 input [15:0] din0;
2276 input [15:0] din1;
2277 output dout;
2278
2279
2280
2281
2282
2283
2284cmp #(16) m0_0 (
2285.in0(din0[15:0]),
2286.in1(din1[15:0]),
2287.out(dout)
2288);
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299endmodule
2300
2301
2302
2303
2304
2305//
2306// invert macro
2307//
2308//
2309
2310
2311
2312
2313
2314module l2t_vlddir_dp_inv_macro__width_1 (
2315 din,
2316 dout);
2317 input [0:0] din;
2318 output [0:0] dout;
2319
2320
2321
2322
2323
2324
2325inv #(1) d0_0 (
2326.in(din[0:0]),
2327.out(dout[0:0])
2328);
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338endmodule
2339
2340
2341
2342
2343
2344//
2345// nor macro for ports = 2,3
2346//
2347//
2348
2349
2350
2351
2352
2353module l2t_vlddir_dp_nor_macro__width_1 (
2354 din0,
2355 din1,
2356 dout);
2357 input [0:0] din0;
2358 input [0:0] din1;
2359 output [0:0] dout;
2360
2361
2362
2363
2364
2365
2366nor2 #(1) d0_0 (
2367.in0(din0[0:0]),
2368.in1(din1[0:0]),
2369.out(dout[0:0])
2370);
2371
2372
2373
2374
2375
2376
2377
2378endmodule
2379
2380
2381
2382
2383
2384//
2385// xor macro for ports = 2,3
2386//
2387//
2388
2389
2390
2391
2392
2393module l2t_vlddir_dp_xor_macro__dxor_8x__ports_2__width_1 (
2394 din0,
2395 din1,
2396 dout);
2397 input [0:0] din0;
2398 input [0:0] din1;
2399 output [0:0] dout;
2400
2401
2402
2403
2404
2405xor2 #(1) d0_0 (
2406.in0(din0[0:0]),
2407.in1(din1[0:0]),
2408.out(dout[0:0])
2409);
2410
2411
2412
2413
2414
2415
2416
2417
2418endmodule
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428// any PARAMS parms go into naming of macro
2429
2430module l2t_vlddir_dp_msff_macro__stack_39r__width_39 (
2431 din,
2432 clk,
2433 en,
2434 se,
2435 scan_in,
2436 siclk,
2437 soclk,
2438 pce_ov,
2439 stop,
2440 dout,
2441 scan_out);
2442wire l1clk;
2443wire siclk_out;
2444wire soclk_out;
2445wire [37:0] so;
2446
2447 input [38:0] din;
2448
2449
2450 input clk;
2451 input en;
2452 input se;
2453 input scan_in;
2454 input siclk;
2455 input soclk;
2456 input pce_ov;
2457 input stop;
2458
2459
2460
2461 output [38:0] dout;
2462
2463
2464 output scan_out;
2465
2466
2467
2468
2469cl_dp1_l1hdr_8x c0_0 (
2470.l2clk(clk),
2471.pce(en),
2472.aclk(siclk),
2473.bclk(soclk),
2474.l1clk(l1clk),
2475 .se(se),
2476 .pce_ov(pce_ov),
2477 .stop(stop),
2478 .siclk_out(siclk_out),
2479 .soclk_out(soclk_out)
2480);
2481dff #(39) d0_0 (
2482.l1clk(l1clk),
2483.siclk(siclk_out),
2484.soclk(soclk_out),
2485.d(din[38:0]),
2486.si({scan_in,so[37:0]}),
2487.so({so[37:0],scan_out}),
2488.q(dout[38:0])
2489);
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510endmodule
2511
2512
2513
2514
2515
2516
2517
2518