Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: tlu_tic_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 ============================================ | |
35 | module tlu_tic_dp ( | |
36 | l2clk, | |
37 | scan_in, | |
38 | tcu_pce_ov, | |
39 | spc_aclk, | |
40 | spc_bclk, | |
41 | tcu_scan_en, | |
42 | tcu_dectest, | |
43 | tcu_muxtest, | |
44 | cmp_tick_enable, | |
45 | asi_rd_tick, | |
46 | asi_wr_tick, | |
47 | asi_tca_addr, | |
48 | asi_tca_addr_valid, | |
49 | asi_tca_wr, | |
50 | asi_wr_data, | |
51 | asi_mbist_run, | |
52 | asi_mbist_cmpsel, | |
53 | tca_cmpr_data_in, | |
54 | cel_ecc, | |
55 | exu_address0_e, | |
56 | exu_address1_e, | |
57 | scan_out, | |
58 | tic_cmpr_addr, | |
59 | tic_cmpr_wr_en, | |
60 | tic_cmpr_rd_en, | |
61 | tic_asi_data, | |
62 | tic_cmpr_data, | |
63 | tic_addr, | |
64 | tic_not_valid, | |
65 | tic_match, | |
66 | tic_mbist_data, | |
67 | tic_exu_address0_m, | |
68 | tic_exu_address1_m, | |
69 | tic_exu_address0_b, | |
70 | tic_exu_address1_b); | |
71 | wire clk; | |
72 | wire stop; | |
73 | wire test; | |
74 | wire pce_ov; | |
75 | wire se; | |
76 | wire siclk; | |
77 | wire soclk; | |
78 | wire [62:0] wr_data; | |
79 | wire tick_enable; | |
80 | wire tick_en; | |
81 | wire tick_lat_scanin; | |
82 | wire tick_lat_scanout; | |
83 | wire [62:0] tick_in; | |
84 | wire [62:0] tick; | |
85 | wire [17:16] unused; | |
86 | wire [4:0] cmpr_addr_in; | |
87 | wire cmpr_wr_en_in; | |
88 | wire cmpr_rd_en_in; | |
89 | wire cmpr_addr_lat_scanin; | |
90 | wire cmpr_addr_lat_scanout; | |
91 | wire [4:0] cmpr_addr; | |
92 | wire cmpr_wr_en; | |
93 | wire cmpr_data_lat_scanin; | |
94 | wire cmpr_data_lat_scanout; | |
95 | wire [63:0] cmpr_data; | |
96 | wire [63:0] asi_data; | |
97 | wire cmpsel_lat_scanin; | |
98 | wire cmpsel_lat_scanout; | |
99 | wire [1:0] cmpsel; | |
100 | wire tcu_muxtest_rep0; | |
101 | wire [31:0] mbist_data; | |
102 | wire address0_m_lat_scanin; | |
103 | wire address0_m_lat_scanout; | |
104 | wire [1:0] address0_m; | |
105 | wire address1_m_lat_scanin; | |
106 | wire address1_m_lat_scanout; | |
107 | wire [1:0] address1_m; | |
108 | ||
109 | ||
110 | ||
111 | input l2clk; | |
112 | input scan_in; | |
113 | input tcu_pce_ov; | |
114 | input spc_aclk; | |
115 | input spc_bclk; | |
116 | input tcu_scan_en; | |
117 | input tcu_dectest; | |
118 | input tcu_muxtest; | |
119 | ||
120 | // TICK register enable | |
121 | input cmp_tick_enable; | |
122 | ||
123 | input asi_rd_tick; | |
124 | input asi_wr_tick; | |
125 | ||
126 | input [4:0] asi_tca_addr; | |
127 | input asi_tca_addr_valid; | |
128 | input asi_tca_wr; | |
129 | input [62:0] asi_wr_data; | |
130 | input asi_mbist_run; // MBIST | |
131 | input [1:0] asi_mbist_cmpsel; // MBIST | |
132 | ||
133 | input [63:0] tca_cmpr_data_in; | |
134 | ||
135 | input [7:0] cel_ecc; // MBIST | |
136 | ||
137 | input [47:0] exu_address0_e; // For PCT but here for placement | |
138 | input [47:0] exu_address1_e; // For PCT but here for placement | |
139 | ||
140 | ||
141 | ||
142 | output scan_out; | |
143 | ||
144 | output [4:0] tic_cmpr_addr; | |
145 | output tic_cmpr_wr_en; | |
146 | output tic_cmpr_rd_en; | |
147 | ||
148 | output [63:0] tic_asi_data; | |
149 | output [63:0] tic_cmpr_data; | |
150 | ||
151 | output [4:0] tic_addr; | |
152 | output tic_not_valid; | |
153 | output tic_match; | |
154 | ||
155 | output [31:0] tic_mbist_data; // MBIST | |
156 | ||
157 | output [47:2] tic_exu_address0_m; // For PCT but here for placement | |
158 | output [47:2] tic_exu_address1_m; // For PCT but here for placement | |
159 | output [1:0] tic_exu_address0_b; // For DFD | |
160 | output [1:0] tic_exu_address1_b; // For DFD | |
161 | ||
162 | ||
163 | ||
164 | // 0in bits_on -var {asi_wr_tick, asi_tca_wr} -max 1 -message "Writing TICK and CMPR at same time" | |
165 | // 0in constant -var (asi_tca_wr & !asi_tca_addr_valid) -message "CMPR write valid without valid address" | |
166 | ||
167 | ||
168 | ||
169 | ||
170 | //////////////////////////////////////////////////////////////////////////////// | |
171 | ||
172 | assign clk = l2clk; | |
173 | assign stop = 1'b0; | |
174 | assign test = tcu_dectest; | |
175 | ||
176 | tlu_tic_dp_buff_macro__width_4 clk_control_buf ( | |
177 | .din ({tcu_pce_ov , | |
178 | tcu_scan_en , | |
179 | spc_aclk , | |
180 | spc_bclk }), | |
181 | .dout ({pce_ov , | |
182 | se , | |
183 | siclk , | |
184 | soclk }) | |
185 | ); | |
186 | ||
187 | ||
188 | // Since bit 63 of the TICK and CMPR registers is stored negative active, | |
189 | // need to invert write data and read data in tlu_asi_ctl | |
190 | ||
191 | assign wr_data[62:0] = | |
192 | asi_wr_data[62:0]; | |
193 | ||
194 | ||
195 | ||
196 | /////////////////////////////////////////////////////////////////////////////// | |
197 | // Tick register | |
198 | // TICK.NPT (bit 63) is stored in tlu_asi_ctl and | |
199 | // has POR value of 1 | |
200 | ||
201 | tlu_tic_dp_or_macro__ports_2__width_1 tick_en_or ( | |
202 | .din0 (asi_wr_tick ), | |
203 | .din1 (tick_enable ), | |
204 | .dout (tick_en ) | |
205 | ); | |
206 | ||
207 | tlu_tic_dp_msff_macro__mux_aope__ports_2__width_63 tick_lat ( | |
208 | .scan_in(tick_lat_scanin), | |
209 | .scan_out(tick_lat_scanout), | |
210 | .en (tick_en ), | |
211 | .din0 (wr_data [62:0] ), | |
212 | .din1 (tick_in [62:0] ), | |
213 | .sel0 (asi_wr_tick ), | |
214 | .dout (tick [62:0] ), | |
215 | .clk(clk), | |
216 | .se(se), | |
217 | .siclk(siclk), | |
218 | .soclk(soclk), | |
219 | .pce_ov(pce_ov), | |
220 | .stop(stop) | |
221 | ); | |
222 | ||
223 | tlu_tic_dp_increment_macro__width_64 tick_inc ( | |
224 | .cin (1'b1 ), | |
225 | .din ({1'b0 , | |
226 | tick [62:0]}), | |
227 | .cout (unused [17 ] ), | |
228 | .dout ({unused [16 ], | |
229 | tick_in [62:0]}) | |
230 | ); | |
231 | ||
232 | tlu_tic_dp_mux_macro__mux_pgpe__ports_2__width_6 cmpr_addr_mux ( | |
233 | .din0 ({asi_tca_addr [4:0], | |
234 | asi_tca_wr }), | |
235 | .din1 ({tick [6:2], | |
236 | 1'b0 }), | |
237 | .sel0 (asi_tca_addr_valid ), | |
238 | .dout ({cmpr_addr_in [4:0], | |
239 | cmpr_wr_en_in }) | |
240 | ); | |
241 | ||
242 | tlu_tic_dp_inv_macro__width_1 cmpr_rd_en_in_inv ( | |
243 | .din (cmpr_wr_en_in ), | |
244 | .dout (cmpr_rd_en_in ) | |
245 | ); | |
246 | ||
247 | assign tic_cmpr_addr[4:0] = | |
248 | cmpr_addr_in[4:0]; | |
249 | ||
250 | assign tic_cmpr_wr_en = | |
251 | cmpr_wr_en_in; | |
252 | ||
253 | assign tic_cmpr_rd_en = | |
254 | cmpr_rd_en_in; | |
255 | ||
256 | tlu_tic_dp_msff_macro__width_13 cmpr_addr_lat ( | |
257 | .scan_in(cmpr_addr_lat_scanin), | |
258 | .scan_out(cmpr_addr_lat_scanout), | |
259 | .en (1'b1 ), | |
260 | .din ({cmp_tick_enable , | |
261 | cmpr_addr_in [4:0], | |
262 | cmpr_wr_en_in , | |
263 | cmpr_addr [4:0], | |
264 | cmpr_wr_en }), | |
265 | .dout ({tick_enable , | |
266 | cmpr_addr [4:0], | |
267 | cmpr_wr_en , | |
268 | tic_addr [4:0], | |
269 | tic_not_valid }), | |
270 | .clk(clk), | |
271 | .se(se), | |
272 | .siclk(siclk), | |
273 | .soclk(soclk), | |
274 | .pce_ov(pce_ov), | |
275 | .stop(stop) | |
276 | ); | |
277 | ||
278 | tlu_tic_dp_msff_macro__minbuff_1__width_64 cmpr_data_lat ( | |
279 | .scan_in(cmpr_data_lat_scanin), | |
280 | .scan_out(cmpr_data_lat_scanout), | |
281 | .en (1'b1 ), | |
282 | .din (tca_cmpr_data_in [63:0] ), | |
283 | .dout (cmpr_data [63:0] ), | |
284 | .clk(clk), | |
285 | .se(se), | |
286 | .siclk(siclk), | |
287 | .soclk(soclk), | |
288 | .pce_ov(pce_ov), | |
289 | .stop(stop) | |
290 | ); | |
291 | ||
292 | assign tic_cmpr_data[63:0] = | |
293 | cmpr_data[63:0]; | |
294 | ||
295 | ||
296 | ||
297 | /////////////////////////////////////////////////////////////////////////////// | |
298 | // Comparison | |
299 | // Have to ignore 7 bits because | |
300 | // - 5 bits for 8 threads x 3 cmpr regs per thread (round to 4) | |
301 | // - 1 bit for ASI reads or writes | |
302 | // - 1 more bit because ASI reads and writes are in different ASI pipe stages | |
303 | ||
304 | tlu_tic_dp_cmp_macro__width_64 tick_cmp ( | |
305 | .din0 ({cmpr_data [63:7], | |
306 | {7 {1'b0}} }), | |
307 | // INTDIS is stored negative active (effectively an interrupt enable), | |
308 | // so compare when INTDIS is 1 | |
309 | .din1 ({1'b1 , | |
310 | tick [62:7], | |
311 | {7 {1'b0}} }), | |
312 | .dout (tic_match ) | |
313 | ); | |
314 | ||
315 | ||
316 | ||
317 | /////////////////////////////////////////////////////////////////////////////// | |
318 | // ASI reads | |
319 | // Note that bit 63 is inverted! | |
320 | ||
321 | tlu_tic_dp_mux_macro__dmux_8x__mux_aope__ports_2__width_64 asi_lat ( | |
322 | .din0 ({1'b0 , | |
323 | tick [62:0]}), | |
324 | .din1 (cmpr_data [63:0] ), | |
325 | .sel0 (asi_rd_tick ), | |
326 | .dout (asi_data [63:0] ) | |
327 | ); | |
328 | ||
329 | assign tic_asi_data[63:0] = | |
330 | asi_data[63:0]; | |
331 | ||
332 | ||
333 | ||
334 | /////////////////////////////////////////////////////////////////////////////// | |
335 | // MBIST muxing | |
336 | ||
337 | tlu_tic_dp_msff_macro__width_2 cmpsel_lat ( | |
338 | .scan_in(cmpsel_lat_scanin), | |
339 | .scan_out(cmpsel_lat_scanout), | |
340 | .en (asi_mbist_run ), | |
341 | .din (asi_mbist_cmpsel [1:0] ), | |
342 | .dout (cmpsel [1:0] ), | |
343 | .clk(clk), | |
344 | .se(se), | |
345 | .siclk(siclk), | |
346 | .soclk(soclk), | |
347 | .pce_ov(pce_ov), | |
348 | .stop(stop) | |
349 | ); | |
350 | ||
351 | tlu_tic_dp_buff_macro__dbuff_32x__width_1 tst_mux_rep0 ( | |
352 | .din (tcu_muxtest ), | |
353 | .dout (tcu_muxtest_rep0 ) | |
354 | ); | |
355 | ||
356 | tlu_tic_dp_mux_macro__mux_pgpe__ports_3__width_32 mbist_mux ( | |
357 | .din0 (cmpr_data [31:0] ), | |
358 | .din1 (cmpr_data [63:32] ), | |
359 | .din2 ({4 {cel_ecc [7:0]}}), | |
360 | .sel0 (cmpsel [0 ] ), | |
361 | .sel1 (cmpsel [1 ] ), | |
362 | .muxtst (tcu_muxtest_rep0 ), | |
363 | .dout (mbist_data [31:0] ), | |
364 | .test(test) | |
365 | ); | |
366 | ||
367 | assign tic_mbist_data[31:0] = | |
368 | mbist_data[31:0]; | |
369 | ||
370 | ||
371 | ||
372 | /////////////////////////////////////////////////////////////////////////////// | |
373 | // Flop EXU address for PCT | |
374 | ||
375 | tlu_tic_dp_msff_macro__width_50 address0_m_lat ( | |
376 | .scan_in(address0_m_lat_scanin), | |
377 | .scan_out(address0_m_lat_scanout), | |
378 | .en (1'b1 ), | |
379 | .din ({exu_address0_e [47:0], | |
380 | address0_m [1:0]}), | |
381 | .dout ({tic_exu_address0_m [47:2], | |
382 | address0_m [1:0], | |
383 | tic_exu_address0_b [1:0]}), | |
384 | .clk(clk), | |
385 | .se(se), | |
386 | .siclk(siclk), | |
387 | .soclk(soclk), | |
388 | .pce_ov(pce_ov), | |
389 | .stop(stop) | |
390 | ); | |
391 | ||
392 | tlu_tic_dp_msff_macro__width_50 address1_m_lat ( | |
393 | .scan_in(address1_m_lat_scanin), | |
394 | .scan_out(address1_m_lat_scanout), | |
395 | .en (1'b1 ), | |
396 | .din ({exu_address1_e [47:0], | |
397 | address1_m [1:0]}), | |
398 | .dout ({tic_exu_address1_m [47:2], | |
399 | address1_m [1:0], | |
400 | tic_exu_address1_b [1:0]}), | |
401 | .clk(clk), | |
402 | .se(se), | |
403 | .siclk(siclk), | |
404 | .soclk(soclk), | |
405 | .pce_ov(pce_ov), | |
406 | .stop(stop) | |
407 | ); | |
408 | ||
409 | ||
410 | ||
411 | ||
412 | ||
413 | // fixscan start: | |
414 | assign tick_lat_scanin = scan_in ; | |
415 | assign cmpr_addr_lat_scanin = tick_lat_scanout ; | |
416 | assign cmpr_data_lat_scanin = cmpr_addr_lat_scanout ; | |
417 | assign cmpsel_lat_scanin = cmpr_data_lat_scanout ; | |
418 | assign address0_m_lat_scanin = cmpsel_lat_scanout ; | |
419 | assign address1_m_lat_scanin = address0_m_lat_scanout ; | |
420 | assign scan_out = address1_m_lat_scanout ; | |
421 | // fixscan end: | |
422 | endmodule | |
423 | ||
424 | ||
425 | ||
426 | // | |
427 | // buff macro | |
428 | // | |
429 | // | |
430 | ||
431 | ||
432 | ||
433 | ||
434 | ||
435 | module tlu_tic_dp_buff_macro__width_4 ( | |
436 | din, | |
437 | dout); | |
438 | input [3:0] din; | |
439 | output [3:0] dout; | |
440 | ||
441 | ||
442 | ||
443 | ||
444 | ||
445 | ||
446 | buff #(4) d0_0 ( | |
447 | .in(din[3:0]), | |
448 | .out(dout[3:0]) | |
449 | ); | |
450 | ||
451 | ||
452 | ||
453 | ||
454 | ||
455 | ||
456 | ||
457 | ||
458 | endmodule | |
459 | ||
460 | ||
461 | ||
462 | ||
463 | ||
464 | // | |
465 | // or macro for ports = 2,3 | |
466 | // | |
467 | // | |
468 | ||
469 | ||
470 | ||
471 | ||
472 | ||
473 | module tlu_tic_dp_or_macro__ports_2__width_1 ( | |
474 | din0, | |
475 | din1, | |
476 | dout); | |
477 | input [0:0] din0; | |
478 | input [0:0] din1; | |
479 | output [0:0] dout; | |
480 | ||
481 | ||
482 | ||
483 | ||
484 | ||
485 | ||
486 | or2 #(1) d0_0 ( | |
487 | .in0(din0[0:0]), | |
488 | .in1(din1[0:0]), | |
489 | .out(dout[0:0]) | |
490 | ); | |
491 | ||
492 | ||
493 | ||
494 | ||
495 | ||
496 | ||
497 | ||
498 | ||
499 | ||
500 | endmodule | |
501 | ||
502 | ||
503 | ||
504 | ||
505 | ||
506 | ||
507 | ||
508 | ||
509 | ||
510 | // any PARAMS parms go into naming of macro | |
511 | ||
512 | module tlu_tic_dp_msff_macro__mux_aope__ports_2__width_63 ( | |
513 | din0, | |
514 | din1, | |
515 | sel0, | |
516 | clk, | |
517 | en, | |
518 | se, | |
519 | scan_in, | |
520 | siclk, | |
521 | soclk, | |
522 | pce_ov, | |
523 | stop, | |
524 | dout, | |
525 | scan_out); | |
526 | wire psel0; | |
527 | wire psel1; | |
528 | wire [62:0] muxout; | |
529 | wire l1clk; | |
530 | wire siclk_out; | |
531 | wire soclk_out; | |
532 | wire [61:0] so; | |
533 | ||
534 | input [62:0] din0; | |
535 | input [62:0] din1; | |
536 | input sel0; | |
537 | ||
538 | ||
539 | input clk; | |
540 | input en; | |
541 | input se; | |
542 | input scan_in; | |
543 | input siclk; | |
544 | input soclk; | |
545 | input pce_ov; | |
546 | input stop; | |
547 | ||
548 | ||
549 | ||
550 | output [62:0] dout; | |
551 | ||
552 | ||
553 | output scan_out; | |
554 | ||
555 | ||
556 | ||
557 | ||
558 | cl_dp1_penc2_8x c1_0 ( | |
559 | .sel0(sel0), | |
560 | .psel0(psel0), | |
561 | .psel1(psel1) | |
562 | ); | |
563 | ||
564 | mux2s #(63) d1_0 ( | |
565 | .sel0(psel0), | |
566 | .sel1(psel1), | |
567 | .in0(din0[62:0]), | |
568 | .in1(din1[62:0]), | |
569 | .dout(muxout[62:0]) | |
570 | ); | |
571 | cl_dp1_l1hdr_8x c0_0 ( | |
572 | .l2clk(clk), | |
573 | .pce(en), | |
574 | .aclk(siclk), | |
575 | .bclk(soclk), | |
576 | .l1clk(l1clk), | |
577 | .se(se), | |
578 | .pce_ov(pce_ov), | |
579 | .stop(stop), | |
580 | .siclk_out(siclk_out), | |
581 | .soclk_out(soclk_out) | |
582 | ); | |
583 | dff #(63) d0_0 ( | |
584 | .l1clk(l1clk), | |
585 | .siclk(siclk_out), | |
586 | .soclk(soclk_out), | |
587 | .d(muxout[62:0]), | |
588 | .si({scan_in,so[61:0]}), | |
589 | .so({so[61:0],scan_out}), | |
590 | .q(dout[62:0]) | |
591 | ); | |
592 | ||
593 | ||
594 | ||
595 | ||
596 | ||
597 | ||
598 | ||
599 | ||
600 | ||
601 | ||
602 | ||
603 | ||
604 | ||
605 | ||
606 | ||
607 | ||
608 | ||
609 | ||
610 | ||
611 | ||
612 | endmodule | |
613 | ||
614 | ||
615 | ||
616 | ||
617 | ||
618 | ||
619 | ||
620 | ||
621 | ||
622 | // | |
623 | // increment macro | |
624 | // | |
625 | // | |
626 | ||
627 | ||
628 | ||
629 | ||
630 | ||
631 | module tlu_tic_dp_increment_macro__width_64 ( | |
632 | din, | |
633 | cin, | |
634 | dout, | |
635 | cout); | |
636 | input [63:0] din; | |
637 | input cin; | |
638 | output [63:0] dout; | |
639 | output cout; | |
640 | ||
641 | ||
642 | ||
643 | ||
644 | ||
645 | ||
646 | incr #(64) m0_0 ( | |
647 | .cin(cin), | |
648 | .in(din[63:0]), | |
649 | .out(dout[63:0]), | |
650 | .cout(cout) | |
651 | ); | |
652 | ||
653 | ||
654 | ||
655 | ||
656 | ||
657 | ||
658 | ||
659 | ||
660 | ||
661 | ||
662 | ||
663 | endmodule | |
664 | ||
665 | ||
666 | ||
667 | ||
668 | ||
669 | // general mux macro for pass-gate and and-or muxes with/wout priority encoders | |
670 | // also for pass-gate with decoder | |
671 | ||
672 | ||
673 | ||
674 | ||
675 | ||
676 | // any PARAMS parms go into naming of macro | |
677 | ||
678 | module tlu_tic_dp_mux_macro__mux_pgpe__ports_2__width_6 ( | |
679 | din0, | |
680 | din1, | |
681 | sel0, | |
682 | dout); | |
683 | wire psel0_unused; | |
684 | wire psel1; | |
685 | ||
686 | input [5:0] din0; | |
687 | input [5:0] din1; | |
688 | input sel0; | |
689 | output [5:0] dout; | |
690 | ||
691 | ||
692 | ||
693 | ||
694 | ||
695 | cl_dp1_penc2_8x c0_0 ( | |
696 | .sel0(sel0), | |
697 | .psel0(psel0_unused), | |
698 | .psel1(psel1) | |
699 | ); | |
700 | ||
701 | mux2e #(6) d0_0 ( | |
702 | .sel(psel1), | |
703 | .in0(din0[5:0]), | |
704 | .in1(din1[5:0]), | |
705 | .dout(dout[5:0]) | |
706 | ); | |
707 | ||
708 | ||
709 | ||
710 | ||
711 | ||
712 | ||
713 | ||
714 | ||
715 | ||
716 | ||
717 | ||
718 | ||
719 | ||
720 | endmodule | |
721 | ||
722 | ||
723 | // | |
724 | // invert macro | |
725 | // | |
726 | // | |
727 | ||
728 | ||
729 | ||
730 | ||
731 | ||
732 | module tlu_tic_dp_inv_macro__width_1 ( | |
733 | din, | |
734 | dout); | |
735 | input [0:0] din; | |
736 | output [0:0] dout; | |
737 | ||
738 | ||
739 | ||
740 | ||
741 | ||
742 | ||
743 | inv #(1) d0_0 ( | |
744 | .in(din[0:0]), | |
745 | .out(dout[0:0]) | |
746 | ); | |
747 | ||
748 | ||
749 | ||
750 | ||
751 | ||
752 | ||
753 | ||
754 | ||
755 | ||
756 | endmodule | |
757 | ||
758 | ||
759 | ||
760 | ||
761 | ||
762 | ||
763 | ||
764 | ||
765 | ||
766 | // any PARAMS parms go into naming of macro | |
767 | ||
768 | module tlu_tic_dp_msff_macro__width_13 ( | |
769 | din, | |
770 | clk, | |
771 | en, | |
772 | se, | |
773 | scan_in, | |
774 | siclk, | |
775 | soclk, | |
776 | pce_ov, | |
777 | stop, | |
778 | dout, | |
779 | scan_out); | |
780 | wire l1clk; | |
781 | wire siclk_out; | |
782 | wire soclk_out; | |
783 | wire [11:0] so; | |
784 | ||
785 | input [12:0] din; | |
786 | ||
787 | ||
788 | input clk; | |
789 | input en; | |
790 | input se; | |
791 | input scan_in; | |
792 | input siclk; | |
793 | input soclk; | |
794 | input pce_ov; | |
795 | input stop; | |
796 | ||
797 | ||
798 | ||
799 | output [12:0] dout; | |
800 | ||
801 | ||
802 | output scan_out; | |
803 | ||
804 | ||
805 | ||
806 | ||
807 | cl_dp1_l1hdr_8x c0_0 ( | |
808 | .l2clk(clk), | |
809 | .pce(en), | |
810 | .aclk(siclk), | |
811 | .bclk(soclk), | |
812 | .l1clk(l1clk), | |
813 | .se(se), | |
814 | .pce_ov(pce_ov), | |
815 | .stop(stop), | |
816 | .siclk_out(siclk_out), | |
817 | .soclk_out(soclk_out) | |
818 | ); | |
819 | dff #(13) d0_0 ( | |
820 | .l1clk(l1clk), | |
821 | .siclk(siclk_out), | |
822 | .soclk(soclk_out), | |
823 | .d(din[12:0]), | |
824 | .si({scan_in,so[11:0]}), | |
825 | .so({so[11:0],scan_out}), | |
826 | .q(dout[12:0]) | |
827 | ); | |
828 | ||
829 | ||
830 | ||
831 | ||
832 | ||
833 | ||
834 | ||
835 | ||
836 | ||
837 | ||
838 | ||
839 | ||
840 | ||
841 | ||
842 | ||
843 | ||
844 | ||
845 | ||
846 | ||
847 | ||
848 | endmodule | |
849 | ||
850 | ||
851 | ||
852 | ||
853 | ||
854 | ||
855 | ||
856 | ||
857 | ||
858 | ||
859 | ||
860 | ||
861 | ||
862 | // any PARAMS parms go into naming of macro | |
863 | ||
864 | module tlu_tic_dp_msff_macro__minbuff_1__width_64 ( | |
865 | din, | |
866 | clk, | |
867 | en, | |
868 | se, | |
869 | scan_in, | |
870 | siclk, | |
871 | soclk, | |
872 | pce_ov, | |
873 | stop, | |
874 | dout, | |
875 | scan_out); | |
876 | wire l1clk; | |
877 | wire siclk_out; | |
878 | wire soclk_out; | |
879 | wire [62:0] so; | |
880 | ||
881 | input [63:0] din; | |
882 | ||
883 | ||
884 | input clk; | |
885 | input en; | |
886 | input se; | |
887 | input scan_in; | |
888 | input siclk; | |
889 | input soclk; | |
890 | input pce_ov; | |
891 | input stop; | |
892 | ||
893 | ||
894 | ||
895 | output [63:0] dout; | |
896 | ||
897 | ||
898 | output scan_out; | |
899 | ||
900 | ||
901 | ||
902 | ||
903 | cl_dp1_l1hdr_8x c0_0 ( | |
904 | .l2clk(clk), | |
905 | .pce(en), | |
906 | .aclk(siclk), | |
907 | .bclk(soclk), | |
908 | .l1clk(l1clk), | |
909 | .se(se), | |
910 | .pce_ov(pce_ov), | |
911 | .stop(stop), | |
912 | .siclk_out(siclk_out), | |
913 | .soclk_out(soclk_out) | |
914 | ); | |
915 | dff #(64) d0_0 ( | |
916 | .l1clk(l1clk), | |
917 | .siclk(siclk_out), | |
918 | .soclk(soclk_out), | |
919 | .d(din[63:0]), | |
920 | .si({scan_in,so[62:0]}), | |
921 | .so({so[62:0],scan_out}), | |
922 | .q(dout[63:0]) | |
923 | ); | |
924 | ||
925 | ||
926 | ||
927 | ||
928 | ||
929 | ||
930 | ||
931 | ||
932 | ||
933 | ||
934 | ||
935 | ||
936 | ||
937 | ||
938 | ||
939 | ||
940 | ||
941 | ||
942 | ||
943 | ||
944 | endmodule | |
945 | ||
946 | ||
947 | ||
948 | ||
949 | ||
950 | ||
951 | ||
952 | ||
953 | ||
954 | // | |
955 | // comparator macro (output is 1 if both inputs are equal; 0 otherwise) | |
956 | // | |
957 | // | |
958 | ||
959 | ||
960 | ||
961 | ||
962 | ||
963 | module tlu_tic_dp_cmp_macro__width_64 ( | |
964 | din0, | |
965 | din1, | |
966 | dout); | |
967 | input [63:0] din0; | |
968 | input [63:0] din1; | |
969 | output dout; | |
970 | ||
971 | ||
972 | ||
973 | ||
974 | ||
975 | ||
976 | cmp #(64) m0_0 ( | |
977 | .in0(din0[63:0]), | |
978 | .in1(din1[63:0]), | |
979 | .out(dout) | |
980 | ); | |
981 | ||
982 | ||
983 | ||
984 | ||
985 | ||
986 | ||
987 | ||
988 | ||
989 | ||
990 | ||
991 | endmodule | |
992 | ||
993 | ||
994 | ||
995 | ||
996 | ||
997 | // general mux macro for pass-gate and and-or muxes with/wout priority encoders | |
998 | // also for pass-gate with decoder | |
999 | ||
1000 | ||
1001 | ||
1002 | ||
1003 | ||
1004 | // any PARAMS parms go into naming of macro | |
1005 | ||
1006 | module tlu_tic_dp_mux_macro__dmux_8x__mux_aope__ports_2__width_64 ( | |
1007 | din0, | |
1008 | din1, | |
1009 | sel0, | |
1010 | dout); | |
1011 | wire psel0; | |
1012 | wire psel1; | |
1013 | ||
1014 | input [63:0] din0; | |
1015 | input [63:0] din1; | |
1016 | input sel0; | |
1017 | output [63:0] dout; | |
1018 | ||
1019 | ||
1020 | ||
1021 | ||
1022 | ||
1023 | cl_dp1_penc2_8x c0_0 ( | |
1024 | .sel0(sel0), | |
1025 | .psel0(psel0), | |
1026 | .psel1(psel1) | |
1027 | ); | |
1028 | ||
1029 | mux2s #(64) d0_0 ( | |
1030 | .sel0(psel0), | |
1031 | .sel1(psel1), | |
1032 | .in0(din0[63:0]), | |
1033 | .in1(din1[63:0]), | |
1034 | .dout(dout[63:0]) | |
1035 | ); | |
1036 | ||
1037 | ||
1038 | ||
1039 | ||
1040 | ||
1041 | ||
1042 | ||
1043 | ||
1044 | ||
1045 | ||
1046 | ||
1047 | ||
1048 | ||
1049 | endmodule | |
1050 | ||
1051 | ||
1052 | ||
1053 | ||
1054 | ||
1055 | ||
1056 | // any PARAMS parms go into naming of macro | |
1057 | ||
1058 | module tlu_tic_dp_msff_macro__width_2 ( | |
1059 | din, | |
1060 | clk, | |
1061 | en, | |
1062 | se, | |
1063 | scan_in, | |
1064 | siclk, | |
1065 | soclk, | |
1066 | pce_ov, | |
1067 | stop, | |
1068 | dout, | |
1069 | scan_out); | |
1070 | wire l1clk; | |
1071 | wire siclk_out; | |
1072 | wire soclk_out; | |
1073 | wire [0:0] so; | |
1074 | ||
1075 | input [1:0] din; | |
1076 | ||
1077 | ||
1078 | input clk; | |
1079 | input en; | |
1080 | input se; | |
1081 | input scan_in; | |
1082 | input siclk; | |
1083 | input soclk; | |
1084 | input pce_ov; | |
1085 | input stop; | |
1086 | ||
1087 | ||
1088 | ||
1089 | output [1:0] dout; | |
1090 | ||
1091 | ||
1092 | output scan_out; | |
1093 | ||
1094 | ||
1095 | ||
1096 | ||
1097 | cl_dp1_l1hdr_8x c0_0 ( | |
1098 | .l2clk(clk), | |
1099 | .pce(en), | |
1100 | .aclk(siclk), | |
1101 | .bclk(soclk), | |
1102 | .l1clk(l1clk), | |
1103 | .se(se), | |
1104 | .pce_ov(pce_ov), | |
1105 | .stop(stop), | |
1106 | .siclk_out(siclk_out), | |
1107 | .soclk_out(soclk_out) | |
1108 | ); | |
1109 | dff #(2) d0_0 ( | |
1110 | .l1clk(l1clk), | |
1111 | .siclk(siclk_out), | |
1112 | .soclk(soclk_out), | |
1113 | .d(din[1:0]), | |
1114 | .si({scan_in,so[0:0]}), | |
1115 | .so({so[0:0],scan_out}), | |
1116 | .q(dout[1:0]) | |
1117 | ); | |
1118 | ||
1119 | ||
1120 | ||
1121 | ||
1122 | ||
1123 | ||
1124 | ||
1125 | ||
1126 | ||
1127 | ||
1128 | ||
1129 | ||
1130 | ||
1131 | ||
1132 | ||
1133 | ||
1134 | ||
1135 | ||
1136 | ||
1137 | ||
1138 | endmodule | |
1139 | ||
1140 | ||
1141 | ||
1142 | ||
1143 | ||
1144 | ||
1145 | ||
1146 | ||
1147 | ||
1148 | // | |
1149 | // buff macro | |
1150 | // | |
1151 | // | |
1152 | ||
1153 | ||
1154 | ||
1155 | ||
1156 | ||
1157 | module tlu_tic_dp_buff_macro__dbuff_32x__width_1 ( | |
1158 | din, | |
1159 | dout); | |
1160 | input [0:0] din; | |
1161 | output [0:0] dout; | |
1162 | ||
1163 | ||
1164 | ||
1165 | ||
1166 | ||
1167 | ||
1168 | buff #(1) d0_0 ( | |
1169 | .in(din[0:0]), | |
1170 | .out(dout[0:0]) | |
1171 | ); | |
1172 | ||
1173 | ||
1174 | ||
1175 | ||
1176 | ||
1177 | ||
1178 | ||
1179 | ||
1180 | endmodule | |
1181 | ||
1182 | ||
1183 | ||
1184 | ||
1185 | ||
1186 | // general mux macro for pass-gate and and-or muxes with/wout priority encoders | |
1187 | // also for pass-gate with decoder | |
1188 | ||
1189 | ||
1190 | ||
1191 | ||
1192 | ||
1193 | // any PARAMS parms go into naming of macro | |
1194 | ||
1195 | module tlu_tic_dp_mux_macro__mux_pgpe__ports_3__width_32 ( | |
1196 | din0, | |
1197 | din1, | |
1198 | din2, | |
1199 | sel0, | |
1200 | sel1, | |
1201 | muxtst, | |
1202 | test, | |
1203 | dout); | |
1204 | wire psel0; | |
1205 | wire psel1; | |
1206 | wire psel2; | |
1207 | ||
1208 | input [31:0] din0; | |
1209 | input [31:0] din1; | |
1210 | input [31:0] din2; | |
1211 | input sel0; | |
1212 | input sel1; | |
1213 | input muxtst; | |
1214 | input test; | |
1215 | output [31:0] dout; | |
1216 | ||
1217 | ||
1218 | ||
1219 | ||
1220 | ||
1221 | cl_dp1_penc3_8x c0_0 ( | |
1222 | .sel0(sel0), | |
1223 | .sel1(sel1), | |
1224 | .psel0(psel0), | |
1225 | .psel1(psel1), | |
1226 | .psel2(psel2), | |
1227 | .test(test) | |
1228 | ); | |
1229 | ||
1230 | mux3 #(32) d0_0 ( | |
1231 | .sel0(psel0), | |
1232 | .sel1(psel1), | |
1233 | .sel2(psel2), | |
1234 | .in0(din0[31:0]), | |
1235 | .in1(din1[31:0]), | |
1236 | .in2(din2[31:0]), | |
1237 | .dout(dout[31:0]), | |
1238 | .muxtst(muxtst) | |
1239 | ); | |
1240 | ||
1241 | ||
1242 | ||
1243 | ||
1244 | ||
1245 | ||
1246 | ||
1247 | ||
1248 | ||
1249 | ||
1250 | ||
1251 | ||
1252 | ||
1253 | endmodule | |
1254 | ||
1255 | ||
1256 | ||
1257 | ||
1258 | ||
1259 | ||
1260 | // any PARAMS parms go into naming of macro | |
1261 | ||
1262 | module tlu_tic_dp_msff_macro__width_50 ( | |
1263 | din, | |
1264 | clk, | |
1265 | en, | |
1266 | se, | |
1267 | scan_in, | |
1268 | siclk, | |
1269 | soclk, | |
1270 | pce_ov, | |
1271 | stop, | |
1272 | dout, | |
1273 | scan_out); | |
1274 | wire l1clk; | |
1275 | wire siclk_out; | |
1276 | wire soclk_out; | |
1277 | wire [48:0] so; | |
1278 | ||
1279 | input [49:0] din; | |
1280 | ||
1281 | ||
1282 | input clk; | |
1283 | input en; | |
1284 | input se; | |
1285 | input scan_in; | |
1286 | input siclk; | |
1287 | input soclk; | |
1288 | input pce_ov; | |
1289 | input stop; | |
1290 | ||
1291 | ||
1292 | ||
1293 | output [49:0] dout; | |
1294 | ||
1295 | ||
1296 | output scan_out; | |
1297 | ||
1298 | ||
1299 | ||
1300 | ||
1301 | cl_dp1_l1hdr_8x c0_0 ( | |
1302 | .l2clk(clk), | |
1303 | .pce(en), | |
1304 | .aclk(siclk), | |
1305 | .bclk(soclk), | |
1306 | .l1clk(l1clk), | |
1307 | .se(se), | |
1308 | .pce_ov(pce_ov), | |
1309 | .stop(stop), | |
1310 | .siclk_out(siclk_out), | |
1311 | .soclk_out(soclk_out) | |
1312 | ); | |
1313 | dff #(50) d0_0 ( | |
1314 | .l1clk(l1clk), | |
1315 | .siclk(siclk_out), | |
1316 | .soclk(soclk_out), | |
1317 | .d(din[49:0]), | |
1318 | .si({scan_in,so[48:0]}), | |
1319 | .so({so[48:0],scan_out}), | |
1320 | .q(dout[49:0]) | |
1321 | ); | |
1322 | ||
1323 | ||
1324 | ||
1325 | ||
1326 | ||
1327 | ||
1328 | ||
1329 | ||
1330 | ||
1331 | ||
1332 | ||
1333 | ||
1334 | ||
1335 | ||
1336 | ||
1337 | ||
1338 | ||
1339 | ||
1340 | ||
1341 | ||
1342 | endmodule | |
1343 | ||
1344 | ||
1345 | ||
1346 | ||
1347 | ||
1348 | ||
1349 | ||
1350 |