mirror of
https://github.com/fpganinja/taxi.git
synced 2025-12-07 16:28:40 -08:00
eth: Reorganize MAC stats module
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user