mirror of
https://github.com/corundum/corundum.git
synced 2025-01-30 08:32:52 +08:00
Use generate blocks for Ethernet FCS computation
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
parent
5f39d6ece6
commit
2ce89aec09
@ -194,17 +194,13 @@ reg [PTP_TS_WIDTH-1:0] ptp_ts_reg = 0;
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
reg [31:0] crc_state3 = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next7;
|
||||
wire [31:0] crc_next[7:0];
|
||||
|
||||
wire crc_valid0 = crc_next0 == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next1 == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next2 == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next3 == ~32'h2144df1c;
|
||||
wire crc_valid7 = crc_next7 == ~32'h2144df1c;
|
||||
wire crc_valid0 = crc_next[0] == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next[1] == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next[2] == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next[3] == ~32'h2144df1c;
|
||||
wire crc_valid7 = crc_next[7] == ~32'h2144df1c;
|
||||
|
||||
reg crc_valid7_save = 1'b0;
|
||||
|
||||
@ -219,69 +215,28 @@ assign error_bad_frame = error_bad_frame_reg;
|
||||
assign error_bad_fcs = error_bad_fcs_reg;
|
||||
assign rx_bad_block = rx_bad_block_reg;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(input_data_crc[7:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(input_data_crc[15:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 4; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(input_data_crc[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(input_data_crc[23:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(input_data_crc[31:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
@ -293,10 +248,10 @@ lfsr #(
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_64 (
|
||||
.data_in(input_data_d0[63:0]),
|
||||
.data_in(input_data_d0),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next7)
|
||||
.state_out(crc_next[7])
|
||||
);
|
||||
|
||||
always @* begin
|
||||
@ -575,13 +530,13 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
crc_state <= crc_next[7];
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
crc_state3 <= crc_next[3];
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
crc_state3 <= crc_next[7];
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
@ -216,14 +216,7 @@ reg m_axis_ptp_ts_valid_int_reg = 1'b0, m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next4;
|
||||
wire [31:0] crc_next5;
|
||||
wire [31:0] crc_next6;
|
||||
wire [31:0] crc_next7;
|
||||
wire [31:0] crc_next[7:0];
|
||||
|
||||
reg [DATA_WIDTH-1:0] encoded_tx_data_reg = {{8{CTRL_IDLE}}, BLOCK_TYPE_CTRL};
|
||||
reg [HDR_WIDTH-1:0] encoded_tx_hdr_reg = SYNC_CTRL;
|
||||
@ -246,133 +239,28 @@ assign m_axis_ptp_ts_valid = PTP_TS_ENABLE || PTP_TAG_ENABLE ? m_axis_ptp_ts_val
|
||||
assign start_packet = start_packet_reg;
|
||||
assign error_underflow = error_underflow_reg;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(s_tdata_reg[7:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(s_tdata_reg[15:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 8; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(s_tdata_reg[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(s_tdata_reg[23:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(s_tdata_reg[31:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(40),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_40 (
|
||||
.data_in(s_tdata_reg[39:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next4)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(48),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_48 (
|
||||
.data_in(s_tdata_reg[47:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next5)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(56),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_56 (
|
||||
.data_in(s_tdata_reg[55:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next6)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(64),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_64 (
|
||||
.data_in(s_tdata_reg[63:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next7)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
function [3:0] keep2count;
|
||||
input [7:0] k;
|
||||
@ -417,57 +305,57 @@ end
|
||||
always @* begin
|
||||
casez (s_empty_reg)
|
||||
3'd7: begin
|
||||
fcs_output_data_0 = {24'd0, ~crc_next0[31:0], s_tdata_reg[7:0]};
|
||||
fcs_output_data_0 = {24'd0, ~crc_next[0][31:0], s_tdata_reg[7:0]};
|
||||
fcs_output_data_1 = 64'd0;
|
||||
fcs_output_type_0 = OUTPUT_TYPE_TERM_5;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_IDLE;
|
||||
ifg_offset = 8'd3;
|
||||
end
|
||||
3'd6: begin
|
||||
fcs_output_data_0 = {16'd0, ~crc_next1[31:0], s_tdata_reg[15:0]};
|
||||
fcs_output_data_0 = {16'd0, ~crc_next[1][31:0], s_tdata_reg[15:0]};
|
||||
fcs_output_data_1 = 64'd0;
|
||||
fcs_output_type_0 = OUTPUT_TYPE_TERM_6;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_IDLE;
|
||||
ifg_offset = 8'd2;
|
||||
end
|
||||
3'd5: begin
|
||||
fcs_output_data_0 = {8'd0, ~crc_next2[31:0], s_tdata_reg[23:0]};
|
||||
fcs_output_data_0 = {8'd0, ~crc_next[2][31:0], s_tdata_reg[23:0]};
|
||||
fcs_output_data_1 = 64'd0;
|
||||
fcs_output_type_0 = OUTPUT_TYPE_TERM_7;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_IDLE;
|
||||
ifg_offset = 8'd1;
|
||||
end
|
||||
3'd4: begin
|
||||
fcs_output_data_0 = {~crc_next3[31:0], s_tdata_reg[31:0]};
|
||||
fcs_output_data_0 = {~crc_next[3][31:0], s_tdata_reg[31:0]};
|
||||
fcs_output_data_1 = 64'd0;
|
||||
fcs_output_type_0 = OUTPUT_TYPE_DATA;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_TERM_0;
|
||||
ifg_offset = 8'd8;
|
||||
end
|
||||
3'd3: begin
|
||||
fcs_output_data_0 = {~crc_next4[23:0], s_tdata_reg[39:0]};
|
||||
fcs_output_data_1 = {56'd0, ~crc_next4[31:24]};
|
||||
fcs_output_data_0 = {~crc_next[4][23:0], s_tdata_reg[39:0]};
|
||||
fcs_output_data_1 = {56'd0, ~crc_next[4][31:24]};
|
||||
fcs_output_type_0 = OUTPUT_TYPE_DATA;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_TERM_1;
|
||||
ifg_offset = 8'd7;
|
||||
end
|
||||
3'd2: begin
|
||||
fcs_output_data_0 = {~crc_next5[15:0], s_tdata_reg[47:0]};
|
||||
fcs_output_data_1 = {48'd0, ~crc_next5[31:16]};
|
||||
fcs_output_data_0 = {~crc_next[5][15:0], s_tdata_reg[47:0]};
|
||||
fcs_output_data_1 = {48'd0, ~crc_next[5][31:16]};
|
||||
fcs_output_type_0 = OUTPUT_TYPE_DATA;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_TERM_2;
|
||||
ifg_offset = 8'd6;
|
||||
end
|
||||
3'd1: begin
|
||||
fcs_output_data_0 = {~crc_next6[7:0], s_tdata_reg[55:0]};
|
||||
fcs_output_data_1 = {40'd0, ~crc_next6[31:8]};
|
||||
fcs_output_data_0 = {~crc_next[6][7:0], s_tdata_reg[55:0]};
|
||||
fcs_output_data_1 = {40'd0, ~crc_next[6][31:8]};
|
||||
fcs_output_type_0 = OUTPUT_TYPE_DATA;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_TERM_3;
|
||||
ifg_offset = 8'd5;
|
||||
end
|
||||
3'd0: begin
|
||||
fcs_output_data_0 = s_tdata_reg;
|
||||
fcs_output_data_1 = {32'd0, ~crc_next7[31:0]};
|
||||
fcs_output_data_1 = {32'd0, ~crc_next[7][31:0]};
|
||||
fcs_output_type_0 = OUTPUT_TYPE_DATA;
|
||||
fcs_output_type_1 = OUTPUT_TYPE_TERM_4;
|
||||
ifg_offset = 8'd4;
|
||||
@ -872,7 +760,7 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
crc_state <= crc_next[7];
|
||||
end
|
||||
|
||||
if (rst) begin
|
||||
|
@ -128,15 +128,12 @@ reg error_bad_fcs_reg = 1'b0, error_bad_fcs_next;
|
||||
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next[3:0];
|
||||
|
||||
wire crc_valid0 = crc_next0 == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next1 == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next2 == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next3 == ~32'h2144df1c;
|
||||
wire crc_valid0 = crc_next[0] == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next[1] == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next[2] == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next[3] == ~32'h2144df1c;
|
||||
|
||||
reg crc_valid0_save = 1'b0;
|
||||
reg crc_valid1_save = 1'b0;
|
||||
@ -155,69 +152,28 @@ assign error_bad_fcs = error_bad_fcs_reg;
|
||||
|
||||
wire last_cycle = state_reg == STATE_LAST;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(xgmii_rxd_d0[7:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(xgmii_rxd_d0[15:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 4; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(xgmii_rxd_d0[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(xgmii_rxd_d0[23:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(xgmii_rxd_d0[31:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
// detect control characters
|
||||
reg [3:0] detect_term = 4'd0;
|
||||
@ -400,7 +356,7 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next3;
|
||||
crc_state <= crc_next[3];
|
||||
end
|
||||
|
||||
crc_valid0_save <= crc_valid0;
|
||||
|
@ -136,17 +136,13 @@ reg [PTP_TS_WIDTH-1:0] ptp_ts_reg = 0;
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
reg [31:0] crc_state3 = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next7;
|
||||
wire [31:0] crc_next[7:0];
|
||||
|
||||
wire crc_valid0 = crc_next0 == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next1 == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next2 == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next3 == ~32'h2144df1c;
|
||||
wire crc_valid7 = crc_next7 == ~32'h2144df1c;
|
||||
wire crc_valid0 = crc_next[0] == ~32'h2144df1c;
|
||||
wire crc_valid1 = crc_next[1] == ~32'h2144df1c;
|
||||
wire crc_valid2 = crc_next[2] == ~32'h2144df1c;
|
||||
wire crc_valid3 = crc_next[3] == ~32'h2144df1c;
|
||||
wire crc_valid7 = crc_next[7] == ~32'h2144df1c;
|
||||
|
||||
reg crc_valid7_save = 1'b0;
|
||||
|
||||
@ -160,69 +156,28 @@ assign start_packet = start_packet_reg;
|
||||
assign error_bad_frame = error_bad_frame_reg;
|
||||
assign error_bad_fcs = error_bad_fcs_reg;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(xgmii_rxd_crc[7:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(xgmii_rxd_crc[15:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 4; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(xgmii_rxd_crc[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(xgmii_rxd_crc[23:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(xgmii_rxd_crc[31:0]),
|
||||
.state_in(crc_state3),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
@ -234,10 +189,10 @@ lfsr #(
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_64 (
|
||||
.data_in(xgmii_rxd_crc[63:0]),
|
||||
.data_in(xgmii_rxd_crc),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next7)
|
||||
.state_out(crc_next[7])
|
||||
);
|
||||
|
||||
// detect control characters
|
||||
@ -515,13 +470,13 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
crc_state <= crc_next[7];
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
crc_state3 <= crc_next[3];
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
crc_state3 <= crc_next[7];
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
@ -158,10 +158,7 @@ reg m_axis_ptp_ts_valid_reg = 1'b0, m_axis_ptp_ts_valid_next;
|
||||
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next[3:0];
|
||||
|
||||
reg [DATA_WIDTH-1:0] xgmii_txd_reg = {CTRL_WIDTH{XGMII_IDLE}}, xgmii_txd_next;
|
||||
reg [CTRL_WIDTH-1:0] xgmii_txc_reg = {CTRL_WIDTH{1'b1}}, xgmii_txc_next;
|
||||
@ -181,69 +178,28 @@ assign m_axis_ptp_ts_valid = PTP_TS_ENABLE || PTP_TAG_ENABLE ? m_axis_ptp_ts_val
|
||||
assign start_packet = start_packet_reg;
|
||||
assign error_underflow = error_underflow_reg;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(s_tdata_reg[7:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(s_tdata_reg[15:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 4; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(s_tdata_reg[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(s_tdata_reg[23:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(s_tdata_reg[31:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
function [2:0] keep2count;
|
||||
input [3:0] k;
|
||||
@ -280,24 +236,24 @@ end
|
||||
always @* begin
|
||||
casez (s_empty_reg)
|
||||
2'd3: begin
|
||||
fcs_output_txd_0 = {~crc_next0[23:0], s_tdata_reg[7:0]};
|
||||
fcs_output_txd_1 = {{2{XGMII_IDLE}}, XGMII_TERM, ~crc_next0[31:24]};
|
||||
fcs_output_txd_0 = {~crc_next[0][23:0], s_tdata_reg[7:0]};
|
||||
fcs_output_txd_1 = {{2{XGMII_IDLE}}, XGMII_TERM, ~crc_next[0][31:24]};
|
||||
fcs_output_txc_0 = 4'b0000;
|
||||
fcs_output_txc_1 = 4'b1110;
|
||||
ifg_offset = 8'd3;
|
||||
extra_cycle = 1'b0;
|
||||
end
|
||||
2'd2: begin
|
||||
fcs_output_txd_0 = {~crc_next1[15:0], s_tdata_reg[15:0]};
|
||||
fcs_output_txd_1 = {XGMII_IDLE, XGMII_TERM, ~crc_next1[31:16]};
|
||||
fcs_output_txd_0 = {~crc_next[1][15:0], s_tdata_reg[15:0]};
|
||||
fcs_output_txd_1 = {XGMII_IDLE, XGMII_TERM, ~crc_next[1][31:16]};
|
||||
fcs_output_txc_0 = 4'b0000;
|
||||
fcs_output_txc_1 = 4'b1100;
|
||||
ifg_offset = 8'd2;
|
||||
extra_cycle = 1'b0;
|
||||
end
|
||||
2'd1: begin
|
||||
fcs_output_txd_0 = {~crc_next2[7:0], s_tdata_reg[23:0]};
|
||||
fcs_output_txd_1 = {XGMII_TERM, ~crc_next2[31:8]};
|
||||
fcs_output_txd_0 = {~crc_next[2][7:0], s_tdata_reg[23:0]};
|
||||
fcs_output_txd_1 = {XGMII_TERM, ~crc_next[2][31:8]};
|
||||
fcs_output_txc_0 = 4'b0000;
|
||||
fcs_output_txc_1 = 4'b1000;
|
||||
ifg_offset = 8'd1;
|
||||
@ -305,7 +261,7 @@ always @* begin
|
||||
end
|
||||
2'd0: begin
|
||||
fcs_output_txd_0 = s_tdata_reg;
|
||||
fcs_output_txd_1 = ~crc_next3;
|
||||
fcs_output_txd_1 = ~crc_next[3];
|
||||
fcs_output_txc_0 = 4'b0000;
|
||||
fcs_output_txc_1 = 4'b0000;
|
||||
ifg_offset = 8'd4;
|
||||
@ -593,7 +549,7 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next3;
|
||||
crc_state <= crc_next[3];
|
||||
end
|
||||
|
||||
xgmii_txd_reg <= xgmii_txd_next;
|
||||
|
@ -164,14 +164,7 @@ reg m_axis_ptp_ts_valid_int_reg = 1'b0, m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
reg [31:0] crc_state = 32'hFFFFFFFF;
|
||||
|
||||
wire [31:0] crc_next0;
|
||||
wire [31:0] crc_next1;
|
||||
wire [31:0] crc_next2;
|
||||
wire [31:0] crc_next3;
|
||||
wire [31:0] crc_next4;
|
||||
wire [31:0] crc_next5;
|
||||
wire [31:0] crc_next6;
|
||||
wire [31:0] crc_next7;
|
||||
wire [31:0] crc_next[7:0];
|
||||
|
||||
reg [DATA_WIDTH-1:0] xgmii_txd_reg = {CTRL_WIDTH{XGMII_IDLE}}, xgmii_txd_next;
|
||||
reg [CTRL_WIDTH-1:0] xgmii_txc_reg = {CTRL_WIDTH{1'b1}}, xgmii_txc_next;
|
||||
@ -191,133 +184,28 @@ assign m_axis_ptp_ts_valid = PTP_TS_ENABLE || PTP_TAG_ENABLE ? m_axis_ptp_ts_val
|
||||
assign start_packet = start_packet_reg;
|
||||
assign error_underflow = error_underflow_reg;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_8 (
|
||||
.data_in(s_tdata_reg[7:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next0)
|
||||
);
|
||||
generate
|
||||
genvar n;
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(16),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_16 (
|
||||
.data_in(s_tdata_reg[15:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next1)
|
||||
);
|
||||
for (n = 0; n < 8; n = n + 1) begin : crc
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(8*(n+1)),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc (
|
||||
.data_in(s_tdata_reg[0 +: 8*(n+1)]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next[n])
|
||||
);
|
||||
end
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(24),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_24 (
|
||||
.data_in(s_tdata_reg[23:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next2)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(32),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_32 (
|
||||
.data_in(s_tdata_reg[31:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next3)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(40),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_40 (
|
||||
.data_in(s_tdata_reg[39:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next4)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(48),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_48 (
|
||||
.data_in(s_tdata_reg[47:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next5)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(56),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_56 (
|
||||
.data_in(s_tdata_reg[55:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next6)
|
||||
);
|
||||
|
||||
lfsr #(
|
||||
.LFSR_WIDTH(32),
|
||||
.LFSR_POLY(32'h4c11db7),
|
||||
.LFSR_CONFIG("GALOIS"),
|
||||
.LFSR_FEED_FORWARD(0),
|
||||
.REVERSE(1),
|
||||
.DATA_WIDTH(64),
|
||||
.STYLE("AUTO")
|
||||
)
|
||||
eth_crc_64 (
|
||||
.data_in(s_tdata_reg[63:0]),
|
||||
.state_in(crc_state),
|
||||
.data_out(),
|
||||
.state_out(crc_next7)
|
||||
);
|
||||
endgenerate
|
||||
|
||||
function [3:0] keep2count;
|
||||
input [7:0] k;
|
||||
@ -362,57 +250,57 @@ end
|
||||
always @* begin
|
||||
casez (s_empty_reg)
|
||||
3'd7: begin
|
||||
fcs_output_txd_0 = {{2{XGMII_IDLE}}, XGMII_TERM, ~crc_next0[31:0], s_tdata_reg[7:0]};
|
||||
fcs_output_txd_0 = {{2{XGMII_IDLE}}, XGMII_TERM, ~crc_next[0][31:0], s_tdata_reg[7:0]};
|
||||
fcs_output_txd_1 = {8{XGMII_IDLE}};
|
||||
fcs_output_txc_0 = 8'b11100000;
|
||||
fcs_output_txc_1 = 8'b11111111;
|
||||
ifg_offset = 8'd3;
|
||||
end
|
||||
3'd6: begin
|
||||
fcs_output_txd_0 = {XGMII_IDLE, XGMII_TERM, ~crc_next1[31:0], s_tdata_reg[15:0]};
|
||||
fcs_output_txd_0 = {XGMII_IDLE, XGMII_TERM, ~crc_next[1][31:0], s_tdata_reg[15:0]};
|
||||
fcs_output_txd_1 = {8{XGMII_IDLE}};
|
||||
fcs_output_txc_0 = 8'b11000000;
|
||||
fcs_output_txc_1 = 8'b11111111;
|
||||
ifg_offset = 8'd2;
|
||||
end
|
||||
3'd5: begin
|
||||
fcs_output_txd_0 = {XGMII_TERM, ~crc_next2[31:0], s_tdata_reg[23:0]};
|
||||
fcs_output_txd_0 = {XGMII_TERM, ~crc_next[2][31:0], s_tdata_reg[23:0]};
|
||||
fcs_output_txd_1 = {8{XGMII_IDLE}};
|
||||
fcs_output_txc_0 = 8'b10000000;
|
||||
fcs_output_txc_1 = 8'b11111111;
|
||||
ifg_offset = 8'd1;
|
||||
end
|
||||
3'd4: begin
|
||||
fcs_output_txd_0 = {~crc_next3[31:0], s_tdata_reg[31:0]};
|
||||
fcs_output_txd_0 = {~crc_next[3][31:0], s_tdata_reg[31:0]};
|
||||
fcs_output_txd_1 = {{7{XGMII_IDLE}}, XGMII_TERM};
|
||||
fcs_output_txc_0 = 8'b00000000;
|
||||
fcs_output_txc_1 = 8'b11111111;
|
||||
ifg_offset = 8'd8;
|
||||
end
|
||||
3'd3: begin
|
||||
fcs_output_txd_0 = {~crc_next4[23:0], s_tdata_reg[39:0]};
|
||||
fcs_output_txd_1 = {{6{XGMII_IDLE}}, XGMII_TERM, ~crc_next4[31:24]};
|
||||
fcs_output_txd_0 = {~crc_next[4][23:0], s_tdata_reg[39:0]};
|
||||
fcs_output_txd_1 = {{6{XGMII_IDLE}}, XGMII_TERM, ~crc_next[4][31:24]};
|
||||
fcs_output_txc_0 = 8'b00000000;
|
||||
fcs_output_txc_1 = 8'b11111110;
|
||||
ifg_offset = 8'd7;
|
||||
end
|
||||
3'd2: begin
|
||||
fcs_output_txd_0 = {~crc_next5[15:0], s_tdata_reg[47:0]};
|
||||
fcs_output_txd_1 = {{5{XGMII_IDLE}}, XGMII_TERM, ~crc_next5[31:16]};
|
||||
fcs_output_txd_0 = {~crc_next[5][15:0], s_tdata_reg[47:0]};
|
||||
fcs_output_txd_1 = {{5{XGMII_IDLE}}, XGMII_TERM, ~crc_next[5][31:16]};
|
||||
fcs_output_txc_0 = 8'b00000000;
|
||||
fcs_output_txc_1 = 8'b11111100;
|
||||
ifg_offset = 8'd6;
|
||||
end
|
||||
3'd1: begin
|
||||
fcs_output_txd_0 = {~crc_next6[7:0], s_tdata_reg[55:0]};
|
||||
fcs_output_txd_1 = {{4{XGMII_IDLE}}, XGMII_TERM, ~crc_next6[31:8]};
|
||||
fcs_output_txd_0 = {~crc_next[6][7:0], s_tdata_reg[55:0]};
|
||||
fcs_output_txd_1 = {{4{XGMII_IDLE}}, XGMII_TERM, ~crc_next[6][31:8]};
|
||||
fcs_output_txc_0 = 8'b00000000;
|
||||
fcs_output_txc_1 = 8'b11111000;
|
||||
ifg_offset = 8'd5;
|
||||
end
|
||||
3'd0: begin
|
||||
fcs_output_txd_0 = s_tdata_reg;
|
||||
fcs_output_txd_1 = {{3{XGMII_IDLE}}, XGMII_TERM, ~crc_next7[31:0]};
|
||||
fcs_output_txd_1 = {{3{XGMII_IDLE}}, XGMII_TERM, ~crc_next[7][31:0]};
|
||||
fcs_output_txc_0 = 8'b00000000;
|
||||
fcs_output_txc_1 = 8'b11110000;
|
||||
ifg_offset = 8'd4;
|
||||
@ -730,7 +618,7 @@ always @(posedge clk) begin
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
crc_state <= crc_next[7];
|
||||
end
|
||||
|
||||
swap_txd <= xgmii_txd_next[63:32];
|
||||
|
Loading…
x
Reference in New Issue
Block a user