Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / mcu / rtl / mcu_fbdird_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: mcu_fbdird_dp.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35`define DRIF_MCU_STATE_00 5'd0
36`define DRIF_MCU_STATE_01 5'd1
37`define DRIF_MCU_STATE_02 5'd2
38`define DRIF_MCU_STATE_03 5'd3
39`define DRIF_MCU_STATE_04 5'd4
40`define DRIF_MCU_STATE_05 5'd5
41`define DRIF_MCU_STATE_06 5'd6
42`define DRIF_MCU_STATE_07 5'd7
43`define DRIF_MCU_STATE_08 5'd8
44`define DRIF_MCU_STATE_09 5'd9
45`define DRIF_MCU_STATE_10 5'd10
46`define DRIF_MCU_STATE_11 5'd11
47`define DRIF_MCU_STATE_12 5'd12
48`define DRIF_MCU_STATE_13 5'd13
49`define DRIF_MCU_STATE_14 5'd14
50`define DRIF_MCU_STATE_15 5'd15
51`define DRIF_MCU_STATE_16 5'd16
52`define DRIF_MCU_STATE_17 5'd17
53`define DRIF_MCU_STATE_18 5'd18
54`define DRIF_MCU_STATE_19 5'd19
55`define DRIF_MCU_STATE_20 5'd20
56`define DRIF_MCU_STATE_21 5'd21
57`define DRIF_MCU_STATE_22 5'd22
58`define DRIF_MCU_STATE_23 5'd23
59`define DRIF_MCU_STATE_24 5'd24
60`define DRIF_MCU_STATE_25 5'd25
61`define DRIF_MCU_STATE_26 5'd26
62
63`define DRIF_MCU_STATE_MAX 4
64`define DRIF_MCU_STATE_WIDTH 5
65
66//
67// UCB Packet Type
68// ===============
69//
70`define UCB_READ_NACK 4'b0000 // ack/nack types
71`define UCB_READ_ACK 4'b0001
72`define UCB_WRITE_ACK 4'b0010
73`define UCB_IFILL_ACK 4'b0011
74`define UCB_IFILL_NACK 4'b0111
75
76`define UCB_READ_REQ 4'b0100 // req types
77`define UCB_WRITE_REQ 4'b0101
78`define UCB_IFILL_REQ 4'b0110
79
80`define UCB_INT 4'b1000 // plain interrupt
81`define UCB_INT_VEC 4'b1100 // interrupt with vector
82`define UCB_RESET_VEC 4'b1101 // reset with vector
83`define UCB_IDLE_VEC 4'b1110 // idle with vector
84`define UCB_RESUME_VEC 4'b1111 // resume with vector
85
86
87//
88// UCB Data Packet Format
89// ======================
90//
91`define UCB_NOPAY_PKT_WIDTH 64 // packet without payload
92`define UCB_64PAY_PKT_WIDTH 128 // packet with 64 bit payload
93`define UCB_128PAY_PKT_WIDTH 192 // packet with 128 bit payload
94
95`define UCB_DATA_EXT_HI 191 // (64) extended data
96`define UCB_DATA_EXT_LO 128
97`define UCB_DATA_HI 127 // (64) data
98`define UCB_DATA_LO 64
99`define UCB_RSV_HI 63 // (9) reserved bits
100`define UCB_RSV_LO 55
101`define UCB_ADDR_HI 54 // (40) bit address
102`define UCB_ADDR_LO 15
103`define UCB_SIZE_HI 14 // (3) request size
104`define UCB_SIZE_LO 12
105`define UCB_BUF_HI 11 // (2) buffer ID
106`define UCB_BUF_LO 10
107`define UCB_THR_HI 9 // (6) cpu/thread ID
108`define UCB_THR_LO 4
109`define UCB_PKT_HI 3 // (4) packet type
110`define UCB_PKT_LO 0
111
112`define UCB_DATA_EXT_WIDTH 64
113`define UCB_DATA_WIDTH 64
114`define UCB_RSV_WIDTH 9
115`define UCB_ADDR_WIDTH 40
116`define UCB_SIZE_WIDTH 3
117`define UCB_BUF_WIDTH 2
118`define UCB_THR_WIDTH 6
119`define UCB_PKT_WIDTH 4
120
121// Size encoding for the UCB_SIZE_HI/LO field
122// 000 - byte
123// 001 - half-word
124// 010 - word
125// 011 - double-word
126`define UCB_SIZE_1B 3'b000
127`define UCB_SIZE_2B 3'b001
128`define UCB_SIZE_4B 3'b010
129`define UCB_SIZE_8B 3'b011
130`define UCB_SIZE_16B 3'b100
131
132
133//
134// UCB Interrupt Packet Format
135// ===========================
136//
137`define UCB_INT_PKT_WIDTH 64
138
139`define UCB_INT_RSV_HI 63 // (7) reserved bits
140`define UCB_INT_RSV_LO 57
141`define UCB_INT_VEC_HI 56 // (6) interrupt vector
142`define UCB_INT_VEC_LO 51
143`define UCB_INT_STAT_HI 50 // (32) interrupt status
144`define UCB_INT_STAT_LO 19
145`define UCB_INT_DEV_HI 18 // (9) device ID
146`define UCB_INT_DEV_LO 10
147//`define UCB_THR_HI 9 // (6) cpu/thread ID shared with
148//`define UCB_THR_LO 4 data packet format
149//`define UCB_PKT_HI 3 // (4) packet type shared with
150//`define UCB_PKT_LO 0 // data packet format
151
152`define UCB_INT_RSV_WIDTH 7
153`define UCB_INT_VEC_WIDTH 6
154`define UCB_INT_STAT_WIDTH 32
155`define UCB_INT_DEV_WIDTH 9
156
157
158`define MCU_CAS_BIT2_SEL_PA10 4'h1
159`define MCU_CAS_BIT2_SEL_PA32 4'h2
160`define MCU_CAS_BIT2_SEL_PA33 4'h4
161`define MCU_CAS_BIT2_SEL_PA34 4'h8
162
163`define MCU_CAS_BIT3_SEL_PA11 4'h1
164`define MCU_CAS_BIT3_SEL_PA33 4'h2
165`define MCU_CAS_BIT3_SEL_PA34 4'h4
166`define MCU_CAS_BIT3_SEL_PA35 4'h8
167
168`define MCU_CAS_BIT4_SEL_PA12 3'h1
169`define MCU_CAS_BIT4_SEL_PA35 3'h2
170`define MCU_CAS_BIT4_SEL_PA36 3'h4
171
172`define MCU_DIMMHI_SEL_ZERO 6'h01
173`define MCU_DIMMHI_SEL_PA32 6'h02
174`define MCU_DIMMHI_SEL_PA33 6'h04
175`define MCU_DIMMHI_SEL_PA34 6'h08
176`define MCU_DIMMHI_SEL_PA35 6'h10
177`define MCU_DIMMHI_SEL_PA36 6'h20
178
179`define MCU_DIMMLO_SEL_ZERO 4'h1
180`define MCU_DIMMLO_SEL_PA10 4'h2
181`define MCU_DIMMLO_SEL_PA11 4'h4
182`define MCU_DIMMLO_SEL_PA12 4'h8
183
184`define MCU_RANK_SEL_ZERO 7'h01
185`define MCU_RANK_SEL_PA32 7'h02
186`define MCU_RANK_SEL_PA33 7'h04
187`define MCU_RANK_SEL_PA34 7'h08
188`define MCU_RANK_SEL_PA35 7'h10
189`define MCU_RANK_SEL_PA10 7'h20
190`define MCU_RANK_SEL_PA11 7'h40
191
192`define MCU_ADDR_ERR_SEL_39_32 6'h01
193`define MCU_ADDR_ERR_SEL_39_33 6'h02
194`define MCU_ADDR_ERR_SEL_39_34 6'h04
195`define MCU_ADDR_ERR_SEL_39_35 6'h08
196`define MCU_ADDR_ERR_SEL_39_36 6'h10
197`define MCU_ADDR_ERR_SEL_39_37 6'h20
198
199`define DRIF_ERR_IDLE 0
200`define DRIF_ERR_IDLE_ST 5'h1
201`define DRIF_ERR_READ0 1
202`define DRIF_ERR_READ0_ST 5'h2
203`define DRIF_ERR_WRITE 2
204`define DRIF_ERR_WRITE_ST 5'h4
205`define DRIF_ERR_READ1 3
206`define DRIF_ERR_READ1_ST 5'h8
207`define DRIF_ERR_CRC_FR 4
208`define DRIF_ERR_CRC_FR_ST 5'h10
209
210`define MCU_WDQ_RF_DATA_WIDTH 72
211`define MCU_WDQ_RF_ADDR_WIDTH 5
212`define MCU_WDQ_RF_DEPTH 32
213
214// FBDIMM header defines
215`define FBD_TS0_HDR 12'hbfe
216`define FBD_TS1_HDR 12'hffe
217`define FBD_TS2_HDR 12'h7fe
218`define FBD_TS3_HDR 12'h3fe
219
220// MCU FBDIMM Channel commands
221`define FBD_DRAM_CMD_NOP 3'h0
222`define FBD_DRAM_CMD_OTHER 3'h1
223`define FBD_DRAM_CMD_RD 3'h2
224`define FBD_DRAM_CMD_WR 3'h3
225`define FBD_DRAM_CMD_ACT 3'h4
226`define FBD_DRAM_CMD_WDATA 3'h5
227
228`define FBD_DRAM_CMD_OTHER_REF 3'h5
229`define FBD_DRAM_CMD_OTHER_SRE 3'h4
230`define FBD_DRAM_CMD_OTHER_PDE 3'h2
231`define FBD_DRAM_CMD_OTHER_SRPDX 3'h3
232
233`define FBD_CHNL_CMD_NOP 2'h0
234`define FBD_CHNL_CMD_SYNC 2'h1
235`define FBD_CHNL_CMD_SCRST 2'h2
236
237`define FBDIC_ERR_IDLE_ST 7'h01
238`define FBDIC_ERR_IDLE 0
239
240`define FBDIC_ERR_STS_ST 7'h02
241`define FBDIC_ERR_STS 1
242
243`define FBDIC_ERR_SCRST_ST 7'h04
244`define FBDIC_ERR_SCRST 2
245
246`define FBDIC_ERR_SCRST_STS_ST 7'h08
247`define FBDIC_ERR_SCRST_STS 3
248
249`define FBDIC_ERR_STS2_ST 7'h10
250`define FBDIC_ERR_STS2 4
251
252`define FBDIC_ERR_FASTRST_ST 7'h20
253`define FBDIC_ERR_FASTRST 5
254
255`define FBDIC_ERR_FASTRST_STS_ST 7'h40
256`define FBDIC_ERR_FASTRST_STS 6
257
258
259// IBIST DEFINITION
260
261`define L_2_0 12'h555
262`define L_2_1 12'h555
263`define L_4_0 12'h333
264`define L_4_1 12'h333
265`define L_6_0 12'h1c7
266`define L_6_1 12'h1c7
267`define L_8_0 12'h0f0
268`define L_8_1 12'hf0f
269`define L_24_0 12'h000
270`define L_24_1 12'hfff
271
272`define idle 4'h0
273
274`define error_0 4'h1
275`define error_1 4'h2
276
277`define start1_0 4'h3
278`define start1_1 4'h4
279`define start2_0 4'h5
280`define start2_1 4'h6
281
282`define pat1_0 4'h7
283`define pat1_1 4'h8
284
285`define clkpat_0 4'h9
286`define clkpat_1 4'ha
287
288`define const_0 4'hb
289`define const_1 4'hc
290
291`define stop1_0 4'h1
292`define stop1_1 4'h2
293
294`define stop2_0 4'hd
295`define stop2_1 4'he
296`define error 4'hf
297
298`define IBTX_STATE_IDLE 0
299`define IBTX_STATE_PATT 1
300`define IBTX_STATE_MODN 2
301`define IBTX_STATE_CONST 3
302
303`define IBRX_STATE_IDLE 0
304`define IBRX_STATE_PATT 1
305`define IBRX_STATE_MODN 2
306`define IBRX_STATE_CONST 3
307
308
309
310module mcu_fbdird_dp (
311 fbdird0_data,
312 fbdird1_data,
313 fbdird_ibrx_data,
314 fbdird_crc_cmp0_0,
315 fbdird_crc_cmp0_1,
316 fbdird_crc_cmp1_0,
317 fbdird_crc_cmp1_1,
318 bd00,
319 bd01,
320 bd10,
321 bd11,
322 fbdic0_failover,
323 fbdic0_failover_l,
324 fbdic1_failover,
325 fbdic1_failover_l,
326 fbdic_rddata_vld,
327 fbdic_rddata_vld_l,
328 fbdic_ibrx_data_sel,
329 fbdic_ibrx_data_sel_l,
330 fbd0_data,
331 fbd1_data,
332 fbdic_idle_lfsr_reset,
333 fbdic_train_state,
334 fbdic_disable_state,
335 lndskw0_data,
336 lndskw1_data,
337 crcnd_crc0_0,
338 crcnd_crc0_1,
339 crcnd_crc1_0,
340 crcnd_crc1_1,
341 crcndf_crc0_0,
342 crcndf_crc0_1,
343 crcndf_crc1_0,
344 crcndf_crc1_1,
345 drif_single_channel_mode,
346 drl2clk,
347 scan_in,
348 scan_out,
349 tcu_pce_ov,
350 tcu_aclk,
351 tcu_bclk,
352 tcu_dectest,
353 tcu_muxtest,
354 tcu_scan_en);
355wire pce_ov;
356wire stop;
357wire siclk;
358wire soclk;
359wire test;
360wire muxtst;
361wire se;
362wire [11:0] fbdird_crc0_0;
363wire [11:0] fbdird_crcf0_0;
364wire [71:0] fbdird_data0_0;
365wire [11:0] crc_cmp0_0_actual;
366wire [11:0] crc_cmp0_0_expected;
367wire [11:0] fbdird_crc0_1;
368wire [11:0] fbdird_crcf0_1;
369wire [71:0] fbdird_data0_1;
370wire [11:0] crc_cmp0_1_actual;
371wire [11:0] crc_cmp0_1_expected;
372wire [11:0] fbdird_crc1_0;
373wire [11:0] fbdird_crcf1_0;
374wire [71:0] fbdird_data1_0;
375wire [11:0] crc_cmp1_0_actual;
376wire [11:0] crc_cmp1_0_expected;
377wire [11:0] fbdird_crc1_1;
378wire [11:0] fbdird_crcf1_1;
379wire [71:0] fbdird_data1_1;
380wire [11:0] crc_cmp1_1_actual;
381wire [11:0] crc_cmp1_1_expected;
382
383
384output [143:0] fbdird0_data;
385output [143:0] fbdird1_data;
386
387output [167:40] fbdird_ibrx_data;
388
389output fbdird_crc_cmp0_0;
390output fbdird_crc_cmp0_1;
391output fbdird_crc_cmp1_0;
392output fbdird_crc_cmp1_1;
393
394output [71:0] bd00;
395output [71:0] bd01;
396output [71:0] bd10;
397output [71:0] bd11;
398
399input fbdic0_failover;
400input fbdic0_failover_l;
401input fbdic1_failover;
402input fbdic1_failover_l;
403
404input fbdic_rddata_vld;
405input fbdic_rddata_vld_l;
406
407input fbdic_ibrx_data_sel;
408input fbdic_ibrx_data_sel_l;
409
410input [167:0] fbd0_data;
411input [167:0] fbd1_data;
412
413input fbdic_idle_lfsr_reset;
414
415input fbdic_train_state;
416input fbdic_disable_state;
417
418input [167:0] lndskw0_data;
419input [167:0] lndskw1_data;
420
421input [11:0] crcnd_crc0_0;
422input [11:0] crcnd_crc0_1;
423input [11:0] crcnd_crc1_0;
424input [11:0] crcnd_crc1_1;
425
426input [5:0] crcndf_crc0_0;
427input [5:0] crcndf_crc0_1;
428input [5:0] crcndf_crc1_0;
429input [5:0] crcndf_crc1_1;
430
431input drif_single_channel_mode;
432
433input drl2clk;
434input scan_in;
435output scan_out;
436input tcu_pce_ov;
437input tcu_aclk;
438input tcu_bclk;
439input tcu_dectest;
440input tcu_muxtest;
441input tcu_scan_en;
442
443assign pce_ov = tcu_pce_ov;
444assign stop = 1'b0;
445assign siclk = tcu_aclk;
446assign soclk = tcu_bclk;
447assign test = tcu_dectest;
448assign muxtst = tcu_muxtest;
449assign se = tcu_scan_en;
450
451assign scan_out = scan_in;
452
453// Channel 0 northbound data
454
455// Channel 0, Burst 0
456assign fbdird_crc0_0[11:0] = {lndskw0_data[144],lndskw0_data[145],lndskw0_data[146],lndskw0_data[147],lndskw0_data[148],
457 lndskw0_data[149],lndskw0_data[161:156]};
458assign fbdird_crcf0_0[11:0] = {6'h0,lndskw0_data[149:144]};
459assign fbdird_data0_0[71:0] = {lndskw0_data[137:132], lndskw0_data[125:120], lndskw0_data[113:108], lndskw0_data[101:96],
460 lndskw0_data[89:84], lndskw0_data[77:72], lndskw0_data[65:60], lndskw0_data[53:48],
461 lndskw0_data[41:36], lndskw0_data[29:24], lndskw0_data[17:12], lndskw0_data[5:0]};
462////csret 11/15/2004
463//assign crc_cmp0_0 = crc_cmp0_0_actual[11:0] == crc_cmp0_0_expected[11:0];
464mcu_fbdird_dp_cmp_macro__width_12 u_cmp_crc_cmp0 (
465 .din0 ( crc_cmp0_0_actual[11:0] ),
466 .din1 ( crc_cmp0_0_expected[11:0] ),
467 .dout ( fbdird_crc_cmp0_0 ));
468
469////csret 11/15/2004
470//assign crc_cmp0_0_actual[11:0] = fbdic_failover ? {6'h0,fbdird_crc0_0[5:0]} : fbdird_crc0_0[11:0];
471mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_act0 (
472 .dout ( crc_cmp0_0_actual[11:0] ),
473 .din0 ( fbdird_crc0_0[11:0] ),
474 .din1 ( fbdird_crcf0_0[11:0] ),
475 .sel0 ( fbdic0_failover_l ),
476 .sel1 ( fbdic0_failover ) );
477
478////csret 11/15/2004
479//assign crc_cmp0_0_expected[11:0] = fbdic_failover ? {6'h0,crcndf_crc0_0[5:0]} : crcnd_crc0_0[11:0];
480mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_exp0 (
481 .dout ( crc_cmp0_0_expected[11:0] ),
482 .din0 ( crcnd_crc0_0[11:0] ),
483 .din1 ( {6'h0,crcndf_crc0_0[5:0]} ),
484 .sel0 ( fbdic0_failover_l ),
485 .sel1 ( fbdic0_failover ) );
486
487assign bd00[71:0] = {
488 fbdird_data0_0[5], fbdird_data0_0[11], fbdird_data0_0[17], fbdird_data0_0[23], fbdird_data0_0[29], fbdird_data0_0[35],
489 fbdird_data0_0[41], fbdird_data0_0[47], fbdird_data0_0[53], fbdird_data0_0[59], fbdird_data0_0[65], fbdird_data0_0[71],
490 fbdird_data0_0[70], fbdird_data0_0[64], fbdird_data0_0[58], fbdird_data0_0[52], fbdird_data0_0[46], fbdird_data0_0[40],
491 fbdird_data0_0[34], fbdird_data0_0[28], fbdird_data0_0[22], fbdird_data0_0[16], fbdird_data0_0[10], fbdird_data0_0[4],
492 fbdird_data0_0[3], fbdird_data0_0[9], fbdird_data0_0[15], fbdird_data0_0[21], fbdird_data0_0[27], fbdird_data0_0[33],
493 fbdird_data0_0[39], fbdird_data0_0[45], fbdird_data0_0[51], fbdird_data0_0[57], fbdird_data0_0[63], fbdird_data0_0[69],
494 fbdird_data0_0[68], fbdird_data0_0[62], fbdird_data0_0[56], fbdird_data0_0[50], fbdird_data0_0[44], fbdird_data0_0[38],
495 fbdird_data0_0[32], fbdird_data0_0[26], fbdird_data0_0[20], fbdird_data0_0[14], fbdird_data0_0[8], fbdird_data0_0[2],
496 fbdird_data0_0[1], fbdird_data0_0[7], fbdird_data0_0[13], fbdird_data0_0[19], fbdird_data0_0[25], fbdird_data0_0[31],
497 fbdird_data0_0[37], fbdird_data0_0[43], fbdird_data0_0[49], fbdird_data0_0[55], fbdird_data0_0[61], fbdird_data0_0[67],
498 fbdird_data0_0[66], fbdird_data0_0[60], fbdird_data0_0[54], fbdird_data0_0[48], fbdird_data0_0[42], fbdird_data0_0[36],
499 fbdird_data0_0[30], fbdird_data0_0[24], fbdird_data0_0[18], fbdird_data0_0[12], fbdird_data0_0[6], fbdird_data0_0[0]};
500
501// Channel 0, Burst 1
502assign fbdird_crc0_1[11:0] = {lndskw0_data[150],lndskw0_data[151],lndskw0_data[152],lndskw0_data[153],lndskw0_data[154],
503 lndskw0_data[155],lndskw0_data[167:162]};
504assign fbdird_crcf0_1[11:0] = {6'h0,lndskw0_data[155:150]};
505assign fbdird_data0_1[71:0] = {lndskw0_data[143:138], lndskw0_data[131:126], lndskw0_data[119:114], lndskw0_data[107:102],
506 lndskw0_data[95:90], lndskw0_data[83:78], lndskw0_data[71:66], lndskw0_data[59:54],
507 lndskw0_data[47:42], lndskw0_data[35:30], lndskw0_data[23:18], lndskw0_data[11:6]};
508
509////csret 11/15/2004
510//assign crc_cmp0_1 = crc_cmp0_1_actual[11:0] == crc_cmp0_1_expected[11:0];
511mcu_fbdird_dp_cmp_macro__width_12 u_cmp_crc_cmp1 (
512 .din0 ( crc_cmp0_1_actual[11:0] ),
513 .din1 ( crc_cmp0_1_expected[11:0] ),
514 .dout ( fbdird_crc_cmp0_1 ));
515
516////csret 11/15/2004
517//assign crc_cmp0_1_actual[11:0] = fbdic_failover ? {6'h0,fbdird_crc0_1[5:0]} : fbdird_crc0_1[11:0];
518mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_act1 (
519 .dout ( crc_cmp0_1_actual[11:0] ),
520 .din0 ( fbdird_crc0_1[11:0] ),
521 .din1 ( fbdird_crcf0_1[11:0] ),
522 .sel0 ( fbdic0_failover_l ),
523 .sel1 ( fbdic0_failover ) );
524
525////csret 11/15/2004
526//assign crc_cmp0_1_expected[11:0] = fbdic_failover ? {6'h0,crcndf_crc0_1[5:0]} : crcnd_crc0_1[11:0];
527mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_exp1 (
528 .dout ( crc_cmp0_1_expected[11:0] ),
529 .din0 ( crcnd_crc0_1[11:0] ),
530 .din1 ( {6'h0,crcndf_crc0_1[5:0]} ),
531 .sel0 ( fbdic0_failover_l ),
532 .sel1 ( fbdic0_failover ) );
533
534assign bd01[71:0] = {
535 fbdird_data0_1[5], fbdird_data0_1[11], fbdird_data0_1[17], fbdird_data0_1[23], fbdird_data0_1[29], fbdird_data0_1[35],
536 fbdird_data0_1[41], fbdird_data0_1[47], fbdird_data0_1[53], fbdird_data0_1[59], fbdird_data0_1[65], fbdird_data0_1[71],
537 fbdird_data0_1[70], fbdird_data0_1[64], fbdird_data0_1[58], fbdird_data0_1[52], fbdird_data0_1[46], fbdird_data0_1[40],
538 fbdird_data0_1[34], fbdird_data0_1[28], fbdird_data0_1[22], fbdird_data0_1[16], fbdird_data0_1[10], fbdird_data0_1[4],
539 fbdird_data0_1[3], fbdird_data0_1[9], fbdird_data0_1[15], fbdird_data0_1[21], fbdird_data0_1[27], fbdird_data0_1[33],
540 fbdird_data0_1[39], fbdird_data0_1[45], fbdird_data0_1[51], fbdird_data0_1[57], fbdird_data0_1[63], fbdird_data0_1[69],
541 fbdird_data0_1[68], fbdird_data0_1[62], fbdird_data0_1[56], fbdird_data0_1[50], fbdird_data0_1[44], fbdird_data0_1[38],
542 fbdird_data0_1[32], fbdird_data0_1[26], fbdird_data0_1[20], fbdird_data0_1[14], fbdird_data0_1[8], fbdird_data0_1[2],
543 fbdird_data0_1[1], fbdird_data0_1[7], fbdird_data0_1[13], fbdird_data0_1[19], fbdird_data0_1[25], fbdird_data0_1[31],
544 fbdird_data0_1[37], fbdird_data0_1[43], fbdird_data0_1[49], fbdird_data0_1[55], fbdird_data0_1[61], fbdird_data0_1[67],
545 fbdird_data0_1[66], fbdird_data0_1[60], fbdird_data0_1[54], fbdird_data0_1[48], fbdird_data0_1[42], fbdird_data0_1[36],
546 fbdird_data0_1[30], fbdird_data0_1[24], fbdird_data0_1[18], fbdird_data0_1[12], fbdird_data0_1[6], fbdird_data0_1[0]};
547
548// Channel 1 northbound data
549
550// Channel 1, Burst 0
551assign fbdird_crc1_0[11:0] = {lndskw1_data[144],lndskw1_data[145],lndskw1_data[146],lndskw1_data[147],lndskw1_data[148],
552 lndskw1_data[149],lndskw1_data[161:156]};
553assign fbdird_crcf1_0[11:0] = {6'h0,lndskw1_data[149:144]};
554assign fbdird_data1_0[71:0] = {lndskw1_data[137:132], lndskw1_data[125:120], lndskw1_data[113:108], lndskw1_data[101:96],
555 lndskw1_data[89:84], lndskw1_data[77:72], lndskw1_data[65:60], lndskw1_data[53:48],
556 lndskw1_data[41:36], lndskw1_data[29:24], lndskw1_data[17:12], lndskw1_data[5:0]};
557
558////csret 11/15/2004
559//assign crc_cmp1_0 = crc_cmp1_0_actual[11:0] == crc_cmp1_0_expected[11:0];
560mcu_fbdird_dp_cmp_macro__width_12 u_cmp_crc_cmp10 (
561 .din0 ( crc_cmp1_0_actual[11:0] ),
562 .din1 ( crc_cmp1_0_expected[11:0] ),
563 .dout ( fbdird_crc_cmp1_0 ));
564
565////csret 11/15/2004
566//assign crc_cmp1_0_actual[11:0] = fbdic_failover ? {6'h0,fbdird_crc1_0[5:0]} : fbdird_crc1_0[11:0];
567mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_act10 (
568 .dout ( crc_cmp1_0_actual[11:0] ),
569 .din0 ( fbdird_crc1_0[11:0] ),
570 .din1 ( fbdird_crcf1_0[11:0] ),
571 .sel0 ( fbdic1_failover_l ),
572 .sel1 ( fbdic1_failover ) );
573
574////csret 11/15/2004
575//assign crc_cmp1_0_expected[11:0] = fbdic_failover ? {6'h0,crcndf_crc1_0[5:0]} : crcnd_crc1_0[11:0];
576mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_exp10 (
577 .dout ( crc_cmp1_0_expected[11:0] ),
578 .din0 ( crcnd_crc1_0[11:0] ),
579 .din1 ( {6'h0,crcndf_crc1_0[5:0]} ),
580 .sel0 ( fbdic1_failover_l ),
581 .sel1 ( fbdic1_failover ) );
582
583assign bd10[71:0] = {
584 fbdird_data1_0[5], fbdird_data1_0[11], fbdird_data1_0[17], fbdird_data1_0[23], fbdird_data1_0[29], fbdird_data1_0[35],
585 fbdird_data1_0[41], fbdird_data1_0[47], fbdird_data1_0[53], fbdird_data1_0[59], fbdird_data1_0[65], fbdird_data1_0[71],
586 fbdird_data1_0[70], fbdird_data1_0[64], fbdird_data1_0[58], fbdird_data1_0[52], fbdird_data1_0[46], fbdird_data1_0[40],
587 fbdird_data1_0[34], fbdird_data1_0[28], fbdird_data1_0[22], fbdird_data1_0[16], fbdird_data1_0[10], fbdird_data1_0[4],
588 fbdird_data1_0[3], fbdird_data1_0[9], fbdird_data1_0[15], fbdird_data1_0[21], fbdird_data1_0[27], fbdird_data1_0[33],
589 fbdird_data1_0[39], fbdird_data1_0[45], fbdird_data1_0[51], fbdird_data1_0[57], fbdird_data1_0[63], fbdird_data1_0[69],
590 fbdird_data1_0[68], fbdird_data1_0[62], fbdird_data1_0[56], fbdird_data1_0[50], fbdird_data1_0[44], fbdird_data1_0[38],
591 fbdird_data1_0[32], fbdird_data1_0[26], fbdird_data1_0[20], fbdird_data1_0[14], fbdird_data1_0[8], fbdird_data1_0[2],
592 fbdird_data1_0[1], fbdird_data1_0[7], fbdird_data1_0[13], fbdird_data1_0[19], fbdird_data1_0[25], fbdird_data1_0[31],
593 fbdird_data1_0[37], fbdird_data1_0[43], fbdird_data1_0[49], fbdird_data1_0[55], fbdird_data1_0[61], fbdird_data1_0[67],
594 fbdird_data1_0[66], fbdird_data1_0[60], fbdird_data1_0[54], fbdird_data1_0[48], fbdird_data1_0[42], fbdird_data1_0[36],
595 fbdird_data1_0[30], fbdird_data1_0[24], fbdird_data1_0[18], fbdird_data1_0[12], fbdird_data1_0[6], fbdird_data1_0[0]};
596
597// Channel 1, Burst 1
598
599assign fbdird_crc1_1[11:0] = {lndskw1_data[150],lndskw1_data[151],lndskw1_data[152],lndskw1_data[153],lndskw1_data[154],
600 lndskw1_data[155],lndskw1_data[167:162]};
601assign fbdird_crcf1_1[11:0] = {6'h0,lndskw1_data[155:150]};
602assign fbdird_data1_1[71:0] = {lndskw1_data[143:138], lndskw1_data[131:126], lndskw1_data[119:114], lndskw1_data[107:102],
603 lndskw1_data[95:90], lndskw1_data[83:78], lndskw1_data[71:66], lndskw1_data[59:54],
604 lndskw1_data[47:42], lndskw1_data[35:30], lndskw1_data[23:18], lndskw1_data[11:6]};
605
606////csret 11/15/2004
607//assign crc_cmp1_1 = crc_cmp1_1_actual[11:0] == crc_cmp1_1_expected[11:0];
608mcu_fbdird_dp_cmp_macro__width_12 u_cmp_crc_cmp11 (
609 .din0 ( crc_cmp1_1_actual[11:0] ),
610 .din1 ( crc_cmp1_1_expected[11:0] ),
611 .dout ( fbdird_crc_cmp1_1 ));
612
613////csret 11/15/2004
614//assign crc_cmp1_1_actual[11:0] = fbdic_failover ? {6'h0,fbdird_crc1_1[5:0]} : fbdird_crc1_1[11:0];
615mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_act11 (
616 .dout ( crc_cmp1_1_actual[11:0] ),
617 .din0 ( fbdird_crc1_1[11:0] ),
618 .din1 ( fbdird_crcf1_1[11:0] ),
619 .sel0 ( fbdic1_failover_l ),
620 .sel1 ( fbdic1_failover ) );
621
622////csret 11/15/2004
623//assign crc_cmp1_1_expected[11:0] = fbdic_failover ? {6'h0,crcndf_crc1_1[5:0]} : crcnd_crc1_1[11:0];
624mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 u_mux_crc_cmp_exp11 (
625 .dout ( crc_cmp1_1_expected[11:0] ),
626 .din0 ( crcnd_crc1_1[11:0] ),
627 .din1 ( {6'h0,crcndf_crc1_1[5:0]} ),
628 .sel0 ( fbdic1_failover_l ),
629 .sel1 ( fbdic1_failover ) );
630
631assign bd11[71:0] = {
632 fbdird_data1_1[5], fbdird_data1_1[11], fbdird_data1_1[17], fbdird_data1_1[23], fbdird_data1_1[29], fbdird_data1_1[35],
633 fbdird_data1_1[41], fbdird_data1_1[47], fbdird_data1_1[53], fbdird_data1_1[59], fbdird_data1_1[65], fbdird_data1_1[71],
634 fbdird_data1_1[70], fbdird_data1_1[64], fbdird_data1_1[58], fbdird_data1_1[52], fbdird_data1_1[46], fbdird_data1_1[40],
635 fbdird_data1_1[34], fbdird_data1_1[28], fbdird_data1_1[22], fbdird_data1_1[16], fbdird_data1_1[10], fbdird_data1_1[4],
636 fbdird_data1_1[3], fbdird_data1_1[9], fbdird_data1_1[15], fbdird_data1_1[21], fbdird_data1_1[27], fbdird_data1_1[33],
637 fbdird_data1_1[39], fbdird_data1_1[45], fbdird_data1_1[51], fbdird_data1_1[57], fbdird_data1_1[63], fbdird_data1_1[69],
638 fbdird_data1_1[68], fbdird_data1_1[62], fbdird_data1_1[56], fbdird_data1_1[50], fbdird_data1_1[44], fbdird_data1_1[38],
639 fbdird_data1_1[32], fbdird_data1_1[26], fbdird_data1_1[20], fbdird_data1_1[14], fbdird_data1_1[8], fbdird_data1_1[2],
640 fbdird_data1_1[1], fbdird_data1_1[7], fbdird_data1_1[13], fbdird_data1_1[19], fbdird_data1_1[25], fbdird_data1_1[31],
641 fbdird_data1_1[37], fbdird_data1_1[43], fbdird_data1_1[49], fbdird_data1_1[55], fbdird_data1_1[61], fbdird_data1_1[67],
642 fbdird_data1_1[66], fbdird_data1_1[60], fbdird_data1_1[54], fbdird_data1_1[48], fbdird_data1_1[42], fbdird_data1_1[36],
643 fbdird_data1_1[30], fbdird_data1_1[24], fbdird_data1_1[18], fbdird_data1_1[12], fbdird_data1_1[6], fbdird_data1_1[0]};
644
645// data to readdp blocks
646mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_16 u_mux_fbdird0_data_143_128 (
647 .din0({16{1'b0}}),
648 .din1(fbdird_data0_0[71:56]),
649 .din2(fbdird_data0_0[71:56]),
650 .sel0(fbdic_rddata_vld_l),
651 .sel1(drif_single_channel_mode),
652 .dout(fbdird0_data[143:128]),
653 .muxtst(muxtst),
654 .test(test));
655mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_64 u_mux_fbdird0_data_127_64 (
656 .din0({64{1'b0}}),
657 .din1({fbdird_data0_0[55:0],fbdird_data0_1[71:64]}),
658 .din2({fbdird_data0_0[55:0],fbdird_data1_0[71:64]}),
659 .sel0(fbdic_rddata_vld_l),
660 .sel1(drif_single_channel_mode),
661 .dout(fbdird0_data[127:64]),
662 .muxtst(muxtst),
663 .test(test));
664mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_64 u_mux_fbdird0_data_63_0 (
665 .din0({64{1'b0}}),
666 .din1(fbdird_data0_1[63:0]),
667 .din2(fbdird_data1_0[63:0]),
668 .sel0(fbdic_rddata_vld_l),
669 .sel1(drif_single_channel_mode),
670 .dout(fbdird0_data[63:0]),
671 .muxtst(muxtst),
672 .test(test));
673
674// if in single channel mode, send data0 bits to readdp1 also
675mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_16 u_mux_fbdird1_data_143_128 (
676 .din0({16{1'b0}}),
677 .din1(fbdird_data0_0[71:56]),
678 .din2(fbdird_data0_1[71:56]),
679 .sel0(fbdic_rddata_vld_l),
680 .sel1(drif_single_channel_mode),
681 .dout(fbdird1_data[143:128]),
682 .muxtst(muxtst),
683 .test(test));
684mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_64 u_mux_fbdird1_data_127_64 (
685 .din0({64{1'b0}}),
686 .din1({fbdird_data0_0[55:0],fbdird_data0_1[71:64]}),
687 .din2({fbdird_data0_1[55:0],fbdird_data1_1[71:64]}),
688 .sel0(fbdic_rddata_vld_l),
689 .sel1(drif_single_channel_mode),
690 .dout(fbdird1_data[127:64]),
691 .muxtst(muxtst),
692 .test(test));
693mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_64 u_mux_fbdird1_data_63_0 (
694 .din0({64{1'b0}}),
695 .din1(fbdird_data0_1[63:0]),
696 .din2(fbdird_data1_1[63:0]),
697 .sel0(fbdic_rddata_vld_l),
698 .sel1(drif_single_channel_mode),
699 .dout(fbdird1_data[63:0]),
700 .muxtst(muxtst),
701 .test(test));
702
703// Mux for IBIST data
704mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_64 u_mux_ibist_167_104 (
705 .din0(lndskw0_data[167:104]),
706 .din1(lndskw1_data[167:104]),
707 .sel0(fbdic_ibrx_data_sel_l),
708 .sel1(fbdic_ibrx_data_sel),
709 .dout(fbdird_ibrx_data[167:104]));
710
711mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_64 u_mux_ibist_103_40 (
712 .din0(lndskw0_data[103:40]),
713 .din1(lndskw1_data[103:40]),
714 .sel0(fbdic_ibrx_data_sel_l),
715 .sel1(fbdic_ibrx_data_sel),
716 .dout(fbdird_ibrx_data[103:40]));
717
718endmodule
719
720
721//
722// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
723//
724//
725
726
727
728
729
730module mcu_fbdird_dp_cmp_macro__width_12 (
731 din0,
732 din1,
733 dout);
734 input [11:0] din0;
735 input [11:0] din1;
736 output dout;
737
738
739
740
741
742
743cmp #(12) m0_0 (
744.in0(din0[11:0]),
745.in1(din1[11:0]),
746.out(dout)
747);
748
749
750
751
752
753
754
755
756
757
758endmodule
759
760
761
762
763
764// general mux macro for pass-gate and and-or muxes with/wout priority encoders
765// also for pass-gate with decoder
766
767
768
769
770
771// any PARAMS parms go into naming of macro
772
773module mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_12 (
774 din0,
775 sel0,
776 din1,
777 sel1,
778 dout);
779wire buffout0;
780wire buffout1;
781
782 input [11:0] din0;
783 input sel0;
784 input [11:0] din1;
785 input sel1;
786 output [11:0] dout;
787
788
789
790
791
792cl_dp1_muxbuff2_8x c0_0 (
793 .in0(sel0),
794 .in1(sel1),
795 .out0(buffout0),
796 .out1(buffout1)
797);
798mux2s #(12) d0_0 (
799 .sel0(buffout0),
800 .sel1(buffout1),
801 .in0(din0[11:0]),
802 .in1(din1[11:0]),
803.dout(dout[11:0])
804);
805
806
807
808
809
810
811
812
813
814
815
816
817
818endmodule
819
820
821// general mux macro for pass-gate and and-or muxes with/wout priority encoders
822// also for pass-gate with decoder
823
824
825
826
827
828// any PARAMS parms go into naming of macro
829
830module mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_16 (
831 din0,
832 din1,
833 din2,
834 sel0,
835 sel1,
836 muxtst,
837 test,
838 dout);
839wire psel0;
840wire psel1;
841wire psel2;
842
843 input [15:0] din0;
844 input [15:0] din1;
845 input [15:0] din2;
846 input sel0;
847 input sel1;
848 input muxtst;
849 input test;
850 output [15:0] dout;
851
852
853
854
855
856cl_dp1_penc3_8x c0_0 (
857 .sel0(sel0),
858 .sel1(sel1),
859 .psel0(psel0),
860 .psel1(psel1),
861 .psel2(psel2),
862 .test(test)
863);
864
865mux3 #(16) d0_0 (
866 .sel0(psel0),
867 .sel1(psel1),
868 .sel2(psel2),
869 .in0(din0[15:0]),
870 .in1(din1[15:0]),
871 .in2(din2[15:0]),
872.dout(dout[15:0]),
873 .muxtst(muxtst)
874);
875
876
877
878
879
880
881
882
883
884
885
886
887
888endmodule
889
890
891// general mux macro for pass-gate and and-or muxes with/wout priority encoders
892// also for pass-gate with decoder
893
894
895
896
897
898// any PARAMS parms go into naming of macro
899
900module mcu_fbdird_dp_mux_macro__mux_pgpe__ports_3__width_64 (
901 din0,
902 din1,
903 din2,
904 sel0,
905 sel1,
906 muxtst,
907 test,
908 dout);
909wire psel0;
910wire psel1;
911wire psel2;
912
913 input [63:0] din0;
914 input [63:0] din1;
915 input [63:0] din2;
916 input sel0;
917 input sel1;
918 input muxtst;
919 input test;
920 output [63:0] dout;
921
922
923
924
925
926cl_dp1_penc3_8x c0_0 (
927 .sel0(sel0),
928 .sel1(sel1),
929 .psel0(psel0),
930 .psel1(psel1),
931 .psel2(psel2),
932 .test(test)
933);
934
935mux3 #(64) d0_0 (
936 .sel0(psel0),
937 .sel1(psel1),
938 .sel2(psel2),
939 .in0(din0[63:0]),
940 .in1(din1[63:0]),
941 .in2(din2[63:0]),
942.dout(dout[63:0]),
943 .muxtst(muxtst)
944);
945
946
947
948
949
950
951
952
953
954
955
956
957
958endmodule
959
960
961// general mux macro for pass-gate and and-or muxes with/wout priority encoders
962// also for pass-gate with decoder
963
964
965
966
967
968// any PARAMS parms go into naming of macro
969
970module mcu_fbdird_dp_mux_macro__mux_aonpe__ports_2__width_64 (
971 din0,
972 sel0,
973 din1,
974 sel1,
975 dout);
976wire buffout0;
977wire buffout1;
978
979 input [63:0] din0;
980 input sel0;
981 input [63:0] din1;
982 input sel1;
983 output [63:0] dout;
984
985
986
987
988
989cl_dp1_muxbuff2_8x c0_0 (
990 .in0(sel0),
991 .in1(sel1),
992 .out0(buffout0),
993 .out1(buffout1)
994);
995mux2s #(64) d0_0 (
996 .sel0(buffout0),
997 .sel1(buffout1),
998 .in0(din0[63:0]),
999 .in1(din1[63:0]),
1000.dout(dout[63:0])
1001);
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015endmodule
1016