Remove HIGHEST_AVAILABLE_SN from local endpoint buffer
This commit is contained in:
parent
0574f9e69d
commit
9ff39c6fea
@ -330,10 +330,6 @@ LOCAL ENDPOINT BUFFER
|
||||
+ NEXT_SEQ_NR +
|
||||
11| |
|
||||
+-------------------------------------------------------------+
|
||||
12| |
|
||||
+ HIGHEST_AVAIL_SEQ_NR + [Reliable Only]
|
||||
13| |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
|
||||
HISTORY CACHE
|
||||
|
||||
@ -35,6 +35,6 @@ analyze Level_1/L1_rtps_builtin_endpoint_test1.vhd
|
||||
#simulate L0_rtps_builtin_endpoint_test4
|
||||
#simulate L0_rtps_builtin_endpoint_test5
|
||||
#simulate L0_rtps_builtin_endpoint_test6
|
||||
simulate L0_rtps_builtin_endpoint_test7
|
||||
#simulate L0_rtps_builtin_endpoint_test7
|
||||
#simulate L0_rtps_out_test1
|
||||
#simulate L1_rtps_builtin_endpoint_test1
|
||||
@ -65,17 +65,15 @@ architecture arch of rtps_endpoint is
|
||||
constant FIRST_ENDPOINT_ADDRESS : unsigned(ENDPOINT_MEMORY_WIDTH-1 downto 0) := (others => '0');
|
||||
|
||||
-- *UPDATE PARTICIPANT FLAG POSITIONS*
|
||||
constant UPDATE_ENDPOINT_FLAG_WIDTH : natural := 6;
|
||||
constant UPDATE_ENDPOINT_FLAG_WIDTH : natural := 4;
|
||||
-- Signifies that the main Endpoint Data are updated
|
||||
constant ENDPOINT_DATA_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (0 => 1, others => '0');
|
||||
-- Signifies that the Lease Deadline of the Endpoint Data is updated
|
||||
constant LEASE_DEADLINE_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (1 => 1, others => '0');
|
||||
-- Signifies that the last Sequence Number of the Endpoint Data is updated
|
||||
constant NEXT_SEQ_NR_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (2 => 1, others => '0');
|
||||
-- Signifies that the Highest Available Sequence Number of the Endpoint Data is updated
|
||||
constant HIGHEST_SEQ_NR_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (3 => 1, others => '0');
|
||||
-- Signifies that the HEARTBEAT/ACKNACK Timeout Time of the Endpoint Data is updated
|
||||
constant RES_TIME_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (4 => 1, others => '0');
|
||||
constant RES_TIME_FLAG : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0) := (3 => 1, others => '0');
|
||||
constant BITMAP_BLOCK_SIZE : natural := 16;
|
||||
|
||||
--*****TYPE DECLARATION*****
|
||||
@ -92,7 +90,6 @@ architecture arch of rtps_endpoint is
|
||||
lease_deadline : TIME_TYPE;
|
||||
res_time : TIME_TYPE;
|
||||
next_seq_nr : SEQUENCENUMBER_TYPE;
|
||||
highest_seq_nr : SEQUENCENUMBER_TYPE;
|
||||
end record;
|
||||
constant ZERO_ENDPOINT_DATA : ENDPOINT_DATA_TYPE := (
|
||||
addr => IPv4_ADDRESS_INVALID,
|
||||
@ -100,8 +97,7 @@ architecture arch of rtps_endpoint is
|
||||
expects_inline_qos => '0',
|
||||
lease_deadline => TIME_INVALID,
|
||||
res_time => TIME_INVALID,
|
||||
next_seq_nr => SEQUENCENUMBER_UNKNOWN,
|
||||
highest_seq_nr => SEQUENCENUMBER_UNKNOWN
|
||||
next_seq_nr => SEQUENCENUMBER_UNKNOWN
|
||||
);
|
||||
type MEM_CTRL_DATA_TYPE is record
|
||||
guid : GUID_TYPE;
|
||||
@ -110,7 +106,6 @@ architecture arch of rtps_endpoint is
|
||||
expects_inline_qos : std_logic;
|
||||
deadline : TIME_TYPE;
|
||||
next_seq_nr : SEQUENCENUMBER_TYPE;
|
||||
highest_seq_nr : SEQUENCENUMBER_TYPE;
|
||||
update_flags : std_logic_vector(UPDATE_ENDPOINT_FLAG_WIDTH-1 downto 0);
|
||||
mem_opcode : MEM_OPCODE_TYPE;
|
||||
end record;
|
||||
@ -121,7 +116,6 @@ architecture arch of rtps_endpoint is
|
||||
expects_inline_qos => '0',
|
||||
deadline => TIME_INVALID,
|
||||
next_seq_nr => SEQUENCENUMBER_UNKNOWN,
|
||||
highest_seq_nr => SEQUENCENUMBER_UNKNOWN,
|
||||
update_flags => (others => '0'),
|
||||
mem_opcode => IDLE
|
||||
);
|
||||
@ -584,12 +578,7 @@ begin
|
||||
deadline_next <= time + ENDPOINT_HEARTBEAT_RESPONSE_DELAY(ID);
|
||||
-- NOTE: Last Bit denotes if this is Response or Suppression Delay
|
||||
deadline_next(1)(0) <= '0';
|
||||
-- Update also highest available sequence number if necessary
|
||||
if (last_seq_nr /= mem_endpoint_data.highest_seq_nr) then
|
||||
update_endpoint_flags <= NEXT_SEQ_NR_FLAG or HIGHEST_SEQ_NR_FLAG or RES_TIME_FLAG;
|
||||
else
|
||||
update_endpoint_flags <= NEXT_SEQ_NR_FLAG or RES_TIME_FLAG;
|
||||
end if;
|
||||
-- If new Sequence Number is available or Writer expects ACKNACK
|
||||
elsif (last_seq_nr >= mem_endpoint_data.next_seq_nr or final_flag = '0') then
|
||||
-- Set Response Delay
|
||||
@ -598,13 +587,8 @@ begin
|
||||
deadline_next <= time + ENDPOINT_HEARTBEAT_RESPONSE_DELAY(ID);
|
||||
-- NOTE: Last Bit denotes if this is Response or Suppression Delay
|
||||
deadline_next(1)(0) <= '0';
|
||||
-- Update also highest available sequence number if necessary
|
||||
if (last_seq_nr /= mem_endpoint_data.highest_seq_nr) then
|
||||
update_endpoint_flags <= HIGHEST_SEQ_NR_FLAG or RES_TIME_FLAG;
|
||||
else
|
||||
update_endpoint_flags <= RES_TIME_FLAG;
|
||||
end if;
|
||||
end if;
|
||||
-- Currently in Heartbeat Response Delay
|
||||
elsif (mem_participant_data.res_time(1)(0) = '0') then
|
||||
-- If current Sequence Number obsolete (removed from source history cache)
|
||||
@ -613,18 +597,8 @@ begin
|
||||
next_seq_nr_next <= first_seq_nr;
|
||||
mem_op_start <= '1';
|
||||
mem_opcode <= UPDATE_ENDPOINT;
|
||||
-- Update also highest available sequence number if different
|
||||
if (last_seq_nr /= mem_endpoint_data.highest_seq_nr) then
|
||||
update_endpoint_flags <= NEXT_SEQ_NR_FLAG or HIGHEST_SEQ_NR_FLAG;
|
||||
else
|
||||
update_endpoint_flags <= NEXT_SEQ_NR_FLAG;
|
||||
end if;
|
||||
elsif (last_seq_nr /= mem_endpoint_data.highest_seq_nr and first_seq_nr <= last_seq_nr) then
|
||||
-- Store new highest available sequence number
|
||||
mem_op_start <= '1';
|
||||
mem_opcode <= UPDATE_ENDPOINT;
|
||||
update_endpoint_flags <= HIGHEST_SEQ_NR_FLAG;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
@ -1225,7 +1199,6 @@ begin
|
||||
expects_inline_qos => expects_inline_qos_next,
|
||||
deadline => deadline_next,
|
||||
next_seq_nr => next_seq_nr_next,
|
||||
highest_seq_nr => last_seq_nr_next,
|
||||
update_flags => update_endpoint_flags_next,
|
||||
mem_opcode => mem_opcode_next
|
||||
);
|
||||
@ -1259,10 +1232,6 @@ begin
|
||||
mem_stage_next <= UPDATE_ENDPOINT;
|
||||
mem_addr_next <= addr_res + 10;
|
||||
mem_cnt_next <= 6;
|
||||
elsif ((update_endpoint_flags and HIGHEST_SEQ_NR_FLAG) = HIGHEST_SEQ_NR_FLAG) then
|
||||
mem_stage_next <= UPDATE_ENDPOINT;
|
||||
mem_addr_next <= addr_res + 12;
|
||||
mem_cnt_next <= 8;
|
||||
end if;
|
||||
when REMOVE_ENDPOINT =>
|
||||
mem_addr_next <= addr_res;
|
||||
@ -1429,12 +1398,6 @@ begin
|
||||
-- Next Sequence Number 2/2
|
||||
when 8 =>
|
||||
mem_endpoint_data_next.next_seq_nr(1) <= unsigned(mem_read_data);
|
||||
-- Highest Available Sequence Number 1/2
|
||||
when 9 =>
|
||||
mem_endpoint_data_next.highest_seq_nr(0) <= unsigned(mem_read_data);
|
||||
-- Highest Available Sequence Number 2/2
|
||||
when 10 =>
|
||||
mem_endpoint_data_next.highest_seq_nr(1) <= unsigned(mem_read_data);
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
when others =>
|
||||
@ -1482,12 +1445,6 @@ begin
|
||||
-- Next Sequence Number 2/2
|
||||
when 11 =>
|
||||
mem_write_data <= to_unsigned(1,CDR_LONG_WIDTH);
|
||||
-- Highest Available Sequence Number 1/2
|
||||
when 12 =>
|
||||
mem_write_data <= (others => '0');
|
||||
-- Highest Available Sequence Number 2/2
|
||||
when 13 =>
|
||||
mem_write_data <= (others => '0');
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
when others =>
|
||||
@ -1511,7 +1468,7 @@ begin
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- If nothing else to update
|
||||
if ((mem_ctrl_data.update_flags and (LEASE_DEADLINE_FLAG or NEXT_SEQ_NR_FLAG or HIGHEST_SEQ_NR_FLAG or RES_TIME_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
if ((mem_ctrl_data.update_flags and (LEASE_DEADLINE_FLAG or NEXT_SEQ_NR_FLAG or RES_TIME_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
end if;
|
||||
@ -1528,7 +1485,7 @@ begin
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- If nothing else to update
|
||||
if ((mem_ctrl_data.update_flags and (NEXT_SEQ_NR_FLAG or HIGHEST_SEQ_NR_FLAG or RES_TIME_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
if ((mem_ctrl_data.update_flags and (NEXT_SEQ_NR_FLAG or RES_TIME_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
end if;
|
||||
@ -1545,7 +1502,7 @@ begin
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- If nothing else to update
|
||||
if ((mem_ctrl_data.update_flags and (HIGHEST_SEQ_NR_FLAG or NEXT_SEQ_NR_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
if ((mem_ctrl_data.update_flags and (NEXT_SEQ_NR_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
end if;
|
||||
@ -1561,23 +1518,6 @@ begin
|
||||
if ((mem_ctrl_data.update_flags and NEXT_SEQ_NR_FLAG) = NEXT_SEQ_NR_FLAG) then
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- If nothing else to update
|
||||
if ((mem_ctrl_data.update_flags and (HIGHEST_SEQ_NR_FLAG)) = (mem_ctrl_data.update_flags'range => '0')) then
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
end if;
|
||||
-- Highest Available Sequence Number 1/2
|
||||
when 8 =>
|
||||
mem_write_data <= std_logic_vector(mem_ctrl_data.highest_seq_nr(0));
|
||||
if ((mem_ctrl_data.update_flags and HIGHEST_SEQ_NR_FLAG) = HIGHEST_SEQ_NR_FLAG) then
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- Highest Available Sequence Number 2/2
|
||||
when 9 =>
|
||||
mem_write_data <= std_logic_vector(mem_ctrl_data.highest_seq_nr(1));
|
||||
if ((mem_ctrl_data.update_flags and HIGHEST_SEQ_NR_FLAG) = HIGHEST_SEQ_NR_FLAG) then
|
||||
mem_wr <= '1';
|
||||
end if;
|
||||
-- DONE
|
||||
mem_stage_next <= IDLE;
|
||||
when others =>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user