Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_rdmc_chnl_pio_if.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_rdmc_chnl_pio_if.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 niu_rdmc_chnl_pio_if (
36 clk,
37 reset,
38 dma_chnl_grp_id,
39 pio_32b_mode,
40 pio_wen,
41 pio_addr,
42 pio_wdata,
43 reset_rcr_flush,
44 m_bit_en,
45 rcr_ctl_stat_word,
46 desp_curr_addr,
47 desp_curr_cnt,
48 desp_addr_not_valid,
49 buf_addr_not_valid,
50 rbr_addr_overflow,
51 desp_curr_cnt_overflow,
52 rbr_empty,
53 muxed_drop_pkt_r,
54 wred_drop_pkt,
55 rcr_drop_pkt,
56 rbr_drop_pkt,
57 chnl_sel_buf_en,
58 rcr_curr_addr,
59 rcr_status_a,
60 rcr_addr_not_valid,
61 mbox_addr_not_valid,
62 rcr_addr_overflow,
63 rcr_curr_cnt_overflow,
64 rcr_curr_cnt_underflow,
65 rcr_pkt_cnt_underflow,
66 rcr_idle_cycle,
67 chnl_has_pkt,
68 chnl_shadw_parity_err,
69 rbr_idle_cycle,
70 chnl_cache_parity_err,
71 resp_bus_err,
72 resp_bus_err_type,
73 rcr_ack_err,
74 data_err_event,
75 rdmc_wr_data_dma_num,
76
77 dma_reset,
78 dma_en,
79 dma_data_offset,
80 full_header,
81 page_valid0,
82 addr_mask0,
83 comp_value0,
84 relo_value0,
85 page_valid1,
86 addr_mask1,
87 comp_value1,
88 relo_value1,
89 dma_fatal_err,
90 rx_log_page_hdl_reg,
91 dma_func_num,
92 rdc_red_param_reg,
93 rbr_cfig_a_reg,
94 rbr_cfig_b_reg,
95 rbr_kick_reg,
96 rcr_cfig_a_reg,
97 rcr_cfig_b_reg,
98 rx_dma_ctl_stat_reg_s,
99 rx_dma_ctl_stat_reg_bit47,
100 rcr_flush_reg,
101 mbox_addr,
102 mailbox_data,
103 ldf_a,
104 ldf_b,
105 rbr_cfig_a_reg_wenu,
106 rbr_cfig_a_reg_wenl,
107 rbr_kick_reg_wen,
108 rcr_cfig_a_reg_wenu,
109 rcr_cfig_a_reg_wenl,
110 rx_dma_ctl_stat_reg_wenu,
111 rx_dma_ctl_stat_reg_wenl,
112 pio_rd_gnt,
113 chnl_pio_rd_data
114
115 );
116input clk;
117input reset;
118input[4:0] dma_chnl_grp_id;
119input pio_32b_mode;
120input pio_wen;
121input[19:0] pio_addr;
122input[63:0] pio_wdata;
123input reset_rcr_flush;
124input m_bit_en;
125input[2:0] rcr_ctl_stat_word;
126input[15:0] desp_curr_addr;
127input[16:0] desp_curr_cnt;
128input desp_addr_not_valid;
129input buf_addr_not_valid;
130input rbr_addr_overflow;
131input desp_curr_cnt_overflow;
132input rbr_empty;
133input muxed_drop_pkt_r;
134input wred_drop_pkt;
135input rcr_drop_pkt;
136input rbr_drop_pkt;
137input chnl_sel_buf_en;
138input[15:0] rcr_curr_addr;
139input[15:0] rcr_status_a;
140input rcr_addr_not_valid;
141input mbox_addr_not_valid;
142input rcr_addr_overflow;
143input rcr_curr_cnt_overflow;
144input rcr_curr_cnt_underflow;
145input rcr_pkt_cnt_underflow;
146input rcr_idle_cycle;
147input rbr_idle_cycle;
148input chnl_has_pkt;
149input chnl_shadw_parity_err;
150input chnl_cache_parity_err;
151input resp_bus_err;
152input[3:0] resp_bus_err_type;
153input rcr_ack_err;
154input data_err_event;
155input[4:0] rdmc_wr_data_dma_num;
156
157output dma_reset;
158output dma_en;
159output[1:0] dma_data_offset;
160output full_header;
161output page_valid0;
162output[31:0] addr_mask0;
163output[31:0] comp_value0;
164output[31:0] relo_value0;
165output page_valid1;
166output[31:0] addr_mask1;
167output[31:0] comp_value1;
168output[31:0] relo_value1;
169output dma_fatal_err;
170output[19:0] rx_log_page_hdl_reg;
171output[1:0] dma_func_num;
172output[31:0] rdc_red_param_reg;
173output[53:0] rbr_cfig_a_reg;
174output[10:0] rbr_cfig_b_reg;
175output[15:0] rbr_kick_reg;
176output[53:0] rcr_cfig_a_reg;
177output[22:0] rcr_cfig_b_reg;
178output[31:0] rx_dma_ctl_stat_reg_s;
179output rx_dma_ctl_stat_reg_bit47;
180output rcr_flush_reg;
181output[43:0] mbox_addr;
182output[168:0] mailbox_data;
183output ldf_a;
184output ldf_b;
185output rbr_cfig_a_reg_wenu;
186output rbr_cfig_a_reg_wenl;
187output rbr_kick_reg_wen;
188output rcr_cfig_a_reg_wenu;
189output rcr_cfig_a_reg_wenl;
190output rx_dma_ctl_stat_reg_wenu;
191output rx_dma_ctl_stat_reg_wenl;
192output pio_rd_gnt;
193output[63:0] chnl_pio_rd_data;
194
195reg dma_reset;
196reg[1:0] dma_reset_cnt;
197
198reg[3:0] rx_log_page_vld_reg;
199reg[31:0] rx_log_mask1_reg;
200reg[31:0] rx_log_val1_reg;
201reg[31:0] rx_log_mask2_reg;
202reg[31:0] rx_log_val2_reg;
203reg[31:0] rx_log_page_relo1_reg;
204reg[31:0] rx_log_page_relo2_reg;
205reg[19:0] rx_log_page_hdl_reg;
206reg[31:0] rdc_red_param_reg;
207
208reg[14:0] rxdma_cfig1_reg;
209reg[28:0] rxdma_cfig2_reg;
210reg[53:0] rbr_cfig_a_reg;
211reg[10:0] rbr_cfig_b_reg;
212reg[15:0] rbr_kick_reg;
213reg[53:0] rcr_cfig_a_reg;
214reg[22:0] rcr_cfig_b_reg;
215reg[20:0] rx_dma_ent_mask_reg;
216reg[53:0] rx_dma_ctl_stat_reg;
217reg rcr_flush_reg;
218reg[16:0] rx_dma_pkt_drop_cnt_reg;
219reg[16:0] rx_dma_wred_drop_cnt_reg;
220reg[10:0] fatal_err_reg;
221reg fatal_err_all_d;
222reg pio_disable_dma;
223
224reg fzc_pio_rd_err_tmp;
225reg[63:0] fzc_pio_rd_data_tmp;
226reg pio_rd_err_tmp;
227reg[63:0] pio_rd_data_tmp;
228reg pio_rd_err_tmp_32b;
229reg[63:0] pio_rd_data_tmp_32b;
230
231reg pio_rd_gnt;
232reg[63:0] chnl_pio_rd_data;
233
234reg rbr_empty_r;
235
236reg ldf_a;
237reg ldf_b;
238
239wire fatal_err_all_p;
240wire dma_fatal_err;
241
242wire addr_match1 = (pio_addr[10:6] == dma_chnl_grp_id);
243wire[19:0] pio_addr1 = {pio_addr[19:11], 5'b0, pio_addr[5:0]};
244
245wire rx_log_page_vld_reg_wen = pio_wen & (pio_addr1 == 20'ha0000) & addr_match1;
246wire rx_log_mask1_reg_wen = pio_wen & (pio_addr1 == 20'ha0008) & addr_match1;
247wire rx_log_val1_reg_wen = pio_wen & (pio_addr1 == 20'ha0010) & addr_match1;
248wire rx_log_mask2_reg_wen = pio_wen & (pio_addr1 == 20'ha0018) & addr_match1;
249wire rx_log_val2_reg_wen = pio_wen & (pio_addr1 == 20'ha0020) & addr_match1;
250wire rx_log_page_relo1_reg_wen = pio_wen & (pio_addr1 == 20'ha0028) & addr_match1;
251wire rx_log_page_relo2_reg_wen = pio_wen & (pio_addr1 == 20'ha0030) & addr_match1;
252wire rx_log_page_hdl_reg_wen = pio_wen & (pio_addr1 == 20'ha0038) & addr_match1;
253wire rdc_red_param_reg_wen = pio_wen & (pio_addr1 == 20'hb0000) & addr_match1;
254wire rx_dma_wred_drop_cnt_reg_wen = pio_wen & (pio_addr1 == 20'hb0008) & addr_match1;
255
256wire addr_match2 = (pio_addr[13:9] == dma_chnl_grp_id);
257wire[19:0] pio_addr2 = {pio_addr[19:14], 5'b0, pio_addr[8:0]};
258
259wire rxdma_cfig1_reg_wen = pio_wen & (pio_addr2 == 20'h00000) & addr_match2;
260wire rxdma_cfig2_reg_wen = pio_wen & (pio_addr2 == 20'h00008) & addr_match2;
261wire rbr_cfig_a_reg_wen = pio_wen & (pio_addr2 == 20'h00010) & addr_match2;
262wire rbr_cfig_a_reg_wen_32b = pio_wen & (pio_addr2 == 20'h00014) & addr_match2;
263
264wire rbr_cfig_b_reg_wen = pio_wen & (pio_addr2 == 20'h00018) & addr_match2;
265wire rbr_kick_reg_wen = pio_wen & (pio_addr2 == 20'h00020) & addr_match2;
266//wire rbr_stat_reg_wen = pio_wen & (pio_addr2 == 20'h00028) & addr_match2;RO reg
267//wire rbr_head_h_reg_wen = pio_wen & (pio_addr2 == 20'h00030) & addr_match2;RO reg
268//wire rbr_head_l_reg_wen = pio_wen & (pio_addr2 == 20'h00038) & addr_match2;RO reg
269
270wire rcr_cfig_a_reg_wen = pio_wen & (pio_addr2 == 20'h00040) & addr_match2;
271wire rcr_cfig_a_reg_wen_32b = pio_wen & (pio_addr2 == 20'h00044) & addr_match2;
272
273wire rcr_cfig_b_reg_wen = pio_wen & (pio_addr2 == 20'h00048) & addr_match2;
274
275wire rx_dma_ent_mask_reg_wen = pio_wen & (pio_addr2 == 20'h00068) & addr_match2;
276wire rx_dma_ctl_stat_reg_wen = pio_wen & (pio_addr2 == 20'h00070) & addr_match2;
277wire rx_dma_ctl_stat_reg_wen_32b = pio_wen & (pio_addr2 == 20'h00074) & addr_match2;
278
279wire rcr_flush_reg_wen = pio_wen & (pio_addr2 == 20'h00078) & addr_match2;
280wire rx_dma_pkt_drop_cnt_reg_wen = pio_wen & (pio_addr2 == 20'h00090) & addr_match2;
281
282wire rx_dma_ctl_stat_reg_wr = pio_wen & (pio_addr2 == 20'h00098) & addr_match2;
283wire rx_dma_ctl_stat_reg_wr_32b = pio_wen & (pio_addr2 == 20'h0009c) & addr_match2;
284
285wire dma_en = rxdma_cfig1_reg[14];
286wire pio_dma_rst = rxdma_cfig1_reg[13];
287//wire dma_idle_cycle = rxdma_cfig1_reg[12];
288wire full_header = rxdma_cfig2_reg[0];
289wire[1:0] dma_data_offset = rxdma_cfig2_reg[2:1];
290wire[43:0] mbox_addr = {rxdma_cfig1_reg[11:0], rxdma_cfig2_reg[28:3], 6'b0};
291
292wire[31:0] addr_mask0 = rx_log_mask1_reg[31:0];
293wire[31:0] addr_mask1 = rx_log_mask2_reg[31:0];
294wire[31:0] comp_value0 = rx_log_val1_reg[31:0];
295wire[31:0] comp_value1 = rx_log_val2_reg[31:0];
296wire[31:0] relo_value0 = rx_log_page_relo1_reg[31:0];
297wire[31:0] relo_value1 = rx_log_page_relo2_reg[31:0];
298
299wire page_valid0 = rx_log_page_vld_reg[0] & dma_en;
300wire page_valid1 = rx_log_page_vld_reg[1] & dma_en;
301wire[1:0] dma_func_num = rx_log_page_vld_reg[3:2];
302wire page_not_valid = !(page_valid0 | page_valid1) & dma_en;
303
304wire idle_cycle;
305
306wire rx_dma_ctl_stat_reg_wenl = rx_dma_ctl_stat_reg_wen;
307wire rx_dma_ctl_stat_reg_wenu = rx_dma_ctl_stat_reg_wen & !pio_32b_mode | rx_dma_ctl_stat_reg_wen_32b & pio_32b_mode;
308
309wire rbr_cfig_a_reg_wenl = rbr_cfig_a_reg_wen;
310wire rbr_cfig_a_reg_wenu = rbr_cfig_a_reg_wen & !pio_32b_mode | rbr_cfig_a_reg_wen_32b & pio_32b_mode;
311
312wire rcr_cfig_a_reg_wenl = rcr_cfig_a_reg_wen;
313wire rcr_cfig_a_reg_wenu = rcr_cfig_a_reg_wen & !pio_32b_mode | rcr_cfig_a_reg_wen_32b & pio_32b_mode;
314
315/*************************/
316//Status from RBR, RCR
317/*************************/
318wire[25:0] rbr_base_addr = rbr_cfig_a_reg[37:12];
319wire[41:0] desp_full_addr = {rbr_base_addr[25:0], desp_curr_addr[15:0]};
320
321wire[24:0] rcr_base_addr = rcr_cfig_a_reg[37:13];
322wire[40:0] rcr_full_addr = {rcr_base_addr[24:0], rcr_curr_addr[15:0]};
323
324wire[168:0] mailbox_data = {rcr_status_a[15:0],
325 rcr_full_addr[40:0],
326 desp_full_addr[41:0],
327 desp_curr_cnt[15:0],
328 rx_dma_ctl_stat_reg[53:0]};
329
330always @ (posedge clk)
331if (reset)
332 rx_log_page_vld_reg <= 4'b0;
333else if (dma_reset)
334 rx_log_page_vld_reg <= 4'b0;
335else if (rx_log_page_vld_reg_wen)
336 rx_log_page_vld_reg <= pio_wdata[3:0];
337else
338 rx_log_page_vld_reg <= rx_log_page_vld_reg;
339
340always @ (posedge clk)
341if (reset)
342 rx_log_mask1_reg <= 32'b0;
343else if (dma_reset)
344 rx_log_mask1_reg <= 32'b0;
345else if (rx_log_mask1_reg_wen)
346 rx_log_mask1_reg <= pio_wdata[31:0];
347else
348 rx_log_mask1_reg <= rx_log_mask1_reg;
349
350always @ (posedge clk)
351if (reset)
352 rx_log_val1_reg <= 32'b0;
353else if (dma_reset)
354 rx_log_val1_reg <= 32'b0;
355else if (rx_log_val1_reg_wen)
356 rx_log_val1_reg <= pio_wdata[31:0];
357else
358 rx_log_val1_reg <= rx_log_val1_reg;
359
360always @ (posedge clk)
361if (reset)
362 rx_log_mask2_reg <= 32'b0;
363else if (dma_reset)
364 rx_log_mask2_reg <= 32'b0;
365else if (rx_log_mask2_reg_wen)
366 rx_log_mask2_reg <= pio_wdata[31:0];
367else
368 rx_log_mask2_reg <= rx_log_mask2_reg;
369
370always @ (posedge clk)
371if (reset)
372 rx_log_val2_reg <= 32'b0;
373else if (dma_reset)
374 rx_log_val2_reg <= 32'b0;
375else if (rx_log_val2_reg_wen)
376 rx_log_val2_reg <= pio_wdata[31:0];
377else
378 rx_log_val2_reg <= rx_log_val2_reg;
379
380always @ (posedge clk)
381if (reset)
382 rx_log_page_relo1_reg <= 32'b0;
383else if (dma_reset)
384 rx_log_page_relo1_reg <= 32'b0;
385else if (rx_log_page_relo1_reg_wen)
386 rx_log_page_relo1_reg <= pio_wdata[31:0];
387else
388 rx_log_page_relo1_reg <= rx_log_page_relo1_reg;
389
390
391always @ (posedge clk)
392if (reset)
393 rx_log_page_relo2_reg <= 32'b0;
394else if (dma_reset)
395 rx_log_page_relo2_reg <= 32'b0;
396else if (rx_log_page_relo2_reg_wen)
397 rx_log_page_relo2_reg <= pio_wdata[31:0];
398else
399 rx_log_page_relo2_reg <= rx_log_page_relo2_reg;
400
401
402always @ (posedge clk)
403if (reset)
404 rx_log_page_hdl_reg <= 20'b0;
405else if (dma_reset)
406 rx_log_page_hdl_reg <= 20'b0;
407else if (rx_log_page_hdl_reg_wen)
408 rx_log_page_hdl_reg <= pio_wdata[19:0];
409else
410 rx_log_page_hdl_reg <= rx_log_page_hdl_reg;
411
412always @ (posedge clk)
413if (reset)
414 rdc_red_param_reg <= 32'b0;
415else if (dma_reset)
416 rdc_red_param_reg <= 32'b0;
417else if (rdc_red_param_reg_wen)
418 rdc_red_param_reg <= pio_wdata[31:0];
419else
420 rdc_red_param_reg <= rdc_red_param_reg;
421
422wire disable_dma_ture = dma_en & !pio_wdata[31];
423wire dam_en_bit = disable_dma_ture ? 1'b1 : pio_wdata[31];
424
425always @ (posedge clk)
426if (reset)
427 rxdma_cfig1_reg <= 15'b0;
428else if (dma_reset)
429 rxdma_cfig1_reg <= 15'b0;
430else if (rxdma_cfig1_reg_wen)
431 rxdma_cfig1_reg <= {dam_en_bit, pio_wdata[30:29], pio_wdata[11:0]};
432else if (fatal_err_all_p | idle_cycle & pio_disable_dma)
433 rxdma_cfig1_reg <= {1'b0, rxdma_cfig1_reg[13:0]};
434else
435 rxdma_cfig1_reg <= {rxdma_cfig1_reg[14:13], idle_cycle, rxdma_cfig1_reg[11:0]};
436
437always @ (posedge clk)
438if (reset)
439 rxdma_cfig2_reg <= 29'b0;
440else if (dma_reset)
441 rxdma_cfig2_reg <= 29'b0;
442else if (rxdma_cfig2_reg_wen)
443 rxdma_cfig2_reg <= {pio_wdata[31:6], pio_wdata[2:0]};
444else
445 rxdma_cfig2_reg <= rxdma_cfig2_reg;
446
447
448always @ (posedge clk)
449if (reset)
450 rbr_cfig_a_reg <= 54'b0;
451else if (dma_reset)
452 rbr_cfig_a_reg <= 54'b0;
453else if (pio_32b_mode & rbr_cfig_a_reg_wen)
454 rbr_cfig_a_reg <= {rbr_cfig_a_reg[53:26], pio_wdata[31:6]};
455else if (pio_32b_mode & rbr_cfig_a_reg_wen_32b)
456 rbr_cfig_a_reg <= {pio_wdata[31:16], pio_wdata[11:0], rbr_cfig_a_reg[25:0]};
457else if (rbr_cfig_a_reg_wen)
458 rbr_cfig_a_reg <= {pio_wdata[63:48], pio_wdata[43:6]};
459else
460 rbr_cfig_a_reg <= rbr_cfig_a_reg;
461
462
463always @ (posedge clk)
464if (reset)
465 rbr_cfig_b_reg <= 11'b0;
466else if (dma_reset)
467 rbr_cfig_b_reg <= 11'b0;
468else if (rbr_cfig_b_reg_wen)
469 rbr_cfig_b_reg <= {pio_wdata[25:24],
470 pio_wdata[23], pio_wdata[17:16],
471 pio_wdata[15], pio_wdata[9:8],
472 pio_wdata[7], pio_wdata[1:0]};
473else
474 rbr_cfig_b_reg <= rbr_cfig_b_reg;
475
476always @ (posedge clk)
477if (reset)
478 rbr_kick_reg <= 16'b0;
479else if (dma_reset)
480 rbr_kick_reg <= 16'b0;
481else if (rbr_kick_reg_wen)
482 rbr_kick_reg <= pio_wdata[15:0];
483else
484 rbr_kick_reg <= rbr_kick_reg;
485
486
487always @ (posedge clk)
488if (reset)
489 rcr_cfig_a_reg <= 54'b0;
490else if (dma_reset)
491 rcr_cfig_a_reg <= 54'b0;
492else if (pio_32b_mode & rcr_cfig_a_reg_wen)
493 rcr_cfig_a_reg <= {rcr_cfig_a_reg[53:26], pio_wdata[31:6]};
494else if (pio_32b_mode & rcr_cfig_a_reg_wen_32b)
495 rcr_cfig_a_reg <= {pio_wdata[31:16], pio_wdata[11:0], rcr_cfig_a_reg[25:0]};
496else if (rcr_cfig_a_reg_wen)
497 rcr_cfig_a_reg <= {pio_wdata[63:48], pio_wdata[43:6]};
498else
499 rcr_cfig_a_reg <= rcr_cfig_a_reg;
500
501
502always @ (posedge clk)
503if (reset)
504 rcr_cfig_b_reg <= 23'b0;
505else if (dma_reset)
506 rcr_cfig_b_reg <= 23'b0;
507else if (rcr_cfig_b_reg_wen)
508 rcr_cfig_b_reg <= {pio_wdata[31:16], pio_wdata[15], pio_wdata[5:0]};
509else
510 rcr_cfig_b_reg <= rcr_cfig_b_reg;
511
512always @ (posedge clk)
513if (reset)
514 rx_dma_ent_mask_reg <= 21'h1f_ffff;
515else if (dma_reset)
516 rx_dma_ent_mask_reg <= 21'h1f_ffff;
517else if (rx_dma_ent_mask_reg_wen)
518 rx_dma_ent_mask_reg <= {pio_wdata[21:16], pio_wdata[14:0]};
519else
520 rx_dma_ent_mask_reg <= rx_dma_ent_mask_reg;
521
522
523always @ (posedge clk)
524if (reset)
525 rcr_flush_reg <= 1'b0;
526else if (dma_reset)
527 rcr_flush_reg <= 1'b0;
528else if (rcr_flush_reg_wen)
529 rcr_flush_reg <= pio_wdata[0];
530else if (reset_rcr_flush & rcr_flush_reg)
531 rcr_flush_reg <= 1'b0;
532else
533 rcr_flush_reg <= rcr_flush_reg;
534
535
536/**********************************/
537//Status Reg and Interrupt
538/**********************************/
539wire[31:0] rx_dma_ctl_stat_reg_s = rx_dma_ctl_stat_reg[31:0];
540wire rx_dma_ctl_stat_reg_bit47 = rx_dma_ctl_stat_reg[47];
541
542wire rbr_empty_p = rbr_empty & !rbr_empty_r;
543wire[20:0] rx_dma_ctl_stat_reg_tmp = {rx_dma_ctl_stat_reg[53:48], rx_dma_ctl_stat_reg[46:32]};
544wire[20:0] intr_trig = (~rx_dma_ent_mask_reg) & rx_dma_ctl_stat_reg_tmp;
545wire ldf_a_tmp = (|intr_trig[14:13]);
546wire ldf_b_tmp = ((|intr_trig[12:0]) | (|intr_trig[20:15]));
547
548
549wire is_port_drop_pkt = chnl_sel_buf_en & muxed_drop_pkt_r;
550wire is_wred_drop_pkt = chnl_sel_buf_en & wred_drop_pkt;
551wire is_rbr_drop_pkt = chnl_sel_buf_en & rbr_drop_pkt;
552wire is_rcr_drop_pkt = chnl_sel_buf_en & rcr_drop_pkt;
553wire is_drop_pkt = (muxed_drop_pkt_r | rbr_drop_pkt | rcr_drop_pkt) & chnl_sel_buf_en;
554wire chnl_data_err_event= data_err_event & (rdmc_wr_data_dma_num == dma_chnl_grp_id);
555
556//wire[16:0] pio_wdata_h= pio_32b_mode ? pio_wdata[16:0] : pio_wdata[48:32];
557
558wire pio_wdata_h_16 = pio_32b_mode ? pio_wdata[16] : pio_wdata[48];
559wire pio_wdata_h_15 = pio_32b_mode ? pio_wdata[15] : pio_wdata[47];
560wire pio_wdata_h_14 = pio_32b_mode ? pio_wdata[14] : pio_wdata[46];
561wire pio_wdata_h_13 = pio_32b_mode ? pio_wdata[13] : pio_wdata[45];
562wire pio_wdata_h_3 = pio_32b_mode ? pio_wdata[3] : pio_wdata[35];
563wire pio_wdata_h_10 = pio_32b_mode ? pio_wdata[10] : pio_wdata[42];
564wire pio_wdata_h_9 = pio_32b_mode ? pio_wdata[9] : pio_wdata[41];
565wire pio_wdata_h_8 = pio_32b_mode ? pio_wdata[8] : pio_wdata[40];
566wire pio_wdata_h_7 = pio_32b_mode ? pio_wdata[7] : pio_wdata[39];
567
568wire pio_data_err_bit = pio_wdata_h_16 ? 1'b0 : rx_dma_ctl_stat_reg[48];
569wire pio_thresh_bit = pio_wdata_h_14 ? 1'b0 : rx_dma_ctl_stat_reg[46];
570wire pio_rcrto_bit = pio_wdata_h_13 ? 1'b0 : rx_dma_ctl_stat_reg[45];
571wire pio_rbr_empty_bit = pio_wdata_h_3 ? 1'b0 : rx_dma_ctl_stat_reg[35];
572
573wire pio_port_drop_bit = pio_wdata_h_10 ? 1'b0 : rx_dma_ctl_stat_reg[42];
574wire pio_wred_drop_bit = pio_wdata_h_9 ? 1'b0 : rx_dma_ctl_stat_reg[41];
575wire pio_rbr_drop_bit = pio_wdata_h_8 ? 1'b0 : rx_dma_ctl_stat_reg[40];
576wire pio_rcr_drop_bit = pio_wdata_h_7 ? 1'b0 : rx_dma_ctl_stat_reg[39];
577
578
579wire[53:0] pio_rx_dma_ctl_stat_word = {rx_dma_ctl_stat_reg[53:49], pio_data_err_bit,
580 pio_wdata_h_15, pio_thresh_bit, pio_rcrto_bit, rx_dma_ctl_stat_reg[44:43],
581 pio_port_drop_bit, pio_wred_drop_bit, pio_rbr_drop_bit, pio_rcr_drop_bit,
582 rx_dma_ctl_stat_reg[38:36], pio_rbr_empty_bit, rx_dma_ctl_stat_reg[34:32],
583 pio_wdata[31:0]};
584
585wire config_not_valid = (page_not_valid | desp_addr_not_valid | rcr_addr_not_valid | mbox_addr_not_valid);
586wire rbr_rcr_addr_overflow = (rbr_addr_overflow | rcr_addr_overflow);
587wire rcr_cnt_underflow = (rcr_curr_cnt_underflow | rcr_pkt_cnt_underflow);
588
589assign idle_cycle = rcr_idle_cycle & rbr_idle_cycle & !chnl_has_pkt;
590wire[3:0] resp_err = {4{resp_bus_err}} & resp_bus_err_type;
591wire[4:0] meta_bus_err = {resp_err, rcr_ack_err};
592wire[10:0] fatal_err_event = {meta_bus_err, chnl_shadw_parity_err, chnl_cache_parity_err,
593 rcr_cnt_underflow, rcr_curr_cnt_overflow, desp_curr_cnt_overflow, buf_addr_not_valid};
594wire[10:0] fatal_err_bit_in = {11{idle_cycle}} & fatal_err_reg;
595
596wire[53:0] rx_dma_ctl_stat_word = {fatal_err_bit_in[10:6], chnl_data_err_event,
597 rx_dma_ctl_stat_reg[47:45], fatal_err_bit_in[5], fatal_err_bit_in[4],
598 is_port_drop_pkt, is_wred_drop_pkt, is_rbr_drop_pkt, is_rcr_drop_pkt,
599 rbr_rcr_addr_overflow, fatal_err_bit_in[3], fatal_err_bit_in[2],
600 rbr_empty_p, fatal_err_bit_in[1], fatal_err_bit_in[0], config_not_valid,
601 rx_dma_ctl_stat_reg[31:0]};
602
603wire[12:0] fatal_err = {rx_dma_ctl_stat_reg[53:49],
604 rx_dma_ctl_stat_reg[44:43], rx_dma_ctl_stat_reg[38:36], rx_dma_ctl_stat_reg[34:32]};
605wire fatal_err_all = |fatal_err;
606assign fatal_err_all_p = fatal_err_all & !fatal_err_all_d;
607assign dma_fatal_err = |fatal_err_reg | pio_disable_dma;
608
609always @ (posedge clk)
610if (reset)
611begin
612 ldf_a <= 1'b0;
613 ldf_b <= 1'b0;
614end
615else
616begin
617 ldf_a <= ldf_a_tmp;
618 ldf_b <= ldf_b_tmp;
619end
620
621
622always @ (posedge clk)
623if (reset)
624 rbr_empty_r <= 1'b0;
625else if (dma_reset)
626 rbr_empty_r <= 1'b0;
627else
628 rbr_empty_r <= rbr_empty;
629
630
631always @ (posedge clk)
632if (reset)
633 fatal_err_reg <= 11'b0;
634else if (dma_reset)
635 fatal_err_reg <= 11'b0;
636else
637 fatal_err_reg <= fatal_err_event | fatal_err_reg;
638
639
640wire[53:0] rx_dma_ctl_stat_reg_mex = {(rx_dma_ctl_stat_reg[53:48] | rx_dma_ctl_stat_word[53:48]), rcr_ctl_stat_word[2:0],
641 (rx_dma_ctl_stat_reg[44:0] | rx_dma_ctl_stat_word[44:0])};
642
643always @ (posedge clk)
644if (reset)
645 rx_dma_ctl_stat_reg <= 54'b0;
646else if (dma_reset)
647 rx_dma_ctl_stat_reg <= 54'b0;
648else if (pio_32b_mode & rx_dma_ctl_stat_reg_wen)
649 rx_dma_ctl_stat_reg <= {rx_dma_ctl_stat_reg[53:32], pio_rx_dma_ctl_stat_word[31:0]};
650else if (pio_32b_mode & rx_dma_ctl_stat_reg_wen_32b)
651 rx_dma_ctl_stat_reg <= {pio_rx_dma_ctl_stat_word[53:32], rx_dma_ctl_stat_reg[31:0]};
652else if (rx_dma_ctl_stat_reg_wen)
653 rx_dma_ctl_stat_reg <= pio_rx_dma_ctl_stat_word[53:0];
654else if (pio_32b_mode & rx_dma_ctl_stat_reg_wr)
655 rx_dma_ctl_stat_reg <= {rx_dma_ctl_stat_reg[53:32], pio_wdata[31:0]};
656else if (pio_32b_mode & rx_dma_ctl_stat_reg_wr_32b)
657 rx_dma_ctl_stat_reg <= {pio_wdata[21:0], rx_dma_ctl_stat_reg[31:0]};
658else if (rx_dma_ctl_stat_reg_wr)
659 rx_dma_ctl_stat_reg <= pio_wdata[53:0];
660else if (m_bit_en & !rcr_ctl_stat_word[2])
661 rx_dma_ctl_stat_reg <= rx_dma_ctl_stat_reg_mex;
662else
663 rx_dma_ctl_stat_reg <= rx_dma_ctl_stat_reg | rx_dma_ctl_stat_word;
664
665always @ (posedge clk)
666if (reset)
667 fatal_err_all_d <= 1'b0;
668else
669 fatal_err_all_d <= fatal_err_all;
670
671wire[15:0] rx_dma_pkt_drop_cnt = rx_dma_pkt_drop_cnt_reg[15:0] + 16'd1;
672wire drop_cnt_overflow = (rx_dma_pkt_drop_cnt_reg[15:0] == 16'hffff);
673
674always @ (posedge clk)
675if (reset)
676 rx_dma_pkt_drop_cnt_reg <= 17'b0;
677else if (dma_reset)
678 rx_dma_pkt_drop_cnt_reg <= 17'b0;
679else if (rx_dma_pkt_drop_cnt_reg_wen)
680 rx_dma_pkt_drop_cnt_reg <= pio_wdata[16:0];
681else if (is_drop_pkt & drop_cnt_overflow)
682 rx_dma_pkt_drop_cnt_reg <= {1'b1, rx_dma_pkt_drop_cnt_reg[15:0]};
683else if (is_drop_pkt)
684 rx_dma_pkt_drop_cnt_reg <= {1'b0, rx_dma_pkt_drop_cnt[15:0]};
685else
686 rx_dma_pkt_drop_cnt_reg <= rx_dma_pkt_drop_cnt_reg;
687
688wire[15:0] rx_dma_wred_drop_cnt = rx_dma_wred_drop_cnt_reg[15:0] + 16'd1;
689wire wred_drop_cnt_overflow = (rx_dma_wred_drop_cnt_reg[15:0] == 16'hffff);
690
691always @ (posedge clk)
692if (reset)
693 rx_dma_wred_drop_cnt_reg <= 17'b0;
694else if (dma_reset)
695 rx_dma_wred_drop_cnt_reg <= 17'b0;
696else if (rx_dma_wred_drop_cnt_reg_wen)
697 rx_dma_wred_drop_cnt_reg <= pio_wdata[16:0];
698else if (is_wred_drop_pkt & wred_drop_cnt_overflow)
699 rx_dma_wred_drop_cnt_reg <= {1'b1, rx_dma_wred_drop_cnt_reg[15:0]};
700else if (is_wred_drop_pkt)
701 rx_dma_wred_drop_cnt_reg <= {1'b0, rx_dma_wred_drop_cnt[15:0]};
702else
703 rx_dma_wred_drop_cnt_reg <= rx_dma_wred_drop_cnt_reg;
704
705
706always @ (posedge clk)
707if (reset)
708 pio_disable_dma <= 1'b0;
709else if (rxdma_cfig1_reg_wen)
710 pio_disable_dma <= disable_dma_ture;
711else if (idle_cycle)
712 pio_disable_dma <= 1'b0;
713else
714 pio_disable_dma <= pio_disable_dma;
715
716
717/***************/
718//PIO Read
719/***************/
720/*
721always @ (pio_addr1 or
722 rx_log_page_vld_reg or rx_log_mask1_reg or
723 rx_log_val1_reg or rx_log_mask2_reg or
724 rx_log_val2_reg or rx_log_page_relo1_reg or
725 rx_log_page_relo2_reg or rx_log_page_hdl_reg or
726 rdc_red_param_reg or rx_dma_wred_drop_cnt_reg)
727begin
728
729fzc_pio_rd_err_tmp = 1'b0;
730case (pio_addr1) //synopsys parallel_case full_case
731
73220'ha0000: fzc_pio_rd_data_tmp = {60'b0, rx_log_page_vld_reg[3:0]};
73320'ha0008: fzc_pio_rd_data_tmp = {32'b0, rx_log_mask1_reg};
73420'ha0010: fzc_pio_rd_data_tmp = {32'b0, rx_log_val1_reg};
73520'ha0018: fzc_pio_rd_data_tmp = {32'b0, rx_log_mask2_reg};
73620'ha0020: fzc_pio_rd_data_tmp = {32'b0, rx_log_val2_reg};
73720'ha0028: fzc_pio_rd_data_tmp = {32'b0, rx_log_page_relo1_reg};
73820'ha0030: fzc_pio_rd_data_tmp = {32'b0, rx_log_page_relo2_reg};
73920'ha0038: fzc_pio_rd_data_tmp = {44'b0, rx_log_page_hdl_reg[19:0]};
74020'hb0000: fzc_pio_rd_data_tmp = {32'b0, rdc_red_param_reg};
74120'hb0008: fzc_pio_rd_data_tmp = {47'b0, rx_dma_wred_drop_cnt_reg[16:0]};
742default: begin
743 fzc_pio_rd_err_tmp = 1'b1;
744 fzc_pio_rd_data_tmp = 64'b0;
745 end
746
747endcase
748end
749*/
750
751always @ (pio_addr1 or
752 rx_log_page_vld_reg or rx_log_mask1_reg or
753 rx_log_val1_reg or rx_log_mask2_reg or
754 rx_log_val2_reg or rx_log_page_relo1_reg or
755 rx_log_page_relo2_reg or rx_log_page_hdl_reg or
756 rdc_red_param_reg or rx_dma_wred_drop_cnt_reg)
757begin
758
759fzc_pio_rd_err_tmp = 1'b0;
760case (pio_addr1[19:2]) //synopsys parallel_case full_case
761
76218'h28000: fzc_pio_rd_data_tmp = {60'b0, rx_log_page_vld_reg[3:0]};
76318'h28001: fzc_pio_rd_data_tmp = 64'b0;
76418'h28002: fzc_pio_rd_data_tmp = {32'b0, rx_log_mask1_reg};
76518'h28003: fzc_pio_rd_data_tmp = 64'b0;
76618'h28004: fzc_pio_rd_data_tmp = {32'b0, rx_log_val1_reg};
76718'h28005: fzc_pio_rd_data_tmp = 64'b0;
76818'h28006: fzc_pio_rd_data_tmp = {32'b0, rx_log_mask2_reg};
76918'h28007: fzc_pio_rd_data_tmp = 64'b0;
77018'h28008: fzc_pio_rd_data_tmp = {32'b0, rx_log_val2_reg};
77118'h28009: fzc_pio_rd_data_tmp = 64'b0;
77218'h2800a: fzc_pio_rd_data_tmp = {32'b0, rx_log_page_relo1_reg};
77318'h2800b: fzc_pio_rd_data_tmp = 64'b0;
77418'h2800c: fzc_pio_rd_data_tmp = {32'b0, rx_log_page_relo2_reg};
77518'h2800d: fzc_pio_rd_data_tmp = 64'b0;
77618'h2800e: fzc_pio_rd_data_tmp = {44'b0, rx_log_page_hdl_reg[19:0]};
77718'h2800f: fzc_pio_rd_data_tmp = 64'b0;
77818'h2c000: fzc_pio_rd_data_tmp = {32'b0, rdc_red_param_reg};
77918'h2c001: fzc_pio_rd_data_tmp = 64'b0;
78018'h2c002: fzc_pio_rd_data_tmp = {47'b0, rx_dma_wred_drop_cnt_reg[16:0]};
78118'h2c003: fzc_pio_rd_data_tmp = 64'b0;
782default: begin
783 fzc_pio_rd_err_tmp = 1'b1;
784 fzc_pio_rd_data_tmp = 64'hdeadbeefdeadbeef;
785 end
786
787endcase
788end
789
790
791/*
792always @ (pio_addr2 or
793 rxdma_cfig1_reg or rxdma_cfig2_reg or
794 rbr_cfig_a_reg or rbr_cfig_b_reg or
795 rbr_kick_reg or desp_curr_cnt or
796 desp_full_addr or
797 rcr_cfig_a_reg or rcr_cfig_b_reg or
798 rcr_status_a or rcr_full_addr or
799 rx_dma_ent_mask_reg or rx_dma_ctl_stat_reg or
800 rcr_flush_reg or rx_dma_pkt_drop_cnt_reg)
801begin
802
803pio_rd_err_tmp = 1'b0;
804case (pio_addr2) //synopsys parallel_case full_case
805
80620'h00000: pio_rd_data_tmp = {32'b0, rxdma_cfig1_reg[14:12], 17'b0, rxdma_cfig1_reg[11:0]};
80720'h00008: pio_rd_data_tmp = {32'b0, rxdma_cfig2_reg[28:3], 3'b0, rxdma_cfig2_reg[2:0]};
80820'h00010: pio_rd_data_tmp = {rbr_cfig_a_reg[53:38], 4'b0, rbr_cfig_a_reg[37:0], 6'b0};
80920'h00018: pio_rd_data_tmp = {38'b0, rbr_cfig_b_reg[10:8], 5'b0, rbr_cfig_b_reg[7:5], 5'b0, rbr_cfig_b_reg[4:2], 5'b0, rbr_cfig_b_reg[1:0]};
81020'h00020: pio_rd_data_tmp = {48'b0, rbr_kick_reg[15:0]};
81120'h00028: pio_rd_data_tmp = {48'b0, desp_curr_cnt[15:0]};
81220'h00030: pio_rd_data_tmp = {52'b0, desp_full_addr[41:30]};
81320'h00038: pio_rd_data_tmp = {32'b0, desp_full_addr[29:0], 2'b0};
81420'h00040: pio_rd_data_tmp = {rcr_cfig_a_reg[53:38], 4'b0, rcr_cfig_a_reg[37:0], 6'b0};
81520'h00048: pio_rd_data_tmp = {32'b0, rcr_cfig_b_reg[22:6], 9'b0, rcr_cfig_b_reg[5:0]};
81620'h00050: pio_rd_data_tmp = {48'b0, rcr_status_a[15:0]};
81720'h00058: pio_rd_data_tmp = {52'b0, rcr_full_addr[40:29]};
81820'h00060: pio_rd_data_tmp = {32'b0, rcr_full_addr[28:0], 3'b0};
81920'h00068: pio_rd_data_tmp = {42'b0, rx_dma_ent_mask_reg[20:15], 1'b0, rx_dma_ent_mask_reg[14:0]};
82020'h00070: pio_rd_data_tmp = {10'b0, rx_dma_ctl_stat_reg[53:0]};
82120'h00078: pio_rd_data_tmp = {63'b0, rcr_flush_reg};
82220'h00090: pio_rd_data_tmp = {47'b0, rx_dma_pkt_drop_cnt_reg[16:0]};
82320'h00098: pio_rd_data_tmp = {10'b0, rx_dma_ctl_stat_reg[53:0]};
824default: begin
825 pio_rd_err_tmp = 1'b1;
826 pio_rd_data_tmp = 64'b0;
827 end
828
829endcase
830end
831*/
832
833always @ (pio_addr2 or
834 rxdma_cfig1_reg or rxdma_cfig2_reg or
835 rbr_cfig_a_reg or rbr_cfig_b_reg or
836 rbr_kick_reg or desp_curr_cnt or
837 desp_full_addr or
838 rcr_cfig_a_reg or rcr_cfig_b_reg or
839 rcr_status_a or rcr_full_addr or
840 rx_dma_ent_mask_reg or rx_dma_ctl_stat_reg or
841 rcr_flush_reg or rx_dma_pkt_drop_cnt_reg)
842begin
843
844pio_rd_err_tmp = 1'b0;
845case (pio_addr2[19:2]) //synopsys parallel_case full_case
846
84718'h00000: pio_rd_data_tmp = {32'b0, rxdma_cfig1_reg[14:12], 17'b0, rxdma_cfig1_reg[11:0]};
84818'h00001: pio_rd_data_tmp = 64'b0;
84918'h00002: pio_rd_data_tmp = {32'b0, rxdma_cfig2_reg[28:3], 3'b0, rxdma_cfig2_reg[2:0]};
85018'h00003: pio_rd_data_tmp = 64'b0;
85118'h00004: pio_rd_data_tmp = {rbr_cfig_a_reg[53:38], 4'b0, rbr_cfig_a_reg[37:0], 6'b0};
85218'h00005: pio_rd_data_tmp = 64'b0;
85318'h00006: pio_rd_data_tmp = {38'b0, rbr_cfig_b_reg[10:8], 5'b0, rbr_cfig_b_reg[7:5], 5'b0, rbr_cfig_b_reg[4:2], 5'b0, rbr_cfig_b_reg[1:0]};
85418'h00007: pio_rd_data_tmp = 64'b0;
85518'h00008: pio_rd_data_tmp = {48'b0, rbr_kick_reg[15:0]};
85618'h00009: pio_rd_data_tmp = 64'b0;
85718'h0000a: pio_rd_data_tmp = {48'b0, desp_curr_cnt[15:0]};
85818'h0000b: pio_rd_data_tmp = 64'b0;
85918'h0000c: pio_rd_data_tmp = {52'b0, desp_full_addr[41:30]};
86018'h0000d: pio_rd_data_tmp = 64'b0;
86118'h0000e: pio_rd_data_tmp = {32'b0, desp_full_addr[29:0], 2'b0};
86218'h0000f: pio_rd_data_tmp = 64'b0;
86318'h00010: pio_rd_data_tmp = {rcr_cfig_a_reg[53:38], 4'b0, rcr_cfig_a_reg[37:0], 6'b0};
86418'h00011: pio_rd_data_tmp = 64'b0;
86518'h00012: pio_rd_data_tmp = {32'b0, rcr_cfig_b_reg[22:6], 9'b0, rcr_cfig_b_reg[5:0]};
86618'h00013: pio_rd_data_tmp = 64'b0;
86718'h00014: pio_rd_data_tmp = {48'b0, rcr_status_a[15:0]};
86818'h00015: pio_rd_data_tmp = 64'b0;
86918'h00016: pio_rd_data_tmp = {52'b0, rcr_full_addr[40:29]};
87018'h00017: pio_rd_data_tmp = 64'b0;
87118'h00018: pio_rd_data_tmp = {32'b0, rcr_full_addr[28:0], 3'b0};
87218'h00019: pio_rd_data_tmp = 64'b0;
87318'h0001a: pio_rd_data_tmp = {42'b0, rx_dma_ent_mask_reg[20:15], 1'b0, rx_dma_ent_mask_reg[14:0]};
87418'h0001b: pio_rd_data_tmp = 64'b0;
87518'h0001c: pio_rd_data_tmp = {10'b0, rx_dma_ctl_stat_reg[53:0]};
87618'h0001d: pio_rd_data_tmp = 64'b0;
87718'h0001e: pio_rd_data_tmp = {63'b0, rcr_flush_reg};
87818'h0001f: pio_rd_data_tmp = 64'b0;
87918'h00024: pio_rd_data_tmp = {47'b0, rx_dma_pkt_drop_cnt_reg[16:0]};
88018'h00025: pio_rd_data_tmp = 64'b0;
88118'h00026: pio_rd_data_tmp = {10'b0, rx_dma_ctl_stat_reg[53:0]};
88218'h00027: pio_rd_data_tmp = 64'b0;
883default: begin
884 pio_rd_err_tmp = 1'b1;
885 pio_rd_data_tmp = 64'hdeadbeefdeadbeef;
886 end
887
888endcase
889end
890
891
892
893/*
894always @ (pio_addr2 or
895 rxdma_cfig1_reg or rxdma_cfig2_reg or
896 rbr_cfig_a_reg or rbr_cfig_b_reg or
897 rbr_kick_reg or desp_curr_cnt or
898 desp_full_addr or
899 rcr_cfig_a_reg or rcr_cfig_b_reg or
900 rcr_status_a or rcr_full_addr or
901 rx_dma_ent_mask_reg or rx_dma_ctl_stat_reg or
902 rcr_flush_reg or rx_dma_pkt_drop_cnt_reg)
903begin
904
905pio_rd_err_tmp_32b = 1'b0;
906case (pio_addr2) //synopsys parallel_case full_case
907
90820'h00000: pio_rd_data_tmp_32b = {32'b0, rxdma_cfig1_reg[14:12], 17'b0, rxdma_cfig1_reg[11:0]};
90920'h00008: pio_rd_data_tmp_32b = {32'b0, rxdma_cfig2_reg[28:3], 3'b0, rxdma_cfig2_reg[2:0]};
91020'h00010: pio_rd_data_tmp_32b = {32'b0, rbr_cfig_a_reg[25:0], 6'b0};
91120'h00014: pio_rd_data_tmp_32b = {32'b0, rbr_cfig_a_reg[53:38], 4'b0, rbr_cfig_a_reg[37:26]};
91220'h00018: pio_rd_data_tmp_32b = {38'b0, rbr_cfig_b_reg[10:8], 5'b0, rbr_cfig_b_reg[7:5], 5'b0, rbr_cfig_b_reg[4:2], 5'b0, rbr_cfig_b_reg[1:0]};
91320'h00020: pio_rd_data_tmp_32b = {48'b0, rbr_kick_reg[15:0]};
91420'h00028: pio_rd_data_tmp_32b = {48'b0, desp_curr_cnt[15:0]};
91520'h00030: pio_rd_data_tmp_32b = {52'b0, desp_full_addr[41:30]};
91620'h00038: pio_rd_data_tmp_32b = {32'b0, desp_full_addr[29:0], 2'b0};
91720'h00040: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_a_reg[25:0], 6'b0};
91820'h00044: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_a_reg[53:38], 4'b0, rcr_cfig_a_reg[37:26]};
91920'h00048: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_b_reg[22:6], 9'b0, rcr_cfig_b_reg[5:0]};
92020'h00050: pio_rd_data_tmp_32b = {48'b0, rcr_status_a[15:0]};
92120'h00058: pio_rd_data_tmp_32b = {52'b0, rcr_full_addr[40:29]};
92220'h00060: pio_rd_data_tmp_32b = {32'b0, rcr_full_addr[28:0], 3'b0};
92320'h00068: pio_rd_data_tmp_32b = {42'b0, rx_dma_ent_mask_reg[20:15], 1'b0, rx_dma_ent_mask_reg[14:0]};
92420'h00070: pio_rd_data_tmp_32b = {32'b0, rx_dma_ctl_stat_reg[31:0]};
92520'h00074: pio_rd_data_tmp_32b = {32'b0, 10'b0, rx_dma_ctl_stat_reg[53:32]};
92620'h00078: pio_rd_data_tmp_32b = {63'b0, rcr_flush_reg};
92720'h00090: pio_rd_data_tmp_32b = {47'b0, rx_dma_pkt_drop_cnt_reg[16:0]};
92820'h00098: pio_rd_data_tmp_32b = {32'b0, rx_dma_ctl_stat_reg[31:0]};
92920'h0009c: pio_rd_data_tmp_32b = {32'b0, 10'b0, rx_dma_ctl_stat_reg[53:32]};
930default: begin
931 pio_rd_err_tmp_32b = 1'b1;
932 pio_rd_data_tmp_32b = 64'b0;
933 end
934
935endcase
936end
937*/
938
939always @ (pio_addr2 or
940 rxdma_cfig1_reg or rxdma_cfig2_reg or
941 rbr_cfig_a_reg or rbr_cfig_b_reg or
942 rbr_kick_reg or desp_curr_cnt or
943 desp_full_addr or
944 rcr_cfig_a_reg or rcr_cfig_b_reg or
945 rcr_status_a or rcr_full_addr or
946 rx_dma_ent_mask_reg or rx_dma_ctl_stat_reg or
947 rcr_flush_reg or rx_dma_pkt_drop_cnt_reg)
948begin
949
950pio_rd_err_tmp_32b = 1'b0;
951case (pio_addr2[19:2]) //synopsys parallel_case full_case
952
95318'h00000: pio_rd_data_tmp_32b = {32'b0, rxdma_cfig1_reg[14:12], 17'b0, rxdma_cfig1_reg[11:0]};
95418'h00001: pio_rd_data_tmp_32b = 64'b0;
95518'h00002: pio_rd_data_tmp_32b = {32'b0, rxdma_cfig2_reg[28:3], 3'b0, rxdma_cfig2_reg[2:0]};
95618'h00003: pio_rd_data_tmp_32b = 64'b0;
95718'h00004: pio_rd_data_tmp_32b = {32'b0, rbr_cfig_a_reg[25:0], 6'b0};
95818'h00005: pio_rd_data_tmp_32b = {32'b0, rbr_cfig_a_reg[53:38], 4'b0, rbr_cfig_a_reg[37:26]};
95918'h00006: pio_rd_data_tmp_32b = {38'b0, rbr_cfig_b_reg[10:8], 5'b0, rbr_cfig_b_reg[7:5], 5'b0, rbr_cfig_b_reg[4:2], 5'b0, rbr_cfig_b_reg[1:0]};
96018'h00007: pio_rd_data_tmp_32b = 64'b0;
96118'h00008: pio_rd_data_tmp_32b = {48'b0, rbr_kick_reg[15:0]};
96218'h00009: pio_rd_data_tmp_32b = 64'b0;
96318'h0000a: pio_rd_data_tmp_32b = {48'b0, desp_curr_cnt[15:0]};
96418'h0000b: pio_rd_data_tmp_32b = 64'b0;
96518'h0000c: pio_rd_data_tmp_32b = {52'b0, desp_full_addr[41:30]};
96618'h0000d: pio_rd_data_tmp_32b = 64'b0;
96718'h0000e: pio_rd_data_tmp_32b = {32'b0, desp_full_addr[29:0], 2'b0};
96818'h0000f: pio_rd_data_tmp_32b = 64'b0;
96918'h00010: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_a_reg[25:0], 6'b0};
97018'h00011: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_a_reg[53:38], 4'b0, rcr_cfig_a_reg[37:26]};
97118'h00012: pio_rd_data_tmp_32b = {32'b0, rcr_cfig_b_reg[22:6], 9'b0, rcr_cfig_b_reg[5:0]};
97218'h00013: pio_rd_data_tmp_32b = 64'b0;
97318'h00014: pio_rd_data_tmp_32b = {48'b0, rcr_status_a[15:0]};
97418'h00015: pio_rd_data_tmp_32b = 64'b0;
97518'h00016: pio_rd_data_tmp_32b = {52'b0, rcr_full_addr[40:29]};
97618'h00017: pio_rd_data_tmp_32b = 64'b0;
97718'h00018: pio_rd_data_tmp_32b = {32'b0, rcr_full_addr[28:0], 3'b0};
97818'h00019: pio_rd_data_tmp_32b = 64'b0;
97918'h0001a: pio_rd_data_tmp_32b = {42'b0, rx_dma_ent_mask_reg[20:15], 1'b0, rx_dma_ent_mask_reg[14:0]};
98018'h0001b: pio_rd_data_tmp_32b = 64'b0;
98118'h0001c: pio_rd_data_tmp_32b = {32'b0, rx_dma_ctl_stat_reg[31:0]};
98218'h0001d: pio_rd_data_tmp_32b = {32'b0, 10'b0, rx_dma_ctl_stat_reg[53:32]};
98318'h0001e: pio_rd_data_tmp_32b = {63'b0, rcr_flush_reg};
98418'h0001f: pio_rd_data_tmp_32b = 64'b0;
98518'h00024: pio_rd_data_tmp_32b = {47'b0, rx_dma_pkt_drop_cnt_reg[16:0]};
98618'h00025: pio_rd_data_tmp_32b = 64'b0;
98718'h00026: pio_rd_data_tmp_32b = {32'b0, rx_dma_ctl_stat_reg[31:0]};
98818'h00027: pio_rd_data_tmp_32b = {32'b0, 10'b0, rx_dma_ctl_stat_reg[53:32]};
989default: begin
990 pio_rd_err_tmp_32b = 1'b1;
991 pio_rd_data_tmp_32b = 64'hdeadbeefdeadbeef;
992 end
993
994endcase
995end
996
997
998wire fzc_pio_rd_sel = addr_match1 & ((pio_addr[19:16] == 4'ha) | (pio_addr[19:16] == 4'hb));
999wire nom_pio_rd_sel = addr_match2 & (pio_addr[19:16] == 4'h0);
1000wire[63:0] chnl_pio_rd_data_tmp = fzc_pio_rd_sel ? fzc_pio_rd_data_tmp :
1001 pio_32b_mode ? pio_rd_data_tmp_32b :
1002 pio_rd_data_tmp;
1003
1004wire pio_rd_gnt_tmp = fzc_pio_rd_sel & !fzc_pio_rd_err_tmp |
1005 nom_pio_rd_sel & pio_32b_mode & !pio_rd_err_tmp_32b |
1006 nom_pio_rd_sel & !pio_32b_mode & !pio_rd_err_tmp;
1007
1008always @ (posedge clk)
1009if (reset)
1010 pio_rd_gnt <= 1'b0;
1011else
1012 pio_rd_gnt <= pio_rd_gnt_tmp;
1013
1014always @ (posedge clk)
1015if (reset)
1016 chnl_pio_rd_data <= 64'b0;
1017else
1018 chnl_pio_rd_data <= chnl_pio_rd_data_tmp;
1019
1020
1021/*********Reset Logic ************/
1022/*********************************/
1023always @(posedge clk)
1024if (reset)
1025 dma_reset <= 1'b0;
1026else if (dma_reset_cnt == 2'b11)
1027 dma_reset <= 1'b0;
1028else if (pio_dma_rst & idle_cycle)
1029 dma_reset <= 1'b1;
1030else
1031 dma_reset <= dma_reset;
1032
1033always @(posedge clk)
1034if (reset)
1035 dma_reset_cnt <= 2'b0;
1036else if (dma_reset)
1037 dma_reset_cnt <= dma_reset_cnt + 2'd1;
1038else
1039 dma_reset_cnt <= 2'b0;
1040
1041
1042
1043endmodule
1044
1045