From 4be054e9b3cdcec9275f4802cb553f6f286398e0 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Tue, 15 Apr 2025 10:59:35 -0700 Subject: [PATCH] eth: Reorganize MAC stats module Signed-off-by: Alex Forencich --- rtl/eth/taxi_eth_mac_stats.sv | 540 ++++++++++++++-------------------- 1 file changed, 222 insertions(+), 318 deletions(-) diff --git a/rtl/eth/taxi_eth_mac_stats.sv b/rtl/eth/taxi_eth_mac_stats.sv index f1eccdd..5d6656f 100644 --- a/rtl/eth/taxi_eth_mac_stats.sv +++ b/rtl/eth/taxi_eth_mac_stats.sv @@ -88,34 +88,6 @@ module taxi_eth_mac_stats # input wire logic [7:0] stat_rx_pfc_paused ); -wire hist_tx_pkt_small = (stat_tx_pkt_len != 0) && stat_tx_pkt_len[15:6] == 0; -wire hist_tx_pkt_64 = stat_tx_pkt_len == 64; -wire hist_tx_pkt_65_127 = stat_tx_pkt_len[15:6] == 1 && stat_tx_pkt_len != 64; -wire hist_tx_pkt_128_255 = stat_tx_pkt_len[15:7] == 1; -wire hist_tx_pkt_256_511 = stat_tx_pkt_len[15:8] == 1; -wire hist_tx_pkt_512_1023 = stat_tx_pkt_len[15:9] == 1; -wire hist_tx_pkt_1024_1518 = stat_tx_pkt_len[15:10] == 1 && stat_tx_pkt_len <= 1518; -wire hist_tx_pkt_large_1 = stat_tx_pkt_len > 1518; -wire hist_tx_pkt_1519_2047 = stat_tx_pkt_len[15:11] == 0 && stat_tx_pkt_len > 1518; -wire hist_tx_pkt_2048_4095 = stat_tx_pkt_len[15:11] == 1; -wire hist_tx_pkt_4096_8192 = stat_tx_pkt_len[15:12] == 1; -wire hist_tx_pkt_8192_9215 = stat_tx_pkt_len[15:13] == 1 && stat_tx_pkt_len <= 9215; -wire hist_tx_pkt_large_2 = stat_tx_pkt_len > 9215; - -wire hist_rx_pkt_small = (stat_rx_pkt_len != 0) && stat_rx_pkt_len[15:6] == 0; -wire hist_rx_pkt_64 = stat_rx_pkt_len == 64; -wire hist_rx_pkt_65_127 = stat_rx_pkt_len[15:6] == 1 && stat_rx_pkt_len != 64; -wire hist_rx_pkt_128_255 = stat_rx_pkt_len[15:7] == 1; -wire hist_rx_pkt_256_511 = stat_rx_pkt_len[15:8] == 1; -wire hist_rx_pkt_512_1023 = stat_rx_pkt_len[15:9] == 1; -wire hist_rx_pkt_1024_1518 = stat_rx_pkt_len[15:10] == 1 && stat_rx_pkt_len <= 1518; -wire hist_rx_pkt_large_1 = stat_rx_pkt_len > 1518; -wire hist_rx_pkt_1519_2047 = stat_rx_pkt_len[15:11] == 0 && stat_rx_pkt_len > 1518; -wire hist_rx_pkt_2048_4095 = stat_rx_pkt_len[15:11] == 1; -wire hist_rx_pkt_4096_8192 = stat_rx_pkt_len[15:12] == 1; -wire hist_rx_pkt_8192_9215 = stat_rx_pkt_len[15:13] == 1 && stat_rx_pkt_len <= 9215; -wire hist_rx_pkt_large_2 = stat_rx_pkt_len > 9215; - localparam TX_CNT = STAT_TX_LEVEL == 0 ? 8 : (STAT_TX_LEVEL == 1 ? 16: 32); localparam RX_CNT = STAT_RX_LEVEL == 0 ? 8 : (STAT_RX_LEVEL == 1 ? 16: 32); @@ -131,302 +103,120 @@ taxi_axis_if #( ) axis_stat_tx(), axis_stat_rx(), axis_stat_int[2](); -if (STAT_TX_LEVEL == 0) begin +wire [INC_W-1:0] tx_inc[TX_CNT]; - taxi_stats_collect #( - .CNT(8), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - tx_stats_inst ( - .clk(tx_clk), - .rst(tx_rst), +wire hist_tx_pkt_small = (stat_tx_pkt_len != 0) && stat_tx_pkt_len[15:6] == 0; +wire hist_tx_pkt_64 = stat_tx_pkt_len == 64; +wire hist_tx_pkt_65_127 = stat_tx_pkt_len[15:6] == 1 && stat_tx_pkt_len != 64; +wire hist_tx_pkt_128_255 = stat_tx_pkt_len[15:7] == 1; +wire hist_tx_pkt_256_511 = stat_tx_pkt_len[15:8] == 1; +wire hist_tx_pkt_512_1023 = stat_tx_pkt_len[15:9] == 1; +wire hist_tx_pkt_1024_1518 = stat_tx_pkt_len[15:10] == 1 && stat_tx_pkt_len <= 1518; +wire hist_tx_pkt_large_1 = stat_tx_pkt_len > 1518; +wire hist_tx_pkt_1519_2047 = stat_tx_pkt_len[15:11] == 0 && stat_tx_pkt_len > 1518; +wire hist_tx_pkt_2048_4095 = stat_tx_pkt_len[15:11] == 1; +wire hist_tx_pkt_4096_8192 = stat_tx_pkt_len[15:12] == 1; +wire hist_tx_pkt_8192_9215 = stat_tx_pkt_len[15:13] == 1 && stat_tx_pkt_len <= 9215; +wire hist_tx_pkt_large_2 = stat_tx_pkt_len > 9215; - /* - * Increment inputs - */ - .stat_inc('{ - stat_tx_byte, // 0: TX_BYTES - INC_W'(tx_start_packet), // 1: TX_PKTS - INC_W'(stat_tx_err_user), // 2: TX_ERR - INC_W'(stat_tx_err_underflow), // 3: TX_UNDR - INC_W'(stat_tx_err_oversize), // 4: TX_OVRSZ - INC_W'(stat_tx_mcf), // 5: TX_CTRL - INC_W'(0), // 6: TX_COL - INC_W'(0) // 7: - }), - .stat_valid('{8{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_tx), - - /* - * Control inputs - */ - .update(1'b0) - ); - -end else if (STAT_TX_LEVEL == 1) begin - - taxi_stats_collect #( - .CNT(16), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - tx_stats_inst ( - .clk(tx_clk), - .rst(tx_rst), - - /* - * Increment inputs - */ - .stat_inc('{ - stat_tx_byte, // 0: TX_BYTES - INC_W'(tx_start_packet), // 1: TX_PKTS - INC_W'(stat_tx_err_user), // 2: TX_ERR - INC_W'(stat_tx_err_underflow), // 3: TX_UNDR - INC_W'(stat_tx_err_oversize), // 4: TX_OVRSZ - INC_W'(stat_tx_mcf), // 5: TX_CTRL - INC_W'(0), // 6: TX_COL - INC_W'(0), // 7: - INC_W'(hist_tx_pkt_small), // 8: TX_PSM - INC_W'(hist_tx_pkt_64), // 9: TX_P64 - INC_W'(hist_tx_pkt_65_127), // 10: TX_P65 - INC_W'(hist_tx_pkt_128_255), // 11: TX_P128 - INC_W'(hist_tx_pkt_256_511), // 12: TX_P256 - INC_W'(hist_tx_pkt_512_1023), // 13: TX_P512 - INC_W'(hist_tx_pkt_1024_1518), // 14: TX_P1024 - INC_W'(hist_tx_pkt_large_1) // 15: TX_PLG - }), - .stat_valid('{16{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_tx), - - /* - * Control inputs - */ - .update(1'b0) - ); - -end else begin - - taxi_stats_collect #( - .CNT(32), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - tx_stats_inst ( - .clk(tx_clk), - .rst(tx_rst), - - /* - * Increment inputs - */ - .stat_inc('{ - stat_tx_byte, // 0: TX_BYTES - INC_W'(tx_start_packet), // 1: TX_PKTS - INC_W'(stat_tx_err_user), // 2: TX_ERR - INC_W'(stat_tx_err_underflow), // 3: TX_UNDR - INC_W'(stat_tx_err_oversize), // 4: TX_OVRSZ - INC_W'(stat_tx_mcf), // 5: TX_CTRL - INC_W'(0), // 6: TX_COL - INC_W'(0), // 7: - INC_W'(hist_tx_pkt_small), // 8: TX_PSM - INC_W'(hist_tx_pkt_64), // 9: TX_P64 - INC_W'(hist_tx_pkt_65_127), // 10: TX_P65 - INC_W'(hist_tx_pkt_128_255), // 11: TX_P128 - INC_W'(hist_tx_pkt_256_511), // 12: TX_P256 - INC_W'(hist_tx_pkt_512_1023), // 13: TX_P512 - INC_W'(hist_tx_pkt_1024_1518), // 14: TX_P1024 - INC_W'(hist_tx_pkt_large_2), // 15: TX_PLG - INC_W'(hist_tx_pkt_1519_2047), // 16: TX_P1519 - INC_W'(hist_tx_pkt_2048_4095), // 17: TX_P2048 - INC_W'(hist_tx_pkt_4096_8192), // 18: TX_P4096 - INC_W'(hist_tx_pkt_8192_9215), // 19: TX_P8192 - INC_W'(stat_tx_pkt_ucast), // 20: TX_UCAST - INC_W'(stat_tx_pkt_mcast), // 21: TX_MCAST - INC_W'(stat_tx_pkt_bcast), // 22: TX_BCAST - INC_W'(stat_tx_pkt_vlan), // 23: TX_VLAN - INC_W'(stat_tx_lfc_pkt), // 24: TX_LFC - INC_W'(stat_tx_pfc_pkt), // 25: TX_PFC - INC_W'(0), // 26: TX_MCOL - INC_W'(0), // 27: TX_DEFER - INC_W'(0), // 28: TX_LCOL - INC_W'(0), // 29: TX_ECOL - INC_W'(0), // 30: TX_EDEF - INC_W'(0) // 31: - }), - .stat_valid('{32{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_tx), - - /* - * Control inputs - */ - .update(1'b0) - ); +// TX_BYTES +assign tx_inc[0] = stat_tx_byte; +// TX_PKTS +assign tx_inc[1] = INC_W'(tx_start_packet); +// TX_ERR +assign tx_inc[2] = INC_W'(stat_tx_err_user); +// TX_UNDR +assign tx_inc[3] = INC_W'(stat_tx_err_underflow); +// TX_OVRSZ +assign tx_inc[4] = INC_W'(stat_tx_err_oversize); +// TX_CTRL +assign tx_inc[5] = INC_W'(stat_tx_mcf); +// TX_COL +assign tx_inc[6] = INC_W'(0); +// reserved +assign tx_inc[7] = INC_W'(0); +if (STAT_TX_LEVEL > 0) begin + // TX_PSM + assign tx_inc[8] = INC_W'(hist_tx_pkt_small); + // TX_P64 + assign tx_inc[9] = INC_W'(hist_tx_pkt_64); + // TX_P65 + assign tx_inc[10] = INC_W'(hist_tx_pkt_65_127); + // TX_P128 + assign tx_inc[11] = INC_W'(hist_tx_pkt_128_255); + // TX_P256 + assign tx_inc[12] = INC_W'(hist_tx_pkt_256_511); + // TX_P512 + assign tx_inc[13] = INC_W'(hist_tx_pkt_512_1023); + // TX_P1024 + assign tx_inc[14] = INC_W'(hist_tx_pkt_1024_1518); + // TX_PLG + assign tx_inc[15] = INC_W'(STAT_TX_LEVEL > 1 ? hist_tx_pkt_large_2 : hist_tx_pkt_large_1); end -if (STAT_RX_LEVEL == 0) begin - - taxi_stats_collect #( - .CNT(8), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE+TX_CNT), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - rx_stats_inst ( - .clk(rx_clk), - .rst(rx_rst), - - /* - * Increment inputs - */ - .stat_inc('{ - stat_rx_byte, // 0: RX_BYTES - INC_W'(rx_start_packet), // 1: RX_PKTS - INC_W'(stat_rx_err_bad_fcs), // 2: RX_FCSER - INC_W'(stat_rx_fifo_drop), // 3: RX_FDRP - INC_W'(stat_rx_err_oversize), // 4: RX_OVRSZ - INC_W'(stat_rx_err_bad_block), // 5: RX_ERBLK - INC_W'(stat_rx_err_framing), // 6: RX_ERFRM - INC_W'(0) // 7: - }), - .stat_valid('{8{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_rx), - - /* - * Control inputs - */ - .update(1'b0) - ); - -end else if (STAT_RX_LEVEL == 1) begin - - taxi_stats_collect #( - .CNT(16), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE+TX_CNT), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - rx_stats_inst ( - .clk(rx_clk), - .rst(rx_rst), - - /* - * Increment inputs - */ - .stat_inc('{ - stat_rx_byte, // 0: RX_BYTES - INC_W'(rx_start_packet), // 1: RX_PKTS - INC_W'(stat_rx_err_bad_fcs), // 2: RX_FCSER - INC_W'(stat_rx_fifo_drop), // 3: RX_FDRP - INC_W'(stat_rx_err_oversize), // 4: RX_OVRSZ - INC_W'(stat_rx_err_bad_block), // 5: RX_ERBLK - INC_W'(stat_rx_err_framing), // 6: RX_ERFRM - INC_W'(0), // 7: - INC_W'(hist_rx_pkt_small), // 8: RX_PSM - INC_W'(hist_rx_pkt_64), // 9: RX_P64 - INC_W'(hist_rx_pkt_65_127), // 10: RX_P65 - INC_W'(hist_rx_pkt_128_255), // 11: RX_P128 - INC_W'(hist_rx_pkt_256_511), // 12: RX_P256 - INC_W'(hist_rx_pkt_512_1023), // 13: RX_P512 - INC_W'(hist_rx_pkt_1024_1518), // 14: RX_P1024 - INC_W'(hist_rx_pkt_large_1) // 15: RX_PLG - }), - .stat_valid('{16{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_rx), - - /* - * Control inputs - */ - .update(1'b0) - ); - -end else begin - - taxi_stats_collect #( - .CNT(32), - .INC_W(INC_W), - .ID_BASE(STAT_ID_BASE+TX_CNT), - .UPDATE_PERIOD(STAT_UPDATE_PERIOD) - ) - rx_stats_inst ( - .clk(rx_clk), - .rst(rx_rst), - - /* - * Increment inputs - */ - .stat_inc('{ - stat_rx_byte, // 0: RX_BYTES - INC_W'(rx_start_packet), // 1: RX_PKTS - INC_W'(stat_rx_err_bad_fcs), // 2: RX_FCSER - INC_W'(stat_rx_fifo_drop), // 3: RX_FDRP - INC_W'(stat_rx_err_oversize), // 4: RX_OVRSZ - INC_W'(stat_rx_err_bad_block), // 5: RX_ERBLK - INC_W'(stat_rx_err_framing), // 6: RX_ERFRM - INC_W'(0), // 7: - INC_W'(hist_rx_pkt_small), // 8: RX_PSM - INC_W'(hist_rx_pkt_64), // 9: RX_P64 - INC_W'(hist_rx_pkt_65_127), // 10: RX_P65 - INC_W'(hist_rx_pkt_128_255), // 11: RX_P128 - INC_W'(hist_rx_pkt_256_511), // 12: RX_P256 - INC_W'(hist_rx_pkt_512_1023), // 13: RX_P512 - INC_W'(hist_rx_pkt_1024_1518), // 14: RX_P1024 - INC_W'(hist_rx_pkt_large_2), // 15: RX_PLG - INC_W'(hist_rx_pkt_1519_2047), // 16: RX_P1519 - INC_W'(hist_rx_pkt_2048_4095), // 17: RX_P2048 - INC_W'(hist_rx_pkt_4096_8192), // 18: RX_P4096 - INC_W'(hist_rx_pkt_8192_9215), // 19: RX_P8192 - INC_W'(stat_rx_pkt_ucast), // 20: RX_UCAST - INC_W'(stat_rx_pkt_mcast), // 21: RX_MCAST - INC_W'(stat_rx_pkt_bcast), // 22: RX_BCAST - INC_W'(stat_rx_pkt_vlan), // 23: RX_VLAN - INC_W'(stat_rx_lfc_pkt), // 24: RX_LFC - INC_W'(stat_rx_pfc_pkt), // 25: RX_PFC - INC_W'(stat_rx_err_preamble), // 26: RX_ERPRE - INC_W'(stat_rx_pkt_fragment), // 27: RX_FRG - INC_W'(stat_rx_pkt_jabber), // 28: RX_JBR - INC_W'(0), // 29: - INC_W'(0), // 30: - INC_W'(0) // 31: - }), - .stat_valid('{32{1'b1}}), - - /* - * Statistics increment output - */ - .m_axis_stat(axis_stat_rx), - - /* - * Control inputs - */ - .update(1'b0) - ); - +if (STAT_TX_LEVEL > 1) begin + // TX_P1519 + assign tx_inc[16] = INC_W'(hist_tx_pkt_1519_2047); + // TX_P2048 + assign tx_inc[17] = INC_W'(hist_tx_pkt_2048_4095); + // TX_P4096 + assign tx_inc[18] = INC_W'(hist_tx_pkt_4096_8192); + // TX_P8192 + assign tx_inc[19] = INC_W'(hist_tx_pkt_8192_9215); + // TX_UCAST + assign tx_inc[20] = INC_W'(stat_tx_pkt_ucast); + // TX_MCAST + assign tx_inc[21] = INC_W'(stat_tx_pkt_mcast); + // TX_BCAST + assign tx_inc[22] = INC_W'(stat_tx_pkt_bcast); + // TX_VLAN + assign tx_inc[23] = INC_W'(stat_tx_pkt_vlan); + // TX_LFC + assign tx_inc[24] = INC_W'(stat_tx_lfc_pkt); + // TX_PFC + assign tx_inc[25] = INC_W'(stat_tx_pfc_pkt); + // TX_MCOL + assign tx_inc[26] = INC_W'(0); + // TX_DEFER + assign tx_inc[27] = INC_W'(0); + // TX_LCOL + assign tx_inc[28] = INC_W'(0); + // TX_ECOL + assign tx_inc[29] = INC_W'(0); + // TX_EDEF + assign tx_inc[30] = INC_W'(0); + // reserved + assign tx_inc[31] = INC_W'(0); end +taxi_stats_collect #( + .CNT(TX_CNT), + .INC_W(INC_W), + .ID_BASE(STAT_ID_BASE), + .UPDATE_PERIOD(STAT_UPDATE_PERIOD) +) +tx_stats_inst ( + .clk(tx_clk), + .rst(tx_rst), + + /* + * Increment inputs + */ + .stat_inc(tx_inc), + .stat_valid('{TX_CNT{1'b1}}), + + /* + * Statistics increment output + */ + .m_axis_stat(axis_stat_tx), + + /* + * Control inputs + */ + .update(1'b0) +); + taxi_axis_async_fifo #( .DEPTH(32), .FRAME_FIFO(1'b0), @@ -471,6 +261,120 @@ tx_stat_fifo ( .m_status_good_frame() ); +wire [INC_W-1:0] rx_inc[RX_CNT]; + +wire hist_rx_pkt_small = (stat_rx_pkt_len != 0) && stat_rx_pkt_len[15:6] == 0; +wire hist_rx_pkt_64 = stat_rx_pkt_len == 64; +wire hist_rx_pkt_65_127 = stat_rx_pkt_len[15:6] == 1 && stat_rx_pkt_len != 64; +wire hist_rx_pkt_128_255 = stat_rx_pkt_len[15:7] == 1; +wire hist_rx_pkt_256_511 = stat_rx_pkt_len[15:8] == 1; +wire hist_rx_pkt_512_1023 = stat_rx_pkt_len[15:9] == 1; +wire hist_rx_pkt_1024_1518 = stat_rx_pkt_len[15:10] == 1 && stat_rx_pkt_len <= 1518; +wire hist_rx_pkt_large_1 = stat_rx_pkt_len > 1518; +wire hist_rx_pkt_1519_2047 = stat_rx_pkt_len[15:11] == 0 && stat_rx_pkt_len > 1518; +wire hist_rx_pkt_2048_4095 = stat_rx_pkt_len[15:11] == 1; +wire hist_rx_pkt_4096_8192 = stat_rx_pkt_len[15:12] == 1; +wire hist_rx_pkt_8192_9215 = stat_rx_pkt_len[15:13] == 1 && stat_rx_pkt_len <= 9215; +wire hist_rx_pkt_large_2 = stat_rx_pkt_len > 9215; + +// RX_BYTES +assign rx_inc[0] = stat_rx_byte; +// RX_PKTS +assign rx_inc[1] = INC_W'(rx_start_packet); +// RX_FCSER +assign rx_inc[2] = INC_W'(stat_rx_err_bad_fcs); +// RX_FDRP +assign rx_inc[3] = INC_W'(stat_rx_fifo_drop); +// RX_OVRSZ +assign rx_inc[4] = INC_W'(stat_rx_err_oversize); +// RX_ERBLK +assign rx_inc[5] = INC_W'(stat_rx_err_bad_block); +// RX_ERFRM +assign rx_inc[6] = INC_W'(stat_rx_err_framing); +// reserved +assign rx_inc[7] = INC_W'(0); + +if (STAT_RX_LEVEL > 0) begin + // RX_PSM + assign rx_inc[8] = INC_W'(hist_rx_pkt_small); + // RX_P64 + assign rx_inc[9] = INC_W'(hist_rx_pkt_64); + // RX_P65 + assign rx_inc[10] = INC_W'(hist_rx_pkt_65_127); + // RX_P128 + assign rx_inc[11] = INC_W'(hist_rx_pkt_128_255); + // RX_P256 + assign rx_inc[12] = INC_W'(hist_rx_pkt_256_511); + // RX_P512 + assign rx_inc[13] = INC_W'(hist_rx_pkt_512_1023); + // RX_P1024 + assign rx_inc[14] = INC_W'(hist_rx_pkt_1024_1518); + // RX_PLG + assign rx_inc[15] = INC_W'(STAT_RX_LEVEL > 1 ? hist_rx_pkt_large_2 : hist_rx_pkt_large_1); +end + +if (STAT_RX_LEVEL > 1) begin + // RX_P1519 + assign rx_inc[16] = INC_W'(hist_rx_pkt_1519_2047); + // RX_P2048 + assign rx_inc[17] = INC_W'(hist_rx_pkt_2048_4095); + // RX_P4096 + assign rx_inc[18] = INC_W'(hist_rx_pkt_4096_8192); + // RX_P8192 + assign rx_inc[19] = INC_W'(hist_rx_pkt_8192_9215); + // RX_UCAST + assign rx_inc[20] = INC_W'(stat_rx_pkt_ucast); + // RX_MCAST + assign rx_inc[21] = INC_W'(stat_rx_pkt_mcast); + // RX_BCAST + assign rx_inc[22] = INC_W'(stat_rx_pkt_bcast); + // RX_VLAN + assign rx_inc[23] = INC_W'(stat_rx_pkt_vlan); + // RX_LFC + assign rx_inc[24] = INC_W'(stat_rx_lfc_pkt); + // RX_PFC + assign rx_inc[25] = INC_W'(stat_rx_pfc_pkt); + // RX_ERPRE + assign rx_inc[26] = INC_W'(stat_rx_err_preamble); + // RX_FRG + assign rx_inc[27] = INC_W'(stat_rx_pkt_fragment); + // RX_JBR + assign rx_inc[28] = INC_W'(stat_rx_pkt_jabber); + // reserved + assign rx_inc[29] = INC_W'(0); + // reserved + assign rx_inc[30] = INC_W'(0); + // reserved + assign rx_inc[31] = INC_W'(0); +end + +taxi_stats_collect #( + .CNT(RX_CNT), + .INC_W(INC_W), + .ID_BASE(STAT_ID_BASE+TX_CNT), + .UPDATE_PERIOD(STAT_UPDATE_PERIOD) +) +rx_stats_inst ( + .clk(rx_clk), + .rst(rx_rst), + + /* + * Increment inputs + */ + .stat_inc(rx_inc), + .stat_valid('{RX_CNT{1'b1}}), + + /* + * Statistics increment output + */ + .m_axis_stat(axis_stat_rx), + + /* + * Control inputs + */ + .update(1'b0) +); + taxi_axis_async_fifo #( .DEPTH(32), .FRAME_FIFO(1'b0), @@ -516,7 +420,7 @@ rx_stat_fifo ( ); taxi_axis_arb_mux #( - .S_COUNT(2), + .S_COUNT($size(axis_stat_int)), .UPDATE_TID(1'b0), .ARB_ROUND_ROBIN(1'b1), .ARB_LSB_HIGH_PRIO(1'b0)