Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: dmu_ilu.v | |
4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
6 | // | |
7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
8 | // | |
9 | // This program is free software; you can redistribute it and/or modify | |
10 | // it under the terms of the GNU General Public License as published by | |
11 | // the Free Software Foundation; version 2 of the License. | |
12 | // | |
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | // | |
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | // | |
22 | // For the avoidance of doubt, and except that if any non-GPL license | |
23 | // choice is available it will apply instead, Sun elects to use only | |
24 | // the General Public License version 2 (GPLv2) at this time for any | |
25 | // software where a choice of GPL license versions is made | |
26 | // available with the language indicating that GPLv2 or any later version | |
27 | // may be used, or where a choice of which version of the GPL is applied is | |
28 | // otherwise unspecified. | |
29 | // | |
30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
31 | // CA 95054 USA or visit www.sun.com if you need additional information or | |
32 | // have any questions. | |
33 | // | |
34 | // ========== Copyright Header End ============================================ | |
35 | module dmu_ilu ( | |
36 | ||
37 | // ilu <-> dmu-tmu | |
38 | // ilu <-> dmu misc | |
39 | // data path | |
40 | // CSR ring | |
41 | // clocks to IHB, IDB, EHB, EDB | |
42 | // spares | |
43 | // ilu <-> tlu | |
44 | d2p_csr_ack, | |
45 | d2p_csr_req, | |
46 | d2p_csr_rcd, | |
47 | d2p_cto_ack, | |
48 | // d2p_drain, | |
49 | d2p_ech_wptr, | |
50 | d2p_edb_data, | |
51 | d2p_edb_dpar, | |
52 | d2p_edb_we, | |
53 | d2p_edb_addr, | |
54 | d2p_ehb_data, | |
55 | d2p_ehb_dpar, | |
56 | d2p_ehb_we, | |
57 | d2p_ehb_addr, | |
58 | d2p_erh_wptr, | |
59 | d2p_ibc_nhc, | |
60 | d2p_ibc_pdc, | |
61 | d2p_ibc_phc, | |
62 | d2p_ibc_req, | |
63 | d2p_idb_addr, | |
64 | d2p_ihb_addr, | |
65 | d2p_spare, | |
66 | ||
67 | l1clk, | |
68 | rst_wmr_, | |
69 | j2d_rst_l, | |
70 | j2d_por_l, | |
71 | rst_dmu_async_por_, | |
72 | ||
73 | j2d_instance_id, | |
74 | ||
75 | k2y_buf_addr, | |
76 | k2y_buf_addr_vld_monitor, | |
77 | k2y_buf_data, | |
78 | k2y_buf_dpar, | |
79 | k2y_csr_ring_out, | |
80 | k2y_dbg_sel_a, | |
81 | k2y_dbg_sel_b, | |
82 | k2y_dou_dptr, | |
83 | k2y_dou_err, | |
84 | k2y_dou_vld, | |
85 | k2y_rcd, | |
86 | k2y_rcd_deq, | |
87 | k2y_rcd_enq, | |
88 | k2y_rel_enq, | |
89 | k2y_rel_rcd, | |
90 | ||
91 | p2d_ce_int, | |
92 | p2d_csr_ack, | |
93 | p2d_csr_req, | |
94 | p2d_csr_rcd, | |
95 | p2d_cto_req, | |
96 | p2d_cto_tag, | |
97 | p2d_drain, | |
98 | p2d_ecd_rptr, | |
99 | p2d_ech_rptr, | |
100 | p2d_erd_rptr, | |
101 | p2d_erh_rptr, | |
102 | p2d_ibc_ack, | |
103 | p2d_idb_data, | |
104 | p2d_idb_dpar, | |
105 | p2d_ihb_data, | |
106 | p2d_ihb_dpar, | |
107 | d2p_ihb_rd, | |
108 | p2d_ihb_wptr, | |
109 | p2d_mps, | |
110 | p2d_oe_int, | |
111 | p2d_spare, | |
112 | p2d_ue_int, | |
113 | ||
114 | y2k_buf_addr, | |
115 | y2k_buf_addr_vld_monitor, | |
116 | y2k_buf_data, | |
117 | y2k_buf_dpar, | |
118 | y2k_csr_ring_in, | |
119 | y2k_dbg_a, | |
120 | y2k_dbg_b, | |
121 | y2k_int_l, | |
122 | y2k_mps, | |
123 | ||
124 | y2k_rcd, | |
125 | y2k_rcd_deq, | |
126 | y2k_rcd_enq, | |
127 | y2k_rel_enq, | |
128 | y2k_rel_rcd, | |
129 | dmu_psr_rate_scale, | |
130 | dmu_psr_pll_en_sds0, | |
131 | dmu_psr_pll_en_sds1, | |
132 | dmu_psr_rx_en_b0_sds0, | |
133 | dmu_psr_rx_en_b1_sds0, | |
134 | dmu_psr_rx_en_b2_sds0, | |
135 | dmu_psr_rx_en_b3_sds0, | |
136 | dmu_psr_rx_en_b0_sds1, | |
137 | dmu_psr_rx_en_b1_sds1, | |
138 | dmu_psr_rx_en_b2_sds1, | |
139 | dmu_psr_rx_en_b3_sds1, | |
140 | dmu_psr_tx_en_b0_sds0, | |
141 | dmu_psr_tx_en_b1_sds0, | |
142 | dmu_psr_tx_en_b2_sds0, | |
143 | dmu_psr_tx_en_b3_sds0, | |
144 | dmu_psr_tx_en_b0_sds1, | |
145 | dmu_psr_tx_en_b1_sds1, | |
146 | dmu_psr_tx_en_b2_sds1, | |
147 | dmu_psr_tx_en_b3_sds1, | |
148 | tcu_test_protect, | |
149 | il2cl_gr_16 | |
150 | ||
151 | ); | |
152 | ||
153 | ||
154 | ||
155 | //synopsys sync_set_reset "j2d_por_l" | |
156 | ||
157 | // >>>>>>>>>>>>>>>>>>>>>>>>> Port Declarations <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |
158 | ||
159 | //------------------------------------------------------------------------ | |
160 | // Clock and Reset Signals | |
161 | //------------------------------------------------------------------------ | |
162 | input l1clk; // input clock | |
163 | input rst_wmr_; // raw warm reset for serdes rate logic 11/10/05 | |
164 | input j2d_por_l; // input soft reset | |
165 | input j2d_rst_l; // input hard reset | |
166 | input rst_dmu_async_por_; // non_clocked async assertion, cmp clk deassertion | |
167 | ||
168 | input [`FIRE_J2D_INSTANCE_ID_WDTH-1:0] j2d_instance_id; | |
169 | ||
170 | ||
171 | //------------------------------------------------------------------------ | |
172 | // IHB and IHB management interface | |
173 | //------------------------------------------------------------------------ | |
174 | input [`FIRE_P2D_IHB_WPTR_WDTH-1:0] p2d_ihb_wptr; // gray-coded IHB write pointer | |
175 | input [`FIRE_IHB_REC_WDTH-1:0] p2d_ihb_data; // TLP header record | |
176 | output [`FIRE_D2P_IHB_ADDR_WDTH-1:0] d2p_ihb_addr; // binary read pointer to IHB | |
177 | input [`FIRE_P2D_IHB_DPAR_WDTH-1:0] p2d_ihb_dpar; // TLP header record parity | |
178 | output d2p_ihb_rd; // rd ihb header ram in peu, | |
179 | // requested by circuits | |
180 | ||
181 | //------------------------------------------------------------------------ | |
182 | // IDB interface | |
183 | //------------------------------------------------------------------------ | |
184 | output [`FIRE_D2P_IDB_ADDR_WDTH-1:0] d2p_idb_addr; // binary read pointer to IDB | |
185 | input [`FIRE_P2D_IDB_DATA_WDTH-1:0] p2d_idb_data; // 16-byte data | |
186 | input [`FIRE_P2D_IDB_DPAR_WDTH-1:0] p2d_idb_dpar; // data parity | |
187 | ||
188 | //------------------------------------------------------------------------ | |
189 | // PCIE FC credits interface to TLU | |
190 | //------------------------------------------------------------------------ | |
191 | output d2p_ibc_req; // request for ingress buffer credits | |
192 | input p2d_ibc_ack; // ack for ingress buffer credits | |
193 | output [`FIRE_D2P_IBC_NHC_WDTH-1:0] d2p_ibc_nhc; // PCIE FC NPH credits | |
194 | output [`FIRE_D2P_IBC_PHC_WDTH-1:0] d2p_ibc_phc; // PCIE FC PH credits | |
195 | output [`FIRE_D2P_IBC_PDC_WDTH-1:0] d2p_ibc_pdc; // PCIE FC PD credits | |
196 | ||
197 | //------------------------------------------------------------------------ | |
198 | // cto interface - PIO completion time out | |
199 | //------------------------------------------------------------------------ | |
200 | input p2d_cto_req; // cto request from TLU | |
201 | input [`FIRE_P2D_CTO_TAG_WDTH-1:0] p2d_cto_tag; // cto tag | |
202 | output d2p_cto_ack; // cto ack back | |
203 | ||
204 | //------------------------------------------------------------------------ | |
205 | // buffer management interface | |
206 | //------------------------------------------------------------------------ | |
207 | output [`FIRE_D2P_ECH_WPTR_WDTH-1:0] d2p_ech_wptr; // gray-coded cpl-buffer in EHB write pointer | |
208 | input [`FIRE_P2D_ECH_RPTR_WDTH-1:0] p2d_ech_rptr; // gray-coded cpl-buffer in EHB read pointer | |
209 | output [`FIRE_D2P_ERH_WPTR_WDTH-1:0] d2p_erh_wptr; // gray-coded req-buffer in EHB write pointer | |
210 | input [`FIRE_P2D_ERH_RPTR_WDTH-1:0] p2d_erh_rptr; // gray-coded req-buffer in EHB read pointer | |
211 | input [`FIRE_P2D_ECD_RPTR_WDTH-1:0] p2d_ecd_rptr; // gray-coded EDB DMA Cpl buffer read pointer | |
212 | input [`FIRE_P2D_ERD_RPTR_WDTH-1:0] p2d_erd_rptr; // gray-coded EDB PIO Wr buffer read pointer | |
213 | ||
214 | //------------------------------------------------------------------------ | |
215 | // EHB interface | |
216 | //------------------------------------------------------------------------ | |
217 | ||
218 | output d2p_ehb_we; // EHB write stroke | |
219 | output [`FIRE_D2P_EHB_ADDR_WDTH-1:0] d2p_ehb_addr; // EHB write pointer | |
220 | output [`FIRE_EHB_REC_WDTH-1:0] d2p_ehb_data; // EHB record | |
221 | output [`FIRE_D2P_EHB_DPAR_WDTH-1:0] d2p_ehb_dpar; // EHB word parity for header rcd | |
222 | ||
223 | //------------------------------------------------------------------------ | |
224 | // EDB interface | |
225 | //------------------------------------------------------------------------ | |
226 | output d2p_edb_we; // EDB write stroke | |
227 | output [`FIRE_D2P_EDB_ADDR_WDTH-1:0] d2p_edb_addr; // EDB write pointer | |
228 | output [`FIRE_D2P_EDB_DATA_WDTH-1:0] d2p_edb_data; // EDB payload | |
229 | output [`FIRE_D2P_EDB_DPAR_WDTH-1:0] d2p_edb_dpar; // EDB word parity for payload | |
230 | ||
231 | //------------------------------------------------------------------------ | |
232 | // drain and misc. interface | |
233 | //------------------------------------------------------------------------ | |
234 | // output d2p_drain; // drain signal to TLU | |
235 | input p2d_drain; // drain signal from TLU | |
236 | input [`FIRE_P2D_MPS_WDTH-1:0] p2d_mps; // max. payld size | |
237 | input p2d_ue_int; // uncorrectable error | |
238 | input p2d_ce_int; // correctable error | |
239 | input p2d_oe_int; // other error | |
240 | ||
241 | //------------------------------------------------------------------------ | |
242 | // data path - | |
243 | // note: k2y_buf_addr_vld_monitor & y2k_buf_addr_vld_monitor are added | |
244 | // for the use in DMU-ILU monitor only | |
245 | //------------------------------------------------------------------------ | |
246 | input k2y_buf_addr_vld_monitor; | |
247 | input [`FIRE_DLC_ITI_ADDR_WDTH-1:0] k2y_buf_addr; // read pointer to IDB | |
248 | output [`FIRE_DLC_ITI_DATA_WDTH-1:0] y2k_buf_data; // 16-byte data | |
249 | output [`FIRE_DLC_ITI_DPAR_WDTH-1:0] y2k_buf_dpar; // data parity | |
250 | output y2k_buf_addr_vld_monitor; | |
251 | output [`FIRE_DLC_ERD_ADDR_WDTH-1:0] y2k_buf_addr; // read address to DOU | |
252 | input [`FIRE_DLC_ERD_DATA_WDTH-1:0] k2y_buf_data; // payload | |
253 | input [`FIRE_DLC_ERD_DPAR_WDTH-1:0] k2y_buf_dpar; // word parity for the payload | |
254 | // | |
255 | //------------------------------------------------------------------------ | |
256 | // record interface to TMU | |
257 | //------------------------------------------------------------------------ | |
258 | input k2y_rcd_deq; // ingress record fifo dequeue | |
259 | output [`FIRE_DLC_IPE_REC_WDTH-1:0] y2k_rcd; // ingress PEC record | |
260 | output y2k_rcd_enq; // ingress PEC record enqueue | |
261 | input [`FIRE_DLC_EPE_REC_WDTH-1:0] k2y_rcd; // egress PEC rcd | |
262 | input k2y_rcd_enq; // egress enqueue for PEC rcd | |
263 | output y2k_rcd_deq; // egress rcd fifo dequeue | |
264 | ||
265 | //------------------------------------------------------------------------ | |
266 | // release interface with TMU | |
267 | //------------------------------------------------------------------------ | |
268 | input [`FIRE_DLC_URR_REC_WDTH-1:0] k2y_rel_rcd; // ingress 1 PCIE FC data credit (16-byte data) w/ d_ptr | |
269 | input k2y_rel_enq; // ingress enqueue for release record | |
270 | output [`FIRE_DLC_DRR_REC_WDTH-1:0] y2k_rel_rcd; // egress release rcd | |
271 | output y2k_rel_enq; // egress enqueue for release rcd | |
272 | ||
273 | //------------------------------------------------------------------------ | |
274 | // DOU DMA Rd Cpl Buffer status rcd interface with CLU | |
275 | //------------------------------------------------------------------------ | |
276 | input [`FIRE_DLC_DOU_DPTR_WDTH-1:0] k2y_dou_dptr; | |
277 | input k2y_dou_err; | |
278 | input k2y_dou_vld; | |
279 | ||
280 | //------------------------------------------------------------------------ | |
281 | // DMU misc. interface | |
282 | //------------------------------------------------------------------------ | |
283 | output [`FIRE_DLC_MPS-1:0] y2k_mps; // max. payld size to CMU | |
284 | output y2k_int_l; // interrupt req to IMU | |
285 | ||
286 | //------------------------------------------------------------------------ | |
287 | // CSR ring to DMU | |
288 | //------------------------------------------------------------------------ | |
289 | input [`FIRE_CSR_RING_WIDTH-1:0] k2y_csr_ring_out; | |
290 | output [`FIRE_CSR_RING_WIDTH-1:0] y2k_csr_ring_in; | |
291 | ||
292 | //------------------------------------------------------------------------ | |
293 | // CSR ring to TLU | |
294 | //------------------------------------------------------------------------ | |
295 | output d2p_csr_req; | |
296 | input p2d_csr_ack; | |
297 | output [`FIRE_D2P_CSR_RING_WDTH-1:0] d2p_csr_rcd; | |
298 | input p2d_csr_req; | |
299 | output d2p_csr_ack; | |
300 | input [`FIRE_P2D_CSR_RING_WDTH-1:0] p2d_csr_rcd; | |
301 | ||
302 | //------------------------------------------------------------------------ | |
303 | // clocks to IHB, IDB, EHB, EDB | |
304 | //------------------------------------------------------------------------ | |
305 | ||
306 | //------------------------------------------------------------------------ | |
307 | // debug ports | |
308 | //------------------------------------------------------------------------ | |
309 | input [`FIRE_DLC_DEBUG_SEL_WDTH-1:0] k2y_dbg_sel_a; | |
310 | input [`FIRE_DLC_DEBUG_SEL_WDTH-1:0] k2y_dbg_sel_b; | |
311 | output [`FIRE_DEBUG_WDTH-1:0] y2k_dbg_a; | |
312 | output [`FIRE_DEBUG_WDTH-1:0] y2k_dbg_b; | |
313 | ||
314 | //------------------------------------------------------------------------ | |
315 | // spares | |
316 | //------------------------------------------------------------------------ | |
317 | input [`FIRE_P2D_SPARE_WDTH-1:0] p2d_spare; | |
318 | output [`FIRE_D2P_SPARE_WDTH-1:0] d2p_spare; | |
319 | ||
320 | //------------------------------------------------------------------------ | |
321 | // to PEU for pll-enable, tx-lane-enable and rx-lane-enables | |
322 | //------------------------------------------------------------------------ | |
323 | output dmu_psr_pll_en_sds0; | |
324 | output dmu_psr_pll_en_sds1; | |
325 | output dmu_psr_rx_en_b0_sds0; | |
326 | output dmu_psr_rx_en_b1_sds0; | |
327 | output dmu_psr_rx_en_b2_sds0; | |
328 | output dmu_psr_rx_en_b3_sds0; | |
329 | output dmu_psr_rx_en_b0_sds1; | |
330 | output dmu_psr_rx_en_b1_sds1; | |
331 | output dmu_psr_rx_en_b2_sds1; | |
332 | output dmu_psr_rx_en_b3_sds1; | |
333 | output dmu_psr_tx_en_b0_sds0; | |
334 | output dmu_psr_tx_en_b1_sds0; | |
335 | output dmu_psr_tx_en_b2_sds0; | |
336 | output dmu_psr_tx_en_b3_sds0; | |
337 | output dmu_psr_tx_en_b0_sds1; | |
338 | output dmu_psr_tx_en_b1_sds1; | |
339 | output dmu_psr_tx_en_b2_sds1; | |
340 | output dmu_psr_tx_en_b3_sds1; | |
341 | input tcu_test_protect; | |
342 | ||
343 | output [1:0] dmu_psr_rate_scale; | |
344 | output il2cl_gr_16; | |
345 | ||
346 | // >>>>>>>>>>>>>>>>>>>>>>>>> Data Type Declarations <<<<<<<<<<<<<<<<<<<<<<<<< | |
347 | ||
348 | //--------------------------------------------------------------------- | |
349 | // debug | |
350 | //--------------------------------------------------------------------- | |
351 | reg [`FIRE_DBG_DATA_BITS] dbg_bus_a; | |
352 | reg [`FIRE_DBG_DATA_BITS] dbg_bus_b; | |
353 | reg [`FIRE_DBG_DATA_BITS] nxt_dbg_bus_a; | |
354 | reg [`FIRE_DBG_DATA_BITS] nxt_dbg_bus_b; | |
355 | ||
356 | //------------------------------------------------------------------------ | |
357 | // ISB sub-block interface | |
358 | //------------------------------------------------------------------------ | |
359 | wire eil2isb_log; // log eil2isb_tag on ISB | |
360 | wire [4:0] eil2isb_tag; // tlp_tag[4:0] to ISB | |
361 | wire iil2isb_clr; // clear ISB with iil2isb_tag | |
362 | wire [4:0] iil2isb_tag; // tlp_tag[4:0] to ISB to clear | |
363 | wire isb2iil_vld; // valid entry status with iil2isb_tag | |
364 | wire [3:2] eil2isb_low_addr; | |
365 | wire [3:2] isb2iil_low_addr; | |
366 | wire [`FIRE_DBG_DATA_BITS] isb_dbg_a; | |
367 | wire [`FIRE_DBG_DATA_BITS] isb_dbg_b; | |
368 | ||
369 | //------------------------------------------------------------------------ | |
370 | // CIB sub-block interface | |
371 | //------------------------------------------------------------------------ | |
372 | wire iil2cib_ihb_pe; // ingress header parity error | |
373 | wire cib2iil_ihb_pe_drain; | |
374 | wire cib2iil_pec_drain; | |
375 | wire cib2eil_ihb_pe_drain; | |
376 | wire cib2eil_pec_drain; | |
377 | wire [`FIRE_DBG_DATA_BITS] cib_dbg_a; | |
378 | wire [`FIRE_DBG_DATA_BITS] cib_dbg_b; | |
379 | ||
380 | //------------------------------------------------------------------------ | |
381 | // IIL sub-block interface | |
382 | //------------------------------------------------------------------------ | |
383 | wire [`FIRE_DBG_DATA_BITS] iil_dbg_a; | |
384 | wire [`FIRE_DBG_DATA_BITS] iil_dbg_b; | |
385 | ||
386 | //------------------------------------------------------------------------ | |
387 | // EIL sub-block interface | |
388 | //------------------------------------------------------------------------ | |
389 | wire [`FIRE_DBG_DATA_BITS] eil_dbg_0_a; | |
390 | wire [`FIRE_DBG_DATA_BITS] eil_dbg_0_b; | |
391 | wire [`FIRE_DBG_DATA_BITS] eil_dbg_1_a; | |
392 | wire [`FIRE_DBG_DATA_BITS] eil_dbg_1_b; | |
393 | ||
394 | //------------------------------------------------------------------------ | |
395 | // CIB sub-block interface | |
396 | //------------------------------------------------------------------------ | |
397 | wire rst_l; | |
398 | wire por_l; | |
399 | ||
400 | //------------------------------------------------------------------------ | |
401 | // idle check | |
402 | //------------------------------------------------------------------------ | |
403 | wire iil_is_idle; | |
404 | wire eil_is_idle; | |
405 | wire isb_is_idle; | |
406 | ||
407 | wire [3:0] ilu_diagnos_edi_par_hw_read; | |
408 | // This signal provides the current value of ilu_diagnos_edi_par. | |
409 | wire [3:0] ilu_diagnos_ehi_par_hw_read; | |
410 | // This signal provides the current value of ilu_diagnos_ehi_par. | |
411 | wire ilu_diagnos_edi_trig_hw_clr; // Hardware clear signal for | |
412 | // ilu_diagnos_edi_trig. When set | |
413 | // ilu_diagnos will be set to zero. | |
414 | wire ilu_diagnos_edi_trig_hw_read; // This signal provides the current value | |
415 | // of ilu_diagnos_edi_trig. | |
416 | wire ilu_diagnos_ehi_trig_hw_clr; // Hardware clear signal for | |
417 | // ilu_diagnos_ehi_trig. When set | |
418 | // ilu_diagnos will be set to zero. | |
419 | wire ilu_diagnos_ehi_trig_hw_read; // This signal provides the current value | |
420 | // of ilu_diagnos_ehi_trig. | |
421 | ||
422 | reg ilu_is_idle; // flop | |
423 | ||
424 | // >>>>>>>>>>>>>>>>>>>>>>>>> Zero In Checkers <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |
425 | ||
426 | /* 0in scoreboard -rx_id eil2isb_tag -rx eil2isb_log | |
427 | -tx_id iil2isb_tag -tx iil2isb_clr | |
428 | -max_ids 16 -max_count_per_id 1 */ | |
429 | ||
430 | // >>>>>>>>>>>>>>>>>>>>>>>>> RTL/Behavioral Model <<<<<<<<<<<<<<<<<<<<<<<<<<< | |
431 | ||
432 | //--------------------------------------------------------------------- | |
433 | // tie spare to zero | |
434 | //--------------------------------------------------------------------- | |
435 | assign d2p_spare = {`FIRE_D2P_SPARE_WDTH{1'b0}}; | |
436 | ||
437 | //--------------------------------------------------------------------- | |
438 | // debug | |
439 | //--------------------------------------------------------------------- | |
440 | always @ (k2y_dbg_sel_a[5:3] | |
441 | or iil_dbg_a or eil_dbg_0_a or eil_dbg_1_a or | |
442 | cib_dbg_a or isb_dbg_a) begin | |
443 | case (k2y_dbg_sel_a[5:3]) // synopsys infer_mux | |
444 | 3'b000: nxt_dbg_bus_a = iil_dbg_a; | |
445 | 3'b001: nxt_dbg_bus_a = eil_dbg_0_a; | |
446 | 3'b010: nxt_dbg_bus_a = eil_dbg_1_a; | |
447 | 3'b011: nxt_dbg_bus_a = cib_dbg_a; | |
448 | 3'b100: nxt_dbg_bus_a = isb_dbg_a; | |
449 | 3'b101: nxt_dbg_bus_a = 8'b0; | |
450 | 3'b110: nxt_dbg_bus_a = 8'b0; | |
451 | 3'b111: nxt_dbg_bus_a = 8'b0; | |
452 | endcase | |
453 | end | |
454 | ||
455 | always @ (k2y_dbg_sel_b[5:3] | |
456 | or iil_dbg_b or eil_dbg_0_b or eil_dbg_1_b or | |
457 | cib_dbg_b or isb_dbg_b) begin | |
458 | case (k2y_dbg_sel_b[5:3]) // synopsys infer_mux | |
459 | 3'b000: nxt_dbg_bus_b = iil_dbg_b; | |
460 | 3'b001: nxt_dbg_bus_b = eil_dbg_0_b; | |
461 | 3'b010: nxt_dbg_bus_b = eil_dbg_1_b; | |
462 | 3'b011: nxt_dbg_bus_b = cib_dbg_b; | |
463 | 3'b100: nxt_dbg_bus_b = isb_dbg_b; | |
464 | 3'b101: nxt_dbg_bus_b = 8'b0; | |
465 | 3'b110: nxt_dbg_bus_b = 8'b0; | |
466 | 3'b111: nxt_dbg_bus_b = 8'b0; | |
467 | endcase | |
468 | end | |
469 | ||
470 | assign y2k_dbg_a = dbg_bus_a; | |
471 | assign y2k_dbg_b = dbg_bus_b; | |
472 | ||
473 | always @ (posedge l1clk) | |
474 | if(~rst_l) begin | |
475 | dbg_bus_a <= {8{1'b0}}; | |
476 | dbg_bus_b <= {8{1'b0}}; | |
477 | end | |
478 | else begin | |
479 | dbg_bus_a <= nxt_dbg_bus_a; | |
480 | dbg_bus_b <= nxt_dbg_bus_b; | |
481 | end | |
482 | ||
483 | //--------------------------------------------------------------------- | |
484 | // idle check | |
485 | //--------------------------------------------------------------------- | |
486 | //BP N2 set to 1, because the other idles are 1 | |
487 | always @ (posedge l1clk) | |
488 | if(~rst_l) begin | |
489 | ilu_is_idle <= 1'b1; | |
490 | end | |
491 | else begin | |
492 | ilu_is_idle <= iil_is_idle & eil_is_idle & isb_is_idle; | |
493 | end | |
494 | ||
495 | // >>>>>>>>>>>>>>>>>>>>>>>>> Instantiations <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |
496 | ||
497 | // LBIST Rest Circuits | |
498 | // n2 controls reset in rst block, so removed these synchronizers | |
499 | assign rst_l = j2d_rst_l; | |
500 | // lbist_rst_cct rst_cct ( | |
501 | // | |
502 | // .rst_l_in (j2d_rst_l), | |
503 | // .clk (l1clk), | |
504 | // .bist_en (1'b0), | |
505 | // .rst_l_out (rst_l) | |
506 | // ); | |
507 | ||
508 | assign por_l = j2d_por_l; | |
509 | // lbist_rst_cct por_cct ( | |
510 | // | |
511 | // .rst_l_in (j2d_por_l), | |
512 | // .clk (l1clk), | |
513 | // .bist_en (1'b0), | |
514 | // .rst_l_out (por_l) | |
515 | // ); | |
516 | ||
517 | // IIL sub-block | |
518 | dmu_ilu_iil iil ( | |
519 | .clk (l1clk), | |
520 | .rst_l (rst_l), | |
521 | .p2d_ihb_wptr (p2d_ihb_wptr), | |
522 | .d2p_ihb_addr (d2p_ihb_addr), | |
523 | .p2d_ihb_data (p2d_ihb_data), | |
524 | .p2d_ihb_dpar (p2d_ihb_dpar), | |
525 | .d2p_ihb_rd (d2p_ihb_rd), | |
526 | .d2p_ibc_req (d2p_ibc_req), | |
527 | .d2p_ibc_nhc (d2p_ibc_nhc), | |
528 | .d2p_ibc_phc (d2p_ibc_phc), | |
529 | .d2p_ibc_pdc (d2p_ibc_pdc), | |
530 | .p2d_ibc_ack (p2d_ibc_ack), | |
531 | .d2p_idb_addr (d2p_idb_addr), | |
532 | .p2d_idb_data (p2d_idb_data), | |
533 | .p2d_idb_dpar (p2d_idb_dpar), | |
534 | .p2d_cto_req (p2d_cto_req), | |
535 | .p2d_cto_tag (p2d_cto_tag), | |
536 | .d2p_cto_ack (d2p_cto_ack), | |
537 | .y2k_rcd (y2k_rcd), | |
538 | .y2k_rcd_enq (y2k_rcd_enq), | |
539 | .k2y_rcd_deq (k2y_rcd_deq), | |
540 | .k2y_rel_rcd (k2y_rel_rcd), | |
541 | .k2y_rel_enq (k2y_rel_enq), | |
542 | .k2y_buf_addr (k2y_buf_addr), | |
543 | .y2k_buf_data (y2k_buf_data), | |
544 | .y2k_buf_dpar (y2k_buf_dpar), | |
545 | .cib2iil_ihb_pe_drain (cib2iil_ihb_pe_drain), | |
546 | .cib2iil_pec_drain (cib2iil_pec_drain), | |
547 | .iil2cib_ihb_pe (iil2cib_ihb_pe), | |
548 | .iil2isb_clr (iil2isb_clr), | |
549 | .iil2isb_tag (iil2isb_tag), | |
550 | .isb2iil_vld (isb2iil_vld), | |
551 | .isb2iil_low_addr (isb2iil_low_addr), | |
552 | .low_dbg_sel_a (k2y_dbg_sel_a[2:0]), | |
553 | .low_dbg_sel_b (k2y_dbg_sel_b[2:0]), | |
554 | .iil_dbg_a (iil_dbg_a), | |
555 | .iil_dbg_b (iil_dbg_b), | |
556 | .iil_is_idle (iil_is_idle), | |
557 | .ilu_is_idle (ilu_is_idle) ); | |
558 | ||
559 | // EIL sub-block | |
560 | dmu_ilu_eil eil ( | |
561 | .clk (l1clk), | |
562 | .rst_l (rst_l), | |
563 | .d2p_edb_we (d2p_edb_we), | |
564 | .d2p_edb_data (d2p_edb_data), | |
565 | .d2p_edb_dpar (d2p_edb_dpar), | |
566 | .d2p_edb_addr (d2p_edb_addr), | |
567 | .d2p_ehb_we (d2p_ehb_we), | |
568 | .d2p_ehb_data (d2p_ehb_data), | |
569 | .d2p_ehb_dpar (d2p_ehb_dpar), | |
570 | .d2p_ehb_addr (d2p_ehb_addr), | |
571 | .d2p_ech_wptr (d2p_ech_wptr), | |
572 | .d2p_erh_wptr (d2p_erh_wptr), | |
573 | .p2d_ech_rptr (p2d_ech_rptr), | |
574 | .p2d_erh_rptr (p2d_erh_rptr), | |
575 | .p2d_ecd_rptr (p2d_ecd_rptr), | |
576 | .p2d_erd_rptr (p2d_erd_rptr), | |
577 | .k2y_rcd (k2y_rcd), | |
578 | .k2y_rcd_enq (k2y_rcd_enq), | |
579 | .y2k_rcd_deq (y2k_rcd_deq), | |
580 | .y2k_rel_rcd (y2k_rel_rcd), | |
581 | .y2k_rel_enq (y2k_rel_enq), | |
582 | .k2y_dou_dptr (k2y_dou_dptr), | |
583 | .k2y_dou_err (k2y_dou_err), | |
584 | .k2y_dou_vld (k2y_dou_vld), | |
585 | .k2y_buf_addr_vld_monitor (k2y_buf_addr_vld_monitor), | |
586 | .y2k_buf_addr_vld_monitor (y2k_buf_addr_vld_monitor), | |
587 | .y2k_buf_addr (y2k_buf_addr), | |
588 | .k2y_buf_data (k2y_buf_data), | |
589 | .k2y_buf_dpar (k2y_buf_dpar), | |
590 | .ilu_diagnos_ehi_par_hw_read (ilu_diagnos_ehi_par_hw_read), | |
591 | .ilu_diagnos_ehi_trig_hw_clr (ilu_diagnos_ehi_trig_hw_clr), | |
592 | .ilu_diagnos_ehi_trig_hw_read (ilu_diagnos_ehi_trig_hw_read), | |
593 | .ilu_diagnos_edi_par_hw_read (ilu_diagnos_edi_par_hw_read), | |
594 | .ilu_diagnos_edi_trig_hw_clr (ilu_diagnos_edi_trig_hw_clr), | |
595 | .ilu_diagnos_edi_trig_hw_read (ilu_diagnos_edi_trig_hw_read), | |
596 | .cib2eil_ihb_pe_drain (cib2eil_ihb_pe_drain), | |
597 | .cib2eil_pec_drain (cib2eil_pec_drain), | |
598 | .eil2isb_log (eil2isb_log), | |
599 | .eil2isb_tag (eil2isb_tag), | |
600 | .eil2isb_low_addr (eil2isb_low_addr), | |
601 | .low_dbg_sel_a (k2y_dbg_sel_a[2:0]), | |
602 | .low_dbg_sel_b (k2y_dbg_sel_b[2:0]), | |
603 | .eil_dbg_0_a (eil_dbg_0_a), | |
604 | .eil_dbg_0_b (eil_dbg_0_b), | |
605 | .eil_dbg_1_a (eil_dbg_1_a), | |
606 | .eil_dbg_1_b (eil_dbg_1_b), | |
607 | .eil_is_idle (eil_is_idle), | |
608 | .il2cl_gr_16 (il2cl_gr_16) | |
609 | ); | |
610 | ||
611 | // CIB sub-block | |
612 | dmu_ilu_cib cib ( | |
613 | .clk (l1clk), | |
614 | .rst_dmu_async_por_ (rst_dmu_async_por_), // drives async reset ff for serdes enables | |
615 | .rst_wmr_ (rst_wmr_), // raw warm reset for serdes rate | |
616 | .por_l (por_l), | |
617 | .rst_l (rst_l), | |
618 | .j2d_instance_id (j2d_instance_id), | |
619 | .p2d_mps (p2d_mps), | |
620 | .p2d_ue_int (p2d_ue_int), | |
621 | .p2d_ce_int (p2d_ce_int), | |
622 | .p2d_oe_int (p2d_oe_int), | |
623 | // .d2p_drain (d2p_drain), | |
624 | .p2d_drain (p2d_drain), | |
625 | .y2k_mps (y2k_mps), | |
626 | .y2k_int_l (y2k_int_l), | |
627 | .k2y_csr_ring_out (k2y_csr_ring_out), | |
628 | .y2k_csr_ring_in (y2k_csr_ring_in), | |
629 | .d2p_csr_req (d2p_csr_req), | |
630 | .p2d_csr_ack (p2d_csr_ack), | |
631 | .d2p_csr_rcd (d2p_csr_rcd), | |
632 | .p2d_csr_req (p2d_csr_req), | |
633 | .d2p_csr_ack (d2p_csr_ack), | |
634 | .p2d_csr_rcd (p2d_csr_rcd), | |
635 | // SV 05/31/05 | |
636 | .ilu_diagnos_rate_scale_hw_read (dmu_psr_rate_scale), | |
637 | // SV 04/06/05 | |
638 | .ilu_diagnos_edi_par_hw_read (ilu_diagnos_edi_par_hw_read), | |
639 | .ilu_diagnos_ehi_par_hw_read (ilu_diagnos_ehi_par_hw_read), | |
640 | .ilu_diagnos_edi_trig_hw_clr (ilu_diagnos_edi_trig_hw_clr), | |
641 | .ilu_diagnos_edi_trig_hw_read (ilu_diagnos_edi_trig_hw_read), | |
642 | .ilu_diagnos_ehi_trig_hw_clr (ilu_diagnos_ehi_trig_hw_clr), | |
643 | .ilu_diagnos_ehi_trig_hw_read (ilu_diagnos_ehi_trig_hw_read), | |
644 | .iil2cib_ihb_pe (iil2cib_ihb_pe), | |
645 | .cib2iil_ihb_pe_drain (cib2iil_ihb_pe_drain), | |
646 | .cib2iil_pec_drain (cib2iil_pec_drain), | |
647 | .cib2eil_ihb_pe_drain (cib2eil_ihb_pe_drain), | |
648 | .cib2eil_pec_drain (cib2eil_pec_drain), | |
649 | .low_dbg_sel_a (k2y_dbg_sel_a[2:0]), | |
650 | .low_dbg_sel_b (k2y_dbg_sel_b[2:0]), | |
651 | .cib_dbg_a (cib_dbg_a), | |
652 | .cib_dbg_b (cib_dbg_b), | |
653 | .dmu_psr_pll_en_sds0 (dmu_psr_pll_en_sds0), | |
654 | .dmu_psr_pll_en_sds1 (dmu_psr_pll_en_sds1), | |
655 | .dmu_psr_rx_en_b0_sds0 (dmu_psr_rx_en_b0_sds0), | |
656 | .dmu_psr_rx_en_b1_sds0 (dmu_psr_rx_en_b1_sds0), | |
657 | .dmu_psr_rx_en_b2_sds0 (dmu_psr_rx_en_b2_sds0), | |
658 | .dmu_psr_rx_en_b3_sds0 (dmu_psr_rx_en_b3_sds0), | |
659 | .dmu_psr_rx_en_b0_sds1 (dmu_psr_rx_en_b0_sds1), | |
660 | .dmu_psr_rx_en_b1_sds1 (dmu_psr_rx_en_b1_sds1), | |
661 | .dmu_psr_rx_en_b2_sds1 (dmu_psr_rx_en_b2_sds1), | |
662 | .dmu_psr_rx_en_b3_sds1 (dmu_psr_rx_en_b3_sds1), | |
663 | .dmu_psr_tx_en_b0_sds0 (dmu_psr_tx_en_b0_sds0), | |
664 | .dmu_psr_tx_en_b1_sds0 (dmu_psr_tx_en_b1_sds0), | |
665 | .dmu_psr_tx_en_b2_sds0 (dmu_psr_tx_en_b2_sds0), | |
666 | .dmu_psr_tx_en_b3_sds0 (dmu_psr_tx_en_b3_sds0), | |
667 | .dmu_psr_tx_en_b0_sds1 (dmu_psr_tx_en_b0_sds1), | |
668 | .dmu_psr_tx_en_b1_sds1 (dmu_psr_tx_en_b1_sds1), | |
669 | .dmu_psr_tx_en_b2_sds1 (dmu_psr_tx_en_b2_sds1), | |
670 | .dmu_psr_tx_en_b3_sds1 (dmu_psr_tx_en_b3_sds1), | |
671 | .tcu_test_protect (tcu_test_protect) | |
672 | ||
673 | ); | |
674 | ||
675 | // ISB sub-block | |
676 | dmu_ilu_isb isb ( | |
677 | .clk (l1clk), | |
678 | .rst_l (rst_l), | |
679 | .eil2isb_log (eil2isb_log), | |
680 | .eil2isb_tag (eil2isb_tag), | |
681 | .eil2isb_low_addr (eil2isb_low_addr), | |
682 | .iil2isb_clr (iil2isb_clr), | |
683 | .iil2isb_tag (iil2isb_tag), | |
684 | .isb2iil_vld (isb2iil_vld), | |
685 | .isb2iil_low_addr (isb2iil_low_addr), | |
686 | .low_dbg_sel_a (k2y_dbg_sel_a[2:0]), | |
687 | .low_dbg_sel_b (k2y_dbg_sel_b[2:0]), | |
688 | .isb_dbg_a (isb_dbg_a), | |
689 | .isb_dbg_b (isb_dbg_b), | |
690 | .isb_is_idle (isb_is_idle) ); | |
691 | ||
692 | endmodule // dmu_ilu | |
693 | ||
694 | ||
695 |