eth: Clean up masking, lane 0 never needs to be masked

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2025-10-04 20:06:58 -07:00
parent 93ef0f970b
commit caeacadb78
6 changed files with 22 additions and 17 deletions

View File

@@ -298,7 +298,7 @@ endfunction
wire [DATA_W-1:0] s_axis_tx_tdata_masked;
for (genvar n = 0; n < KEEP_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = s_axis_tx.tkeep[n] ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
assign s_axis_tx_tdata_masked[n*8 +: 8] = (n == 0 || s_axis_tx.tkeep[n]) ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
end
// FCS cycle calculation

View File

@@ -179,8 +179,6 @@ logic [31:0] swap_data = 32'd0;
logic output_data_finish_reg = 1'b0;
logic [DATA_W-1:0] s_axis_tx_tdata_masked;
logic [DATA_W-1:0] s_tdata_reg = '0, s_tdata_next;
logic [EMPTY_W-1:0] s_empty_reg = '0, s_empty_next;
@@ -314,10 +312,10 @@ function [2:0] keep2empty(input [7:0] k);
endfunction
// Mask input data
always_comb begin
for (integer j = 0; j < 8; j = j + 1) begin
s_axis_tx_tdata_masked[j*8 +: 8] = s_axis_tx.tkeep[j] ? s_axis_tx.tdata[j*8 +: 8] : 8'd0;
end
wire [DATA_W-1:0] s_axis_tx_tdata_masked;
for (genvar n = 0; n < KEEP_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = (n == 0 || s_axis_tx.tkeep[n]) ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
end
// FCS cycle calculation

View File

@@ -222,6 +222,15 @@ eth_crc (
.state_out(crc_state_next)
);
// Mask input data
wire [DATA_W-1:0] xgmii_rxd_masked;
wire [CTRL_W-1:0] xgmii_term;
for (genvar n = 0; n < CTRL_W; n = n + 1) begin
assign xgmii_rxd_masked[n*8 +: 8] = (n > 0 && xgmii_rxc[n]) ? 8'd0 : xgmii_rxd[n*8 +: 8];
assign xgmii_term[n] = xgmii_rxc[n] && (xgmii_rxd[n*8 +: 8] == XGMII_TERM);
end
always_comb begin
state_next = STATE_IDLE;
@@ -529,7 +538,7 @@ always_ff @(posedge clk) begin
framing_error_reg <= xgmii_rxc != 0;
for (integer i = CTRL_W-1; i >= 0; i = i - 1) begin
if (xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM)) begin
if (xgmii_term[i]) begin
term_present_reg <= 1'b1;
term_first_cycle_reg <= i == 0;
term_lane_reg <= 2'(i);
@@ -547,10 +556,8 @@ always_ff @(posedge clk) begin
crc_valid_save <= crc_valid;
for (integer i = 0; i < CTRL_W; i = i + 1) begin
xgmii_rxd_d0[i*8 +: 8] <= xgmii_rxc[i] ? 8'd0 : xgmii_rxd[i*8 +: 8];
end
xgmii_rxc_d0 <= xgmii_rxc;
xgmii_rxd_d0 <= xgmii_rxd_masked;
xgmii_rxd_d1 <= xgmii_rxd_d0;
xgmii_rxd_d2 <= xgmii_rxd_d1;

View File

@@ -239,7 +239,7 @@ wire [DATA_W-1:0] xgmii_rxd_masked;
wire [CTRL_W-1:0] xgmii_term;
for (genvar n = 0; n < CTRL_W; n = n + 1) begin
assign xgmii_rxd_masked[n*8 +: 8] = xgmii_rxc[n] ? 8'd0 : xgmii_rxd[n*8 +: 8];
assign xgmii_rxd_masked[n*8 +: 8] = (n > 0 && xgmii_rxc[n]) ? 8'd0 : xgmii_rxd[n*8 +: 8];
assign xgmii_term[n] = xgmii_rxc[n] && (xgmii_rxd[n*8 +: 8] == XGMII_TERM);
end
@@ -574,7 +574,7 @@ always_ff @(posedge clk) begin
framing_error_reg <= xgmii_rxc != 0;
for (integer i = CTRL_W-1; i >= 0; i = i - 1) begin
if (xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM)) begin
if (xgmii_term[i]) begin
term_present_reg <= 1'b1;
term_first_cycle_reg <= i <= 4;
term_lane_reg <= 3'(i);

View File

@@ -246,8 +246,8 @@ endfunction
// Mask input data
wire [DATA_W-1:0] s_axis_tx_tdata_masked;
for (genvar n = 0; n < CTRL_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = s_axis_tx.tkeep[n] ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
for (genvar n = 0; n < KEEP_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = (n == 0 || s_axis_tx.tkeep[n]) ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
end
// FCS cycle calculation

View File

@@ -258,8 +258,8 @@ endfunction
// Mask input data
wire [DATA_W-1:0] s_axis_tx_tdata_masked;
for (genvar n = 0; n < CTRL_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = s_axis_tx.tkeep[n] ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
for (genvar n = 0; n < KEEP_W; n = n + 1) begin
assign s_axis_tx_tdata_masked[n*8 +: 8] = (n == 0 || s_axis_tx.tkeep[n]) ? s_axis_tx.tdata[n*8 +: 8] : 8'd0;
end
// FCS cycle calculation