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

processed review comments

parent 5c2ab605
Branches
Tags
1 merge request!129Resolve L2SDP-275
......@@ -265,6 +265,7 @@ PACKAGE dp_stream_pkg Is
FUNCTION INCR_DP_SDATA( vec : STD_LOGIC_VECTOR; dec : INTEGER; w : NATURAL) RETURN STD_LOGIC_VECTOR; -- signed vec(w-1:0) + dec
FUNCTION INCR_DP_DSP_DATA(vec : STD_LOGIC_VECTOR; dec : INTEGER; w : NATURAL) RETURN STD_LOGIC_VECTOR; -- signed vec(w-1:0) + dec
FUNCTION INCR_DP_BSN( vec : STD_LOGIC_VECTOR; dec : INTEGER; w : NATURAL) RETURN STD_LOGIC_VECTOR; -- unsigned vec(w-1:0) + dec
FUNCTION INCR_DP_CHANNEL( vec : STD_LOGIC_VECTOR; dec : INTEGER; w : NATURAL) RETURN STD_LOGIC_VECTOR; -- unsigned vec(w-1:0) + dec
FUNCTION REPLICATE_DP_DATA( seq : STD_LOGIC_VECTOR ) RETURN STD_LOGIC_VECTOR; -- replicate seq as often as fits in c_dp_stream_data_w
FUNCTION UNREPLICATE_DP_DATA(data : STD_LOGIC_VECTOR; seq_w : NATURAL) RETURN STD_LOGIC_VECTOR; -- unreplicate data to width seq_w, return low seq_w bits and set mismatch MSbits bits to '1'
......@@ -579,6 +580,12 @@ PACKAGE BODY dp_stream_pkg IS
RETURN RESIZE_DP_BSN(STD_LOGIC_VECTOR(UNSIGNED(vec(w-1 DOWNTO 0)) + dec));
END INCR_DP_BSN;
FUNCTION INCR_DP_CHANNEL(vec : STD_LOGIC_VECTOR; dec : INTEGER; w : NATURAL) RETURN STD_LOGIC_VECTOR IS
BEGIN
RETURN RESIZE_DP_CHANNEL(STD_LOGIC_VECTOR(UNSIGNED(vec(w-1 DOWNTO 0)) + dec));
END INCR_DP_CHANNEL;
FUNCTION REPLICATE_DP_DATA(seq : STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS
CONSTANT c_seq_w : NATURAL := seq'LENGTH;
CONSTANT c_nof_replications : NATURAL := ceil_div(c_dp_stream_data_w, c_seq_w);
......
......@@ -91,7 +91,7 @@ PACKAGE ring_pkg is
CONSTANT c_ring_eth_hdr_field_arr : t_common_field_arr(c_ring_eth_nof_hdr_fields-1 DOWNTO 0) := (
( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(c_ring_eth_dst_mac) ),
( field_name_pad("eth_src_mac" ), "RW", 48, field_default(c_ring_eth_src_mac) ),
( field_name_pad("eth_type" ), "RW", 16, field_default(c_ring_pkt_type_tb) )
( field_name_pad("eth_type" ), "RW", 16, field_default(0) )
);
CONSTANT c_ring_dp_nof_hdr_fields : NATURAL := 6;
......@@ -99,44 +99,43 @@ PACKAGE ring_pkg is
CONSTANT c_ring_dp_hdr_field_arr : t_common_field_arr(c_ring_dp_nof_hdr_fields-1 DOWNTO 0) := (
( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(c_ring_eth_dst_mac) ),
( field_name_pad("eth_src_mac" ), "RW", 48, field_default(c_ring_eth_src_mac) ),
( field_name_pad("eth_type" ), "RW", 16, field_default(c_ring_pkt_type_bf) ),
( field_name_pad("eth_type" ), "RW", 16, field_default(0) ),
( field_name_pad("dp_channel" ), "RW", 16, field_default(0) ),
( field_name_pad("dp_sync" ), "RW", 1, field_default(0) ),
( field_name_pad("dp_bsn" ), "RW", 63, field_default(0) )
);
FUNCTION nof_hops_to_source_rn(hops, this_rn, N_rn, lane_dir : NATURAL) RETURN NATURAL;
FUNCTION nof_hops_to_source_rn(hops, this_rn, N_rn : STD_LOGIC_VECTOR; lane_dir : NATURAL) RETURN STD_LOGIC_VECTOR; -- return vector length is same as hops vector length
FUNCTION func_nof_hops_to_source_rn(hops, this_rn, N_rn, lane_dir : NATURAL) RETURN NATURAL;
FUNCTION func_nof_hops_to_source_rn(hops, this_rn, N_rn : STD_LOGIC_VECTOR; lane_dir : NATURAL) RETURN STD_LOGIC_VECTOR; -- return vector length is same as hops vector length
END PACKAGE ring_pkg;
PACKAGE BODY ring_pkg IS
FUNCTION nof_hops_to_source_rn(hops, this_rn, N_rn, lane_dir : NATURAL) RETURN NATURAL IS
FUNCTION func_nof_hops_to_source_rn(hops, this_rn, N_rn, lane_dir : NATURAL) RETURN NATURAL IS
VARIABLE v_source_rn : INTEGER;
VARIABLE v_source_rn_nat : NATURAL;
BEGIN
IF lane_dir > 0 THEN
v_source_rn := this_rn - hops;
ELSE
v_source_rn := this_rn + hops;
END IF;
IF v_source_rn < 0 THEN -- Cannot use MOD as N_rn is not a constant.
v_source_rn := v_source_rn + N_rn;
END IF;
ELSE
v_source_rn := this_rn + hops;
IF v_source_rn > N_rn THEN
v_source_rn := v_source_rn - N_rn;
END IF;
END IF;
IF (v_source_rn < 0) OR (v_source_rn > N_rn) THEN
v_source_rn_nat := N_rn; -- return N_rn (which is out of range) for invalid values. This can happen if nof hops > N_rn.
ELSE
v_source_rn_nat := v_source_rn;
END IF;
RETURN v_source_rn_nat;
END;
FUNCTION nof_hops_to_source_rn(hops, this_rn, N_rn : STD_LOGIC_VECTOR; lane_dir : NATURAL) RETURN STD_LOGIC_VECTOR IS
FUNCTION func_nof_hops_to_source_rn(hops, this_rn, N_rn : STD_LOGIC_VECTOR; lane_dir : NATURAL) RETURN STD_LOGIC_VECTOR IS
BEGIN
RETURN TO_UVEC(nof_hops_to_source_rn(TO_UINT(hops), TO_UINT(N_rn), TO_UINT(N_rn), lane_dir),hops'LENGTH);
END;
......
......@@ -76,7 +76,7 @@ ARCHITECTURE str OF ring_tx IS
CONSTANT c_nof_hdr_fields : NATURAL := sel_a_b(c_use_dp_layer, c_ring_dp_nof_hdr_fields, c_ring_eth_nof_hdr_fields);
CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := sel_a_b(c_use_dp_layer, c_ring_dp_hdr_field_sel, c_ring_eth_hdr_field_sel);
CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := sel_a_b(c_use_dp_layer, c_ring_dp_hdr_field_arr, c_ring_eth_hdr_field_arr);
CONSTANT c_fifo_size : NATURAL := 5;
CONSTANT c_fifo_size : NATURAL := 5; -- Large enough to fit ETH/DP header.
SIGNAL validated_sosi : t_dp_sosi;
SIGNAL tx_sosi : t_dp_sosi;
......@@ -115,7 +115,11 @@ BEGIN
p_hop: PROCESS(validated_sosi)
BEGIN
tx_sosi <= validated_sosi;
tx_sosi.channel <= TO_UVEC(TO_UINT(validated_sosi.channel) + 1, c_dp_stream_channel_w);
IF TO_UINT(validate_sosi.channel) >= TO_UINT(N_rn)-1 THEN
tx_sosi.channel <= (OTHERS => '0');
ELSE
tx_sosi.channel <= INCR_DP_CHANNEL(validated_sosi.channel, 1, c_dp_stream_channel_w);
END IF;
END PROCESS;
-- Encode packet header
......@@ -127,6 +131,8 @@ BEGIN
hdr_fields_in(field_hi(c_hdr_field_arr, "dp_sync" ) DOWNTO field_lo(c_hdr_field_arr, "dp_sync" )) <= slv(tx_sosi.sync);
hdr_fields_in(field_hi(c_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "dp_bsn" )) <= tx_sosi.bsn(62 DOWNTO 0);
END GENERATE;
-- Lead DP info around the FIFO via hdr_fields_in_reg, to avoid having to pass on the DP info via the FIFO, to save on block RAM.
hdr_fields_in_reg <= hdr_fields_in WHEN rising_edge(dp_clk) AND tx_sosi.sop = '1' ELSE hdr_fields_in_reg;
-- Fifo for inserting header
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment