mirror of
https://github.com/fpganinja/taxi.git
synced 2025-12-09 00:48:40 -08:00
eth: Re-nest if statements for termination character handling in 10G RX logic
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -437,42 +437,40 @@ always_comb begin
|
|||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
reset_crc = 1'b1;
|
reset_crc = 1'b1;
|
||||||
state_next = STATE_IDLE;
|
state_next = STATE_IDLE;
|
||||||
end else if (term_present_reg) begin
|
end else if (term_first_cycle_reg) begin
|
||||||
reset_crc = 1'b1;
|
// end this cycle
|
||||||
if (term_first_cycle_reg) begin
|
m_axis_rx_tkeep_next = 4'b1111;
|
||||||
// end this cycle
|
m_axis_rx_tlast_next = 1'b1;
|
||||||
m_axis_rx_tkeep_next = 4'b1111;
|
if (crc_valid_save[3]) begin
|
||||||
m_axis_rx_tlast_next = 1'b1;
|
// CRC valid
|
||||||
if (crc_valid_save[3]) begin
|
if (frame_oversize_next) begin
|
||||||
// CRC valid
|
// too long
|
||||||
if (frame_oversize_next) begin
|
|
||||||
// too long
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
|
||||||
end else begin
|
|
||||||
// length OK
|
|
||||||
m_axis_rx_tuser_next = 1'b0;
|
|
||||||
stat_rx_pkt_good_next = 1'b1;
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
|
||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
stat_rx_err_bad_fcs_next = 1'b1;
|
end else begin
|
||||||
|
// length OK
|
||||||
|
m_axis_rx_tuser_next = 1'b0;
|
||||||
|
stat_rx_pkt_good_next = 1'b1;
|
||||||
end
|
end
|
||||||
stat_rx_pkt_len_next = frame_len_next;
|
|
||||||
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
|
||||||
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
|
||||||
stat_rx_pkt_bcast_next = is_bcast_reg;
|
|
||||||
stat_rx_pkt_vlan_next = is_8021q_reg;
|
|
||||||
stat_rx_err_oversize_next = frame_oversize_next;
|
|
||||||
stat_rx_err_preamble_next = !pre_ok_reg;
|
|
||||||
state_next = STATE_IDLE;
|
|
||||||
end else begin
|
end else begin
|
||||||
// need extra cycle
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
state_next = STATE_LAST;
|
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
||||||
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
|
stat_rx_err_bad_fcs_next = 1'b1;
|
||||||
end
|
end
|
||||||
|
stat_rx_pkt_len_next = frame_len_next;
|
||||||
|
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
||||||
|
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
||||||
|
stat_rx_pkt_bcast_next = is_bcast_reg;
|
||||||
|
stat_rx_pkt_vlan_next = is_8021q_reg;
|
||||||
|
stat_rx_err_oversize_next = frame_oversize_next;
|
||||||
|
stat_rx_err_preamble_next = !pre_ok_reg;
|
||||||
|
reset_crc = 1'b1;
|
||||||
|
state_next = STATE_IDLE;
|
||||||
|
end else if (term_present_reg) begin
|
||||||
|
// need extra cycle
|
||||||
|
state_next = STATE_LAST;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -446,48 +446,46 @@ always_comb begin
|
|||||||
|
|
||||||
reset_crc = 1'b1;
|
reset_crc = 1'b1;
|
||||||
state_next = STATE_IDLE;
|
state_next = STATE_IDLE;
|
||||||
end if (term_present_reg) begin
|
end else if (term_first_cycle_reg) begin
|
||||||
if (term_first_cycle_reg) begin
|
// end this cycle
|
||||||
// end this cycle
|
m_axis_rx_tkeep_next = {KEEP_W{1'b1}} >> 3'(KEEP_W-4-term_lane_reg);
|
||||||
m_axis_rx_tkeep_next = {KEEP_W{1'b1}} >> 3'(KEEP_W-4-term_lane_reg);
|
m_axis_rx_tlast_next = 1'b1;
|
||||||
m_axis_rx_tlast_next = 1'b1;
|
if ((term_lane_reg == 0 && crc_valid_save[7]) ||
|
||||||
if ((term_lane_reg == 0 && crc_valid_save[7]) ||
|
(term_lane_reg == 1 && crc_valid[0]) ||
|
||||||
(term_lane_reg == 1 && crc_valid[0]) ||
|
(term_lane_reg == 2 && crc_valid[1]) ||
|
||||||
(term_lane_reg == 2 && crc_valid[1]) ||
|
(term_lane_reg == 3 && crc_valid[2]) ||
|
||||||
(term_lane_reg == 3 && crc_valid[2]) ||
|
(term_lane_reg == 4 && crc_valid[3])) begin
|
||||||
(term_lane_reg == 4 && crc_valid[3])) begin
|
// CRC valid
|
||||||
// CRC valid
|
if (frame_oversize_next) begin
|
||||||
if (frame_oversize_next) begin
|
// too long
|
||||||
// too long
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
|
||||||
end else begin
|
|
||||||
// length OK
|
|
||||||
m_axis_rx_tuser_next = 1'b0;
|
|
||||||
stat_rx_pkt_good_next = 1'b1;
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
|
||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
stat_rx_err_bad_fcs_next = 1'b1;
|
end else begin
|
||||||
|
// length OK
|
||||||
|
m_axis_rx_tuser_next = 1'b0;
|
||||||
|
stat_rx_pkt_good_next = 1'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
stat_rx_pkt_len_next = frame_len_next;
|
|
||||||
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
|
||||||
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
|
||||||
stat_rx_pkt_bcast_next = is_bcast_reg;
|
|
||||||
stat_rx_pkt_vlan_next = is_8021q_reg;
|
|
||||||
stat_rx_err_oversize_next = frame_oversize_next;
|
|
||||||
stat_rx_err_preamble_next = !pre_ok_reg;
|
|
||||||
|
|
||||||
reset_crc = 1'b1;
|
|
||||||
state_next = STATE_IDLE;
|
|
||||||
end else begin
|
end else begin
|
||||||
// need extra cycle
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
state_next = STATE_LAST;
|
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
||||||
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
|
stat_rx_err_bad_fcs_next = 1'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
stat_rx_pkt_len_next = frame_len_next;
|
||||||
|
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
||||||
|
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
||||||
|
stat_rx_pkt_bcast_next = is_bcast_reg;
|
||||||
|
stat_rx_pkt_vlan_next = is_8021q_reg;
|
||||||
|
stat_rx_err_oversize_next = frame_oversize_next;
|
||||||
|
stat_rx_err_preamble_next = !pre_ok_reg;
|
||||||
|
|
||||||
|
reset_crc = 1'b1;
|
||||||
|
state_next = STATE_IDLE;
|
||||||
|
end else if (term_present_reg) begin
|
||||||
|
// need extra cycle
|
||||||
|
state_next = STATE_LAST;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -395,42 +395,40 @@ always_comb begin
|
|||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
reset_crc = 1'b1;
|
reset_crc = 1'b1;
|
||||||
state_next = STATE_IDLE;
|
state_next = STATE_IDLE;
|
||||||
end else if (term_present_reg) begin
|
end else if (term_first_cycle_reg) begin
|
||||||
reset_crc = 1'b1;
|
// end this cycle
|
||||||
if (term_first_cycle_reg) begin
|
m_axis_rx_tkeep_next = 4'b1111;
|
||||||
// end this cycle
|
m_axis_rx_tlast_next = 1'b1;
|
||||||
m_axis_rx_tkeep_next = 4'b1111;
|
if (crc_valid_save[3]) begin
|
||||||
m_axis_rx_tlast_next = 1'b1;
|
// CRC valid
|
||||||
if (crc_valid_save[3]) begin
|
if (frame_oversize_next) begin
|
||||||
// CRC valid
|
// too long
|
||||||
if (frame_oversize_next) begin
|
|
||||||
// too long
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
|
||||||
end else begin
|
|
||||||
// length OK
|
|
||||||
m_axis_rx_tuser_next = 1'b0;
|
|
||||||
stat_rx_pkt_good_next = 1'b1;
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
|
||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
stat_rx_err_bad_fcs_next = 1'b1;
|
end else begin
|
||||||
|
// length OK
|
||||||
|
m_axis_rx_tuser_next = 1'b0;
|
||||||
|
stat_rx_pkt_good_next = 1'b1;
|
||||||
end
|
end
|
||||||
stat_rx_pkt_len_next = frame_len_next;
|
|
||||||
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
|
||||||
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
|
||||||
stat_rx_pkt_bcast_next = is_bcast_reg;
|
|
||||||
stat_rx_pkt_vlan_next = is_8021q_reg;
|
|
||||||
stat_rx_err_oversize_next = frame_oversize_next;
|
|
||||||
stat_rx_err_preamble_next = !pre_ok_reg;
|
|
||||||
state_next = STATE_IDLE;
|
|
||||||
end else begin
|
end else begin
|
||||||
// need extra cycle
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
state_next = STATE_LAST;
|
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
||||||
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
|
stat_rx_err_bad_fcs_next = 1'b1;
|
||||||
end
|
end
|
||||||
|
stat_rx_pkt_len_next = frame_len_next;
|
||||||
|
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
||||||
|
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
||||||
|
stat_rx_pkt_bcast_next = is_bcast_reg;
|
||||||
|
stat_rx_pkt_vlan_next = is_8021q_reg;
|
||||||
|
stat_rx_err_oversize_next = frame_oversize_next;
|
||||||
|
stat_rx_err_preamble_next = !pre_ok_reg;
|
||||||
|
reset_crc = 1'b1;
|
||||||
|
state_next = STATE_IDLE;
|
||||||
|
end else if (term_present_reg) begin
|
||||||
|
// need extra cycle
|
||||||
|
state_next = STATE_LAST;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -392,46 +392,44 @@ always_comb begin
|
|||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
reset_crc = 1'b1;
|
reset_crc = 1'b1;
|
||||||
state_next = STATE_IDLE;
|
state_next = STATE_IDLE;
|
||||||
end else if (term_present_reg) begin
|
end else if (term_first_cycle_reg) begin
|
||||||
reset_crc = 1'b1;
|
// end this cycle
|
||||||
if (term_first_cycle_reg) begin
|
m_axis_rx_tkeep_next = {KEEP_W{1'b1}} >> 3'(CTRL_W-4-term_lane_reg);
|
||||||
// end this cycle
|
m_axis_rx_tlast_next = 1'b1;
|
||||||
m_axis_rx_tkeep_next = {KEEP_W{1'b1}} >> 3'(CTRL_W-4-term_lane_reg);
|
if ((term_lane_reg == 0 && crc_valid_save[7]) ||
|
||||||
m_axis_rx_tlast_next = 1'b1;
|
(term_lane_reg == 1 && crc_valid[0]) ||
|
||||||
if ((term_lane_reg == 0 && crc_valid_save[7]) ||
|
(term_lane_reg == 2 && crc_valid[1]) ||
|
||||||
(term_lane_reg == 1 && crc_valid[0]) ||
|
(term_lane_reg == 3 && crc_valid[2]) ||
|
||||||
(term_lane_reg == 2 && crc_valid[1]) ||
|
(term_lane_reg == 4 && crc_valid[3])) begin
|
||||||
(term_lane_reg == 3 && crc_valid[2]) ||
|
// CRC valid
|
||||||
(term_lane_reg == 4 && crc_valid[3])) begin
|
if (frame_oversize_next) begin
|
||||||
// CRC valid
|
// too long
|
||||||
if (frame_oversize_next) begin
|
|
||||||
// too long
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
|
||||||
end else begin
|
|
||||||
// length OK
|
|
||||||
m_axis_rx_tuser_next = 1'b0;
|
|
||||||
stat_rx_pkt_good_next = 1'b1;
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
m_axis_rx_tuser_next = 1'b1;
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
|
||||||
stat_rx_pkt_jabber_next = frame_oversize_next;
|
|
||||||
stat_rx_pkt_bad_next = 1'b1;
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
stat_rx_err_bad_fcs_next = 1'b1;
|
end else begin
|
||||||
|
// length OK
|
||||||
|
m_axis_rx_tuser_next = 1'b0;
|
||||||
|
stat_rx_pkt_good_next = 1'b1;
|
||||||
end
|
end
|
||||||
stat_rx_pkt_len_next = frame_len_next;
|
|
||||||
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
|
||||||
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
|
||||||
stat_rx_pkt_bcast_next = is_bcast_reg;
|
|
||||||
stat_rx_pkt_vlan_next = is_8021q_reg;
|
|
||||||
stat_rx_err_oversize_next = frame_oversize_next;
|
|
||||||
stat_rx_err_preamble_next = !pre_ok_reg;
|
|
||||||
state_next = STATE_IDLE;
|
|
||||||
end else begin
|
end else begin
|
||||||
// need extra cycle
|
m_axis_rx_tuser_next = 1'b1;
|
||||||
state_next = STATE_LAST;
|
stat_rx_pkt_fragment_next = frame_len_next[15:6] == 0;
|
||||||
|
stat_rx_pkt_jabber_next = frame_oversize_next;
|
||||||
|
stat_rx_pkt_bad_next = 1'b1;
|
||||||
|
stat_rx_err_bad_fcs_next = 1'b1;
|
||||||
end
|
end
|
||||||
|
stat_rx_pkt_len_next = frame_len_next;
|
||||||
|
stat_rx_pkt_ucast_next = !is_mcast_reg;
|
||||||
|
stat_rx_pkt_mcast_next = is_mcast_reg && !is_bcast_reg;
|
||||||
|
stat_rx_pkt_bcast_next = is_bcast_reg;
|
||||||
|
stat_rx_pkt_vlan_next = is_8021q_reg;
|
||||||
|
stat_rx_err_oversize_next = frame_oversize_next;
|
||||||
|
stat_rx_err_preamble_next = !pre_ok_reg;
|
||||||
|
reset_crc = 1'b1;
|
||||||
|
state_next = STATE_IDLE;
|
||||||
|
end else if (term_present_reg) begin
|
||||||
|
// need extra cycle
|
||||||
|
state_next = STATE_LAST;
|
||||||
end else begin
|
end else begin
|
||||||
state_next = STATE_PAYLOAD;
|
state_next = STATE_PAYLOAD;
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user