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:
parent
399bd2bbda
commit
e87d84ba24
@ -9,8 +9,10 @@ entity FWFT_FIFO is
|
||||
);
|
||||
port
|
||||
(
|
||||
reset : in std_logic;
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
|
||||
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
write : in std_logic;
|
||||
read : in std_logic;
|
||||
|
||||
@ -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);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -76,20 +76,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => TIME_ZERO,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => TIME_ZERO,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -595,10 +602,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -606,7 +613,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -645,8 +652,8 @@ begin
|
||||
output_check_prc : process(all)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB_out.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -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);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -149,20 +149,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => 3
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => TIME_ZERO,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => TIME_ZERO,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -897,10 +904,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -908,7 +915,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -948,8 +955,8 @@ begin
|
||||
begin
|
||||
check_done <= '0';
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -56,10 +56,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test3 is
|
||||
type TEST_STAGE_TYPE is (IDLE, BUSY);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -97,20 +97,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => TIME_ZERO,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => TIME_ZERO,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -1244,10 +1251,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -1255,7 +1262,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -1294,8 +1301,8 @@ begin
|
||||
output_check_prc : process(all)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB_out.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -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);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -74,20 +74,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => TIME_ZERO,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => TIME_ZERO,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -1765,10 +1772,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -1776,7 +1783,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -1815,8 +1822,8 @@ begin
|
||||
output_check_prc : process(all)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB_out.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -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);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -70,20 +70,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => test_time,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => test_time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -301,10 +308,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -312,7 +319,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -351,8 +358,8 @@ begin
|
||||
output_check_prc : process(all)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB_out.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -23,10 +23,10 @@ architecture testbench of L0_rtps_builtin_endpoint_test6 is
|
||||
type TEST_STAGE_TYPE is (IDLE, BUSY);
|
||||
|
||||
-- *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 endpoint_wr, endpoint_full : 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 wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (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;
|
||||
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
signal packet_sent : std_logic := '0';
|
||||
@ -57,20 +57,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => 2
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => data_out,
|
||||
last_word_in => last_word_in,
|
||||
time => TIME_ZERO,
|
||||
endpoint_full => endpoint_full,
|
||||
endpoint_wr => endpoint_wr,
|
||||
rtps_wr => open,
|
||||
rtps_full => '0',
|
||||
last_word_out => last_word_out,
|
||||
alive => (others => '0')
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => TIME_ZERO,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => (others => '0'),
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => full_ue,
|
||||
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
|
||||
@ -278,10 +285,10 @@ begin
|
||||
|
||||
endpoint_full_prc : process
|
||||
begin
|
||||
endpoint_full <= (others => '0');
|
||||
wait until (or endpoint_wr) = '1';
|
||||
full_ue <= (others => '0');
|
||||
wait until (or wr_ue) = '1';
|
||||
wait until rising_edge(clk);
|
||||
endpoint_full <= (others => '1');
|
||||
full_ue <= (others => '1');
|
||||
wait until rising_edge(clk);
|
||||
end process;
|
||||
|
||||
@ -289,7 +296,7 @@ begin
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
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 process;
|
||||
|
||||
@ -329,8 +336,8 @@ begin
|
||||
begin
|
||||
check_done <= '0';
|
||||
if rising_edge(clk) then
|
||||
if (endpoint_wr /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(endpoint_wr & last_word_out & data_out);
|
||||
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then
|
||||
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue);
|
||||
end if;
|
||||
if (stim_done = '1' and SB_out.empty) then
|
||||
check_done <= '1';
|
||||
|
||||
@ -98,10 +98,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -98,10 +98,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -86,10 +86,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => wr_rtps,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => wr_rtps,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -86,10 +86,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -86,10 +86,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => wr_rtps,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => wr_rtps,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -86,10 +86,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -86,10 +86,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -82,10 +82,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -82,10 +82,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
start_hc => start_hc,
|
||||
opcode_hc => opcode_hc,
|
||||
ack_hc => ack_hc,
|
||||
|
||||
@ -97,10 +97,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
liveliness_assertion => '0',
|
||||
data_available => '0',
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -97,10 +97,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
liveliness_assertion => '0',
|
||||
data_available => '0',
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -81,10 +81,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => open,
|
||||
full_rtps => '0',
|
||||
last_word_out_rtps => open,
|
||||
data_out_rtps => open,
|
||||
wr_ro => open,
|
||||
full_ro => '0',
|
||||
last_word_out_ro => open,
|
||||
data_out_ro => open,
|
||||
liveliness_assertion => '0',
|
||||
data_available => '0',
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -389,20 +389,27 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => 1
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
data_out => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => last_word_in,
|
||||
time => test_time,
|
||||
endpoint_full => (others => '0'),
|
||||
endpoint_wr => open,
|
||||
rtps_wr => fifo_wr,
|
||||
rtps_full => fifo_full,
|
||||
last_word_out => fifo_in(WORD_WIDTH),
|
||||
alive => alive
|
||||
-- SYSTEM
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => test_time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => in_empty or packet_sent,
|
||||
rd => rd_sig,
|
||||
data_in => data_in,
|
||||
last_word_in => last_word_in,
|
||||
-- FROM USER ENDPOINT
|
||||
alive => alive,
|
||||
-- TO USER ENDPOINT
|
||||
full_ue => (others => '0'),
|
||||
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)
|
||||
|
||||
@ -105,10 +105,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
start_hc => open,
|
||||
opcode_hc => open,
|
||||
ack_hc => '1',
|
||||
|
||||
@ -106,10 +106,10 @@ begin
|
||||
rd_meta => rd_meta,
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
start_hc => open,
|
||||
opcode_hc => open,
|
||||
ack_hc => '1',
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -104,10 +104,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => '0',
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -103,10 +103,10 @@ begin
|
||||
data_in_meta => data_in_meta,
|
||||
last_word_in_meta => last_word_in_meta,
|
||||
alive_sig => open,
|
||||
wr_rtps => fifo_wr,
|
||||
full_rtps => fifo_full,
|
||||
last_word_out_rtps => fifo_in(WORD_WIDTH),
|
||||
data_out_rtps => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
wr_ro => fifo_wr,
|
||||
full_ro => fifo_full,
|
||||
last_word_out_ro => fifo_in(WORD_WIDTH),
|
||||
data_out_ro => fifo_in(WORD_WIDTH-1 downto 0),
|
||||
liveliness_assertion => liveliness_assertion,
|
||||
data_available => data_available,
|
||||
start_hc => start_hc,
|
||||
|
||||
@ -244,10 +244,10 @@ begin
|
||||
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC)
|
||||
alive_sig => alive_sig_rtps(0),
|
||||
-- RTPS OUTPUT
|
||||
wr_rtps => wr_rtps_out(0),
|
||||
full_rtps => full_rtps_out(0),
|
||||
data_out_rtps => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_in_rtps_out(0)(WORD_WIDTH),
|
||||
wr_ro => wr_rtps_out(0),
|
||||
full_ro => full_rtps_out(0),
|
||||
data_out_ro => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_in_rtps_out(0)(WORD_WIDTH),
|
||||
-- FROM HC
|
||||
liveliness_assertion => liveliness_assertion_dds_rtps,
|
||||
data_available => data_available_dds_rtps,
|
||||
@ -273,27 +273,29 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => 5
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => empty_rh(NUM_ENDPOINTS),
|
||||
rd => rd_rh(NUM_ENDPOINTS),
|
||||
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
|
||||
-- TO RTPS ENDPOINTS
|
||||
endpoint_full => full_rtps(0 to NUM_ENDPOINTS-1),
|
||||
endpoint_wr => wr_rtps(0 to NUM_ENDPOINTS-1),
|
||||
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
|
||||
empty => empty_rh(NUM_ENDPOINTS),
|
||||
rd => rd_rh(NUM_ENDPOINTS),
|
||||
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
|
||||
-- FROM USER ENDPOINTS
|
||||
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
|
||||
-- TO USER ENDPOINTS
|
||||
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
|
||||
rtps_full => full_rtps_out(NUM_ENDPOINTS),
|
||||
rtps_wr => wr_rtps_out(NUM_ENDPOINTS),
|
||||
last_word_out => last_word_out_rbe,
|
||||
data_out => data_out_rbe
|
||||
full_ro => full_rtps_out(NUM_ENDPOINTS),
|
||||
wr_ro => wr_rtps_out(NUM_ENDPOINTS),
|
||||
data_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
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_out(NUM_ENDPOINTS) <= last_word_out_rbe & data_out_rbe;
|
||||
|
||||
rtps_handler_w_inst : entity Testbench_Lib2.rtps_handler(arch)
|
||||
port map (
|
||||
|
||||
@ -305,10 +305,10 @@ begin
|
||||
data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in_meta => data_out_rtps(0)(WORD_WIDTH),
|
||||
-- RTPS OUTPUT
|
||||
wr_rtps => wr_rtps_out(0),
|
||||
full_rtps => full_rtps_out(0),
|
||||
data_out_rtps => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_rtps => data_in_rtps_out(0)(WORD_WIDTH),
|
||||
wr_ro => wr_rtps_out(0),
|
||||
full_ro => full_rtps_out(0),
|
||||
data_out_ro => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0),
|
||||
last_word_out_ro => data_in_rtps_out(0)(WORD_WIDTH),
|
||||
-- TO HISTORY CACHE
|
||||
start_hc => start_dds_rtps,
|
||||
opcode_hc => opcode_dds_rtps,
|
||||
@ -326,27 +326,29 @@ begin
|
||||
MAX_REMOTE_PARTICIPANTS => 5
|
||||
)
|
||||
port map (
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
clk => clk,
|
||||
reset => reset,
|
||||
time => time,
|
||||
-- FROM RTPS HANDLER
|
||||
empty => empty_rh(NUM_ENDPOINTS),
|
||||
rd => rd_rh(NUM_ENDPOINTS),
|
||||
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
|
||||
-- TO RTPS ENDPOINTS
|
||||
endpoint_full => full_rtps(0 to NUM_ENDPOINTS-1),
|
||||
endpoint_wr => wr_rtps(0 to NUM_ENDPOINTS-1),
|
||||
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
|
||||
empty => empty_rh(NUM_ENDPOINTS),
|
||||
rd => rd_rh(NUM_ENDPOINTS),
|
||||
data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH),
|
||||
-- FROM USER ENDPOINTS
|
||||
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
|
||||
-- TO USER ENDPOINTS
|
||||
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
|
||||
rtps_full => full_rtps_out(NUM_ENDPOINTS),
|
||||
rtps_wr => wr_rtps_out(NUM_ENDPOINTS),
|
||||
last_word_out => last_word_out_rbe,
|
||||
data_out => data_out_rbe
|
||||
full_ro => full_rtps_out(NUM_ENDPOINTS),
|
||||
wr_ro => wr_rtps_out(NUM_ENDPOINTS),
|
||||
data_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0),
|
||||
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_out(NUM_ENDPOINTS) <= last_word_out_rbe & data_out_rbe;
|
||||
|
||||
rtps_handler_r_inst : entity Testbench_Lib3.rtps_handler(arch)
|
||||
port map (
|
||||
|
||||
@ -120,7 +120,7 @@ begin
|
||||
|
||||
fifo_r_w_inst : entity work.FWFT_FIFO(arch)
|
||||
generic map (
|
||||
FIFO_DEPTH => 65536,
|
||||
FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
|
||||
DATA_WIDTH => WORD_WIDTH
|
||||
)
|
||||
port map
|
||||
@ -138,7 +138,7 @@ begin
|
||||
|
||||
fifo_w_r_inst : entity work.FWFT_FIFO(arch)
|
||||
generic map (
|
||||
FIFO_DEPTH => 65536,
|
||||
FIFO_DEPTH => 65536/(WORD_WIDTH/BYTE_WIDTH),
|
||||
DATA_WIDTH => WORD_WIDTH
|
||||
)
|
||||
port map
|
||||
|
||||
@ -4,17 +4,18 @@ use ieee.numeric_std.all;
|
||||
|
||||
entity key_hash_generator is
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
|
||||
-- CONTROL
|
||||
start : in std_logic;
|
||||
ack : out std_logic;
|
||||
|
||||
-- INPUT
|
||||
data_in : in std_logic_vector(7 downto 0);
|
||||
valid_in : in std_logic;
|
||||
ready_in : out std_logic;
|
||||
last_word_in : in std_logic;
|
||||
|
||||
-- OUTPUT
|
||||
key_hash : out std_logic_vector(127 downto 0);
|
||||
done : out std_logic
|
||||
);
|
||||
|
||||
@ -7,20 +7,21 @@ use work.rtps_config_package.all;
|
||||
|
||||
entity key_holder is
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
|
||||
-- CONTROL
|
||||
start : in std_logic;
|
||||
opcode : in KEY_HOLDER_OPCODE_TYPE;
|
||||
ack : out std_logic;
|
||||
decode_error : out std_logic;
|
||||
abort : in std_logic;
|
||||
|
||||
-- INPUT
|
||||
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
valid_in : in std_logic;
|
||||
ready_in : out std_logic;
|
||||
last_word_in : in std_logic;
|
||||
|
||||
-- OUTPUT
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
valid_out : out std_logic;
|
||||
ready_out : in std_logic;
|
||||
|
||||
@ -10,8 +10,10 @@ entity mem_ctrl is
|
||||
MAX_BURST_LENGTH : natural
|
||||
);
|
||||
port (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
|
||||
addr : in std_logic_vector(ADDR_WIDTH-1 downto 0);
|
||||
read : in std_logic;
|
||||
ready_in : out std_logic;
|
||||
|
||||
@ -12,20 +12,27 @@ entity rtps_builtin_endpoint is
|
||||
MAX_REMOTE_PARTICIPANTS : natural := 50
|
||||
);
|
||||
port (
|
||||
clk : in std_logic; -- Input Clock
|
||||
reset : in std_logic; -- Synchronous Reset
|
||||
empty : in std_logic; -- Input FIFO empty flag
|
||||
rd : out std_logic; -- Input FIFO read signal
|
||||
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); -- Input FIFO data signal
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
endpoint_full : in std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
endpoint_wr : out std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
rtps_wr : out std_logic;
|
||||
rtps_full : in std_logic;
|
||||
last_word_out : out std_logic;
|
||||
alive : in std_logic_vector(0 to NUM_ENDPOINTS-1)
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
-- FROM RTPS HANDLER
|
||||
empty : in std_logic;
|
||||
rd : out std_logic;
|
||||
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in : in std_logic;
|
||||
-- FROM USER ENDPOINTS
|
||||
alive : in std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||
-- TO USER ENDPOINTS
|
||||
full_ue : 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;
|
||||
|
||||
@ -351,6 +358,10 @@ architecture arch of rtps_builtin_endpoint is
|
||||
signal idle_sig : std_logic := '0';
|
||||
-- Signifies that we received an Unregister/Dispose Status Info
|
||||
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 FSM State
|
||||
@ -512,30 +523,35 @@ begin
|
||||
-- This process connects the Intermediate Output Signals to the actual output FIFOs
|
||||
output_prc : process(all)
|
||||
begin
|
||||
endpoint_wr <= (others => '0');
|
||||
rtps_wr <= '0';
|
||||
wr_ue <= (others => '0');
|
||||
wr_ro <= '0';
|
||||
case (stage) is
|
||||
when INFORM_ENDPOINTS_MATCH =>
|
||||
if (wr_sig = '1') then
|
||||
endpoint_wr <= endpoint_mask;
|
||||
wr_ue <= endpoint_mask;
|
||||
end if;
|
||||
when INFORM_ENDPOINTS_UNMATCH =>
|
||||
if (wr_sig = '1') then
|
||||
endpoint_wr <= not endpoint_mask;
|
||||
wr_ue <= not endpoint_mask;
|
||||
end if;
|
||||
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
|
||||
if (wr_sig = '1') then
|
||||
endpoint_wr <= (others => '1');
|
||||
wr_ue <= (others => '1');
|
||||
end if;
|
||||
when LIVELINESS_UPDATE =>
|
||||
if (wr_sig = '1') then
|
||||
endpoint_wr <= endpoint_mask;
|
||||
wr_ue <= endpoint_mask;
|
||||
end if;
|
||||
when others =>
|
||||
rtps_wr <= wr_sig;
|
||||
wr_ro <= wr_sig;
|
||||
end case;
|
||||
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
|
||||
-- STATE DESCRIPTION
|
||||
-- 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';
|
||||
mem_opcode <= NOP;
|
||||
mem_op_start <= '0';
|
||||
last_word_out <= '0';
|
||||
last_word_out_sig <= '0';
|
||||
reset_endpoint_alive <= '0';
|
||||
idle_sig <= '0';
|
||||
data_out <= (others => '0');
|
||||
data_out_sig <= (others => '0');
|
||||
mem_field_flags <= (others => '0');
|
||||
extra_flags <= (others => '0');
|
||||
mem_addr_update <= PARTICIPANT_MEMORY_MAX_ADDRESS;
|
||||
@ -1392,26 +1408,26 @@ begin
|
||||
-- DONE
|
||||
stage_next <= SKIP_PACKET;
|
||||
-- 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';
|
||||
|
||||
case (cnt) is
|
||||
-- Liveliness Assertion Opcode
|
||||
when 0 =>
|
||||
data_out <= OPCODE_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= OPCODE_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 1/3
|
||||
when 1 =>
|
||||
data_out <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 2 =>
|
||||
data_out <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 3 =>
|
||||
data_out <= guid(2);
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= guid(2);
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- DONE
|
||||
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;
|
||||
|
||||
-- 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';
|
||||
|
||||
case (cnt) is
|
||||
-- Match Opcode
|
||||
when 0 =>
|
||||
data_out <= OPCODE_ENDPOINT_MATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= OPCODE_ENDPOINT_MATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 1/3
|
||||
when 1 =>
|
||||
data_out <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 2 =>
|
||||
data_out <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 3 =>
|
||||
data_out <= guid(2);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(2);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Entity ID
|
||||
when 4 =>
|
||||
data_out <= guid(3);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(3);
|
||||
cnt_next <= cnt + 1;
|
||||
-- IPv4 Address
|
||||
when 5 =>
|
||||
-- If Endpoint did not set Address, use Participant Default
|
||||
if (def_addr /= (def_addr'reverse_range => '0')) then
|
||||
data_out <= def_addr;
|
||||
data_out_sig <= def_addr;
|
||||
else
|
||||
data_out <= participant_data.def_addr;
|
||||
data_out_sig <= participant_data.def_addr;
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- UDPv4 Port and Reader Flags
|
||||
when 6 =>
|
||||
-- Default
|
||||
data_out <= (others => '0');
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= (others => '0');
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- If Endpoint did not set Port, use Participant Default
|
||||
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
|
||||
data_out(31 downto 16) <= participant_data.def_port;
|
||||
data_out_sig(31 downto 16) <= participant_data.def_port;
|
||||
end if;
|
||||
|
||||
if (is_subscriber = '1') then
|
||||
data_out(15 downto 0) <= reader_flags;
|
||||
data_out_sig(15 downto 0) <= reader_flags;
|
||||
end if;
|
||||
|
||||
-- DONE
|
||||
@ -2940,30 +2956,30 @@ begin
|
||||
end if;
|
||||
when INFORM_ENDPOINTS_UNMATCH =>
|
||||
-- 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';
|
||||
|
||||
case (cnt) is
|
||||
-- Match Opcode
|
||||
when 0 =>
|
||||
data_out <= OPCODE_ENDPOINT_UNMATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= OPCODE_ENDPOINT_UNMATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 1/3
|
||||
when 1 =>
|
||||
data_out <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 2 =>
|
||||
data_out <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 3 =>
|
||||
data_out <= guid(2);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(2);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Entity ID
|
||||
when 4 =>
|
||||
data_out <= guid(3);
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= guid(3);
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- DONE
|
||||
stage_next <= SKIP_PACKET;
|
||||
@ -2973,26 +2989,26 @@ begin
|
||||
end if;
|
||||
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
|
||||
-- Output FIFO Guard
|
||||
if (endpoint_full = (endpoint_full'range => '0')) then
|
||||
if (full_ue = (full_ue'range => '0')) then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- Match Opcode
|
||||
when 0 =>
|
||||
data_out <= OPCODE_PARTICIPANT_UNMATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= OPCODE_PARTICIPANT_UNMATCH;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 1/3
|
||||
when 1 =>
|
||||
data_out <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 2 =>
|
||||
data_out <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= guid(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 3 =>
|
||||
data_out <= guid(2);
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= guid(2);
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- Currently in Stale Check
|
||||
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;
|
||||
end if;
|
||||
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- OUTPUT HEADER
|
||||
-- Src IPv4 Address
|
||||
when 0 =>
|
||||
data_out <= DEFAULT_IPv4_ADDRESS;
|
||||
data_out_sig <= DEFAULT_IPv4_ADDRESS;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Dest IPv4 Address
|
||||
when 1 =>
|
||||
-- Set Default Multicast Announce Address if Participant Announcement
|
||||
if (return_stage = SEND_PARTICIPANT_ANNOUNCEMENT) then
|
||||
data_out <= DEFAULT_IPv4_META_ADDRESS;
|
||||
data_out_sig <= DEFAULT_IPv4_META_ADDRESS;
|
||||
else
|
||||
data_out <= participant_data.meta_addr;
|
||||
data_out_sig <= participant_data.meta_addr;
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Src and Dest UDPv4 Ports
|
||||
when 2 =>
|
||||
-- Set Default Multicast Announce Port if Participant Announcement
|
||||
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
|
||||
data_out <= META_IPv4_UNICAST_PORT & participant_data.meta_port;
|
||||
data_out_sig <= META_IPv4_UNICAST_PORT & participant_data.meta_port;
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- RTPS MESSAGE HEADER
|
||||
when 3 =>
|
||||
data_out <= PROTOCOL_RTPS;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= PROTOCOL_RTPS;
|
||||
cnt_next <= cnt + 1;
|
||||
when 4 =>
|
||||
data_out <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
cnt_next <= cnt + 1;
|
||||
when 5 =>
|
||||
data_out <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
when 6 =>
|
||||
data_out <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
when 7 =>
|
||||
data_out <= GUIDPREFIX(2);
|
||||
data_out_sig <= GUIDPREFIX(2);
|
||||
|
||||
-- Continue with respective RTPS Submessage
|
||||
stage_next <= return_stage;
|
||||
@ -3070,15 +3086,15 @@ begin
|
||||
end if;
|
||||
end if;
|
||||
when SEND_PARTICIPANT_ANNOUNCEMENT =>
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
-- Send Participant Data
|
||||
data_out <= LOCAL_PARTICIPANT_DATA.data(participant_data_cnt);
|
||||
data_out_sig <= LOCAL_PARTICIPANT_DATA.data(participant_data_cnt);
|
||||
|
||||
-- Exit Condition
|
||||
if (participant_data_cnt = (LOCAL_PARTICIPANT_DATA.length-1)) then
|
||||
last_word_out <= '1';
|
||||
last_word_out_sig <= '1';
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
@ -3092,115 +3108,115 @@ begin
|
||||
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;
|
||||
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- ACKNACK RTPS SUBMESSAGE (Publication)
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 1/2)
|
||||
when 3 =>
|
||||
data_out <= std_logic_vector(participant_data.pub_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.pub_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 2/2)
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(participant_data.pub_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.pub_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (NumBits)
|
||||
when 5 =>
|
||||
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap)
|
||||
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)
|
||||
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
|
||||
data_out <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 7 =>
|
||||
data_out <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
-- ACKNACK RTPS SUBMESSAGE (Subscription)
|
||||
-- RTPS Submessage Header
|
||||
when 8 =>
|
||||
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 9 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 10 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 1/2)
|
||||
when 11 =>
|
||||
data_out <= std_logic_vector(participant_data.sub_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.sub_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 2/2)
|
||||
when 12 =>
|
||||
data_out <= std_logic_vector(participant_data.sub_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.sub_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (NumBits)
|
||||
when 13 =>
|
||||
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap)
|
||||
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)
|
||||
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
|
||||
data_out <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 15 =>
|
||||
data_out <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
-- ACKNACK RTPS SUBMESSAGE (Message)
|
||||
-- RTPS Submessage Header
|
||||
when 16 =>
|
||||
data_out <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_ACKNACK & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 17 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 18 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 1/2)
|
||||
when 19 =>
|
||||
data_out <= std_logic_vector(participant_data.mes_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.mes_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 2/2)
|
||||
when 20 =>
|
||||
data_out <= std_logic_vector(participant_data.mes_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(participant_data.mes_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (NumBits)
|
||||
when 21 =>
|
||||
data_out <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(to_unsigned(CDR_LONG_WIDTH, CDR_LONG_WIDTH));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap)
|
||||
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)
|
||||
-- XXX: Assumes correct implementation of the RTPS Protocol (i.e. Writer ignores requested SNs that do not exist)
|
||||
data_out <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= (others => '1');
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 23 =>
|
||||
data_out <= std_logic_vector(count);
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= std_logic_vector(count);
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- Continue
|
||||
stage_next <= PARTICIPANT_STALE_CHECK;
|
||||
@ -3211,108 +3227,108 @@ begin
|
||||
end if;
|
||||
end if;
|
||||
when SEND_HEARTBEAT =>
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- HEARTBEAT RTPS SUBMESSAGE (Publication)
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 3 =>
|
||||
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 5 =>
|
||||
data_out <= std_logic_vector(PUB_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(PUB_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 6 =>
|
||||
data_out <= std_logic_vector(PUB_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(PUB_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 7 =>
|
||||
data_out <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
-- HEARTBEAT RTPS SUBMESSAGE (Subscription)
|
||||
-- RTPS Submessage Header
|
||||
when 8 =>
|
||||
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 9 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 10 =>
|
||||
data_out <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 11 =>
|
||||
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 12 =>
|
||||
data_out <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(FIRST_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 13 =>
|
||||
data_out <= std_logic_vector(SUB_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(SUB_SEQUENCENUMBER(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 14 =>
|
||||
data_out <= std_logic_vector(SUB_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(SUB_SEQUENCENUMBER(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 15 =>
|
||||
data_out <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(count);
|
||||
cnt_next <= cnt + 1;
|
||||
-- HEARTBEAT RTPS SUBMESSAGE (Message)
|
||||
-- RTPS Submessage Header
|
||||
when 16 =>
|
||||
data_out <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_HEARTBEAT & "00000010" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 17 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 18 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 19 =>
|
||||
data_out <= std_logic_vector(man_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(man_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 20 =>
|
||||
data_out <= std_logic_vector(man_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(man_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 21 =>
|
||||
data_out <= std_logic_vector(auto_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(auto_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 22 =>
|
||||
data_out <= std_logic_vector(auto_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(auto_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
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 (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
|
||||
stage_next <= SEND_SUB_DATA;
|
||||
-- Output FIFO Guard
|
||||
elsif (rtps_full = '0') then
|
||||
elsif (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
-- Send Publisher Data
|
||||
data_out <= WRITER_ENDPOINT_DATA.data(publisher_data_cnt);
|
||||
data_out_sig <= WRITER_ENDPOINT_DATA.data(publisher_data_cnt);
|
||||
|
||||
-- Exit Condition
|
||||
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 (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;
|
||||
@ -3377,15 +3393,15 @@ begin
|
||||
stage_next <= SEND_MES_MAN_LIVE;
|
||||
cnt_next <= 0;
|
||||
-- Output FIFO Guard
|
||||
elsif (rtps_full = '0') then
|
||||
elsif (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
-- Send Subscriber Data
|
||||
data_out <= READER_ENDPOINT_DATA.data(subscriber_data_cnt);
|
||||
data_out_sig <= READER_ENDPOINT_DATA.data(subscriber_data_cnt);
|
||||
|
||||
-- Exit Condition
|
||||
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 (check_mask(participant_data.extra_flags, EF_MES_DATA_FLAG)) then
|
||||
stage_next <= SEND_HEADER;
|
||||
@ -3406,59 +3422,59 @@ begin
|
||||
end if;
|
||||
when SEND_MES_MAN_LIVE =>
|
||||
-- Output FIFO Guard
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- DATA RTPS SUBMESSAGE (Participant Message)
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
data_out <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- ExtraFlags, octetsToInlineQoS
|
||||
when 1 =>
|
||||
data_out <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 2 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 3 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(man_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(man_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 5 =>
|
||||
data_out <= std_logic_vector(man_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(man_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Serialized Payload Header
|
||||
when 6 =>
|
||||
data_out <= CDR_BE & x"0000";
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= CDR_BE & x"0000";
|
||||
cnt_next <= cnt + 1;
|
||||
-- Serialized Payload BEGIN
|
||||
-- GUID Prefix 1/3
|
||||
when 7 =>
|
||||
data_out <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 8 =>
|
||||
data_out <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 9 =>
|
||||
data_out <= GUIDPREFIX(2);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(2);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Participant Message Kind
|
||||
when 10 =>
|
||||
data_out <= PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Data Length
|
||||
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 (live_gap_start /= auto_live_seq_nr) then
|
||||
stage_next <= SEND_MES_GAP;
|
||||
@ -3473,104 +3489,104 @@ begin
|
||||
end if;
|
||||
when SEND_MES_GAP =>
|
||||
-- Output FIFO Guard
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- DATA RTPS SUBMESSAGE (Participant Message)
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
data_out <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_GAP & "00000000" & std_logic_vector(to_unsigned(28, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP Start Sequence Number 1/2
|
||||
when 3 =>
|
||||
data_out <= std_logic_vector(live_gap_start(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(live_gap_start(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP Start Sequence Number 2/2
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(live_gap_start(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(live_gap_start(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP End Sequence Number Set (Bitmap Base 1/2)
|
||||
when 5 =>
|
||||
data_out <= std_logic_vector(live_gap_end(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(live_gap_end(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP End Sequence Number Set (Bitmap Base 2/2)
|
||||
when 6 =>
|
||||
data_out <= std_logic_vector(live_gap_end(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(live_gap_end(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP End Sequence Number Set (NumBits)
|
||||
when 7 =>
|
||||
data_out <= (others => '0');
|
||||
stage_next <= SEND_MES_AUTO_LIVE;
|
||||
cnt_next <= 0;
|
||||
data_out_sig <= (others => '0');
|
||||
stage_next <= SEND_MES_AUTO_LIVE;
|
||||
cnt_next <= 0;
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
end if;
|
||||
when SEND_MES_AUTO_LIVE =>
|
||||
-- Output FIFO Guard
|
||||
if (rtps_full = '0') then
|
||||
if (full_ro = '0') then
|
||||
wr_sig <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- DATA RTPS SUBMESSAGE (Participant Message)
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
data_out <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= SID_DATA & "00000100" & std_logic_vector(to_unsigned(44, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- ExtraFlags, octetsToInlineQoS
|
||||
when 1 =>
|
||||
data_out <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 2 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 3 =>
|
||||
data_out <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(auto_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(auto_live_seq_nr(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 5 =>
|
||||
data_out <= std_logic_vector(auto_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= std_logic_vector(auto_live_seq_nr(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Serialized Payload Header
|
||||
when 6 =>
|
||||
data_out <= CDR_BE & x"0000";
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= CDR_BE & x"0000";
|
||||
cnt_next <= cnt + 1;
|
||||
-- Serialized Payload BEGIN
|
||||
-- GUID Prefix 1/3
|
||||
when 7 =>
|
||||
data_out <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 8 =>
|
||||
data_out <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 9 =>
|
||||
data_out <= GUIDPREFIX(2);
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= GUIDPREFIX(2);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Participant Message Kind
|
||||
when 10 =>
|
||||
data_out <= PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_sig <= PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Data Length
|
||||
when 11 =>
|
||||
data_out <= (others => '0');
|
||||
last_word_out <= '1';
|
||||
data_out_sig <= (others => '0');
|
||||
last_word_out_sig <= '1';
|
||||
|
||||
-- If we are in the middle of a liveliness assertion, find the next Participant destination
|
||||
if (is_live_assert = '1') then
|
||||
@ -3640,7 +3656,7 @@ begin
|
||||
-- Force rd_sig low
|
||||
rd_sig <= '0';
|
||||
-- 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
|
||||
stage_next <= IDLE;
|
||||
-- Reset Last Word In Latch
|
||||
@ -3655,7 +3671,7 @@ begin
|
||||
-- Force rd_sig low
|
||||
rd_sig <= '0';
|
||||
-- Notify Endpoints of EOP
|
||||
last_word_out <= '1';
|
||||
last_word_out_sig <= '1';
|
||||
-- Invalid Parameter Length, Skip Packet
|
||||
stage_next <= SKIP_PACKET;
|
||||
-- Reset Parameter End
|
||||
|
||||
@ -9,18 +9,21 @@ use work.rtps_config_package.all;
|
||||
entity rtps_out is
|
||||
generic (
|
||||
-- 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 (
|
||||
-- SYSTEM
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
-- INPUT
|
||||
full : in std_logic;
|
||||
wr : out std_logic;
|
||||
data_in : in RTPS_OUT_DATA_TYPE;
|
||||
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);
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
wr : out std_logic;
|
||||
full : in std_logic
|
||||
rd : out std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
data_out : out std_logic_vector(WORD_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
|
||||
@ -28,21 +28,21 @@ entity rtps_reader is
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
-- FROM RTPS HANDLER (USER TRAFFIC)
|
||||
empty_user : in std_logic;
|
||||
rd_user : out std_logic;
|
||||
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in_user : in std_logic;
|
||||
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC)
|
||||
-- FROM RTPS BUILTIN ENDPOINT (META TRAFFIC)
|
||||
empty_meta : in std_logic;
|
||||
rd_meta : out std_logic;
|
||||
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in_meta : in std_logic;
|
||||
-- RTPS OUTPUT
|
||||
wr_rtps : out std_logic;
|
||||
full_rtps : in std_logic;
|
||||
last_word_out_rtps : out std_logic;
|
||||
data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
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;
|
||||
-- TO HISTORY CACHE
|
||||
start_hc : out std_logic;
|
||||
opcode_hc : out HISTORY_CACHE_OPCODE_TYPE;
|
||||
@ -435,13 +435,13 @@ begin
|
||||
start_hc <= '0';
|
||||
valid_out_hc <= '0';
|
||||
last_word_out_hc <= '0';
|
||||
wr_rtps <= '0';
|
||||
last_word_out_rtps <= '0';
|
||||
wr_ro <= '0';
|
||||
last_word_out_ro <= '0';
|
||||
idle_sig <= '0';
|
||||
rd_guard := '0';
|
||||
mem_field_flags <= (others => '0');
|
||||
data_out_hc <= (others => '0');
|
||||
data_out_rtps <= (others => '0');
|
||||
data_out_ro <= (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;
|
||||
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- OUTPUT HEADER
|
||||
-- Src IPv4 Address
|
||||
when 0 =>
|
||||
data_out_rtps <= DEFAULT_IPv4_ADDRESS;
|
||||
cnt_next <= cnt + 1;
|
||||
data_out_ro <= DEFAULT_IPv4_ADDRESS;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Dest IPv4 Address
|
||||
when 1 =>
|
||||
data_out_rtps <= mem_endpoint_data.addr;
|
||||
data_out_ro <= mem_endpoint_data.addr;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Src and Dest UDPv4 Ports
|
||||
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;
|
||||
-- RTPS MESSAGE HEADER
|
||||
when 3 =>
|
||||
data_out_rtps <= PROTOCOL_RTPS;
|
||||
data_out_ro <= PROTOCOL_RTPS;
|
||||
cnt_next <= cnt + 1;
|
||||
when 4 =>
|
||||
data_out_rtps <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
data_out_ro <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
cnt_next <= cnt + 1;
|
||||
when 5 =>
|
||||
data_out_rtps <= GUIDPREFIX(0);
|
||||
data_out_ro <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
when 6 =>
|
||||
data_out_rtps <= GUIDPREFIX(1);
|
||||
data_out_ro <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
when 7 =>
|
||||
data_out_rtps <= GUIDPREFIX(2);
|
||||
data_out_ro <= GUIDPREFIX(2);
|
||||
|
||||
-- Continue with respective RTPS Submessage
|
||||
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;
|
||||
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- ACKNACK RTPS SUBMESSAGE
|
||||
-- RTPS Submessage Header
|
||||
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;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out_rtps <= ENTITYID;
|
||||
data_out_ro <= ENTITYID;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out_rtps <= mem_endpoint_data.guid(3);
|
||||
data_out_ro <= mem_endpoint_data.guid(3);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number Set (Bitmap Base 1/2)
|
||||
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;
|
||||
-- Sequence Number Set (Bitmap Base 2/2)
|
||||
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;
|
||||
-- Sequence Number Set (NumBits)
|
||||
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;
|
||||
-- Sequence Number Set (Bitmap)
|
||||
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)
|
||||
-- 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;
|
||||
-- Count
|
||||
when 7 =>
|
||||
data_out_rtps <= std_logic_vector(count);
|
||||
last_word_out_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(count);
|
||||
last_word_out_ro <= '1';
|
||||
|
||||
-- Stale Check in Progress
|
||||
if (stale_check = '1') then
|
||||
|
||||
@ -31,24 +31,24 @@ entity rtps_writer is
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
time : in TIME_TYPE;
|
||||
-- FROM RTPS_HANDLER (USER TRAFFIC)
|
||||
-- FROM RTPS HANDLER (USER TRAFFIC)
|
||||
empty_user : in std_logic;
|
||||
rd_user : out std_logic;
|
||||
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in_user : in std_logic;
|
||||
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC)
|
||||
-- FROM RTPS BUILTIN ENDPOINT (META TRAFFIC)
|
||||
empty_meta : in std_logic;
|
||||
rd_meta : out std_logic;
|
||||
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
last_word_in_meta : in std_logic;
|
||||
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC)
|
||||
-- TO RTPS BUILTIN ENDPOINT (META TRAFFIC)
|
||||
alive_sig : out std_logic;
|
||||
-- RTPS OUTPUT
|
||||
wr_rtps : out std_logic;
|
||||
full_rtps : in std_logic;
|
||||
last_word_out_rtps : out std_logic;
|
||||
data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
-- FROM HC
|
||||
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;
|
||||
-- FROM HISTORY CACHE
|
||||
liveliness_assertion : in std_logic;
|
||||
data_available : in 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 liveliness_flag : std_logic is rtps_flags(2);
|
||||
-- RTPS OUT DATA SUBMESSAGE FLAGS
|
||||
alias qos_flag : std_logic is data_out_rtps(17);
|
||||
alias data_flag : std_logic is data_out_rtps(18);
|
||||
alias key_flag : std_logic is data_out_rtps(19);
|
||||
alias non_std_flag : std_logic is data_out_rtps(20);
|
||||
alias qos_flag : std_logic is data_out_ro(17);
|
||||
alias data_flag : std_logic is data_out_ro(18);
|
||||
alias key_flag : std_logic is data_out_ro(19);
|
||||
alias non_std_flag : std_logic is data_out_ro(20);
|
||||
-- ACKNACK
|
||||
alias nack_base : SEQUENCENUMBER_TYPE is sn_latch_1;
|
||||
alias nack_base_next : SEQUENCENUMBER_TYPE is sn_latch_1_next;
|
||||
@ -463,8 +463,8 @@ begin
|
||||
alive_sig <= '0';
|
||||
rd_meta <= '0';
|
||||
rd_user <= '0';
|
||||
wr_rtps <= '0';
|
||||
last_word_out_rtps <= '0';
|
||||
wr_ro <= '0';
|
||||
last_word_out_ro <= '0';
|
||||
mem_op_start <= '0';
|
||||
start_hc <= '0';
|
||||
ready_in_hc <= '0';
|
||||
@ -473,7 +473,7 @@ begin
|
||||
seq_nr <= SEQUENCENUMBER_UNKNOWN;
|
||||
seq_nr_hc <= SEQUENCENUMBER_UNKNOWN;
|
||||
mem_field_flags <= (others => '0');
|
||||
data_out_rtps <= (others => '0');
|
||||
data_out_ro <= (others => '0');
|
||||
mem_addr_update <= (others => '0');
|
||||
|
||||
-- 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;
|
||||
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- OUTPUT HEADER
|
||||
-- Src IPv4 Address
|
||||
when 0 =>
|
||||
data_out_rtps <= DEFAULT_IPv4_ADDRESS;
|
||||
data_out_ro <= DEFAULT_IPv4_ADDRESS;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Dest IPv4 Address
|
||||
when 1 =>
|
||||
data_out_rtps <= mem_endpoint_data.addr;
|
||||
data_out_ro <= mem_endpoint_data.addr;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Src and Dest UDPv4 Ports
|
||||
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;
|
||||
-- RTPS MESSAGE HEADER
|
||||
when 3 =>
|
||||
data_out_rtps <= PROTOCOL_RTPS;
|
||||
data_out_ro <= PROTOCOL_RTPS;
|
||||
cnt_next <= cnt + 1;
|
||||
when 4 =>
|
||||
data_out_rtps <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
data_out_ro <= PROTOCOLVERSION_2_4 & VENDORID;
|
||||
cnt_next <= cnt + 1;
|
||||
when 5 =>
|
||||
data_out_rtps <= GUIDPREFIX(0);
|
||||
data_out_ro <= GUIDPREFIX(0);
|
||||
cnt_next <= cnt + 1;
|
||||
when 6 =>
|
||||
data_out_rtps <= GUIDPREFIX(1);
|
||||
data_out_ro <= GUIDPREFIX(1);
|
||||
cnt_next <= cnt + 1;
|
||||
when 7 =>
|
||||
data_out_rtps <= GUIDPREFIX(2);
|
||||
data_out_ro <= GUIDPREFIX(2);
|
||||
|
||||
-- Continue with respective RTPS Submessage
|
||||
stage_next <= return_stage;
|
||||
@ -1682,22 +1682,22 @@ begin
|
||||
end if;
|
||||
when SEND_INFO_TS =>
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- INFO_TS RTPS SUBMESSAGE
|
||||
-- RTPS Submessage Header
|
||||
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;
|
||||
-- Source Timestamp 1/2
|
||||
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;
|
||||
-- Writer Entity ID
|
||||
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;
|
||||
cnt_next <= 0;
|
||||
@ -1713,41 +1713,41 @@ begin
|
||||
assert check_mask(current_emf, EMF_UDP_PORT_FLAG) severity FAILURE;
|
||||
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
if (full_ro = '0') then
|
||||
case (cnt) is
|
||||
-- DATA RTPS SUBMESSAGE
|
||||
-- RTPS Submessage Header
|
||||
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';
|
||||
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';
|
||||
wr_rtps <= '1';
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- extraFlags, octetsToInlineQoS
|
||||
when 1 =>
|
||||
data_out_rtps <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= x"0000" & std_logic_vector(to_unsigned(16, 16));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 2 =>
|
||||
data_out_rtps <= ENTITYID_UNKNOWN;
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= ENTITYID_UNKNOWN;
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 3 =>
|
||||
data_out_rtps <= ENTITYID;
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= ENTITYID;
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 4 =>
|
||||
data_out_rtps <= std_logic_vector(next_seq_nr(0));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(next_seq_nr(0));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 5 =>
|
||||
data_out_rtps <= std_logic_vector(next_seq_nr(1));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(next_seq_nr(1));
|
||||
wr_ro <= '1';
|
||||
|
||||
-- Need to send Key Hash
|
||||
if (WITH_KEY) then
|
||||
@ -1764,7 +1764,7 @@ begin
|
||||
stage_next <= SEND_DATA_B;
|
||||
cnt_next <= 0;
|
||||
else
|
||||
last_word_out_rtps <= '1';
|
||||
last_word_out_ro <= '1';
|
||||
-- Continue
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
|
||||
stage_next <= HANDLE_REQUESTS;
|
||||
@ -1783,40 +1783,40 @@ begin
|
||||
when 6 =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
data_out_rtps <= PID_KEY_HASH & std_logic_vector(to_unsigned(16, SUBMESSAGE_LENGTH_WIDTH));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= PID_KEY_HASH & std_logic_vector(to_unsigned(16, SUBMESSAGE_LENGTH_WIDTH));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Key Hash 1/4
|
||||
when 7 =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
data_out_rtps <= std_logic_vector(cc_instance_handle(0));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(cc_instance_handle(0));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Key Hash 2/4
|
||||
when 8 =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
data_out_rtps <= std_logic_vector(cc_instance_handle(1));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(cc_instance_handle(1));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Key Hash 3/4
|
||||
when 9 =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
data_out_rtps <= std_logic_vector(cc_instance_handle(2));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(cc_instance_handle(2));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Key Hash 4/4
|
||||
when 10 =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
data_out_rtps <= std_logic_vector(cc_instance_handle(3));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(cc_instance_handle(3));
|
||||
wr_ro <= '1';
|
||||
|
||||
-- Need to send Status Info
|
||||
if (cc_kind /= ALIVE) then
|
||||
@ -1831,20 +1831,20 @@ begin
|
||||
end if;
|
||||
-- Status Info PID
|
||||
when 11 =>
|
||||
data_out_rtps <= PID_STATUS_INFO & std_logic_vector(to_unsigned(4, SUBMESSAGE_LENGTH_WIDTH));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= PID_STATUS_INFO & std_logic_vector(to_unsigned(4, SUBMESSAGE_LENGTH_WIDTH));
|
||||
wr_ro <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Status Info
|
||||
when 12 =>
|
||||
data_out_rtps <= (others => '0');
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= (others => '0');
|
||||
wr_ro <= '1';
|
||||
case (cc_kind) is
|
||||
when ALIVE_FILTERED =>
|
||||
data_out_rtps(STATUS_INFO_FILTERED_FLAG) <= '1';
|
||||
data_out_ro(STATUS_INFO_FILTERED_FLAG) <= '1';
|
||||
when NOT_ALIVE_DISPOSED =>
|
||||
data_out_rtps(STATUS_INFO_DISPOSED_FLAG) <= '1';
|
||||
data_out_ro(STATUS_INFO_DISPOSED_FLAG) <= '1';
|
||||
when NOT_ALIVE_UNREGISTERED =>
|
||||
data_out_rtps(STATUS_INFO_UNREGISTERED_FLAG) <= '1';
|
||||
data_out_ro(STATUS_INFO_UNREGISTERED_FLAG) <= '1';
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
@ -1858,14 +1858,14 @@ begin
|
||||
end if;
|
||||
-- Sentinel
|
||||
when 13 =>
|
||||
data_out_rtps <= PID_SENTINEL & std_logic_vector(to_unsigned(0, PARAMETER_LENGTH_WIDTH));
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= PID_SENTINEL & std_logic_vector(to_unsigned(0, PARAMETER_LENGTH_WIDTH));
|
||||
wr_ro <= '1';
|
||||
|
||||
-- Payload Available (DATA or Serialized Key)
|
||||
if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then
|
||||
stage_next <= SEND_DATA_B;
|
||||
else
|
||||
last_word_out_rtps <= '1';
|
||||
last_word_out_ro <= '1';
|
||||
-- Continue
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
|
||||
stage_next <= HANDLE_REQUESTS;
|
||||
@ -1887,9 +1887,9 @@ begin
|
||||
end if;
|
||||
when SEND_INLINE_QOS =>
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
data_out_rtps <= INLINE_QOS.data(cnt3);
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
data_out_ro <= INLINE_QOS.data(cnt3);
|
||||
wr_ro <= '1';
|
||||
|
||||
-- Exit Condition
|
||||
if (cnt3 = INLINE_QOS.length-1) then
|
||||
@ -1897,7 +1897,7 @@ begin
|
||||
if (cc_kind = ALIVE or (WITH_KEY and cc_kind /= ALIVE)) then
|
||||
stage_next <= SEND_DATA_B;
|
||||
else
|
||||
last_word_out_rtps <= '1';
|
||||
last_word_out_ro <= '1';
|
||||
-- Continue
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
|
||||
stage_next <= HANDLE_REQUESTS;
|
||||
@ -1918,15 +1918,15 @@ begin
|
||||
end if;
|
||||
when SEND_DATA_B =>
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
if (full_ro = '0') then
|
||||
ready_in_hc <= '1';
|
||||
|
||||
if (valid_in_hc = '1') then
|
||||
data_out_rtps <= data_in_hc;
|
||||
wr_rtps <= '1';
|
||||
data_out_ro <= data_in_hc;
|
||||
wr_ro <= '1';
|
||||
|
||||
if (last_word_in_hc = '1') then
|
||||
last_word_out_rtps <= '1';
|
||||
last_word_out_ro <= '1';
|
||||
|
||||
-- Continue
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
|
||||
@ -1946,30 +1946,30 @@ begin
|
||||
end if;
|
||||
when SEND_GAP_A =>
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- DATA RTPS SUBMESSAGE (Participant Message)
|
||||
-- RTPS Submessage Header
|
||||
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;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out_rtps <= ENTITYID_UNKNOWN;
|
||||
data_out_ro <= ENTITYID_UNKNOWN;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out_rtps <= ENTITYID;
|
||||
data_out_ro <= ENTITYID;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GAP Start Sequence Number 1/2
|
||||
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;
|
||||
-- GAP Start Sequence Number 2/2
|
||||
when 4 =>
|
||||
data_out_rtps <= std_logic_vector(next_seq_nr(1));
|
||||
data_out_ro <= std_logic_vector(next_seq_nr(1));
|
||||
|
||||
-- Continue
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS and stale_check = '1') then
|
||||
@ -1985,24 +1985,24 @@ begin
|
||||
end if;
|
||||
when SEND_GAP_B =>
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- GAP List Sequence Number Set (Bitmap Base 1/2)
|
||||
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;
|
||||
-- GAP List Sequence Number Set (Bitmap Base 2/2)
|
||||
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;
|
||||
-- GAP List Sequence Number Set (NumBits)
|
||||
when 2 =>
|
||||
data_out_rtps <= (others => '0');
|
||||
data_out_ro <= (others => '0');
|
||||
|
||||
if (gap_is_last = '1') then
|
||||
last_word_out_rtps <= '1';
|
||||
last_word_out_ro <= '1';
|
||||
-- Reset
|
||||
gap_is_last_next <= '0';
|
||||
end if;
|
||||
@ -2018,47 +2018,47 @@ begin
|
||||
-- Synthesis Guard
|
||||
if (RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS or LIVELINESS_QOS = MANUAL_BY_TOPIC_LIVELINESS_QOS) then
|
||||
-- Output FIFO Guard
|
||||
if (full_rtps = '0') then
|
||||
wr_rtps <= '1';
|
||||
if (full_ro = '0') then
|
||||
wr_ro <= '1';
|
||||
|
||||
case (cnt) is
|
||||
-- HEARTBEAT RTPS SUBMESSAGE
|
||||
-- RTPS Submessage Header
|
||||
when 0 =>
|
||||
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
|
||||
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;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
data_out_rtps <= ENTITYID_UNKNOWN;
|
||||
data_out_ro <= ENTITYID_UNKNOWN;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
data_out_rtps <= ENTITYID;
|
||||
data_out_ro <= ENTITYID;
|
||||
cnt_next <= cnt + 1;
|
||||
-- First Sequence Number 1/2
|
||||
when 3 =>
|
||||
data_out_rtps <= std_logic_vector(min_sn(0));
|
||||
data_out_ro <= std_logic_vector(min_sn(0));
|
||||
cnt_next <= cnt + 1;
|
||||
-- First Sequence Number 2/2
|
||||
when 4 =>
|
||||
data_out_rtps <= std_logic_vector(min_sn(1));
|
||||
data_out_ro <= std_logic_vector(min_sn(1));
|
||||
cnt_next <= cnt + 1;
|
||||
-- Last Sequence Number 1/2
|
||||
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;
|
||||
-- Last Sequence Number 2/2
|
||||
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;
|
||||
-- Count
|
||||
when 7 =>
|
||||
data_out_rtps <= std_logic_vector(count);
|
||||
last_word_out_rtps <= '1';
|
||||
data_out_ro <= std_logic_vector(count);
|
||||
last_word_out_ro <= '1';
|
||||
|
||||
stage_next <= HANDLE_HEARTBEATS;
|
||||
cnt_next <= 1;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user