Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / xmac_slv.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: xmac_slv.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/*%W% %G%*/
36
37/*************************************************************************
38 *
39 * File Name : xmac_slv.v
40 * Author Name : John Lo
41 * Description : It contains PIO read/write decoder, registers, sw_if etc.
42 * Parent Module: xmac_core
43 * Child Module:
44 * Interface Mod: many.
45 * Date Created : 5/9/00
46 *
47 * Copyright (c) 2002, Sun Microsystems, Inc.
48 * Sun Proprietary and Confidential
49 *
50 * Modification :
51 *
52 * Synthesis Notes:
53 *
54 *************************************************************************/
55
56`include "xmac.h"
57
58module xmac_slv
59 (/*AUTOARG*/
60 // Outputs
61 pio_ack, pio_rd_data, pio_err, xmac_debug, mac_debug_sel,
62 strip_crc, addr_filter_en, hash_filter_en, alt_addr_comp_en,
63 mac_alt_addr0, mac_alt_addr1, mac_alt_addr2, mac_alt_addr3,
64 mac_alt_addr4, mac_alt_addr5, mac_alt_addr6, mac_alt_addr7,
65 mac_alt_addr8, mac_alt_addr9, mac_alt_addr10, mac_alt_addr11,
66 mac_alt_addr12, mac_alt_addr13, mac_alt_addr14, mac_alt_addr15,
67 addr_filter, addr_filter_mask_msb, addr_filter_mask_lsb,
68 hash_table, mac_host_info0, mac_host_info1, mac_host_info2,
69 mac_host_info3, mac_host_info4, mac_host_info5, mac_host_info6,
70 mac_host_info7, mac_host_info8, mac_host_info9, mac_host_info10,
71 mac_host_info11, mac_host_info12, mac_host_info13,
72 mac_host_info14, mac_host_info15, mac_host_info16,
73 mac_host_info17, mac_host_info18, mac_host_info19, pcs_bypass,
74 xpcs_bypass, force_LED_on, led_polarity, activity_led, hw_reset,
75 rx_reset_clk, tx_reset_clk, sys_clk_count, txmac_interrupt,
76 rxmac_interrupt, xmac_fc_interrupt, no_tx_min_pkt_size_chk,
77 no_rx_min_pkt_size_chk, always_no_crc, var_min_ipg_en, tx_enable,
78 rx_enable, promisc_all, err_chk_dis, crc_chk_dis,
79 code_viol_chk_dis, promisc_group, reserve_multicast, rx_pause_en,
80 pass_fc, tx_output_en, loopback, sel_por_clk_src, sel_clk_25mhz,
81 mii_mode, gmii_mode, xgmii_mode, mii_or_gmii_mode, lfs_disable,
82 warning_msg_en, ipg_value, ipg_value1, stretch_ratio,
83 stretch_constant, stretch_mode, slot_time, tx_min_pkt_size,
84 rx_min_pkt_size, max_pkt_size, mac_unique_addr, wr_en, rd_en,
85 rac_pls,
86 // Inputs
87 clk, clr_rx_reset_clk, clr_tx_reset_clk, pio_core_reset,
88 pio_core_sel, pio_rd, pio_addr, pio_wr_data, pause_time,
89 rxfifo_underrun_clk, rxfifo_overrun_sync, rx_good_pkt_sync,
90 rx_fc_pkt_ok_clk, inc_max_pkt_err_count_sync,
91 inc_min_pkt_err_count_sync, inc_code_viol_count_sync,
92 inc_align_err_count_sync, inc_crc_err_count_sync,
93 toggle_rx_bcount_sync, inc_bcast_count_sync, inc_mcast_count_sync,
94 inc_histo_cntr1, inc_histo_cntr2, inc_histo_cntr3,
95 inc_histo_cntr4, inc_histo_cntr5, inc_histo_cntr6,
96 inc_histo_cntr7, rx_data_valid_gmux_reg_clk, rx_pa_data,
97 set_tx_pkt_ok_sync, paused_state_sync, txfifo_underrun_sync,
98 txfifo_xfr_err_sync, tx_max_pkt_size_err_sync, txfifo_overrun_clk,
99 toggle_tx_bcount_sync, toggle_txframe_count_sync,
100 tx_data_valid_clk, inc_link_fault_count_sync,
101 remote_fault_oc_sync, local_fault_oc_sync, ipp_rxmac_req,
102 rxmac_ipp_ack, rxmac_ipp_tag, rxmac_ipp_ctrl, rxmac_ipp_stat,
103 txmac_opp_req, opp_txmac_ack, opp_txmac_tag, opp_txmac_stat,
104 opp_txmac_abort, rxfifo_full_clk_reg, rxfifo_empty_clk_reg,
105 rxfifo_rd_ptr_clk, rxfifo_wr_ptr_clk, S_detected_reg,
106 T_E_detected_at_modified_pkt_reg,
107 END_PKT_ERR_detected_a_at_modified_pkt_reg,
108 END_PKT_ERR_detected_b_at_modified_pkt_reg, S_D_reg, S_I_reg,
109 D_S_reg, I_S_reg, abort_bit_reg, rx_err_reg, crc_error_reg,
110 kill_data_ready_reg, kill_crc_reg, rx_sel_reg,
111 txfifo_full_clk_reg, txfifo_empty_clk_reg, tx_swap_reg, tx_on_reg,
112 tx_on_half_reg, back2back_swap_reg1, replace_txd_time_reg,
113 adjust2crc_full_case_last_byte_position_reg,
114 adjust2crc_full_case_last_byte_position_is_3_or_7_reg,
115 stretch_clks_reg, full_case_last_byte_position_reg,
116 stretch_full_case_last_byte_position_reg, stretch_bytes_reg,
117 minus_4bytes_reg, B_eop_reg, stretch_1_more_clk_reg,
118 no_wasted_BW_reg, ipg_done_trail_temp_reg, tx_byte0_reg0,
119 restart_ipg_timer_reg, eop_txclk_reg0, eop_w_fcs_reg0,
120 tx_abort_reg0, eop_w_fcs_reg1, tx_abort_reg1, ipg_done_reg,
121 ipg_done_lead_temp_reg, force_ipg_done_lead_reg,
122 set_back2back_reg, back2back_reg, txfifo_rd_ptr_clk,
123 txfifo_wr_ptr_clk, last_byte_position, mgrlm_state, xrlm_state,
124 sop_state, xtlm_state, lfs_state, xpcs_rxc, xpcs_rxd, xpcs_txc,
125 xpcs_txd, rx_heart_beat_timer_reg, tx_heart_beat_timer_reg,
126 tx_clk_div2, rx_clk_div2, tx_nbclk_div2, rx_nbclk_div2, MDINT
127 );
128
129
130 // global signals
131 input clk;
132 input clr_rx_reset_clk;
133 input clr_tx_reset_clk;
134 input pio_core_reset; // becomes hw_reset
135 input pio_core_sel; // sel
136 output pio_ack;
137 input pio_rd; // r/w
138 input [8:0] pio_addr; // address
139 input [31:0] pio_wr_data; // wr_data
140 output [31:0] pio_rd_data; // rd_data
141 output pio_err;
142 // RxMac related input signals
143 input [15:0] pause_time;// directly from address_decoder.
144 input rxfifo_underrun_clk;
145 input rxfifo_overrun_sync;
146 input rx_good_pkt_sync;
147 input rx_fc_pkt_ok_clk;
148 input inc_max_pkt_err_count_sync;
149 input inc_min_pkt_err_count_sync;
150 input inc_code_viol_count_sync;
151 input inc_align_err_count_sync;
152 input inc_crc_err_count_sync;
153 input toggle_rx_bcount_sync;
154 input inc_bcast_count_sync;
155 input inc_mcast_count_sync;
156 input inc_histo_cntr1;
157 input inc_histo_cntr2;
158 input inc_histo_cntr3;
159 input inc_histo_cntr4;
160 input inc_histo_cntr5;
161 input inc_histo_cntr6;
162 input inc_histo_cntr7;
163 input rx_data_valid_gmux_reg_clk;
164 input [63:0] rx_pa_data;
165 // TxMac status register related input signals
166 input set_tx_pkt_ok_sync;
167 input paused_state_sync;
168 input txfifo_underrun_sync;
169 input txfifo_xfr_err_sync;
170 input tx_max_pkt_size_err_sync;
171 input txfifo_overrun_clk;
172 input toggle_tx_bcount_sync;
173 input toggle_txframe_count_sync;
174 input tx_data_valid_clk;
175 // lfs related input signals
176 input inc_link_fault_count_sync;
177 input remote_fault_oc_sync;
178 input local_fault_oc_sync;
179 // important interface signals
180 input ipp_rxmac_req;
181 input rxmac_ipp_ack;
182 input rxmac_ipp_tag;
183 input rxmac_ipp_ctrl;
184 input [`TBITS] rxmac_ipp_stat;
185 //
186 input txmac_opp_req;
187 input opp_txmac_ack;
188 input opp_txmac_tag;
189 input [3:0] opp_txmac_stat;
190 input opp_txmac_abort;
191 // important rx_xmac internal signals
192 input rxfifo_full_clk_reg;
193 input rxfifo_empty_clk_reg;
194 input [4:0] rxfifo_rd_ptr_clk;
195 input [4:0] rxfifo_wr_ptr_clk;
196 input S_detected_reg;
197 input T_E_detected_at_modified_pkt_reg;
198 input END_PKT_ERR_detected_a_at_modified_pkt_reg;
199 input END_PKT_ERR_detected_b_at_modified_pkt_reg;
200 input S_D_reg;
201 input S_I_reg;
202 input D_S_reg;
203 input I_S_reg;
204 input abort_bit_reg;
205 input rx_err_reg;
206 input crc_error_reg;
207 input kill_data_ready_reg;
208 input kill_crc_reg;
209 input [1:0] rx_sel_reg;
210 // important tx_xmac internal signals
211 input txfifo_full_clk_reg;
212 input txfifo_empty_clk_reg;
213 input tx_swap_reg;
214 input tx_on_reg;
215 input tx_on_half_reg;
216 input back2back_swap_reg1;
217 input replace_txd_time_reg;
218 input [2:0] adjust2crc_full_case_last_byte_position_reg;
219 input adjust2crc_full_case_last_byte_position_is_3_or_7_reg;
220 input [`BYTE] stretch_clks_reg;
221 input [2:0] full_case_last_byte_position_reg;
222 input [3:0] stretch_full_case_last_byte_position_reg;
223 input [2:0] stretch_bytes_reg;
224 input minus_4bytes_reg;
225 input B_eop_reg;
226 input stretch_1_more_clk_reg;
227 input no_wasted_BW_reg;
228 input ipg_done_trail_temp_reg;
229 input [7:0] tx_byte0_reg0;
230 input restart_ipg_timer_reg;
231 input eop_txclk_reg0;
232 input eop_w_fcs_reg0;
233 input tx_abort_reg0;
234 input eop_w_fcs_reg1;
235 input tx_abort_reg1;
236 input ipg_done_reg;
237 input ipg_done_lead_temp_reg;
238 input force_ipg_done_lead_reg;
239 input set_back2back_reg;
240 input back2back_reg;
241 //
242 input [4:0] txfifo_rd_ptr_clk;
243 input [4:0] txfifo_wr_ptr_clk;
244 input [2:0] last_byte_position;
245 // state machine
246 input mgrlm_state;
247 input xrlm_state;
248 input sop_state;
249 input [2:0] xtlm_state;
250 input [1:0] lfs_state;
251 input [7:0] xpcs_rxc;
252 input [63:0] xpcs_rxd;
253 input [7:0] xpcs_txc;
254 input [63:0] xpcs_txd;
255 // internal signals
256 input [3:0] rx_heart_beat_timer_reg;
257 input [3:0] tx_heart_beat_timer_reg;
258 // output signals
259 output [31:0] xmac_debug;
260 output [2:0] mac_debug_sel;
261 // start of ALT_ADDR_AND_HASH_FUNC specific signals
262 output strip_crc;
263 output addr_filter_en;
264 output hash_filter_en;
265 output [15:0] alt_addr_comp_en;
266 output [47:0] mac_alt_addr0;
267 output [47:0] mac_alt_addr1;
268 output [47:0] mac_alt_addr2;
269 output [47:0] mac_alt_addr3;
270 output [47:0] mac_alt_addr4;
271 output [47:0] mac_alt_addr5;
272 output [47:0] mac_alt_addr6;
273 output [47:0] mac_alt_addr7;
274 output [47:0] mac_alt_addr8;
275 output [47:0] mac_alt_addr9;
276 output [47:0] mac_alt_addr10;
277 output [47:0] mac_alt_addr11;
278 output [47:0] mac_alt_addr12;
279 output [47:0] mac_alt_addr13;
280 output [47:0] mac_alt_addr14;
281 output [47:0] mac_alt_addr15;
282 output [47:0] addr_filter;
283 output [7:0] addr_filter_mask_msb;
284 output [15:0] addr_filter_mask_lsb;
285 output [255:0] hash_table;
286 output [`H_INFO] mac_host_info0 ;
287 output [`H_INFO] mac_host_info1 ;
288 output [`H_INFO] mac_host_info2 ;
289 output [`H_INFO] mac_host_info3 ;
290 output [`H_INFO] mac_host_info4 ;
291 output [`H_INFO] mac_host_info5 ;
292 output [`H_INFO] mac_host_info6 ;
293 output [`H_INFO] mac_host_info7 ;
294 output [`H_INFO] mac_host_info8 ;
295 output [`H_INFO] mac_host_info9 ;
296 output [`H_INFO] mac_host_info10;
297 output [`H_INFO] mac_host_info11;
298 output [`H_INFO] mac_host_info12;
299 output [`H_INFO] mac_host_info13;
300 output [`H_INFO] mac_host_info14;
301 output [`H_INFO] mac_host_info15;
302 output [`H_INFO] mac_host_info16;
303 output [`H_INFO] mac_host_info17;
304 output [`H_INFO] mac_host_info18;
305 output [`H_INFO] mac_host_info19;
306 // end of ALT_ADDR_AND_HASH_FUNC specific signals
307 // start of pcs signals
308 output pcs_bypass;
309 output xpcs_bypass;
310 output force_LED_on;
311 output led_polarity;
312 output activity_led;
313 // end of pcs signals
314 output hw_reset;
315 output rx_reset_clk; // rxfifo_unload.v and xmac_sync.v
316 output tx_reset_clk; // txfifo_load.v and xmac_sync.v
317 output [2:0] sys_clk_count;
318 output txmac_interrupt;
319 output rxmac_interrupt;
320 output xmac_fc_interrupt;
321 output no_tx_min_pkt_size_chk;
322 output no_rx_min_pkt_size_chk;
323 output always_no_crc;
324 output var_min_ipg_en;
325 output tx_enable;
326 output rx_enable;
327 output promisc_all;
328 output err_chk_dis;
329 output crc_chk_dis;
330 output code_viol_chk_dis;
331 output promisc_group;
332 output reserve_multicast;
333 output rx_pause_en;
334 output pass_fc;
335 output tx_output_en;
336 output loopback;
337 output sel_por_clk_src;
338 output sel_clk_25mhz;
339 output mii_mode;
340 output gmii_mode;
341 output xgmii_mode;
342 output mii_or_gmii_mode;
343 output lfs_disable;
344 output warning_msg_en;
345 output [2:0] ipg_value;
346 output [`BYTE] ipg_value1;
347 output [4:0] stretch_ratio;
348 output [2:0] stretch_constant;
349 output stretch_mode;
350 output [`BYTE] slot_time;
351 output [9:0] tx_min_pkt_size;
352 output [9:0] rx_min_pkt_size;
353 output [13:0] max_pkt_size;
354 output [47:0] mac_unique_addr;
355 // internal signal observation
356 output wr_en;
357 output rd_en;
358 output rac_pls;
359 // clock observation point signals
360 input tx_clk_div2;
361 input rx_clk_div2;
362 input tx_nbclk_div2;
363 input rx_nbclk_div2;
364 // PMD signals
365 input MDINT;
366
367 reg [31:0] training_vector;
368 reg non_qualified_addr_err;
369 reg [31:0] rd_data;
370 reg ld_debug_reg;
371 reg ld_training_vector;
372 reg ld_tx_sw_reset_clk;
373 reg ld_tx_reg_reset;
374 reg ld_rx_sw_reset_clk;
375 reg ld_rx_reg_reset;
376 reg rac_tx_status;
377 reg ld_tx_status;
378 reg rac_rx_status;
379 reg ld_rx_status;
380 reg rac_fc_status;
381 reg ld_fc_status;
382 reg ld_tx_mask;
383 reg ld_rx_mask;
384 reg ld_fc_mask;
385 reg ld_mac_config;
386 reg ld_ipg_values;
387 reg ld_minpkt_slot_pa_sizes;
388 reg ld_max_pkt_burst_sizes;
389 reg [2:0] ld_mac_unique_addr;
390 reg rac_rx_byte_cntr;
391 reg ld_rx_byte_cntr;
392 reg rac_bcast_cntr;
393 reg ld_bcast_cntr;
394 reg rac_mcast_cntr;
395 reg ld_mcast_cntr;
396 reg rac_fragment_cntr;
397 reg ld_fragment_cntr;
398 reg rac_histo_cntr1;
399 reg ld_histo_cntr1;
400 reg rac_histo_cntr2;
401 reg ld_histo_cntr2;
402 reg rac_histo_cntr3;
403 reg ld_histo_cntr3;
404 reg rac_histo_cntr4;
405 reg ld_histo_cntr4;
406 reg rac_histo_cntr5;
407 reg ld_histo_cntr5;
408 reg rac_histo_cntr6;
409 reg ld_histo_cntr6;
410 reg rac_histo_cntr7;
411 reg ld_histo_cntr7;
412 reg rac_max_pkt_err_cntr;
413 reg ld_max_pkt_err_cntr;
414 reg rac_crc_err_cntr;
415 reg ld_crc_err_cntr;
416 reg rac_code_viol_cntr;
417 reg ld_code_viol_cntr;
418 reg rac_align_err_cntr;
419 reg ld_align_err_cntr;
420 reg rac_tx_frame_cntr;
421 reg ld_tx_frame_cntr;
422 reg rac_tx_byte_cntr;
423 reg ld_tx_byte_cntr;
424 reg rac_link_fault_cntr;
425 reg ld_link_fault_cntr;
426
427 reg pio_ack_p1;
428 reg pio_ack;
429 reg pio_err_p1;
430 reg pio_err;
431/*AUTOWIRE*/
432// Beginning of automatic wires (for undeclared instantiated-module outputs)
433// End of automatics
434 wire [31:0] pio_rd_data;
435 wire [31:0] pio_wr_data;
436 wire [31:0] wr_data;
437 wire core_sel_lead;
438 wire core_sel;
439 wire core_sel1;
440 wire rd_wr,wr_en,rd_en,rac_pls;
441 wire [8:0] reg_offset,pio_addr;
442 wire rx_reg_reset,tx_reg_reset;
443 wire [31:0] tx_status_dout,rx_status_dout,fc_status_dout,
444 tx_mask_dout,rx_mask_dout,fc_mask_dout;
445 wire [2:0] ipg_value;
446 wire [4:0] reserved_ipg;
447 wire [`BYTE] ipg_value1;
448 wire [7:0] tx_config_dout;
449 wire [10:0] rx_config_dout;
450 wire [1:0] fc_config_dout;
451 wire [10:0] xif_config_dout;
452 wire [20:0] bcast_count;
453 wire [20:0] mcast_count;
454 wire [47:0] mac_unique_addr;
455 wire [31:0] rx_byte_count_stat,tx_byte_count_stat;
456 wire [31:0] tx_frame_count_stat;
457 wire [20:0] fragment_count;
458 wire [7:0] max_pkt_err_count;
459 wire [7:0] crc_err_count;
460 wire [7:0] code_viol_count;
461 wire [7:0] align_err_count;
462 wire [7:0] link_fault_count;
463 wire [9:0] tx_min_pkt_size;
464 wire [9:0] rx_min_pkt_size;
465 wire new_tx_reset_clk,new_rx_reset_clk,
466 set_tx_byte_count_exp,tx_byte_count_exp,
467 set_tx_frame_count_exp,tx_frame_count_exp,
468 set_crc_err_cntr_exp,crc_err_cntr_exp,
469 set_max_pkt_err_cntr_exp,max_pkt_err_cntr_exp,
470 set_code_viol_cntr_exp,code_viol_cntr_exp,
471 set_rx_byte_count_exp,rx_byte_count_exp,
472 set_histo_count1_exp,histo_count1_exp,
473 set_histo_count2_exp,histo_count2_exp,
474 set_histo_count3_exp,histo_count3_exp,
475 set_histo_count4_exp,histo_count4_exp,
476 set_histo_count5_exp,histo_count5_exp,
477 set_histo_count6_exp,histo_count6_exp,
478 set_histo_count7_exp,histo_count7_exp,
479 set_bcast_count_exp,bcast_count_exp,
480 set_mcast_count_exp,mcast_count_exp,
481 set_fragment_count_exp,fragment_count_exp,
482 set_link_fault_cntr_exp,
483 tx_paused_status,not_tx_paused_status,
484 inc_rx_bcount;
485
486 wire ipp_rxmac_req;
487 wire rxmac_ipp_ack;
488 wire rxmac_ipp_tag;
489 wire rxmac_ipp_ctrl;
490 wire [`TBITS] rxmac_ipp_stat;
491 wire txmac_opp_req;
492 wire opp_txmac_ack;
493 wire opp_txmac_tag;
494 wire [3:0] opp_txmac_stat;
495 wire opp_txmac_abort;
496
497 reg ipp_rxmac_req_reg;
498 reg rxmac_ipp_ack_reg;
499 reg rxmac_ipp_tag_reg;
500 reg rxmac_ipp_ctrl_reg;
501 reg [`TBITS] rxmac_ipp_stat_reg;
502 reg txmac_opp_req_reg;
503 reg opp_txmac_ack_reg;
504 reg opp_txmac_tag_reg;
505 reg [3:0] opp_txmac_stat_reg;
506 reg opp_txmac_abort_reg;
507
508 wire change_clk_source_pls;
509 wire d_mii_mode;
510 wire d_gmii_mode;
511 wire d_loopback;
512 wire d_sel_por_clk_src;
513 wire mii_or_gmii_mode = mii_mode | gmii_mode;
514 wire [2:0] sys_clk_count;
515 wire tx_reset_clk;
516 wire rx_reset_clk;
517 wire [20:0] histo_count1;
518 wire [20:0] histo_count2;
519 wire [19:0] histo_count3;
520 wire [18:0] histo_count4;
521 wire [17:0] histo_count5;
522 wire [16:0] histo_count6;
523 wire [20:0] histo_count7;
524 wire [7:0] debug_reg;
525 wire [31:0] state_machine0;
526 wire [31:0] internal_signals1;
527 wire [31:0] internal_signals2;
528 wire [31:0] rx_internal_signals1;
529 wire [31:0] tx_internal_signals1;
530 wire [31:0] tx_internal_signals2;
531 wire d_hw_reset,frame_transmitted,txfifo_underflow,
532 tx_max_pkt_size_err,txfifo_overflow,
533 txfifo_xfr_err,frame_received,rxfifo_overflow,
534 rxfifo_underflow,
535 mdint_oc,link_fault_cntr_exp,
536 remote_fault_oc_pls,remote_fault_status,
537 local_fault_oc_pls,local_fault_status,
538 paused_state_sync_lead,paused_state_sync_trail,
539 pause_rcvd,d_sel_clk_25mhz,d_pcs_bypass,
540 d_toggle_rx_bcount_sync,
541 rx_byte_count_stat_reached,d_toggle_tx_bcount_sync,
542 tx_byte_count_stat_reached,d_toggle_txframe_count_sync,
543 tx_frame_count_stat_reached,set_tx_led_pls,
544 set_rx_led_pls;
545
546// vlint flag_net_has_no_load off
547// vlint flag_dangling_net_within_module off
548 wire core_sel_trail;
549 wire set_align_err_cntr_exp;
550// vlint flag_dangling_net_within_module on
551// vlint flag_net_has_no_load on
552
553
554`ifdef ALT_ADDR_AND_HASH_FUNC
555
556 reg ld_alt_addr_comp_en;
557 reg [2:0] ld_mac_alt_addr0 ;
558 reg [2:0] ld_mac_alt_addr1 ;
559 reg [2:0] ld_mac_alt_addr2 ;
560 reg [2:0] ld_mac_alt_addr3 ;
561 reg [2:0] ld_mac_alt_addr4 ;
562 reg [2:0] ld_mac_alt_addr5 ;
563 reg [2:0] ld_mac_alt_addr6 ;
564 reg [2:0] ld_mac_alt_addr7 ;
565 reg [2:0] ld_mac_alt_addr8 ;
566 reg [2:0] ld_mac_alt_addr9 ;
567 reg [2:0] ld_mac_alt_addr10;
568 reg [2:0] ld_mac_alt_addr11;
569 reg [2:0] ld_mac_alt_addr12;
570 reg [2:0] ld_mac_alt_addr13;
571 reg [2:0] ld_mac_alt_addr14;
572 reg [2:0] ld_mac_alt_addr15;
573 reg [2:0] ld_addr_filter;
574 reg ld_addr_filter_mask_msb,
575 ld_addr_filter_mask_lsb;
576 reg [15:0] ld_hash_table;
577 reg ld_mac_host_info0 ;
578 reg ld_mac_host_info1 ;
579 reg ld_mac_host_info2 ;
580 reg ld_mac_host_info3 ;
581 reg ld_mac_host_info4 ;
582 reg ld_mac_host_info5 ;
583 reg ld_mac_host_info6 ;
584 reg ld_mac_host_info7 ;
585 reg ld_mac_host_info8 ;
586 reg ld_mac_host_info9 ;
587 reg ld_mac_host_info10;
588 reg ld_mac_host_info11;
589 reg ld_mac_host_info12;
590 reg ld_mac_host_info13;
591 reg ld_mac_host_info14;
592 reg ld_mac_host_info15;
593 reg ld_mac_host_info16;
594 reg ld_mac_host_info17;
595 reg ld_mac_host_info18;
596 reg ld_mac_host_info19;
597 wire ALT_ADDR_AND_HASH_FUNC_value = 1;
598 wire [`H_INFO] mac_host_info0 ;
599 wire [`H_INFO] mac_host_info1 ;
600 wire [`H_INFO] mac_host_info2 ;
601 wire [`H_INFO] mac_host_info3 ;
602 wire [`H_INFO] mac_host_info4 ;
603 wire [`H_INFO] mac_host_info5 ;
604 wire [`H_INFO] mac_host_info6 ;
605 wire [`H_INFO] mac_host_info7 ;
606 wire [`H_INFO] mac_host_info8 ;
607 wire [`H_INFO] mac_host_info9 ;
608 wire [`H_INFO] mac_host_info10;
609 wire [`H_INFO] mac_host_info11;
610 wire [`H_INFO] mac_host_info12;
611 wire [`H_INFO] mac_host_info13;
612 wire [`H_INFO] mac_host_info14;
613 wire [`H_INFO] mac_host_info15;
614 wire [`H_INFO] mac_host_info16;
615 wire [`H_INFO] mac_host_info17;
616 wire [`H_INFO] mac_host_info18;
617 wire [`H_INFO] mac_host_info19;
618`else // !ifdef ALT_ADDR_AND_HASH_FUNC
619 wire ALT_ADDR_AND_HASH_FUNC_value = 0;
620`endif // ifdef ALT_ADDR_AND_HASH_FUNC
621
622`ifdef XGMII_ONLY
623 wire XGMII_ONLY_value = 1;
624`else
625 wire XGMII_ONLY_value = 0;
626`endif
627
628
629
630/* ----------- Read and Write logic ---------------------------------- */
631
632//***** Register the bif interface signals *********************
633// To reduce gate count -> take register away
634// If there is a timing problem then register them again here.
635//**************************************************************
636
637
638 FD1 core_reset_FD1 (.D(pio_core_reset),.CP(clk),.Q(hw_reset));
639 FD1 rd_wr_FD1 (.D(pio_rd), .CP(clk),.Q(rd_wr));
640 FD1 core_sel_FD1 (.D(pio_core_sel), .CP(clk),.Q(core_sel));
641 FD1 core_sel1_FD1 (.D(pio_core_sel), .CP(clk),.Q(core_sel1)); // duplicat core_sel
642
643 RegDff #(9) reg_offset_RegDff(.din(pio_addr),
644 .clk(clk),
645 .qout(reg_offset));
646
647 RegDff #(32) wr_data_RegDff (.din(pio_wr_data[31:0]),
648 .clk(clk),
649 .qout(wr_data[31:0]));
650
651 PlsGen2 core_sel_PlsGen2(.sig_in(core_sel),.clk(clk),
652 .lead(core_sel_lead),
653 .trail(core_sel_trail));
654
655 assign rd_en = core_sel & rd_wr;
656 assign wr_en = core_sel_lead & (~rd_wr);
657 assign rac_pls = pio_ack & rd_wr;
658
659 assign pio_rd_data = rd_data;
660
661 always @ (posedge clk)
662 begin
663 pio_ack_p1 <= core_sel_lead;
664 pio_ack <= pio_ack_p1;
665 end
666
667 always @ (posedge clk)
668 begin
669 pio_err_p1 <= core_sel_lead & non_qualified_addr_err;
670 pio_err <= pio_err_p1;
671 end
672
673
674 FD1 D_HW_RESET_FF(.D(hw_reset),.CP(clk),.Q(d_hw_reset));
675 counter_X3 SYS_CLK_DIVIDER(clk,hw_reset & !d_hw_reset,1'b1,
676 sys_clk_count[2:0]);
677
678
679/* ----------- Read and Write Address Decoder -------------------------- */
680always @ (posedge clk)
681begin
682 if (core_sel1)
683 case (reg_offset[8:0]) //synopsys parallel_case full_case
684 9'h0:begin
685 ld_tx_sw_reset_clk <= wr_en & wr_data[0];
686 ld_tx_reg_reset <= wr_en & wr_data[1];
687 rd_data <= {30'h0,tx_reg_reset,tx_reset_clk};
688 end // case: 9'h0
689
690 9'h1:begin
691 ld_rx_sw_reset_clk <= wr_en & wr_data[0];
692 ld_rx_reg_reset <= wr_en & wr_data[1];
693 rd_data <= {30'h0,rx_reg_reset,rx_reset_clk};
694 end // case: 9'h1
695
696 9'h4:begin
697 rac_tx_status <= rac_pls;
698 ld_tx_status <= wr_en;
699 rd_data <= tx_status_dout;
700 end
701 9'h5:begin
702 rac_rx_status <= rac_pls;
703 ld_rx_status <= wr_en;
704 rd_data <= rx_status_dout;
705 end
706 9'h6:begin
707 rac_fc_status <= rac_pls;
708 ld_fc_status <= wr_en;
709 rd_data <= fc_status_dout;
710 end
711 9'h8:begin
712 ld_tx_mask <= wr_en;
713 rd_data <= tx_mask_dout;
714 end // case: 9'h8
715
716 9'h9:begin
717 ld_rx_mask <= wr_en;
718 rd_data <= rx_mask_dout;
719 end // case: 9'h9
720
721 9'hA:begin
722 ld_fc_mask <= wr_en;
723 rd_data <= fc_mask_dout;
724 end // case: 9'hA
725
726 9'hC:begin
727 ld_mac_config <= wr_en;
728 rd_data <= {xif_config_dout, // 11 bits [31:21]
729 fc_config_dout, // 2 bits [20:19]
730 rx_config_dout, // 11 bits [18:8]
731 tx_config_dout}; // 8 bits [7:0]
732 end // case: 9'hC
733
734 9'h10:begin
735 ld_ipg_values <= wr_en;
736 rd_data <= {8'b0,
737 stretch_constant[2:0],
738 stretch_ratio[4:0],
739 ipg_value1[7:0],
740 reserved_ipg[4:0],
741 ipg_value[2:0]};
742 end // case: 9'h10
743
744 9'h11:begin
745 ld_minpkt_slot_pa_sizes <= wr_en;
746 rd_data <= {2'h0,rx_min_pkt_size,2'b0,slot_time,tx_min_pkt_size};
747 end // case: 9'h11
748
749 9'h12:begin
750 ld_max_pkt_burst_sizes <= wr_en;
751 rd_data <= {18'b0,max_pkt_size};
752 end // case: 9'h12
753
754 9'h14:begin
755 ld_mac_unique_addr[0] <= wr_en;
756 rd_data <= {16'h0,mac_unique_addr[47:32]};
757 end // case: 9'h14
758
759 9'h15:begin
760 ld_mac_unique_addr[1] <= wr_en;
761 rd_data <= {16'h0,mac_unique_addr[31:16]};
762 end // case: 9'h15
763
764 9'h16:begin
765 ld_mac_unique_addr[2] <= wr_en;
766 rd_data <= {16'h0,mac_unique_addr[15:0]};
767 end // case: 9'h16
768
769 9'h20:begin
770 rac_rx_byte_cntr <= rac_pls;
771 ld_rx_byte_cntr <= wr_en;
772 rd_data <= rx_byte_count_stat;
773 end // case: 9'h20
774
775 9'h21:begin
776 rac_bcast_cntr <= rac_pls;
777 ld_bcast_cntr <= wr_en;
778 rd_data <= {11'h0,bcast_count};
779 end // case: 9'h21
780
781 9'h22:begin
782 rac_mcast_cntr <= rac_pls;
783 ld_mcast_cntr <= wr_en;
784 rd_data <= {11'h0,mcast_count};
785 end // case: 9'h22
786
787 9'h23:begin
788 rac_fragment_cntr <= rac_pls;
789 ld_fragment_cntr <= wr_en;
790 rd_data <= {11'h0,fragment_count};
791 end // case: 9'h23
792
793 9'h24:begin
794 rac_histo_cntr1 <= rac_pls;
795 ld_histo_cntr1 <= wr_en;
796 rd_data <= {11'h0,histo_count1};
797 end // case: 9'h24
798
799 9'h25:begin
800 rac_histo_cntr2 <= rac_pls;
801 ld_histo_cntr2 <= wr_en;
802 rd_data <= {11'h0,histo_count2};
803 end // case: 9'h25
804
805 9'h26:begin
806 rac_histo_cntr3 <= rac_pls;
807 ld_histo_cntr3 <= wr_en;
808 rd_data <= {12'h0,histo_count3};
809 end // case: 9'h26
810
811 9'h27:begin
812 rac_histo_cntr4 <= rac_pls;
813 ld_histo_cntr4 <= wr_en;
814 rd_data <= {13'h0,histo_count4};
815 end // case: 9'h27
816
817 9'h28:begin
818 rac_histo_cntr5 <= rac_pls;
819 ld_histo_cntr5 <= wr_en;
820 rd_data <= {14'h0,histo_count5};
821 end // case: 9'h28
822
823 9'h29:begin
824 rac_histo_cntr6 <= rac_pls;
825 ld_histo_cntr6 <= wr_en;
826 rd_data <= {15'h0,histo_count6};
827 end // case: 9'h29
828
829 9'h2A:begin
830 rac_max_pkt_err_cntr <= rac_pls;
831 ld_max_pkt_err_cntr <= wr_en;
832 rd_data <= {24'h0,max_pkt_err_count};
833 end // case: 9'h2A
834
835 9'h2B:begin
836 rac_crc_err_cntr <= rac_pls;
837 ld_crc_err_cntr <= wr_en;
838 rd_data <= {24'h0,crc_err_count};
839 end // case: 9'h2B
840
841 9'h2C:begin
842 rac_code_viol_cntr <= rac_pls;
843 ld_code_viol_cntr <= wr_en;
844 rd_data <= {24'h0,code_viol_count};
845 end // case: 9'h2C
846
847 9'h2D:begin
848 rac_align_err_cntr <= rac_pls;
849 ld_align_err_cntr <= wr_en;
850 rd_data <= {24'h0,align_err_count};
851 end // case: 9'h2D
852
853 9'h2E:begin
854 rac_tx_frame_cntr <= rac_pls;
855 ld_tx_frame_cntr <= wr_en;
856 rd_data <= tx_frame_count_stat;
857 end // case: 9'h2E
858
859 9'h2F:begin
860 rac_tx_byte_cntr <= rac_pls;
861 ld_tx_byte_cntr <= wr_en;
862 rd_data <= tx_byte_count_stat;
863 end // case: 9'h2F
864
865 9'h30:begin
866 rac_link_fault_cntr <= rac_pls;
867 ld_link_fault_cntr <= wr_en;
868 rd_data <= {24'h0,link_fault_count};
869 end // case: 9'h30
870
871 9'h31:begin
872 rac_histo_cntr7 <= rac_pls;
873 ld_histo_cntr7 <= wr_en;
874 rd_data <= {11'h0,histo_count7};
875 end // case: 9'h29
876
877 9'h35:begin
878 rd_data <= state_machine0;
879 end // case: 9'h35
880
881 9'h36:begin
882 rd_data <= internal_signals1;
883 end // case: 9'h36
884
885 9'h37:begin
886 rd_data <= internal_signals2;
887 end // case: 9'h37
888
889
890`ifdef ALT_ADDR_AND_HASH_FUNC
891
892/***** start of mac addr compare enable register *****/
893 // addr 9'h40 is not used
894 9'h41:begin // ADDR:0F8
895 ld_alt_addr_comp_en <= wr_en;
896 rd_data <= {16'b0,alt_addr_comp_en[15:0]};
897 end
898
899/***** start of mac alt addr *****/
900 // 1
901 9'h43:begin
902 ld_mac_alt_addr0[0] <= wr_en;
903 rd_data <= {16'h0,mac_alt_addr0[47:32]};
904 end
905
906 9'h44:begin
907 ld_mac_alt_addr0[1] <= wr_en;
908 rd_data <= {16'h0,mac_alt_addr0[31:16]};
909 end
910
911 9'h45:begin
912 ld_mac_alt_addr0[2] <= wr_en;
913 rd_data <= {16'h0,mac_alt_addr0[15:0]};
914 end
915// 2
916 9'h46:begin
917 ld_mac_alt_addr1[0] <= wr_en;
918 rd_data <= {16'h0,mac_alt_addr1[47:32]};
919 end
920
921 9'h47:begin
922 ld_mac_alt_addr1[1] <= wr_en;
923 rd_data <= {16'h0,mac_alt_addr1[31:16]};
924 end
925
926 9'h48:begin
927 ld_mac_alt_addr1[2] <= wr_en;
928 rd_data <= {16'h0,mac_alt_addr1[15:0]};
929 end
930// 3
931 9'h49:begin
932 ld_mac_alt_addr2[0] <= wr_en;
933 rd_data <= {16'h0,mac_alt_addr2[47:32]};
934 end
935
936 9'h4A:begin
937 ld_mac_alt_addr2[1] <= wr_en;
938 rd_data <= {16'h0,mac_alt_addr2[31:16]};
939 end
940
941 9'h4B:begin
942 ld_mac_alt_addr2[2] <= wr_en;
943 rd_data <= {16'h0,mac_alt_addr2[15:0]};
944 end
945// 4
946 9'h4C:begin
947 ld_mac_alt_addr3[0] <= wr_en;
948 rd_data <= {16'h0,mac_alt_addr3[47:32]};
949 end
950
951 9'h4D:begin
952 ld_mac_alt_addr3[1] <= wr_en;
953 rd_data <= {16'h0,mac_alt_addr3[31:16]};
954 end
955
956 9'h4E:begin
957 ld_mac_alt_addr3[2] <= wr_en;
958 rd_data <= {16'h0,mac_alt_addr3[15:0]};
959 end
960// 5
961 9'h4F:begin
962 ld_mac_alt_addr4[0] <= wr_en;
963 rd_data <= {16'h0,mac_alt_addr4[47:32]};
964 end
965
966 9'h50:begin
967 ld_mac_alt_addr4[1] <= wr_en;
968 rd_data <= {16'h0,mac_alt_addr4[31:16]};
969 end
970
971 9'h51:begin
972 ld_mac_alt_addr4[2] <= wr_en;
973 rd_data <= {16'h0,mac_alt_addr4[15:0]};
974 end
975// 6
976 9'h52:begin
977 ld_mac_alt_addr5[0] <= wr_en;
978 rd_data <= {16'h0,mac_alt_addr5[47:32]};
979 end
980
981 9'h53:begin
982 ld_mac_alt_addr5[1] <= wr_en;
983 rd_data <= {16'h0,mac_alt_addr5[31:16]};
984 end
985
986 9'h54:begin
987 ld_mac_alt_addr5[2] <= wr_en;
988 rd_data <= {16'h0,mac_alt_addr5[15:0]};
989 end
990// 7
991 9'h55:begin
992 ld_mac_alt_addr6[0] <= wr_en;
993 rd_data <= {16'h0,mac_alt_addr6[47:32]};
994 end
995
996 9'h56:begin
997 ld_mac_alt_addr6[1] <= wr_en;
998 rd_data <= {16'h0,mac_alt_addr6[31:16]};
999 end
1000
1001 9'h57:begin
1002 ld_mac_alt_addr6[2] <= wr_en;
1003 rd_data <= {16'h0,mac_alt_addr6[15:0]};
1004 end
1005// 8
1006 9'h58:begin
1007 ld_mac_alt_addr7[0] <= wr_en;
1008 rd_data <= {16'h0,mac_alt_addr7[47:32]};
1009 end
1010
1011 9'h59:begin
1012 ld_mac_alt_addr7[1] <= wr_en;
1013 rd_data <= {16'h0,mac_alt_addr7[31:16]};
1014 end
1015
1016 9'h5A:begin
1017 ld_mac_alt_addr7[2] <= wr_en;
1018 rd_data <= {16'h0,mac_alt_addr7[15:0]};
1019 end
1020// 9
1021 9'h5B:begin
1022 ld_mac_alt_addr8[0] <= wr_en;
1023 rd_data <= {16'h0,mac_alt_addr8[47:32]};
1024 end
1025
1026 9'h5C:begin
1027 ld_mac_alt_addr8[1] <= wr_en;
1028 rd_data <= {16'h0,mac_alt_addr8[31:16]};
1029 end
1030
1031 9'h5D:begin
1032 ld_mac_alt_addr8[2] <= wr_en;
1033 rd_data <= {16'h0,mac_alt_addr8[15:0]};
1034 end
1035// 10
1036 9'h5E:begin
1037 ld_mac_alt_addr9[0] <= wr_en;
1038 rd_data <= {16'h0,mac_alt_addr9[47:32]};
1039 end
1040
1041 9'h5F:begin
1042 ld_mac_alt_addr9[1] <= wr_en;
1043 rd_data <= {16'h0,mac_alt_addr9[31:16]};
1044 end
1045
1046 9'h60:begin
1047 ld_mac_alt_addr9[2] <= wr_en;
1048 rd_data <= {16'h0,mac_alt_addr9[15:0]};
1049 end
1050// 11
1051 9'h61:begin
1052 ld_mac_alt_addr10[0] <= wr_en;
1053 rd_data <= {16'h0,mac_alt_addr10[47:32]};
1054 end
1055
1056 9'h62:begin
1057 ld_mac_alt_addr10[1] <= wr_en;
1058 rd_data <= {16'h0,mac_alt_addr10[31:16]};
1059 end
1060
1061 9'h63:begin
1062 ld_mac_alt_addr10[2] <= wr_en;
1063 rd_data <= {16'h0,mac_alt_addr10[15:0]};
1064 end
1065// 12
1066 9'h64:begin
1067 ld_mac_alt_addr11[0] <= wr_en;
1068 rd_data <= {16'h0,mac_alt_addr11[47:32]};
1069 end
1070
1071 9'h65:begin
1072 ld_mac_alt_addr11[1] <= wr_en;
1073 rd_data <= {16'h0,mac_alt_addr11[31:16]};
1074 end
1075
1076 9'h66:begin
1077 ld_mac_alt_addr11[2] <= wr_en;
1078 rd_data <= {16'h0,mac_alt_addr11[15:0]};
1079 end
1080// 13
1081 9'h67:begin
1082 ld_mac_alt_addr12[0] <= wr_en;
1083 rd_data <= {16'h0,mac_alt_addr12[47:32]};
1084 end
1085
1086 9'h68:begin
1087 ld_mac_alt_addr12[1] <= wr_en;
1088 rd_data <= {16'h0,mac_alt_addr12[31:16]};
1089 end
1090
1091 9'h69:begin
1092 ld_mac_alt_addr12[2] <= wr_en;
1093 rd_data <= {16'h0,mac_alt_addr12[15:0]};
1094 end
1095// 14
1096 9'h6A:begin
1097 ld_mac_alt_addr13[0] <= wr_en;
1098 rd_data <= {16'h0,mac_alt_addr13[47:32]};
1099 end
1100
1101 9'h6B:begin
1102 ld_mac_alt_addr13[1] <= wr_en;
1103 rd_data <= {16'h0,mac_alt_addr13[31:16]};
1104 end
1105
1106 9'h6C:begin
1107 ld_mac_alt_addr13[2] <= wr_en;
1108 rd_data <= {16'h0,mac_alt_addr13[15:0]};
1109 end
1110// 15
1111 9'h6D:begin
1112 ld_mac_alt_addr14[0] <= wr_en;
1113 rd_data <= {16'h0,mac_alt_addr14[47:32]};
1114 end
1115
1116 9'h6E:begin
1117 ld_mac_alt_addr14[1] <= wr_en;
1118 rd_data <= {16'h0,mac_alt_addr14[31:16]};
1119 end
1120
1121 9'h6F:begin
1122 ld_mac_alt_addr14[2] <= wr_en;
1123 rd_data <= {16'h0,mac_alt_addr14[15:0]};
1124 end
1125// 16
1126 9'h70:begin
1127 ld_mac_alt_addr15[0] <= wr_en;
1128 rd_data <= {16'h0,mac_alt_addr15[47:32]};
1129 end
1130
1131 9'h71:begin
1132 ld_mac_alt_addr15[1] <= wr_en;
1133 rd_data <= {16'h0,mac_alt_addr15[31:16]};
1134 end
1135
1136 9'h72:begin
1137 ld_mac_alt_addr15[2] <= wr_en;
1138 rd_data <= {16'h0,mac_alt_addr15[15:0]};
1139 end
1140/***** end of mac alt addr *****/
1141
1142/***** start of addr filter ****/
1143 9'h103:begin // addr: 40C
1144 ld_addr_filter[0] <= wr_en;
1145 rd_data <= {16'h0,addr_filter[47:32]};
1146 end
1147
1148 9'h104:begin // addr: 410
1149 ld_addr_filter[1] <= wr_en;
1150 rd_data <= {16'h0,addr_filter[31:16]};
1151 end
1152
1153 9'h105:begin // addr: 414
1154 ld_addr_filter[2] <= wr_en;
1155 rd_data <= {16'h0,addr_filter[15:0]};
1156 end
1157
1158 9'h106:begin // addr: 418
1159 ld_addr_filter_mask_msb <= wr_en;
1160 rd_data <= {24'h0,addr_filter_mask_msb[7:0]};
1161 end
1162
1163 9'h107:begin // addr: 41C
1164 ld_addr_filter_mask_lsb <= wr_en;
1165 rd_data <= {16'h0,addr_filter_mask_lsb[15:0]};
1166 end
1167/***** end of addr filter ****/
1168
1169/***** start of hash table *****/
1170 9'h108:begin // addr: 420
1171 ld_hash_table[0] <= wr_en;
1172 rd_data <= {16'h0,hash_table[255:240]};
1173 end
1174
1175 9'h109:begin
1176 ld_hash_table[1] <= wr_en;
1177 rd_data <= {16'h0,hash_table[239:224]};
1178 end
1179
1180 9'h10A:begin
1181 ld_hash_table[2] <= wr_en;
1182 rd_data <= {16'h0,hash_table[223:208]};
1183 end
1184
1185 9'h10B:begin
1186 ld_hash_table[3] <= wr_en;
1187 rd_data <= {16'h0,hash_table[207:192]};
1188 end
1189
1190 9'h10C:begin
1191 ld_hash_table[4] <= wr_en;
1192 rd_data <= {16'h0,hash_table[191:176]};
1193 end
1194
1195 9'h10D:begin
1196 ld_hash_table[5] <= wr_en;
1197 rd_data <= {16'h0,hash_table[175:160]};
1198 end
1199
1200 9'h10E:begin
1201 ld_hash_table[6] <= wr_en;
1202 rd_data <= {16'h0,hash_table[159:144]};
1203 end
1204
1205 9'h10F:begin
1206 ld_hash_table[7] <= wr_en;
1207 rd_data <= {16'h0,hash_table[143:128]};
1208 end
1209
1210 9'h110:begin
1211 ld_hash_table[8] <= wr_en;
1212 rd_data <= {16'h0,hash_table[127:112]};
1213 end
1214
1215 9'h111:begin
1216 ld_hash_table[9] <= wr_en;
1217 rd_data <= {16'h0,hash_table[111:96]};
1218 end
1219
1220 9'h112:begin
1221 ld_hash_table[10] <= wr_en;
1222 rd_data <= {16'h0,hash_table[95:80]};
1223 end
1224
1225 9'h113:begin
1226 ld_hash_table[11] <= wr_en;
1227 rd_data <= {16'h0,hash_table[79:64]};
1228 end
1229
1230 9'h114:begin
1231 ld_hash_table[12] <= wr_en;
1232 rd_data <= {16'h0,hash_table[63:48]};
1233 end
1234
1235 9'h115:begin
1236 ld_hash_table[13] <= wr_en;
1237 rd_data <= {16'h0,hash_table[47:32]};
1238 end
1239
1240 9'h116:begin
1241 ld_hash_table[14] <= wr_en;
1242 rd_data <= {16'h0,hash_table[31:16]};
1243 end
1244
1245 9'h117:begin
1246 ld_hash_table[15] <= wr_en;
1247 rd_data <= {16'h0,hash_table[15:0]};
1248 end
1249
1250/***** start of mac host info table *****/
1251 // 1
1252 9'h120:begin
1253 ld_mac_host_info0 <= wr_en;
1254 rd_data <= {14'b0,mac_host_info0};
1255 end
1256 // 2
1257 9'h121:begin
1258 ld_mac_host_info1 <= wr_en;
1259 rd_data <= {14'b0,mac_host_info1};
1260 end
1261 // 3
1262 9'h122:begin
1263 ld_mac_host_info2 <= wr_en;
1264 rd_data <= {14'b0,mac_host_info2};
1265 end
1266 // 4
1267 9'h123:begin
1268 ld_mac_host_info3 <= wr_en;
1269 rd_data <= {14'b0,mac_host_info3};
1270 end
1271 // 5
1272 9'h124:begin
1273 ld_mac_host_info4 <= wr_en;
1274 rd_data <= {14'b0,mac_host_info4};
1275 end
1276 // 6
1277 9'h125:begin
1278 ld_mac_host_info5 <= wr_en;
1279 rd_data <= {14'b0,mac_host_info5};
1280 end
1281 // 7
1282 9'h126:begin
1283 ld_mac_host_info6 <= wr_en;
1284 rd_data <= {14'b0,mac_host_info6};
1285 end
1286 // 8
1287 9'h127:begin
1288 ld_mac_host_info7 <= wr_en;
1289 rd_data <= {14'b0,mac_host_info7};
1290 end
1291 // 9
1292 9'h128:begin
1293 ld_mac_host_info8 <= wr_en;
1294 rd_data <= {14'b0,mac_host_info8};
1295 end
1296 // 10
1297 9'h129:begin
1298 ld_mac_host_info9 <= wr_en;
1299 rd_data <= {14'b0,mac_host_info9};
1300 end
1301 // 11
1302 9'h12A:begin
1303 ld_mac_host_info10 <= wr_en;
1304 rd_data <= {14'b0,mac_host_info10};
1305 end
1306 // 12
1307 9'h12B:begin
1308 ld_mac_host_info11 <= wr_en;
1309 rd_data <= {14'b0,mac_host_info11};
1310 end
1311 // 13
1312 9'h12C:begin
1313 ld_mac_host_info12 <= wr_en;
1314 rd_data <= {14'b0,mac_host_info12};
1315 end
1316 // 14
1317 9'h12D:begin
1318 ld_mac_host_info13 <= wr_en;
1319 rd_data <= {14'b0,mac_host_info13};
1320 end
1321 // 15
1322 9'h12E:begin
1323 ld_mac_host_info14 <= wr_en;
1324 rd_data <= {14'b0,mac_host_info14};
1325 end
1326 // 16
1327 9'h12F:begin
1328 ld_mac_host_info15 <= wr_en;
1329 rd_data <= {14'b0,mac_host_info15};
1330 end
1331 // 17
1332 9'h130:begin
1333 ld_mac_host_info16 <= wr_en;
1334 rd_data <= {14'b0,mac_host_info16};
1335 end
1336 // 18
1337 9'h131:begin
1338 ld_mac_host_info17 <= wr_en;
1339 rd_data <= {14'b0,mac_host_info17};
1340 end
1341 // 19
1342 9'h132:begin
1343 ld_mac_host_info18 <= wr_en;
1344 rd_data <= {14'b0,mac_host_info18};
1345 end
1346 // 20
1347 9'h133:begin
1348 ld_mac_host_info19 <= wr_en;
1349 rd_data <= {14'b0,mac_host_info19};
1350 end
1351 // 140~15F is reserved for another 32 host info regs.
1352
1353
1354/***** end of mac host info table *****/
1355
1356`endif // !ifdef ALT_ADDR_AND_HASH_FUNC
1357
1358 9'h170:begin
1359 rd_data <= rx_pa_data[31:0];
1360 end
1361 9'h171:begin
1362 rd_data <= rx_pa_data[63:32];
1363 end
1364
1365 9'h172:begin
1366 ld_debug_reg <= wr_en;
1367 rd_data <= {24'b0,debug_reg};
1368 end
1369
1370 9'h173:begin
1371 ld_training_vector <= wr_en;
1372 rd_data <= training_vector;
1373 end
1374
1375 default:begin
1376 rd_data <= 32'hdead_beef;
1377 non_qualified_addr_err <= 1;
1378 end
1379 endcase // case(reg_offset[8:0])
1380 else
1381 begin
1382 non_qualified_addr_err <= 0;
1383 rd_data <= 32'hDEADBEEF;
1384 ld_debug_reg <= 0;
1385 ld_training_vector <= 0;
1386 ld_tx_sw_reset_clk <= 0;
1387 ld_tx_reg_reset <= 0;
1388 ld_rx_sw_reset_clk <= 0;
1389 ld_rx_reg_reset <= 0;
1390 rac_tx_status <= 0;
1391 ld_tx_status <= 0;
1392 rac_rx_status <= 0;
1393 ld_rx_status <= 0;
1394 rac_fc_status <= 0;
1395 ld_fc_status <= 0;
1396 ld_tx_mask <= 0;
1397 ld_rx_mask <= 0;
1398 ld_fc_mask <= 0;
1399 ld_mac_config <= 0;
1400 ld_ipg_values <= 0;
1401 ld_minpkt_slot_pa_sizes <= 0;
1402 ld_max_pkt_burst_sizes <= 0;
1403 ld_mac_unique_addr[0] <= 0;
1404 ld_mac_unique_addr[1] <= 0;
1405 ld_mac_unique_addr[2] <= 0;
1406 rac_rx_byte_cntr <= 0;
1407 ld_rx_byte_cntr <= 0;
1408 rac_bcast_cntr <= 0;
1409 ld_bcast_cntr <= 0;
1410 rac_mcast_cntr <= 0;
1411 ld_mcast_cntr <= 0;
1412 rac_fragment_cntr <= 0;
1413 ld_fragment_cntr <= 0;
1414 rac_histo_cntr1 <= 0;
1415 ld_histo_cntr1 <= 0;
1416 rac_histo_cntr2 <= 0;
1417 ld_histo_cntr2 <= 0;
1418 rac_histo_cntr3 <= 0;
1419 ld_histo_cntr3 <= 0;
1420 rac_histo_cntr4 <= 0;
1421 ld_histo_cntr4 <= 0;
1422 rac_histo_cntr5 <= 0;
1423 ld_histo_cntr5 <= 0;
1424 rac_histo_cntr6 <= 0;
1425 ld_histo_cntr6 <= 0;
1426 rac_histo_cntr7 <= 0;
1427 ld_histo_cntr7 <= 0;
1428 rac_max_pkt_err_cntr <= 0;
1429 ld_max_pkt_err_cntr <= 0;
1430 rac_crc_err_cntr <= 0;
1431 ld_crc_err_cntr <= 0;
1432 rac_code_viol_cntr <= 0;
1433 ld_code_viol_cntr <= 0;
1434 rac_align_err_cntr <= 0;
1435 ld_align_err_cntr <= 0;
1436 rac_tx_frame_cntr <= 0;
1437 ld_tx_frame_cntr <= 0;
1438 rac_tx_byte_cntr <= 0;
1439 ld_tx_byte_cntr <= 0;
1440 rac_link_fault_cntr <= 0;
1441 ld_link_fault_cntr <= 0;
1442 // start of ALT_ADDR_AND_HASH_FUNC signals
1443 `ifdef ALT_ADDR_AND_HASH_FUNC
1444 ld_alt_addr_comp_en <= 0;
1445 ld_mac_alt_addr0[0] <= 0;
1446 ld_mac_alt_addr0[1] <= 0;
1447 ld_mac_alt_addr0[2] <= 0;
1448 ld_mac_alt_addr1[0] <= 0;
1449 ld_mac_alt_addr1[1] <= 0;
1450 ld_mac_alt_addr1[2] <= 0;
1451 ld_mac_alt_addr2[0] <= 0;
1452 ld_mac_alt_addr2[1] <= 0;
1453 ld_mac_alt_addr2[2] <= 0;
1454 ld_mac_alt_addr3[0] <= 0;
1455 ld_mac_alt_addr3[1] <= 0;
1456 ld_mac_alt_addr3[2] <= 0;
1457 ld_mac_alt_addr4[0] <= 0;
1458 ld_mac_alt_addr4[1] <= 0;
1459 ld_mac_alt_addr4[2] <= 0;
1460 ld_mac_alt_addr5[0] <= 0;
1461 ld_mac_alt_addr5[1] <= 0;
1462 ld_mac_alt_addr5[2] <= 0;
1463 ld_mac_alt_addr6[0] <= 0;
1464 ld_mac_alt_addr6[1] <= 0;
1465 ld_mac_alt_addr6[2] <= 0;
1466 ld_mac_alt_addr7[0] <= 0;
1467 ld_mac_alt_addr7[1] <= 0;
1468 ld_mac_alt_addr7[2] <= 0;
1469 ld_mac_alt_addr8[0] <= 0;
1470 ld_mac_alt_addr8[1] <= 0;
1471 ld_mac_alt_addr8[2] <= 0;
1472 ld_mac_alt_addr9[0] <= 0;
1473 ld_mac_alt_addr9[1] <= 0;
1474 ld_mac_alt_addr9[2] <= 0;
1475 ld_mac_alt_addr10[0] <= 0;
1476 ld_mac_alt_addr10[1] <= 0;
1477 ld_mac_alt_addr10[2] <= 0;
1478 ld_mac_alt_addr11[0] <= 0;
1479 ld_mac_alt_addr11[1] <= 0;
1480 ld_mac_alt_addr11[2] <= 0;
1481 ld_mac_alt_addr12[0] <= 0;
1482 ld_mac_alt_addr12[1] <= 0;
1483 ld_mac_alt_addr12[2] <= 0;
1484 ld_mac_alt_addr13[0] <= 0;
1485 ld_mac_alt_addr13[1] <= 0;
1486 ld_mac_alt_addr13[2] <= 0;
1487 ld_mac_alt_addr14[0] <= 0;
1488 ld_mac_alt_addr14[1] <= 0;
1489 ld_mac_alt_addr14[2] <= 0;
1490 ld_mac_alt_addr15[0] <= 0;
1491 ld_mac_alt_addr15[1] <= 0;
1492 ld_mac_alt_addr15[2] <= 0;
1493 ld_addr_filter[0] <= 0;
1494 ld_addr_filter[1] <= 0;
1495 ld_addr_filter[2] <= 0;
1496 ld_addr_filter_mask_msb <= 0;
1497 ld_addr_filter_mask_lsb <= 0;
1498 ld_hash_table <= 0;
1499 ld_mac_host_info0 <= 0;
1500 ld_mac_host_info1 <= 0;
1501 ld_mac_host_info2 <= 0;
1502 ld_mac_host_info3 <= 0;
1503 ld_mac_host_info4 <= 0;
1504 ld_mac_host_info5 <= 0;
1505 ld_mac_host_info6 <= 0;
1506 ld_mac_host_info7 <= 0;
1507 ld_mac_host_info8 <= 0;
1508 ld_mac_host_info9 <= 0;
1509 ld_mac_host_info10 <= 0;
1510 ld_mac_host_info11 <= 0;
1511 ld_mac_host_info12 <= 0;
1512 ld_mac_host_info13 <= 0;
1513 ld_mac_host_info14 <= 0;
1514 ld_mac_host_info15 <= 0;
1515 ld_mac_host_info16 <= 0;
1516 ld_mac_host_info17 <= 0;
1517 ld_mac_host_info18 <= 0;
1518 ld_mac_host_info19 <= 0;
1519 // end ALT_ADDR_AND_HASH_FUNC of
1520 //`else
1521 `endif // ifdef ALT_ADDR_AND_HASH_FUNC
1522 end
1523end // always @ (posedge clk)
1524
1525
1526/* ----------- xmac registers ------------------------------------------ */
1527
1528
1529/* --------------------------- Command Register ------------------------ */
1530 // tx_reset_clk: used to reset anything other then xmac_slv module.
1531 // It is mainly for resetting txmac state machines.
1532 assign new_tx_reset_clk =
1533 (ld_tx_sw_reset_clk | hw_reset | change_clk_source_pls) ? 1'b1 :
1534 (clr_tx_reset_clk ? 1'b0 : tx_reset_clk );
1535 FD1 TX_RESET_FF(.D(new_tx_reset_clk),.CP(clk),.Q(tx_reset_clk));
1536
1537 // tx_reg_reset for resetting txmac registers in xmac_slv module.
1538 wire new_tx_reg_reset = ld_tx_reg_reset | hw_reset;
1539 FD1 tx_reg_reset_FF(.D(new_tx_reg_reset),.CP(clk),.Q(tx_reg_reset));
1540
1541 // rx_reset_clk: used to reset anything other then xmac_slv module.
1542 // It is mainly for resetting rxmac state machines.
1543 assign new_rx_reset_clk =
1544 (ld_rx_sw_reset_clk | hw_reset | change_clk_source_pls ) ? 1'b1 :
1545 (clr_rx_reset_clk ? 1'b0 : rx_reset_clk );
1546 FD1 RX_RESET_FF(.D(new_rx_reset_clk),.CP(clk),.Q(rx_reset_clk));
1547
1548 // rx_reg_reset for resetting rxmac registers in xmac_slv module.
1549 wire new_rx_reg_reset = ld_rx_reg_reset | hw_reset;
1550 FD1 rx_reg_reset_FF(.D(new_rx_reg_reset),.CP(clk),.Q(rx_reg_reset));
1551
1552 // debug
1553 xREG #(8) debug_reg_xREG(
1554 .din(wr_data[7:0]),
1555 .clk(clk),
1556 .en(ld_debug_reg),
1557 .reset(rx_reg_reset|tx_reg_reset),
1558 .qout(debug_reg[7:0]));
1559
1560 wire [2:0] mac_debug_sel = debug_reg[2:0]; // 3b
1561 wire [3:0] xmac_debug_sel = debug_reg[6:3]; // 4b
1562
1563 /* -------- debug_training_vector --------------- */
1564
1565always @ (posedge clk)
1566 begin
1567 if (rx_reg_reset|tx_reg_reset)
1568 training_vector <= 0;
1569 else if (ld_training_vector)
1570 training_vector <= wr_data[31:0];
1571 else if (xmac_debug_sel == `SEL_mac_training_vector)
1572 training_vector <= ~training_vector;
1573 else training_vector <= training_vector;
1574 end
1575
1576/* --------------------------- TX Status Register --------------------- */
1577
1578 RAC_FF stat0_frame_transmitted_RAC_FF(.clk(clk),.reset(tx_reg_reset),
1579 .set(set_tx_pkt_ok_sync),
1580 .rst(rac_tx_status),
1581 .load(ld_tx_status),
1582 .load_data(wr_data[0]),
1583 .dout(frame_transmitted));
1584
1585 RAC_FF stat1_txfifo_underflow_RAC_FF(.clk(clk),
1586 .reset(tx_reg_reset),
1587 .set(txfifo_underrun_sync),
1588 .rst(rac_tx_status),
1589 .load(ld_tx_status),
1590 .load_data(wr_data[1]),
1591 .dout(txfifo_underflow));
1592
1593 RAC_FF stat2_tx_max_pkt_size_err_RAC_FF(.clk(clk),
1594 .reset(tx_reg_reset),
1595 .set(tx_max_pkt_size_err_sync),
1596 .rst(rac_tx_status),
1597 .load(ld_tx_status),
1598 .load_data(wr_data[2]),
1599 .dout(tx_max_pkt_size_err));
1600
1601 RAC_FF stat3_txfifo_overflow_RAC_FF(.clk(clk),
1602 .reset(tx_reg_reset),
1603 .set(txfifo_overrun_clk),
1604 .rst(rac_tx_status),
1605 .load(ld_tx_status),
1606 .load_data(wr_data[3]),
1607 .dout(txfifo_overflow));
1608
1609 RAC_FF stat4_txfifo_xfr_err_RAC_FF(.clk(clk),
1610 .reset(tx_reg_reset),
1611 .set(txfifo_xfr_err_sync),
1612 .rst(rac_tx_status),
1613 .load(ld_tx_status),
1614 .load_data(wr_data[4]),
1615 .dout(txfifo_xfr_err));
1616
1617// bit 5 to bit 9 are not used.
1618/* ------------------ for tx byte counter ----------------------------- */
1619 RAC_FF stat10_tx_byte_count_exp_RAC_FF(.clk(clk),
1620 .reset(tx_reg_reset),
1621 .set(set_tx_byte_count_exp),
1622 .rst(rac_tx_status),
1623 .load(ld_tx_status),
1624 .load_data(wr_data[10]),
1625 .dout(tx_byte_count_exp));
1626
1627/* ------------------ for tx frame counter ---------------------------- */
1628 RAC_FF stat11__RAC_FF(.clk(clk),
1629 .reset(tx_reg_reset),
1630 .set(set_tx_frame_count_exp),
1631 .rst(rac_tx_status),
1632 .load(ld_tx_status),
1633 .load_data(wr_data[11]),
1634 .dout(tx_frame_count_exp));
1635
1636/* -------------------------------------------------------------------- */
1637
1638// assemble tx_status bits
1639 assign tx_status_dout = {20'b0,
1640 tx_frame_count_exp,
1641 tx_byte_count_exp,
1642 5'b0, // bit 5 to bit 9 are not used.
1643 txfifo_xfr_err,
1644 txfifo_overflow,
1645 tx_max_pkt_size_err,
1646 txfifo_underflow,
1647 frame_transmitted};
1648
1649// synopsys translate_off
1650// diag
1651always @ (tx_status_dout or warning_msg_en)
1652 if ((~tx_reg_reset) & (txfifo_underflow | txfifo_overflow) & warning_msg_en)
1653 $display("\n (* ERROR: at sim time = %d, txfifo_underflow = %b, txfifo_overflow = %b *) \n", $time, txfifo_underflow, txfifo_overflow);
1654 else ;
1655
1656always @ (tx_status_dout or warning_msg_en)
1657 if ((~tx_reg_reset) & (tx_max_pkt_size_err) & warning_msg_en)
1658 $display("\n (* ERROR: at sim time = %d, tx_max_pkt_size_err = %b *) \n", $time, tx_max_pkt_size_err );
1659 else ;
1660
1661always @ (tx_status_dout or warning_msg_en)
1662 if ((~tx_reg_reset) & (txfifo_xfr_err) & warning_msg_en)
1663 $display("\n (* ERROR: at sim time = %d, txfifo_xfr_err = %b *) \n", $time, txfifo_xfr_err );
1664 else ;
1665// synopsys translate_on
1666
1667 /* ------------------------------------------------------------------- */
1668
1669
1670 /* -------------------------- RX Status Register --------------------- */
1671 RAC_FF stat0_frame_receiv_RAC_FF(.clk(clk),
1672 .reset(rx_reg_reset),
1673 .set(rx_good_pkt_sync),
1674 .rst(rac_rx_status),
1675 .load(ld_rx_status),
1676 .load_data(wr_data[0]),
1677 .dout(frame_received));
1678
1679 RAC_FF stat1_rxfifo_overflow_RAC_FF(.clk(clk),
1680 .reset(rx_reg_reset),
1681 .set(rxfifo_overrun_sync),
1682 .rst(rac_rx_status),
1683 .load(ld_rx_status),
1684 .load_data(wr_data[1]),
1685 .dout(rxfifo_overflow));
1686
1687 RAC_FF stat2_rxfifo_underflow_RAC_FF(.clk(clk),
1688 .reset(rx_reg_reset),
1689 .set(rxfifo_underrun_clk),
1690 .rst(rac_rx_status),
1691 .load(ld_rx_status),
1692 .load_data(wr_data[2]),
1693 .dout(rxfifo_underflow));
1694
1695 RAC_FF stat3_crc_err_cntr_exp_RAC_FF(.clk(clk),
1696 .reset(rx_reg_reset),
1697 .set(set_crc_err_cntr_exp),
1698 .rst(rac_rx_status),
1699 .load(ld_rx_status),
1700 .load_data(wr_data[3]),
1701 .dout(crc_err_cntr_exp));
1702
1703 RAC_FF stat4_max_pkt_err_cntr_exp_RAC_FF(.clk(clk),
1704 .reset(rx_reg_reset),
1705 .set(set_max_pkt_err_cntr_exp),
1706 .rst(rac_rx_status),
1707 .load(ld_rx_status),
1708 .load_data(wr_data[4]),
1709 .dout(max_pkt_err_cntr_exp));
1710
1711 RAC_FF stat5_code_viol_cntr_exp_RAC_FF(.clk(clk),
1712 .reset(rx_reg_reset),
1713 .set(set_code_viol_cntr_exp),
1714 .rst(rac_rx_status),
1715 .load(ld_rx_status),
1716 .load_data(wr_data[5]),
1717 .dout(code_viol_cntr_exp));
1718
1719 RAC_FF stat6_rx_byte_count_exp_RAC_FF(.clk(clk),
1720 .reset(rx_reg_reset),
1721 .set(set_rx_byte_count_exp),
1722 .rst(rac_rx_status),
1723 .load(ld_rx_status),
1724 .load_data(wr_data[6]),
1725 .dout(rx_byte_count_exp));
1726
1727 RAC_FF stat7_histo_count1_exp_RAC_FF(.clk(clk),
1728 .reset(rx_reg_reset),
1729 .set(set_histo_count1_exp),
1730 .rst(rac_rx_status),
1731 .load(ld_rx_status),
1732 .load_data(wr_data[7]),
1733 .dout(histo_count1_exp));
1734
1735 RAC_FF stat8_histo_count2_exp_RAC_FF(.clk(clk),
1736 .reset(rx_reg_reset),
1737 .set(set_histo_count2_exp),
1738 .rst(rac_rx_status),
1739 .load(ld_rx_status),
1740 .load_data(wr_data[8]),
1741 .dout(histo_count2_exp));
1742
1743 RAC_FF stat9_histo_count3_exp_RAC_FF(.clk(clk),
1744 .reset(rx_reg_reset),
1745 .set(set_histo_count3_exp),
1746 .rst(rac_rx_status),
1747 .load(ld_rx_status),
1748 .load_data(wr_data[9]),
1749 .dout(histo_count3_exp));
1750
1751 RAC_FF stat10_histo_count4_exp_RAC_FF(.clk(clk),
1752 .reset(rx_reg_reset),
1753 .set(set_histo_count4_exp),
1754 .rst(rac_rx_status),
1755 .load(ld_rx_status),
1756 .load_data(wr_data[10]),
1757 .dout(histo_count4_exp));
1758
1759 RAC_FF stat11_histo_count5_exp_RAC_FF(.clk(clk),
1760 .reset(rx_reg_reset),
1761 .set(set_histo_count5_exp),
1762 .rst(rac_rx_status),
1763 .load(ld_rx_status),
1764 .load_data(wr_data[11]),
1765 .dout(histo_count5_exp));
1766
1767 RAC_FF stat12_RAC_FF(.clk(clk),
1768 .reset(rx_reg_reset),
1769 .set(set_histo_count6_exp),
1770 .rst(rac_rx_status),
1771 .load(ld_rx_status),
1772 .load_data(wr_data[12]),
1773 .dout(histo_count6_exp));
1774
1775 RAC_FF stat13_bcast_count_exp_RAC_FF(.clk(clk),
1776 .reset(rx_reg_reset),
1777 .set(set_bcast_count_exp),
1778 .rst(rac_rx_status),
1779 .load(ld_rx_status),
1780 .load_data(wr_data[13]),
1781 .dout(bcast_count_exp));
1782
1783 RAC_FF stat14__RAC_FF(.clk(clk),
1784 .reset(rx_reg_reset),
1785 .set(set_mcast_count_exp),
1786 .rst(rac_rx_status),
1787 .load(ld_rx_status),
1788 .load_data(wr_data[14]),
1789 .dout(mcast_count_exp));
1790
1791 RAC_FF stat15_fragment_count_exp_RAC_FF(.clk(clk),
1792 .reset(rx_reg_reset),
1793 .set(set_fragment_count_exp),
1794 .rst(rac_rx_status),
1795 .load(ld_rx_status),
1796 .load_data(wr_data[15]),
1797 .dout(fragment_count_exp));
1798
1799//RAC_FF stat16_align_err_exp_RAC_FF(.clk(clk), // for 10/100M only
1800// .reset(rx_reg_reset),
1801// .set(set_align_err_cntr_exp),
1802// .rst(rac_rx_status),
1803// .load(ld_rx_status),
1804// .load_data(wr_data[16]),
1805// .dout(align_err_cntr_exp));
1806
1807// eco @7-25-06
1808// RAC_FF stat16_align_err_exp_RAC_FF(.clk(clk),
1809// .reset(rx_reg_reset),
1810// .set(MDINT),
1811// .rst(rac_rx_status),
1812// .load(ld_rx_status),
1813// .load_data(wr_data[16]),
1814// .dout(mdint_oc));
1815
1816// eco @7-28-06
1817 FD1 stat16_mdint_oc_FF(.D(MDINT),.CP(clk),.Q(mdint_oc));
1818
1819
1820
1821 // start of lfs related stuff
1822 RAC_FF stat17_link_fault_exp_RAC_FF(.clk(clk), // for 10G only
1823 .reset(rx_reg_reset),
1824 .set(set_link_fault_cntr_exp),
1825 .rst(rac_rx_status),
1826 .load(ld_rx_status),
1827 .load_data(wr_data[17]),
1828 .dout(link_fault_cntr_exp));
1829
1830 PlsGen remote_fault_oc_pls_PlsGen (.reset(rx_reg_reset),.clk(clk),
1831 .iSigIn(remote_fault_oc_sync),.oPlsOut(remote_fault_oc_pls));
1832
1833 RAC_FF stat18_remote_fault_status_RAC_FF(.clk(clk),
1834 .reset(rx_reg_reset),
1835 .set(remote_fault_oc_pls),
1836 .rst(rac_rx_status),
1837 .load(ld_rx_status),
1838 .load_data(wr_data[18]),
1839 .dout(remote_fault_status));
1840
1841 // eco
1842 PlsGenX local_fault_oc_pls_PlsGen (.reset(rx_reg_reset),.clk(clk),
1843 .iSigIn(local_fault_oc_sync),.oPlsOut(local_fault_oc_pls));
1844
1845 RAC_FF stat19_local_fault_status_RAC_FF(.clk(clk),
1846 .reset(rx_reg_reset),
1847 .set(local_fault_oc_pls),
1848 .rst(rac_rx_status),
1849 .load(ld_rx_status),
1850 .load_data(wr_data[19]),
1851 .dout(local_fault_status));
1852
1853 // end of lfs related stuff
1854
1855 RAC_FF stat20_histo_count7_exp_RAC_FF(.clk(clk),
1856 .reset(rx_reg_reset),
1857 .set(set_histo_count7_exp),
1858 .rst(rac_rx_status),
1859 .load(ld_rx_status),
1860 .load_data(wr_data[20]),
1861 .dout(histo_count7_exp));
1862
1863 assign rx_status_dout = {11'b0,
1864 histo_count7_exp,
1865 local_fault_status, // 20th
1866 remote_fault_status, // 19th
1867 link_fault_cntr_exp, // 18th
1868 mdint_oc, // 17th
1869 fragment_count_exp,
1870 mcast_count_exp,
1871 bcast_count_exp,
1872 histo_count6_exp,
1873 histo_count5_exp,
1874 histo_count4_exp,
1875 histo_count3_exp,
1876 histo_count2_exp,
1877 histo_count1_exp,
1878 rx_byte_count_exp,
1879 code_viol_cntr_exp,
1880 max_pkt_err_cntr_exp,
1881 crc_err_cntr_exp,
1882 rxfifo_underflow,
1883 rxfifo_overflow,
1884 frame_received};
1885
1886// synopsys translate_off
1887// diag
1888always @ (rx_status_dout or warning_msg_en)
1889 if ((~rx_reg_reset) & (rxfifo_underflow | rxfifo_overflow) & warning_msg_en)
1890 $display("\n (* ERROR: at sim time = %d, rxfifo_underflow = %b, rxfifo_overflow = %b *) \n", $time, rxfifo_underflow, rxfifo_overflow);
1891 else ;
1892// synopsys translate_on
1893
1894 /* ------------------------------------------------------------------ */
1895
1896 /* -------------- MAC Flow Control Status Register ------------------ */
1897
1898 PlsGen2 paused_state_sync_PlsGen2(.sig_in(paused_state_sync),.clk(clk),
1899 .lead(paused_state_sync_lead),
1900 .trail(paused_state_sync_trail));
1901
1902 RAC_FF stat0_pause_rcvd_RAC_FF(.clk(clk),
1903 .reset(rx_reg_reset),
1904 .set(rx_fc_pkt_ok_clk),
1905 .rst(rac_fc_status),
1906 .load(ld_fc_status),
1907 .load_data(wr_data[0]),
1908 .dout(pause_rcvd));
1909
1910 RAC_FF stat1_tx_paused_status_RAC_FF(.clk(clk),
1911 .reset(tx_reg_reset),
1912 .set(paused_state_sync_lead),
1913 .rst(rac_fc_status),
1914 .load(ld_fc_status),
1915 .load_data(wr_data[1]),
1916 .dout(tx_paused_status));
1917
1918 RAC_FF stat2_not_tx_paused_status_RAC_FF(.clk(clk),
1919 .reset(tx_reg_reset),
1920 .set(paused_state_sync_trail),
1921 .rst(rac_fc_status),
1922 .load(ld_fc_status),
1923 .load_data(wr_data[2]),
1924 .dout(not_tx_paused_status));
1925
1926 wire [15:0] pause_time_rcvd;
1927 xREG #(16) FC_STAT16_31_xREG(.clk(clk),.reset(rx_reg_reset),.en(rx_fc_pkt_ok_clk),.din(pause_time[15:0]),.qout(pause_time_rcvd[15:0]));
1928
1929 // fc_status_dout is 32 bit wide
1930 assign fc_status_dout = {pause_time_rcvd[15:0],13'h0,not_tx_paused_status,
1931 tx_paused_status,pause_rcvd};
1932
1933 /* ---------------------------- TX Mask Register -------------------- */
1934 wire [11:0] new_tx_mask_dout = tx_reg_reset ? 12'hFFF :
1935 (ld_tx_mask ? wr_data[11:0] :
1936 tx_mask_dout[11:0] );
1937
1938 RegDff #(12) tx_mask_dout_RegDff (.din(new_tx_mask_dout[11:0]),.clk(clk),
1939 .qout(tx_mask_dout[11:0]));
1940
1941 assign tx_mask_dout[31:12] = 0;
1942
1943 /* --------------------------- RX Mask Register ------------------------ */
1944 wire [19:0] new_rx_mask_dout = rx_reg_reset ? 20'hF_FFFF :
1945 (ld_rx_mask ? wr_data[19:0] :
1946 rx_mask_dout[19:0]);
1947
1948 RegDff #(20) rx_mask_dout_RegDff (.din(new_rx_mask_dout[19:0]),.clk(clk),
1949 .qout(rx_mask_dout[19:0]));
1950 assign rx_mask_dout[31:20] = 0;
1951
1952 /* ----------------------- MAC Flow Control Mask Register -------------- */
1953 wire [2:0] new_fc_mask_dout = rx_reg_reset ? 3'h7 :
1954 (ld_fc_mask ? wr_data[2:0] :
1955 fc_mask_dout[2:0]);
1956 FD1 FC_MASK0_FF(.D(new_fc_mask_dout[0]),.CP(clk),.Q(fc_mask_dout[0]));
1957 FD1 FC_MASK1_FF(.D(new_fc_mask_dout[1]),.CP(clk),.Q(fc_mask_dout[1]));
1958 FD1 FC_MASK2_FF(.D(new_fc_mask_dout[2]),.CP(clk),.Q(fc_mask_dout[2]));
1959 assign fc_mask_dout[31:3] = 0;
1960 /* -------------------------- Interrupts ------------------------------- */
1961 wire new_txmac_interrupt = tx_status_dout[0] & !tx_mask_dout[0] |
1962 tx_status_dout[1] & !tx_mask_dout[1] |
1963 tx_status_dout[2] & !tx_mask_dout[2] |
1964 tx_status_dout[3] & !tx_mask_dout[3] |
1965 tx_status_dout[4] & !tx_mask_dout[4] |
1966 tx_status_dout[5] & !tx_mask_dout[5] |
1967 tx_status_dout[10] & !tx_mask_dout[10] |
1968 tx_status_dout[11] & !tx_mask_dout[11] ;
1969 FD1 TX_INTR(.D(new_txmac_interrupt),.CP(clk),.Q(txmac_interrupt));
1970
1971 wire new_rxmac_interrupt = rx_status_dout[0] & !rx_mask_dout[0] |
1972 rx_status_dout[1] & !rx_mask_dout[1] |
1973 rx_status_dout[2] & !rx_mask_dout[2] |
1974 rx_status_dout[3] & !rx_mask_dout[3] |
1975 rx_status_dout[4] & !rx_mask_dout[4] |
1976 rx_status_dout[5] & !rx_mask_dout[5] |
1977 rx_status_dout[6] & !rx_mask_dout[6] |
1978 rx_status_dout[7] & !rx_mask_dout[7] |
1979 rx_status_dout[8] & !rx_mask_dout[8] |
1980 rx_status_dout[9] & !rx_mask_dout[9] |
1981 rx_status_dout[10] & !rx_mask_dout[10] |
1982 rx_status_dout[11] & !rx_mask_dout[11] |
1983 rx_status_dout[12] & !rx_mask_dout[12] |
1984 rx_status_dout[13] & !rx_mask_dout[13] |
1985 rx_status_dout[14] & !rx_mask_dout[14] |
1986 rx_status_dout[15] & !rx_mask_dout[15] |
1987 rx_status_dout[16] & !rx_mask_dout[16] |
1988 rx_status_dout[17] & !rx_mask_dout[17] |
1989 rx_status_dout[18] & !rx_mask_dout[18] |
1990 rx_status_dout[19] & !rx_mask_dout[19] ;
1991
1992 FD1 RX_INTR(.D(new_rxmac_interrupt),.CP(clk),.Q(rxmac_interrupt));
1993
1994 wire new_xmac_fc_interrupt = fc_status_dout[0] & !fc_mask_dout[0] |
1995 fc_status_dout[1] & !fc_mask_dout[1] |
1996 fc_status_dout[2] & !fc_mask_dout[2];
1997 FD1 FC_INTR(.D(new_xmac_fc_interrupt),.CP(clk),.Q(xmac_fc_interrupt));
1998
1999 /* ------------------------ TX Configuration Register ---------------- */
2000
2001 wire tx_enable = tx_config_dout[0]; // b0 of config reg.
2002 wire stretch_mode = tx_config_dout[1]; // b1 of config reg.// stretch_mode always goes with var_min_ipg.
2003 wire var_min_ipg_en = tx_config_dout[2] | stretch_mode;// b2 of config reg.
2004 wire always_no_crc = tx_config_dout[3]; // b3 of config reg.
2005// wire tx_spare_part0 = tx_config_dout[4]; // b4 of config reg.
2006// wire tx_spare_part1 = tx_config_dout[5]; // b5 of config reg.
2007// wire tx_spare_part2 = tx_config_dout[6]; // b6 of config reg.
2008 wire warning_msg_en = tx_config_dout[7]; // b7 of config reg.
2009
2010xREG2 #(8) tx_config_dout_xREG2 (.clk(clk),
2011 .reset(tx_reg_reset),
2012 .reset_value({8'b0000_0100}),
2013 .load(ld_mac_config),
2014 .din(wr_data[7:0]),
2015 .qout(tx_config_dout[7:0]));
2016 /* ------------------------ RX Configuration Register ------------------ */
2017
2018xREG2 #(11) rx_config_dout_xREG2 (.clk(clk),
2019 .reset(rx_reg_reset),
2020 .reset_value({11'b010_0000_0000}),
2021 // ^
2022 // |
2023 // strip_crc
2024 .load(ld_mac_config),
2025 .din(wr_data[18:8]),
2026 .qout(rx_config_dout));
2027
2028 wire mac2ipp_pkt_cnt_en = rx_config_dout[10];// b18 of config reg.
2029 wire strip_crc = rx_config_dout[9]; // b17 of config reg. // default == 1
2030 wire addr_filter_en = rx_config_dout[8]; // b16 of config reg.
2031 wire hash_filter_en = rx_config_dout[7]; // b15 of config reg.
2032 wire code_viol_chk_dis = rx_config_dout[6]; // b14 of config reg.
2033 wire reserve_multicast = rx_config_dout[5]; // b13 of config reg.
2034 wire crc_chk_dis = rx_config_dout[4]; // b12 of config reg.
2035 wire err_chk_dis = rx_config_dout[3]; // b11 of config reg.
2036 wire promisc_group = rx_config_dout[2]; // b10 of config reg.
2037 wire promisc_all = rx_config_dout[1]; // b9 of config reg.
2038 wire rx_enable = rx_config_dout[0]; // b8 of config reg.
2039
2040 /* ---------------- MAC Flow Control Configuration Register ------------ */
2041
2042 xREG #(2) fc_config_dout_xREG( .clk(clk),
2043 .reset(rx_reg_reset),
2044 .en(ld_mac_config),
2045 .din(wr_data[20:19]),
2046 .qout(fc_config_dout));
2047
2048 wire pass_fc = fc_config_dout[1]; // b20 of config reg.
2049 wire rx_pause_en = fc_config_dout[0]; // b19 of config reg.
2050
2051 /* ----------------------- XIF Configuration Register ------------------ */
2052 /*************************************************************************
2053 ***** VERY IMPORTANT *****
2054 **************************
2055 * XIF registers use only HW_RESET.
2056 * The other places that also used HW_RESET is the tx_heart_beat_timer_reg and
2057 * rx_heart_beat_timer_reg.
2058 *
2059 * rx_xmac has to be in the loopback mode so that the it can always get
2060 * a clock register and synchronize rx_reset signal to create clr_rx_reset_clk.
2061 *************************************************************************/
2062
2063xREG2 #(11) xif_config_dout_xREG2 (.clk(clk),
2064 .reset(hw_reset),
2065 .reset_value(11'b000_0001_0110),
2066 // ^ ^
2067 // loopback sel_por_clk_src
2068 .load(ld_mac_config),
2069 .din(wr_data[31:21]), // 11 bits [31:21]
2070 .qout(xif_config_dout[10:0]));
2071
2072 wire sel_clk_25mhz = xif_config_dout[10];//31
2073 wire pcs_bypass = xif_config_dout[9]; //30
2074 wire xpcs_bypass = xif_config_dout[8]; //29 // not used in N2/Neptune
2075 wire mii_mode = xif_config_dout[7]; //28
2076 wire gmii_mode = xif_config_dout[6]; //27
2077 reg xgmii_mode;
2078 always @ (posedge clk)
2079 xgmii_mode <= ~mii_or_gmii_mode; //--> 2'b00 or 2'b11;+ POR default
2080 wire lfs_disable = xif_config_dout[5]; //26
2081 wire loopback = xif_config_dout[4]; //25 // xmac functional loopback signal
2082 wire tx_output_en = xif_config_dout[3]; //24
2083 wire sel_por_clk_src = xif_config_dout[2]; //23 // power on reset loopback to insure the existance of sys_clk.
2084 wire led_polarity = xif_config_dout[1]; //22 +:1; -:0;
2085 wire force_LED_on = xif_config_dout[0]; //21
2086
2087 // auto reset generation logic
2088 FD1 d_sel_clk_25mhz_FD1(.D(sel_clk_25mhz),.CP(clk),.Q(d_sel_clk_25mhz));
2089 FD1 d_pcs_bypass_FD1(.D(pcs_bypass),.CP(clk),.Q(d_pcs_bypass));
2090 FD1 d_mii_mode_FD1(.D(mii_mode),.CP(clk),.Q(d_mii_mode));
2091 FD1 d_gmii_mode_FD1(.D(gmii_mode),.CP(clk),.Q(d_gmii_mode));
2092 FD1 d_loopback_FD1(.D(loopback),.CP(clk),.Q(d_loopback));
2093 FD1 d_sel_por_clk_src_FD1(.D(sel_por_clk_src),.CP(clk),.Q(d_sel_por_clk_src));
2094
2095 assign change_clk_source_pls = (sel_clk_25mhz ^ d_sel_clk_25mhz) |
2096 (pcs_bypass ^ d_pcs_bypass) |
2097 (mii_mode ^ d_mii_mode) |
2098 (gmii_mode ^ d_gmii_mode) |
2099 (loopback ^ d_loopback) |
2100 (sel_por_clk_src ^ d_sel_por_clk_src) ;
2101
2102
2103 /* ----------------------------- Parameters: IPG --------------------------- */
2104xREG2 #(24) ipg_values_xREG2 (.clk(clk),
2105 .reset(tx_reg_reset),
2106 .reset_value({3'd1,5'd13,8'h0a,8'h03}),
2107 .load(ld_ipg_values),
2108 .din(wr_data[23:0]),
2109 .qout({stretch_constant[2:0],
2110 stretch_ratio[4:0],
2111 ipg_value1[7:0],
2112 reserved_ipg[4:0],
2113 ipg_value[2:0]}));
2114
2115 /* ------------------------ Parameters: tx Min Packet Size -------------------- */
2116xREG2 #(10) tx_min_kt_size_xREG2 (.clk(clk),
2117 .reset(tx_reg_reset),
2118 .reset_value({7'h8,3'b0}), // default value is 64 bytes
2119 .load(ld_minpkt_slot_pa_sizes),
2120 .din({wr_data[9:3],3'b0}), // Bits[2:0] are ignored.
2121 .qout(tx_min_pkt_size));
2122
2123 assign no_tx_min_pkt_size_chk = ~|tx_min_pkt_size;
2124
2125 /* --------------------------- Parameters: Slot Time ----------------------- */
2126 // The Pause frame time unit: 512 bits (64 bytes) time == slot time.
2127 // For the 156.25Mhz, every clock is 8-byte time.
2128 // 8 clock is 64 byte time.
2129 // Recommended slot_time value is 8 (clocks).
2130xREG2 #(8) slot_time_xREG2 (.clk(clk),
2131 .reset(tx_reg_reset),
2132 .reset_value(8'h08),
2133 .load(ld_minpkt_slot_pa_sizes),
2134 .din(wr_data[17:10]),
2135 .qout(slot_time));
2136
2137 /* ------------------------ Parameters: Min Packet Size -------------------- */
2138xREG2 #(10) rx_min_pkt_size_xREG2 (.clk(clk),
2139 .reset(tx_reg_reset),
2140 .reset_value(10'h40),
2141 .load(ld_minpkt_slot_pa_sizes),
2142 .din(wr_data[29:20]),
2143 .qout(rx_min_pkt_size));
2144
2145 assign no_rx_min_pkt_size_chk = ~(|rx_min_pkt_size);
2146
2147/* ------------------------ Parameters: Max Packet Size -------------------- */
2148xREG2 #(14) max_pkt_size_xREG2 (.clk(clk),
2149 .reset(tx_reg_reset|rx_reg_reset),
2150 .reset_value(14'd1518),
2151 .load(ld_max_pkt_burst_sizes),
2152 .din(wr_data[13:0]),
2153 .qout(max_pkt_size));
2154
2155 /* ------------ Address Detection & Filtering: MAC Unicast Address --------- */
2156 register_load_X16 MAC_ADDR_HI(.clk(clk),.load(ld_mac_unique_addr[0]),.din(wr_data[15:0]),.dout(mac_unique_addr[47:32]));
2157 register_load_X16 MAC_ADDR_MD(.clk(clk),.load(ld_mac_unique_addr[1]),.din(wr_data[15:0]),.dout(mac_unique_addr[31:16]));
2158 register_load_X16 MAC_ADDR_LO(.clk(clk),.load(ld_mac_unique_addr[2]),.din(wr_data[15:0]),.dout(mac_unique_addr[15:0]));
2159 /* ------------------------------------------------------------------------- */
2160
2161
2162
2163/***********************************************
2164 * RxMac statistical counters
2165 * *********************************************/
2166
2167 /* ----------------- Statistics: Maximum Packet Size Error Counter --------- */
2168 counter_rac_load_X8 MAX_PKT_ERR_CNTR(.clk (clk),
2169 .clr (rac_max_pkt_err_cntr),
2170 .enable(inc_max_pkt_err_count_sync),
2171 .load (ld_max_pkt_err_cntr),
2172 .din (wr_data[7:0]),
2173 .count (max_pkt_err_count));
2174
2175 assign set_max_pkt_err_cntr_exp = inc_max_pkt_err_count_sync &
2176 (max_pkt_err_count == 8'hFF);
2177
2178// synopsys translate_off
2179// diag
2180always @ (inc_max_pkt_err_count_sync or warning_msg_en)
2181 if (~rx_reg_reset & warning_msg_en)
2182 $display("\n (* ERROR: at sim time = %d, inc_max_pkt_err_count_sync = %b ,max_pkt_err_count = %d *) \n", $time, inc_max_pkt_err_count_sync, max_pkt_err_count);
2183 else ;
2184// synopsys translate_on
2185
2186
2187 /* ---------------------- Statistics: Alignment Error Counter -------------- */
2188 counter_rac_load_X8 ALIGN_ERR_CNTR(.clk (clk),
2189 .clr (rac_align_err_cntr),
2190 .enable(inc_align_err_count_sync),
2191 .load (ld_align_err_cntr),
2192 .din (wr_data[7:0]),
2193 .count (align_err_count));
2194 assign set_align_err_cntr_exp = inc_align_err_count_sync &
2195 (align_err_count == 8'hFF);
2196
2197 /* ------------------------ Statistics: CRC Error Counter ----------------- */
2198 counter_rac_load_X8 CRC_ERR_CNTR(.clk (clk),
2199 .clr (rac_crc_err_cntr),
2200 .enable(inc_crc_err_count_sync),
2201 .load (ld_crc_err_cntr),
2202 .din (wr_data[7:0]),
2203 .count (crc_err_count));
2204 assign set_crc_err_cntr_exp = inc_crc_err_count_sync &
2205 (crc_err_count == 8'hFF);
2206
2207// synopsys translate_off
2208// diag
2209always @ (inc_crc_err_count_sync or warning_msg_en)
2210 if (~rx_reg_reset & warning_msg_en)
2211 $display("\n (* ERROR: at sim time = %d, inc_crc_err_count_sync = %b , crc_err_count = %d *) \n", $time,inc_crc_err_count_sync , crc_err_count);
2212 else ;
2213// synopsys translate_on
2214
2215 /* -------------------- Statistics: Rx Code Violation Counter ------------- */
2216 counter_rac_load_X8 CODE_VIOL_CNTR(.clk (clk),
2217 .clr (rac_code_viol_cntr),
2218 .enable(inc_code_viol_count_sync),
2219 .load (ld_code_viol_cntr),
2220 .din (wr_data[7:0]),
2221 .count (code_viol_count));
2222 assign set_code_viol_cntr_exp = inc_code_viol_count_sync &
2223 (code_viol_count == 8'hFF);
2224
2225// synopsys translate_off
2226// diag
2227always @ (inc_code_viol_count_sync or warning_msg_en)
2228 if (~rx_reg_reset & warning_msg_en)
2229 $display("\n (* ERROR: at sim time = %d, inc_code_viol_count_sync = %b , code_viol_count = %d *) \n", $time,inc_code_viol_count_sync , code_viol_count);
2230 else ;
2231// synopsys translate_on
2232
2233 /* -------------------------- Statistics: Rx Byte Counter ------------------ */
2234 FD1 D_TOG_RX_BCNT(.D(toggle_rx_bcount_sync),.CP(clk),
2235 .Q(d_toggle_rx_bcount_sync));
2236 assign inc_rx_bcount = toggle_rx_bcount_sync ^ d_toggle_rx_bcount_sync;
2237
2238hs_ld_counter_X32 rx_byte_count_stat_hs_ld_counter_X32(
2239.clk(clk),
2240.reset(rx_reg_reset),
2241.inc(inc_rx_bcount),
2242.clr(rac_rx_byte_cntr),
2243.max_value({32{1'b1}}),
2244.load(ld_rx_byte_cntr),
2245.load_value(wr_data[31:0]),
2246.Q(rx_byte_count_stat),
2247.max_value_reached(rx_byte_count_stat_reached));
2248
2249 assign set_rx_byte_count_exp = inc_rx_bcount &
2250 rx_byte_count_stat_reached;
2251
2252 /* -------------------- Statistics: RX Broadcast Frames Counter ------------ */
2253 counter_rac_load_X21 BCAST_CNTR(.clk (clk),
2254 .clr (rac_bcast_cntr),
2255 .enable(inc_bcast_count_sync),
2256 .load (ld_bcast_cntr),
2257 .din (wr_data[20:0]),
2258 .count (bcast_count));
2259 assign set_bcast_count_exp = inc_bcast_count_sync & (bcast_count == 21'h1FFFFF);
2260
2261 /* -------------------- Statistics: RX Multicast Frames Counter ------------ */
2262 counter_rac_load_X21 MCAST_CNTR(.clk (clk),
2263 .clr (rac_mcast_cntr),
2264 .enable(inc_mcast_count_sync),
2265 .load (ld_mcast_cntr),
2266 .din (wr_data[20:0]),
2267 .count (mcast_count));
2268 assign set_mcast_count_exp = inc_mcast_count_sync & (mcast_count == 21'h1FFFFF);
2269
2270 /* ---------------------- Statistics: RX Fragments Counter ----------------- */
2271 counter_rac_load_X21 FRAG_CNTR(.clk (clk),
2272 .clr (rac_fragment_cntr),
2273 .enable(inc_min_pkt_err_count_sync),
2274 .load (ld_fragment_cntr),
2275 .din (wr_data[20:0]),
2276 .count (fragment_count));
2277 assign set_fragment_count_exp = inc_min_pkt_err_count_sync &
2278 (fragment_count == 21'h1FFFFF);
2279
2280 /* ------------------------ Statistics: Histogram Counters ----------------- */
2281 counter_rac_load_X21 HISTO_CNTR1(.clk (clk),
2282 .clr (rac_histo_cntr1),
2283 .enable(inc_histo_cntr1),
2284 .load (ld_histo_cntr1),
2285 .din (wr_data[20:0]),
2286 .count (histo_count1));
2287 assign set_histo_count1_exp = inc_histo_cntr1 & (histo_count1 == 21'h1FFFFF);
2288
2289 counter_rac_load_X21 HISTO_CNTR2(.clk (clk),
2290 .clr (rac_histo_cntr2),
2291 .enable(inc_histo_cntr2),
2292 .load (ld_histo_cntr2),
2293 .din (wr_data[20:0]),
2294 .count (histo_count2));
2295 assign set_histo_count2_exp = inc_histo_cntr2 & (histo_count2 == 21'h1FFFFF);
2296
2297 counter_rac_load_X20 HISTO_CNTR3(.clk (clk),
2298 .clr (rac_histo_cntr3),
2299 .enable(inc_histo_cntr3),
2300 .load (ld_histo_cntr3),
2301 .din (wr_data[19:0]),
2302 .count (histo_count3));
2303 assign set_histo_count3_exp = inc_histo_cntr3 & (histo_count3 == 20'hFFFFF);
2304
2305 counter_rac_load_X19 HISTO_CNTR4(.clk (clk),
2306 .clr (rac_histo_cntr4),
2307 .enable(inc_histo_cntr4),
2308 .load (ld_histo_cntr4),
2309 .din (wr_data[18:0]),
2310 .count (histo_count4));
2311 assign set_histo_count4_exp = inc_histo_cntr4 & (histo_count4 == 19'h7FFFF);
2312
2313 counter_rac_load_X18 HISTO_CNTR5(.clk (clk),
2314 .clr (rac_histo_cntr5),
2315 .enable(inc_histo_cntr5),
2316 .load (ld_histo_cntr5),
2317 .din (wr_data[17:0]),
2318 .count (histo_count5));
2319 assign set_histo_count5_exp = inc_histo_cntr5 & (histo_count5 == 18'h3FFFF);
2320
2321 counter_rac_load_X17 HISTO_CNTR6(.clk (clk),
2322 .clr (rac_histo_cntr6),
2323 .enable(inc_histo_cntr6),
2324 .load (ld_histo_cntr6),
2325 .din (wr_data[16:0]),
2326 .count (histo_count6));
2327 assign set_histo_count6_exp = inc_histo_cntr6 & (histo_count6 == 17'h1FFFF);
2328
2329 wire inc_histo_cntr7_muxd_reg;
2330 wire inc_histo_cntr7_muxd = mac2ipp_pkt_cnt_en ? rxmac_ipp_tag_reg : inc_histo_cntr7;
2331 FD1 inc_histo_cntr7_muxd_reg_FF(.D(inc_histo_cntr7_muxd),.CP(clk),.Q(inc_histo_cntr7_muxd_reg));
2332
2333 counter_rac_load_X21 HISTO_CNTR7(.clk (clk),
2334 .clr (rac_histo_cntr7),
2335 .enable(inc_histo_cntr7_muxd_reg), // This egable is different from other counter.
2336 .load (ld_histo_cntr7),
2337 .din (wr_data[20:0]),
2338 .count (histo_count7));
2339 assign set_histo_count7_exp = inc_histo_cntr7 & (histo_count7 == {21{1'b1}});
2340
2341
2342 /* ------------------------------------------------------------------- */
2343
2344 /* ---------------------- Statistics: Link Fault Counter ------------- */
2345 counter_rac_load_X8 LINK_FAULT_CNTR(.clk (clk),
2346 .clr (rac_link_fault_cntr),
2347 .enable(inc_link_fault_count_sync),
2348 .load (ld_link_fault_cntr),
2349 .din (wr_data[7:0]),
2350 .count (link_fault_count));
2351 assign set_link_fault_cntr_exp = inc_link_fault_count_sync &
2352 (link_fault_count == 8'hFF);
2353
2354/***********************************************
2355 * TxMac statistical counters
2356 * *********************************************/
2357/* -------------------- Statistics: Tx Byte Counter --------------------- */
2358FD1 D_TOG_TX_BCNT(.D(toggle_tx_bcount_sync),.CP(clk),
2359 .Q(d_toggle_tx_bcount_sync));
2360 wire inc_tx_bcount = toggle_tx_bcount_sync ^ d_toggle_tx_bcount_sync;
2361
2362hs_ld_counter_X32 tx_byte_count_stat_hs_ld_counter_X32(
2363.clk(clk),
2364.reset(tx_reg_reset),
2365.inc(inc_tx_bcount),
2366.clr(rac_tx_byte_cntr),
2367.max_value({32{1'b1}}),
2368.load(ld_tx_byte_cntr),
2369.load_value(wr_data[31:0]),
2370.Q(tx_byte_count_stat),
2371.max_value_reached(tx_byte_count_stat_reached));
2372
2373 assign set_tx_byte_count_exp = inc_tx_bcount &
2374 tx_byte_count_stat_reached;
2375
2376/* ---------------------------------------------------------------------- */
2377
2378/* --------------- Statistics: Tx Frame Counter ------------------------- */
2379 FD1 D_TOG_TX_FMCNT(.D(toggle_txframe_count_sync),.CP(clk),
2380 .Q(d_toggle_txframe_count_sync));
2381 wire inc_tx_fmcount = toggle_txframe_count_sync ^ d_toggle_txframe_count_sync;
2382
2383hs_ld_counter_X32 tx_frame_count_stat_hs_ld_counter_X32(
2384.clk(clk),
2385.reset(tx_reg_reset),
2386.inc(inc_tx_fmcount),
2387.clr(rac_tx_frame_cntr),
2388.max_value({32{1'b1}}),
2389.load(ld_tx_frame_cntr),
2390.load_value(wr_data[31:0]),
2391.Q(tx_frame_count_stat),
2392.max_value_reached(tx_frame_count_stat_reached));
2393
2394 assign set_tx_frame_count_exp = inc_tx_fmcount &
2395 tx_frame_count_stat_reached;
2396
2397/* ---------------------------------------------------------------------- */
2398
2399
2400
2401/**************************************************************************
2402 * Start of ALT_ADDR_AND_HASH_FUNC selectable logic signals
2403 * ************************************************************************/
2404
2405`ifdef ALT_ADDR_AND_HASH_FUNC
2406 /* ----------- Address Detection & Filtering: MAC Alternate Address -------- */
2407
2408 xREG #(16) alt_addr_comp_en_31_0_xREG (.din(wr_data[15:0]),
2409 .clk(clk),
2410 .en(ld_alt_addr_comp_en),
2411 .reset(rx_reg_reset),
2412 .qout(alt_addr_comp_en[15:0]));
2413
2414 register_load_X16 MAC_ALT_ADDR0_HI(.clk(clk),.load(ld_mac_alt_addr0[0]),.din(wr_data[15:0]),.dout(mac_alt_addr0[47:32]));
2415 register_load_X16 MAC_ALT_ADDR0_MD(.clk(clk),.load(ld_mac_alt_addr0[1]),.din(wr_data[15:0]),.dout(mac_alt_addr0[31:16]));
2416 register_load_X16 MAC_ALT_ADDR0_LO(.clk(clk),.load(ld_mac_alt_addr0[2]),.din(wr_data[15:0]),.dout(mac_alt_addr0[15:0]));
2417
2418 register_load_X16 MAC_ALT_ADDR1_HI(.clk(clk),.load(ld_mac_alt_addr1[0]),.din(wr_data[15:0]),.dout(mac_alt_addr1[47:32]));
2419 register_load_X16 MAC_ALT_ADDR1_MD(.clk(clk),.load(ld_mac_alt_addr1[1]),.din(wr_data[15:0]),.dout(mac_alt_addr1[31:16]));
2420 register_load_X16 MAC_ALT_ADDR1_LO(.clk(clk),.load(ld_mac_alt_addr1[2]),.din(wr_data[15:0]),.dout(mac_alt_addr1[15:0]));
2421
2422 register_load_X16 MAC_ALT_ADDR2_HI(.clk(clk),.load(ld_mac_alt_addr2[0]),.din(wr_data[15:0]),.dout(mac_alt_addr2[47:32]));
2423 register_load_X16 MAC_ALT_ADDR2_MD(.clk(clk),.load(ld_mac_alt_addr2[1]),.din(wr_data[15:0]),.dout(mac_alt_addr2[31:16]));
2424 register_load_X16 MAC_ALT_ADDR2_LO(.clk(clk),.load(ld_mac_alt_addr2[2]),.din(wr_data[15:0]),.dout(mac_alt_addr2[15:0]));
2425
2426 register_load_X16 MAC_ALT_ADDR3_HI(.clk(clk),.load(ld_mac_alt_addr3[0]),.din(wr_data[15:0]),.dout(mac_alt_addr3[47:32]));
2427 register_load_X16 MAC_ALT_ADDR3_MD(.clk(clk),.load(ld_mac_alt_addr3[1]),.din(wr_data[15:0]),.dout(mac_alt_addr3[31:16]));
2428 register_load_X16 MAC_ALT_ADDR3_LO(.clk(clk),.load(ld_mac_alt_addr3[2]),.din(wr_data[15:0]),.dout(mac_alt_addr3[15:0]));
2429
2430 register_load_X16 MAC_ALT_ADDR4_HI(.clk(clk),.load(ld_mac_alt_addr4[0]),.din(wr_data[15:0]),.dout(mac_alt_addr4[47:32]));
2431 register_load_X16 MAC_ALT_ADDR4_MD(.clk(clk),.load(ld_mac_alt_addr4[1]),.din(wr_data[15:0]),.dout(mac_alt_addr4[31:16]));
2432 register_load_X16 MAC_ALT_ADDR4_LO(.clk(clk),.load(ld_mac_alt_addr4[2]),.din(wr_data[15:0]),.dout(mac_alt_addr4[15:0]));
2433
2434 register_load_X16 MAC_ALT_ADDR5_HI(.clk(clk),.load(ld_mac_alt_addr5[0]),.din(wr_data[15:0]),.dout(mac_alt_addr5[47:32]));
2435 register_load_X16 MAC_ALT_ADDR5_MD(.clk(clk),.load(ld_mac_alt_addr5[1]),.din(wr_data[15:0]),.dout(mac_alt_addr5[31:16]));
2436 register_load_X16 MAC_ALT_ADDR5_LO(.clk(clk),.load(ld_mac_alt_addr5[2]),.din(wr_data[15:0]),.dout(mac_alt_addr5[15:0]));
2437
2438 register_load_X16 MAC_ALT_ADDR6_HI(.clk(clk),.load(ld_mac_alt_addr6[0]),.din(wr_data[15:0]),.dout(mac_alt_addr6[47:32]));
2439 register_load_X16 MAC_ALT_ADDR6_MD(.clk(clk),.load(ld_mac_alt_addr6[1]),.din(wr_data[15:0]),.dout(mac_alt_addr6[31:16]));
2440 register_load_X16 MAC_ALT_ADDR6_LO(.clk(clk),.load(ld_mac_alt_addr6[2]),.din(wr_data[15:0]),.dout(mac_alt_addr6[15:0]));
2441
2442 register_load_X16 MAC_ALT_ADDR7_HI(.clk(clk),.load(ld_mac_alt_addr7[0]),.din(wr_data[15:0]),.dout(mac_alt_addr7[47:32]));
2443 register_load_X16 MAC_ALT_ADDR7_MD(.clk(clk),.load(ld_mac_alt_addr7[1]),.din(wr_data[15:0]),.dout(mac_alt_addr7[31:16]));
2444 register_load_X16 MAC_ALT_ADDR7_LO(.clk(clk),.load(ld_mac_alt_addr7[2]),.din(wr_data[15:0]),.dout(mac_alt_addr7[15:0]));
2445
2446 register_load_X16 MAC_ALT_ADDR8_HI(.clk(clk),.load(ld_mac_alt_addr8[0]),.din(wr_data[15:0]),.dout(mac_alt_addr8[47:32]));
2447 register_load_X16 MAC_ALT_ADDR8_MD(.clk(clk),.load(ld_mac_alt_addr8[1]),.din(wr_data[15:0]),.dout(mac_alt_addr8[31:16]));
2448 register_load_X16 MAC_ALT_ADDR8_LO(.clk(clk),.load(ld_mac_alt_addr8[2]),.din(wr_data[15:0]),.dout(mac_alt_addr8[15:0]));
2449
2450 register_load_X16 MAC_ALT_ADDR9_HI(.clk(clk),.load(ld_mac_alt_addr9[0]),.din(wr_data[15:0]),.dout(mac_alt_addr9[47:32]));
2451 register_load_X16 MAC_ALT_ADDR9_MD(.clk(clk),.load(ld_mac_alt_addr9[1]),.din(wr_data[15:0]),.dout(mac_alt_addr9[31:16]));
2452 register_load_X16 MAC_ALT_ADDR9_LO(.clk(clk),.load(ld_mac_alt_addr9[2]),.din(wr_data[15:0]),.dout(mac_alt_addr9[15:0]));
2453
2454 register_load_X16 MAC_ALT_ADDR10_HI(.clk(clk),.load(ld_mac_alt_addr10[0]),.din(wr_data[15:0]),.dout(mac_alt_addr10[47:32]));
2455 register_load_X16 MAC_ALT_ADDR10_MD(.clk(clk),.load(ld_mac_alt_addr10[1]),.din(wr_data[15:0]),.dout(mac_alt_addr10[31:16]));
2456 register_load_X16 MAC_ALT_ADDR10_LO(.clk(clk),.load(ld_mac_alt_addr10[2]),.din(wr_data[15:0]),.dout(mac_alt_addr10[15:0]));
2457
2458 register_load_X16 MAC_ALT_ADDR11_HI(.clk(clk),.load(ld_mac_alt_addr11[0]),.din(wr_data[15:0]),.dout(mac_alt_addr11[47:32]));
2459 register_load_X16 MAC_ALT_ADDR11_MD(.clk(clk),.load(ld_mac_alt_addr11[1]),.din(wr_data[15:0]),.dout(mac_alt_addr11[31:16]));
2460 register_load_X16 MAC_ALT_ADDR11_LO(.clk(clk),.load(ld_mac_alt_addr11[2]),.din(wr_data[15:0]),.dout(mac_alt_addr11[15:0]));
2461
2462 register_load_X16 MAC_ALT_ADDR12_HI(.clk(clk),.load(ld_mac_alt_addr12[0]),.din(wr_data[15:0]),.dout(mac_alt_addr12[47:32]));
2463 register_load_X16 MAC_ALT_ADDR12_MD(.clk(clk),.load(ld_mac_alt_addr12[1]),.din(wr_data[15:0]),.dout(mac_alt_addr12[31:16]));
2464 register_load_X16 MAC_ALT_ADDR12_LO(.clk(clk),.load(ld_mac_alt_addr12[2]),.din(wr_data[15:0]),.dout(mac_alt_addr12[15:0]));
2465
2466 register_load_X16 MAC_ALT_ADDR13_HI(.clk(clk),.load(ld_mac_alt_addr13[0]),.din(wr_data[15:0]),.dout(mac_alt_addr13[47:32]));
2467 register_load_X16 MAC_ALT_ADDR13_MD(.clk(clk),.load(ld_mac_alt_addr13[1]),.din(wr_data[15:0]),.dout(mac_alt_addr13[31:16]));
2468 register_load_X16 MAC_ALT_ADDR13_LO(.clk(clk),.load(ld_mac_alt_addr13[2]),.din(wr_data[15:0]),.dout(mac_alt_addr13[15:0]));
2469
2470 register_load_X16 MAC_ALT_ADDR14_HI(.clk(clk),.load(ld_mac_alt_addr14[0]),.din(wr_data[15:0]),.dout(mac_alt_addr14[47:32]));
2471 register_load_X16 MAC_ALT_ADDR14_MD(.clk(clk),.load(ld_mac_alt_addr14[1]),.din(wr_data[15:0]),.dout(mac_alt_addr14[31:16]));
2472 register_load_X16 MAC_ALT_ADDR14_LO(.clk(clk),.load(ld_mac_alt_addr14[2]),.din(wr_data[15:0]),.dout(mac_alt_addr14[15:0]));
2473
2474 register_load_X16 MAC_ALT_ADDR15_HI(.clk(clk),.load(ld_mac_alt_addr15[0]),.din(wr_data[15:0]),.dout(mac_alt_addr15[47:32]));
2475 register_load_X16 MAC_ALT_ADDR15_MD(.clk(clk),.load(ld_mac_alt_addr15[1]),.din(wr_data[15:0]),.dout(mac_alt_addr15[31:16]));
2476 register_load_X16 MAC_ALT_ADDR15_LO(.clk(clk),.load(ld_mac_alt_addr15[2]),.din(wr_data[15:0]),.dout(mac_alt_addr15[15:0]));
2477
2478 /* ------------------------------------------------------------------------- */
2479
2480 /* --------- Address Detection & Filtering: Multicast Address Filter ------- */
2481 register_load_X16 ADDR_FILTER_HI(.clk(clk),.load(ld_addr_filter[0]),.din(wr_data[15:0]),.dout(addr_filter[47:32]));
2482 register_load_X16 ADDR_FILTER_MD(.clk(clk),.load(ld_addr_filter[1]),.din(wr_data[15:0]),.dout(addr_filter[31:16]));
2483 register_load_X16 ADDR_FILTER_LO(.clk(clk),.load(ld_addr_filter[2]),.din(wr_data[15:0]),.dout(addr_filter[15:0]));
2484 /* ------------------------------------------------------------------------- */
2485
2486 /* ------ Address Detection & Filtering: Multicast Address Filter Mask ----- */
2487 register_load_X16 ADDR_MASK_LSB_REG(.clk(clk),.load(ld_addr_filter_mask_lsb),.din(wr_data[15:0]),.dout(addr_filter_mask_lsb));
2488 register_load_X8 ADDR_MASK_MSB_REG(.clk(clk),.load(ld_addr_filter_mask_msb),.din(wr_data[7:0]),.dout(addr_filter_mask_msb));
2489 /* ------------------------------------------------------------------------- */
2490
2491 /* ---------------- Address Detection & Filtering: Hash Table -------------- */
2492 register_load_X16 HASH_TABLE_REG15(.clk(clk),.load(ld_hash_table[0]),.din(wr_data[15:0]),.dout(hash_table[255:240]));
2493 register_load_X16 HASH_TABLE_REG14(.clk(clk),.load(ld_hash_table[1]),.din(wr_data[15:0]),.dout(hash_table[239:224]));
2494 register_load_X16 HASH_TABLE_REG13(.clk(clk),.load(ld_hash_table[2]),.din(wr_data[15:0]),.dout(hash_table[223:208]));
2495 register_load_X16 HASH_TABLE_REG12(.clk(clk),.load(ld_hash_table[3]),.din(wr_data[15:0]),.dout(hash_table[207:192]));
2496 register_load_X16 HASH_TABLE_REG11(.clk(clk),.load(ld_hash_table[4]),.din(wr_data[15:0]),.dout(hash_table[191:176]));
2497 register_load_X16 HASH_TABLE_REG10(.clk(clk),.load(ld_hash_table[5]),.din(wr_data[15:0]),.dout(hash_table[175:160]));
2498 register_load_X16 HASH_TABLE_REG9 (.clk(clk),.load(ld_hash_table[6]),.din(wr_data[15:0]),.dout(hash_table[159:144]));
2499 register_load_X16 HASH_TABLE_REG8 (.clk(clk),.load(ld_hash_table[7]),.din(wr_data[15:0]),.dout(hash_table[143:128]));
2500 register_load_X16 HASH_TABLE_REG7 (.clk(clk),.load(ld_hash_table[8]),.din(wr_data[15:0]),.dout(hash_table[127:112]));
2501 register_load_X16 HASH_TABLE_REG6 (.clk(clk),.load(ld_hash_table[9]),.din( wr_data[15:0]),.dout(hash_table[111:96]));
2502 register_load_X16 HASH_TABLE_REG5 (.clk(clk),.load(ld_hash_table[10]),.din(wr_data[15:0]),.dout(hash_table[95:80]));
2503 register_load_X16 HASH_TABLE_REG4 (.clk(clk),.load(ld_hash_table[11]),.din(wr_data[15:0]),.dout(hash_table[79:64]));
2504 register_load_X16 HASH_TABLE_REG3 (.clk(clk),.load(ld_hash_table[12]),.din(wr_data[15:0]),.dout(hash_table[63:48]));
2505 register_load_X16 HASH_TABLE_REG2 (.clk(clk),.load(ld_hash_table[13]),.din(wr_data[15:0]),.dout(hash_table[47:32]));
2506 register_load_X16 HASH_TABLE_REG1 (.clk(clk),.load(ld_hash_table[14]),.din(wr_data[15:0]),.dout(hash_table[31:16]));
2507 register_load_X16 HASH_TABLE_REG0 (.clk(clk),.load(ld_hash_table[15]),.din(wr_data[15:0]),.dout(hash_table[15:0]));
2508
2509 /* ------------------------------------------------------------------------- */
2510 /* ---------------- Mac host info table ------------------------------------ */
2511 xREG #(`H_INFO_WIDTH) mac_host_info0_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info0 ),.reset(rx_reg_reset),.qout(mac_host_info0 ));
2512 xREG #(`H_INFO_WIDTH) mac_host_info1_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info1 ),.reset(rx_reg_reset),.qout(mac_host_info1 ));
2513 xREG #(`H_INFO_WIDTH) mac_host_info2_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info2 ),.reset(rx_reg_reset),.qout(mac_host_info2 ));
2514 xREG #(`H_INFO_WIDTH) mac_host_info3_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info3 ),.reset(rx_reg_reset),.qout(mac_host_info3 ));
2515 xREG #(`H_INFO_WIDTH) mac_host_info4_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info4 ),.reset(rx_reg_reset),.qout(mac_host_info4 ));
2516 xREG #(`H_INFO_WIDTH) mac_host_info5_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info5 ),.reset(rx_reg_reset),.qout(mac_host_info5 ));
2517 xREG #(`H_INFO_WIDTH) mac_host_info6_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info6 ),.reset(rx_reg_reset),.qout(mac_host_info6 ));
2518 xREG #(`H_INFO_WIDTH) mac_host_info7_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info7 ),.reset(rx_reg_reset),.qout(mac_host_info7 ));
2519 xREG #(`H_INFO_WIDTH) mac_host_info8_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info8 ),.reset(rx_reg_reset),.qout(mac_host_info8 ));
2520 xREG #(`H_INFO_WIDTH) mac_host_info9_xREG (.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info9 ),.reset(rx_reg_reset),.qout(mac_host_info9 ));
2521 xREG #(`H_INFO_WIDTH) mac_host_info10_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info10),.reset(rx_reg_reset),.qout(mac_host_info10));
2522 xREG #(`H_INFO_WIDTH) mac_host_info11_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info11),.reset(rx_reg_reset),.qout(mac_host_info11));
2523 xREG #(`H_INFO_WIDTH) mac_host_info12_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info12),.reset(rx_reg_reset),.qout(mac_host_info12));
2524 xREG #(`H_INFO_WIDTH) mac_host_info13_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info13),.reset(rx_reg_reset),.qout(mac_host_info13));
2525 xREG #(`H_INFO_WIDTH) mac_host_info14_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info14),.reset(rx_reg_reset),.qout(mac_host_info14));
2526 xREG #(`H_INFO_WIDTH) mac_host_info15_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info15),.reset(rx_reg_reset),.qout(mac_host_info15));
2527 xREG #(`H_INFO_WIDTH) mac_host_info16_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info16),.reset(rx_reg_reset),.qout(mac_host_info16));
2528 xREG #(`H_INFO_WIDTH) mac_host_info17_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info17),.reset(rx_reg_reset),.qout(mac_host_info17));
2529 xREG #(`H_INFO_WIDTH) mac_host_info18_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info18),.reset(rx_reg_reset),.qout(mac_host_info18));
2530 xREG #(`H_INFO_WIDTH) mac_host_info19_xREG(.din(wr_data[`H_INFO]),.clk(clk),.en(ld_mac_host_info19),.reset(rx_reg_reset),.qout(mac_host_info19));
2531 /* ------------------------------------------------------------------------- */
2532
2533`endif // !ifdef ALT_ADDR_AND_HASH_FUNC
2534
2535/**************************************************************************
2536 * end of ALT_ADDR_AND_HASH_FUNC selectable logic
2537 * ************************************************************************/
2538
2539/* led logic */
2540
2541 // free running clocks
2542 wire [15:0] prescalar_cnt;
2543 wire prescalar_cnt_max_pls;
2544 counter_X16 prescalar_cnt_counter_X16(.clk(clk),
2545 .clr(hw_reset),
2546 .enable(1'b1),.count(prescalar_cnt[15:0]));
2547
2548`ifdef ESR_FAST_SIM
2549 assign prescalar_cnt_max_pls = prescalar_cnt[0] == 1'b1;
2550`else
2551 assign prescalar_cnt_max_pls = prescalar_cnt[15:0] == 16'hffff;
2552`endif
2553
2554 // tx_led related logic
2555 wire tx_led;
2556 wire [9:0] tx_led_cnt;
2557 wire set_tx_led_lv = tx_output_en & tx_data_valid_clk;
2558 PlsGen set_tx_led_pls_PlsGen (.reset(hw_reset),.clk(clk),
2559 .iSigIn(set_tx_led_lv),
2560 .oPlsOut(set_tx_led_pls));
2561
2562 wire tx_led_cnt_max_pls;
2563
2564 wire tx_led_cnt_en = prescalar_cnt_max_pls & tx_led;
2565
2566 counter_X10 tx_led_counter_X10(.clk(clk),.clr(hw_reset),
2567 .enable(tx_led_cnt_en),.count(tx_led_cnt[9:0]));
2568
2569// eco
2570`ifdef NEPTUNE
2571 assign tx_led_cnt_max_pls = tx_led_cnt[9:0] == 10'h3ff;
2572`else
2573 wire tx_led_cnt_max_lv = tx_led_cnt[9:0] == 10'h3ff;
2574 PlsGen tx_led_cnt_max_pls_PlsGen (.reset(hw_reset),.clk(clk),
2575 .iSigIn(tx_led_cnt_max_lv),
2576 .oPlsOut(tx_led_cnt_max_pls));
2577`endif
2578
2579 SRFF tx_led_SRFF(.reset(hw_reset),.clk(clk),.iSet(set_tx_led_pls),
2580 .iRst(tx_led_cnt_max_pls),.oQ(tx_led));
2581
2582 // rx_led related logic
2583 wire rx_led;
2584 wire [9:0] rx_led_cnt;
2585
2586 PlsGen set_rx_led_pls_PlsGen (.reset(hw_reset),.clk(clk),
2587 .iSigIn(rx_data_valid_gmux_reg_clk),
2588 .oPlsOut(set_rx_led_pls));
2589
2590 wire rx_led_cnt_max_pls;
2591
2592 wire rx_led_cnt_en = prescalar_cnt_max_pls & rx_led;
2593
2594 counter_X10 rx_led_counter_X10(.clk(clk),.clr(hw_reset),
2595 .enable(rx_led_cnt_en),
2596 .count(rx_led_cnt[9:0]));
2597
2598
2599// eco
2600`ifdef NEPTUNE
2601 assign rx_led_cnt_max_pls = rx_led_cnt[9:0] == 10'h3ff;
2602`else
2603 wire rx_led_cnt_max_lv = rx_led_cnt[9:0] == 10'h3ff;
2604 PlsGen rx_led_cnt_max_pls_PlsGen (.reset(hw_reset),.clk(clk),
2605 .iSigIn(rx_led_cnt_max_lv),
2606 .oPlsOut(rx_led_cnt_max_pls));
2607`endif
2608
2609 SRFF rx_led_SRFF(.reset(hw_reset),.clk(clk),
2610 .iSet(set_rx_led_pls),
2611 .iRst(rx_led_cnt_max_pls),
2612 .oQ(rx_led));
2613
2614 wire txrx_led = tx_led | rx_led | force_LED_on;
2615 wire activity_led = led_polarity ? txrx_led : ~txrx_led;
2616
2617 always @ (posedge clk)
2618 begin
2619 rxmac_ipp_ack_reg <= rxmac_ipp_ack;
2620 ipp_rxmac_req_reg <= ipp_rxmac_req;
2621 rxmac_ipp_tag_reg <= rxmac_ipp_tag;
2622 rxmac_ipp_ctrl_reg <= rxmac_ipp_ctrl;
2623 rxmac_ipp_stat_reg <= rxmac_ipp_stat;
2624 txmac_opp_req_reg <= txmac_opp_req;
2625 opp_txmac_ack_reg <= opp_txmac_ack;
2626 opp_txmac_tag_reg <= opp_txmac_tag;
2627 opp_txmac_abort_reg <= opp_txmac_abort;
2628 opp_txmac_stat_reg <= opp_txmac_stat;
2629 end
2630
2631 assign state_machine0 = {
2632 rxfifo_empty_clk_reg,
2633 rxfifo_full_clk_reg,
2634 txfifo_empty_clk_reg,
2635 txfifo_full_clk_reg,
2636 rxfifo_rd_ptr_clk[4:0],
2637 rxfifo_wr_ptr_clk[4:0],
2638 5'b0,
2639 rxmac_ipp_stat_reg[22:20],
2640 ALT_ADDR_AND_HASH_FUNC_value,
2641 XGMII_ONLY_value,
2642 xrlm_state,
2643 mgrlm_state,
2644 lfs_state[1:0],
2645 sop_state,
2646 xtlm_state[2:0]
2647 };
2648
2649 assign internal_signals1 = {
2650 rxmac_ipp_ack_reg,
2651 ipp_rxmac_req_reg,
2652 rxmac_ipp_tag_reg,
2653 rxmac_ipp_ctrl_reg,
2654 rxmac_ipp_stat_reg[19:0],
2655 txmac_opp_req_reg,
2656 opp_txmac_ack_reg,
2657 opp_txmac_tag_reg,
2658 opp_txmac_abort_reg,
2659 opp_txmac_stat_reg[3:0]
2660 };
2661
2662 assign internal_signals2 = {6'b0,
2663 remote_fault_oc_sync,
2664 local_fault_oc_sync,
2665 xpcs_txc[7:0],
2666 xpcs_rxc[7:0],
2667 rx_heart_beat_timer_reg,// [3:0]
2668 tx_heart_beat_timer_reg // [3:0]
2669 };
2670
2671 assign rx_internal_signals1 = {12'b0,rx_clk_div2,rx_nbclk_div2,
2672 S_detected_reg,
2673 T_E_detected_at_modified_pkt_reg,
2674 END_PKT_ERR_detected_a_at_modified_pkt_reg,
2675 END_PKT_ERR_detected_b_at_modified_pkt_reg,
2676 S_D_reg,
2677 S_I_reg,
2678 D_S_reg,
2679 I_S_reg,
2680 abort_bit_reg,
2681 rx_err_reg,
2682 crc_error_reg,
2683 kill_data_ready_reg,
2684 kill_crc_reg,
2685 rx_sel_reg[1:0],
2686 //
2687 last_byte_position[2:0]
2688 };
2689
2690 assign tx_internal_signals1 = {tx_clk_div2,tx_nbclk_div2,
2691 txfifo_rd_ptr_clk[4:0],
2692 txfifo_wr_ptr_clk[4:0],
2693 tx_swap_reg,
2694 tx_on_reg,
2695 tx_on_half_reg,
2696 back2back_swap_reg1,
2697 replace_txd_time_reg,
2698 adjust2crc_full_case_last_byte_position_reg[2:0],
2699 adjust2crc_full_case_last_byte_position_is_3_or_7_reg,
2700 stretch_clks_reg[`BYTE],
2701 full_case_last_byte_position_reg[2:0]
2702 };
2703
2704 assign tx_internal_signals2 = {1'b0,
2705 stretch_full_case_last_byte_position_reg[3:0],
2706 stretch_bytes_reg[2:0],
2707 minus_4bytes_reg,
2708 B_eop_reg,
2709 stretch_1_more_clk_reg,
2710 no_wasted_BW_reg,
2711 ipg_done_trail_temp_reg,
2712 tx_byte0_reg0[7:0],
2713 restart_ipg_timer_reg,
2714 eop_txclk_reg0,
2715 eop_w_fcs_reg0,
2716 tx_abort_reg0,
2717 eop_w_fcs_reg1,
2718 tx_abort_reg1,
2719 ipg_done_reg,
2720 ipg_done_lead_temp_reg,
2721 force_ipg_done_lead_reg,
2722 set_back2back_reg,
2723 back2back_reg
2724 };
2725
2726 reg [31:0] xmac_debug;
2727
2728 always @ (/*--AUTOSENSE*/
2729 internal_signals1 or internal_signals2
2730 or rx_internal_signals1 or state_machine0
2731 or training_vector or tx_internal_signals1
2732 or tx_internal_signals2 or xmac_debug_sel or xpcs_rxd
2733 or xpcs_txd)
2734 case (xmac_debug_sel) // synopsys parallel_case full_case
2735 4'h0 : xmac_debug = state_machine0;
2736 4'h1 : xmac_debug = xpcs_rxd[31:0];
2737 4'h2 : xmac_debug = xpcs_rxd[63:32];
2738 4'h3 : xmac_debug = xpcs_txd[31:0];
2739 4'h4 : xmac_debug = xpcs_txd[63:32];
2740 4'h5 : xmac_debug = internal_signals1;
2741 4'h6 : xmac_debug = internal_signals2;
2742 4'hA : xmac_debug = rx_internal_signals1;
2743 4'hB : xmac_debug = tx_internal_signals1;
2744 4'hC : xmac_debug = tx_internal_signals2;
2745 `SEL_mac_training_vector : xmac_debug = training_vector[31:0];
2746 default: xmac_debug = state_machine0;
2747 endcase
2748
2749
2750endmodule // xmac_slv
2751
2752
2753
2754
2755/************************************
2756* Rising/Falling dual edge pulse gen
2757*************************************/
2758module PlsGenX (reset,clk,iSigIn,oPlsOut);
2759
2760input reset, clk, iSigIn;
2761output oPlsOut;
2762
2763reg Q;
2764
2765always @ (posedge clk)
2766if (reset)
2767 Q <= 0;
2768else
2769 Q <= iSigIn;
2770
2771wire Qb = ~Q;
2772
2773wire oPlsOut = (iSigIn & Qb) | (~iSigIn & Q);
2774
2775endmodule
2776
2777