Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / l2t / rtl / l2t_snp_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: l2t_snp_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 ============================================
35`define IQ_SIZE 8
36`define OQ_SIZE 12
37`define TAG_WIDTH 28
38`define TAG_WIDTH_LESS1 27
39`define TAG_WIDTHr 28r
40`define TAG_WIDTHc 28c
41`define TAG_WIDTH6 22
42`define TAG_WIDTH6r 22r
43`define TAG_WIDTH6c 22c
44
45
46`define MBD_WIDTH 106 // BS and SR 11/12/03 N2 Xbar Packet format change
47
48// BS and SR 11/12/03 N2 Xbar Packet format change
49
50`define MBD_ECC_HI 105
51`define MBD_ECC_HI_PLUS1 106
52`define MBD_ECC_HI_PLUS5 110
53`define MBD_ECC_LO 100
54`define MBD_EVICT 99
55`define MBD_DEP 98
56`define MBD_TECC 97
57`define MBD_ENTRY_HI 96
58`define MBD_ENTRY_LO 93
59
60`define MBD_POISON 92
61`define MBD_RDMA_HI 91
62`define MBD_RDMA_LO 90
63`define MBD_RQ_HI 89
64`define MBD_RQ_LO 85
65`define MBD_NC 84
66`define MBD_RSVD 83
67`define MBD_CP_HI 82
68`define MBD_CP_LO 80
69`define MBD_TH_HI 79
70`define MBD_TH_LO 77
71`define MBD_BF_HI 76
72`define MBD_BF_LO 74
73`define MBD_WY_HI 73
74`define MBD_WY_LO 72
75`define MBD_SZ_HI 71
76`define MBD_SZ_LO 64
77`define MBD_DATA_HI 63
78`define MBD_DATA_LO 0
79
80// BS and SR 11/12/03 N2 Xbar Packet format change
81`define L2_FBF 40
82`define L2_MBF 39
83`define L2_SNP 38
84`define L2_CTRUE 37
85`define L2_EVICT 36
86`define L2_DEP 35
87`define L2_TECC 34
88`define L2_ENTRY_HI 33
89`define L2_ENTRY_LO 29
90
91`define L2_POISON 28
92`define L2_RDMA_HI 27
93`define L2_RDMA_LO 26
94// BS and SR 11/12/03 N2 Xbar Packet format change , maps to bits [128:104] of PCXS packet , ther than RSVD bit
95`define L2_RQTYP_HI 25
96`define L2_RQTYP_LO 21
97`define L2_NC 20
98`define L2_RSVD 19
99`define L2_CPUID_HI 18
100`define L2_CPUID_LO 16
101`define L2_TID_HI 15
102`define L2_TID_LO 13
103`define L2_BUFID_HI 12
104`define L2_BUFID_LO 10
105`define L2_L1WY_HI 9
106`define L2_L1WY_LO 8
107`define L2_SZ_HI 7
108`define L2_SZ_LO 0
109
110
111`define ERR_MEU 63
112`define ERR_MEC 62
113`define ERR_RW 61
114`define ERR_ASYNC 60
115`define ERR_TID_HI 59 // PRM needs to change to reflect this : TID will be bits [59:54] instead of [58:54]
116`define ERR_TID_LO 54
117`define ERR_LDAC 53
118`define ERR_LDAU 52
119`define ERR_LDWC 51
120`define ERR_LDWU 50
121`define ERR_LDRC 49
122`define ERR_LDRU 48
123`define ERR_LDSC 47
124`define ERR_LDSU 46
125`define ERR_LTC 45
126`define ERR_LRU 44
127`define ERR_LVU 43
128`define ERR_DAC 42
129`define ERR_DAU 41
130`define ERR_DRC 40
131`define ERR_DRU 39
132`define ERR_DSC 38
133`define ERR_DSU 37
134`define ERR_VEC 36
135`define ERR_VEU 35
136`define ERR_LVC 34
137`define ERR_SYN_HI 31
138`define ERR_SYN_LO 0
139
140
141
142`define ERR_MEND 51
143`define ERR_NDRW 50
144`define ERR_NDSP 49
145`define ERR_NDDM 48
146`define ERR_NDVCID_HI 45
147`define ERR_NDVCID_LO 40
148`define ERR_NDADR_HI 39
149`define ERR_NDADR_LO 4
150
151
152// Phase 2 : SIU Inteface and format change
153
154`define JBI_HDR_SZ 26 // BS and SR 11/12/03 N2 Xbar Packet format change
155`define JBI_HDR_SZ_LESS1 25 // BS and SR 11/12/03 N2 Xbar Packet format change
156`define JBI_HDR_SZ4 23
157`define JBI_HDR_SZc 27c
158`define JBI_HDR_SZ4c 23c
159
160`define JBI_ADDR_LO 0
161`define JBI_ADDR_HI 7
162`define JBI_SZ_LO 8
163`define JBI_SZ_HI 15
164// `define JBI_RSVD 16 NOt used
165`define JBI_CTAG_LO 16
166`define JBI_CTAG_HI 23
167`define JBI_RQ_RD 24
168`define JBI_RQ_WR8 25
169`define JBI_RQ_WR64 26
170`define JBI_OPES_LO 27 // 0 = 30, P=29, E=28, S=27
171`define JBI_OPES_HI 30
172`define JBI_RQ_POISON 31
173`define JBI_ENTRY_LO 32
174`define JBI_ENTRY_HI 33
175
176// Phase 2 : SIU Inteface and format change
177// BS and SR 11/12/03 N2 Xbar Packet format change :
178`define JBINST_SZ_LO 0
179`define JBINST_SZ_HI 7
180// `define JBINST_RSVD 8 NOT used
181`define JBINST_CTAG_LO 8
182`define JBINST_CTAG_HI 15
183`define JBINST_RQ_RD 16
184`define JBINST_RQ_WR8 17
185`define JBINST_RQ_WR64 18
186`define JBINST_OPES_LO 19 // 0 = 22, P=21, E=20, S=19
187`define JBINST_OPES_HI 22
188`define JBINST_ENTRY_LO 23
189`define JBINST_ENTRY_HI 24
190`define JBINST_POISON 25
191
192
193`define ST_REQ_ST 1
194`define LD_REQ_ST 2
195`define IDLE 0
196
197
198
199
200
201module l2t_snp_ctl (
202 tcu_pce_ov,
203 tcu_aclk,
204 tcu_bclk,
205 tcu_scan_en,
206 rdmat_sii_req_vld_buf,
207 arb_snp_snpsel_px2,
208 snpd_rq_winv_s1,
209 rdmat_wr_entry_s1,
210 l2clk,
211 scan_in,
212 wmr_l,
213 scan_out,
214 l2t_sii_iq_dequeue,
215 snp_snpq_arb_vld_px1,
216 snp_hdr1_wen0_s0,
217 snp_hdr2_wen0_s1,
218 snp_snp_data1_wen0_s2,
219 snp_snp_data2_wen0_s3,
220 snp_hdr1_wen1_s0,
221 snp_hdr2_wen1_s1,
222 snp_snp_data1_wen1_s2,
223 snp_snp_data2_wen1_s3,
224 snp_wr_ptr,
225 snp_rd_ptr,
226 snp_rdmad_wr_entry_s2,
227 snp_rdmatag_wr_en_s2,
228 l2t_l2b_rdma_wren_s2,
229 l2t_l2b_rdma_wrwl_s2,
230 l2t_dbg_sii_iq_dequeue,
231 l2t_mb2_run,
232 l2t_mb2_rdmatag_wr_en,
233 l2t_siu_delay);
234wire reset_flop_scanin;
235wire reset_flop_scanout;
236wire l1clk;
237wire spares_scanin;
238wire spares_scanout;
239wire pce_ov;
240wire stop;
241wire siclk;
242wire soclk;
243wire se;
244wire ff_siu_req_vld_s0_scanin;
245wire ff_siu_req_vld_s0_scanout;
246wire ff_l2t_dbg_sii_iq_dequeue_scanin;
247wire ff_l2t_dbg_sii_iq_dequeue_scanout;
248wire l2t_sii_iq_dequeue_r1;
249wire ff_arb_snp_snpsel_px2_scanin;
250wire ff_arb_snp_snpsel_px2_scanout;
251wire arb_snpsel_c1;
252wire ff_winv_rq_active_s2_scanin;
253wire ff_winv_rq_active_s2_scanout;
254wire ff_snpiq_cnt_scanin;
255wire ff_snpiq_cnt_scanout;
256wire ff_wr_ptr_scanin;
257wire ff_wr_ptr_scanout;
258wire ff_mbist_signals_scanin;
259wire ff_mbist_signals_scanout;
260wire l2t_mb2_rdmatag_wr_en_r1;
261wire l2t_mb2_rdmatag_wr_en_r2;
262wire l2t_mb2_rdmatag_wr_en_r3;
263wire l2t_mb2_run_r1;
264wire snp_rdmatag_wr_en_s2_4muxsel;
265wire ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanin;
266wire ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanout;
267wire snp_rdmatag_wr_en_s2_4muxsel_d1_n;
268wire snp_rdmatag_wr_en_s2_4muxsel_d1;
269wire ff_rdmadata_wen_s2_scanin;
270wire ff_rdmadata_wen_s2_scanout;
271wire ff_winv_rq_active_s2_1_scanin;
272wire ff_winv_rq_active_s2_1_scanout;
273wire [15:0] l2t_l2b_rdma_wren_s2_n;
274wire ff_rdmad_wr_entry_s2_scanin;
275wire ff_rdmad_wr_entry_s2_scanout;
276wire [1:0] snp_rdmad_wr_entry_s2_internal;
277wire ff_rdmad_wr_entry_s2_d1_scanin;
278wire ff_rdmad_wr_entry_s2_d1_scanout;
279wire l2t_l2b_rdma_wrwl_s2_bit0_a;
280wire l2t_l2b_rdma_wrwl_s2_bit0_b;
281wire l2t_l2b_rdma_wrwl_s2_bit1_a;
282wire l2t_l2b_rdma_wrwl_s2_bit1_b;
283wire ff_snp_valid_scanin;
284wire ff_snp_valid_scanout;
285wire ff_rd_ptr_scanin;
286wire ff_rd_ptr_scanout;
287
288
289 input tcu_pce_ov;
290 input tcu_aclk;
291 input tcu_bclk;
292 input tcu_scan_en;
293
294input rdmat_sii_req_vld_buf; // primary input.
295//input arb_snpsel_c1; // This signal is used to advance the rd ptr.
296input arb_snp_snpsel_px2;
297input snpd_rq_winv_s1; // from snoop sp. Request type bit indicating winv.
298input [1:0] rdmat_wr_entry_s1; // encoded from rdma tag ctl.
299
300
301input l2clk;
302input scan_in;
303input wmr_l;
304
305output scan_out;
306// to siu
307output l2t_sii_iq_dequeue ;
308// to arb.
309output snp_snpq_arb_vld_px1;
310// to snpd.
311output snp_hdr1_wen0_s0;
312output snp_hdr2_wen0_s1;
313output snp_snp_data1_wen0_s2;
314output snp_snp_data2_wen0_s3 ;
315output snp_hdr1_wen1_s0;
316output snp_hdr2_wen1_s1;
317output snp_snp_data1_wen1_s2;
318output snp_snp_data2_wen1_s3 ;
319output snp_wr_ptr;
320output snp_rd_ptr;
321output [1:0] snp_rdmad_wr_entry_s2;
322// to rdmatag.
323output snp_rdmatag_wr_en_s2;
324// to l2b
325output [15:0] l2t_l2b_rdma_wren_s2;
326output [1:0] l2t_l2b_rdma_wrwl_s2;
327// to debug
328output l2t_dbg_sii_iq_dequeue;
329// mbist
330input l2t_mb2_run;
331input l2t_mb2_rdmatag_wr_en;
332
333//input pf_ice_stall;
334
335input l2t_siu_delay;
336
337
338wire siu_req_vld_s0;
339wire wr_ptr_in, wr_ptr;
340wire rd_ptr_in, rd_ptr ;
341
342wire winv_reset, winv_en ;
343wire winv_rq_active_s2, winv_rq_active_s2_1;
344wire sel_snpiq_cnt_reset, snpiq_cnt_en, sel_snpiq_cnt_plus0, snpiq_cnt_rst ;
345wire [4:0] snpiq_cnt_plus0, snpiq_cnt_in, snpiq_cnt ;
346wire [1:0] snpq_valid_in, snpq_valid ;
347wire [15:0] rdmadata_wen_s1, rdmadata_wen_s2 ;
348wire [1:0] rdmad_wr_entry_s2_d1, rdmad_wr_wl_s2;
349wire dbb_rst_l;
350///////////////////////////////////////////////////////////////////
351 // Reset flop
352 ///////////////////////////////////////////////////////////////////
353
354l2t_snp_ctl_msff_ctl_macro__width_1 reset_flop
355 (.dout(dbb_rst_l),
356 .scan_in(reset_flop_scanin),
357 .scan_out(reset_flop_scanout),
358 .l1clk(l1clk),
359 .din(wmr_l),
360 .siclk(siclk),
361 .soclk(soclk)
362
363);
364
365
366//////////////////////////////////////////
367// Spare gate insertion
368//////////////////////////////////////////
369l2t_snp_ctl_spare_ctl_macro__num_4 spares (
370 .scan_in(spares_scanin),
371 .scan_out(spares_scanout),
372 .l1clk (l1clk),
373 .siclk(siclk),
374 .soclk(soclk)
375);
376//////////////////////////////////////////
377
378
379//////////////////////////////////////////////////
380// L1 clk header
381//////////////////////////////////////////////////
382assign pce_ov = tcu_pce_ov;
383assign stop = 1'b0;
384assign siclk = tcu_aclk;
385assign soclk = tcu_bclk;
386assign se = tcu_scan_en;
387
388l2t_snp_ctl_l1clkhdr_ctl_macro clkgen (
389 .l2clk(l2clk),
390 .l1en(1'b1 ),
391 .l1clk(l1clk),
392 .pce_ov(pce_ov),
393 .stop(stop),
394 .se(se));
395
396//////////////////////////////////////////////////
397
398
399
400
401
402
403
404////////////////////////////////////////////////////////////////////////////////////////////////////////////
405// requests from JBI to issue pipeline.
406// WR8s and Reads are separated by 5 cycles.
407// Wr64 is a 19 cycle instruction so no new
408// request can be issued within 19 cycles or a WR64
409////////////////////////////////////////////////////////////////////////////////////////////////////////////
410// INstA S0 S1 S2 S3 S4 S5
411////////////////////////////////////////////////////////////////////////////////////////////////////////////
412//-----------------------------------------------------------------------------------------------------------
413// req_vld hdr1 hdr2 data1 data2
414// A
415//
416//-----------------------------------------------------------------------------------------------------------
417//
418// cnt=1 2 3
419// set vld=1
420//
421//-----------------------------------------------------------------------------------------------------------
422// winv_rq_active_s2
423// set if
424// hdr1 indicates
425// WR64
426//
427//-----------------------------------------------------------------------------------------------------------
428// wrptr_p =
429// ~wrptr. non WR64 PX1 PX2
430//
431//-----------------------------------------------------------------------------------------------------------
432//
433// writehdr1 writehdr2 writedata1 writedata2
434//
435//-----------------------------------------------------------------------------------------------------------
436//
437// send entry to mux write rdmat
438// snpqctl from out set rdmat vld
439// rdmat addr from
440// written
441// entry
442//
443//-----------------------------------------------------------------------------------------------------------
444// xmit wr_wen
445// & wl for
446// rdmad write
447// INST B
448//-----------------------------------------------------------------------------------------------------------
449//
450// In this block of code, the enables for writing into the hdr addr and data flops are
451// generated. Since the snp IQ is 2 deep, there are a total of 8 mux selects that
452// are generated here.
453// The mux selects are a cross product of the IQ entry and IQ field that is written.
454//
455//
456// - winv_rq_active_s2 is maintained high from the S2 of a WR64 instruction
457// till the S2 of a following instruction that is not a WR64.
458// - counter is reset when count is 3 or count is 17. The resetting of the counter
459// indicates that the Wr pointer needs to be toggled.Also, one cycle after the
460// counter expires, vld_px1 is turned on to the arbiter.
461//
462// - The wenables for writing into the rdma Wr Buffer data assume that the 64Bytes of
463// data arrive in the order 0,4,...60
464// - valid bit for an entry in the snp IQ is set when the request counter is reset.
465// - rd pointer is toggled when an instruction is issued down the pipe.
466// - entry in the rdma Wr Buffer to write into is determined in S1 based on the
467// valid bits in rdmat.
468//
469//
470////////////////////////////////////////////////////////////////////////////////////////////////////////////
471
472
473l2t_snp_ctl_msff_ctl_macro__width_1 ff_siu_req_vld_s0
474 (.din(rdmat_sii_req_vld_buf), .l1clk(l1clk),
475 .scan_in(ff_siu_req_vld_s0_scanin),
476 .scan_out(ff_siu_req_vld_s0_scanout),
477 .dout(siu_req_vld_s0),
478 .siclk(siclk),
479 .soclk(soclk)
480 );
481
482// FOR DEBUG
483
484// assign l2t_dbg_sii_iq_dequeue = l2t_sii_iq_dequeue;
485
486l2t_snp_ctl_msff_ctl_macro__width_2 ff_l2t_dbg_sii_iq_dequeue
487 (
488 .scan_in(ff_l2t_dbg_sii_iq_dequeue_scanin),
489 .scan_out(ff_l2t_dbg_sii_iq_dequeue_scanout),
490 .din({l2t_sii_iq_dequeue,l2t_sii_iq_dequeue}),
491 .l1clk(l1clk),
492 .dout({l2t_dbg_sii_iq_dequeue,l2t_sii_iq_dequeue_r1}),
493 .siclk(siclk),
494 .soclk(soclk)
495 );
496
497//
498// This signal will be delayed by a clock
499// assign l2t_sii_iq_dequeue = arb_snpsel_c1 ;
500//
501l2t_snp_ctl_msff_ctl_macro__width_1 ff_arb_snp_snpsel_px2
502 (
503 .scan_in(ff_arb_snp_snpsel_px2_scanin),
504 .scan_out(ff_arb_snp_snpsel_px2_scanout),
505 .din(arb_snp_snpsel_px2),
506 .l1clk(l1clk),
507 .dout(arb_snpsel_c1),
508 .siclk(siclk),
509 .soclk(soclk)
510 );
511
512
513assign l2t_sii_iq_dequeue = l2t_siu_delay ? l2t_sii_iq_dequeue_r1 : arb_snpsel_c1;
514
515
516
517assign winv_reset = ~dbb_rst_l ;
518assign winv_en = ( snpiq_cnt == 5'd1);
519
520l2t_snp_ctl_msff_ctl_macro__clr_1__en_1__width_1 ff_winv_rq_active_s2 // sync reset active high
521 (.din(snpd_rq_winv_s1),
522 .scan_in(ff_winv_rq_active_s2_scanin),
523 .scan_out(ff_winv_rq_active_s2_scanout),
524 .en(winv_en), .l1clk(l1clk), .clr(winv_reset),
525 .dout(winv_rq_active_s2),
526 .siclk(siclk),
527 .soclk(soclk)
528);
529
530assign sel_snpiq_cnt_reset = (( snpiq_cnt == 5'd17) & winv_rq_active_s2) |
531 (( snpiq_cnt == 5'd3) & ~winv_rq_active_s2 ) ;
532
533assign sel_snpiq_cnt_plus0 = ( |(snpiq_cnt) | siu_req_vld_s0 ) ;
534assign snpiq_cnt_plus0 = snpiq_cnt + 5'd1;
535assign snpiq_cnt_en = sel_snpiq_cnt_plus0 | sel_snpiq_cnt_reset ;
536assign snpiq_cnt_rst = ~dbb_rst_l ;
537
538l2t_snp_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_5 mux_snpiq_cnt
539 (.dout (snpiq_cnt_in[4:0]),
540 .din0 (snpiq_cnt_plus0[4:0]), .din1 (5'b0),
541 .sel0 (~sel_snpiq_cnt_reset), .sel1 (sel_snpiq_cnt_reset)) ;
542
543l2t_snp_ctl_msff_ctl_macro__clr_1__en_1__width_5 ff_snpiq_cnt // sync reset active high
544 (.din(snpiq_cnt_in[4:0]),
545 .scan_in(ff_snpiq_cnt_scanin),
546 .scan_out(ff_snpiq_cnt_scanout),
547 .en(snpiq_cnt_en), .l1clk(l1clk), .clr(snpiq_cnt_rst),
548 .dout(snpiq_cnt[4:0]),
549 .siclk(siclk),
550 .soclk(soclk)
551);
552
553
554
555///////////////////////////////////////////////////////////////////
556// Instruction WR pointer logic.
557// Wr pointer is initialized at 1 and toggles between
558// 0 and 1 everytime a req is written into the
559// snp IQ. A request is considered to be written when the
560// request counter is reset to 0.
561///////////////////////////////////////////////////////////////////
562
563assign wr_ptr_in = (( ~wr_ptr & sel_snpiq_cnt_reset ) | wr_ptr ) & // set condition
564 ~( wr_ptr & sel_snpiq_cnt_reset ) ; // reset condition.
565
566
567l2t_snp_ctl_msff_ctl_macro__clr_1__width_1 ff_wr_ptr // sync reset active low
568 (.dout(wr_ptr), .din (wr_ptr_in),
569 .scan_in(ff_wr_ptr_scanin),
570 .scan_out(ff_wr_ptr_scanout),
571 .l1clk (l1clk), .clr(~dbb_rst_l),
572 .siclk(siclk),
573 .soclk(soclk)
574
575 ) ;
576
577assign snp_wr_ptr = wr_ptr ;
578
579
580
581///////////////////////////
582// Wenable generation into
583// the snpIQ
584///////////////////////////
585
586assign snp_hdr1_wen0_s0 = ~wr_ptr & (snpiq_cnt==5'd0) & siu_req_vld_s0 ;
587assign snp_hdr2_wen0_s1 = ~wr_ptr & (snpiq_cnt==5'd1) ;
588assign snp_snp_data1_wen0_s2 = ~wr_ptr & (snpiq_cnt==5'd2) ;
589assign snp_snp_data2_wen0_s3 = ~wr_ptr & (snpiq_cnt==5'd3) ;
590
591assign snp_hdr1_wen1_s0 = wr_ptr & (snpiq_cnt==5'd0) & siu_req_vld_s0;
592assign snp_hdr2_wen1_s1 = wr_ptr & (snpiq_cnt==5'd1) ;
593assign snp_snp_data1_wen1_s2 = wr_ptr & (snpiq_cnt==5'd2) ;
594assign snp_snp_data2_wen1_s3 = wr_ptr & (snpiq_cnt==5'd3) ;
595
596
597///////////////////////////
598// Wenable generation into
599// rdmatag cam2
600///////////////////////////
601
602
603l2t_snp_ctl_msff_ctl_macro__width_4 ff_mbist_signals
604 (
605 .scan_in(ff_mbist_signals_scanin),
606 .scan_out(ff_mbist_signals_scanout),
607 .dout ({l2t_mb2_rdmatag_wr_en_r1,l2t_mb2_rdmatag_wr_en_r2,l2t_mb2_rdmatag_wr_en_r3,l2t_mb2_run_r1}),
608 .din ({l2t_mb2_rdmatag_wr_en,l2t_mb2_rdmatag_wr_en_r1,l2t_mb2_rdmatag_wr_en_r2,l2t_mb2_run}),
609 .l1clk (l1clk),
610 .siclk(siclk),
611 .soclk(soclk)
612 );
613
614
615
616assign snp_rdmatag_wr_en_s2 = l2t_mb2_run_r1 ? l2t_mb2_rdmatag_wr_en_r3 : (winv_rq_active_s2 & ( snpiq_cnt==5'd2 ));
617
618
619assign snp_rdmatag_wr_en_s2_4muxsel = snpd_rq_winv_s1 & ( snpiq_cnt==5'd1 );
620
621l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_2 ff_snp_rdmatag_wr_en_s2_4muxsel_d1
622 (
623 .scan_in(ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanin),
624 .scan_out(ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanout),
625 .dout ({snp_rdmatag_wr_en_s2_4muxsel_d1_n,snp_rdmatag_wr_en_s2_4muxsel_d1}),
626 .din ({~snp_rdmatag_wr_en_s2_4muxsel,snp_rdmatag_wr_en_s2_4muxsel}),
627 .l1clk (l1clk),
628 .siclk(siclk),
629 .soclk(soclk)
630 );
631
632
633
634
635///////////////////////////
636// Wenable generation into
637// rdmadata
638// This signal is calculated
639// in S1 and then staged.
640// data write happens starting in s4 all the way upto
641//
642///////////////////////////
643
644assign rdmadata_wen_s1[0] = ( snpiq_cnt==5'd1) ;
645assign rdmadata_wen_s1[1] = ( snpiq_cnt==5'd2) ;
646assign rdmadata_wen_s1[2] = ( snpiq_cnt==5'd3) ;
647assign rdmadata_wen_s1[3] = ( snpiq_cnt==5'd4) ;
648assign rdmadata_wen_s1[4] = ( snpiq_cnt==5'd5) ;
649assign rdmadata_wen_s1[5] = ( snpiq_cnt==5'd6) ;
650assign rdmadata_wen_s1[6] = ( snpiq_cnt==5'd7) ;
651assign rdmadata_wen_s1[7] = ( snpiq_cnt==5'd8) ;
652assign rdmadata_wen_s1[8] = ( snpiq_cnt==5'd9) ;
653assign rdmadata_wen_s1[9] = ( snpiq_cnt==5'd10) ;
654assign rdmadata_wen_s1[10] = ( snpiq_cnt==5'd11) ;
655assign rdmadata_wen_s1[11] = ( snpiq_cnt==5'd12) ;
656assign rdmadata_wen_s1[12] = ( snpiq_cnt==5'd13) ;
657assign rdmadata_wen_s1[13] = ( snpiq_cnt==5'd14) ;
658assign rdmadata_wen_s1[14] = ( snpiq_cnt==5'd15) ;
659assign rdmadata_wen_s1[15] = ( snpiq_cnt==5'd16) ;
660
661
662l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_16 ff_rdmadata_wen_s2
663 (.din(rdmadata_wen_s1[15:0]), .l1clk(l1clk),
664 .scan_in(ff_rdmadata_wen_s2_scanin),
665 .scan_out(ff_rdmadata_wen_s2_scanout),
666 .dout(rdmadata_wen_s2[15:0]),
667 .siclk(siclk),
668 .soclk(soclk)
669);
670
671l2t_snp_ctl_msff_ctl_macro__clr_1__dmsff_32x__en_1__width_1 ff_winv_rq_active_s2_1 // sync reset active high
672 (.din(snpd_rq_winv_s1),
673 .scan_in(ff_winv_rq_active_s2_1_scanin),
674 .scan_out(ff_winv_rq_active_s2_1_scanout),
675 .en(winv_en), .l1clk(l1clk), .clr(winv_reset),
676 .dout(winv_rq_active_s2_1),
677 .siclk(siclk),
678 .soclk(soclk)
679);
680
681
682//assign l2t_l2b_rdma_wren_s2 = rdmadata_wen_s2 & {16{winv_rq_active_s2_1}} ;
683
684// FED UP OF RUNSCF INSTANTIATING LOGIC
685
686cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_0
687 (
688 .in0 (rdmadata_wen_s2[0]),
689 .in1 (winv_rq_active_s2_1),
690 .out (l2t_l2b_rdma_wren_s2_n[0])
691 );
692
693cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_1
694 (
695 .in0 (rdmadata_wen_s2[1]),
696 .in1 (winv_rq_active_s2_1),
697 .out (l2t_l2b_rdma_wren_s2_n[1])
698 );
699
700cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_2
701 (
702 .in0 (rdmadata_wen_s2[2]),
703 .in1 (winv_rq_active_s2_1),
704 .out (l2t_l2b_rdma_wren_s2_n[2])
705 );
706
707cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_3
708 (
709 .in0 (rdmadata_wen_s2[3]),
710 .in1 (winv_rq_active_s2_1),
711 .out (l2t_l2b_rdma_wren_s2_n[3])
712 );
713
714cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_4
715 (
716 .in0 (rdmadata_wen_s2[4]),
717 .in1 (winv_rq_active_s2_1),
718 .out (l2t_l2b_rdma_wren_s2_n[4])
719 );
720
721cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_5
722 (
723 .in0 (rdmadata_wen_s2[5]),
724 .in1 (winv_rq_active_s2_1),
725 .out (l2t_l2b_rdma_wren_s2_n[5])
726 );
727
728cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_6
729 (
730 .in0 (rdmadata_wen_s2[6]),
731 .in1 (winv_rq_active_s2_1),
732 .out (l2t_l2b_rdma_wren_s2_n[6])
733 );
734
735cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_7
736 (
737 .in0 (rdmadata_wen_s2[7]),
738 .in1 (winv_rq_active_s2_1),
739 .out (l2t_l2b_rdma_wren_s2_n[7])
740 );
741
742cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_8
743 (
744 .in0 (rdmadata_wen_s2[8]),
745 .in1 (winv_rq_active_s2_1),
746 .out (l2t_l2b_rdma_wren_s2_n[8])
747 );
748
749cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_9
750 (
751 .in0 (rdmadata_wen_s2[9]),
752 .in1 (winv_rq_active_s2_1),
753 .out (l2t_l2b_rdma_wren_s2_n[9])
754 );
755
756cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_10
757 (
758 .in0 (rdmadata_wen_s2[10]),
759 .in1 (winv_rq_active_s2_1),
760 .out (l2t_l2b_rdma_wren_s2_n[10])
761 );
762cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_11
763 (
764 .in0 (rdmadata_wen_s2[11]),
765 .in1 (winv_rq_active_s2_1),
766 .out (l2t_l2b_rdma_wren_s2_n[11])
767 );
768cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_12
769 (
770 .in0 (rdmadata_wen_s2[12]),
771 .in1 (winv_rq_active_s2_1),
772 .out (l2t_l2b_rdma_wren_s2_n[12])
773 );
774cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_13
775 (
776 .in0 (rdmadata_wen_s2[13]),
777 .in1 (winv_rq_active_s2_1),
778 .out (l2t_l2b_rdma_wren_s2_n[13])
779 );
780cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_14
781 (
782 .in0 (rdmadata_wen_s2[14]),
783 .in1 (winv_rq_active_s2_1),
784 .out (l2t_l2b_rdma_wren_s2_n[14])
785 );
786
787cl_u1_nand2_32x nand_l2t_l2b_rdma_wren_s2_n_15
788 (
789 .in0 (rdmadata_wen_s2[15]),
790 .in1 (winv_rq_active_s2_1),
791 .out (l2t_l2b_rdma_wren_s2_n[15])
792 );
793
794cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_0 ( .in (l2t_l2b_rdma_wren_s2_n[0]), .out (l2t_l2b_rdma_wren_s2[0]));
795cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_1 ( .in (l2t_l2b_rdma_wren_s2_n[1]), .out (l2t_l2b_rdma_wren_s2[1]));
796cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_2 ( .in (l2t_l2b_rdma_wren_s2_n[2]), .out (l2t_l2b_rdma_wren_s2[2]));
797cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_3 ( .in (l2t_l2b_rdma_wren_s2_n[3]), .out (l2t_l2b_rdma_wren_s2[3]));
798cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_4 ( .in (l2t_l2b_rdma_wren_s2_n[4]), .out (l2t_l2b_rdma_wren_s2[4]));
799cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_5 ( .in (l2t_l2b_rdma_wren_s2_n[5]), .out (l2t_l2b_rdma_wren_s2[5]));
800cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_6 ( .in (l2t_l2b_rdma_wren_s2_n[6]), .out (l2t_l2b_rdma_wren_s2[6]));
801cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_7 ( .in (l2t_l2b_rdma_wren_s2_n[7]), .out (l2t_l2b_rdma_wren_s2[7]));
802cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_8 ( .in (l2t_l2b_rdma_wren_s2_n[8]), .out (l2t_l2b_rdma_wren_s2[8]));
803cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_9 ( .in (l2t_l2b_rdma_wren_s2_n[9]), .out (l2t_l2b_rdma_wren_s2[9]));
804cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_10 ( .in (l2t_l2b_rdma_wren_s2_n[10]), .out (l2t_l2b_rdma_wren_s2[10]));
805cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_11 ( .in (l2t_l2b_rdma_wren_s2_n[11]), .out (l2t_l2b_rdma_wren_s2[11]));
806cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_12 ( .in (l2t_l2b_rdma_wren_s2_n[12]), .out (l2t_l2b_rdma_wren_s2[12]));
807cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_13 ( .in (l2t_l2b_rdma_wren_s2_n[13]), .out (l2t_l2b_rdma_wren_s2[13]));
808cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_14 ( .in (l2t_l2b_rdma_wren_s2_n[14]), .out (l2t_l2b_rdma_wren_s2[14]));
809cl_u1_inv_48x inv_l2t_l2b_rdma_wren_s2_15 ( .in (l2t_l2b_rdma_wren_s2_n[15]), .out (l2t_l2b_rdma_wren_s2[15]));
810
811///////////////////////////
812// Write Wline generation
813///////////////////////////
814
815
816
817l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_4 ff_rdmad_wr_entry_s2
818 (.din({rdmat_wr_entry_s1[1:0],rdmat_wr_entry_s1[1:0]}), .l1clk(l1clk),
819 .scan_in(ff_rdmad_wr_entry_s2_scanin),
820 .scan_out(ff_rdmad_wr_entry_s2_scanout),
821 .dout({snp_rdmad_wr_entry_s2[1:0],snp_rdmad_wr_entry_s2_internal[1:0]}),
822 .siclk(siclk),
823 .soclk(soclk)
824);
825
826l2t_snp_ctl_msff_ctl_macro__clr_1__dmsff_32x__width_2 ff_rdmad_wr_entry_s2_d1 // sync reset active low
827 (.din(rdmad_wr_wl_s2[1:0]), .l1clk(l1clk),
828 .scan_in(ff_rdmad_wr_entry_s2_d1_scanin),
829 .scan_out(ff_rdmad_wr_entry_s2_d1_scanout),
830 .clr(~dbb_rst_l),
831 .dout(rdmad_wr_entry_s2_d1[1:0]),
832 .siclk(siclk),
833 .soclk(soclk)
834);
835
836l2t_snp_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_2 mux_rdmad_wr_entry_s2
837 (.dout (rdmad_wr_wl_s2[1:0]) ,
838 .din0(snp_rdmad_wr_entry_s2[1:0]), // new entry
839 .din1(rdmad_wr_entry_s2_d1[1:0]), // old entry
840 .sel0(snp_rdmatag_wr_en_s2_4muxsel_d1), // wr64 in s2
841 .sel1(~snp_rdmatag_wr_en_s2_4muxsel_d1)) ; // ~wr64 in S2
842
843//assign l2t_l2b_rdma_wrwl_s2 = rdmad_wr_wl_s2;
844
845
846// FED UP OF RUNSCF INSTANTIATING LOGIC
847cl_u1_nand2_32x nand_bit0_stage_a
848 (
849 .out (l2t_l2b_rdma_wrwl_s2_bit0_a),
850 .in0 (snp_rdmad_wr_entry_s2_internal[0]),
851 .in1 (snp_rdmatag_wr_en_s2_4muxsel_d1)
852 );
853
854cl_u1_nand2_32x nand_bit0_stage_b
855 (
856 .out (l2t_l2b_rdma_wrwl_s2_bit0_b),
857 .in0 (rdmad_wr_entry_s2_d1[0]),
858 .in1 (snp_rdmatag_wr_en_s2_4muxsel_d1_n)
859 );
860
861cl_u1_nand2_32x nand_bit0_stage_final
862 (
863 .out (l2t_l2b_rdma_wrwl_s2[0]),
864 .in0 (l2t_l2b_rdma_wrwl_s2_bit0_b),
865 .in1 (l2t_l2b_rdma_wrwl_s2_bit0_a)
866 );
867
868
869cl_u1_nand2_32x nand_bit1_stage_a
870 (
871 .out (l2t_l2b_rdma_wrwl_s2_bit1_a),
872 .in0 (snp_rdmad_wr_entry_s2_internal[1]),
873 .in1 (snp_rdmatag_wr_en_s2_4muxsel_d1)
874 );
875
876cl_u1_nand2_32x nand_bit1_stage_b
877 (
878 .out (l2t_l2b_rdma_wrwl_s2_bit1_b),
879 .in0 (rdmad_wr_entry_s2_d1[1]),
880 .in1 (snp_rdmatag_wr_en_s2_4muxsel_d1_n)
881 );
882
883cl_u1_nand2_32x nand_bit1_stage_final
884 (
885 .out (l2t_l2b_rdma_wrwl_s2[1]),
886 .in0 (l2t_l2b_rdma_wrwl_s2_bit1_b),
887 .in1 (l2t_l2b_rdma_wrwl_s2_bit1_a)
888 );
889
890///////////////////////////
891// Valid bit generation in the
892// SNPIQ
893// set when an instruction in written
894// into the snp IQ.i.e. in the S3 or S17 cycles.
895// reset when an instruction is issued
896// down the pipe.
897///////////////////////////
898
899// Removed '[0]' at the end of sel_snpiq_cnt_reset for synthesis
900// - connie 1/16/2003
901
902assign snpq_valid_in[0] = ( snpq_valid[0] | ( ~wr_ptr & sel_snpiq_cnt_reset ) ) &
903 ~( ~rd_ptr & arb_snpsel_c1 ) ;
904
905assign snpq_valid_in[1] = ( snpq_valid[1] | ( wr_ptr & sel_snpiq_cnt_reset ) ) &
906 ~( rd_ptr & arb_snpsel_c1 ) ;
907
908l2t_snp_ctl_msff_ctl_macro__clr_1__width_2 ff_snp_valid // sync reset active low
909 (.dout(snpq_valid[1:0]), .din (snpq_valid_in[1:0]),
910 .scan_in(ff_snp_valid_scanin),
911 .scan_out(ff_snp_valid_scanout),
912 .l1clk (l1clk), .clr(~dbb_rst_l),
913 .siclk(siclk),
914 .soclk(soclk)
915) ;
916
917//assign snp_snpq_arb_vld_px1 = (|( snpq_valid )) & ~snp_stall ;
918assign snp_snpq_arb_vld_px1 = (|( snpq_valid )) ;
919
920// assign snp_snpq_arb_vld_px1 = 0;
921
922
923/////////////////////////////////////////////////////////////////////
924// Instruction RD pointer logic.
925// Read pointer is used for select the requests in FIFO order
926// Rd pointer is initialized at 1 and toggles between
927// 0 and 1 everytime a req is issued down the pipe from the snpIQ
928/////////////////////////////////////////////////////////////////////
929
930assign rd_ptr_in = (( ~rd_ptr & arb_snpsel_c1 ) | rd_ptr ) & // set condition
931 ~( rd_ptr & arb_snpsel_c1 ) ; // reset condition.
932
933
934l2t_snp_ctl_msff_ctl_macro__clr_1__width_1 ff_rd_ptr // sync reset active low
935 (.dout(rd_ptr), .din (rd_ptr_in),
936 .scan_in(ff_rd_ptr_scanin),
937 .scan_out(ff_rd_ptr_scanout),
938 .l1clk (l1clk), .clr(~dbb_rst_l),
939 .siclk(siclk),
940 .soclk(soclk)
941) ;
942
943
944assign snp_rd_ptr = rd_ptr;
945
946
947
948// fixscan start:
949assign reset_flop_scanin = scan_in ;
950assign spares_scanin = reset_flop_scanout ;
951assign ff_siu_req_vld_s0_scanin = spares_scanout ;
952assign ff_l2t_dbg_sii_iq_dequeue_scanin = ff_siu_req_vld_s0_scanout;
953assign ff_arb_snp_snpsel_px2_scanin = ff_l2t_dbg_sii_iq_dequeue_scanout;
954assign ff_winv_rq_active_s2_scanin = ff_arb_snp_snpsel_px2_scanout;
955assign ff_snpiq_cnt_scanin = ff_winv_rq_active_s2_scanout;
956assign ff_wr_ptr_scanin = ff_snpiq_cnt_scanout ;
957assign ff_mbist_signals_scanin = ff_wr_ptr_scanout ;
958assign ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanin = ff_mbist_signals_scanout ;
959assign ff_rdmadata_wen_s2_scanin = ff_snp_rdmatag_wr_en_s2_4muxsel_d1_scanout;
960assign ff_winv_rq_active_s2_1_scanin = ff_rdmadata_wen_s2_scanout;
961assign ff_rdmad_wr_entry_s2_scanin = ff_winv_rq_active_s2_1_scanout;
962assign ff_rdmad_wr_entry_s2_d1_scanin = ff_rdmad_wr_entry_s2_scanout;
963assign ff_snp_valid_scanin = ff_rdmad_wr_entry_s2_d1_scanout;
964assign ff_rd_ptr_scanin = ff_snp_valid_scanout ;
965assign scan_out = ff_rd_ptr_scanout ;
966// fixscan end:
967endmodule
968
969
970
971
972
973
974
975
976// any PARAMS parms go into naming of macro
977
978module l2t_snp_ctl_msff_ctl_macro__width_1 (
979 din,
980 l1clk,
981 scan_in,
982 siclk,
983 soclk,
984 dout,
985 scan_out);
986wire [0:0] fdin;
987
988 input [0:0] din;
989 input l1clk;
990 input scan_in;
991
992
993 input siclk;
994 input soclk;
995
996 output [0:0] dout;
997 output scan_out;
998assign fdin[0:0] = din[0:0];
999
1000
1001
1002
1003
1004
1005dff #(1) d0_0 (
1006.l1clk(l1clk),
1007.siclk(siclk),
1008.soclk(soclk),
1009.d(fdin[0:0]),
1010.si(scan_in),
1011.so(scan_out),
1012.q(dout[0:0])
1013);
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026endmodule
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036// Description: Spare gate macro for control blocks
1037//
1038// Param num controls the number of times the macro is added
1039// flops=0 can be used to use only combination spare logic
1040
1041
1042module l2t_snp_ctl_spare_ctl_macro__num_4 (
1043 l1clk,
1044 scan_in,
1045 siclk,
1046 soclk,
1047 scan_out);
1048wire si_0;
1049wire so_0;
1050wire spare0_flop_unused;
1051wire spare0_buf_32x_unused;
1052wire spare0_nand3_8x_unused;
1053wire spare0_inv_8x_unused;
1054wire spare0_aoi22_4x_unused;
1055wire spare0_buf_8x_unused;
1056wire spare0_oai22_4x_unused;
1057wire spare0_inv_16x_unused;
1058wire spare0_nand2_16x_unused;
1059wire spare0_nor3_4x_unused;
1060wire spare0_nand2_8x_unused;
1061wire spare0_buf_16x_unused;
1062wire spare0_nor2_16x_unused;
1063wire spare0_inv_32x_unused;
1064wire si_1;
1065wire so_1;
1066wire spare1_flop_unused;
1067wire spare1_buf_32x_unused;
1068wire spare1_nand3_8x_unused;
1069wire spare1_inv_8x_unused;
1070wire spare1_aoi22_4x_unused;
1071wire spare1_buf_8x_unused;
1072wire spare1_oai22_4x_unused;
1073wire spare1_inv_16x_unused;
1074wire spare1_nand2_16x_unused;
1075wire spare1_nor3_4x_unused;
1076wire spare1_nand2_8x_unused;
1077wire spare1_buf_16x_unused;
1078wire spare1_nor2_16x_unused;
1079wire spare1_inv_32x_unused;
1080wire si_2;
1081wire so_2;
1082wire spare2_flop_unused;
1083wire spare2_buf_32x_unused;
1084wire spare2_nand3_8x_unused;
1085wire spare2_inv_8x_unused;
1086wire spare2_aoi22_4x_unused;
1087wire spare2_buf_8x_unused;
1088wire spare2_oai22_4x_unused;
1089wire spare2_inv_16x_unused;
1090wire spare2_nand2_16x_unused;
1091wire spare2_nor3_4x_unused;
1092wire spare2_nand2_8x_unused;
1093wire spare2_buf_16x_unused;
1094wire spare2_nor2_16x_unused;
1095wire spare2_inv_32x_unused;
1096wire si_3;
1097wire so_3;
1098wire spare3_flop_unused;
1099wire spare3_buf_32x_unused;
1100wire spare3_nand3_8x_unused;
1101wire spare3_inv_8x_unused;
1102wire spare3_aoi22_4x_unused;
1103wire spare3_buf_8x_unused;
1104wire spare3_oai22_4x_unused;
1105wire spare3_inv_16x_unused;
1106wire spare3_nand2_16x_unused;
1107wire spare3_nor3_4x_unused;
1108wire spare3_nand2_8x_unused;
1109wire spare3_buf_16x_unused;
1110wire spare3_nor2_16x_unused;
1111wire spare3_inv_32x_unused;
1112
1113
1114input l1clk;
1115input scan_in;
1116input siclk;
1117input soclk;
1118output scan_out;
1119
1120cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
1121 .siclk(siclk),
1122 .soclk(soclk),
1123 .si(si_0),
1124 .so(so_0),
1125 .d(1'b0),
1126 .q(spare0_flop_unused));
1127assign si_0 = scan_in;
1128
1129cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
1130 .out(spare0_buf_32x_unused));
1131cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
1132 .in1(1'b1),
1133 .in2(1'b1),
1134 .out(spare0_nand3_8x_unused));
1135cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
1136 .out(spare0_inv_8x_unused));
1137cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
1138 .in01(1'b1),
1139 .in10(1'b1),
1140 .in11(1'b1),
1141 .out(spare0_aoi22_4x_unused));
1142cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
1143 .out(spare0_buf_8x_unused));
1144cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
1145 .in01(1'b1),
1146 .in10(1'b1),
1147 .in11(1'b1),
1148 .out(spare0_oai22_4x_unused));
1149cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
1150 .out(spare0_inv_16x_unused));
1151cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
1152 .in1(1'b1),
1153 .out(spare0_nand2_16x_unused));
1154cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
1155 .in1(1'b0),
1156 .in2(1'b0),
1157 .out(spare0_nor3_4x_unused));
1158cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
1159 .in1(1'b1),
1160 .out(spare0_nand2_8x_unused));
1161cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
1162 .out(spare0_buf_16x_unused));
1163cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
1164 .in1(1'b0),
1165 .out(spare0_nor2_16x_unused));
1166cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
1167 .out(spare0_inv_32x_unused));
1168
1169cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
1170 .siclk(siclk),
1171 .soclk(soclk),
1172 .si(si_1),
1173 .so(so_1),
1174 .d(1'b0),
1175 .q(spare1_flop_unused));
1176assign si_1 = so_0;
1177
1178cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
1179 .out(spare1_buf_32x_unused));
1180cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
1181 .in1(1'b1),
1182 .in2(1'b1),
1183 .out(spare1_nand3_8x_unused));
1184cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
1185 .out(spare1_inv_8x_unused));
1186cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
1187 .in01(1'b1),
1188 .in10(1'b1),
1189 .in11(1'b1),
1190 .out(spare1_aoi22_4x_unused));
1191cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
1192 .out(spare1_buf_8x_unused));
1193cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
1194 .in01(1'b1),
1195 .in10(1'b1),
1196 .in11(1'b1),
1197 .out(spare1_oai22_4x_unused));
1198cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
1199 .out(spare1_inv_16x_unused));
1200cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
1201 .in1(1'b1),
1202 .out(spare1_nand2_16x_unused));
1203cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
1204 .in1(1'b0),
1205 .in2(1'b0),
1206 .out(spare1_nor3_4x_unused));
1207cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
1208 .in1(1'b1),
1209 .out(spare1_nand2_8x_unused));
1210cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
1211 .out(spare1_buf_16x_unused));
1212cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
1213 .in1(1'b0),
1214 .out(spare1_nor2_16x_unused));
1215cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
1216 .out(spare1_inv_32x_unused));
1217
1218cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
1219 .siclk(siclk),
1220 .soclk(soclk),
1221 .si(si_2),
1222 .so(so_2),
1223 .d(1'b0),
1224 .q(spare2_flop_unused));
1225assign si_2 = so_1;
1226
1227cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
1228 .out(spare2_buf_32x_unused));
1229cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
1230 .in1(1'b1),
1231 .in2(1'b1),
1232 .out(spare2_nand3_8x_unused));
1233cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
1234 .out(spare2_inv_8x_unused));
1235cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
1236 .in01(1'b1),
1237 .in10(1'b1),
1238 .in11(1'b1),
1239 .out(spare2_aoi22_4x_unused));
1240cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
1241 .out(spare2_buf_8x_unused));
1242cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
1243 .in01(1'b1),
1244 .in10(1'b1),
1245 .in11(1'b1),
1246 .out(spare2_oai22_4x_unused));
1247cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
1248 .out(spare2_inv_16x_unused));
1249cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
1250 .in1(1'b1),
1251 .out(spare2_nand2_16x_unused));
1252cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
1253 .in1(1'b0),
1254 .in2(1'b0),
1255 .out(spare2_nor3_4x_unused));
1256cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
1257 .in1(1'b1),
1258 .out(spare2_nand2_8x_unused));
1259cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
1260 .out(spare2_buf_16x_unused));
1261cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
1262 .in1(1'b0),
1263 .out(spare2_nor2_16x_unused));
1264cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
1265 .out(spare2_inv_32x_unused));
1266
1267cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
1268 .siclk(siclk),
1269 .soclk(soclk),
1270 .si(si_3),
1271 .so(so_3),
1272 .d(1'b0),
1273 .q(spare3_flop_unused));
1274assign si_3 = so_2;
1275
1276cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
1277 .out(spare3_buf_32x_unused));
1278cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
1279 .in1(1'b1),
1280 .in2(1'b1),
1281 .out(spare3_nand3_8x_unused));
1282cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
1283 .out(spare3_inv_8x_unused));
1284cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
1285 .in01(1'b1),
1286 .in10(1'b1),
1287 .in11(1'b1),
1288 .out(spare3_aoi22_4x_unused));
1289cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
1290 .out(spare3_buf_8x_unused));
1291cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
1292 .in01(1'b1),
1293 .in10(1'b1),
1294 .in11(1'b1),
1295 .out(spare3_oai22_4x_unused));
1296cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
1297 .out(spare3_inv_16x_unused));
1298cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
1299 .in1(1'b1),
1300 .out(spare3_nand2_16x_unused));
1301cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
1302 .in1(1'b0),
1303 .in2(1'b0),
1304 .out(spare3_nor3_4x_unused));
1305cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
1306 .in1(1'b1),
1307 .out(spare3_nand2_8x_unused));
1308cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
1309 .out(spare3_buf_16x_unused));
1310cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
1311 .in1(1'b0),
1312 .out(spare3_nor2_16x_unused));
1313cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
1314 .out(spare3_inv_32x_unused));
1315assign scan_out = so_3;
1316
1317
1318
1319endmodule
1320
1321
1322
1323
1324
1325
1326// any PARAMS parms go into naming of macro
1327
1328module l2t_snp_ctl_l1clkhdr_ctl_macro (
1329 l2clk,
1330 l1en,
1331 pce_ov,
1332 stop,
1333 se,
1334 l1clk);
1335
1336
1337 input l2clk;
1338 input l1en;
1339 input pce_ov;
1340 input stop;
1341 input se;
1342 output l1clk;
1343
1344
1345
1346
1347
1348cl_sc1_l1hdr_8x c_0 (
1349
1350
1351 .l2clk(l2clk),
1352 .pce(l1en),
1353 .l1clk(l1clk),
1354 .se(se),
1355 .pce_ov(pce_ov),
1356 .stop(stop)
1357);
1358
1359
1360
1361endmodule
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375// any PARAMS parms go into naming of macro
1376
1377module l2t_snp_ctl_msff_ctl_macro__width_2 (
1378 din,
1379 l1clk,
1380 scan_in,
1381 siclk,
1382 soclk,
1383 dout,
1384 scan_out);
1385wire [1:0] fdin;
1386wire [0:0] so;
1387
1388 input [1:0] din;
1389 input l1clk;
1390 input scan_in;
1391
1392
1393 input siclk;
1394 input soclk;
1395
1396 output [1:0] dout;
1397 output scan_out;
1398assign fdin[1:0] = din[1:0];
1399
1400
1401
1402
1403
1404
1405dff #(2) d0_0 (
1406.l1clk(l1clk),
1407.siclk(siclk),
1408.soclk(soclk),
1409.d(fdin[1:0]),
1410.si({scan_in,so[0:0]}),
1411.so({so[0:0],scan_out}),
1412.q(dout[1:0])
1413);
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426endmodule
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440// any PARAMS parms go into naming of macro
1441
1442module l2t_snp_ctl_msff_ctl_macro__clr_1__en_1__width_1 (
1443 din,
1444 en,
1445 clr,
1446 l1clk,
1447 scan_in,
1448 siclk,
1449 soclk,
1450 dout,
1451 scan_out);
1452wire [0:0] fdin;
1453
1454 input [0:0] din;
1455 input en;
1456 input clr;
1457 input l1clk;
1458 input scan_in;
1459
1460
1461 input siclk;
1462 input soclk;
1463
1464 output [0:0] dout;
1465 output scan_out;
1466assign fdin[0:0] = (din[0:0] & {1{en}} & ~{1{clr}}) | (dout[0:0] & ~{1{en}} & ~{1{clr}});
1467
1468
1469
1470
1471
1472
1473dff #(1) d0_0 (
1474.l1clk(l1clk),
1475.siclk(siclk),
1476.soclk(soclk),
1477.d(fdin[0:0]),
1478.si(scan_in),
1479.so(scan_out),
1480.q(dout[0:0])
1481);
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494endmodule
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1505// also for pass-gate with decoder
1506
1507
1508
1509
1510
1511// any PARAMS parms go into naming of macro
1512
1513module l2t_snp_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_5 (
1514 din0,
1515 sel0,
1516 din1,
1517 sel1,
1518 dout);
1519 input [4:0] din0;
1520 input sel0;
1521 input [4:0] din1;
1522 input sel1;
1523 output [4:0] dout;
1524
1525
1526
1527
1528
1529assign dout[4:0] = ( {5{sel0}} & din0[4:0] ) |
1530 ( {5{sel1}} & din1[4:0]);
1531
1532
1533
1534
1535
1536endmodule
1537
1538
1539
1540
1541
1542
1543// any PARAMS parms go into naming of macro
1544
1545module l2t_snp_ctl_msff_ctl_macro__clr_1__en_1__width_5 (
1546 din,
1547 en,
1548 clr,
1549 l1clk,
1550 scan_in,
1551 siclk,
1552 soclk,
1553 dout,
1554 scan_out);
1555wire [4:0] fdin;
1556wire [3:0] so;
1557
1558 input [4:0] din;
1559 input en;
1560 input clr;
1561 input l1clk;
1562 input scan_in;
1563
1564
1565 input siclk;
1566 input soclk;
1567
1568 output [4:0] dout;
1569 output scan_out;
1570assign fdin[4:0] = (din[4:0] & {5{en}} & ~{5{clr}}) | (dout[4:0] & ~{5{en}} & ~{5{clr}});
1571
1572
1573
1574
1575
1576
1577dff #(5) d0_0 (
1578.l1clk(l1clk),
1579.siclk(siclk),
1580.soclk(soclk),
1581.d(fdin[4:0]),
1582.si({scan_in,so[3:0]}),
1583.so({so[3:0],scan_out}),
1584.q(dout[4:0])
1585);
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598endmodule
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612// any PARAMS parms go into naming of macro
1613
1614module l2t_snp_ctl_msff_ctl_macro__clr_1__width_1 (
1615 din,
1616 clr,
1617 l1clk,
1618 scan_in,
1619 siclk,
1620 soclk,
1621 dout,
1622 scan_out);
1623wire [0:0] fdin;
1624
1625 input [0:0] din;
1626 input clr;
1627 input l1clk;
1628 input scan_in;
1629
1630
1631 input siclk;
1632 input soclk;
1633
1634 output [0:0] dout;
1635 output scan_out;
1636assign fdin[0:0] = din[0:0] & ~{1{clr}};
1637
1638
1639
1640
1641
1642
1643dff #(1) d0_0 (
1644.l1clk(l1clk),
1645.siclk(siclk),
1646.soclk(soclk),
1647.d(fdin[0:0]),
1648.si(scan_in),
1649.so(scan_out),
1650.q(dout[0:0])
1651);
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664endmodule
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678// any PARAMS parms go into naming of macro
1679
1680module l2t_snp_ctl_msff_ctl_macro__width_4 (
1681 din,
1682 l1clk,
1683 scan_in,
1684 siclk,
1685 soclk,
1686 dout,
1687 scan_out);
1688wire [3:0] fdin;
1689wire [2:0] so;
1690
1691 input [3:0] din;
1692 input l1clk;
1693 input scan_in;
1694
1695
1696 input siclk;
1697 input soclk;
1698
1699 output [3:0] dout;
1700 output scan_out;
1701assign fdin[3:0] = din[3:0];
1702
1703
1704
1705
1706
1707
1708dff #(4) d0_0 (
1709.l1clk(l1clk),
1710.siclk(siclk),
1711.soclk(soclk),
1712.d(fdin[3:0]),
1713.si({scan_in,so[2:0]}),
1714.so({so[2:0],scan_out}),
1715.q(dout[3:0])
1716);
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729endmodule
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743// any PARAMS parms go into naming of macro
1744
1745module l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_2 (
1746 din,
1747 l1clk,
1748 scan_in,
1749 siclk,
1750 soclk,
1751 dout,
1752 scan_out);
1753wire [1:0] fdin;
1754wire [0:0] so;
1755
1756 input [1:0] din;
1757 input l1clk;
1758 input scan_in;
1759
1760
1761 input siclk;
1762 input soclk;
1763
1764 output [1:0] dout;
1765 output scan_out;
1766assign fdin[1:0] = din[1:0];
1767
1768
1769
1770
1771
1772
1773dff #(2) d0_0 (
1774.l1clk(l1clk),
1775.siclk(siclk),
1776.soclk(soclk),
1777.d(fdin[1:0]),
1778.si({scan_in,so[0:0]}),
1779.so({so[0:0],scan_out}),
1780.q(dout[1:0])
1781);
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794endmodule
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808// any PARAMS parms go into naming of macro
1809
1810module l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_16 (
1811 din,
1812 l1clk,
1813 scan_in,
1814 siclk,
1815 soclk,
1816 dout,
1817 scan_out);
1818wire [15:0] fdin;
1819wire [14:0] so;
1820
1821 input [15:0] din;
1822 input l1clk;
1823 input scan_in;
1824
1825
1826 input siclk;
1827 input soclk;
1828
1829 output [15:0] dout;
1830 output scan_out;
1831assign fdin[15:0] = din[15:0];
1832
1833
1834
1835
1836
1837
1838dff #(16) d0_0 (
1839.l1clk(l1clk),
1840.siclk(siclk),
1841.soclk(soclk),
1842.d(fdin[15:0]),
1843.si({scan_in,so[14:0]}),
1844.so({so[14:0],scan_out}),
1845.q(dout[15:0])
1846);
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859endmodule
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873// any PARAMS parms go into naming of macro
1874
1875module l2t_snp_ctl_msff_ctl_macro__clr_1__dmsff_32x__en_1__width_1 (
1876 din,
1877 en,
1878 clr,
1879 l1clk,
1880 scan_in,
1881 siclk,
1882 soclk,
1883 dout,
1884 scan_out);
1885wire [0:0] fdin;
1886
1887 input [0:0] din;
1888 input en;
1889 input clr;
1890 input l1clk;
1891 input scan_in;
1892
1893
1894 input siclk;
1895 input soclk;
1896
1897 output [0:0] dout;
1898 output scan_out;
1899assign fdin[0:0] = (din[0:0] & {1{en}} & ~{1{clr}}) | (dout[0:0] & ~{1{en}} & ~{1{clr}});
1900
1901
1902
1903
1904
1905
1906dff #(1) d0_0 (
1907.l1clk(l1clk),
1908.siclk(siclk),
1909.soclk(soclk),
1910.d(fdin[0:0]),
1911.si(scan_in),
1912.so(scan_out),
1913.q(dout[0:0])
1914);
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927endmodule
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941// any PARAMS parms go into naming of macro
1942
1943module l2t_snp_ctl_msff_ctl_macro__dmsff_32x__width_4 (
1944 din,
1945 l1clk,
1946 scan_in,
1947 siclk,
1948 soclk,
1949 dout,
1950 scan_out);
1951wire [3:0] fdin;
1952wire [2:0] so;
1953
1954 input [3:0] din;
1955 input l1clk;
1956 input scan_in;
1957
1958
1959 input siclk;
1960 input soclk;
1961
1962 output [3:0] dout;
1963 output scan_out;
1964assign fdin[3:0] = din[3:0];
1965
1966
1967
1968
1969
1970
1971dff #(4) d0_0 (
1972.l1clk(l1clk),
1973.siclk(siclk),
1974.soclk(soclk),
1975.d(fdin[3:0]),
1976.si({scan_in,so[2:0]}),
1977.so({so[2:0],scan_out}),
1978.q(dout[3:0])
1979);
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992endmodule
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006// any PARAMS parms go into naming of macro
2007
2008module l2t_snp_ctl_msff_ctl_macro__clr_1__dmsff_32x__width_2 (
2009 din,
2010 clr,
2011 l1clk,
2012 scan_in,
2013 siclk,
2014 soclk,
2015 dout,
2016 scan_out);
2017wire [1:0] fdin;
2018wire [0:0] so;
2019
2020 input [1:0] din;
2021 input clr;
2022 input l1clk;
2023 input scan_in;
2024
2025
2026 input siclk;
2027 input soclk;
2028
2029 output [1:0] dout;
2030 output scan_out;
2031assign fdin[1:0] = din[1:0] & ~{2{clr}};
2032
2033
2034
2035
2036
2037
2038dff #(2) d0_0 (
2039.l1clk(l1clk),
2040.siclk(siclk),
2041.soclk(soclk),
2042.d(fdin[1:0]),
2043.si({scan_in,so[0:0]}),
2044.so({so[0:0],scan_out}),
2045.q(dout[1:0])
2046);
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059endmodule
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2070// also for pass-gate with decoder
2071
2072
2073
2074
2075
2076// any PARAMS parms go into naming of macro
2077
2078module l2t_snp_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_2 (
2079 din0,
2080 sel0,
2081 din1,
2082 sel1,
2083 dout);
2084 input [1:0] din0;
2085 input sel0;
2086 input [1:0] din1;
2087 input sel1;
2088 output [1:0] dout;
2089
2090
2091
2092
2093
2094assign dout[1:0] = ( {2{sel0}} & din0[1:0] ) |
2095 ( {2{sel1}} & din1[1:0]);
2096
2097
2098
2099
2100
2101endmodule
2102
2103
2104
2105
2106
2107
2108// any PARAMS parms go into naming of macro
2109
2110module l2t_snp_ctl_msff_ctl_macro__clr_1__width_2 (
2111 din,
2112 clr,
2113 l1clk,
2114 scan_in,
2115 siclk,
2116 soclk,
2117 dout,
2118 scan_out);
2119wire [1:0] fdin;
2120wire [0:0] so;
2121
2122 input [1:0] din;
2123 input clr;
2124 input l1clk;
2125 input scan_in;
2126
2127
2128 input siclk;
2129 input soclk;
2130
2131 output [1:0] dout;
2132 output scan_out;
2133assign fdin[1:0] = din[1:0] & ~{2{clr}};
2134
2135
2136
2137
2138
2139
2140dff #(2) d0_0 (
2141.l1clk(l1clk),
2142.siclk(siclk),
2143.soclk(soclk),
2144.d(fdin[1:0]),
2145.si({scan_in,so[0:0]}),
2146.so({so[0:0],scan_out}),
2147.q(dout[1:0])
2148);
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161endmodule
2162
2163
2164
2165
2166
2167
2168
2169