* Fix "MATCH_DEST_ENDPOINT" in rtps_handler
This commit is contained in:
parent
ce72c147a4
commit
51c90129c4
@ -174,20 +174,6 @@ architecture arch of rtps_handler is
|
|||||||
return tmp;
|
return tmp;
|
||||||
end function;
|
end function;
|
||||||
|
|
||||||
-- Compares argument 'ref' with every element of 'ar', and returns the index of the last match.
|
|
||||||
-- If no match is found, array length is returned.
|
|
||||||
function match_id_endpoint (ref : std_logic_vector(ENTITYID_WIDTH-1 downto 0); ar : ENTITYID_TYPE) return natural is
|
|
||||||
variable id : natural := 0;
|
|
||||||
begin
|
|
||||||
id := ar'length;
|
|
||||||
for i in 0 to ar'length-1 loop
|
|
||||||
if(ref = ar(i)) then
|
|
||||||
id := i;
|
|
||||||
end if;
|
|
||||||
end loop;
|
|
||||||
return id;
|
|
||||||
end function;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
-- ALIAS SUBSTITUTION
|
-- ALIAS SUBSTITUTION
|
||||||
@ -279,8 +265,7 @@ begin
|
|||||||
-- SKIP_SUB Skip rest of Submessage
|
-- SKIP_SUB Skip rest of Submessage
|
||||||
-- SKIP_PACKET Skip rest of UDP Packet
|
-- SKIP_PACKET Skip rest of UDP Packet
|
||||||
parse_prc: process(all)
|
parse_prc: process(all)
|
||||||
variable tmp : natural range 0 to MAX_ENDPOINTS := 0;
|
variable tmp : std_logic_vector(0 to MAX_ENDPOINTS-1) := (others => '0');
|
||||||
variable tmp_length : std_logic_vector(15 downto 0) := (others => '0');
|
|
||||||
variable dest : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := (others => '0');
|
variable dest : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := (others => '0');
|
||||||
begin
|
begin
|
||||||
--DEFAULT Registered
|
--DEFAULT Registered
|
||||||
@ -893,17 +878,27 @@ begin
|
|||||||
builtin_endpoint_next <= '1';
|
builtin_endpoint_next <= '1';
|
||||||
-- Match User Entity ID
|
-- Match User Entity ID
|
||||||
elsif (is_metatraffic = '0') then
|
elsif (is_metatraffic = '0') then
|
||||||
tmp := match_id_endpoint(dest, ENTITYID);
|
|
||||||
|
tmp := (others => '0');
|
||||||
|
|
||||||
|
for i in 0 to ENTITYID'length-1 loop
|
||||||
|
if (dest = ENTITYID(i)) then
|
||||||
|
tmp(i) := '1';
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
|
||||||
-- Entity non existent, skip Submessage
|
-- Entity non existent, skip Submessage
|
||||||
if (tmp = MAX_ENDPOINTS) then
|
if (tmp = (tmp'range => '0')) then
|
||||||
stage_next <= SKIP_SUB;
|
stage_next <= SKIP_SUB;
|
||||||
-- Entity ID Match
|
-- Entity ID Match
|
||||||
else
|
else
|
||||||
-- SANITY CHECK: Allow only Reader-Writer Communication
|
-- SANITY CHECK: Allow only Reader-Writer Communication
|
||||||
if ((src_is_reader xor ENDPOINT_READERS(tmp)) = '0') then
|
if (src_is_reader = '1') then
|
||||||
user_endpoint_next(tmp) <= '1';
|
-- Mark only Writers
|
||||||
|
user_endpoint_next <= tmp and (not ENDPOINT_READERS);
|
||||||
else
|
else
|
||||||
stage_next <= SKIP_SUB;
|
-- Mark only Readers
|
||||||
|
user_endpoint_next <= tmp and ENDPOINT_READERS;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
-- Destination Unreachable, skip Submessage
|
-- Destination Unreachable, skip Submessage
|
||||||
|
|||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
set_global_assignment -name FAMILY "Cyclone V"
|
set_global_assignment -name FAMILY "Cyclone V"
|
||||||
set_global_assignment -name DEVICE 5CSEBA6U23I7
|
set_global_assignment -name DEVICE 5CSEBA6U23I7
|
||||||
set_global_assignment -name TOP_LEVEL_ENTITY test
|
set_global_assignment -name TOP_LEVEL_ENTITY rtps_handler
|
||||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
||||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "12:05:11 MAY 29, 2020"
|
set_global_assignment -name PROJECT_CREATION_TIME_DATE "12:05:11 MAY 29, 2020"
|
||||||
set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Lite Edition"
|
set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Lite Edition"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user