Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / pmu / rtl / pmu_pdp_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: pmu_pdp_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 pmu_pdp_dp (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 spc_aclk,
40 spc_bclk,
41 tcu_scan_en,
42 scan_out,
43 in_rngl_cdbus,
44 pct_rd_pic,
45 pct_rd_a_pic,
46 pct_rd_pic_pcr,
47 pct_bypass_asi,
48 pct_pcr_data,
49 pct_exception,
50 pct_pic_clken,
51 pct_pic07_w2_clken,
52 pct_wr_pic_w2,
53 pct_incr_pic_w1,
54 pct_incr_asi_w1,
55 pct_pich07_add_w2,
56 pct_picl07_add_w2,
57 pmu_asi_clken,
58 pmu_rngl_cdbus,
59 pdp_asi_din_to_pctl,
60 pdp_asi_ctlin_to_pctl_15_8,
61 pdp_asi_ctlin_to_pctl_4_0,
62 pdp_pich_cout07,
63 pdp_picl_cout07,
64 pdp_pich_wrap,
65 pdp_picl_wrap);
66wire stop;
67wire se;
68wire pce_ov;
69wire siclk;
70wire soclk;
71wire asi_din_scanin;
72wire asi_din_scanout;
73wire [63:0] pdp_asi_din;
74wire pic0_scanin;
75wire pic0_scanout;
76wire [31:0] pich07_incr;
77wire [31:0] picl07_incr;
78wire [31:0] pich0;
79wire [31:0] picl0;
80wire [7:0] pdp_pich_wrapa;
81wire [7:0] pdp_picl_wrapa;
82wire [7:0] pdp_pich_wrapb;
83wire [7:0] pdp_picl_wrapb;
84wire pic1_scanin;
85wire pic1_scanout;
86wire [31:0] pich1;
87wire [31:0] picl1;
88wire pic2_scanin;
89wire pic2_scanout;
90wire [31:0] pich2;
91wire [31:0] picl2;
92wire pic3_scanin;
93wire pic3_scanout;
94wire [31:0] pich3;
95wire [31:0] picl3;
96wire pic4_scanin;
97wire pic4_scanout;
98wire [31:0] pich4;
99wire [31:0] picl4;
100wire pic5_scanin;
101wire pic5_scanout;
102wire [31:0] pich5;
103wire [31:0] picl5;
104wire pic6_scanin;
105wire pic6_scanout;
106wire [31:0] pich6;
107wire [31:0] picl6;
108wire pic7_scanin;
109wire pic7_scanout;
110wire [31:0] pich7;
111wire [31:0] picl7;
112wire [31:0] pich07_w1;
113wire [31:0] picl07_w1;
114wire pic07_w2_scanin;
115wire pic07_w2_scanout;
116wire [31:0] pich07_w2;
117wire [31:0] picl07_w2;
118wire [63:0] pdp_pic_data;
119wire [63:0] picpcr_data;
120wire asi_dout_scanin;
121wire asi_dout_scanout;
122wire [63:0] pmu_rngl_cdbus_nobuf;
123
124
125// *** globals ***
126input l2clk;
127input scan_in;
128input tcu_pce_ov; // scan signals
129input spc_aclk;
130input spc_bclk;
131input tcu_scan_en;
132output scan_out;
133
134// ASI write data bus
135input [63:0] in_rngl_cdbus; // ASI ring data input
136
137// ASI read controls
138input [7:0] pct_rd_pic; // ASI read of PIC (bit 7 == read PIC for tid 7)
139input pct_rd_a_pic; // ASI read of any PIC
140input pct_rd_pic_pcr; // ASI read of PIC or PCR (select PIC or PCR)
141input pct_bypass_asi; // Flow this node's ASI data to the output
142input [31:0] pct_pcr_data; // PCR data on ASI read
143input pct_exception; // If a privileged exception on an ASR read or write to PIC or PCR
144input [7:0] pct_pic_clken; // Clock enables for PIC
145input pct_pic07_w2_clken; // Clock enable for pic07_w2 flop
146// ASI write controls
147input [7:0] pct_wr_pic_w2; // Write corresponding PICH/L from ASI (bit 7 == write PIC7)
148input [6:0] pct_incr_pic_w1; // increment PIC (PICL is enabled for counting) W+1 cycle (mux prior to adding)
149input pct_incr_asi_w1; // Select new ASI value to increment to deal with simultaneous ASI write and increment
150
151// Event inputs
152input [3:0] pct_pich07_add_w2; // Add value for pich
153input [3:0] pct_picl07_add_w2; // Add value for picl
154
155// ASI pwr mgmt
156input pmu_asi_clken; // Gate ASI ring flops
157
158// ASI outputs
159output [63:0] pmu_rngl_cdbus; // ASI ring data out
160output [31:0] pdp_asi_din_to_pctl; // for PCR writes
161output [7:0] pdp_asi_ctlin_to_pctl_15_8; // Bits 63:56 of registered data from PDP (save 8 flop bits)
162output [4:0] pdp_asi_ctlin_to_pctl_4_0; // Bits 63:48 of registered data from PDP (save 5 flop bits)
163
164// Carry-out bits for PCR of each counter
165output pdp_pich_cout07; // carry-outs of incrementors, to set OV bits in PCR's
166output pdp_picl_cout07;
167
168// Wrap indicators for trap generation
169output [7:0] pdp_pich_wrap; // If counter within -16..-1
170output [7:0] pdp_picl_wrap; // If counter within -16..-1
171
172// scan renames
173//assign pce_ov = tcu_pce_ov;
174//assign stop = tcu_clk_stop;
175assign stop = 1'b0;
176//assign siclk = spc_aclk;
177//assign soclk = spc_bclk;
178//assign se = tcu_scan_en;
179// end scan
180
181pmu_pdp_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 (
182 .din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
183 .dout({se,pce_ov,siclk,soclk})
184);
185
186// First put in the ASI staging reg, bit 64 is flopped in ctl
187pmu_pdp_dp_msff_macro__stack_64c__width_64 asi_din (
188 .scan_in(asi_din_scanin),
189 .scan_out(asi_din_scanout),
190 .clk ( l2clk ),
191 .en ( pmu_asi_clken ), // powerdown pin
192 .din( in_rngl_cdbus[63:0]),
193 .dout( pdp_asi_din[63:0]),
194 .se(se),
195 .siclk(siclk),
196 .soclk(soclk),
197 .pce_ov(pce_ov),
198 .stop(stop));
199
200assign pdp_asi_din_to_pctl[31:0] = pdp_asi_din[31:0]; // bus to pctl for PCR writes
201assign pdp_asi_ctlin_to_pctl_15_8[7:0] = pdp_asi_din[63:56];// Bits 63:56 of registered data from PDP (save 8 flop bits)
202assign pdp_asi_ctlin_to_pctl_4_0[4:0] = pdp_asi_din[52:48];// Bits 52:48 of registered data from PDP (save 5 flop bits)
203
204// PICs
205// There are 8, 1 for each thread
206
207// split the 64 bit 3-input mux to two 32 bit ones
208// and use AND to zero out the counter values
209
210// PIC0
211
212pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic0 (
213 .scan_in(pic0_scanin),
214 .scan_out(pic0_scanout),
215 .clk ( l2clk ),
216 .en ( pct_pic_clken[0] ), // powerdown pin
217 .din0( pdp_asi_din[63:0] ),
218 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
219 .sel0( pct_wr_pic_w2[0] ),
220 .dout( {pich0[31:0],picl0[31:0]}),
221 .se(se),
222 .siclk(siclk),
223 .soclk(soclk),
224 .pce_ov(pce_ov),
225 .stop(stop) );
226
227pmu_pdp_dp_cmp_macro__width_16 pic0hca (
228 .din0(pich0[31:16]),
229 .din1(16'hffff),
230 .dout(pdp_pich_wrapa[0]));
231pmu_pdp_dp_cmp_macro__width_16 pic0lca (
232 .din0(picl0[31:16]),
233 .din1(16'hffff),
234 .dout(pdp_picl_wrapa[0]));
235
236pmu_pdp_dp_cmp_macro__width_12 pic0hcb (
237 .din0(pich0[15:4]),
238 .din1(12'hfff),
239 .dout(pdp_pich_wrapb[0]));
240pmu_pdp_dp_cmp_macro__width_12 pic0lcb (
241 .din0(picl0[15:4]),
242 .din1(12'hfff),
243 .dout(pdp_picl_wrapb[0]));
244
245// the ANDing is done for all 8 threads after PIC7
246//and_macro pich0wrap (width=2, ports=2) (
247// .din0 ({pdp_pich_wrapa[0],pdp_picl_wrapa[0]}),
248// .din1 ({pdp_pich_wrapb[0],pdp_picl_wrapb[0]}),
249// .dout ({pdp_pich_wrap[0], pdp_picl_wrap[0]});
250
251// PIC1
252pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic1 (
253 .scan_in(pic1_scanin),
254 .scan_out(pic1_scanout),
255 .clk ( l2clk ),
256 .en ( pct_pic_clken[1] ), // powerdown pin
257 .din0( pdp_asi_din[63:0] ),
258 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
259 .sel0( pct_wr_pic_w2[1] ),
260 .dout( {pich1[31:0],picl1[31:0]}),
261 .se(se),
262 .siclk(siclk),
263 .soclk(soclk),
264 .pce_ov(pce_ov),
265 .stop(stop) );
266
267pmu_pdp_dp_cmp_macro__width_16 pic1hca (
268 .din0(pich1[31:16]),
269 .din1(16'hffff),
270 .dout(pdp_pich_wrapa[1]));
271pmu_pdp_dp_cmp_macro__width_16 pic1lca (
272 .din0(picl1[31:16]),
273 .din1(16'hffff),
274 .dout(pdp_picl_wrapa[1]));
275
276pmu_pdp_dp_cmp_macro__width_12 pic1hcb (
277 .din0(pich1[15:4]),
278 .din1(12'hfff),
279 .dout(pdp_pich_wrapb[1]));
280pmu_pdp_dp_cmp_macro__width_12 pic1lcb (
281 .din0(picl1[15:4]),
282 .din1(12'hfff),
283 .dout(pdp_picl_wrapb[1]));
284
285// PIC2
286pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic2 (
287 .scan_in(pic2_scanin),
288 .scan_out(pic2_scanout),
289 .clk ( l2clk ),
290 .en ( pct_pic_clken[2] ), // powerdown pin
291 .din0( pdp_asi_din[63:0] ),
292 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
293 .sel0( pct_wr_pic_w2[2] ),
294 .dout( {pich2[31:0],picl2[31:0]}),
295 .se(se),
296 .siclk(siclk),
297 .soclk(soclk),
298 .pce_ov(pce_ov),
299 .stop(stop) );
300
301pmu_pdp_dp_cmp_macro__width_16 pic2hca (
302 .din0(pich2[31:16]),
303 .din1(16'hffff),
304 .dout(pdp_pich_wrapa[2]));
305pmu_pdp_dp_cmp_macro__width_16 pic2lca (
306 .din0(picl2[31:16]),
307 .din1(16'hffff),
308 .dout(pdp_picl_wrapa[2]));
309
310pmu_pdp_dp_cmp_macro__width_12 pic2hcb (
311 .din0(pich2[15:4]),
312 .din1(12'hfff),
313 .dout(pdp_pich_wrapb[2]));
314pmu_pdp_dp_cmp_macro__width_12 pic2lcb (
315 .din0(picl2[15:4]),
316 .din1(12'hfff),
317 .dout(pdp_picl_wrapb[2]));
318
319// PIC3
320pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic3 (
321 .scan_in(pic3_scanin),
322 .scan_out(pic3_scanout),
323 .clk ( l2clk ),
324 .en ( pct_pic_clken[3] ), // powerdown pin
325 .din0( pdp_asi_din[63:0] ),
326 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
327 .sel0( pct_wr_pic_w2[3] ),
328 .dout( {pich3[31:0],picl3[31:0]}),
329 .se(se),
330 .siclk(siclk),
331 .soclk(soclk),
332 .pce_ov(pce_ov),
333 .stop(stop) );
334
335pmu_pdp_dp_cmp_macro__width_16 pic3hca (
336 .din0(pich3[31:16]),
337 .din1(16'hffff),
338 .dout(pdp_pich_wrapa[3]));
339pmu_pdp_dp_cmp_macro__width_16 pic3lca (
340 .din0(picl3[31:16]),
341 .din1(16'hffff),
342 .dout(pdp_picl_wrapa[3]));
343
344pmu_pdp_dp_cmp_macro__width_12 pic3hcb (
345 .din0(pich3[15:4]),
346 .din1(12'hfff),
347 .dout(pdp_pich_wrapb[3]));
348pmu_pdp_dp_cmp_macro__width_12 pic3lcb (
349 .din0(picl3[15:4]),
350 .din1(12'hfff),
351 .dout(pdp_picl_wrapb[3]));
352
353// PIC4
354pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic4 (
355 .scan_in(pic4_scanin),
356 .scan_out(pic4_scanout),
357 .clk ( l2clk ),
358 .en ( pct_pic_clken[4] ), // powerdown pin
359 .din0( pdp_asi_din[63:0] ),
360 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
361 .sel0( pct_wr_pic_w2[4] ),
362 .dout( {pich4[31:0],picl4[31:0]}),
363 .se(se),
364 .siclk(siclk),
365 .soclk(soclk),
366 .pce_ov(pce_ov),
367 .stop(stop) );
368
369pmu_pdp_dp_cmp_macro__width_16 pic4hca (
370 .din0(pich4[31:16]),
371 .din1(16'hffff),
372 .dout(pdp_pich_wrapa[4]));
373pmu_pdp_dp_cmp_macro__width_16 pic4lca (
374 .din0(picl4[31:16]),
375 .din1(16'hffff),
376 .dout(pdp_picl_wrapa[4]));
377
378pmu_pdp_dp_cmp_macro__width_12 pic4hcb (
379 .din0(pich4[15:4]),
380 .din1(12'hfff),
381 .dout(pdp_pich_wrapb[4]));
382pmu_pdp_dp_cmp_macro__width_12 pic4lcb (
383 .din0(picl4[15:4]),
384 .din1(12'hfff),
385 .dout(pdp_picl_wrapb[4]));
386
387// PIC5
388pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic5 (
389 .scan_in(pic5_scanin),
390 .scan_out(pic5_scanout),
391 .clk ( l2clk ),
392 .en ( pct_pic_clken[5] ), // powerdown pin
393 .din0( pdp_asi_din[63:0] ),
394 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
395 .sel0( pct_wr_pic_w2[5] ),
396 .dout( {pich5[31:0],picl5[31:0]}),
397 .se(se),
398 .siclk(siclk),
399 .soclk(soclk),
400 .pce_ov(pce_ov),
401 .stop(stop) );
402
403pmu_pdp_dp_cmp_macro__width_16 pic5hca (
404 .din0(pich5[31:16]),
405 .din1(16'hffff),
406 .dout(pdp_pich_wrapa[5]));
407pmu_pdp_dp_cmp_macro__width_16 pic5lca (
408 .din0(picl5[31:16]),
409 .din1(16'hffff),
410 .dout(pdp_picl_wrapa[5]));
411
412pmu_pdp_dp_cmp_macro__width_12 pic5hcb (
413 .din0(pich5[15:4]),
414 .din1(12'hfff),
415 .dout(pdp_pich_wrapb[5]));
416pmu_pdp_dp_cmp_macro__width_12 pic5lcb (
417 .din0(picl5[15:4]),
418 .din1(12'hfff),
419 .dout(pdp_picl_wrapb[5]));
420
421// PIC6
422pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic6 (
423 .scan_in(pic6_scanin),
424 .scan_out(pic6_scanout),
425 .clk ( l2clk ),
426 .en ( pct_pic_clken[6] ), // powerdown pin
427 .din0( pdp_asi_din[63:0] ),
428 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
429 .sel0( pct_wr_pic_w2[6] ),
430 .dout( {pich6[31:0],picl6[31:0]}),
431 .se(se),
432 .siclk(siclk),
433 .soclk(soclk),
434 .pce_ov(pce_ov),
435 .stop(stop) );
436
437pmu_pdp_dp_cmp_macro__width_16 pic6hca (
438 .din0(pich6[31:16]),
439 .din1(16'hffff),
440 .dout(pdp_pich_wrapa[6]));
441pmu_pdp_dp_cmp_macro__width_16 pic6lca (
442 .din0(picl6[31:16]),
443 .din1(16'hffff),
444 .dout(pdp_picl_wrapa[6]));
445
446pmu_pdp_dp_cmp_macro__width_12 pic6hcb (
447 .din0(pich6[15:4]),
448 .din1(12'hfff),
449 .dout(pdp_pich_wrapb[6]));
450pmu_pdp_dp_cmp_macro__width_12 pic6lcb (
451 .din0(picl6[15:4]),
452 .din1(12'hfff),
453 .dout(pdp_picl_wrapb[6]));
454
455// PIC7
456pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic7 (
457 .scan_in(pic7_scanin),
458 .scan_out(pic7_scanout),
459 .clk ( l2clk ),
460 .en ( pct_pic_clken[7] ), // powerdown pin
461 .din0( pdp_asi_din[63:0] ),
462 .din1( {pich07_incr[31:0],picl07_incr[31:0]} ),
463 .sel0( pct_wr_pic_w2[7] ),
464 .dout( {pich7[31:0],picl7[31:0]}),
465 .se(se),
466 .siclk(siclk),
467 .soclk(soclk),
468 .pce_ov(pce_ov),
469 .stop(stop) );
470
471pmu_pdp_dp_cmp_macro__width_16 pic7hca (
472 .din0(pich7[31:16]),
473 .din1(16'hffff),
474 .dout(pdp_pich_wrapa[7]));
475pmu_pdp_dp_cmp_macro__width_16 pic7lca (
476 .din0(picl7[31:16]),
477 .din1(16'hffff),
478 .dout(pdp_picl_wrapa[7]));
479
480pmu_pdp_dp_cmp_macro__width_12 pic7hcb (
481 .din0(pich7[15:4]),
482 .din1(12'hfff),
483 .dout(pdp_pich_wrapb[7]));
484pmu_pdp_dp_cmp_macro__width_12 pic7lcb (
485 .din0(picl7[15:4]),
486 .din1(12'hfff),
487 .dout(pdp_picl_wrapb[7]));
488
489pmu_pdp_dp_and_macro__ports_2__width_16 pich0wrap (
490 .din0 ({pdp_pich_wrapa[7:0],pdp_picl_wrapa[7:0]}),
491 .din1 ({pdp_pich_wrapb[7:0],pdp_picl_wrapb[7:0]}),
492 .dout ({pdp_pich_wrap[7:0], pdp_picl_wrap[7:0]}));
493
494// Mux PIC's 0-7 together to share one incrementor & adder
495// Mux in W1 cycle, increment in W2
496pmu_pdp_dp_mux_macro__mux_aope__ports_8__width_64 pic07_mux (
497 .din0({pich0[31:0], picl0[31:0]}),
498 .din1({pich1[31:0], picl1[31:0]}),
499 .din2({pich2[31:0], picl2[31:0]}),
500 .din3({pich3[31:0], picl3[31:0]}),
501 .din4({pich4[31:0], picl4[31:0]}),
502 .din5({pich5[31:0], picl5[31:0]}),
503 .din6({pich6[31:0], picl6[31:0]}),
504 .din7({pich7[31:0], picl7[31:0]}),
505 .sel0(pct_incr_pic_w1[0]),
506 .sel1(pct_incr_pic_w1[1]),
507 .sel2(pct_incr_pic_w1[2]),
508 .sel3(pct_incr_pic_w1[3]),
509 .sel4(pct_incr_pic_w1[4]),
510 .sel5(pct_incr_pic_w1[5]),
511 .sel6(pct_incr_pic_w1[6]),
512// .sel7(pct_incr_pic_w1[7]), // pct_incr_pic_w1 is guaranteed to be one-hot
513 .dout({pich07_w1[31:0], picl07_w1[31:0]}));
514
515// all 8 threads sharing two comparators
516// not practical, as wrap must be matched with tid in the ctl logic
517//cmp_macro pic07hc (width=28) (
518// .din0(pich07_w1[31:4]),
519// .din1(28'hfffffff),
520// .dout(pdp_pich_wrap));
521
522//cmp_macro pic07lc (width=28) (
523// .din0(pich07_w1[31:4]),
524// .din1(28'hfffffff),
525// .dout(pdp_picl_wrap));
526
527// send these two wrap signals to the ctl logic and qualify with pct_incr_pic_w1
528
529pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 pic07_w2 (
530 .scan_in(pic07_w2_scanin),
531 .scan_out(pic07_w2_scanout),
532 .clk ( l2clk ),
533 .en ( pct_pic07_w2_clken ), // powerdown pin
534 .din0( pdp_asi_din[63:0]),
535 .din1( {pich07_w1[31:0], picl07_w1[31:0]} ),
536 .sel0( pct_incr_asi_w1 ),
537 .dout( {pich07_w2[31:0], picl07_w2[31:0]} ),
538 .se(se),
539 .siclk(siclk),
540 .soclk(soclk),
541 .pce_ov(pce_ov),
542 .stop(stop));
543
544// PICH incrementor for PIC's 0-7
545pmu_pdp_dp_cla_macro__width_32 pich07_cla (
546 .din0({28'b0, pct_pich07_add_w2[3:0]}),
547 .din1(pich07_w2[31:0]),
548 .cin(1'b0),
549 .dout(pich07_incr[31:0]),
550 .cout(pdp_pich_cout07)
551);
552
553pmu_pdp_dp_cla_macro__width_32 picl07_cla (
554 .din0({28'b0, pct_picl07_add_w2[3:0]}),
555 .din1(picl07_w2[31:0]),
556 .cin(1'b0),
557 .dout(picl07_incr[31:0]),
558 .cout(pdp_picl_cout07)
559);
560
561// 8:1 mux for ASR reads to mux between PICs
562
563pmu_pdp_dp_mux_macro__mux_aonpe__ports_8__width_64 pic_mux (
564 .din0({pich0[31:0],picl0[31:0]}),
565 .din1({pich1[31:0],picl1[31:0]}),
566 .din2({pich2[31:0],picl2[31:0]}),
567 .din3({pich3[31:0],picl3[31:0]}),
568 .din4({pich4[31:0],picl4[31:0]}),
569 .din5({pich5[31:0],picl5[31:0]}),
570 .din6({pich6[31:0],picl6[31:0]}),
571 .din7({pich7[31:0],picl7[31:0]}),
572 .sel0(pct_rd_pic[0]),
573 .sel1(pct_rd_pic[1]),
574 .sel2(pct_rd_pic[2]),
575 .sel3(pct_rd_pic[3]),
576 .sel4(pct_rd_pic[4]),
577 .sel5(pct_rd_pic[5]),
578 .sel6(pct_rd_pic[6]),
579 .sel7(pct_rd_pic[7]),
580 .dout(pdp_pic_data[63:0]));
581
582pmu_pdp_dp_mux_macro__mux_aope__ports_2__width_64 picpcr_mux (
583 .din0(pdp_pic_data[63:0]),
584 .din1({32'b0, pct_pcr_data[31:0]}),
585 .sel0(pct_rd_a_pic),
586 .dout(picpcr_data[63:0]));
587
588// ASI output registers
589pmu_pdp_dp_msff_macro__mux_aope__ports_3__stack_64c__width_64 asi_dout (
590 .scan_in(asi_dout_scanin),
591 .scan_out(asi_dout_scanout),
592 .clk ( l2clk),
593 .en ( pmu_asi_clken ), // powerdown pin
594 .din0( pdp_asi_din[63:0]),
595 .din1( picpcr_data[63:0]),
596 .din2({pdp_asi_din[63],1'b1,pdp_asi_din[61:56],6'b0,pct_exception,1'b0,pdp_asi_din[47:0]}),
597 .sel0( pct_bypass_asi),
598 .sel1( pct_rd_pic_pcr),
599 .dout( pmu_rngl_cdbus_nobuf[63:0]),
600 .se(se),
601 .siclk(siclk),
602 .soclk(soclk),
603 .pce_ov(pce_ov),
604 .stop(stop));
605
606// Add buffer to drive FGU since aope muxes can't drive big loads well...
607pmu_pdp_dp_buff_macro__dbuff_32x__rep_1__stack_64c__width_64 rngl_out_buf (
608 .din (pmu_rngl_cdbus_nobuf[63:0]),
609 .dout(pmu_rngl_cdbus[63:0]));
610
611
612// fixscan start:
613assign asi_din_scanin = scan_in ;
614assign pic0_scanin = asi_din_scanout ;
615assign pic1_scanin = pic0_scanout ;
616assign pic2_scanin = pic1_scanout ;
617assign pic3_scanin = pic2_scanout ;
618assign pic4_scanin = pic3_scanout ;
619assign pic5_scanin = pic4_scanout ;
620assign pic6_scanin = pic5_scanout ;
621assign pic7_scanin = pic6_scanout ;
622assign pic07_w2_scanin = pic7_scanout ;
623assign asi_dout_scanin = pic07_w2_scanout ;
624assign scan_out = asi_dout_scanout ;
625// fixscan end:
626endmodule
627
628
629//
630// buff macro
631//
632//
633
634
635
636
637
638module pmu_pdp_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 (
639 din,
640 dout);
641 input [3:0] din;
642 output [3:0] dout;
643
644
645
646
647
648
649buff #(4) d0_0 (
650.in(din[3:0]),
651.out(dout[3:0])
652);
653
654
655
656
657
658
659
660
661endmodule
662
663
664
665
666
667
668
669
670
671// any PARAMS parms go into naming of macro
672
673module pmu_pdp_dp_msff_macro__stack_64c__width_64 (
674 din,
675 clk,
676 en,
677 se,
678 scan_in,
679 siclk,
680 soclk,
681 pce_ov,
682 stop,
683 dout,
684 scan_out);
685wire l1clk;
686wire siclk_out;
687wire soclk_out;
688wire [62:0] so;
689
690 input [63:0] din;
691
692
693 input clk;
694 input en;
695 input se;
696 input scan_in;
697 input siclk;
698 input soclk;
699 input pce_ov;
700 input stop;
701
702
703
704 output [63:0] dout;
705
706
707 output scan_out;
708
709
710
711
712cl_dp1_l1hdr_8x c0_0 (
713.l2clk(clk),
714.pce(en),
715.aclk(siclk),
716.bclk(soclk),
717.l1clk(l1clk),
718 .se(se),
719 .pce_ov(pce_ov),
720 .stop(stop),
721 .siclk_out(siclk_out),
722 .soclk_out(soclk_out)
723);
724dff #(64) d0_0 (
725.l1clk(l1clk),
726.siclk(siclk_out),
727.soclk(soclk_out),
728.d(din[63:0]),
729.si({scan_in,so[62:0]}),
730.so({so[62:0],scan_out}),
731.q(dout[63:0])
732);
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753endmodule
754
755
756
757
758
759
760
761
762
763
764
765
766
767// any PARAMS parms go into naming of macro
768
769module pmu_pdp_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 (
770 din0,
771 din1,
772 sel0,
773 clk,
774 en,
775 se,
776 scan_in,
777 siclk,
778 soclk,
779 pce_ov,
780 stop,
781 dout,
782 scan_out);
783wire psel0;
784wire psel1;
785wire [63:0] muxout;
786wire l1clk;
787wire siclk_out;
788wire soclk_out;
789wire [62:0] so;
790
791 input [63:0] din0;
792 input [63:0] din1;
793 input sel0;
794
795
796 input clk;
797 input en;
798 input se;
799 input scan_in;
800 input siclk;
801 input soclk;
802 input pce_ov;
803 input stop;
804
805
806
807 output [63:0] dout;
808
809
810 output scan_out;
811
812
813
814
815cl_dp1_penc2_8x c1_0 (
816 .sel0(sel0),
817 .psel0(psel0),
818 .psel1(psel1)
819);
820
821mux2s #(64) d1_0 (
822 .sel0(psel0),
823 .sel1(psel1),
824 .in0(din0[63:0]),
825 .in1(din1[63:0]),
826.dout(muxout[63:0])
827);
828cl_dp1_l1hdr_8x c0_0 (
829.l2clk(clk),
830.pce(en),
831.aclk(siclk),
832.bclk(soclk),
833.l1clk(l1clk),
834 .se(se),
835 .pce_ov(pce_ov),
836 .stop(stop),
837 .siclk_out(siclk_out),
838 .soclk_out(soclk_out)
839);
840dff #(64) d0_0 (
841.l1clk(l1clk),
842.siclk(siclk_out),
843.soclk(soclk_out),
844.d(muxout[63:0]),
845.si({scan_in,so[62:0]}),
846.so({so[62:0],scan_out}),
847.q(dout[63:0])
848);
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869endmodule
870
871
872
873
874
875
876
877
878
879//
880// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
881//
882//
883
884
885
886
887
888module pmu_pdp_dp_cmp_macro__width_16 (
889 din0,
890 din1,
891 dout);
892 input [15:0] din0;
893 input [15:0] din1;
894 output dout;
895
896
897
898
899
900
901cmp #(16) m0_0 (
902.in0(din0[15:0]),
903.in1(din1[15:0]),
904.out(dout)
905);
906
907
908
909
910
911
912
913
914
915
916endmodule
917
918
919
920
921
922//
923// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
924//
925//
926
927
928
929
930
931module pmu_pdp_dp_cmp_macro__width_12 (
932 din0,
933 din1,
934 dout);
935 input [11:0] din0;
936 input [11:0] din1;
937 output dout;
938
939
940
941
942
943
944cmp #(12) m0_0 (
945.in0(din0[11:0]),
946.in1(din1[11:0]),
947.out(dout)
948);
949
950
951
952
953
954
955
956
957
958
959endmodule
960
961
962
963
964
965//
966// and macro for ports = 2,3,4
967//
968//
969
970
971
972
973
974module pmu_pdp_dp_and_macro__ports_2__width_16 (
975 din0,
976 din1,
977 dout);
978 input [15:0] din0;
979 input [15:0] din1;
980 output [15:0] dout;
981
982
983
984
985
986
987and2 #(16) d0_0 (
988.in0(din0[15:0]),
989.in1(din1[15:0]),
990.out(dout[15:0])
991);
992
993
994
995
996
997
998
999
1000
1001endmodule
1002
1003
1004
1005
1006
1007// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1008// also for pass-gate with decoder
1009
1010
1011
1012
1013
1014// any PARAMS parms go into naming of macro
1015
1016module pmu_pdp_dp_mux_macro__mux_aope__ports_8__width_64 (
1017 din0,
1018 din1,
1019 din2,
1020 din3,
1021 din4,
1022 din5,
1023 din6,
1024 din7,
1025 sel0,
1026 sel1,
1027 sel2,
1028 sel3,
1029 sel4,
1030 sel5,
1031 sel6,
1032 dout);
1033wire psel0;
1034wire psel1;
1035wire psel2;
1036wire psel3;
1037wire psel4;
1038wire psel5;
1039wire psel6;
1040wire psel7;
1041
1042 input [63:0] din0;
1043 input [63:0] din1;
1044 input [63:0] din2;
1045 input [63:0] din3;
1046 input [63:0] din4;
1047 input [63:0] din5;
1048 input [63:0] din6;
1049 input [63:0] din7;
1050 input sel0;
1051 input sel1;
1052 input sel2;
1053 input sel3;
1054 input sel4;
1055 input sel5;
1056 input sel6;
1057 output [63:0] dout;
1058
1059
1060
1061
1062
1063cl_dp1_penc8_8x c0_0 (
1064 .test(1'b1),
1065 .sel0(sel0),
1066 .sel1(sel1),
1067 .sel2(sel2),
1068 .sel3(sel3),
1069 .sel4(sel4),
1070 .sel5(sel5),
1071 .sel6(sel6),
1072 .psel0(psel0),
1073 .psel1(psel1),
1074 .psel2(psel2),
1075 .psel3(psel3),
1076 .psel4(psel4),
1077 .psel5(psel5),
1078 .psel6(psel6),
1079 .psel7(psel7)
1080);
1081
1082mux8s #(64) d0_0 (
1083 .sel0(psel0),
1084 .sel1(psel1),
1085 .sel2(psel2),
1086 .sel3(psel3),
1087 .sel4(psel4),
1088 .sel5(psel5),
1089 .sel6(psel6),
1090 .sel7(psel7),
1091 .in0(din0[63:0]),
1092 .in1(din1[63:0]),
1093 .in2(din2[63:0]),
1094 .in3(din3[63:0]),
1095 .in4(din4[63:0]),
1096 .in5(din5[63:0]),
1097 .in6(din6[63:0]),
1098 .in7(din7[63:0]),
1099.dout(dout[63:0])
1100);
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114endmodule
1115
1116
1117//
1118// cla macro
1119//
1120//
1121
1122
1123
1124
1125
1126module pmu_pdp_dp_cla_macro__width_32 (
1127 cin,
1128 din0,
1129 din1,
1130 dout,
1131 cout);
1132 input cin;
1133 input [31:0] din0;
1134 input [31:0] din1;
1135 output [31:0] dout;
1136 output cout;
1137
1138
1139
1140
1141
1142
1143
1144cla #(32) m0_0 (
1145.cin(cin),
1146.in0(din0[31:0]),
1147.in1(din1[31:0]),
1148.out(dout[31:0]),
1149.cout(cout)
1150);
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163endmodule
1164
1165
1166
1167
1168
1169// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1170// also for pass-gate with decoder
1171
1172
1173
1174
1175
1176// any PARAMS parms go into naming of macro
1177
1178module pmu_pdp_dp_mux_macro__mux_aonpe__ports_8__width_64 (
1179 din0,
1180 sel0,
1181 din1,
1182 sel1,
1183 din2,
1184 sel2,
1185 din3,
1186 sel3,
1187 din4,
1188 sel4,
1189 din5,
1190 sel5,
1191 din6,
1192 sel6,
1193 din7,
1194 sel7,
1195 dout);
1196wire buffout0;
1197wire buffout1;
1198wire buffout2;
1199wire buffout3;
1200wire buffout4;
1201wire buffout5;
1202wire buffout6;
1203wire buffout7;
1204
1205 input [63:0] din0;
1206 input sel0;
1207 input [63:0] din1;
1208 input sel1;
1209 input [63:0] din2;
1210 input sel2;
1211 input [63:0] din3;
1212 input sel3;
1213 input [63:0] din4;
1214 input sel4;
1215 input [63:0] din5;
1216 input sel5;
1217 input [63:0] din6;
1218 input sel6;
1219 input [63:0] din7;
1220 input sel7;
1221 output [63:0] dout;
1222
1223
1224
1225
1226
1227cl_dp1_muxbuff8_8x c0_0 (
1228 .in0(sel0),
1229 .in1(sel1),
1230 .in2(sel2),
1231 .in3(sel3),
1232 .in4(sel4),
1233 .in5(sel5),
1234 .in6(sel6),
1235 .in7(sel7),
1236 .out0(buffout0),
1237 .out1(buffout1),
1238 .out2(buffout2),
1239 .out3(buffout3),
1240 .out4(buffout4),
1241 .out5(buffout5),
1242 .out6(buffout6),
1243 .out7(buffout7)
1244);
1245mux8s #(64) d0_0 (
1246 .sel0(buffout0),
1247 .sel1(buffout1),
1248 .sel2(buffout2),
1249 .sel3(buffout3),
1250 .sel4(buffout4),
1251 .sel5(buffout5),
1252 .sel6(buffout6),
1253 .sel7(buffout7),
1254 .in0(din0[63:0]),
1255 .in1(din1[63:0]),
1256 .in2(din2[63:0]),
1257 .in3(din3[63:0]),
1258 .in4(din4[63:0]),
1259 .in5(din5[63:0]),
1260 .in6(din6[63:0]),
1261 .in7(din7[63:0]),
1262.dout(dout[63:0])
1263);
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277endmodule
1278
1279
1280// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1281// also for pass-gate with decoder
1282
1283
1284
1285
1286
1287// any PARAMS parms go into naming of macro
1288
1289module pmu_pdp_dp_mux_macro__mux_aope__ports_2__width_64 (
1290 din0,
1291 din1,
1292 sel0,
1293 dout);
1294wire psel0;
1295wire psel1;
1296
1297 input [63:0] din0;
1298 input [63:0] din1;
1299 input sel0;
1300 output [63:0] dout;
1301
1302
1303
1304
1305
1306cl_dp1_penc2_8x c0_0 (
1307 .sel0(sel0),
1308 .psel0(psel0),
1309 .psel1(psel1)
1310);
1311
1312mux2s #(64) d0_0 (
1313 .sel0(psel0),
1314 .sel1(psel1),
1315 .in0(din0[63:0]),
1316 .in1(din1[63:0]),
1317.dout(dout[63:0])
1318);
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332endmodule
1333
1334
1335
1336
1337
1338
1339// any PARAMS parms go into naming of macro
1340
1341module pmu_pdp_dp_msff_macro__mux_aope__ports_3__stack_64c__width_64 (
1342 din0,
1343 din1,
1344 din2,
1345 sel0,
1346 sel1,
1347 clk,
1348 en,
1349 se,
1350 scan_in,
1351 siclk,
1352 soclk,
1353 pce_ov,
1354 stop,
1355 dout,
1356 scan_out);
1357wire psel0;
1358wire psel1;
1359wire psel2;
1360wire [63:0] muxout;
1361wire l1clk;
1362wire siclk_out;
1363wire soclk_out;
1364wire [62:0] so;
1365
1366 input [63:0] din0;
1367 input [63:0] din1;
1368 input [63:0] din2;
1369 input sel0;
1370 input sel1;
1371
1372
1373 input clk;
1374 input en;
1375 input se;
1376 input scan_in;
1377 input siclk;
1378 input soclk;
1379 input pce_ov;
1380 input stop;
1381
1382
1383
1384 output [63:0] dout;
1385
1386
1387 output scan_out;
1388
1389
1390
1391
1392cl_dp1_penc3_8x c1_0 (
1393 .test(1'b1),
1394 .sel0(sel0),
1395 .sel1(sel1),
1396 .psel0(psel0),
1397 .psel1(psel1),
1398 .psel2(psel2)
1399);
1400
1401mux3s #(64) d1_0 (
1402 .sel0(psel0),
1403 .sel1(psel1),
1404 .sel2(psel2),
1405 .in0(din0[63:0]),
1406 .in1(din1[63:0]),
1407 .in2(din2[63:0]),
1408.dout(muxout[63:0])
1409);
1410cl_dp1_l1hdr_8x c0_0 (
1411.l2clk(clk),
1412.pce(en),
1413.aclk(siclk),
1414.bclk(soclk),
1415.l1clk(l1clk),
1416 .se(se),
1417 .pce_ov(pce_ov),
1418 .stop(stop),
1419 .siclk_out(siclk_out),
1420 .soclk_out(soclk_out)
1421);
1422dff #(64) d0_0 (
1423.l1clk(l1clk),
1424.siclk(siclk_out),
1425.soclk(soclk_out),
1426.d(muxout[63:0]),
1427.si({scan_in,so[62:0]}),
1428.so({so[62:0],scan_out}),
1429.q(dout[63:0])
1430);
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451endmodule
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461//
1462// buff macro
1463//
1464//
1465
1466
1467
1468
1469
1470module pmu_pdp_dp_buff_macro__dbuff_32x__rep_1__stack_64c__width_64 (
1471 din,
1472 dout);
1473 input [63:0] din;
1474 output [63:0] dout;
1475
1476
1477
1478
1479
1480
1481buff #(64) d0_0 (
1482.in(din[63:0]),
1483.out(dout[63:0])
1484);
1485
1486
1487
1488
1489
1490
1491
1492
1493endmodule
1494
1495
1496
1497