mirror of
https://github.com/corundum/corundum.git
synced 2025-01-16 08:12:53 +08:00
Rewrite resets
This commit is contained in:
parent
a540e50e1c
commit
5494f3b678
@ -406,6 +406,179 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
start_packet_reg <= 2'b00;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
rx_bad_block_reg <= 1'b0;
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
swap_data <= encoded_rx_data[63:32];
|
||||
end else begin
|
||||
swap_data <= {8'd0, encoded_rx_data[63:40]};
|
||||
end
|
||||
|
||||
if (PTP_TS_WIDTH == 96 && $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000) > 0) begin
|
||||
// ns field rollover
|
||||
ptp_ts_reg[45:16] <= $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
ptp_ts_reg[95:48] <= ptp_ts_reg[95:48] + 1;
|
||||
end
|
||||
|
||||
if (encoded_rx_hdr == SYNC_CTRL && encoded_rx_data[7:0] == BLOCK_TYPE_START_0) begin
|
||||
lanes_swapped <= 1'b0;
|
||||
start_packet_reg <= 2'b01;
|
||||
input_type_d0 <= INPUT_TYPE_START_0;
|
||||
input_data_d0 <= encoded_rx_data;
|
||||
input_data_crc <= encoded_rx_data;
|
||||
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
end
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL && (encoded_rx_data[7:0] == BLOCK_TYPE_START_4 || encoded_rx_data[7:0] == BLOCK_TYPE_OS_START)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
start_packet_reg <= 2'b10;
|
||||
delay_type_valid <= 1'b1;
|
||||
|
||||
if (delay_type_valid) begin
|
||||
input_type_d0 <= delay_type;
|
||||
end else begin
|
||||
input_type_d0 <= INPUT_TYPE_IDLE;
|
||||
end
|
||||
input_data_d0 <= {encoded_rx_data[31:0], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[31:0], swap_data};
|
||||
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
end
|
||||
end else if (lanes_swapped) begin
|
||||
if (delay_type_valid) begin
|
||||
input_type_d0 <= delay_type;
|
||||
end else if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_TERM_0: input_type_d0 <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_1: input_type_d0 <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_2: input_type_d0 <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_3: input_type_d0 <= INPUT_TYPE_TERM_7;
|
||||
BLOCK_TYPE_TERM_4: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_5: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_6: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_7: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
default: begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
endcase
|
||||
end else begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_data_d0 <= {encoded_rx_data[31:0], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[31:0], swap_data};
|
||||
end else begin
|
||||
input_data_d0 <= {encoded_rx_data[39:8], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[39:8], swap_data};
|
||||
end
|
||||
end else begin
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_TERM_0: input_type_d0 <= INPUT_TYPE_TERM_0;
|
||||
BLOCK_TYPE_TERM_1: input_type_d0 <= INPUT_TYPE_TERM_1;
|
||||
BLOCK_TYPE_TERM_2: input_type_d0 <= INPUT_TYPE_TERM_2;
|
||||
BLOCK_TYPE_TERM_3: input_type_d0 <= INPUT_TYPE_TERM_3;
|
||||
BLOCK_TYPE_TERM_4: input_type_d0 <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_5: input_type_d0 <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_6: input_type_d0 <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_7: input_type_d0 <= INPUT_TYPE_TERM_7;
|
||||
default: begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
endcase
|
||||
end else begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_data_d0 <= encoded_rx_data;
|
||||
input_data_crc <= encoded_rx_data;
|
||||
end else begin
|
||||
input_data_d0 <= {8'd0, encoded_rx_data[63:8]};
|
||||
input_data_crc <= {8'd0, encoded_rx_data[63:8]};
|
||||
end
|
||||
end
|
||||
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
delay_type <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_START_4: delay_type <= INPUT_TYPE_START_0;
|
||||
BLOCK_TYPE_TERM_0: delay_type <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_1: delay_type <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_2: delay_type <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_3: delay_type <= INPUT_TYPE_TERM_7;
|
||||
BLOCK_TYPE_TERM_4: delay_type <= INPUT_TYPE_TERM_0;
|
||||
BLOCK_TYPE_TERM_5: delay_type <= INPUT_TYPE_TERM_1;
|
||||
BLOCK_TYPE_TERM_6: delay_type <= INPUT_TYPE_TERM_2;
|
||||
BLOCK_TYPE_TERM_7: delay_type <= INPUT_TYPE_TERM_3;
|
||||
default: delay_type <= INPUT_TYPE_ERROR;
|
||||
endcase
|
||||
end else begin
|
||||
delay_type <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
|
||||
input_type_d1 <= input_type_d0;
|
||||
input_data_d1 <= input_data_d0;
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
||||
if (state_next == STATE_LAST) begin
|
||||
input_data_crc[31:0] <= input_data_crc[63:32];
|
||||
end
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -426,189 +599,6 @@ always @(posedge clk) begin
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
delay_type <= INPUT_TYPE_IDLE;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
|
||||
start_packet_reg <= 2'b00;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
rx_bad_block_reg <= 1'b0;
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
|
||||
if (encoded_rx_hdr == SYNC_CTRL && encoded_rx_data[7:0] == BLOCK_TYPE_START_0) begin
|
||||
lanes_swapped <= 1'b0;
|
||||
start_packet_reg <= 2'b01;
|
||||
input_type_d0 <= INPUT_TYPE_START_0;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL && (encoded_rx_data[7:0] == BLOCK_TYPE_START_4 || encoded_rx_data[7:0] == BLOCK_TYPE_OS_START)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
start_packet_reg <= 2'b10;
|
||||
delay_type_valid <= 1'b1;
|
||||
if (delay_type_valid) begin
|
||||
input_type_d0 <= delay_type;
|
||||
end else begin
|
||||
input_type_d0 <= INPUT_TYPE_IDLE;
|
||||
end
|
||||
end else if (lanes_swapped) begin
|
||||
if (delay_type_valid) begin
|
||||
input_type_d0 <= delay_type;
|
||||
end else if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_TERM_0: input_type_d0 <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_1: input_type_d0 <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_2: input_type_d0 <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_3: input_type_d0 <= INPUT_TYPE_TERM_7;
|
||||
BLOCK_TYPE_TERM_4: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_5: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_6: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
BLOCK_TYPE_TERM_7: begin
|
||||
delay_type_valid <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end
|
||||
default: begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
endcase
|
||||
end else begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
end else begin
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_type_d0 <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_TERM_0: input_type_d0 <= INPUT_TYPE_TERM_0;
|
||||
BLOCK_TYPE_TERM_1: input_type_d0 <= INPUT_TYPE_TERM_1;
|
||||
BLOCK_TYPE_TERM_2: input_type_d0 <= INPUT_TYPE_TERM_2;
|
||||
BLOCK_TYPE_TERM_3: input_type_d0 <= INPUT_TYPE_TERM_3;
|
||||
BLOCK_TYPE_TERM_4: input_type_d0 <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_5: input_type_d0 <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_6: input_type_d0 <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_7: input_type_d0 <= INPUT_TYPE_TERM_7;
|
||||
default: begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
endcase
|
||||
end else begin
|
||||
rx_bad_block_reg <= 1'b1;
|
||||
input_type_d0 <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
end
|
||||
|
||||
input_type_d1 <= input_type_d0;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
end
|
||||
end
|
||||
|
||||
if (PTP_TS_WIDTH == 96 && $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000) > 0) begin
|
||||
// ns field rollover
|
||||
ptp_ts_reg[45:16] <= $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
ptp_ts_reg[95:48] <= ptp_ts_reg[95:48] + 1;
|
||||
end
|
||||
|
||||
if (encoded_rx_hdr == SYNC_CTRL && encoded_rx_data[7:0] == BLOCK_TYPE_START_0) begin
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
end
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL && (encoded_rx_data[7:0] == BLOCK_TYPE_START_4 || encoded_rx_data[7:0] == BLOCK_TYPE_OS_START)) begin
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
end
|
||||
end
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
swap_data <= encoded_rx_data[63:32];
|
||||
end else begin
|
||||
swap_data <= {8'd0, encoded_rx_data[63:40]};
|
||||
end
|
||||
|
||||
if (encoded_rx_hdr == SYNC_CTRL && encoded_rx_data[7:0] == BLOCK_TYPE_START_0) begin
|
||||
input_data_d0 <= encoded_rx_data;
|
||||
input_data_crc <= encoded_rx_data;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL && (encoded_rx_data[7:0] == BLOCK_TYPE_START_4 || encoded_rx_data[7:0] == BLOCK_TYPE_OS_START)) begin
|
||||
input_data_d0 <= {encoded_rx_data[31:0], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[31:0], swap_data};
|
||||
end else if (lanes_swapped) begin
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_data_d0 <= {encoded_rx_data[31:0], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[31:0], swap_data};
|
||||
end else begin
|
||||
input_data_d0 <= {encoded_rx_data[39:8], swap_data};
|
||||
input_data_crc <= {encoded_rx_data[39:8], swap_data};
|
||||
end
|
||||
end else begin
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
input_data_d0 <= encoded_rx_data;
|
||||
input_data_crc <= encoded_rx_data;
|
||||
end else begin
|
||||
input_data_d0 <= {8'd0, encoded_rx_data[63:8]};
|
||||
input_data_crc <= {8'd0, encoded_rx_data[63:8]};
|
||||
end
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
||||
if (state_next == STATE_LAST) begin
|
||||
input_data_crc[31:0] <= input_data_crc[63:32];
|
||||
end
|
||||
|
||||
input_data_d1 <= input_data_d0;
|
||||
|
||||
if (encoded_rx_hdr == SYNC_DATA) begin
|
||||
delay_type <= INPUT_TYPE_DATA;
|
||||
end else if (encoded_rx_hdr == SYNC_CTRL) begin
|
||||
case (encoded_rx_data[7:0])
|
||||
BLOCK_TYPE_START_4: delay_type <= INPUT_TYPE_START_0;
|
||||
BLOCK_TYPE_TERM_0: delay_type <= INPUT_TYPE_TERM_4;
|
||||
BLOCK_TYPE_TERM_1: delay_type <= INPUT_TYPE_TERM_5;
|
||||
BLOCK_TYPE_TERM_2: delay_type <= INPUT_TYPE_TERM_6;
|
||||
BLOCK_TYPE_TERM_3: delay_type <= INPUT_TYPE_TERM_7;
|
||||
BLOCK_TYPE_TERM_4: delay_type <= INPUT_TYPE_TERM_0;
|
||||
BLOCK_TYPE_TERM_5: delay_type <= INPUT_TYPE_TERM_1;
|
||||
BLOCK_TYPE_TERM_6: delay_type <= INPUT_TYPE_TERM_2;
|
||||
BLOCK_TYPE_TERM_7: delay_type <= INPUT_TYPE_TERM_3;
|
||||
default: delay_type <= INPUT_TYPE_ERROR;
|
||||
endcase
|
||||
end else begin
|
||||
delay_type <= INPUT_TYPE_ERROR;
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -765,6 +765,120 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
m_axis_ptp_ts_valid_int_reg <= m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
delay_type <= output_type_next ^ 4'd4;
|
||||
|
||||
swap_data <= output_data_next[63:32];
|
||||
|
||||
if (swap_lanes || (lanes_swapped && !unswap_lanes)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
output_data_reg <= {output_data_next[31:0], swap_data};
|
||||
if (delay_type_valid) begin
|
||||
output_type_reg <= delay_type;
|
||||
end else if (output_type_next == OUTPUT_TYPE_START_0) begin
|
||||
output_type_reg <= OUTPUT_TYPE_START_4;
|
||||
end else if (output_type_next[3]) begin
|
||||
// OUTPUT_TYPE_TERM_*
|
||||
if (output_type_next[2]) begin
|
||||
delay_type_valid <= 1'b1;
|
||||
output_type_reg <= OUTPUT_TYPE_DATA;
|
||||
end else begin
|
||||
output_type_reg <= output_type_next ^ 4'd4;
|
||||
end
|
||||
end else begin
|
||||
output_type_reg <= output_type_next;
|
||||
end
|
||||
end else begin
|
||||
lanes_swapped <= 1'b0;
|
||||
output_data_reg <= output_data_next;
|
||||
output_type_reg <= output_type_next;
|
||||
end
|
||||
|
||||
case (output_type_reg)
|
||||
OUTPUT_TYPE_IDLE: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_IDLE}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_ERROR: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_ERROR}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_START_0: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[63:8], BLOCK_TYPE_START_0};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_START_4: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[63:40], 4'd0, {4{CTRL_IDLE}}, BLOCK_TYPE_START_4};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_DATA: begin
|
||||
encoded_tx_data_reg <= output_data_reg;
|
||||
encoded_tx_hdr_reg <= SYNC_DATA;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_0: begin
|
||||
encoded_tx_data_reg <= {{7{CTRL_IDLE}}, 7'd0, BLOCK_TYPE_TERM_0};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_1: begin
|
||||
encoded_tx_data_reg <= {{6{CTRL_IDLE}}, 6'd0, output_data_reg[7:0], BLOCK_TYPE_TERM_1};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_2: begin
|
||||
encoded_tx_data_reg <= {{5{CTRL_IDLE}}, 5'd0, output_data_reg[15:0], BLOCK_TYPE_TERM_2};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_3: begin
|
||||
encoded_tx_data_reg <= {{4{CTRL_IDLE}}, 4'd0, output_data_reg[23:0], BLOCK_TYPE_TERM_3};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_4: begin
|
||||
encoded_tx_data_reg <= {{3{CTRL_IDLE}}, 3'd0, output_data_reg[31:0], BLOCK_TYPE_TERM_4};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_5: begin
|
||||
encoded_tx_data_reg <= {{2{CTRL_IDLE}}, 2'd0, output_data_reg[39:0], BLOCK_TYPE_TERM_5};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_6: begin
|
||||
encoded_tx_data_reg <= {{1{CTRL_IDLE}}, 1'd0, output_data_reg[47:0], BLOCK_TYPE_TERM_6};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_7: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[55:0], BLOCK_TYPE_TERM_7};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
default: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_ERROR}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
endcase
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -793,124 +907,7 @@ always @(posedge clk) begin
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
delay_type <= OUTPUT_TYPE_IDLE;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
m_axis_ptp_ts_valid_int_reg <= m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
delay_type_valid <= 1'b0;
|
||||
|
||||
if (swap_lanes || (lanes_swapped && !unswap_lanes)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
output_data_reg <= {output_data_next[31:0], swap_data};
|
||||
if (delay_type_valid) begin
|
||||
output_type_reg <= delay_type;
|
||||
end else if (output_type_next == OUTPUT_TYPE_START_0) begin
|
||||
output_type_reg <= OUTPUT_TYPE_START_4;
|
||||
end else if (output_type_next[3]) begin
|
||||
// OUTPUT_TYPE_TERM_*
|
||||
if (output_type_next[2]) begin
|
||||
delay_type_valid <= 1'b1;
|
||||
output_type_reg <= OUTPUT_TYPE_DATA;
|
||||
end else begin
|
||||
output_type_reg <= output_type_next ^ 4'd4;
|
||||
end
|
||||
end else begin
|
||||
output_type_reg <= output_type_next;
|
||||
end
|
||||
end else begin
|
||||
lanes_swapped <= 1'b0;
|
||||
output_data_reg <= output_data_next;
|
||||
output_type_reg <= output_type_next;
|
||||
end
|
||||
|
||||
case (output_type_reg)
|
||||
OUTPUT_TYPE_IDLE: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_IDLE}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_ERROR: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_ERROR}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_START_0: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[63:8], BLOCK_TYPE_START_0};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_START_4: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[63:40], 4'd0, {4{CTRL_IDLE}}, BLOCK_TYPE_START_4};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_DATA: begin
|
||||
encoded_tx_data_reg <= output_data_reg;
|
||||
encoded_tx_hdr_reg <= SYNC_DATA;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_0: begin
|
||||
encoded_tx_data_reg <= {{7{CTRL_IDLE}}, 7'd0, BLOCK_TYPE_TERM_0};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_1: begin
|
||||
encoded_tx_data_reg <= {{6{CTRL_IDLE}}, 6'd0, output_data_reg[7:0], BLOCK_TYPE_TERM_1};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_2: begin
|
||||
encoded_tx_data_reg <= {{5{CTRL_IDLE}}, 5'd0, output_data_reg[15:0], BLOCK_TYPE_TERM_2};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_3: begin
|
||||
encoded_tx_data_reg <= {{4{CTRL_IDLE}}, 4'd0, output_data_reg[23:0], BLOCK_TYPE_TERM_3};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_4: begin
|
||||
encoded_tx_data_reg <= {{3{CTRL_IDLE}}, 3'd0, output_data_reg[31:0], BLOCK_TYPE_TERM_4};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_5: begin
|
||||
encoded_tx_data_reg <= {{2{CTRL_IDLE}}, 2'd0, output_data_reg[39:0], BLOCK_TYPE_TERM_5};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_6: begin
|
||||
encoded_tx_data_reg <= {{1{CTRL_IDLE}}, 1'd0, output_data_reg[47:0], BLOCK_TYPE_TERM_6};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
OUTPUT_TYPE_TERM_7: begin
|
||||
encoded_tx_data_reg <= {output_data_reg[55:0], BLOCK_TYPE_TERM_7};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
default: begin
|
||||
encoded_tx_data_reg <= {{8{CTRL_ERROR}}, BLOCK_TYPE_CTRL};
|
||||
encoded_tx_hdr_reg <= SYNC_CTRL;
|
||||
end
|
||||
endcase
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
end
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
|
||||
swap_data <= output_data_next[63:32];
|
||||
|
||||
delay_type <= output_type_next ^ 4'd4;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -242,6 +242,80 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
ptp_ts_reg <= ptp_ts_next;
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
if (clk_enable) begin
|
||||
if (mii_select) begin
|
||||
mii_odd <= !mii_odd;
|
||||
|
||||
if (mii_locked) begin
|
||||
mii_locked <= gmii_rx_dv;
|
||||
end else if (gmii_rx_dv && {gmii_rxd[3:0], gmii_rxd_d0[7:4]} == ETH_SFD) begin
|
||||
mii_locked <= 1'b1;
|
||||
mii_odd <= 1'b1;
|
||||
end
|
||||
|
||||
gmii_rxd_d0 <= {gmii_rxd[3:0], gmii_rxd_d0[7:4]};
|
||||
|
||||
if (mii_odd) begin
|
||||
gmii_rxd_d1 <= gmii_rxd_d0;
|
||||
gmii_rxd_d2 <= gmii_rxd_d1;
|
||||
gmii_rxd_d3 <= gmii_rxd_d2;
|
||||
gmii_rxd_d4 <= gmii_rxd_d3;
|
||||
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv & gmii_rx_dv_d0;
|
||||
gmii_rx_dv_d1 <= gmii_rx_dv_d0 & gmii_rx_dv;
|
||||
gmii_rx_dv_d2 <= gmii_rx_dv_d1 & gmii_rx_dv;
|
||||
gmii_rx_dv_d3 <= gmii_rx_dv_d2 & gmii_rx_dv;
|
||||
gmii_rx_dv_d4 <= gmii_rx_dv_d3 & gmii_rx_dv;
|
||||
|
||||
gmii_rx_er_d0 <= gmii_rx_er | gmii_rx_er_d0;
|
||||
gmii_rx_er_d1 <= gmii_rx_er_d0;
|
||||
gmii_rx_er_d2 <= gmii_rx_er_d1;
|
||||
gmii_rx_er_d3 <= gmii_rx_er_d2;
|
||||
gmii_rx_er_d4 <= gmii_rx_er_d3;
|
||||
end else begin
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv;
|
||||
gmii_rx_er_d0 <= gmii_rx_er;
|
||||
end
|
||||
end else begin
|
||||
gmii_rxd_d0 <= gmii_rxd;
|
||||
gmii_rxd_d1 <= gmii_rxd_d0;
|
||||
gmii_rxd_d2 <= gmii_rxd_d1;
|
||||
gmii_rxd_d3 <= gmii_rxd_d2;
|
||||
gmii_rxd_d4 <= gmii_rxd_d3;
|
||||
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv;
|
||||
gmii_rx_dv_d1 <= gmii_rx_dv_d0 & gmii_rx_dv;
|
||||
gmii_rx_dv_d2 <= gmii_rx_dv_d1 & gmii_rx_dv;
|
||||
gmii_rx_dv_d3 <= gmii_rx_dv_d2 & gmii_rx_dv;
|
||||
gmii_rx_dv_d4 <= gmii_rx_dv_d3 & gmii_rx_dv;
|
||||
|
||||
gmii_rx_er_d0 <= gmii_rx_er;
|
||||
gmii_rx_er_d1 <= gmii_rx_er_d0;
|
||||
gmii_rx_er_d2 <= gmii_rx_er_d1;
|
||||
gmii_rx_er_d3 <= gmii_rx_er_d2;
|
||||
gmii_rx_er_d4 <= gmii_rx_er_d3;
|
||||
end
|
||||
end
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next;
|
||||
end
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -261,90 +335,6 @@ always @(posedge clk) begin
|
||||
gmii_rx_dv_d2 <= 1'b0;
|
||||
gmii_rx_dv_d3 <= 1'b0;
|
||||
gmii_rx_dv_d4 <= 1'b0;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next;
|
||||
end
|
||||
|
||||
if (clk_enable) begin
|
||||
if (mii_select) begin
|
||||
mii_odd <= !mii_odd;
|
||||
|
||||
if (mii_locked) begin
|
||||
mii_locked <= gmii_rx_dv;
|
||||
end else if (gmii_rx_dv && {gmii_rxd[3:0], gmii_rxd_d0[7:4]} == ETH_SFD) begin
|
||||
mii_locked <= 1'b1;
|
||||
mii_odd <= 1'b1;
|
||||
end
|
||||
|
||||
if (mii_odd) begin
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv & gmii_rx_dv_d0;
|
||||
gmii_rx_dv_d1 <= gmii_rx_dv_d0 & gmii_rx_dv;
|
||||
gmii_rx_dv_d2 <= gmii_rx_dv_d1 & gmii_rx_dv;
|
||||
gmii_rx_dv_d3 <= gmii_rx_dv_d2 & gmii_rx_dv;
|
||||
gmii_rx_dv_d4 <= gmii_rx_dv_d3 & gmii_rx_dv;
|
||||
end else begin
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv;
|
||||
end
|
||||
end else begin
|
||||
gmii_rx_dv_d0 <= gmii_rx_dv;
|
||||
gmii_rx_dv_d1 <= gmii_rx_dv_d0 & gmii_rx_dv;
|
||||
gmii_rx_dv_d2 <= gmii_rx_dv_d1 & gmii_rx_dv;
|
||||
gmii_rx_dv_d3 <= gmii_rx_dv_d2 & gmii_rx_dv;
|
||||
gmii_rx_dv_d4 <= gmii_rx_dv_d3 & gmii_rx_dv;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ptp_ts_reg <= ptp_ts_next;
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
// delay input
|
||||
if (clk_enable) begin
|
||||
if (mii_select) begin
|
||||
gmii_rxd_d0 <= {gmii_rxd[3:0], gmii_rxd_d0[7:4]};
|
||||
|
||||
if (mii_odd) begin
|
||||
gmii_rxd_d1 <= gmii_rxd_d0;
|
||||
gmii_rxd_d2 <= gmii_rxd_d1;
|
||||
gmii_rxd_d3 <= gmii_rxd_d2;
|
||||
gmii_rxd_d4 <= gmii_rxd_d3;
|
||||
|
||||
gmii_rx_er_d0 <= gmii_rx_er | gmii_rx_er_d0;
|
||||
gmii_rx_er_d1 <= gmii_rx_er_d0;
|
||||
gmii_rx_er_d2 <= gmii_rx_er_d1;
|
||||
gmii_rx_er_d3 <= gmii_rx_er_d2;
|
||||
gmii_rx_er_d4 <= gmii_rx_er_d3;
|
||||
end else begin
|
||||
gmii_rx_er_d0 <= gmii_rx_er;
|
||||
end
|
||||
end else begin
|
||||
gmii_rxd_d0 <= gmii_rxd;
|
||||
gmii_rxd_d1 <= gmii_rxd_d0;
|
||||
gmii_rxd_d2 <= gmii_rxd_d1;
|
||||
gmii_rxd_d3 <= gmii_rxd_d2;
|
||||
gmii_rxd_d4 <= gmii_rxd_d3;
|
||||
|
||||
gmii_rx_er_d0 <= gmii_rx_er;
|
||||
gmii_rx_er_d1 <= gmii_rx_er_d0;
|
||||
gmii_rx_er_d2 <= gmii_rx_er_d1;
|
||||
gmii_rx_er_d3 <= gmii_rx_er_d2;
|
||||
gmii_rx_er_d4 <= gmii_rx_er_d3;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -395,6 +395,34 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
|
||||
mii_odd_reg <= mii_odd_next;
|
||||
mii_msn_reg <= mii_msn_next;
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
gmii_txd_reg <= gmii_txd_next;
|
||||
gmii_tx_en_reg <= gmii_tx_en_next;
|
||||
gmii_tx_er_reg <= gmii_tx_er_next;
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next;
|
||||
end
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -411,38 +439,7 @@ always @(posedge clk) begin
|
||||
error_underflow_reg <= 1'b0;
|
||||
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
|
||||
gmii_tx_en_reg <= gmii_tx_en_next;
|
||||
gmii_tx_er_reg <= gmii_tx_er_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next;
|
||||
end
|
||||
end
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
|
||||
mii_odd_reg <= mii_odd_next;
|
||||
mii_msn_reg <= mii_msn_next;
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
|
||||
gmii_txd_reg <= gmii_txd_next;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -373,6 +373,46 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
ptp_ts_reg <= ptp_ts_next;
|
||||
|
||||
last_cycle_tkeep_reg <= last_cycle_tkeep_next;
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
|
||||
detect_term_save <= detect_term;
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next3;
|
||||
end
|
||||
|
||||
crc_valid0_save <= crc_valid0;
|
||||
crc_valid1_save <= crc_valid1;
|
||||
crc_valid2_save <= crc_valid2;
|
||||
crc_valid3_save <= crc_valid3;
|
||||
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
xgmii_rxd_d1 <= xgmii_rxd_d0;
|
||||
xgmii_rxc_d1 <= xgmii_rxc_d0;
|
||||
xgmii_rxc_d2 <= xgmii_rxc_d1;
|
||||
xgmii_rxd_d2 <= xgmii_rxd_d1;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -386,50 +426,7 @@ always @(posedge clk) begin
|
||||
|
||||
xgmii_rxc_d0 <= {CTRL_WIDTH{1'b0}};
|
||||
xgmii_rxc_d1 <= {CTRL_WIDTH{1'b0}};
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
xgmii_rxc_d1 <= xgmii_rxc_d0;
|
||||
xgmii_rxc_d2 <= xgmii_rxc_d1;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next3;
|
||||
end
|
||||
end
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
ptp_ts_reg <= ptp_ts_next;
|
||||
|
||||
last_cycle_tkeep_reg <= last_cycle_tkeep_next;
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
|
||||
detect_term_save <= detect_term;
|
||||
|
||||
crc_valid0_save <= crc_valid0;
|
||||
crc_valid1_save <= crc_valid1;
|
||||
crc_valid2_save <= crc_valid2;
|
||||
crc_valid3_save <= crc_valid3;
|
||||
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxd_d1 <= xgmii_rxd_d0;
|
||||
xgmii_rxd_d2 <= xgmii_rxd_d1;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -422,6 +422,106 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
start_packet_reg <= 2'b00;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
last_cycle_tkeep_reg <= last_cycle_tkeep_next;
|
||||
|
||||
detect_term_save <= detect_term;
|
||||
|
||||
swap_rxd <= xgmii_rxd[63:32];
|
||||
swap_rxc <= xgmii_rxc[7:4];
|
||||
|
||||
if (PTP_TS_WIDTH == 96 && $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000) > 0) begin
|
||||
// ns field rollover
|
||||
ptp_ts_reg[45:16] <= $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
ptp_ts_reg[95:48] <= ptp_ts_reg[95:48] + 1;
|
||||
end
|
||||
|
||||
if (xgmii_rxc[0] && xgmii_rxd[7:0] == XGMII_START) begin
|
||||
lanes_swapped <= 1'b0;
|
||||
start_packet_reg <= 2'b01;
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxd_crc <= xgmii_rxd;
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
|
||||
for (i = 0; i < 8; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
end
|
||||
end else if (xgmii_rxc[4] && xgmii_rxd[39:32] == XGMII_START) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
start_packet_reg <= 2'b10;
|
||||
xgmii_rxd_d0 <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxd_crc <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxc_d0 <= {xgmii_rxc[3:0], swap_rxc};
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= swap_rxc[i] && (swap_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
detect_term[i+4] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
end
|
||||
end else if (lanes_swapped) begin
|
||||
xgmii_rxd_d0 <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxd_crc <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxc_d0 <= {xgmii_rxc[3:0], swap_rxc};
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= swap_rxc[i] && (swap_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
detect_term[i+4] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end else begin
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxd_crc <= xgmii_rxd;
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
|
||||
for (i = 0; i < 8; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
||||
if (state_next == STATE_LAST) begin
|
||||
xgmii_rxd_crc[31:0] <= xgmii_rxd_crc[63:32];
|
||||
end
|
||||
|
||||
xgmii_rxd_d1 <= xgmii_rxd_d0;
|
||||
xgmii_rxc_d1 <= xgmii_rxc_d0;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -438,118 +538,7 @@ always @(posedge clk) begin
|
||||
xgmii_rxc_d1 <= {CTRL_WIDTH{1'b0}};
|
||||
|
||||
lanes_swapped <= 1'b0;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
m_axis_tvalid_reg <= m_axis_tvalid_next;
|
||||
|
||||
start_packet_reg <= 2'b00;
|
||||
error_bad_frame_reg <= error_bad_frame_next;
|
||||
error_bad_fcs_reg <= error_bad_fcs_next;
|
||||
|
||||
if (xgmii_rxc[0] && xgmii_rxd[7:0] == XGMII_START) begin
|
||||
lanes_swapped <= 1'b0;
|
||||
start_packet_reg <= 2'b01;
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
end else if (xgmii_rxc[4] && xgmii_rxd[39:32] == XGMII_START) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
start_packet_reg <= 2'b10;
|
||||
xgmii_rxc_d0 <= {xgmii_rxc[3:0], swap_rxc};
|
||||
end else if (lanes_swapped) begin
|
||||
xgmii_rxc_d0 <= {xgmii_rxc[3:0], swap_rxc};
|
||||
end else begin
|
||||
xgmii_rxc_d0 <= xgmii_rxc;
|
||||
end
|
||||
|
||||
xgmii_rxc_d1 <= xgmii_rxc_d0;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
if (update_crc_last) begin
|
||||
crc_state3 <= crc_next3;
|
||||
end else begin
|
||||
crc_state3 <= crc_next7;
|
||||
end
|
||||
end
|
||||
|
||||
if (PTP_TS_WIDTH == 96 && $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000) > 0) begin
|
||||
// ns field rollover
|
||||
ptp_ts_reg[45:16] <= $signed({1'b0, ptp_ts_reg[45:16]}) - $signed(31'd1000000000);
|
||||
ptp_ts_reg[95:48] <= ptp_ts_reg[95:48] + 1;
|
||||
end
|
||||
|
||||
if (xgmii_rxc[0] && xgmii_rxd[7:0] == XGMII_START) begin
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS);
|
||||
end
|
||||
end else if (xgmii_rxc[4] && xgmii_rxd[39:32] == XGMII_START) begin
|
||||
if (PTP_TS_WIDTH == 96) begin
|
||||
ptp_ts_reg[45:0] <= ptp_ts[45:0] + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
ptp_ts_reg[95:48] <= ptp_ts[95:48];
|
||||
end else begin
|
||||
ptp_ts_reg <= ptp_ts + (((PTP_PERIOD_NS * 2**16 + PTP_PERIOD_FNS) * 3) >> 1);
|
||||
end
|
||||
end
|
||||
|
||||
m_axis_tdata_reg <= m_axis_tdata_next;
|
||||
m_axis_tkeep_reg <= m_axis_tkeep_next;
|
||||
m_axis_tlast_reg <= m_axis_tlast_next;
|
||||
m_axis_tuser_reg <= m_axis_tuser_next;
|
||||
|
||||
last_cycle_tkeep_reg <= last_cycle_tkeep_next;
|
||||
|
||||
detect_term_save <= detect_term;
|
||||
|
||||
swap_rxd <= xgmii_rxd[63:32];
|
||||
swap_rxc <= xgmii_rxc[7:4];
|
||||
|
||||
if (xgmii_rxc[0] && xgmii_rxd[7:0] == XGMII_START) begin
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxd_crc <= xgmii_rxd;
|
||||
|
||||
for (i = 0; i < 8; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end else if (xgmii_rxc[4] && xgmii_rxd[39:32] == XGMII_START) begin
|
||||
xgmii_rxd_d0 <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxd_crc <= {xgmii_rxd[31:0], swap_rxd};
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= swap_rxc[i] && (swap_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
detect_term[i+4] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end else if (lanes_swapped) begin
|
||||
xgmii_rxd_d0 <= {xgmii_rxd[31:0], swap_rxd};
|
||||
xgmii_rxd_crc <= {xgmii_rxd[31:0], swap_rxd};
|
||||
|
||||
for (i = 0; i < 4; i = i + 1) begin
|
||||
detect_term[i] <= swap_rxc[i] && (swap_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
detect_term[i+4] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end else begin
|
||||
xgmii_rxd_d0 <= xgmii_rxd;
|
||||
xgmii_rxd_crc <= xgmii_rxd;
|
||||
|
||||
for (i = 0; i < 8; i = i + 1) begin
|
||||
detect_term[i] <= xgmii_rxc[i] && (xgmii_rxd[i*8 +: 8] == XGMII_TERM);
|
||||
end
|
||||
end
|
||||
|
||||
crc_valid7_save <= crc_valid7;
|
||||
|
||||
if (state_next == STATE_LAST) begin
|
||||
xgmii_rxd_crc[31:0] <= xgmii_rxd_crc[63:32];
|
||||
end
|
||||
|
||||
xgmii_rxd_d1 <= xgmii_rxd_d0;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -571,6 +571,34 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next3;
|
||||
end
|
||||
|
||||
xgmii_txd_reg <= xgmii_txd_next;
|
||||
xgmii_txc_reg <= xgmii_txc_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -590,37 +618,7 @@ always @(posedge clk) begin
|
||||
error_underflow_reg <= 1'b0;
|
||||
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
|
||||
xgmii_txd_reg <= xgmii_txd_next;
|
||||
xgmii_txc_reg <= xgmii_txc_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next3;
|
||||
end
|
||||
end
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -714,6 +714,45 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
m_axis_ptp_ts_valid_int_reg <= m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
|
||||
swap_txd <= xgmii_txd_next[63:32];
|
||||
swap_txc <= xgmii_txc_next[7:4];
|
||||
|
||||
if (swap_lanes || (lanes_swapped && !unswap_lanes)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
xgmii_txd_reg <= {xgmii_txd_next[31:0], swap_txd};
|
||||
xgmii_txc_reg <= {xgmii_txc_next[3:0], swap_txc};
|
||||
end else begin
|
||||
lanes_swapped <= 1'b0;
|
||||
xgmii_txd_reg <= xgmii_txd_next;
|
||||
xgmii_txc_reg <= xgmii_txc_next;
|
||||
end
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
if (rst) begin
|
||||
state_reg <= STATE_IDLE;
|
||||
|
||||
@ -736,48 +775,7 @@ always @(posedge clk) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
|
||||
lanes_swapped <= 1'b0;
|
||||
end else begin
|
||||
state_reg <= state_next;
|
||||
|
||||
frame_ptr_reg <= frame_ptr_next;
|
||||
|
||||
ifg_count_reg <= ifg_count_next;
|
||||
deficit_idle_count_reg <= deficit_idle_count_next;
|
||||
|
||||
s_axis_tready_reg <= s_axis_tready_next;
|
||||
|
||||
m_axis_ptp_ts_valid_reg <= m_axis_ptp_ts_valid_next;
|
||||
m_axis_ptp_ts_valid_int_reg <= m_axis_ptp_ts_valid_int_next;
|
||||
|
||||
start_packet_reg <= start_packet_next;
|
||||
error_underflow_reg <= error_underflow_next;
|
||||
|
||||
if (swap_lanes || (lanes_swapped && !unswap_lanes)) begin
|
||||
lanes_swapped <= 1'b1;
|
||||
xgmii_txd_reg <= {xgmii_txd_next[31:0], swap_txd};
|
||||
xgmii_txc_reg <= {xgmii_txc_next[3:0], swap_txc};
|
||||
end else begin
|
||||
lanes_swapped <= 1'b0;
|
||||
xgmii_txd_reg <= xgmii_txd_next;
|
||||
xgmii_txc_reg <= xgmii_txc_next;
|
||||
end
|
||||
|
||||
// datapath
|
||||
if (reset_crc) begin
|
||||
crc_state <= 32'hFFFFFFFF;
|
||||
end else if (update_crc) begin
|
||||
crc_state <= crc_next7;
|
||||
end
|
||||
end
|
||||
|
||||
s_tdata_reg <= s_tdata_next;
|
||||
s_tkeep_reg <= s_tkeep_next;
|
||||
|
||||
m_axis_ptp_ts_reg <= m_axis_ptp_ts_next;
|
||||
m_axis_ptp_ts_tag_reg <= m_axis_ptp_ts_tag_next;
|
||||
|
||||
swap_txd <= xgmii_txd_next[63:32];
|
||||
swap_txc <= xgmii_txc_next[7:4];
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
@ -106,14 +106,14 @@ always @* begin
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
time_count_reg <= time_count_next;
|
||||
ber_count_reg <= ber_count_next;
|
||||
rx_high_ber_reg <= rx_high_ber_next;
|
||||
|
||||
if (rst) begin
|
||||
time_count_reg <= COUNT_125US;
|
||||
ber_count_reg <= 4'd0;
|
||||
rx_high_ber_reg <= 1'b0;
|
||||
end else begin
|
||||
time_count_reg <= time_count_next;
|
||||
ber_count_reg <= ber_count_next;
|
||||
rx_high_ber_reg <= rx_high_ber_next;
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user