Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / sio / rtl / sio_opdc_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: sio_opdc_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 sio_opdc_dp (
36 l2clk,
37 old0_opd_data,
38 old1_opd_data,
39 old2_opd_data,
40 old3_opd_data,
41 old4_opd_data,
42 old5_opd_data,
43 old6_opd_data,
44 old7_opd_data,
45 opcc_opdc_gnt0_opc0,
46 opcc_opdc_gnt2_opc0,
47 opcc_opdc_gnt4_opc0,
48 opcc_opdc_gnt6_opc0,
49 opcc_opdc_gnt01_opc1,
50 opcc_opdc_gnt45_opc1,
51 opcc_opdc_gnt0123_opc1,
52 olddq0_dout,
53 olddq1_dout,
54 olddq2_dout,
55 olddq3_dout,
56 olddq4_dout,
57 olddq5_dout,
58 olddq6_dout,
59 olddq7_dout,
60 sio_mb0_sel_l1,
61 sio_mb0_sel_l2,
62 opdc_bank_data_opc1,
63 read_data_top,
64 read_data_bot,
65 sio_mb1_run,
66 sio_mb1_wdata,
67 opdc_mb1bank_data_opc1,
68 opdc_mb1bank_parity_opc1,
69 sio_mb1_addr,
70 opcc_opddq00_wr_en,
71 opcc_opddq01_wr_en,
72 opcc_opddq10_wr_en,
73 opcc_opddq11_wr_en,
74 opcc_opdhq0_wr_en,
75 opcc_opdhq1_wr_en,
76 sio_mb1_opddq00_wr_en,
77 sio_mb1_opddq01_wr_en,
78 sio_mb1_opdhq0_wr_en,
79 sio_mb1_opddq10_wr_en,
80 sio_mb1_opddq11_wr_en,
81 sio_mb1_opdhq1_wr_en,
82 opdc_opddq00_wr_en,
83 opdc_opddq01_wr_en,
84 opdc_opdhq0_wr_en,
85 opdc_opddq10_wr_en,
86 opdc_opddq11_wr_en,
87 opdc_opdhq1_wr_en,
88 opcc_opddq00_wr_addr,
89 opcc_opddq01_wr_addr,
90 opcc_opdhq0_wr_addr,
91 opcc_opddq10_wr_addr,
92 opcc_opddq11_wr_addr,
93 opcc_opdhq1_wr_addr,
94 opdc_opddq00_wr_addr,
95 opdc_opddq01_wr_addr,
96 opdc_opdhq0_wr_addr,
97 opdc_opddq10_wr_addr,
98 opdc_opddq11_wr_addr,
99 opdc_opdhq1_wr_addr,
100 tcu_muxtest,
101 tcu_dectest,
102 tcu_scan_en,
103 scan_in,
104 tcu_aclk,
105 tcu_bclk,
106 tcu_pce_ov,
107 tcu_clk_stop,
108 scan_out);
109wire muxtst;
110wire test;
111wire se;
112wire siclk;
113wire soclk;
114wire pce_ov;
115wire stop;
116wire [63:0] bank_data_opc1;
117wire [65:0] bank01_data_opc0;
118wire [65:0] bank23_data_opc0;
119wire [65:0] bank67_data_opc0;
120wire [67:0] mb0_read_data_01;
121wire [67:0] mb0_read_data_23;
122wire [67:0] mb0_read_data_45;
123wire [67:0] mb0_read_data_67;
124wire [67:0] mb0_read_data_0145;
125wire dff_mbist0145_data_h_scanin;
126wire dff_mbist0145_data_h_scanout;
127wire dff_mbist0145_data_l_scanin;
128wire dff_mbist0145_data_l_scanout;
129wire [67:0] mb0_read_data_2367;
130wire dff_mbist2367_data_h_scanin;
131wire dff_mbist2367_data_h_scanout;
132wire dff_mbist2367_data_l_scanin;
133wire dff_mbist2367_data_l_scanout;
134wire dff_bank01_data_opc1_h_scanin;
135wire dff_bank01_data_opc1_h_scanout;
136wire [65:0] bank01_data_opc1;
137wire dff_bank01_data_opc1_l_scanin;
138wire dff_bank01_data_opc1_l_scanout;
139wire dff_bank23_data_opc1_h_scanin;
140wire dff_bank23_data_opc1_h_scanout;
141wire [65:0] bank23_data_opc1;
142wire dff_bank23_data_opc1_l_scanin;
143wire dff_bank23_data_opc1_l_scanout;
144wire dff_bank45_data_opc1_h_scanin;
145wire dff_bank45_data_opc1_h_scanout;
146wire [65:0] bank45_data_opc1;
147wire dff_bank45_data_opc1_l_scanin;
148wire dff_bank45_data_opc1_l_scanout;
149wire dff_bank67_data_opc1_h_scanin;
150wire dff_bank67_data_opc1_h_scanout;
151wire [65:0] bank67_data_opc1;
152wire dff_bank67_data_opc1_l_scanin;
153wire dff_bank67_data_opc1_l_scanout;
154wire [63:0] bank01_data_opc1_rw;
155wire [63:0] bank23_data_opc1_rw;
156wire [63:0] bank45_data_opc1_rw;
157wire [63:0] bank67_data_opc1_rw;
158wire [3:0] bank01_parity_opc1_pre;
159wire [3:0] bank23_parity_opc1_pre;
160wire [3:0] bank45_parity_opc1_pre;
161wire [3:0] bank67_parity_opc1_pre;
162wire [3:0] bank01_parity_opc1;
163wire [3:0] bank23_parity_opc1;
164wire [3:0] bank45_parity_opc1;
165wire [3:0] bank67_parity_opc1;
166wire [7:0] bank_parity_opc1;
167wire [63:0] bankleft_data_opc1;
168wire [63:0] bankright_data_opc1;
169wire [3:0] sel_bank_parity;
170wire not_opcc_opdc_gnt01_opc1;
171wire not_opcc_opdc_gnt45_opc1;
172wire not_opcc_opdc_gnt0123_opc1;
173
174
175 input l2clk;
176 input [64:0] old0_opd_data; //[66] [64] = ue , [63:0] = data
177 input [64:0] old1_opd_data;
178 input [64:0] old2_opd_data;
179 input [64:0] old3_opd_data;
180 input [64:0] old4_opd_data;
181 input [64:0] old5_opd_data;
182 input [64:0] old6_opd_data;
183 input [64:0] old7_opd_data;
184 input opcc_opdc_gnt0_opc0;
185 input opcc_opdc_gnt2_opc0;
186 input opcc_opdc_gnt4_opc0;
187 input opcc_opdc_gnt6_opc0;
188 input opcc_opdc_gnt01_opc1;
189 input opcc_opdc_gnt45_opc1;
190 input opcc_opdc_gnt0123_opc1;
191
192 input [67:0] olddq0_dout;
193 input [67:0] olddq1_dout;
194 input [67:0] olddq2_dout;
195 input [67:0] olddq3_dout;
196 input [67:0] olddq4_dout;
197 input [67:0] olddq5_dout;
198 input [67:0] olddq6_dout;
199 input [67:0] olddq7_dout;
200 input sio_mb0_sel_l1;
201 input sio_mb0_sel_l2;
202
203 output [63:0] opdc_bank_data_opc1;
204 output [67:0] read_data_top;
205 output [67:0] read_data_bot;
206// output [7:0] opdc_bank_parity_opc1;
207
208
209 // for mb1
210 // 2:1 mux between {opdc_bank_data_opc1[63:0], opdc_bank_parity_opc1[7:0]} and {9{sio_mb1_wdata[7:0]}}
211 input sio_mb1_run;
212 input [7:0] sio_mb1_wdata;
213
214 output [63:0] opdc_mb1bank_data_opc1;
215 output [7:0] opdc_mb1bank_parity_opc1;
216
217 // for mb1 - mux between the wr_en, wr_addr
218 input [5:0] sio_mb1_addr;
219 input opcc_opddq00_wr_en;
220 input opcc_opddq01_wr_en;
221 input opcc_opddq10_wr_en;
222 input opcc_opddq11_wr_en;
223 input opcc_opdhq0_wr_en;
224 input opcc_opdhq1_wr_en;
225 input sio_mb1_opddq00_wr_en;
226 input sio_mb1_opddq01_wr_en;
227 input sio_mb1_opdhq0_wr_en;
228 input sio_mb1_opddq10_wr_en;
229 input sio_mb1_opddq11_wr_en;
230 input sio_mb1_opdhq1_wr_en;
231 output opdc_opddq00_wr_en;
232 output opdc_opddq01_wr_en;
233 output opdc_opdhq0_wr_en;
234 output opdc_opddq10_wr_en;
235 output opdc_opddq11_wr_en;
236 output opdc_opdhq1_wr_en;
237
238 input [5:0] opcc_opddq00_wr_addr;
239 input [5:0] opcc_opddq01_wr_addr;
240 input [3:0] opcc_opdhq0_wr_addr;
241 input [5:0] opcc_opddq10_wr_addr;
242 input [5:0] opcc_opddq11_wr_addr;
243 input [3:0] opcc_opdhq1_wr_addr;
244
245 output [5:0] opdc_opddq00_wr_addr;
246 output [5:0] opdc_opddq01_wr_addr;
247 output [3:0] opdc_opdhq0_wr_addr;
248 output [5:0] opdc_opddq10_wr_addr;
249 output [5:0] opdc_opddq11_wr_addr;
250 output [3:0] opdc_opdhq1_wr_addr;
251
252
253 input tcu_muxtest;
254 input tcu_dectest;
255 input tcu_scan_en;
256
257 input scan_in;
258 input tcu_aclk;
259 input tcu_bclk;
260 input tcu_pce_ov;
261 input tcu_clk_stop;
262 output scan_out;
263
264 ///////////////////////////////////////
265 // Scan chain connections
266 ///////////////////////////////////////
267 // scan renames
268 assign muxtst = tcu_muxtest;
269 assign test = tcu_dectest;
270 assign se = tcu_scan_en;
271
272assign siclk = tcu_aclk;
273assign soclk = tcu_bclk;
274assign pce_ov = tcu_pce_ov;
275assign stop = tcu_clk_stop;
276 // end scan
277
278
279 assign opdc_bank_data_opc1[63:0] = bank_data_opc1[63:0];
280// assign opdc_bank_parity_opc1[7:0] = bank_parity_opc1[7:0];
281
282
283 wire [10:0] bank01_data_opc0_buf;
284 wire [65:0] bank01_data_opc0_pre;
285 wire bank01_unused;
286 wire bank45_unused;
287 wire [65:0] bank45_data_opc0_pre;
288 wire [65:0] bank45_data_opc0;
289 wire [16:0] bank45_data_opc0_buf;
290 wire [17:0] bank67_data_opc0_buf;
291
292
293 // level 1 -- opc0 stage
294
295 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_66c__width_66 mx21_bank01_data (
296 .dout (bank01_data_opc0_pre[65:0]),
297 .din0 ({1'b0, old0_opd_data[64:0]}),
298 .din1 ({1'b0, old1_opd_data[64:0]}),
299 .sel0 (opcc_opdc_gnt0_opc0)
300 );
301
302 sio_opdc_dp_buff_macro__minbuff_1__stack_2l__width_2 buf_mx21_bank01_data (
303 .din ({bank01_data_opc0_pre[50], bank01_data_opc0_pre[48]}),
304 .dout ({bank01_data_opc0_buf[1:0]})
305 );
306
307 assign bank01_data_opc0 = {bank01_data_opc0_pre[65:51],bank01_data_opc0_buf[1],bank01_data_opc0_pre[49],bank01_data_opc0_buf[0],bank01_data_opc0_pre[47:0]};
308
309 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_66c__width_66 mx21_bank23_data (
310 .dout (bank23_data_opc0[65:0]),
311 .din0 ({1'b0, old2_opd_data[64:0]}),
312 .din1 ({1'b0, old3_opd_data[64:0]}),
313 .sel0 (opcc_opdc_gnt2_opc0)
314 );
315
316 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_66c__width_66 mx21_bank45_data (
317 .dout (bank45_data_opc0_pre[65:0]),
318 .din0 ({1'b0, old4_opd_data[64:0]}),
319 .din1 ({1'b0, old5_opd_data[64:0]}),
320 .sel0 (opcc_opdc_gnt4_opc0)
321 );
322
323 sio_opdc_dp_buff_macro__minbuff_1__stack_12l__width_12 buf_mx21_bank45_data (
324 .din ({1'b0,bank45_data_opc0_pre[52],bank45_data_opc0_pre[48:46],bank45_data_opc0_pre[44:42],bank45_data_opc0_pre[39],bank45_data_opc0_pre[36],bank45_data_opc0_pre[33:32]}),
325 .dout ({bank45_unused,bank45_data_opc0_buf[10:0]})
326 );
327
328 assign bank45_data_opc0 = {bank45_data_opc0_pre[65:53],bank45_data_opc0_buf[10],bank45_data_opc0_pre[51:49],bank45_data_opc0_buf[9:7],bank45_data_opc0_pre[45],bank45_data_opc0_buf[6:4],bank45_data_opc0_pre[41:40],bank45_data_opc0_buf[3],bank45_data_opc0_pre[38:37],bank45_data_opc0_buf[2],bank45_data_opc0_pre[35:34],bank45_data_opc0_buf[1:0],bank45_data_opc0_pre[31:0]};
329
330 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_66c__width_66 mx21_bank67_data (
331 .dout (bank67_data_opc0[65:0]),
332 .din0 ({1'b0, old6_opd_data[64:0]}),
333 .din1 ({1'b0, old7_opd_data[64:0]}),
334 .sel0 (opcc_opdc_gnt6_opc0)
335 );
336
337 //-------------------------------
338 // mbist muxes
339 //-------------------------------
340// Level one muxes
341 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist01_data (
342 .dout (mb0_read_data_01[67:0]),
343 .din0 (olddq0_dout[67:0]),
344 .din1 (olddq1_dout[67:0]),
345 .sel0 (sio_mb0_sel_l1)
346 );
347
348 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist23_data (
349 .dout (mb0_read_data_23[67:0]),
350 .din0 (olddq2_dout[67:0]),
351 .din1 (olddq3_dout[67:0]),
352 .sel0 (sio_mb0_sel_l1)
353 );
354
355 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist45_data (
356 .dout (mb0_read_data_45[67:0]),
357 .din0 (olddq4_dout[67:0]),
358 .din1 (olddq5_dout[67:0]),
359 .sel0 (sio_mb0_sel_l1)
360 );
361
362 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist67_data (
363 .dout (mb0_read_data_67[67:0]),
364 .din0 (olddq6_dout[67:0]),
365 .din1 (olddq7_dout[67:0]),
366 .sel0 (sio_mb0_sel_l1)
367 );
368
369// Level 2
370 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist0145_data (
371 .dout (mb0_read_data_0145[67:0]),
372 .din0 (mb0_read_data_01[67:0]),
373 .din1 (mb0_read_data_45[67:0]),
374 .sel0 (sio_mb0_sel_l2)
375 );
376
377 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_mbist0145_data_h (
378 .scan_in(dff_mbist0145_data_h_scanin),
379 .scan_out(dff_mbist0145_data_h_scanout),
380 .clk (l2clk),
381 .din (mb0_read_data_0145[67:34]),
382 .dout (read_data_top[67:34]),
383 .en (1'b1),
384 .se(se),
385 .siclk(siclk),
386 .soclk(soclk),
387 .pce_ov(pce_ov),
388 .stop(stop)
389 );
390
391 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_mbist0145_data_l (
392 .scan_in(dff_mbist0145_data_l_scanin),
393 .scan_out(dff_mbist0145_data_l_scanout),
394 .clk (l2clk),
395 .din (mb0_read_data_0145[33:0]),
396 .dout (read_data_top[33:0]),
397 .en (1'b1),
398 .se(se),
399 .siclk(siclk),
400 .soclk(soclk),
401 .pce_ov(pce_ov),
402 .stop(stop)
403 );
404
405 sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 mx21_mbist2367_data (
406 .dout (mb0_read_data_2367[67:0]),
407 .din0 (mb0_read_data_23[67:0]),
408 .din1 (mb0_read_data_67[67:0]),
409 .sel0 (sio_mb0_sel_l2)
410 );
411
412 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_mbist2367_data_h (
413 .scan_in(dff_mbist2367_data_h_scanin),
414 .scan_out(dff_mbist2367_data_h_scanout),
415 .clk (l2clk),
416 .din (mb0_read_data_2367[67:34]),
417 .dout (read_data_bot[67:34]),
418 .en (1'b1),
419 .se(se),
420 .siclk(siclk),
421 .soclk(soclk),
422 .pce_ov(pce_ov),
423 .stop(stop)
424 );
425
426 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_mbist2367_data_l (
427 .scan_in(dff_mbist2367_data_l_scanin),
428 .scan_out(dff_mbist2367_data_l_scanout),
429 .clk (l2clk),
430 .din (mb0_read_data_2367[33:0]),
431 .dout (read_data_bot[33:0]),
432 .en (1'b1),
433 .se(se),
434 .siclk(siclk),
435 .soclk(soclk),
436 .pce_ov(pce_ov),
437 .stop(stop)
438 );
439
440 // DFF
441 sio_opdc_dp_buff_macro__minbuff_1__stack_10l__width_10 buf_bank01_data_opc1_h0 (
442 .din ({1'b0,bank01_data_opc0[58],bank01_data_opc0[54],bank01_data_opc0[52:51],bank01_data_opc0[47:46],bank01_data_opc0[38],bank01_data_opc0[36],bank01_data_opc0[32]}),
443 .dout ({bank01_unused,bank01_data_opc0_buf[10:2]})
444 );
445 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_bank01_data_opc1_h (
446 .scan_in(dff_bank01_data_opc1_h_scanin),
447 .scan_out(dff_bank01_data_opc1_h_scanout),
448 .clk (l2clk),
449 .din ({bank01_data_opc0[65:59],bank01_data_opc0_buf[10],bank01_data_opc0[57:55],bank01_data_opc0_buf[9],bank01_data_opc0[53],bank01_data_opc0_buf[8:7],bank01_data_opc0[50:48],bank01_data_opc0_buf[6:5],bank01_data_opc0[45:39],bank01_data_opc0_buf[4],bank01_data_opc0[37],bank01_data_opc0_buf[3],bank01_data_opc0[35:33],bank01_data_opc0_buf[2]}),
450 .dout (bank01_data_opc1[65:32]),
451 .en (1'b1),
452 .se(se),
453 .siclk(siclk),
454 .soclk(soclk),
455 .pce_ov(pce_ov),
456 .stop(stop)
457 );
458
459 sio_opdc_dp_msff_macro__stack_32l__width_32 dff_bank01_data_opc1_l (
460 .scan_in(dff_bank01_data_opc1_l_scanin),
461 .scan_out(dff_bank01_data_opc1_l_scanout),
462 .clk (l2clk),
463 .din (bank01_data_opc0[31:0]),
464 .dout (bank01_data_opc1[31:0]),
465 .en (1'b1),
466 .se(se),
467 .siclk(siclk),
468 .soclk(soclk),
469 .pce_ov(pce_ov),
470 .stop(stop)
471 );
472
473 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_bank23_data_opc1_h (
474 .scan_in(dff_bank23_data_opc1_h_scanin),
475 .scan_out(dff_bank23_data_opc1_h_scanout),
476 .clk (l2clk),
477 .din (bank23_data_opc0[65:32]),
478 .dout (bank23_data_opc1[65:32]),
479 .en (1'b1),
480 .se(se),
481 .siclk(siclk),
482 .soclk(soclk),
483 .pce_ov(pce_ov),
484 .stop(stop)
485 );
486
487 sio_opdc_dp_msff_macro__stack_32l__width_32 dff_bank23_data_opc1_l (
488 .scan_in(dff_bank23_data_opc1_l_scanin),
489 .scan_out(dff_bank23_data_opc1_l_scanout),
490 .clk (l2clk),
491 .din (bank23_data_opc0[31:0]),
492 .dout (bank23_data_opc1[31:0]),
493 .en (1'b1),
494 .se(se),
495 .siclk(siclk),
496 .soclk(soclk),
497 .pce_ov(pce_ov),
498 .stop(stop)
499 );
500
501 sio_opdc_dp_buff_macro__minbuff_1__stack_6l__width_6 buf_bank45_data_opc1_h (
502 .din ({bank45_data_opc0[61],bank45_data_opc0[59],bank45_data_opc0[55],bank45_data_opc0[51],bank45_data_opc0[38],bank45_data_opc0[34]}),
503 .dout ({bank45_data_opc0_buf[16:11]})
504 );
505
506 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_bank45_data_opc1_h (
507 .scan_in(dff_bank45_data_opc1_h_scanin),
508 .scan_out(dff_bank45_data_opc1_h_scanout),
509 .clk (l2clk),
510 .din ({bank45_data_opc0[65:62],bank45_data_opc0_buf[16],bank45_data_opc0[60],bank45_data_opc0_buf[15],bank45_data_opc0[58:56],bank45_data_opc0_buf[14],bank45_data_opc0[54:52],bank45_data_opc0_buf[13],bank45_data_opc0[50:39],bank45_data_opc0_buf[12],bank45_data_opc0[37:35],bank45_data_opc0_buf[11],bank45_data_opc0[33:32]}),
511 .dout (bank45_data_opc1[65:32]),
512 .en (1'b1),
513 .se(se),
514 .siclk(siclk),
515 .soclk(soclk),
516 .pce_ov(pce_ov),
517 .stop(stop)
518 );
519
520 sio_opdc_dp_msff_macro__stack_32l__width_32 dff_bank45_data_opc1_l (
521 .scan_in(dff_bank45_data_opc1_l_scanin),
522 .scan_out(dff_bank45_data_opc1_l_scanout),
523 .clk (l2clk),
524 .din (bank45_data_opc0[31:0]),
525 .dout (bank45_data_opc1[31:0]),
526 .en (1'b1),
527 .se(se),
528 .siclk(siclk),
529 .soclk(soclk),
530 .pce_ov(pce_ov),
531 .stop(stop)
532 );
533
534 sio_opdc_dp_buff_macro__minbuff_1__stack_18l__width_18 buf_bank67_data_opc1_h (
535 .din ({bank67_data_opc0[56:55],bank67_data_opc0[52:50],bank67_data_opc0[48],bank67_data_opc0[46],bank67_data_opc0[43:38],bank67_data_opc0[36:32]}),
536 .dout ({bank67_data_opc0_buf[17:0]})
537 );
538
539 sio_opdc_dp_msff_macro__stack_34l__width_34 dff_bank67_data_opc1_h (
540 .scan_in(dff_bank67_data_opc1_h_scanin),
541 .scan_out(dff_bank67_data_opc1_h_scanout),
542 .clk (l2clk),
543 .din ({bank67_data_opc0[65:57],bank67_data_opc0_buf[17:16],bank67_data_opc0[54:53],bank67_data_opc0_buf[15:13],bank67_data_opc0[49],bank67_data_opc0_buf[12],bank67_data_opc0[47],bank67_data_opc0_buf[11],bank67_data_opc0[45:44],bank67_data_opc0_buf[10:5],bank67_data_opc0[37],bank67_data_opc0_buf[4:0]}),
544 .dout (bank67_data_opc1[65:32]),
545 .en (1'b1),
546 .se(se),
547 .siclk(siclk),
548 .soclk(soclk),
549 .pce_ov(pce_ov),
550 .stop(stop)
551 );
552
553 sio_opdc_dp_msff_macro__stack_32l__width_32 dff_bank67_data_opc1_l (
554 .scan_in(dff_bank67_data_opc1_l_scanin),
555 .scan_out(dff_bank67_data_opc1_l_scanout),
556 .clk (l2clk),
557 .din (bank67_data_opc0[31:0]),
558 .dout (bank67_data_opc1[31:0]),
559 .en (1'b1),
560 .se(se),
561 .siclk(siclk),
562 .soclk(soclk),
563 .pce_ov(pce_ov),
564 .stop(stop)
565 );
566
567// rewired data from flop output above
568// INTERLEAVED PARITY CODE
569//
570// pgenx
571
572 assign bank01_data_opc1_rw[63:0] = {
573 bank01_data_opc1[63], bank01_data_opc1[61], bank01_data_opc1[59], bank01_data_opc1[57],
574 bank01_data_opc1[55], bank01_data_opc1[53], bank01_data_opc1[51], bank01_data_opc1[49],
575 bank01_data_opc1[47], bank01_data_opc1[45], bank01_data_opc1[43], bank01_data_opc1[41],
576 bank01_data_opc1[39], bank01_data_opc1[37], bank01_data_opc1[35], bank01_data_opc1[33],
577
578 bank01_data_opc1[62], bank01_data_opc1[60], bank01_data_opc1[58], bank01_data_opc1[56],
579 bank01_data_opc1[54], bank01_data_opc1[52], bank01_data_opc1[50], bank01_data_opc1[48],
580 bank01_data_opc1[46], bank01_data_opc1[44], bank01_data_opc1[42], bank01_data_opc1[40],
581 bank01_data_opc1[38], bank01_data_opc1[36], bank01_data_opc1[34], bank01_data_opc1[32],
582
583 bank01_data_opc1[31], bank01_data_opc1[29], bank01_data_opc1[27], bank01_data_opc1[25],
584 bank01_data_opc1[23], bank01_data_opc1[21], bank01_data_opc1[19], bank01_data_opc1[17],
585 bank01_data_opc1[15], bank01_data_opc1[13], bank01_data_opc1[11], bank01_data_opc1[ 9],
586 bank01_data_opc1[ 7], bank01_data_opc1[ 5], bank01_data_opc1[ 3], bank01_data_opc1[ 1],
587
588 bank01_data_opc1[30], bank01_data_opc1[28], bank01_data_opc1[26], bank01_data_opc1[24],
589 bank01_data_opc1[22], bank01_data_opc1[20], bank01_data_opc1[18], bank01_data_opc1[16],
590 bank01_data_opc1[14], bank01_data_opc1[12], bank01_data_opc1[10], bank01_data_opc1[ 8],
591 bank01_data_opc1[ 6], bank01_data_opc1[ 4], bank01_data_opc1[ 2], bank01_data_opc1[ 0]
592 };
593
594 assign bank23_data_opc1_rw[63:0] = {
595 bank23_data_opc1[63], bank23_data_opc1[61], bank23_data_opc1[59], bank23_data_opc1[57],
596 bank23_data_opc1[55], bank23_data_opc1[53], bank23_data_opc1[51], bank23_data_opc1[49],
597 bank23_data_opc1[47], bank23_data_opc1[45], bank23_data_opc1[43], bank23_data_opc1[41],
598 bank23_data_opc1[39], bank23_data_opc1[37], bank23_data_opc1[35], bank23_data_opc1[33],
599
600 bank23_data_opc1[62], bank23_data_opc1[60], bank23_data_opc1[58], bank23_data_opc1[56],
601 bank23_data_opc1[54], bank23_data_opc1[52], bank23_data_opc1[50], bank23_data_opc1[48],
602 bank23_data_opc1[46], bank23_data_opc1[44], bank23_data_opc1[42], bank23_data_opc1[40],
603 bank23_data_opc1[38], bank23_data_opc1[36], bank23_data_opc1[34], bank23_data_opc1[32],
604
605 bank23_data_opc1[31], bank23_data_opc1[29], bank23_data_opc1[27], bank23_data_opc1[25],
606 bank23_data_opc1[23], bank23_data_opc1[21], bank23_data_opc1[19], bank23_data_opc1[17],
607 bank23_data_opc1[15], bank23_data_opc1[13], bank23_data_opc1[11], bank23_data_opc1[ 9],
608 bank23_data_opc1[ 7], bank23_data_opc1[ 5], bank23_data_opc1[ 3], bank23_data_opc1[ 1],
609
610 bank23_data_opc1[30], bank23_data_opc1[28], bank23_data_opc1[26], bank23_data_opc1[24],
611 bank23_data_opc1[22], bank23_data_opc1[20], bank23_data_opc1[18], bank23_data_opc1[16],
612 bank23_data_opc1[14], bank23_data_opc1[12], bank23_data_opc1[10], bank23_data_opc1[ 8],
613 bank23_data_opc1[ 6], bank23_data_opc1[ 4], bank23_data_opc1[ 2], bank23_data_opc1[ 0]
614 };
615
616 assign bank45_data_opc1_rw[63:0] = {
617 bank45_data_opc1[63], bank45_data_opc1[61], bank45_data_opc1[59], bank45_data_opc1[57],
618 bank45_data_opc1[55], bank45_data_opc1[53], bank45_data_opc1[51], bank45_data_opc1[49],
619 bank45_data_opc1[47], bank45_data_opc1[45], bank45_data_opc1[43], bank45_data_opc1[41],
620 bank45_data_opc1[39], bank45_data_opc1[37], bank45_data_opc1[35], bank45_data_opc1[33],
621
622 bank45_data_opc1[62], bank45_data_opc1[60], bank45_data_opc1[58], bank45_data_opc1[56],
623 bank45_data_opc1[54], bank45_data_opc1[52], bank45_data_opc1[50], bank45_data_opc1[48],
624 bank45_data_opc1[46], bank45_data_opc1[44], bank45_data_opc1[42], bank45_data_opc1[40],
625 bank45_data_opc1[38], bank45_data_opc1[36], bank45_data_opc1[34], bank45_data_opc1[32],
626
627 bank45_data_opc1[31], bank45_data_opc1[29], bank45_data_opc1[27], bank45_data_opc1[25],
628 bank45_data_opc1[23], bank45_data_opc1[21], bank45_data_opc1[19], bank45_data_opc1[17],
629 bank45_data_opc1[15], bank45_data_opc1[13], bank45_data_opc1[11], bank45_data_opc1[ 9],
630 bank45_data_opc1[ 7], bank45_data_opc1[ 5], bank45_data_opc1[ 3], bank45_data_opc1[ 1],
631
632 bank45_data_opc1[30], bank45_data_opc1[28], bank45_data_opc1[26], bank45_data_opc1[24],
633 bank45_data_opc1[22], bank45_data_opc1[20], bank45_data_opc1[18], bank45_data_opc1[16],
634 bank45_data_opc1[14], bank45_data_opc1[12], bank45_data_opc1[10], bank45_data_opc1[ 8],
635 bank45_data_opc1[ 6], bank45_data_opc1[ 4], bank45_data_opc1[ 2], bank45_data_opc1[ 0]
636 };
637
638 assign bank67_data_opc1_rw[63:0] = {
639 bank67_data_opc1[63], bank67_data_opc1[61], bank67_data_opc1[59], bank67_data_opc1[57],
640 bank67_data_opc1[55], bank67_data_opc1[53], bank67_data_opc1[51], bank67_data_opc1[49],
641 bank67_data_opc1[47], bank67_data_opc1[45], bank67_data_opc1[43], bank67_data_opc1[41],
642 bank67_data_opc1[39], bank67_data_opc1[37], bank67_data_opc1[35], bank67_data_opc1[33],
643
644 bank67_data_opc1[62], bank67_data_opc1[60], bank67_data_opc1[58], bank67_data_opc1[56],
645 bank67_data_opc1[54], bank67_data_opc1[52], bank67_data_opc1[50], bank67_data_opc1[48],
646 bank67_data_opc1[46], bank67_data_opc1[44], bank67_data_opc1[42], bank67_data_opc1[40],
647 bank67_data_opc1[38], bank67_data_opc1[36], bank67_data_opc1[34], bank67_data_opc1[32],
648
649 bank67_data_opc1[31], bank67_data_opc1[29], bank67_data_opc1[27], bank67_data_opc1[25],
650 bank67_data_opc1[23], bank67_data_opc1[21], bank67_data_opc1[19], bank67_data_opc1[17],
651 bank67_data_opc1[15], bank67_data_opc1[13], bank67_data_opc1[11], bank67_data_opc1[ 9],
652 bank67_data_opc1[ 7], bank67_data_opc1[ 5], bank67_data_opc1[ 3], bank67_data_opc1[ 1],
653
654 bank67_data_opc1[30], bank67_data_opc1[28], bank67_data_opc1[26], bank67_data_opc1[24],
655 bank67_data_opc1[22], bank67_data_opc1[20], bank67_data_opc1[18], bank67_data_opc1[16],
656 bank67_data_opc1[14], bank67_data_opc1[12], bank67_data_opc1[10], bank67_data_opc1[ 8],
657 bank67_data_opc1[ 6], bank67_data_opc1[ 4], bank67_data_opc1[ 2], bank67_data_opc1[ 0]
658 };
659 // level 2 -- opc1 stage
660
661
662 //bank01 parity
663 sio_opdc_dp_prty_macro__width_16 prty_bank01_parity3 (
664 .din (bank01_data_opc1_rw[63:48]),
665 .dout (bank01_parity_opc1_pre[3])
666 );
667
668 sio_opdc_dp_prty_macro__width_16 prty_bank01_parity2 (
669 .din (bank01_data_opc1_rw[47:32]),
670 .dout (bank01_parity_opc1_pre[2])
671 );
672
673 sio_opdc_dp_prty_macro__width_16 prty_bank01_parity1 (
674 .din (bank01_data_opc1_rw[31:16]),
675 .dout (bank01_parity_opc1_pre[1])
676 );
677
678 sio_opdc_dp_prty_macro__width_16 prty_bank01_parity0 (
679 .din (bank01_data_opc1_rw[15:0]),
680 .dout (bank01_parity_opc1_pre[0])
681 );
682
683 //bank23 parity
684 sio_opdc_dp_prty_macro__width_16 prty_bank23_parity3 (
685 .din (bank23_data_opc1_rw[63:48]),
686 .dout (bank23_parity_opc1_pre[3])
687 );
688
689 sio_opdc_dp_prty_macro__width_16 prty_bank23_parity2 (
690 .din (bank23_data_opc1_rw[47:32]),
691 .dout (bank23_parity_opc1_pre[2])
692 );
693
694 sio_opdc_dp_prty_macro__width_16 prty_bank23_parity1 (
695 .din (bank23_data_opc1_rw[31:16]),
696 .dout (bank23_parity_opc1_pre[1])
697 );
698
699 sio_opdc_dp_prty_macro__width_16 prty_bank23_parity0 (
700 .din (bank23_data_opc1_rw[15:0]),
701 .dout (bank23_parity_opc1_pre[0])
702 );
703
704 //bank45 parity
705 sio_opdc_dp_prty_macro__width_16 prty_bank45_parity3 (
706 .din (bank45_data_opc1_rw[63:48]),
707 .dout (bank45_parity_opc1_pre[3])
708 );
709
710 sio_opdc_dp_prty_macro__width_16 prty_bank45_parity2 (
711 .din (bank45_data_opc1_rw[47:32]),
712 .dout (bank45_parity_opc1_pre[2])
713 );
714
715 sio_opdc_dp_prty_macro__width_16 prty_bank45_parity1 (
716 .din (bank45_data_opc1_rw[31:16]),
717 .dout (bank45_parity_opc1_pre[1])
718 );
719
720 sio_opdc_dp_prty_macro__width_16 prty_bank45_parity0 (
721 .din (bank45_data_opc1_rw[15:0]),
722 .dout (bank45_parity_opc1_pre[0])
723 );
724
725 //bank67 parity
726 sio_opdc_dp_prty_macro__width_16 prty_bank67_parity3 (
727 .din (bank67_data_opc1_rw[63:48]),
728 .dout (bank67_parity_opc1_pre[3])
729 );
730
731 sio_opdc_dp_prty_macro__width_16 prty_bank67_parity2 (
732 .din (bank67_data_opc1_rw[47:32]),
733 .dout (bank67_parity_opc1_pre[2])
734 );
735
736 sio_opdc_dp_prty_macro__width_16 prty_bank67_parity1 (
737 .din (bank67_data_opc1_rw[31:16]),
738 .dout (bank67_parity_opc1_pre[1])
739 );
740
741 sio_opdc_dp_prty_macro__width_16 prty_bank67_parity0 (
742 .din (bank67_data_opc1_rw[15:0]),
743 .dout (bank67_parity_opc1_pre[0])
744 );
745
746//-----------------------------------------------------------------------------------
747// Parity bits flip for ue error
748//-----------------------------------------------------------------------------------
749 sio_opdc_dp_xor_macro__width_4 bank01_parity_ue (
750 .din0 (bank01_parity_opc1_pre[3:0]),
751 .din1 ({4{bank01_data_opc1[64]}}),
752 .dout (bank01_parity_opc1[3:0])
753 );
754
755 sio_opdc_dp_xor_macro__width_4 bank23_parity_ue (
756 .din0 (bank23_parity_opc1_pre[3:0]),
757 .din1 ({4{bank23_data_opc1[64]}}),
758 .dout (bank23_parity_opc1[3:0])
759 );
760
761 sio_opdc_dp_xor_macro__width_4 bank45_parity_ue (
762 .din0 (bank45_parity_opc1_pre[3:0]),
763 .din1 ({4{bank45_data_opc1[64]}}),
764 .dout (bank45_parity_opc1[3:0])
765 );
766
767 sio_opdc_dp_xor_macro__width_4 bank67_parity_ue (
768 .din0 (bank67_parity_opc1_pre[3:0]),
769 .din1 ({4{bank67_data_opc1[64]}}),
770 .dout (bank67_parity_opc1[3:0])
771 );
772
773 assign bank_parity_opc1[7:4] = bank_parity_opc1[3:0];
774
775 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_64c__width_64 mx21_bankleft_data (
776 .dout (bankleft_data_opc1[63:0]),
777 .din0 (bank01_data_opc1[63:0]),
778 .din1 (bank23_data_opc1[63:0]),
779 .sel0 (opcc_opdc_gnt01_opc1)
780 );
781
782 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_64c__width_64 mx21_bankright_data (
783 .dout (bankright_data_opc1[63:0]),
784 .din0 (bank45_data_opc1[63:0]),
785 .din1 (bank67_data_opc1[63:0]),
786 .sel0 (opcc_opdc_gnt45_opc1)
787 );
788//-----------------------------------------------------------------------------------
789// Timing fix to combine bankright_parity , bankleft_parity and bankparity muxes
790//-----------------------------------------------------------------------------------
791// mux_macro mx21_bankleft_parity (width=4, stack=4c, mux=pgpe, ports=2) (
792// .dout (bankleft_parity_opc1[3:0]),
793// .din0 (bank01_parity_opc1[3:0]),
794// .din1 (bank23_parity_opc1[3:0]),
795// .sel0 (opcc_opdc_gnt01_opc1)
796// );
797
798// mux_macro mx21_bankright_parity (width=4, stack=4c, mux=pgpe, ports=2) (
799// .dout (bankright_parity_opc1[3:0]),
800// .din0 (bank45_parity_opc1[3:0]),
801// .din1 (bank67_parity_opc1[3:0]),
802// .sel0 (opcc_opdc_gnt45_opc1)
803// );
804
805// mux_macro mx21_bank_parity (width=4, stack=4c, mux=pgpe, ports=2) (
806// .dout (bank_parity_opc1[3:0]),
807// .din0 (bankleft_parity_opc1[3:0]),
808// .din1 (bankright_parity_opc1[3:0]),
809// .sel0 (opcc_opdc_gnt0123_opc1)
810// );
811
812 sio_opdc_dp_mux_macro__mux_pgnpe__ports_4__stack_4c__width_4 mx21_bank_parity (
813 .dout (bank_parity_opc1[3:0]),
814 .din3 (bank01_parity_opc1[3:0]),
815 .din2 (bank23_parity_opc1[3:0]),
816 .din1 (bank45_parity_opc1[3:0]),
817 .din0 (bank67_parity_opc1[3:0]),
818 .sel3 (sel_bank_parity[3]),
819 .sel2 (sel_bank_parity[2]),
820 .sel1 (sel_bank_parity[1]),
821 .sel0 (sel_bank_parity[0]),
822 .muxtst(muxtst)
823 );
824
825sio_opdc_dp_inv_macro__width_3 inv_sel_bank_parity
826 (
827 .din ({opcc_opdc_gnt01_opc1, opcc_opdc_gnt45_opc1, opcc_opdc_gnt0123_opc1}),
828 .dout ({not_opcc_opdc_gnt01_opc1, not_opcc_opdc_gnt45_opc1,
829 not_opcc_opdc_gnt0123_opc1})
830 );
831
832sio_opdc_dp_and_macro__left_0__ports_2__stack_4r__width_4 and_left_right_4567
833 (
834 .din0 ({opcc_opdc_gnt0123_opc1,opcc_opdc_gnt0123_opc1,
835 not_opcc_opdc_gnt0123_opc1, not_opcc_opdc_gnt0123_opc1}),
836 .din1 ({opcc_opdc_gnt01_opc1, not_opcc_opdc_gnt01_opc1,
837 opcc_opdc_gnt45_opc1, not_opcc_opdc_gnt45_opc1}),
838 .dout (sel_bank_parity[3:0])
839 );
840
841
842
843
844//-----------------------------------------------------------------------------------
845// End - Timing fix to combine bankright_parity , bankleft_parity and bankparity muxes
846//-----------------------------------------------------------------------------------
847
848 // level 3 -- opc1 stage
849 sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_64c__width_64 mx21_bank_data (
850 .dout (bank_data_opc1[63:0]),
851 .din0 (bankleft_data_opc1[63:0]),
852 .din1 (bankright_data_opc1[63:0]),
853 .sel0 (opcc_opdc_gnt0123_opc1)
854 );
855
856 // for mb1
857
858 sio_opdc_dp_mux_macro__dmux_8x__mux_pgpe__ports_2__stack_72c__width_72 mx21_mb1bank_dataparity (
859 .dout ({opdc_mb1bank_data_opc1[63:0], opdc_mb1bank_parity_opc1[7:0]}),
860 .din0 ({9{sio_mb1_wdata[7:0]}}),
861 .din1 ({bank_data_opc1[63:0], bank_parity_opc1[7:0]}),
862 .sel0 (sio_mb1_run)
863 );
864
865 // for mb1 -- 2:1 mux of opcc_x or mb1_x -> opdc_x
866 // width = 38 = 2x19 = 2x (3 (wr_ens) + 12 (dqx_wr_addr) + 4 (hq_wr_addr))
867 //
868 sio_opdc_dp_mux_macro__mux_aope__ports_2__stack_38c__width_38 mx21_mbist_write_controls (
869 .dout ({opdc_opddq00_wr_addr[5:0], opdc_opddq01_wr_addr[5:0], opdc_opdhq0_wr_addr[3:0],
870 opdc_opddq00_wr_en, opdc_opddq01_wr_en, opdc_opdhq0_wr_en,
871 opdc_opddq10_wr_addr[5:0], opdc_opddq11_wr_addr[5:0], opdc_opdhq1_wr_addr[3:0],
872 opdc_opddq10_wr_en, opdc_opddq11_wr_en, opdc_opdhq1_wr_en}),
873
874 .din0 ({sio_mb1_addr[5:0], sio_mb1_addr[5:0], sio_mb1_addr[3:0],
875 sio_mb1_opddq00_wr_en, sio_mb1_opddq01_wr_en, sio_mb1_opdhq0_wr_en,
876 sio_mb1_addr[5:0], sio_mb1_addr[5:0], sio_mb1_addr[3:0],
877 sio_mb1_opddq10_wr_en, sio_mb1_opddq11_wr_en, sio_mb1_opdhq1_wr_en}),
878
879 .din1 ({opcc_opddq00_wr_addr[5:0], opcc_opddq01_wr_addr[5:0], opcc_opdhq0_wr_addr[3:0],
880 opcc_opddq00_wr_en, opcc_opddq01_wr_en, opcc_opdhq0_wr_en,
881 opcc_opddq10_wr_addr[5:0], opcc_opddq11_wr_addr[5:0], opcc_opdhq1_wr_addr[3:0],
882 opcc_opddq10_wr_en, opcc_opddq11_wr_en, opcc_opdhq1_wr_en}),
883
884 .sel0 (sio_mb1_run)
885 );
886
887
888// fixscan start:
889assign dff_mbist0145_data_h_scanin = scan_in ;
890assign dff_mbist0145_data_l_scanin = dff_mbist0145_data_h_scanout;
891assign dff_mbist2367_data_h_scanin = dff_mbist0145_data_l_scanout;
892assign dff_mbist2367_data_l_scanin = dff_mbist2367_data_h_scanout;
893assign dff_bank01_data_opc1_h_scanin = dff_mbist2367_data_l_scanout;
894assign dff_bank01_data_opc1_l_scanin = dff_bank01_data_opc1_h_scanout;
895assign dff_bank23_data_opc1_h_scanin = dff_bank01_data_opc1_l_scanout;
896assign dff_bank23_data_opc1_l_scanin = dff_bank23_data_opc1_h_scanout;
897assign dff_bank45_data_opc1_h_scanin = dff_bank23_data_opc1_l_scanout;
898assign dff_bank45_data_opc1_l_scanin = dff_bank45_data_opc1_h_scanout;
899assign dff_bank67_data_opc1_h_scanin = dff_bank45_data_opc1_l_scanout;
900assign dff_bank67_data_opc1_l_scanin = dff_bank67_data_opc1_h_scanout;
901assign scan_out = dff_bank67_data_opc1_l_scanout;
902// fixscan end:
903endmodule // sio_opdc_dp
904
905
906// general mux macro for pass-gate and and-or muxes with/wout priority encoders
907// also for pass-gate with decoder
908
909
910
911
912
913// any PARAMS parms go into naming of macro
914
915module sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_66c__width_66 (
916 din0,
917 din1,
918 sel0,
919 dout);
920wire psel0_unused;
921wire psel1;
922
923 input [65:0] din0;
924 input [65:0] din1;
925 input sel0;
926 output [65:0] dout;
927
928
929
930
931
932cl_dp1_penc2_8x c0_0 (
933 .sel0(sel0),
934 .psel0(psel0_unused),
935 .psel1(psel1)
936);
937
938mux2e #(66) d0_0 (
939 .sel(psel1),
940 .in0(din0[65:0]),
941 .in1(din1[65:0]),
942.dout(dout[65:0])
943);
944
945
946
947
948
949
950
951
952
953
954
955
956
957endmodule
958
959
960//
961// buff macro
962//
963//
964
965
966
967
968
969module sio_opdc_dp_buff_macro__minbuff_1__stack_2l__width_2 (
970 din,
971 dout);
972 input [1:0] din;
973 output [1:0] dout;
974
975
976
977
978
979
980buff #(2) d0_0 (
981.in(din[1:0]),
982.out(dout[1:0])
983);
984
985
986
987
988
989
990
991
992endmodule
993
994
995
996
997
998//
999// buff macro
1000//
1001//
1002
1003
1004
1005
1006
1007module sio_opdc_dp_buff_macro__minbuff_1__stack_12l__width_12 (
1008 din,
1009 dout);
1010 input [11:0] din;
1011 output [11:0] dout;
1012
1013
1014
1015
1016
1017
1018buff #(12) d0_0 (
1019.in(din[11:0]),
1020.out(dout[11:0])
1021);
1022
1023
1024
1025
1026
1027
1028
1029
1030endmodule
1031
1032
1033
1034
1035
1036// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1037// also for pass-gate with decoder
1038
1039
1040
1041
1042
1043// any PARAMS parms go into naming of macro
1044
1045module sio_opdc_dp_mux_macro__dmux_16x__mux_pgpe__ports_2__stack_68c__width_68 (
1046 din0,
1047 din1,
1048 sel0,
1049 dout);
1050wire psel0_unused;
1051wire psel1;
1052
1053 input [67:0] din0;
1054 input [67:0] din1;
1055 input sel0;
1056 output [67:0] dout;
1057
1058
1059
1060
1061
1062cl_dp1_penc2_8x c0_0 (
1063 .sel0(sel0),
1064 .psel0(psel0_unused),
1065 .psel1(psel1)
1066);
1067
1068mux2e #(68) d0_0 (
1069 .sel(psel1),
1070 .in0(din0[67:0]),
1071 .in1(din1[67:0]),
1072.dout(dout[67:0])
1073);
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087endmodule
1088
1089
1090
1091
1092
1093
1094// any PARAMS parms go into naming of macro
1095
1096module sio_opdc_dp_msff_macro__stack_34l__width_34 (
1097 din,
1098 clk,
1099 en,
1100 se,
1101 scan_in,
1102 siclk,
1103 soclk,
1104 pce_ov,
1105 stop,
1106 dout,
1107 scan_out);
1108wire l1clk;
1109wire siclk_out;
1110wire soclk_out;
1111wire [32:0] so;
1112
1113 input [33:0] din;
1114
1115
1116 input clk;
1117 input en;
1118 input se;
1119 input scan_in;
1120 input siclk;
1121 input soclk;
1122 input pce_ov;
1123 input stop;
1124
1125
1126
1127 output [33:0] dout;
1128
1129
1130 output scan_out;
1131
1132
1133
1134
1135cl_dp1_l1hdr_8x c0_0 (
1136.l2clk(clk),
1137.pce(en),
1138.aclk(siclk),
1139.bclk(soclk),
1140.l1clk(l1clk),
1141 .se(se),
1142 .pce_ov(pce_ov),
1143 .stop(stop),
1144 .siclk_out(siclk_out),
1145 .soclk_out(soclk_out)
1146);
1147dff #(34) d0_0 (
1148.l1clk(l1clk),
1149.siclk(siclk_out),
1150.soclk(soclk_out),
1151.d(din[33:0]),
1152.si({scan_in,so[32:0]}),
1153.so({so[32:0],scan_out}),
1154.q(dout[33:0])
1155);
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176endmodule
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186//
1187// buff macro
1188//
1189//
1190
1191
1192
1193
1194
1195module sio_opdc_dp_buff_macro__minbuff_1__stack_10l__width_10 (
1196 din,
1197 dout);
1198 input [9:0] din;
1199 output [9:0] dout;
1200
1201
1202
1203
1204
1205
1206buff #(10) d0_0 (
1207.in(din[9:0]),
1208.out(dout[9:0])
1209);
1210
1211
1212
1213
1214
1215
1216
1217
1218endmodule
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228// any PARAMS parms go into naming of macro
1229
1230module sio_opdc_dp_msff_macro__stack_32l__width_32 (
1231 din,
1232 clk,
1233 en,
1234 se,
1235 scan_in,
1236 siclk,
1237 soclk,
1238 pce_ov,
1239 stop,
1240 dout,
1241 scan_out);
1242wire l1clk;
1243wire siclk_out;
1244wire soclk_out;
1245wire [30:0] so;
1246
1247 input [31:0] din;
1248
1249
1250 input clk;
1251 input en;
1252 input se;
1253 input scan_in;
1254 input siclk;
1255 input soclk;
1256 input pce_ov;
1257 input stop;
1258
1259
1260
1261 output [31:0] dout;
1262
1263
1264 output scan_out;
1265
1266
1267
1268
1269cl_dp1_l1hdr_8x c0_0 (
1270.l2clk(clk),
1271.pce(en),
1272.aclk(siclk),
1273.bclk(soclk),
1274.l1clk(l1clk),
1275 .se(se),
1276 .pce_ov(pce_ov),
1277 .stop(stop),
1278 .siclk_out(siclk_out),
1279 .soclk_out(soclk_out)
1280);
1281dff #(32) d0_0 (
1282.l1clk(l1clk),
1283.siclk(siclk_out),
1284.soclk(soclk_out),
1285.d(din[31:0]),
1286.si({scan_in,so[30:0]}),
1287.so({so[30:0],scan_out}),
1288.q(dout[31:0])
1289);
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310endmodule
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320//
1321// buff macro
1322//
1323//
1324
1325
1326
1327
1328
1329module sio_opdc_dp_buff_macro__minbuff_1__stack_6l__width_6 (
1330 din,
1331 dout);
1332 input [5:0] din;
1333 output [5:0] dout;
1334
1335
1336
1337
1338
1339
1340buff #(6) d0_0 (
1341.in(din[5:0]),
1342.out(dout[5:0])
1343);
1344
1345
1346
1347
1348
1349
1350
1351
1352endmodule
1353
1354
1355
1356
1357
1358//
1359// buff macro
1360//
1361//
1362
1363
1364
1365
1366
1367module sio_opdc_dp_buff_macro__minbuff_1__stack_18l__width_18 (
1368 din,
1369 dout);
1370 input [17:0] din;
1371 output [17:0] dout;
1372
1373
1374
1375
1376
1377
1378buff #(18) d0_0 (
1379.in(din[17:0]),
1380.out(dout[17:0])
1381);
1382
1383
1384
1385
1386
1387
1388
1389
1390endmodule
1391
1392
1393
1394
1395
1396//
1397// parity macro (even parity)
1398//
1399//
1400
1401
1402
1403
1404
1405module sio_opdc_dp_prty_macro__width_16 (
1406 din,
1407 dout);
1408 input [15:0] din;
1409 output dout;
1410
1411
1412
1413
1414
1415
1416
1417prty #(16) m0_0 (
1418.in(din[15:0]),
1419.out(dout)
1420);
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431endmodule
1432
1433
1434
1435
1436
1437//
1438// xor macro for ports = 2,3
1439//
1440//
1441
1442
1443
1444
1445
1446module sio_opdc_dp_xor_macro__width_4 (
1447 din0,
1448 din1,
1449 dout);
1450 input [3:0] din0;
1451 input [3:0] din1;
1452 output [3:0] dout;
1453
1454
1455
1456
1457
1458xor2 #(4) d0_0 (
1459.in0(din0[3:0]),
1460.in1(din1[3:0]),
1461.out(dout[3:0])
1462);
1463
1464
1465
1466
1467
1468
1469
1470
1471endmodule
1472
1473
1474
1475
1476
1477// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1478// also for pass-gate with decoder
1479
1480
1481
1482
1483
1484// any PARAMS parms go into naming of macro
1485
1486module sio_opdc_dp_mux_macro__mux_pgpe__ports_2__stack_64c__width_64 (
1487 din0,
1488 din1,
1489 sel0,
1490 dout);
1491wire psel0_unused;
1492wire psel1;
1493
1494 input [63:0] din0;
1495 input [63:0] din1;
1496 input sel0;
1497 output [63:0] dout;
1498
1499
1500
1501
1502
1503cl_dp1_penc2_8x c0_0 (
1504 .sel0(sel0),
1505 .psel0(psel0_unused),
1506 .psel1(psel1)
1507);
1508
1509mux2e #(64) d0_0 (
1510 .sel(psel1),
1511 .in0(din0[63:0]),
1512 .in1(din1[63:0]),
1513.dout(dout[63:0])
1514);
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528endmodule
1529
1530
1531// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1532// also for pass-gate with decoder
1533
1534
1535
1536
1537
1538// any PARAMS parms go into naming of macro
1539
1540module sio_opdc_dp_mux_macro__mux_pgnpe__ports_4__stack_4c__width_4 (
1541 din0,
1542 sel0,
1543 din1,
1544 sel1,
1545 din2,
1546 sel2,
1547 din3,
1548 sel3,
1549 muxtst,
1550 dout);
1551wire buffout0;
1552wire buffout1;
1553wire buffout2;
1554wire buffout3;
1555
1556 input [3:0] din0;
1557 input sel0;
1558 input [3:0] din1;
1559 input sel1;
1560 input [3:0] din2;
1561 input sel2;
1562 input [3:0] din3;
1563 input sel3;
1564 input muxtst;
1565 output [3:0] dout;
1566
1567
1568
1569
1570
1571cl_dp1_muxbuff4_8x c0_0 (
1572 .in0(sel0),
1573 .in1(sel1),
1574 .in2(sel2),
1575 .in3(sel3),
1576 .out0(buffout0),
1577 .out1(buffout1),
1578 .out2(buffout2),
1579 .out3(buffout3)
1580);
1581mux4 #(4) d0_0 (
1582 .sel0(buffout0),
1583 .sel1(buffout1),
1584 .sel2(buffout2),
1585 .sel3(buffout3),
1586 .in0(din0[3:0]),
1587 .in1(din1[3:0]),
1588 .in2(din2[3:0]),
1589 .in3(din3[3:0]),
1590.dout(dout[3:0]),
1591 .muxtst(muxtst)
1592);
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606endmodule
1607
1608
1609//
1610// invert macro
1611//
1612//
1613
1614
1615
1616
1617
1618module sio_opdc_dp_inv_macro__width_3 (
1619 din,
1620 dout);
1621 input [2:0] din;
1622 output [2:0] dout;
1623
1624
1625
1626
1627
1628
1629inv #(3) d0_0 (
1630.in(din[2:0]),
1631.out(dout[2:0])
1632);
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642endmodule
1643
1644
1645
1646
1647
1648//
1649// and macro for ports = 2,3,4
1650//
1651//
1652
1653
1654
1655
1656
1657module sio_opdc_dp_and_macro__left_0__ports_2__stack_4r__width_4 (
1658 din0,
1659 din1,
1660 dout);
1661 input [3:0] din0;
1662 input [3:0] din1;
1663 output [3:0] dout;
1664
1665
1666
1667
1668
1669
1670and2 #(4) d0_0 (
1671.in0(din0[3:0]),
1672.in1(din1[3:0]),
1673.out(dout[3:0])
1674);
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684endmodule
1685
1686
1687
1688
1689
1690// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1691// also for pass-gate with decoder
1692
1693
1694
1695
1696
1697// any PARAMS parms go into naming of macro
1698
1699module sio_opdc_dp_mux_macro__dmux_8x__mux_pgpe__ports_2__stack_72c__width_72 (
1700 din0,
1701 din1,
1702 sel0,
1703 dout);
1704wire psel0_unused;
1705wire psel1;
1706
1707 input [71:0] din0;
1708 input [71:0] din1;
1709 input sel0;
1710 output [71:0] dout;
1711
1712
1713
1714
1715
1716cl_dp1_penc2_8x c0_0 (
1717 .sel0(sel0),
1718 .psel0(psel0_unused),
1719 .psel1(psel1)
1720);
1721
1722mux2e #(72) d0_0 (
1723 .sel(psel1),
1724 .in0(din0[71:0]),
1725 .in1(din1[71:0]),
1726.dout(dout[71:0])
1727);
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741endmodule
1742
1743
1744// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1745// also for pass-gate with decoder
1746
1747
1748
1749
1750
1751// any PARAMS parms go into naming of macro
1752
1753module sio_opdc_dp_mux_macro__mux_aope__ports_2__stack_38c__width_38 (
1754 din0,
1755 din1,
1756 sel0,
1757 dout);
1758wire psel0;
1759wire psel1;
1760
1761 input [37:0] din0;
1762 input [37:0] din1;
1763 input sel0;
1764 output [37:0] dout;
1765
1766
1767
1768
1769
1770cl_dp1_penc2_8x c0_0 (
1771 .sel0(sel0),
1772 .psel0(psel0),
1773 .psel1(psel1)
1774);
1775
1776mux2s #(38) d0_0 (
1777 .sel0(psel0),
1778 .sel1(psel1),
1779 .in0(din0[37:0]),
1780 .in1(din1[37:0]),
1781.dout(dout[37:0])
1782);
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796endmodule
1797