Modify ports of rtps_builtin_endpoint according to port naming convention

The ports to rtps_out from the rtps_reader and rtps_writer entities were
also modified to apply a uniform naming.
This commit is contained in:
Greek 2021-11-18 16:44:42 +01:00
parent 399bd2bbda
commit e87d84ba24
41 changed files with 764 additions and 686 deletions

View File

@ -9,8 +9,10 @@ entity FWFT_FIFO is
); );
port port
( (
reset : in std_logic; -- SYSTEM
clk : in std_logic; clk : in std_logic;
reset : in std_logic;
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0); data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
write : in std_logic; write : in std_logic;
read : in std_logic; read : in std_logic;

View File

@ -35,10 +35,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test1 is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; --TODO: Do that in all testbenches signal reset : std_logic := '1'; --TODO: Do that in all testbenches
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -76,20 +76,27 @@ begin
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => TIME_ZERO,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => TIME_ZERO, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -595,10 +602,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -606,7 +613,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -645,8 +652,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(endpoint_wr & last_word_out & data_out); SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -107,10 +107,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test2 is
type MATCH_MATRIX_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(0 to NUM_READERS-1); type MATCH_MATRIX_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(0 to NUM_READERS-1);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -149,20 +149,27 @@ begin
MAX_REMOTE_PARTICIPANTS => 3 MAX_REMOTE_PARTICIPANTS => 3
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => TIME_ZERO,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => TIME_ZERO, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -897,10 +904,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -908,7 +915,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -948,8 +955,8 @@ begin
begin begin
check_done <= '0'; check_done <= '0';
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB.Check(endpoint_wr & last_word_out & data_out); SB.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB.empty) then if (stim_done = '1' and SB.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -56,10 +56,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test3 is
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -97,20 +97,27 @@ begin
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => TIME_ZERO,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => TIME_ZERO, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -1244,10 +1251,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -1255,7 +1262,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -1294,8 +1301,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(endpoint_wr & last_word_out & data_out); SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -25,10 +25,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test4 is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -74,20 +74,27 @@ begin
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => TIME_ZERO,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => TIME_ZERO, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -1765,10 +1772,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -1776,7 +1783,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -1815,8 +1822,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(endpoint_wr & last_word_out & data_out); SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -28,10 +28,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test5 is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -70,20 +70,27 @@ begin
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => test_time,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => test_time, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -301,10 +308,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -312,7 +319,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -351,8 +358,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(endpoint_wr & last_word_out & data_out); SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -23,10 +23,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test6 is
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal endpoint_wr, endpoint_full : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
@ -57,20 +57,27 @@ begin
MAX_REMOTE_PARTICIPANTS => 2 MAX_REMOTE_PARTICIPANTS => 2
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => TIME_ZERO,
data_in => data_in, -- FROM RTPS HANDLER
data_out => data_out, empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => TIME_ZERO, data_in => data_in,
endpoint_full => endpoint_full, last_word_in => last_word_in,
endpoint_wr => endpoint_wr, -- FROM USER ENDPOINT
rtps_wr => open, alive => (others => '0'),
rtps_full => '0', -- TO USER ENDPOINT
last_word_out => last_word_out, full_ue => full_ue,
alive => (others => '0') wr_ue => wr_ue,
data_out_ue => data_out_ue,
last_word_out_ue => last_word_out_ue,
-- RTPS OUTPUT
full_ro => '0',
wr_ro => open,
data_out_ro => open,
last_word_out_ro => open
); );
stimulus_prc : process stimulus_prc : process
@ -278,10 +285,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
endpoint_full <= (others => '0'); full_ue <= (others => '0');
wait until (or endpoint_wr) = '1'; wait until (or wr_ue) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
endpoint_full <= (others => '1'); full_ue <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -289,7 +296,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(endpoint_full /= (0 to NUM_ENDPOINTS-1 => '0') and (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -329,8 +336,8 @@ begin
begin begin
check_done <= '0'; check_done <= '0';
if rising_edge(clk) then if rising_edge(clk) then
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(endpoint_wr & last_word_out & data_out); SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -98,10 +98,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -98,10 +98,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -86,10 +86,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => wr_rtps, wr_ro => wr_rtps,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -86,10 +86,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -86,10 +86,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => wr_rtps, wr_ro => wr_rtps,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -86,10 +86,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -86,10 +86,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -82,10 +82,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -82,10 +82,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
start_hc => start_hc, start_hc => start_hc,
opcode_hc => opcode_hc, opcode_hc => opcode_hc,
ack_hc => ack_hc, ack_hc => ack_hc,

View File

@ -97,10 +97,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => '0', data_available => '0',
start_hc => start_hc, start_hc => start_hc,

View File

@ -97,10 +97,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => '0', data_available => '0',
start_hc => start_hc, start_hc => start_hc,

View File

@ -81,10 +81,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => open, wr_ro => open,
full_rtps => '0', full_ro => '0',
last_word_out_rtps => open, last_word_out_ro => open,
data_out_rtps => open, data_out_ro => open,
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => '0', data_available => '0',
start_hc => start_hc, start_hc => start_hc,

View File

@ -389,20 +389,27 @@ begin
MAX_REMOTE_PARTICIPANTS => 1 MAX_REMOTE_PARTICIPANTS => 1
) )
port map ( port map (
clk => clk, -- SYSTEM
reset => reset, clk => clk,
empty => in_empty or packet_sent, reset => reset,
rd => rd_sig, time => test_time,
data_in => data_in, -- FROM RTPS HANDLER
data_out => fifo_in(WORD_WIDTH-1 downto 0), empty => in_empty or packet_sent,
last_word_in => last_word_in, rd => rd_sig,
time => test_time, data_in => data_in,
endpoint_full => (others => '0'), last_word_in => last_word_in,
endpoint_wr => open, -- FROM USER ENDPOINT
rtps_wr => fifo_wr, alive => alive,
rtps_full => fifo_full, -- TO USER ENDPOINT
last_word_out => fifo_in(WORD_WIDTH), full_ue => (others => '0'),
alive => alive wr_ue => open,
data_out_ue => open,
last_word_out_ue => open,
-- RTPS OUTPUT
full_ro => fifo_full,
wr_ro => fifo_wr,
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
last_word_out_ro => fifo_in(WORD_WIDTH)
); );
fifo_inst : entity work.FWFT_FIFO(arch) fifo_inst : entity work.FWFT_FIFO(arch)

View File

@ -105,10 +105,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
start_hc => open, start_hc => open,
opcode_hc => open, opcode_hc => open,
ack_hc => '1', ack_hc => '1',

View File

@ -106,10 +106,10 @@ begin
rd_meta => rd_meta, rd_meta => rd_meta,
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
start_hc => open, start_hc => open,
opcode_hc => open, opcode_hc => open,
ack_hc => '1', ack_hc => '1',

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -104,10 +104,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => '0', liveliness_assertion => '0',
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -103,10 +103,10 @@ begin
data_in_meta => data_in_meta, data_in_meta => data_in_meta,
last_word_in_meta => last_word_in_meta, last_word_in_meta => last_word_in_meta,
alive_sig => open, alive_sig => open,
wr_rtps => fifo_wr, wr_ro => fifo_wr,
full_rtps => fifo_full, full_ro => fifo_full,
last_word_out_rtps => fifo_in(WORD_WIDTH), last_word_out_ro => fifo_in(WORD_WIDTH),
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0), data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
liveliness_assertion => liveliness_assertion, liveliness_assertion => liveliness_assertion,
data_available => data_available, data_available => data_available,
start_hc => start_hc, start_hc => start_hc,

View File

@ -244,10 +244,10 @@ begin
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC)
alive_sig => alive_sig_rtps(0), alive_sig => alive_sig_rtps(0),
-- RTPS OUTPUT -- RTPS OUTPUT
wr_rtps => wr_rtps_out(0), wr_ro => wr_rtps_out(0),
full_rtps => full_rtps_out(0), full_ro => full_rtps_out(0),
data_out_rtps => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0), data_out_ro => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
last_word_out_rtps => data_in_rtps_out(0)(WORD_WIDTH), last_word_out_ro => data_in_rtps_out(0)(WORD_WIDTH),
-- FROM HC -- FROM HC
liveliness_assertion => liveliness_assertion_dds_rtps, liveliness_assertion => liveliness_assertion_dds_rtps,
data_available => data_available_dds_rtps, data_available => data_available_dds_rtps,
@ -273,27 +273,29 @@ begin
MAX_REMOTE_PARTICIPANTS => 5 MAX_REMOTE_PARTICIPANTS => 5
) )
port map ( port map (
clk => clk, clk => clk,
reset => reset, reset => reset,
time => time, time => time,
-- FROM RTPS HANDLER -- FROM RTPS HANDLER
empty => empty_rh(NUM_ENDPOINTS), empty => empty_rh(NUM_ENDPOINTS),
rd => rd_rh(NUM_ENDPOINTS), rd => rd_rh(NUM_ENDPOINTS),
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0), data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH), last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
-- TO RTPS ENDPOINTS -- FROM USER ENDPOINTS
endpoint_full => full_rtps(0 to NUM_ENDPOINTS-1), alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
endpoint_wr => wr_rtps(0 to NUM_ENDPOINTS-1), -- TO USER ENDPOINTS
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1), full_ue => full_rtps(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rtps(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rbe,
last_word_out_ue => last_word_out_rbe,
-- TO RTPS OUT -- TO RTPS OUT
rtps_full => full_rtps_out(NUM_ENDPOINTS), full_ro => full_rtps_out(NUM_ENDPOINTS),
rtps_wr => wr_rtps_out(NUM_ENDPOINTS), wr_ro => wr_rtps_out(NUM_ENDPOINTS),
last_word_out => last_word_out_rbe, data_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
data_out => data_out_rbe last_word_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH)
); );
data_in_rtps(0 to NUM_ENDPOINTS-1) <= (others => (last_word_out_rbe & data_out_rbe)); data_in_rtps(0 to NUM_ENDPOINTS-1) <= (others => (last_word_out_rbe & data_out_rbe));
data_in_rtps_out(NUM_ENDPOINTS) <= last_word_out_rbe & data_out_rbe;
rtps_handler_w_inst : entity Testbench_Lib2.rtps_handler(arch) rtps_handler_w_inst : entity Testbench_Lib2.rtps_handler(arch)
port map ( port map (

View File

@ -305,10 +305,10 @@ begin
data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0), data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_out_rtps(0)(WORD_WIDTH), last_word_in_meta => data_out_rtps(0)(WORD_WIDTH),
-- RTPS OUTPUT -- RTPS OUTPUT
wr_rtps => wr_rtps_out(0), wr_ro => wr_rtps_out(0),
full_rtps => full_rtps_out(0), full_ro => full_rtps_out(0),
data_out_rtps => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0), data_out_ro => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
last_word_out_rtps => data_in_rtps_out(0)(WORD_WIDTH), last_word_out_ro => data_in_rtps_out(0)(WORD_WIDTH),
-- TO HISTORY CACHE -- TO HISTORY CACHE
start_hc => start_dds_rtps, start_hc => start_dds_rtps,
opcode_hc => opcode_dds_rtps, opcode_hc => opcode_dds_rtps,
@ -326,27 +326,29 @@ begin
MAX_REMOTE_PARTICIPANTS => 5 MAX_REMOTE_PARTICIPANTS => 5
) )
port map ( port map (
clk => clk, clk => clk,
reset => reset, reset => reset,
time => time, time => time,
-- FROM RTPS HANDLER -- FROM RTPS HANDLER
empty => empty_rh(NUM_ENDPOINTS), empty => empty_rh(NUM_ENDPOINTS),
rd => rd_rh(NUM_ENDPOINTS), rd => rd_rh(NUM_ENDPOINTS),
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0), data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH), last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
-- TO RTPS ENDPOINTS -- FROM USER ENDPOINTS
endpoint_full => full_rtps(0 to NUM_ENDPOINTS-1), alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
endpoint_wr => wr_rtps(0 to NUM_ENDPOINTS-1), -- TO USER ENDPOINTS
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1), full_ue => full_rtps(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rtps(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rbe,
last_word_out_ue => last_word_out_rbe,
-- TO RTPS OUT -- TO RTPS OUT
rtps_full => full_rtps_out(NUM_ENDPOINTS), full_ro => full_rtps_out(NUM_ENDPOINTS),
rtps_wr => wr_rtps_out(NUM_ENDPOINTS), wr_ro => wr_rtps_out(NUM_ENDPOINTS),
last_word_out => last_word_out_rbe, data_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
data_out => data_out_rbe last_word_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH)
); );
data_in_rtps(0 to NUM_ENDPOINTS-1) <= (others => (last_word_out_rbe & data_out_rbe)); data_in_rtps(0 to NUM_ENDPOINTS-1) <= (others => (last_word_out_rbe & data_out_rbe));
data_in_rtps_out(NUM_ENDPOINTS) <= last_word_out_rbe & data_out_rbe;
rtps_handler_r_inst : entity Testbench_Lib3.rtps_handler(arch) rtps_handler_r_inst : entity Testbench_Lib3.rtps_handler(arch)
port map ( port map (

View File

@ -120,7 +120,7 @@ begin
fifo_r_w_inst : entity work.FWFT_FIFO(arch) fifo_r_w_inst : entity work.FWFT_FIFO(arch)
generic map ( generic map (
FIFO_DEPTH => 65536, FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
DATA_WIDTH => WORD_WIDTH DATA_WIDTH => WORD_WIDTH
) )
port map port map
@ -138,7 +138,7 @@ begin
fifo_w_r_inst : entity work.FWFT_FIFO(arch) fifo_w_r_inst : entity work.FWFT_FIFO(arch)
generic map ( generic map (
FIFO_DEPTH => 65536, FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
DATA_WIDTH => WORD_WIDTH DATA_WIDTH => WORD_WIDTH
) )
port map port map

View File

@ -4,17 +4,18 @@ use ieee.numeric_std.all;
entity key_hash_generator is entity key_hash_generator is
port ( port (
-- SYSTEM
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
-- CONTROL
start : in std_logic; start : in std_logic;
ack : out std_logic; ack : out std_logic;
-- INPUT
data_in : in std_logic_vector(7 downto 0); data_in : in std_logic_vector(7 downto 0);
valid_in : in std_logic; valid_in : in std_logic;
ready_in : out std_logic; ready_in : out std_logic;
last_word_in : in std_logic; last_word_in : in std_logic;
-- OUTPUT
key_hash : out std_logic_vector(127 downto 0); key_hash : out std_logic_vector(127 downto 0);
done : out std_logic done : out std_logic
); );

View File

@ -7,20 +7,21 @@ use work.rtps_config_package.all;
entity key_holder is entity key_holder is
port ( port (
-- SYSTEM
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
-- CONTROL
start : in std_logic; start : in std_logic;
opcode : in KEY_HOLDER_OPCODE_TYPE; opcode : in KEY_HOLDER_OPCODE_TYPE;
ack : out std_logic; ack : out std_logic;
decode_error : out std_logic; decode_error : out std_logic;
abort : in std_logic; abort : in std_logic;
-- INPUT
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
valid_in : in std_logic; valid_in : in std_logic;
ready_in : out std_logic; ready_in : out std_logic;
last_word_in : in std_logic; last_word_in : in std_logic;
-- OUTPUT
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0); data_out : out std_logic_vector(WORD_WIDTH-1 downto 0);
valid_out : out std_logic; valid_out : out std_logic;
ready_out : in std_logic; ready_out : in std_logic;

View File

@ -10,8 +10,10 @@ entity mem_ctrl is
MAX_BURST_LENGTH : natural MAX_BURST_LENGTH : natural
); );
port ( port (
-- SYSTEM
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
addr : in std_logic_vector(ADDR_WIDTH-1 downto 0); addr : in std_logic_vector(ADDR_WIDTH-1 downto 0);
read : in std_logic; read : in std_logic;
ready_in : out std_logic; ready_in : out std_logic;

View File

@ -12,20 +12,27 @@ entity rtps_builtin_endpoint is
MAX_REMOTE_PARTICIPANTS : natural := 50 MAX_REMOTE_PARTICIPANTS : natural := 50
); );
port ( port (
clk : in std_logic; -- Input Clock -- SYSTEM
reset : in std_logic; -- Synchronous Reset clk : in std_logic;
empty : in std_logic; -- Input FIFO empty flag reset : in std_logic;
rd : out std_logic; -- Input FIFO read signal time : in TIME_TYPE;
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); -- Input FIFO data signal -- FROM RTPS HANDLER
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0); empty : in std_logic;
last_word_in : in std_logic; rd : out std_logic;
time : in TIME_TYPE; data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
endpoint_full : in std_logic_vector(0 to NUM_ENDPOINTS-1); last_word_in : in std_logic;
endpoint_wr : out std_logic_vector(0 to NUM_ENDPOINTS-1); -- FROM USER ENDPOINTS
rtps_wr : out std_logic; alive : in std_logic_vector(0 to NUM_ENDPOINTS-1);
rtps_full : in std_logic; -- TO USER ENDPOINTS
last_word_out : out std_logic; full_ue : in std_logic_vector(0 to NUM_ENDPOINTS-1);
alive : in std_logic_vector(0 to NUM_ENDPOINTS-1) wr_ue : out std_logic_vector(0 to NUM_ENDPOINTS-1);
data_out_ue : out std_logic_vector(WORD_WIDTH-1 downto 0); -- one-to-many (Multicast) Connection
last_word_out_ue : out std_logic; -- one-to-many (Multicast) Connection
-- RTPS OUTPUT
full_ro : in std_logic;
wr_ro : out std_logic;
data_out_ro : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_ro : out std_logic
); );
end entity; end entity;
@ -351,6 +358,10 @@ architecture arch of rtps_builtin_endpoint is
signal idle_sig : std_logic := '0'; signal idle_sig : std_logic := '0';
-- Signifies that we received an Unregister/Dispose Status Info -- Signifies that we received an Unregister/Dispose Status Info
signal ud_status, ud_status_next : std_logic := '0'; signal ud_status, ud_status_next : std_logic := '0';
-- Internal Signal for data_out
signal data_out_sig : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
-- Internal Signal for last_word_out
signal last_word_out_sig : std_logic := '0';
-- *MEMORY PROCESS* -- *MEMORY PROCESS*
-- Memory FSM State -- Memory FSM State
@ -512,30 +523,35 @@ begin
-- This process connects the Intermediate Output Signals to the actual output FIFOs -- This process connects the Intermediate Output Signals to the actual output FIFOs
output_prc : process(all) output_prc : process(all)
begin begin
endpoint_wr <= (others => '0'); wr_ue <= (others => '0');
rtps_wr <= '0'; wr_ro <= '0';
case (stage) is case (stage) is
when INFORM_ENDPOINTS_MATCH => when INFORM_ENDPOINTS_MATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
endpoint_wr <= endpoint_mask; wr_ue <= endpoint_mask;
end if; end if;
when INFORM_ENDPOINTS_UNMATCH => when INFORM_ENDPOINTS_UNMATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
endpoint_wr <= not endpoint_mask; wr_ue <= not endpoint_mask;
end if; end if;
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH => when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
endpoint_wr <= (others => '1'); wr_ue <= (others => '1');
end if; end if;
when LIVELINESS_UPDATE => when LIVELINESS_UPDATE =>
if (wr_sig = '1') then if (wr_sig = '1') then
endpoint_wr <= endpoint_mask; wr_ue <= endpoint_mask;
end if; end if;
when others => when others =>
rtps_wr <= wr_sig; wr_ro <= wr_sig;
end case; end case;
end process; end process;
data_out_ue <= data_out_sig;
data_out_ro <= data_out_sig;
last_word_out_ue <= last_word_out_sig;
last_word_out_ro <= last_word_out_sig;
-- Main State Machine -- Main State Machine
-- STATE DESCRIPTION -- STATE DESCRIPTION
-- IDLE Idle state. Initiates Participant Announcements, Heartbeat/Liveliness Assertions, Stale Participant Entry Checks ,and Packet Processing, in that priority order. -- IDLE Idle state. Initiates Participant Announcements, Heartbeat/Liveliness Assertions, Stale Participant Entry Checks ,and Packet Processing, in that priority order.
@ -666,10 +682,10 @@ begin
wr_sig <= '0'; wr_sig <= '0';
mem_opcode <= NOP; mem_opcode <= NOP;
mem_op_start <= '0'; mem_op_start <= '0';
last_word_out <= '0'; last_word_out_sig <= '0';
reset_endpoint_alive <= '0'; reset_endpoint_alive <= '0';
idle_sig <= '0'; idle_sig <= '0';
data_out <= (others => '0'); data_out_sig <= (others => '0');
mem_field_flags <= (others => '0'); mem_field_flags <= (others => '0');
extra_flags <= (others => '0'); extra_flags <= (others => '0');
mem_addr_update <= PARTICIPANT_MEMORY_MAX_ADDRESS; mem_addr_update <= PARTICIPANT_MEMORY_MAX_ADDRESS;
@ -1392,26 +1408,26 @@ begin
-- DONE -- DONE
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
-- Output FIFO Guard -- Output FIFO Guard
elsif ((endpoint_mask and endpoint_full) = (endpoint_full'range => '0')) then elsif ((endpoint_mask and full_ue) = (full_ue'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- Liveliness Assertion Opcode -- Liveliness Assertion Opcode
when 0 => when 0 =>
data_out <= OPCODE_LIVELINESS_UPDATE; data_out_sig <= OPCODE_LIVELINESS_UPDATE;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 1 => when 1 =>
data_out <= guid(0); data_out_sig <= guid(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 2 => when 2 =>
data_out <= guid(1); data_out_sig <= guid(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 3 => when 3 =>
data_out <= guid(2); data_out_sig <= guid(2);
last_word_out <= '1'; last_word_out_sig <= '1';
-- DONE -- DONE
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
@ -2880,54 +2896,54 @@ begin
assert check_mask(current_pmf, PMF_DEFAULT_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_pmf, PMF_DEFAULT_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if ((endpoint_mask and endpoint_full) = (endpoint_full'range => '0')) then if ((endpoint_mask and full_ue) = (full_ue'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- Match Opcode -- Match Opcode
when 0 => when 0 =>
data_out <= OPCODE_ENDPOINT_MATCH; data_out_sig <= OPCODE_ENDPOINT_MATCH;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 1 => when 1 =>
data_out <= guid(0); data_out_sig <= guid(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 2 => when 2 =>
data_out <= guid(1); data_out_sig <= guid(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 3 => when 3 =>
data_out <= guid(2); data_out_sig <= guid(2);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Entity ID -- Entity ID
when 4 => when 4 =>
data_out <= guid(3); data_out_sig <= guid(3);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- IPv4 Address -- IPv4 Address
when 5 => when 5 =>
-- If Endpoint did not set Address, use Participant Default -- If Endpoint did not set Address, use Participant Default
if (def_addr /= (def_addr'reverse_range => '0')) then if (def_addr /= (def_addr'reverse_range => '0')) then
data_out <= def_addr; data_out_sig <= def_addr;
else else
data_out <= participant_data.def_addr; data_out_sig <= participant_data.def_addr;
end if; end if;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- UDPv4 Port and Reader Flags -- UDPv4 Port and Reader Flags
when 6 => when 6 =>
-- Default -- Default
data_out <= (others => '0'); data_out_sig <= (others => '0');
last_word_out <= '1'; last_word_out_sig <= '1';
-- If Endpoint did not set Port, use Participant Default -- If Endpoint did not set Port, use Participant Default
if (def_port /= (def_port'reverse_range => '0')) then if (def_port /= (def_port'reverse_range => '0')) then
data_out(31 downto 16) <= def_port; data_out_sig(31 downto 16) <= def_port;
else else
data_out(31 downto 16) <= participant_data.def_port; data_out_sig(31 downto 16) <= participant_data.def_port;
end if; end if;
if (is_subscriber = '1') then if (is_subscriber = '1') then
data_out(15 downto 0) <= reader_flags; data_out_sig(15 downto 0) <= reader_flags;
end if; end if;
-- DONE -- DONE
@ -2940,30 +2956,30 @@ begin
end if; end if;
when INFORM_ENDPOINTS_UNMATCH => when INFORM_ENDPOINTS_UNMATCH =>
-- Output FIFO Guard -- Output FIFO Guard
if (((not endpoint_mask) and endpoint_full) = (endpoint_full'range => '0')) then if (((not endpoint_mask) and full_ue) = (full_ue'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- Match Opcode -- Match Opcode
when 0 => when 0 =>
data_out <= OPCODE_ENDPOINT_UNMATCH; data_out_sig <= OPCODE_ENDPOINT_UNMATCH;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 1 => when 1 =>
data_out <= guid(0); data_out_sig <= guid(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 2 => when 2 =>
data_out <= guid(1); data_out_sig <= guid(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 3 => when 3 =>
data_out <= guid(2); data_out_sig <= guid(2);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Entity ID -- Entity ID
when 4 => when 4 =>
data_out <= guid(3); data_out_sig <= guid(3);
last_word_out <= '1'; last_word_out_sig <= '1';
-- DONE -- DONE
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
@ -2973,26 +2989,26 @@ begin
end if; end if;
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH => when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
-- Output FIFO Guard -- Output FIFO Guard
if (endpoint_full = (endpoint_full'range => '0')) then if (full_ue = (full_ue'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- Match Opcode -- Match Opcode
when 0 => when 0 =>
data_out <= OPCODE_PARTICIPANT_UNMATCH; data_out_sig <= OPCODE_PARTICIPANT_UNMATCH;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 1 => when 1 =>
data_out <= guid(0); data_out_sig <= guid(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 2 => when 2 =>
data_out <= guid(1); data_out_sig <= guid(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 3 => when 3 =>
data_out <= guid(2); data_out_sig <= guid(2);
last_word_out <= '1'; last_word_out_sig <= '1';
-- Currently in Stale Check -- Currently in Stale Check
if (stale_check = '1') then if (stale_check = '1') then
@ -3015,48 +3031,48 @@ begin
assert check_mask(current_pmf, PMF_META_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_pmf, PMF_META_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE;
end if; end if;
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- OUTPUT HEADER -- OUTPUT HEADER
-- Src IPv4 Address -- Src IPv4 Address
when 0 => when 0 =>
data_out <= DEFAULT_IPv4_ADDRESS; data_out_sig <= DEFAULT_IPv4_ADDRESS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Dest IPv4 Address -- Dest IPv4 Address
when 1 => when 1 =>
-- Set Default Multicast Announce Address if Participant Announcement -- Set Default Multicast Announce Address if Participant Announcement
if (return_stage = SEND_PARTICIPANT_ANNOUNCEMENT) then if (return_stage = SEND_PARTICIPANT_ANNOUNCEMENT) then
data_out <= DEFAULT_IPv4_META_ADDRESS; data_out_sig <= DEFAULT_IPv4_META_ADDRESS;
else else
data_out <= participant_data.meta_addr; data_out_sig <= participant_data.meta_addr;
end if; end if;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Src and Dest UDPv4 Ports -- Src and Dest UDPv4 Ports
when 2 => when 2 =>
-- Set Default Multicast Announce Port if Participant Announcement -- Set Default Multicast Announce Port if Participant Announcement
if (return_stage = SEND_PARTICIPANT_ANNOUNCEMENT) then if (return_stage = SEND_PARTICIPANT_ANNOUNCEMENT) then
data_out <= META_IPv4_UNICAST_PORT & META_IPv4_MULTICAST_PORT; data_out_sig <= META_IPv4_UNICAST_PORT & META_IPv4_MULTICAST_PORT;
else else
data_out <= META_IPv4_UNICAST_PORT & participant_data.meta_port; data_out_sig <= META_IPv4_UNICAST_PORT & participant_data.meta_port;
end if; end if;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- RTPS MESSAGE HEADER -- RTPS MESSAGE HEADER
when 3 => when 3 =>
data_out <= PROTOCOL_RTPS; data_out_sig <= PROTOCOL_RTPS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 4 => when 4 =>
data_out <= PROTOCOLVERSION_2_4 & VENDORID; data_out_sig <= PROTOCOLVERSION_2_4 & VENDORID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 5 => when 5 =>
data_out <= GUIDPREFIX(0); data_out_sig <= GUIDPREFIX(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 6 => when 6 =>
data_out <= GUIDPREFIX(1); data_out_sig <= GUIDPREFIX(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 7 => when 7 =>
data_out <= GUIDPREFIX(2); data_out_sig <= GUIDPREFIX(2);
-- Continue with respective RTPS Submessage -- Continue with respective RTPS Submessage
stage_next <= return_stage; stage_next <= return_stage;
@ -3070,15 +3086,15 @@ begin
end if; end if;
end if; end if;
when SEND_PARTICIPANT_ANNOUNCEMENT => when SEND_PARTICIPANT_ANNOUNCEMENT =>
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
-- Send Participant Data -- Send Participant Data
data_out <= LOCAL_PARTICIPANT_DATA.data(participant_data_cnt); data_out_sig <= LOCAL_PARTICIPANT_DATA.data(participant_data_cnt);
-- Exit Condition -- Exit Condition
if (participant_data_cnt = (LOCAL_PARTICIPANT_DATA.length-1)) then if (participant_data_cnt = (LOCAL_PARTICIPANT_DATA.length-1)) then
last_word_out <= '1'; last_word_out_sig <= '1';
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
else else
@ -3092,115 +3108,115 @@ begin
if (mem_op_done = '1') then if (mem_op_done = '1') then
assert check_mask(current_pmf, PMF_PUB_SEQ_NR_FLAG or PMF_SUB_SEQ_NR_FLAG or PMF_MES_SEQ_NR_FLAG) severity FAILURE; assert check_mask(current_pmf, PMF_PUB_SEQ_NR_FLAG or PMF_SUB_SEQ_NR_FLAG or PMF_MES_SEQ_NR_FLAG) severity FAILURE;
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- ACKNACK RTPS SUBMESSAGE (Publication) -- ACKNACK RTPS SUBMESSAGE (Publication)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR; data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER; data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 1/2) -- Sequence Number Set (Bitmap Base 1/2)
when 3 => when 3 =>
data_out <= std_logic_vector(participant_data.pub_seq_nr(0)); data_out_sig <= std_logic_vector(participant_data.pub_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 2/2) -- Sequence Number Set (Bitmap Base 2/2)
when 4 => when 4 =>
data_out <= std_logic_vector(participant_data.pub_seq_nr(1)); data_out_sig <= std_logic_vector(participant_data.pub_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (NumBits) -- Sequence Number Set (NumBits)
when 5 => when 5 =>
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH)); data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap) -- Sequence Number Set (Bitmap)
when 6 => when 6 =>
-- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet) -- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet)
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist) -- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
data_out <= (others => '1'); data_out_sig <= (others => '1');
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 7 => when 7 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- ACKNACK RTPS SUBMESSAGE (Subscription) -- ACKNACK RTPS SUBMESSAGE (Subscription)
-- RTPS Submessage Header -- RTPS Submessage Header
when 8 => when 8 =>
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 9 => when 9 =>
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR; data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 10 => when 10 =>
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER; data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 1/2) -- Sequence Number Set (Bitmap Base 1/2)
when 11 => when 11 =>
data_out <= std_logic_vector(participant_data.sub_seq_nr(0)); data_out_sig <= std_logic_vector(participant_data.sub_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 2/2) -- Sequence Number Set (Bitmap Base 2/2)
when 12 => when 12 =>
data_out <= std_logic_vector(participant_data.sub_seq_nr(1)); data_out_sig <= std_logic_vector(participant_data.sub_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (NumBits) -- Sequence Number Set (NumBits)
when 13 => when 13 =>
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH)); data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap) -- Sequence Number Set (Bitmap)
when 14 => when 14 =>
-- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet) -- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet)
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist) -- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
data_out <= (others => '1'); data_out_sig <= (others => '1');
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 15 => when 15 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- ACKNACK RTPS SUBMESSAGE (Message) -- ACKNACK RTPS SUBMESSAGE (Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 16 => when 16 =>
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 17 => when 17 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 18 => when 18 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 1/2) -- Sequence Number Set (Bitmap Base 1/2)
when 19 => when 19 =>
data_out <= std_logic_vector(participant_data.mes_seq_nr(0)); data_out_sig <= std_logic_vector(participant_data.mes_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 2/2) -- Sequence Number Set (Bitmap Base 2/2)
when 20 => when 20 =>
data_out <= std_logic_vector(participant_data.mes_seq_nr(1)); data_out_sig <= std_logic_vector(participant_data.mes_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (NumBits) -- Sequence Number Set (NumBits)
when 21 => when 21 =>
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH)); data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap) -- Sequence Number Set (Bitmap)
when 22 => when 22 =>
-- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet) -- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet)
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist) -- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
data_out <= (others => '1'); data_out_sig <= (others => '1');
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 23 => when 23 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
last_word_out <= '1'; last_word_out_sig <= '1';
-- Continue -- Continue
stage_next <= PARTICIPANT_STALE_CHECK; stage_next <= PARTICIPANT_STALE_CHECK;
@ -3211,108 +3227,108 @@ begin
end if; end if;
end if; end if;
when SEND_HEARTBEAT => when SEND_HEARTBEAT =>
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- HEARTBEAT RTPS SUBMESSAGE (Publication) -- HEARTBEAT RTPS SUBMESSAGE (Publication)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR; data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER; data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 3 => when 3 =>
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(0)); data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 4 => when 4 =>
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(1)); data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 5 => when 5 =>
data_out <= std_logic_vector(PUB_SEQUENCENUMBER(0)); data_out_sig <= std_logic_vector(PUB_SEQUENCENUMBER(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 6 => when 6 =>
data_out <= std_logic_vector(PUB_SEQUENCENUMBER(1)); data_out_sig <= std_logic_vector(PUB_SEQUENCENUMBER(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 7 => when 7 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- HEARTBEAT RTPS SUBMESSAGE (Subscription) -- HEARTBEAT RTPS SUBMESSAGE (Subscription)
-- RTPS Submessage Header -- RTPS Submessage Header
when 8 => when 8 =>
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 9 => when 9 =>
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR; data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 10 => when 10 =>
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER; data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 11 => when 11 =>
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(0)); data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 12 => when 12 =>
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(1)); data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 13 => when 13 =>
data_out <= std_logic_vector(SUB_SEQUENCENUMBER(0)); data_out_sig <= std_logic_vector(SUB_SEQUENCENUMBER(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 14 => when 14 =>
data_out <= std_logic_vector(SUB_SEQUENCENUMBER(1)); data_out_sig <= std_logic_vector(SUB_SEQUENCENUMBER(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 15 => when 15 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- HEARTBEAT RTPS SUBMESSAGE (Message) -- HEARTBEAT RTPS SUBMESSAGE (Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 16 => when 16 =>
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 17 => when 17 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 18 => when 18 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 19 => when 19 =>
data_out <= std_logic_vector(man_live_seq_nr(0)); data_out_sig <= std_logic_vector(man_live_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 20 => when 20 =>
data_out <= std_logic_vector(man_live_seq_nr(1)); data_out_sig <= std_logic_vector(man_live_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 21 => when 21 =>
data_out <= std_logic_vector(auto_live_seq_nr(0)); data_out_sig <= std_logic_vector(auto_live_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 22 => when 22 =>
data_out <= std_logic_vector(auto_live_seq_nr(1)); data_out_sig <= std_logic_vector(auto_live_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 23 => when 23 =>
data_out <= std_logic_vector(count); data_out_sig <= std_logic_vector(count);
-- If manual and automatic sequence numbers are not consecutive, we have only asserted the automatic liveliness -- If manual and automatic sequence numbers are not consecutive, we have only asserted the automatic liveliness
if (live_gap_start /= auto_live_seq_nr) then if (live_gap_start /= auto_live_seq_nr) then
@ -3338,15 +3354,15 @@ begin
if (not check_mask(participant_data.extra_flags, EF_PUB_DATA_FLAG) or NUM_WRITERS = 0) then if (not check_mask(participant_data.extra_flags, EF_PUB_DATA_FLAG) or NUM_WRITERS = 0) then
stage_next <= SEND_SUB_DATA; stage_next <= SEND_SUB_DATA;
-- Output FIFO Guard -- Output FIFO Guard
elsif (rtps_full = '0') then elsif (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
-- Send Publisher Data -- Send Publisher Data
data_out <= WRITER_ENDPOINT_DATA.data(publisher_data_cnt); data_out_sig <= WRITER_ENDPOINT_DATA.data(publisher_data_cnt);
-- Exit Condition -- Exit Condition
if (publisher_data_cnt = (WRITER_ENDPOINT_DATA.length-1)) then if (publisher_data_cnt = (WRITER_ENDPOINT_DATA.length-1)) then
last_word_out <= '1'; last_word_out_sig <= '1';
-- If we still have Data to sent, continue -- If we still have Data to sent, continue
if (check_mask(participant_data.extra_flags, EF_SUB_DATA_FLAG) or check_mask(participant_data.extra_flags, EF_MES_DATA_FLAG)) then if (check_mask(participant_data.extra_flags, EF_SUB_DATA_FLAG) or check_mask(participant_data.extra_flags, EF_MES_DATA_FLAG)) then
stage_next <= SEND_HEADER; stage_next <= SEND_HEADER;
@ -3377,15 +3393,15 @@ begin
stage_next <= SEND_MES_MAN_LIVE; stage_next <= SEND_MES_MAN_LIVE;
cnt_next <= 0; cnt_next <= 0;
-- Output FIFO Guard -- Output FIFO Guard
elsif (rtps_full = '0') then elsif (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
-- Send Subscriber Data -- Send Subscriber Data
data_out <= READER_ENDPOINT_DATA.data(subscriber_data_cnt); data_out_sig <= READER_ENDPOINT_DATA.data(subscriber_data_cnt);
-- Exit Condition -- Exit Condition
if (subscriber_data_cnt = (READER_ENDPOINT_DATA.length-1)) then if (subscriber_data_cnt = (READER_ENDPOINT_DATA.length-1)) then
last_word_out <= '1'; last_word_out_sig <= '1';
-- If we still have Data to sent, continue -- If we still have Data to sent, continue
if (check_mask(participant_data.extra_flags, EF_MES_DATA_FLAG)) then if (check_mask(participant_data.extra_flags, EF_MES_DATA_FLAG)) then
stage_next <= SEND_HEADER; stage_next <= SEND_HEADER;
@ -3406,59 +3422,59 @@ begin
end if; end if;
when SEND_MES_MAN_LIVE => when SEND_MES_MAN_LIVE =>
-- Output FIFO Guard -- Output FIFO Guard
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- DATA RTPS SUBMESSAGE (Participant Message) -- DATA RTPS SUBMESSAGE (Participant Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16)); data_out_sig <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- ExtraFlags, octetsToInlineQoS -- ExtraFlags, octetsToInlineQoS
when 1 => when 1 =>
data_out <= x"0000" & std_logic_vector(to_unsigned(16, 16)); data_out_sig <= x"0000" & std_logic_vector(to_unsigned(16, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 2 => when 2 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 3 => when 3 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 4 => when 4 =>
data_out <= std_logic_vector(man_live_seq_nr(0)); data_out_sig <= std_logic_vector(man_live_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 5 => when 5 =>
data_out <= std_logic_vector(man_live_seq_nr(1)); data_out_sig <= std_logic_vector(man_live_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Serialized Payload Header -- Serialized Payload Header
when 6 => when 6 =>
data_out <= CDR_BE & x"0000"; data_out_sig <= CDR_BE & x"0000";
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Serialized Payload BEGIN -- Serialized Payload BEGIN
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 7 => when 7 =>
data_out <= GUIDPREFIX(0); data_out_sig <= GUIDPREFIX(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 8 => when 8 =>
data_out <= GUIDPREFIX(1); data_out_sig <= GUIDPREFIX(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 9 => when 9 =>
data_out <= GUIDPREFIX(2); data_out_sig <= GUIDPREFIX(2);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Participant Message Kind -- Participant Message Kind
when 10 => when 10 =>
data_out <= PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE; data_out_sig <= PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Data Length -- Data Length
when 11 => when 11 =>
data_out <= (others => '0'); data_out_sig <= (others => '0');
-- If manual and automatic sequence numbers are not consecutive, we need to send a GAP Message -- If manual and automatic sequence numbers are not consecutive, we need to send a GAP Message
if (live_gap_start /= auto_live_seq_nr) then if (live_gap_start /= auto_live_seq_nr) then
stage_next <= SEND_MES_GAP; stage_next <= SEND_MES_GAP;
@ -3473,104 +3489,104 @@ begin
end if; end if;
when SEND_MES_GAP => when SEND_MES_GAP =>
-- Output FIFO Guard -- Output FIFO Guard
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- DATA RTPS SUBMESSAGE (Participant Message) -- DATA RTPS SUBMESSAGE (Participant Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16)); data_out_sig <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP Start Sequence Number 1/2 -- GAP Start Sequence Number 1/2
when 3 => when 3 =>
data_out <= std_logic_vector(live_gap_start(0)); data_out_sig <= std_logic_vector(live_gap_start(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP Start Sequence Number 2/2 -- GAP Start Sequence Number 2/2
when 4 => when 4 =>
data_out <= std_logic_vector(live_gap_start(1)); data_out_sig <= std_logic_vector(live_gap_start(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP End Sequence Number Set (Bitmap Base 1/2) -- GAP End Sequence Number Set (Bitmap Base 1/2)
when 5 => when 5 =>
data_out <= std_logic_vector(live_gap_end(0)); data_out_sig <= std_logic_vector(live_gap_end(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP End Sequence Number Set (Bitmap Base 2/2) -- GAP End Sequence Number Set (Bitmap Base 2/2)
when 6 => when 6 =>
data_out <= std_logic_vector(live_gap_end(1)); data_out_sig <= std_logic_vector(live_gap_end(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP End Sequence Number Set (NumBits) -- GAP End Sequence Number Set (NumBits)
when 7 => when 7 =>
data_out <= (others => '0'); data_out_sig <= (others => '0');
stage_next <= SEND_MES_AUTO_LIVE; stage_next <= SEND_MES_AUTO_LIVE;
cnt_next <= 0; cnt_next <= 0;
when others => when others =>
null; null;
end case; end case;
end if; end if;
when SEND_MES_AUTO_LIVE => when SEND_MES_AUTO_LIVE =>
-- Output FIFO Guard -- Output FIFO Guard
if (rtps_full = '0') then if (full_ro = '0') then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
-- DATA RTPS SUBMESSAGE (Participant Message) -- DATA RTPS SUBMESSAGE (Participant Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16)); data_out_sig <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- ExtraFlags, octetsToInlineQoS -- ExtraFlags, octetsToInlineQoS
when 1 => when 1 =>
data_out <= x"0000" & std_logic_vector(to_unsigned(16, 16)); data_out_sig <= x"0000" & std_logic_vector(to_unsigned(16, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 2 => when 2 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 3 => when 3 =>
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER; data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 4 => when 4 =>
data_out <= std_logic_vector(auto_live_seq_nr(0)); data_out_sig <= std_logic_vector(auto_live_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 5 => when 5 =>
data_out <= std_logic_vector(auto_live_seq_nr(1)); data_out_sig <= std_logic_vector(auto_live_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Serialized Payload Header -- Serialized Payload Header
when 6 => when 6 =>
data_out <= CDR_BE & x"0000"; data_out_sig <= CDR_BE & x"0000";
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Serialized Payload BEGIN -- Serialized Payload BEGIN
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 7 => when 7 =>
data_out <= GUIDPREFIX(0); data_out_sig <= GUIDPREFIX(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 8 => when 8 =>
data_out <= GUIDPREFIX(1); data_out_sig <= GUIDPREFIX(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 9 => when 9 =>
data_out <= GUIDPREFIX(2); data_out_sig <= GUIDPREFIX(2);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Participant Message Kind -- Participant Message Kind
when 10 => when 10 =>
data_out <= PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE; data_out_sig <= PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Data Length -- Data Length
when 11 => when 11 =>
data_out <= (others => '0'); data_out_sig <= (others => '0');
last_word_out <= '1'; last_word_out_sig <= '1';
-- If we are in the middle of a liveliness assertion, find the next Participant destination -- If we are in the middle of a liveliness assertion, find the next Participant destination
if (is_live_assert = '1') then if (is_live_assert = '1') then
@ -3640,7 +3656,7 @@ begin
-- Force rd_sig low -- Force rd_sig low
rd_sig <= '0'; rd_sig <= '0';
-- Notify Endpoints of EOP -- Notify Endpoints of EOP
last_word_out <= '1'; -- TODO: Necessary? (We do not pass through input to output, so a EOP should not leave us "stranded" during a write out) last_word_out_sig <= '1'; -- TODO: Necessary? (We do not pass through input to output, so a EOP should not leave us "stranded" during a write out)
-- Continue parsing next Packet -- Continue parsing next Packet
stage_next <= IDLE; stage_next <= IDLE;
-- Reset Last Word In Latch -- Reset Last Word In Latch
@ -3655,7 +3671,7 @@ begin
-- Force rd_sig low -- Force rd_sig low
rd_sig <= '0'; rd_sig <= '0';
-- Notify Endpoints of EOP -- Notify Endpoints of EOP
last_word_out <= '1'; last_word_out_sig <= '1';
-- Invalid Parameter Length, Skip Packet -- Invalid Parameter Length, Skip Packet
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
-- Reset Parameter End -- Reset Parameter End

View File

@ -9,18 +9,21 @@ use work.rtps_config_package.all;
entity rtps_out is entity rtps_out is
generic ( generic (
-- Max Serialized Payload Size in a UDP Stream (Bytes) [MAX_PAYLOAD(65536) - IPv4_HEADER(20) - UDP_HEADER(8) + FORMAT_HEADER(16)] -- Max Serialized Payload Size in a UDP Stream (Bytes) [MAX_PAYLOAD(65536) - IPv4_HEADER(20) - UDP_HEADER(8) + FORMAT_HEADER(16)]
MAX_BUFFER_SIZE : natural := 65524/4 MAX_BUFFER_SIZE : natural := 65524/(WORD_WIDTH/BYTE_WIDTH)
); );
port ( port (
-- SYSTEM
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
-- INPUT
full : in std_logic;
wr : out std_logic;
data_in : in RTPS_OUT_DATA_TYPE; data_in : in RTPS_OUT_DATA_TYPE;
last_word_in: in std_logic_vector(0 to NUM_ENDPOINTS); last_word_in: in std_logic_vector(0 to NUM_ENDPOINTS);
rd : out std_logic_vector(0 to NUM_ENDPOINTS); -- OUTPUT
empty : in std_logic_vector(0 to NUM_ENDPOINTS); empty : in std_logic_vector(0 to NUM_ENDPOINTS);
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0); rd : out std_logic_vector(0 to NUM_ENDPOINTS);
wr : out std_logic; data_out : out std_logic_vector(WORD_WIDTH-1 downto 0)
full : in std_logic
); );
end entity; end entity;

View File

@ -28,21 +28,21 @@ entity rtps_reader is
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
time : in TIME_TYPE; time : in TIME_TYPE;
-- FROM RTPS_HANDLER (USER TRAFFIC) -- FROM RTPS HANDLER (USER TRAFFIC)
empty_user : in std_logic; empty_user : in std_logic;
rd_user : out std_logic; rd_user : out std_logic;
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_user : in std_logic; last_word_in_user : in std_logic;
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM RTPS BUILTIN ENDPOINT (META TRAFFIC)
empty_meta : in std_logic; empty_meta : in std_logic;
rd_meta : out std_logic; rd_meta : out std_logic;
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_meta : in std_logic; last_word_in_meta : in std_logic;
-- RTPS OUTPUT -- RTPS OUTPUT
wr_rtps : out std_logic; full_ro : in std_logic;
full_rtps : in std_logic; wr_ro : out std_logic;
last_word_out_rtps : out std_logic; data_out_ro : out std_logic_vector(WORD_WIDTH-1 downto 0);
data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0); last_word_out_ro : out std_logic;
-- TO HISTORY CACHE -- TO HISTORY CACHE
start_hc : out std_logic; start_hc : out std_logic;
opcode_hc : out HISTORY_CACHE_OPCODE_TYPE; opcode_hc : out HISTORY_CACHE_OPCODE_TYPE;
@ -435,13 +435,13 @@ begin
start_hc <= '0'; start_hc <= '0';
valid_out_hc <= '0'; valid_out_hc <= '0';
last_word_out_hc <= '0'; last_word_out_hc <= '0';
wr_rtps <= '0'; wr_ro <= '0';
last_word_out_rtps <= '0'; last_word_out_ro <= '0';
idle_sig <= '0'; idle_sig <= '0';
rd_guard := '0'; rd_guard := '0';
mem_field_flags <= (others => '0'); mem_field_flags <= (others => '0');
data_out_hc <= (others => '0'); data_out_hc <= (others => '0');
data_out_rtps <= (others => '0'); data_out_ro <= (others => '0');
mem_addr_update <= (others => '0'); mem_addr_update <= (others => '0');
@ -1557,38 +1557,38 @@ begin
assert check_mask(current_emf, EMF_IPV4_ADDR_FLAG or EMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_emf, EMF_IPV4_ADDR_FLAG or EMF_UDP_PORT_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- OUTPUT HEADER -- OUTPUT HEADER
-- Src IPv4 Address -- Src IPv4 Address
when 0 => when 0 =>
data_out_rtps <= DEFAULT_IPv4_ADDRESS; data_out_ro <= DEFAULT_IPv4_ADDRESS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Dest IPv4 Address -- Dest IPv4 Address
when 1 => when 1 =>
data_out_rtps <= mem_endpoint_data.addr; data_out_ro <= mem_endpoint_data.addr;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Src and Dest UDPv4 Ports -- Src and Dest UDPv4 Ports
when 2 => when 2 =>
data_out_rtps <= USER_IPv4_UNICAST_PORT & mem_endpoint_data.portn; data_out_ro <= USER_IPv4_UNICAST_PORT & mem_endpoint_data.portn;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- RTPS MESSAGE HEADER -- RTPS MESSAGE HEADER
when 3 => when 3 =>
data_out_rtps <= PROTOCOL_RTPS; data_out_ro <= PROTOCOL_RTPS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 4 => when 4 =>
data_out_rtps <= PROTOCOLVERSION_2_4 & VENDORID; data_out_ro <= PROTOCOLVERSION_2_4 & VENDORID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 5 => when 5 =>
data_out_rtps <= GUIDPREFIX(0); data_out_ro <= GUIDPREFIX(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 6 => when 6 =>
data_out_rtps <= GUIDPREFIX(1); data_out_ro <= GUIDPREFIX(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 7 => when 7 =>
data_out_rtps <= GUIDPREFIX(2); data_out_ro <= GUIDPREFIX(2);
-- Continue with respective RTPS Submessage -- Continue with respective RTPS Submessage
stage_next <= return_stage; stage_next <= return_stage;
@ -1606,45 +1606,45 @@ begin
assert check_mask(current_emf, EMF_ENTITYID_FLAG or EMF_NEXT_SEQ_NR_FLAG) severity FAILURE; assert check_mask(current_emf, EMF_ENTITYID_FLAG or EMF_NEXT_SEQ_NR_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- ACKNACK RTPS SUBMESSAGE -- ACKNACK RTPS SUBMESSAGE
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out_rtps <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, SUBMESSAGE_LENGTH_WIDTH)); data_out_ro <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, SUBMESSAGE_LENGTH_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out_rtps <= ENTITYID; data_out_ro <= ENTITYID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out_rtps <= mem_endpoint_data.guid(3); data_out_ro <= mem_endpoint_data.guid(3);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 1/2) -- Sequence Number Set (Bitmap Base 1/2)
when 3 => when 3 =>
data_out_rtps <= std_logic_vector(mem_endpoint_data.next_seq_nr(0)); data_out_ro <= std_logic_vector(mem_endpoint_data.next_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap Base 2/2) -- Sequence Number Set (Bitmap Base 2/2)
when 4 => when 4 =>
data_out_rtps <= std_logic_vector(mem_endpoint_data.next_seq_nr(1)); data_out_ro <= std_logic_vector(mem_endpoint_data.next_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (NumBits) -- Sequence Number Set (NumBits)
when 5 => when 5 =>
data_out_rtps <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH)); data_out_ro <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number Set (Bitmap) -- Sequence Number Set (Bitmap)
when 6 => when 6 =>
-- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet) -- NOTE: In order to avoid having to generate a variable sized bitmap, we always request the next 32 sequence numbers, even if they do not exist (yet)
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist) -- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
data_out_rtps <= (others => '1'); data_out_ro <= (others => '1');
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 7 => when 7 =>
data_out_rtps <= std_logic_vector(count); data_out_ro <= std_logic_vector(count);
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Stale Check in Progress -- Stale Check in Progress
if (stale_check = '1') then if (stale_check = '1') then

View File

@ -31,24 +31,24 @@ entity rtps_writer is
clk : in std_logic; clk : in std_logic;
reset : in std_logic; reset : in std_logic;
time : in TIME_TYPE; time : in TIME_TYPE;
-- FROM RTPS_HANDLER (USER TRAFFIC) -- FROM RTPS HANDLER (USER TRAFFIC)
empty_user : in std_logic; empty_user : in std_logic;
rd_user : out std_logic; rd_user : out std_logic;
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_user : in std_logic; last_word_in_user : in std_logic;
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM RTPS BUILTIN ENDPOINT (META TRAFFIC)
empty_meta : in std_logic; empty_meta : in std_logic;
rd_meta : out std_logic; rd_meta : out std_logic;
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_meta : in std_logic; last_word_in_meta : in std_logic;
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO RTPS BUILTIN ENDPOINT (META TRAFFIC)
alive_sig : out std_logic; alive_sig : out std_logic;
-- RTPS OUTPUT -- RTPS OUTPUT
wr_rtps : out std_logic; full_ro : in std_logic;
full_rtps : in std_logic; wr_ro : out std_logic;
last_word_out_rtps : out std_logic; data_out_ro : out std_logic_vector(WORD_WIDTH-1 downto 0);
data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0); last_word_out_ro : out std_logic;
-- FROM HC -- FROM HISTORY CACHE
liveliness_assertion : in std_logic; liveliness_assertion : in std_logic;
data_available : in std_logic; data_available : in std_logic;
start_hc : out std_logic; start_hc : out std_logic;
@ -328,10 +328,10 @@ architecture arch of rtps_writer is
alias final_flag : std_logic is rtps_flags(1); alias final_flag : std_logic is rtps_flags(1);
alias liveliness_flag : std_logic is rtps_flags(2); alias liveliness_flag : std_logic is rtps_flags(2);
-- RTPS OUT DATA SUBMESSAGE FLAGS -- RTPS OUT DATA SUBMESSAGE FLAGS
alias qos_flag : std_logic is data_out_rtps(17); alias qos_flag : std_logic is data_out_ro(17);
alias data_flag : std_logic is data_out_rtps(18); alias data_flag : std_logic is data_out_ro(18);
alias key_flag : std_logic is data_out_rtps(19); alias key_flag : std_logic is data_out_ro(19);
alias non_std_flag : std_logic is data_out_rtps(20); alias non_std_flag : std_logic is data_out_ro(20);
-- ACKNACK -- ACKNACK
alias nack_base : SEQUENCENUMBER_TYPE is sn_latch_1; alias nack_base : SEQUENCENUMBER_TYPE is sn_latch_1;
alias nack_base_next : SEQUENCENUMBER_TYPE is sn_latch_1_next; alias nack_base_next : SEQUENCENUMBER_TYPE is sn_latch_1_next;
@ -463,8 +463,8 @@ begin
alive_sig <= '0'; alive_sig <= '0';
rd_meta <= '0'; rd_meta <= '0';
rd_user <= '0'; rd_user <= '0';
wr_rtps <= '0'; wr_ro <= '0';
last_word_out_rtps <= '0'; last_word_out_ro <= '0';
mem_op_start <= '0'; mem_op_start <= '0';
start_hc <= '0'; start_hc <= '0';
ready_in_hc <= '0'; ready_in_hc <= '0';
@ -473,7 +473,7 @@ begin
seq_nr <= SEQUENCENUMBER_UNKNOWN; seq_nr <= SEQUENCENUMBER_UNKNOWN;
seq_nr_hc <= SEQUENCENUMBER_UNKNOWN; seq_nr_hc <= SEQUENCENUMBER_UNKNOWN;
mem_field_flags <= (others => '0'); mem_field_flags <= (others => '0');
data_out_rtps <= (others => '0'); data_out_ro <= (others => '0');
mem_addr_update <= (others => '0'); mem_addr_update <= (others => '0');
-- Assert Liveliness Latch Setter -- Assert Liveliness Latch Setter
@ -1639,38 +1639,38 @@ begin
assert check_mask(current_emf, EMF_IPV4_ADDR_FLAG or EMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_emf, EMF_IPV4_ADDR_FLAG or EMF_UDP_PORT_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- OUTPUT HEADER -- OUTPUT HEADER
-- Src IPv4 Address -- Src IPv4 Address
when 0 => when 0 =>
data_out_rtps <= DEFAULT_IPv4_ADDRESS; data_out_ro <= DEFAULT_IPv4_ADDRESS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Dest IPv4 Address -- Dest IPv4 Address
when 1 => when 1 =>
data_out_rtps <= mem_endpoint_data.addr; data_out_ro <= mem_endpoint_data.addr;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Src and Dest UDPv4 Ports -- Src and Dest UDPv4 Ports
when 2 => when 2 =>
data_out_rtps <= USER_IPv4_UNICAST_PORT & mem_endpoint_data.portn; data_out_ro <= USER_IPv4_UNICAST_PORT & mem_endpoint_data.portn;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- RTPS MESSAGE HEADER -- RTPS MESSAGE HEADER
when 3 => when 3 =>
data_out_rtps <= PROTOCOL_RTPS; data_out_ro <= PROTOCOL_RTPS;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 4 => when 4 =>
data_out_rtps <= PROTOCOLVERSION_2_4 & VENDORID; data_out_ro <= PROTOCOLVERSION_2_4 & VENDORID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 5 => when 5 =>
data_out_rtps <= GUIDPREFIX(0); data_out_ro <= GUIDPREFIX(0);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 6 => when 6 =>
data_out_rtps <= GUIDPREFIX(1); data_out_ro <= GUIDPREFIX(1);
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 7 => when 7 =>
data_out_rtps <= GUIDPREFIX(2); data_out_ro <= GUIDPREFIX(2);
-- Continue with respective RTPS Submessage -- Continue with respective RTPS Submessage
stage_next <= return_stage; stage_next <= return_stage;
@ -1682,22 +1682,22 @@ begin
end if; end if;
when SEND_INFO_TS => when SEND_INFO_TS =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- INFO_TS RTPS SUBMESSAGE -- INFO_TS RTPS SUBMESSAGE
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out_rtps <= SID_INFO_TS & "00000000" & std_logic_vector(to_unsigned(8, SUBMESSAGE_LENGTH_WIDTH)); data_out_ro <= SID_INFO_TS & "00000000" & std_logic_vector(to_unsigned(8, SUBMESSAGE_LENGTH_WIDTH));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Source Timestamp 1/2 -- Source Timestamp 1/2
when 1 => when 1 =>
data_out_rtps <= std_logic_vector(cc_source_timestamp(0)); data_out_ro <= std_logic_vector(cc_source_timestamp(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out_rtps <= std_logic_vector(cc_source_timestamp(1)); data_out_ro <= std_logic_vector(cc_source_timestamp(1));
stage_next <= SEND_DATA_A; stage_next <= SEND_DATA_A;
cnt_next <= 0; cnt_next <= 0;
@ -1713,41 +1713,41 @@ begin
assert check_mask(current_emf, EMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_emf, EMF_UDP_PORT_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
case (cnt) is case (cnt) is
-- DATA RTPS SUBMESSAGE -- DATA RTPS SUBMESSAGE
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out_rtps <= SID_DATA & "00000000" & std_logic_vector(to_unsigned(0, SUBMESSAGE_LENGTH_WIDTH)); data_out_ro <= SID_DATA & "00000000" & std_logic_vector(to_unsigned(0, SUBMESSAGE_LENGTH_WIDTH));
data_flag <= '1' when (cc_kind = ALIVE) else '0'; data_flag <= '1' when (cc_kind = ALIVE) else '0';
key_flag <= '1' when (WITH_KEY and cc_kind /= ALIVE) else '0'; key_flag <= '1' when (WITH_KEY and cc_kind /= ALIVE) else '0';
qos_flag <= '1' when (cc_kind /= ALIVE or WITH_KEY or mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') else '0'; qos_flag <= '1' when (cc_kind /= ALIVE or WITH_KEY or mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') else '0';
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- extraFlags, octetsToInlineQoS -- extraFlags, octetsToInlineQoS
when 1 => when 1 =>
data_out_rtps <= x"0000" & std_logic_vector(to_unsigned(16, 16)); data_out_ro <= x"0000" & std_logic_vector(to_unsigned(16, 16));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 2 => when 2 =>
data_out_rtps <= ENTITYID_UNKNOWN; data_out_ro <= ENTITYID_UNKNOWN;
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 3 => when 3 =>
data_out_rtps <= ENTITYID; data_out_ro <= ENTITYID;
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 4 => when 4 =>
data_out_rtps <= std_logic_vector(next_seq_nr(0)); data_out_ro <= std_logic_vector(next_seq_nr(0));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 5 => when 5 =>
data_out_rtps <= std_logic_vector(next_seq_nr(1)); data_out_ro <= std_logic_vector(next_seq_nr(1));
wr_rtps <= '1'; wr_ro <= '1';
-- Need to send Key Hash -- Need to send Key Hash
if (WITH_KEY) then if (WITH_KEY) then
@ -1764,7 +1764,7 @@ begin
stage_next <= SEND_DATA_B; stage_next <= SEND_DATA_B;
cnt_next <= 0; cnt_next <= 0;
else else
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Continue -- Continue
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
stage_next <= HANDLE_REQUESTS; stage_next <= HANDLE_REQUESTS;
@ -1783,40 +1783,40 @@ begin
when 6 => when 6 =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
data_out_rtps <= PID_KEY_HASH & std_logic_vector(to_unsigned(16, SUBMESSAGE_LENGTH_WIDTH)); data_out_ro <= PID_KEY_HASH & std_logic_vector(to_unsigned(16, SUBMESSAGE_LENGTH_WIDTH));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
end if; end if;
-- Key Hash 1/4 -- Key Hash 1/4
when 7 => when 7 =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
data_out_rtps <= std_logic_vector(cc_instance_handle(0)); data_out_ro <= std_logic_vector(cc_instance_handle(0));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
end if; end if;
-- Key Hash 2/4 -- Key Hash 2/4
when 8 => when 8 =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
data_out_rtps <= std_logic_vector(cc_instance_handle(1)); data_out_ro <= std_logic_vector(cc_instance_handle(1));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
end if; end if;
-- Key Hash 3/4 -- Key Hash 3/4
when 9 => when 9 =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
data_out_rtps <= std_logic_vector(cc_instance_handle(2)); data_out_ro <= std_logic_vector(cc_instance_handle(2));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
end if; end if;
-- Key Hash 4/4 -- Key Hash 4/4
when 10 => when 10 =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
data_out_rtps <= std_logic_vector(cc_instance_handle(3)); data_out_ro <= std_logic_vector(cc_instance_handle(3));
wr_rtps <= '1'; wr_ro <= '1';
-- Need to send Status Info -- Need to send Status Info
if (cc_kind /= ALIVE) then if (cc_kind /= ALIVE) then
@ -1831,20 +1831,20 @@ begin
end if; end if;
-- Status Info PID -- Status Info PID
when 11 => when 11 =>
data_out_rtps <= PID_STATUS_INFO & std_logic_vector(to_unsigned(4, SUBMESSAGE_LENGTH_WIDTH)); data_out_ro <= PID_STATUS_INFO & std_logic_vector(to_unsigned(4, SUBMESSAGE_LENGTH_WIDTH));
wr_rtps <= '1'; wr_ro <= '1';
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Status Info -- Status Info
when 12 => when 12 =>
data_out_rtps <= (others => '0'); data_out_ro <= (others => '0');
wr_rtps <= '1'; wr_ro <= '1';
case (cc_kind) is case (cc_kind) is
when ALIVE_FILTERED => when ALIVE_FILTERED =>
data_out_rtps(STATUS_INFO_FILTERED_FLAG) <= '1'; data_out_ro(STATUS_INFO_FILTERED_FLAG) <= '1';
when NOT_ALIVE_DISPOSED => when NOT_ALIVE_DISPOSED =>
data_out_rtps(STATUS_INFO_DISPOSED_FLAG) <= '1'; data_out_ro(STATUS_INFO_DISPOSED_FLAG) <= '1';
when NOT_ALIVE_UNREGISTERED => when NOT_ALIVE_UNREGISTERED =>
data_out_rtps(STATUS_INFO_UNREGISTERED_FLAG) <= '1'; data_out_ro(STATUS_INFO_UNREGISTERED_FLAG) <= '1';
when others => when others =>
null; null;
end case; end case;
@ -1858,14 +1858,14 @@ begin
end if; end if;
-- Sentinel -- Sentinel
when 13 => when 13 =>
data_out_rtps <= PID_SENTINEL & std_logic_vector(to_unsigned(0, PARAMETER_LENGTH_WIDTH)); data_out_ro <= PID_SENTINEL & std_logic_vector(to_unsigned(0, PARAMETER_LENGTH_WIDTH));
wr_rtps <= '1'; wr_ro <= '1';
-- Payload Available (DATA or Serialized Key) -- Payload Available (DATA or Serialized Key)
if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then
stage_next <= SEND_DATA_B; stage_next <= SEND_DATA_B;
else else
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Continue -- Continue
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
stage_next <= HANDLE_REQUESTS; stage_next <= HANDLE_REQUESTS;
@ -1887,9 +1887,9 @@ begin
end if; end if;
when SEND_INLINE_QOS => when SEND_INLINE_QOS =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
data_out_rtps <= INLINE_QOS.data(cnt3); data_out_ro <= INLINE_QOS.data(cnt3);
wr_rtps <= '1'; wr_ro <= '1';
-- Exit Condition -- Exit Condition
if (cnt3 = INLINE_QOS.length-1) then if (cnt3 = INLINE_QOS.length-1) then
@ -1897,7 +1897,7 @@ begin
if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then
stage_next <= SEND_DATA_B; stage_next <= SEND_DATA_B;
else else
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Continue -- Continue
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
stage_next <= HANDLE_REQUESTS; stage_next <= HANDLE_REQUESTS;
@ -1918,15 +1918,15 @@ begin
end if; end if;
when SEND_DATA_B => when SEND_DATA_B =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
ready_in_hc <= '1'; ready_in_hc <= '1';
if (valid_in_hc = '1') then if (valid_in_hc = '1') then
data_out_rtps <= data_in_hc; data_out_ro <= data_in_hc;
wr_rtps <= '1'; wr_ro <= '1';
if (last_word_in_hc = '1') then if (last_word_in_hc = '1') then
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Continue -- Continue
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
@ -1946,30 +1946,30 @@ begin
end if; end if;
when SEND_GAP_A => when SEND_GAP_A =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- DATA RTPS SUBMESSAGE (Participant Message) -- DATA RTPS SUBMESSAGE (Participant Message)
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
data_out_rtps <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16)); data_out_ro <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out_rtps <= ENTITYID_UNKNOWN; data_out_ro <= ENTITYID_UNKNOWN;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out_rtps <= ENTITYID; data_out_ro <= ENTITYID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP Start Sequence Number 1/2 -- GAP Start Sequence Number 1/2
when 3 => when 3 =>
data_out_rtps <= std_logic_vector(next_seq_nr(0)); data_out_ro <= std_logic_vector(next_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP Start Sequence Number 2/2 -- GAP Start Sequence Number 2/2
when 4 => when 4 =>
data_out_rtps <= std_logic_vector(next_seq_nr(1)); data_out_ro <= std_logic_vector(next_seq_nr(1));
-- Continue -- Continue
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
@ -1985,24 +1985,24 @@ begin
end if; end if;
when SEND_GAP_B => when SEND_GAP_B =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- GAP List Sequence Number Set (Bitmap Base 1/2) -- GAP List Sequence Number Set (Bitmap Base 1/2)
when 0 => when 0 =>
data_out_rtps <= std_logic_vector(next_seq_nr(0)); data_out_ro <= std_logic_vector(next_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP List Sequence Number Set (Bitmap Base 2/2) -- GAP List Sequence Number Set (Bitmap Base 2/2)
when 1 => when 1 =>
data_out_rtps <= std_logic_vector(next_seq_nr(1)); data_out_ro <= std_logic_vector(next_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- GAP List Sequence Number Set (NumBits) -- GAP List Sequence Number Set (NumBits)
when 2 => when 2 =>
data_out_rtps <= (others => '0'); data_out_ro <= (others => '0');
if (gap_is_last = '1') then if (gap_is_last = '1') then
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
-- Reset -- Reset
gap_is_last_next <= '0'; gap_is_last_next <= '0';
end if; end if;
@ -2018,47 +2018,47 @@ begin
-- Synthesis Guard -- Synthesis Guard
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS or LIVELINESS_QOS = MANUAL_BY_TOPIC_LIVELINESS_QOS) then if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS or LIVELINESS_QOS = MANUAL_BY_TOPIC_LIVELINESS_QOS) then
-- Output FIFO Guard -- Output FIFO Guard
if (full_rtps = '0') then if (full_ro = '0') then
wr_rtps <= '1'; wr_ro <= '1';
case (cnt) is case (cnt) is
-- HEARTBEAT RTPS SUBMESSAGE -- HEARTBEAT RTPS SUBMESSAGE
-- RTPS Submessage Header -- RTPS Submessage Header
when 0 => when 0 =>
if (assert_liveliness_latch = '1') then if (assert_liveliness_latch = '1') then
data_out_rtps <= SID_HEARTBEAT & "00000100" & std_logic_vector(to_unsigned(28, 16)); data_out_ro <= SID_HEARTBEAT & "00000100" & std_logic_vector(to_unsigned(28, 16));
else else
data_out_rtps <= SID_HEARTBEAT & "00000000" & std_logic_vector(to_unsigned(28, 16)); data_out_ro <= SID_HEARTBEAT & "00000000" & std_logic_vector(to_unsigned(28, 16));
end if; end if;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
data_out_rtps <= ENTITYID_UNKNOWN; data_out_ro <= ENTITYID_UNKNOWN;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
data_out_rtps <= ENTITYID; data_out_ro <= ENTITYID;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- First Sequence Number 1/2 -- First Sequence Number 1/2
when 3 => when 3 =>
data_out_rtps <= std_logic_vector(min_sn(0)); data_out_ro <= std_logic_vector(min_sn(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- First Sequence Number 2/2 -- First Sequence Number 2/2
when 4 => when 4 =>
data_out_rtps <= std_logic_vector(min_sn(1)); data_out_ro <= std_logic_vector(min_sn(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Last Sequence Number 1/2 -- Last Sequence Number 1/2
when 5 => when 5 =>
data_out_rtps <= std_logic_vector(last_seq_nr(0)); data_out_ro <= std_logic_vector(last_seq_nr(0));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Last Sequence Number 2/2 -- Last Sequence Number 2/2
when 6 => when 6 =>
data_out_rtps <= std_logic_vector(last_seq_nr(1)); data_out_ro <= std_logic_vector(last_seq_nr(1));
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
-- Count -- Count
when 7 => when 7 =>
data_out_rtps <= std_logic_vector(count); data_out_ro <= std_logic_vector(count);
last_word_out_rtps <= '1'; last_word_out_ro <= '1';
stage_next <= HANDLE_HEARTBEATS; stage_next <= HANDLE_HEARTBEATS;
cnt_next <= 1; cnt_next <= 1;