Skip to content
Snippets Groups Projects
Commit 3f044e04 authored by Reinier van der Walle's avatar Reinier van der Walle
Browse files

Replaced if else statements by switch

parent 190dcc54
No related branches found
No related tags found
2 merge requests!10Update branch to latest revision,!9Resolve L2SDP-23
......@@ -60,7 +60,7 @@ ARCHITECTURE rtl of nw_ping_response IS
CONSTANT c_dp_fifo_size : NATURAL := 16;
CONSTANT c_cin_w : NATURAL := 4;
CONSTANT c_pipeline : NATURAL := c_network_total_header_64b_nof_words + 3; -- Header length and 3 more pipeline cycles to allow for the other states
CONSTANT c_pipeline : NATURAL := c_network_total_header_64b_nof_words + 5; -- Header length and 5 more pipeline cycles to allow for the other states
TYPE t_state IS (s_idle, s_capture, s_check, s_sum, s_output, s_wait);
......@@ -150,23 +150,33 @@ BEGIN
WHEN s_output => -- Send out ICMP response
v.src_out := dp_pipeline_src_out;
IF dp_pipeline_src_out.valid = '1' THEN
IF r.word_cnt = 0 THEN
CASE r.word_cnt IS
WHEN 0 =>
-- Also perform final checksum calculation
IF dp_pipeline_src_out.sop = '1' THEN -- Wait for SOP
v.src_out.data(c_data_w-1 DOWNTO 0) := r.hdr_response(r.word_cnt);
v.ip_checksum := NOT(STD_LOGIC_VECTOR(r.ip_sum(c_halfword_w-1 DOWNTO 0)+r.ip_sum(r.ip_sum'HIGH DOWNTO c_halfword_w))); -- checksum = inverted (sum + carry)
v.icmp_checksum := TO_UVEC((2048 + TO_UINT(r.hdr_fields.icmp.checksum)), c_halfword_w); -- checksum = original checksum + 0x0800 (incremental update)
v.word_cnt := r.word_cnt+1;
ELSE
v.src_out := c_dp_sosi_rst;
END IF;
IF r.word_cnt < c_network_total_header_64b_nof_words THEN
WHEN 1 TO 2 =>
v.src_out.data(c_data_w-1 DOWNTO 0) := r.hdr_response(r.word_cnt);
v.word_cnt := r.word_cnt+1;
WHEN 3 =>
v.src_out.data(c_data_w-1 DOWNTO 0) := r.hdr_response(r.word_cnt);
END IF;
IF r.word_cnt = 3 THEN -- insert ip checksum
v.src_out.data(c_halfword_w*4 -1 DOWNTO c_halfword_w *3) := r.ip_checksum;
ELSIF r.word_cnt = 4 THEN -- insert icmp checksum
v.word_cnt := r.word_cnt+1;
WHEN 4 =>
v.src_out.data(c_data_w-1 DOWNTO 0) := r.hdr_response(r.word_cnt);
v.src_out.data(c_halfword_w*2 -1 DOWNTO c_halfword_w) := r.icmp_checksum;
ELSIF dp_pipeline_src_out.eop = '1' THEN
v.word_cnt := r.word_cnt+1;
WHEN OTHERS =>
IF dp_pipeline_src_out.eop = '1' THEN
v.state := s_wait;
END IF;
END CASE;
END IF;
WHEN s_wait =>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment