Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / exu / rtl / exu_mdp_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: exu_mdp_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 exu_mdp_dp (
36 tcu_dectest,
37 tcu_muxtest,
38 dec_fgu_sel_e,
39 dec_fgu_sel_m,
40 dec_lsu_sel0_e,
41 dec_lsu_sel1_e,
42 dec_rs1_addr0_e,
43 dec_rs1_addr1_e,
44 dec_lsu_sel0_lower_e,
45 dec_lsu_sel1_lower_e,
46 dec_lsu_sel0_upper_e,
47 dec_lsu_sel1_upper_e,
48 dec_rs1_addr0_upper_e,
49 dec_rs1_addr1_upper_e,
50 exu0_mdp_mux_sel_e,
51 exu1_mdp_mux_sel_e,
52 exu_ms_icc0_e,
53 exu_ms_icc1_e,
54 exu_rs1_data0_e,
55 exu_rs1_data1_e,
56 exu_rs2_data0_e,
57 exu_rs2_data1_e,
58 exu_y_data0_e,
59 exu_y_data1_e,
60 exu_address0_e,
61 exu_address1_e,
62 exu_store_data0_e,
63 exu_store_data1_e,
64 exu_ecc_winop_flush_m,
65 exu_gsr_data0_m,
66 exu_gsr_data1_m,
67 exu_gsr_vld0_m,
68 exu_gsr_vld1_m,
69 exu_cmov_true_m,
70 lsu_exu_address_e,
71 lsu_sel_lsu_addr_e,
72 exu_fgu_rs1_e,
73 exu_fgu_rs2_e,
74 exu_fgu_gsr_m,
75 exu_fgu_gsr_vld_m,
76 exu_fgu_flush_m,
77 exu_fgu_fmov_vld_m,
78 exu_lsu_address_e,
79 exu_lsu_store_data_e,
80 exu_lsu_rs2_e);
81wire test;
82wire exu_rs1_data0_b31;
83wire exu_rs2_data0_b31;
84wire exu_rs1_data1_b31;
85wire exu_rs2_data1_b31;
86wire [63:0] rs1_data0_early_mux;
87wire [63:0] rs1_data0_early;
88wire [63:0] rs1_data1_early;
89wire [63:32] rs2_data0_early_mux;
90wire [63:0] rs2_data0_early;
91wire [63:0] rs2_data1_early;
92wire [63:0] rs1_e;
93wire [63:0] rs2_e;
94wire fmov_vld_m;
95wire flush_m;
96wire [1:0] gsr_vld_m;
97wire [31:0] gsr_m;
98wire tcu_muxtest_rep0;
99wire [63:0] store_data_e;
100
101
102input tcu_dectest; // Passgate mux test control
103input tcu_muxtest; // Passgate mux test control
104
105input [1:0] dec_fgu_sel_e; // mux select between TG's for fgu ops
106input [1:0] dec_fgu_sel_m; // mux select between TG's for fgu ops
107
108input dec_lsu_sel0_e; // TG0 address -> address
109input dec_lsu_sel1_e; // TG1 address -> address
110
111input dec_rs1_addr0_e; // CASA only : TG0 RS1 -> address
112input dec_rs1_addr1_e; // CASA only : TG1 RS1 -> address
113
114input dec_lsu_sel0_lower_e; // TG0 address -> address
115input dec_lsu_sel1_lower_e; // TG1 address -> address
116
117input dec_lsu_sel0_upper_e; // TG0 address -> address (zero when pstate.am = 1, ie 32-bit addressing)
118input dec_lsu_sel1_upper_e; // TG1 address -> address (zero when pstate.am = 1, ie 32-bit addressing)
119
120input dec_rs1_addr0_upper_e; // CASA only : TG0 RS1 -> address (zero when pstate.am = 1, ie 32-bit addressing)
121input dec_rs1_addr1_upper_e; // CASA only : TG1 RS1 -> address (zero when pstate.am = 1, ie 32-bit addressing)
122
123input [5:0] exu0_mdp_mux_sel_e;
124input [5:0] exu1_mdp_mux_sel_e;
125
126input exu_ms_icc0_e;
127input exu_ms_icc1_e;
128
129input [63:0] exu_rs1_data0_e;
130input [63:0] exu_rs1_data1_e;
131input [63:0] exu_rs2_data0_e;
132input [63:0] exu_rs2_data1_e;
133
134input [31:0] exu_y_data0_e;
135input [31:0] exu_y_data1_e;
136
137input [47:0] exu_address0_e;
138input [47:0] exu_address1_e;
139
140input [63:0] exu_store_data0_e;
141input [63:0] exu_store_data1_e;
142
143input [1:0] exu_ecc_winop_flush_m;
144
145input [31:0] exu_gsr_data0_m;
146input [31:0] exu_gsr_data1_m;
147
148input [1:0] exu_gsr_vld0_m;
149input [1:0] exu_gsr_vld1_m;
150
151input [1:0] exu_cmov_true_m;
152
153input [47:13] lsu_exu_address_e;
154input lsu_sel_lsu_addr_e;
155
156
157output [63:0] exu_fgu_rs1_e;
158output [63:0] exu_fgu_rs2_e;
159output [31:0] exu_fgu_gsr_m;
160output [1:0] exu_fgu_gsr_vld_m;
161output exu_fgu_flush_m;
162output exu_fgu_fmov_vld_m;
163
164
165output [47:0] exu_lsu_address_e;
166output [63:0] exu_lsu_store_data_e;
167output [7:0] exu_lsu_rs2_e; // Partial stores
168
169
170// scan/test renames
171assign test = tcu_dectest;
172// end scan/test renames
173
174
175
176//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : FGU Muxing !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
177
178
179exu_mdp_dp_buff_macro__width_2 i_fp_buff0 (
180 .din ({exu_rs1_data0_e[31],exu_rs2_data0_e[31]}),
181 .dout ({exu_rs1_data0_b31 ,exu_rs2_data0_b31 }));
182
183exu_mdp_dp_buff_macro__width_2 i_fp_buff1 (
184 .din ({exu_rs1_data1_e[31],exu_rs2_data1_e[31]}),
185 .dout ({exu_rs1_data1_b31 ,exu_rs2_data1_b31} ));
186
187
188
189
190
191exu_mdp_dp_mux_macro__mux_aope__ports_5__stack_72c__width_64 i_fp_mux_rs1_early0 (
192 .din0 ({{32{exu_rs1_data0_b31}} ,exu_rs1_data0_e[31:0]} ), // pg. 197 SMUL(cc)
193 .din1 ({{32{1'b0 }} ,exu_rs1_data0_e[31:0]} ), // pg. 197 UMUL(cc)
194 .din2 ({exu_y_data0_e[31:0] ,exu_rs1_data0_e[31:0]} ), // pg. 152 SDIV(cc), UDIV(cc)
195 .din3 ({{30{1'b0}},exu_y_data0_e[0],1'b0 ,exu_ms_icc0_e,exu_rs1_data0_e[31:1]} ), // pg. 199 MULScc
196 .din4 ({exu_rs1_data0_e[63:32] ,exu_rs1_data0_e[31:0]} ),
197 .sel0 ( exu0_mdp_mux_sel_e[0] ),
198 .sel1 ( exu0_mdp_mux_sel_e[1] ),
199 .sel2 ( exu0_mdp_mux_sel_e[2] ),
200 .sel3 ( exu0_mdp_mux_sel_e[3] ),
201 .dout ( rs1_data0_early_mux[63:0] ));
202
203exu_mdp_dp_buff_macro__stack_72c__width_64 i_fp_buf_rs1_early0 (
204 .din ( rs1_data0_early_mux[63:0] ),
205 .dout ( rs1_data0_early[63:0] ));
206
207
208exu_mdp_dp_mux_macro__mux_aope__ports_5__stack_72c__width_64 i_fp_mux_rs1_early1 (
209 .din0 ({{32{exu_rs1_data1_b31}} ,exu_rs1_data1_e[31:0]} ), // pg. 197 SMUL(cc)
210 .din1 ({{32{1'b0 }} ,exu_rs1_data1_e[31:0]} ), // pg. 197 UMUL(cc)
211 .din2 ({exu_y_data1_e[31:0] ,exu_rs1_data1_e[31:0]} ), // pg. 152 SDIV(cc), UDIV(cc)
212 .din3 ({{30{1'b0}},exu_y_data1_e[0],1'b0 ,exu_ms_icc1_e,exu_rs1_data1_e[31:1]} ), // pg. 199 MULScc
213 .din4 ({exu_rs1_data1_e[63:32] ,exu_rs1_data1_e[31:0]} ),
214 .sel0 ( exu1_mdp_mux_sel_e[0] ),
215 .sel1 ( exu1_mdp_mux_sel_e[1] ),
216 .sel2 ( exu1_mdp_mux_sel_e[2] ),
217 .sel3 ( exu1_mdp_mux_sel_e[3] ),
218 .dout ( rs1_data1_early[63:0] ));
219
220
221exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_32 i_fp_mux_rs2_early0 (
222 .din0 ( {32{exu_rs2_data0_b31}} ), // pg. 197 SDIV(cc), SMUL(cc)
223//.din1 ( {32{1'b0 }} ), // pg. 197 UDIV(cc), UMUL(cc) pg. 199 MULScc
224 .din1 ( exu_rs2_data0_e[63:32] ),
225 .sel0 ( exu0_mdp_mux_sel_e[4] ),
226 .sel1 ( exu0_mdp_mux_sel_e[5] ),
227 .dout ( rs2_data0_early_mux[63:32] ));
228
229exu_mdp_dp_buff_macro__stack_72c__width_32 i_fp_buf_rs2_early0 (
230 .din ( rs2_data0_early_mux[63:32] ),
231 .dout ( rs2_data0_early[63:32] ));
232
233
234exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_32 i_fp_mux_rs2_early1 (
235 .din0 ( {32{exu_rs2_data1_b31}} ), // pg. 197 SDIV(cc), SMUL(cc)
236//.din1 ( {32{1'b0 }} ), // pg. 197 UDIV(cc), UMUL(cc) pg. 199 MULScc
237 .din1 ( exu_rs2_data1_e[63:32] ),
238 .sel0 ( exu1_mdp_mux_sel_e[4] ),
239 .sel1 ( exu1_mdp_mux_sel_e[5] ),
240 .dout ( rs2_data1_early[63:32] ));
241
242 assign rs2_data0_early[31:0] = exu_rs2_data0_e[31:0];
243 assign rs2_data1_early[31:0] = exu_rs2_data1_e[31:0];
244
245
246exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_64 i_fp_mux_rs1 (
247 .din0 ( rs1_data0_early[63:0] ),
248 .din1 ( rs1_data1_early[63:0] ),
249 .sel0 ( dec_fgu_sel_e[0] ),
250 .sel1 ( dec_fgu_sel_e[1] ),
251 .dout ( rs1_e[63:0] ));
252
253exu_mdp_dp_buff_macro__stack_72c__width_64 i_fp_buf_rs1 (
254 .din ( rs1_e[63:0] ),
255 .dout ( exu_fgu_rs1_e[63:0] ));
256
257
258exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_64 i_fp_mux_rs2 (
259 .din0 ( rs2_data0_early[63:0] ),
260 .din1 ( rs2_data1_early[63:0] ),
261 .sel0 ( dec_fgu_sel_e[0] ),
262 .sel1 ( dec_fgu_sel_e[1] ),
263 .dout ( rs2_e[63:0] ));
264
265exu_mdp_dp_buff_macro__stack_72c__width_64 i_fp_buf_rs2 (
266 .din ( rs2_e[63:0] ),
267 .dout ( exu_fgu_rs2_e[63:0] ));
268
269
270exu_mdp_dp_buff_macro__stack_72c__width_8 i_ls_buf_rs2 (
271 .din ( exu_fgu_rs2_e[7:0] ),
272 .dout ( exu_lsu_rs2_e[7:0] ));
273
274
275exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_36 i_fp_mux_gsr (
276 .din0 ({exu_cmov_true_m[0] , exu_ecc_winop_flush_m[0], exu_gsr_vld0_m[1:0] , exu_gsr_data0_m[31:0]} ),
277 .din1 ({exu_cmov_true_m[1] , exu_ecc_winop_flush_m[1], exu_gsr_vld1_m[1:0] , exu_gsr_data1_m[31:0]} ),
278 .sel0 ( dec_fgu_sel_m[0] ),
279 .sel1 ( dec_fgu_sel_m[1] ),
280 .dout ({ fmov_vld_m , flush_m , gsr_vld_m[1:0] , gsr_m[31:0]} ));
281
282exu_mdp_dp_buff_macro__stack_72c__width_36 i_fp_buf_gsr (
283 .din ({ fmov_vld_m , flush_m , gsr_vld_m[1:0] , gsr_m[31:0]} ),
284 .dout ({exu_fgu_fmov_vld_m , exu_fgu_flush_m , exu_fgu_gsr_vld_m[1:0] , exu_fgu_gsr_m[31:0]} ));
285
286
287
288
289//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : LSU Muxing !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
290
291exu_mdp_dp_buff_macro__dbuff_48x__width_1 tst_mux_rep0 (
292 .din ( tcu_muxtest ),
293 .dout( tcu_muxtest_rep0 ));
294
295exu_mdp_dp_mux_macro__dmux_32x__mux_pgpe__ports_6__stack_72c__width_32 i_ls_mux_addr_l (
296 .muxtst (tcu_muxtest_rep0 ),
297 .din0 ({lsu_exu_address_e[31:13],{13{1'b0}}} ),
298 .din1 ( exu_rs1_data0_e[31:0] ),
299 .din2 ( exu_rs1_data1_e[31:0] ),
300 .din3 ( exu_address0_e[31:0] ),
301 .din4 ( exu_address1_e[31:0] ),
302 .din5 ({32{1'b0}} ),
303 .sel0 ( lsu_sel_lsu_addr_e ),
304 .sel1 ( dec_rs1_addr0_e ),
305 .sel2 ( dec_rs1_addr1_e ),
306 .sel3 ( dec_lsu_sel0_lower_e ),
307 .sel4 ( dec_lsu_sel1_lower_e ),
308 .dout ( exu_lsu_address_e[31:0] ),
309 .test(test));
310
311exu_mdp_dp_mux_macro__dmux_32x__mux_pgpe__ports_6__stack_72c__width_16 i_ls_mux_addr_h (
312 .muxtst (tcu_muxtest_rep0 ),
313 .din0 ( lsu_exu_address_e[47:32] ),
314 .din1 ( exu_rs1_data0_e[47:32] ),
315 .din2 ( exu_rs1_data1_e[47:32] ),
316 .din3 ( exu_address0_e[47:32] ),
317 .din4 ( exu_address1_e[47:32] ),
318 .din5 ({16{1'b0}} ),
319 .sel0 ( lsu_sel_lsu_addr_e ),
320 .sel1 ( dec_rs1_addr0_upper_e ),
321 .sel2 ( dec_rs1_addr1_upper_e ),
322 .sel3 ( dec_lsu_sel0_upper_e ),
323 .sel4 ( dec_lsu_sel1_upper_e ),
324 .dout ( exu_lsu_address_e[47:32] ),
325 .test(test)); // Zero 47:32 when pstate.am = 1
326
327
328exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_64 i_ls_mux_store (
329 .din0 ( exu_store_data0_e[63:0] ),
330 .din1 ( exu_store_data1_e[63:0] ),
331 .sel0 ( dec_lsu_sel0_e ),
332 .sel1 ( dec_lsu_sel1_e ),
333 .dout ( store_data_e[63:0] ));
334
335exu_mdp_dp_buff_macro__stack_72c__width_64 i_ls_buf_store (
336 .din ( store_data_e[63:0] ),
337 .dout ( exu_lsu_store_data_e[63:0] ));
338
339
340endmodule
341
342
343//
344// buff macro
345//
346//
347
348
349
350
351
352module exu_mdp_dp_buff_macro__width_2 (
353 din,
354 dout);
355 input [1:0] din;
356 output [1:0] dout;
357
358
359
360
361
362
363buff #(2) d0_0 (
364.in(din[1:0]),
365.out(dout[1:0])
366);
367
368
369
370
371
372
373
374
375endmodule
376
377
378
379
380
381// general mux macro for pass-gate and and-or muxes with/wout priority encoders
382// also for pass-gate with decoder
383
384
385
386
387
388// any PARAMS parms go into naming of macro
389
390module exu_mdp_dp_mux_macro__mux_aope__ports_5__stack_72c__width_64 (
391 din0,
392 din1,
393 din2,
394 din3,
395 din4,
396 sel0,
397 sel1,
398 sel2,
399 sel3,
400 dout);
401wire psel0;
402wire psel1;
403wire psel2;
404wire psel3;
405wire psel4;
406
407 input [63:0] din0;
408 input [63:0] din1;
409 input [63:0] din2;
410 input [63:0] din3;
411 input [63:0] din4;
412 input sel0;
413 input sel1;
414 input sel2;
415 input sel3;
416 output [63:0] dout;
417
418
419
420
421
422cl_dp1_penc5_8x c0_0 (
423 .test(1'b1),
424 .sel0(sel0),
425 .sel1(sel1),
426 .sel2(sel2),
427 .sel3(sel3),
428 .psel0(psel0),
429 .psel1(psel1),
430 .psel2(psel2),
431 .psel3(psel3),
432 .psel4(psel4)
433);
434
435mux5s #(64) d0_0 (
436 .sel0(psel0),
437 .sel1(psel1),
438 .sel2(psel2),
439 .sel3(psel3),
440 .sel4(psel4),
441 .in0(din0[63:0]),
442 .in1(din1[63:0]),
443 .in2(din2[63:0]),
444 .in3(din3[63:0]),
445 .in4(din4[63:0]),
446.dout(dout[63:0])
447);
448
449
450
451
452
453
454
455
456
457
458
459
460
461endmodule
462
463
464//
465// buff macro
466//
467//
468
469
470
471
472
473module exu_mdp_dp_buff_macro__stack_72c__width_64 (
474 din,
475 dout);
476 input [63:0] din;
477 output [63:0] dout;
478
479
480
481
482
483
484buff #(64) d0_0 (
485.in(din[63:0]),
486.out(dout[63:0])
487);
488
489
490
491
492
493
494
495
496endmodule
497
498
499
500
501
502// general mux macro for pass-gate and and-or muxes with/wout priority encoders
503// also for pass-gate with decoder
504
505
506
507
508
509// any PARAMS parms go into naming of macro
510
511module exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_32 (
512 din0,
513 sel0,
514 din1,
515 sel1,
516 dout);
517wire buffout0;
518wire buffout1;
519
520 input [31:0] din0;
521 input sel0;
522 input [31:0] din1;
523 input sel1;
524 output [31:0] dout;
525
526
527
528
529
530cl_dp1_muxbuff2_8x c0_0 (
531 .in0(sel0),
532 .in1(sel1),
533 .out0(buffout0),
534 .out1(buffout1)
535);
536mux2s #(32) d0_0 (
537 .sel0(buffout0),
538 .sel1(buffout1),
539 .in0(din0[31:0]),
540 .in1(din1[31:0]),
541.dout(dout[31:0])
542);
543
544
545
546
547
548
549
550
551
552
553
554
555
556endmodule
557
558
559//
560// buff macro
561//
562//
563
564
565
566
567
568module exu_mdp_dp_buff_macro__stack_72c__width_32 (
569 din,
570 dout);
571 input [31:0] din;
572 output [31:0] dout;
573
574
575
576
577
578
579buff #(32) d0_0 (
580.in(din[31:0]),
581.out(dout[31:0])
582);
583
584
585
586
587
588
589
590
591endmodule
592
593
594
595
596
597// general mux macro for pass-gate and and-or muxes with/wout priority encoders
598// also for pass-gate with decoder
599
600
601
602
603
604// any PARAMS parms go into naming of macro
605
606module exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_64 (
607 din0,
608 sel0,
609 din1,
610 sel1,
611 dout);
612wire buffout0;
613wire buffout1;
614
615 input [63:0] din0;
616 input sel0;
617 input [63:0] din1;
618 input sel1;
619 output [63:0] dout;
620
621
622
623
624
625cl_dp1_muxbuff2_8x c0_0 (
626 .in0(sel0),
627 .in1(sel1),
628 .out0(buffout0),
629 .out1(buffout1)
630);
631mux2s #(64) d0_0 (
632 .sel0(buffout0),
633 .sel1(buffout1),
634 .in0(din0[63:0]),
635 .in1(din1[63:0]),
636.dout(dout[63:0])
637);
638
639
640
641
642
643
644
645
646
647
648
649
650
651endmodule
652
653
654//
655// buff macro
656//
657//
658
659
660
661
662
663module exu_mdp_dp_buff_macro__stack_72c__width_8 (
664 din,
665 dout);
666 input [7:0] din;
667 output [7:0] dout;
668
669
670
671
672
673
674buff #(8) d0_0 (
675.in(din[7:0]),
676.out(dout[7:0])
677);
678
679
680
681
682
683
684
685
686endmodule
687
688
689
690
691
692// general mux macro for pass-gate and and-or muxes with/wout priority encoders
693// also for pass-gate with decoder
694
695
696
697
698
699// any PARAMS parms go into naming of macro
700
701module exu_mdp_dp_mux_macro__mux_aonpe__ports_2__stack_72c__width_36 (
702 din0,
703 sel0,
704 din1,
705 sel1,
706 dout);
707wire buffout0;
708wire buffout1;
709
710 input [35:0] din0;
711 input sel0;
712 input [35:0] din1;
713 input sel1;
714 output [35:0] dout;
715
716
717
718
719
720cl_dp1_muxbuff2_8x c0_0 (
721 .in0(sel0),
722 .in1(sel1),
723 .out0(buffout0),
724 .out1(buffout1)
725);
726mux2s #(36) d0_0 (
727 .sel0(buffout0),
728 .sel1(buffout1),
729 .in0(din0[35:0]),
730 .in1(din1[35:0]),
731.dout(dout[35:0])
732);
733
734
735
736
737
738
739
740
741
742
743
744
745
746endmodule
747
748
749//
750// buff macro
751//
752//
753
754
755
756
757
758module exu_mdp_dp_buff_macro__stack_72c__width_36 (
759 din,
760 dout);
761 input [35:0] din;
762 output [35:0] dout;
763
764
765
766
767
768
769buff #(36) d0_0 (
770.in(din[35:0]),
771.out(dout[35:0])
772);
773
774
775
776
777
778
779
780
781endmodule
782
783
784
785
786
787//
788// buff macro
789//
790//
791
792
793
794
795
796module exu_mdp_dp_buff_macro__dbuff_48x__width_1 (
797 din,
798 dout);
799 input [0:0] din;
800 output [0:0] dout;
801
802
803
804
805
806
807buff #(1) d0_0 (
808.in(din[0:0]),
809.out(dout[0:0])
810);
811
812
813
814
815
816
817
818
819endmodule
820
821
822
823
824
825// general mux macro for pass-gate and and-or muxes with/wout priority encoders
826// also for pass-gate with decoder
827
828
829
830
831
832// any PARAMS parms go into naming of macro
833
834module exu_mdp_dp_mux_macro__dmux_32x__mux_pgpe__ports_6__stack_72c__width_32 (
835 din0,
836 din1,
837 din2,
838 din3,
839 din4,
840 din5,
841 sel0,
842 sel1,
843 sel2,
844 sel3,
845 sel4,
846 muxtst,
847 test,
848 dout);
849wire psel0;
850wire psel1;
851wire psel2;
852wire psel3;
853wire psel4;
854wire psel5;
855
856 input [31:0] din0;
857 input [31:0] din1;
858 input [31:0] din2;
859 input [31:0] din3;
860 input [31:0] din4;
861 input [31:0] din5;
862 input sel0;
863 input sel1;
864 input sel2;
865 input sel3;
866 input sel4;
867 input muxtst;
868 input test;
869 output [31:0] dout;
870
871
872
873
874
875cl_dp1_penc6_8x c0_0 (
876 .sel0(sel0),
877 .sel1(sel1),
878 .sel2(sel2),
879 .sel3(sel3),
880 .sel4(sel4),
881 .psel0(psel0),
882 .psel1(psel1),
883 .psel2(psel2),
884 .psel3(psel3),
885 .psel4(psel4),
886 .psel5(psel5),
887 .test(test)
888);
889
890mux6 #(32) d0_0 (
891 .sel0(psel0),
892 .sel1(psel1),
893 .sel2(psel2),
894 .sel3(psel3),
895 .sel4(psel4),
896 .sel5(psel5),
897 .in0(din0[31:0]),
898 .in1(din1[31:0]),
899 .in2(din2[31:0]),
900 .in3(din3[31:0]),
901 .in4(din4[31:0]),
902 .in5(din5[31:0]),
903.dout(dout[31:0]),
904 .muxtst(muxtst)
905);
906
907
908
909
910
911
912
913
914
915
916
917
918
919endmodule
920
921
922// general mux macro for pass-gate and and-or muxes with/wout priority encoders
923// also for pass-gate with decoder
924
925
926
927
928
929// any PARAMS parms go into naming of macro
930
931module exu_mdp_dp_mux_macro__dmux_32x__mux_pgpe__ports_6__stack_72c__width_16 (
932 din0,
933 din1,
934 din2,
935 din3,
936 din4,
937 din5,
938 sel0,
939 sel1,
940 sel2,
941 sel3,
942 sel4,
943 muxtst,
944 test,
945 dout);
946wire psel0;
947wire psel1;
948wire psel2;
949wire psel3;
950wire psel4;
951wire psel5;
952
953 input [15:0] din0;
954 input [15:0] din1;
955 input [15:0] din2;
956 input [15:0] din3;
957 input [15:0] din4;
958 input [15:0] din5;
959 input sel0;
960 input sel1;
961 input sel2;
962 input sel3;
963 input sel4;
964 input muxtst;
965 input test;
966 output [15:0] dout;
967
968
969
970
971
972cl_dp1_penc6_8x c0_0 (
973 .sel0(sel0),
974 .sel1(sel1),
975 .sel2(sel2),
976 .sel3(sel3),
977 .sel4(sel4),
978 .psel0(psel0),
979 .psel1(psel1),
980 .psel2(psel2),
981 .psel3(psel3),
982 .psel4(psel4),
983 .psel5(psel5),
984 .test(test)
985);
986
987mux6 #(16) d0_0 (
988 .sel0(psel0),
989 .sel1(psel1),
990 .sel2(psel2),
991 .sel3(psel3),
992 .sel4(psel4),
993 .sel5(psel5),
994 .in0(din0[15:0]),
995 .in1(din1[15:0]),
996 .in2(din2[15:0]),
997 .in3(din3[15:0]),
998 .in4(din4[15:0]),
999 .in5(din5[15:0]),
1000.dout(dout[15:0]),
1001 .muxtst(muxtst)
1002);
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016endmodule
1017