diff --git a/src/REF.txt b/src/REF.txt index 8c6eb5b..ba7e9d9 100644 --- a/src/REF.txt +++ b/src/REF.txt @@ -236,6 +236,11 @@ PARTICICPANT DATA 22| | +-------------------------------------------------------------+ +Q...Reader expects in-line QoS +M...Send Message Data (Liveliness Update) +S...Send Subriber Data +P...Send Publisher Data + ENDPOINT MATCH FRAME ==================== @@ -253,9 +258,20 @@ ENDPOINT MATCH FRAME 04| ENTITYID | +-------------------------------------------------------------+ 05| IPv4_ADDRESS | - +-----------------------------+---------------------------+-+-+ -06| UDP_PORT | UNUSED |D|Q| - +-----------------------------+---------------------------+-+-+ + +-----------------------------+-------------------------------+ +06| UDP_PORT | READER_FLAGS | + +-----------------------------+-------------------------------+ + +READER_FLAGS +------------ +16..............8...............0 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++-------------------------+-+-+-+ +| UNUSED |B|H|Q| ++-------------------------+-+-+-+ +Q...Reader expects in-line QoS +H...Reader expects Historical Data +B...Reader has RELIABILITY BEST_EFFORT ENDPOINT UNMATCH FRAME ====================== diff --git a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test2.vhd b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test2.vhd index 879da85..d7b70b9 100644 --- a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test2.vhd +++ b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test2.vhd @@ -322,10 +322,12 @@ begin e1.entityId := gen_rand_entityid_2(FALSE); e1.topic_name := ENDPOINT_TOPIC(0); e1.type_name := ENDPOINT_TYPE(0); + e1.reader := FALSE; e2.participant := p2; e2.entityId := gen_rand_entityid_2(TRUE); e2.topic_name := ENDPOINT_TOPIC(0); e2.type_name := ENDPOINT_TYPE(0); + e2.reader := TRUE; user_data := convert_string("USER_DATA" & (10 to 256 => NUL)); group_data := convert_string("GROUP_DATA" & (11 to 256 => NUL)); @@ -486,6 +488,7 @@ begin Log("Match Participant 2 Writer [Durability Persistent]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -506,6 +509,7 @@ begin Log("Match Participant 2 Writer [Presentation Group]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -526,6 +530,7 @@ begin Log("Ignore Participant 2 Writer [Ownership Exclusive]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -546,6 +551,7 @@ begin Log("Match Participant 2 Writer [USER_DATA, TOPIC_DATA, GROUP_DATA, MAX_SERIALIZED_PAYLOAD]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -569,6 +575,7 @@ begin Log("Ignore Participant 2 Writer [Incompatible MAX_SERIALIZED_PAYLOAD]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -589,6 +596,7 @@ begin Log("Ignore Participant 2 Writer [Non-Default Partition]", INFO); sub_p.writerSN := p2_snp; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -611,6 +619,7 @@ begin Log("Ignore Participant 2 Reader [Durability Persistent]", INFO); sub_s.writerSN := p2_sns; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := TRUE; endpoint.entityId := gen_rand_entityid_2(TRUE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -631,6 +640,7 @@ begin Log("Ignore Participant 2 Reader [Presentation Group]", INFO); sub_s.writerSN := p2_sns; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := TRUE; endpoint.entityId := gen_rand_entityid_2(TRUE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -652,6 +662,7 @@ begin Log("Ignore Participant 2 Reader [Ownership Exclusive]", INFO); sub_s.writerSN := p2_sns; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := TRUE; endpoint.entityId := gen_rand_entityid_2(TRUE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -672,6 +683,7 @@ begin Log("Match Participant 2 Reader [USER_DATA, TOPIC_DATA, GROUP_DATA, EXPECTS_INLINE_QOS]", INFO); sub_s.writerSN := p2_sns; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := TRUE; endpoint.entityId := gen_rand_entityid_2(TRUE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); @@ -695,6 +707,7 @@ begin Log("Ignore Participant 2 Reader [Non-Default Partition]", INFO); sub_s.writerSN := p2_sns; endpoint := DEFAULT_ENDPOINT_DATA; + endpoint.reader := TRUE; endpoint.entityId := gen_rand_entityid_2(TRUE); endpoint.participant := p2; endpoint.topic_name := ENDPOINT_TOPIC(0); diff --git a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test3.vhd b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test3.vhd index 001c716..d3651f9 100644 --- a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test3.vhd +++ b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test3.vhd @@ -615,6 +615,7 @@ begin Log("Ignore Endpoint [No PID_SENTINEL]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data); gen_rtps_handler_out(sub_p, endpoint, stimulus); @@ -626,8 +627,9 @@ begin -- *PID_TOPIC_NAME* Log("Ignore Endpoint [Invalid PID_TOPIC_NAME]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_TOPIC_NAME, -1); gen_sentinel(sub_p.data); @@ -639,8 +641,9 @@ begin sub_p.data := EMPTY_TEST_PACKET; Log("Match Endpoint [Extra Bytes in PID_TOPIC_NAME]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_TOPIC_NAME, +1); gen_sentinel(sub_p.data); @@ -656,8 +659,9 @@ begin -- *PID_TYPE_NAME* Log("Ignore Endpoint [Invalid PID_TYPE_NAME]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_TYPE_NAME, -1); gen_sentinel(sub_p.data); @@ -669,8 +673,9 @@ begin sub_p.data := EMPTY_TEST_PACKET; Log("Match Endpoint [Extra Bytes in PID_TYPE_NAME]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_TYPE_NAME, +1); gen_sentinel(sub_p.data); @@ -686,8 +691,9 @@ begin -- *PID_DURABILITY* Log("Ignore Endpoint [Invalid PID_DURABILITY]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DURABILITY, -1); gen_sentinel(sub_p.data); @@ -699,8 +705,9 @@ begin sub_p.data := EMPTY_TEST_PACKET; Log("Match Endpoint [Extra Bytes in PID_DURABILITY]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DURABILITY, +1); gen_sentinel(sub_p.data); @@ -716,8 +723,9 @@ begin -- *PID_DEADLINE* Log("Ignore Endpoint [Invalid PID_DEADLINE]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DEADLINE, -1); gen_sentinel(sub_p.data); @@ -729,8 +737,9 @@ begin sub_p.data := EMPTY_TEST_PACKET; Log("Match Endpoint [Extra Bytes in PID_DEADLINE]", INFO); - sub_p.writerSN := p_snp; + sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DEADLINE, +1); gen_sentinel(sub_p.data); @@ -748,6 +757,7 @@ begin Log("Ignore Endpoint [Invalid PID_LIVELINESS]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_LIVELINESS, -1); gen_sentinel(sub_p.data); @@ -761,6 +771,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_LIVELINESS]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_LIVELINESS, +1); gen_sentinel(sub_p.data); @@ -778,6 +789,7 @@ begin Log("Ignore Endpoint [Invalid PID_RELIABILITY]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_RELIABILITY, -1); gen_sentinel(sub_p.data); @@ -791,6 +803,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_RELIABILITY]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_RELIABILITY, +1); gen_sentinel(sub_p.data); @@ -808,6 +821,7 @@ begin Log("Ignore Endpoint [Invalid PID_DESTINATION_ORDER]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DESTINATION_ORDER, -1); gen_sentinel(sub_p.data); @@ -821,6 +835,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_DESTINATION_ORDER]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_DESTINATION_ORDER, +1); gen_sentinel(sub_p.data); @@ -838,6 +853,7 @@ begin Log("Ignore Endpoint [Invalid PID_OWNERSHIP]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_OWNERSHIP, -1); gen_sentinel(sub_p.data); @@ -851,6 +867,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_OWNERSHIP]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_OWNERSHIP, +1); gen_sentinel(sub_p.data); @@ -868,6 +885,7 @@ begin Log("Ignore Endpoint [Invalid PID_PRESENTATION]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_PRESENTATION, -1); gen_sentinel(sub_p.data); @@ -881,6 +899,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_PRESENTATION]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_PRESENTATION, +1); gen_sentinel(sub_p.data); @@ -898,6 +917,7 @@ begin Log("Ignore Endpoint [Invalid PID_LATENCY_BUDGET]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_LATENCY_BUDGET, -1); gen_sentinel(sub_p.data); @@ -911,6 +931,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_LATENCY_BUDGET]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_LATENCY_BUDGET, +1); gen_sentinel(sub_p.data); @@ -928,6 +949,7 @@ begin Log("Ignore Endpoint [Invalid PID_ENDPOINT_GUID]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_ENDPOINT_GUID, -1); gen_sentinel(sub_p.data); @@ -941,6 +963,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_ENDPOINT_GUID]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_ENDPOINT_GUID, +1); gen_sentinel(sub_p.data); @@ -958,6 +981,7 @@ begin Log("Ignore Endpoint [Invalid PID_EXPECTS_INLINE_QOS]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_EXPECTS_INLINE_QOS, -1); gen_sentinel(sub_p.data); @@ -971,6 +995,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_EXPECTS_INLINE_QOS]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data, PID_EXPECTS_INLINE_QOS, +1); gen_sentinel(sub_p.data); @@ -988,6 +1013,7 @@ begin Log("Ignore Endpoint [Invalid PID_DATA_MAX_SIZE_SERIALIZED]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.max_size_serialized:= int(65000, CDR_LONG_WIDTH); gen_endpoint_data(endpoint, sub_p.data, PID_DATA_MAX_SIZE_SERIALIZED, -1); @@ -1002,6 +1028,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_DATA_MAX_SIZE_SERIALIZED]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.max_size_serialized:= int(65000, CDR_LONG_WIDTH); gen_endpoint_data(endpoint, sub_p.data, PID_DATA_MAX_SIZE_SERIALIZED, +1); @@ -1020,6 +1047,7 @@ begin Log("Ignore Endpoint [Invalid PID_UNICAST_LOCATOR]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR)); gen_endpoint_data(endpoint, sub_p.data, PID_UNICAST_LOCATOR, -1); @@ -1034,6 +1062,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_UNICAST_LOCATOR]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR)); gen_endpoint_data(endpoint, sub_p.data, PID_UNICAST_LOCATOR, +1); @@ -1052,6 +1081,7 @@ begin Log("Ignore Endpoint [Invalid PID_MULTICAST_LOCATOR]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.multicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR)); gen_endpoint_data(endpoint, sub_p.data, PID_MULTICAST_LOCATOR, -1); @@ -1066,6 +1096,7 @@ begin Log("Match Endpoint [Extra Bytes in PID_MULTICAST_LOCATOR]", INFO); sub_p.writerSN := p_snp; endpoint := e0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); endpoint.multicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR)); gen_endpoint_data(endpoint, sub_p.data, PID_MULTICAST_LOCATOR, +1); diff --git a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test4.vhd b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test4.vhd index e308ca0..447d995 100644 --- a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test4.vhd +++ b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test4.vhd @@ -240,6 +240,7 @@ begin sub_p.writerSN := p_snp; endpoint := e0; endpoint.participant:= p1; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data); gen_sentinel(sub_p.data); @@ -254,6 +255,7 @@ begin sub_p.writerSN := p_snp; endpoint := e0; endpoint.participant:= p0; + endpoint.reader := FALSE; endpoint.entityId := gen_rand_entityid_2(FALSE); gen_endpoint_data(endpoint, sub_p.data); gen_sentinel(sub_p.data); diff --git a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test5.vhd b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test5.vhd index 889c18b..661b808 100644 --- a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test5.vhd +++ b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test5.vhd @@ -185,11 +185,13 @@ begin e0.participant := p0; e0.topic_name := ENDPOINT_TOPIC(2); e0.type_name := ENDPOINT_TYPE(2); + e0.reader := FALSE; e0.entityId := gen_rand_entityid_2(FALSE); e1.participant := p0; e1.topic_name := ENDPOINT_TOPIC(2); e1.type_name := ENDPOINT_TYPE(2); + e1.reader := TRUE; e1.entityId := gen_rand_entityid_2(FALSE); Log("Initiating Test", INFO); diff --git a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test6.vhd b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test6.vhd index be57627..b89f74e 100644 --- a/src/Tests/Level_0/L0_rtps_builtin_endpoint_test6.vhd +++ b/src/Tests/Level_0/L0_rtps_builtin_endpoint_test6.vhd @@ -75,11 +75,11 @@ begin ); stimulus_prc : process - variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE; - variable RV : RandomPType; + variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE; + variable RV : RandomPType; + variable p_sn : SEQUENCENUMBER_TYPE := FIRST_SEQUENCENUMBER; + variable wr_sig : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); variable p0, p1, p2, participant : PARTICIPANT_DATA_TYPE := DEFAULT_PARTICIPANT_DATA; - variable p_sn : SEQUENCENUMBER_TYPE := FIRST_SEQUENCENUMBER; - variable wr_sig : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); -- Wrapper to use procedure as function impure function gen_rand_loc_2 return LOCATOR_TYPE is diff --git a/src/Tests/Level_1/L1_rtps_builtin_endpoint_test1.vhd b/src/Tests/Level_1/L1_rtps_builtin_endpoint_test1.vhd index d6016a1..09f7a37 100644 --- a/src/Tests/Level_1/L1_rtps_builtin_endpoint_test1.vhd +++ b/src/Tests/Level_1/L1_rtps_builtin_endpoint_test1.vhd @@ -11,7 +11,7 @@ use work.rtps_config_package.all; use work.rtps_test_package.all; -- This testbench tests the rtps output of the builtin endpoint (Local Liveliness Assertion, Local Heartbeat Generation, Local Participant Announcement, Remote HEARTBEAT Response, Remote ACKNACK Response). --- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the msae format as the input of the system and allow us to compare using existing data generators. +-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators. -- The testflow is as follows: -- * 0s -- - Match a remote participant @@ -48,7 +48,6 @@ use work.rtps_test_package.all; -- * 1.205s -- - ACKNACK 5 Response -- * 1.500s --- - Liveliness of local Writer 0 (with AUTOMATIC Liveliness QoS) is asserted for 1 clock cycle [Test ignoring of non-relavant local Liveliness assertion] -- - Send ACKNACK 6 (Publihser, Expecting SN 18) [Test ACKNACK SN Response] -- * 1.705s -- - No ACKNACK 6 Response @@ -57,10 +56,10 @@ use work.rtps_test_package.all; -- - Liveliness Assertion (Auto only) -- - Send ACKNACK 7 (Message, Expecting SN 5) [Test GAP sending on ACKNACK Response] -- - Send ACKNACK 8 (Publihser, Expecing SN 2) [Test full ACKNACK Response] --- - Send ACKNaCK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response] +-- - Send ACKNACK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response] -- * 2.205s -- - ACKNACK 7/8/9 Response --- - Liveliness of local Writer 4 (with MANUAL_BY_PARTICIPANT Liveliness QOS) is asserted for 1 clock cycle [Test manual liveliness assertion after GAP generation] +-- - Liveliness of local Writer 0 (with AUTOMATIC Liveliness QoS) is asserted for 1 clock cycle [Test manual liveliness assertion after GAP generation] -- * 2.500s -- - Send ACKNACK 10 (Message, Expecting SN 6) [Test ACKNACK SN Response] -- * 2.705s @@ -800,11 +799,6 @@ begin wait on mem_op_done until rising_edge(mem_op_done) and stale_check = '1'; wait on mem_op_done until rising_edge(mem_op_done) and stale_check = '1'; - Log("Toggle local Writer 0 Liveliness for 1 clock cycle (AUTOMATIC_QOS)", INFO); - alive(NUM_READERS) <= '1'; - wait until rising_edge(clk); - alive <= (others => '0'); - Log("Send Remote Publisher AckNack [Expecting 18] (No Response)", INFO); -- RTPS SUBMESSAGE sub := DEFAULT_RTPS_SUBMESSAGE; @@ -890,8 +884,8 @@ begin gen_data(p0, TRUE, TRUE, TRUE, gen_sn(3), gen_sn(5)); - Log("Toggle local Writer 4 Liveliness for 1 clock cycle (MANUAL_BY_PARTICIPANT_QOS)", INFO); - alive(NUM_READERS+4) <= '1'; + Log("Toggle local Writer 0 Liveliness for 1 clock cycle (AUTOMATIC_QOS)", INFO); + alive(NUM_READERS) <= '1'; wait until rising_edge(clk); alive <= (others => '0'); diff --git a/src/Tests/testbench.pro b/src/Tests/testbench.pro index 8985b52..fb0625c 100644 --- a/src/Tests/testbench.pro +++ b/src/Tests/testbench.pro @@ -27,14 +27,14 @@ analyze Level_0/L0_rtps_builtin_endpoint_test7.vhd analyze Level_0/L0_rtps_out_test1.vhd analyze Level_1/L1_rtps_builtin_endpoint_test1.vhd -#simulate L0_rtps_handler_test1 -#simulate L0_rtps_handler_test2 -#simulate L0_rtps_builtin_endpoint_test1 -#simulate L0_rtps_builtin_endpoint_test2 -#simulate L0_rtps_builtin_endpoint_test3 -#simulate L0_rtps_builtin_endpoint_test4 -#simulate L0_rtps_builtin_endpoint_test5 -#simulate L0_rtps_builtin_endpoint_test6 -#simulate L0_rtps_builtin_endpoint_test7 -#simulate L0_rtps_out_test1 -#simulate L1_rtps_builtin_endpoint_test1 \ No newline at end of file +simulate L0_rtps_handler_test1 +simulate L0_rtps_handler_test2 +simulate L0_rtps_builtin_endpoint_test1 +simulate L0_rtps_builtin_endpoint_test2 +simulate L0_rtps_builtin_endpoint_test3 +simulate L0_rtps_builtin_endpoint_test4 +simulate L0_rtps_builtin_endpoint_test5 +simulate L0_rtps_builtin_endpoint_test6 +simulate L0_rtps_builtin_endpoint_test7 +simulate L0_rtps_out_test1 +simulate L1_rtps_builtin_endpoint_test1 \ No newline at end of file diff --git a/src/rtps_builtin_endpoint.vhd b/src/rtps_builtin_endpoint.vhd index 7e7c300..88d5251 100644 --- a/src/rtps_builtin_endpoint.vhd +++ b/src/rtps_builtin_endpoint.vhd @@ -322,8 +322,8 @@ architecture arch of rtps_builtin_endpoint is signal is_live_assert, is_live_assert_next : std_logic := '0'; -- Signifies the content of the string read from input signal string_content, string_content_next : STRING_CONTENT_TYPE := TOPIC_NAME_TYPE; - -- Signifies that the expects_inline_qos Flag was explicitly set via a Parameter ID - signal expects_inline_qos_rcv, expects_inline_qos_rcv_next : std_logic := '0'; + -- Reader Flags of remote Reader + signal reader_flags, reader_flags_next : std_logic_vector(READER_FLAGS_WIDTH-1 downto 0) := (others => '0'); -- Endpoint Locator IPv4 Address Latch signal def_addr, def_addr_next : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := (others => '0'); -- Metatraffic Locator IPv4 Address Latch @@ -403,8 +403,7 @@ begin if (reset = '1' or reset_endpoint_alive = '1') then endpoint_alive <= '0'; -- Set Endpoint Alive Signal, if at least one endpoint asserts liveliness - -- NOTE: Only writer endpoints with a Liveliness QoS of MANUAL_BY_PARTICIPANT as taken into account - elsif ((alive and MANUAL_BY_PARTICIPANT_LIVELINESS_WRITERS) /= (alive'range => '0')) then + elsif (alive /= (alive'range => '0')) then endpoint_alive <= '1'; end if; end if; @@ -528,7 +527,7 @@ begin meta_port_next <= meta_port; is_meta_addr_next <= is_meta_addr; cnt_next <= cnt; - expects_inline_qos_rcv_next <= expects_inline_qos_rcv; + reader_flags_next <= reader_flags; extra_flags_next <= extra_flags; stale_check_next <= stale_check; first_seq_nr_next <= first_seq_nr; @@ -650,9 +649,8 @@ begin def_port_next <= (others => '0'); meta_port_next <= META_IPv4_MULTICAST_PORT; lease_duration_next <= DEFAULT_PARTICIPANT_LEASE_DURATION; - expects_inline_qos_rcv_next <= '0'; - extra_flags_next <= (others => '0'); - extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= DEFAULT_EXPECTS_INLINE_QOS; + extra_flags_next <= (EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, others => '0'); + reader_flags_next <= (READER_EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, READER_EXPECTS_HISTORICAL_DATA_FLAG => DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG, READER_IS_BEST_EFFORT_FLAG => DEFAULT_IS_BEST_EFFORT_FLAG, others => '0'); rcvd_next <= (others => '0'); -- NOTE: We work with a "mark by default, and unmark on first missmatch" System. -- This assumes that each RxO QoS parameter occur only once in the list, else the behavior is undefined. @@ -1998,8 +1996,8 @@ begin rd_guard := '1'; -- Latch 'expectsInlineQoS' - extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= data_in(24); - expects_inline_qos_rcv_next <= '1'; + extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= data_in(24); + reader_flags_next(READER_EXPECTS_INLINE_QOS_FLAG) <= data_in(24); -- DONE stage_next <= SKIP_PARAMETER; @@ -2056,6 +2054,12 @@ begin endpoint_mask_next(i) <= '0'; end if; end loop; + + -- Set Reader Flag + if (is_subscriber = '1') then + reader_flags_next(READER_EXPECTS_HISTORICAL_DATA_FLAG) <= '0' when (data_in_swapped = VOLATILE_DURABILITY_QOS) else '1'; + end if; + -- DONE stage_next <= SKIP_PARAMETER; end if; @@ -2139,6 +2143,11 @@ begin endpoint_mask_next(i) <= '0'; end if; end loop; + + -- Set Reader Flag + if (is_subscriber = '1') then + reader_flags_next(READER_IS_BEST_EFFORT_FLAG) <= '1' when (data_in_swapped = BEST_EFFORT_RELIABILITY_QOS) else '0'; + end if; when 1 => -- NOTE: The max_blocking_time value is ignored null; @@ -2379,7 +2388,7 @@ begin else data_out <= mem_participant_data.def_addr; end if; - -- UDPv4 Port and ExpectsInlineQoSFlag + -- UDPv4 Port and Reader Flags when 6 => -- Default data_out <= (others => '0'); @@ -2392,13 +2401,8 @@ begin data_out(31 downto 16) <= mem_participant_data.def_port; end if; - -- If Endpoint did not set Flags, use Participant Default - if (expects_inline_qos_rcv = '1') then - data_out(0) <= extra_flags(EXPECTS_INLINE_QOS_FLAG); - else - -- TODO: Which one is it? - --data_out(0) <= mem_participant_data.extra_flags(EXPECTS_INLINE_QOS_FLAG); - data_out(0) <= DEFAULT_EXPECTS_INLINE_QOS; + if (is_subscriber = '1') then + data_out(15 downto 0) <= reader_flags; end if; -- DONE @@ -2993,7 +2997,7 @@ begin -- Main State Machine -- STATE DESCRIPTION -- IDLE Idle state. Done Signal is pulled high and Memory FSM accepts new memory operations - -- SEARCH_PARTICIPANT See Memory OPCODE Description + -- SEARCH_PARTICIPANT See Memory OPCODE Description -- GET_PARTICIPANT_DATA Latch the contents of the Participant Entry for use in the main FSM -- INSERT_PARTICIPANT See Memory OPCODE Description -- UPDATE_PARTICIPANT See Memory OPCODE Description @@ -3897,6 +3901,7 @@ begin long_latch <= (others => '0'); mem_long_latch <= (others => '0'); rcvd <= (others => '0'); + reader_flags <= (others => '0'); max_participant_addr <= FIRST_PARTICIPANT_ADDRESS; guid <= (others => (others => '0')); mem_guidprefix <= (others => (others => '0')); @@ -3921,7 +3926,6 @@ begin participant_match <= '0'; is_subscriber <= '0'; is_meta_addr <= '0'; - expects_inline_qos_rcv <= '0'; stale_check <= '0'; is_live_assert <= '0'; is_heartbeat_res <= '0'; @@ -3957,6 +3961,7 @@ begin long_latch <= long_latch_next; mem_long_latch <= mem_long_latch_next; rcvd <= rcvd_next; + reader_flags <= reader_flags_next; max_participant_addr <= max_participant_addr_next; guid <= guid_next; mem_guidprefix <= mem_guidprefix_next; @@ -3981,7 +3986,6 @@ begin participant_match <= participant_match_next; is_subscriber <= is_subscriber_next; is_meta_addr <= is_meta_addr_next; - expects_inline_qos_rcv <= expects_inline_qos_rcv_next; stale_check <= stale_check_next; is_live_assert <= is_live_assert_next; is_heartbeat_res <= is_heartbeat_res_next; diff --git a/src/rtps_config_package.vhd b/src/rtps_config_package.vhd index 486f7bc..b94e64b 100644 --- a/src/rtps_config_package.vhd +++ b/src/rtps_config_package.vhd @@ -16,9 +16,6 @@ package rtps_config_package is constant ENTITYID : ENTITYID_TYPE; -- Deferred to Package Body constant DOMAIN_ID : std_logic_vector(DOMAIN_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(USER_DOMAIN_ID, DOMAIN_ID_WIDTH)); - -- Constant for Sequence Number 1 - constant FIRST_SEQUENCENUMBER : SEQUENCENUMBER_TYPE := convert_to_double_word(to_unsigned(1, 64)); - -- Smallest Writer Endpoint Lease Duration constant MIN_ENDPOINT_LEASE_DURATION : DURATION_TYPE; -- Deferred to package Body @@ -72,11 +69,13 @@ package rtps_config_package is constant ISI_VIEW_FLAG : natural := 3; -- Reader Only constant ISI_MARK_FLAG : natural := 4; -- Reader Only - -- TODO: Prefix the Flags with something that differntiates between them -- Remote Endpoint Flags - constant EXPECTS_INLINE_QOS_FLAG : natural := 0; - constant SEND_HISTORICAL_DATA_FLAG : natural := 1; - constant BEST_EFFORT_FLAG : natural := 2; + constant READER_FLAGS_WIDTH : natural := 16; + constant READER_EXPECTS_INLINE_QOS_FLAG : natural := 0; + constant READER_EXPECTS_HISTORICAL_DATA_FLAG : natural := 1; + constant READER_IS_BEST_EFFORT_FLAG : natural := 2; + constant DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG : std_logic := '0'; + constant DEFAULT_IS_BEST_EFFORT_FLAG : std_logic := '0'; -- Marks the Reader Endpoint in the Endpoint Array constant ENDPOINT_READERS : std_logic_vector(0 to NUM_ENDPOINTS-1) := (0 to NUM_READERS-1 => '1', others => '0'); diff --git a/src/rtps_test_package.vhd b/src/rtps_test_package.vhd index 2186537..55b834e 100644 --- a/src/rtps_test_package.vhd +++ b/src/rtps_test_package.vhd @@ -163,6 +163,7 @@ package rtps_test_package is constant THIS_PARTICIPANT_DATA : PARTICIPANT_DATA_TYPE; -- Deferred to Pckage Body type ENDPOINT_DATA_TYPE is record + reader : boolean; littleEndian : std_logic; participant : PARTICIPANT_DATA_TYPE; entityId : std_logic_vector(ENTITYID_WIDTH-1 downto 0); @@ -187,7 +188,7 @@ package rtps_test_package is time_based_filter : DURATION_TYPE; reliability : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); max_blocking_time : DURATION_TYPE; - transportnpriority : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + transport_priority : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); lifespan : DURATION_TYPE; destination_order : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); -- Represent Data as Strings (Ease of Use) @@ -276,7 +277,7 @@ package body rtps_test_package is constant DEFAULT_GUIDPREFIX : GUIDPREFIX_TYPE := (0 => x"da27cc3c", 1 => x"687ddcde", 2 => x"88bce3d1"); - constant DEFAULT_ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := x"b9cbad8d"; + constant DEFAULT_ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := x"b9cbad04"; constant EMPTY_TEST_PACKET : TEST_PACKET_TYPE := (length => 0, data => (others => (others => '0')), last => (others => '0')); @@ -436,6 +437,7 @@ package body rtps_test_package is ); constant DEFAULT_ENDPOINT_DATA : ENDPOINT_DATA_TYPE := ( + reader => TRUE, littleEndian => '0', participant => DEFAULT_PARTICIPANT_DATA, entityId => DEFAULT_ENTITYID, @@ -460,7 +462,7 @@ package body rtps_test_package is time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS, reliability => DEFAULT_RELIABILTY_QOS, max_blocking_time => DEFAULT_MAX_BLOCKING_TIME, - transportnpriority => DEFAULT_TRANSPORT_PRIORITY_QOS, + transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS, lifespan => DEFAULT_LIFESPAN_QOS, destination_order => DEFAULT_DESTINATION_ORDER_QOS, user_data => EMPTY_STRING, @@ -639,7 +641,7 @@ package body rtps_test_package is elsif (is_valid_loc(get_loc(ref.participant.defaultMulticastLocatorList))) then return get_loc(ref.participant.defaultMulticastLocatorList); else - assert(FALSE) report "Endpoint has no valid Locators" severity FAILURE; + assert FALSE report "Endpoint has no valid Locators" severity FAILURE; return EMPTY_LOCATOR; end if; end function; @@ -1659,7 +1661,7 @@ package body rtps_test_package is end if; end if; -- TRANSPORT PRIORITY - if (ref.transportnpriority /= DEFAULT_TRANSPORT_PRIORITY_QOS or pid = PID_TRANSPORT_PRIORITY) then + if (ref.transport_priority /= DEFAULT_TRANSPORT_PRIORITY_QOS or pid = PID_TRANSPORT_PRIORITY) then if (pid = PID_TRANSPORT_PRIORITY) then assert (4+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE; output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); @@ -1667,7 +1669,7 @@ package body rtps_test_package is output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); end if; output.length := output.length + 1; - output.data(output.length) := endian_swap(ref.littleEndian, ref.transportnpriority); + output.data(output.length) := endian_swap(ref.littleEndian, ref.transport_priority); output.length := output.length + 1; if (pid = PID_TRANSPORT_PRIORITY) then output.length := output.length + offset; @@ -1854,7 +1856,11 @@ package body rtps_test_package is -- Port & expectsInlineQoS output.data(output.length) := (others => '0'); output.data(output.length)(WORD_WIDTH-1 downto UDP_PORT_WIDTH) := loc.portn(UDP_PORT_WIDTH-1 downto 0); - output.data(output.length)(0) := ref.expectsInlineQoS(0); + if (ref.reader) then + output.data(output.length)(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0); + output.data(output.length)(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '0' when (ref.durability = VOLATILE_DURABILITY_QOS) else '1'; + output.data(output.length)(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0'; + end if; output.length := output.length + 1; end if; @@ -1900,6 +1906,7 @@ package body rtps_test_package is begin if (readers) then for i in 0 to NUM_READERS-1 loop + ret_readers(i).reader := TRUE; ret_readers(i).topic_name := ENDPOINT_TOPIC(i); ret_readers(i).type_name := ENDPOINT_TYPE(i); ret_readers(i).durability := ENDPOINT_DURABILITY_QOS(i); @@ -1921,7 +1928,7 @@ package body rtps_test_package is ret_readers(i).time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(i); ret_readers(i).reliability := ENDPOINT_RELIABILITY_QOS(i); ret_readers(i).max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(i); - ret_readers(i).transportnpriority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i); + ret_readers(i).transport_priority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i); ret_readers(i).lifespan := ENDPOINT_LIFESPAN_QOS(i); ret_readers(i).destination_order := ENDPOINT_DESTINATION_ORDER_QOS(i); ret_readers(i).expectsInlineQoS(0) := '1'; @@ -1931,6 +1938,7 @@ package body rtps_test_package is return ret_readers; else for i in NUM_READERS to NUM_ENDPOINTS-1 loop + ret_writers(i-NUM_READERS).reader := FALSE; ret_writers(i-NUM_READERS).topic_name := ENDPOINT_TOPIC(i); ret_writers(i-NUM_READERS).type_name := ENDPOINT_TYPE(i); ret_writers(i-NUM_READERS).durability := ENDPOINT_DURABILITY_QOS(i); @@ -1952,7 +1960,7 @@ package body rtps_test_package is ret_writers(i-NUM_READERS).time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(i); ret_writers(i-NUM_READERS).reliability := ENDPOINT_RELIABILITY_QOS(i); ret_writers(i-NUM_READERS).max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(i); - ret_writers(i-NUM_READERS).transportnpriority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i); + ret_writers(i-NUM_READERS).transport_priority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i); ret_writers(i-NUM_READERS).lifespan := ENDPOINT_LIFESPAN_QOS(i); ret_writers(i-NUM_READERS).destination_order := ENDPOINT_DESTINATION_ORDER_QOS(i); ret_writers(i-NUM_READERS).participant := THIS_PARTICIPANT_DATA; diff --git a/src/rtps_writer.vhd b/src/rtps_writer.vhd index 0d8e747..34592c0 100644 --- a/src/rtps_writer.vhd +++ b/src/rtps_writer.vhd @@ -698,7 +698,7 @@ begin mem_op_start <= '1'; mem_opcode <= INSERT_ENDPOINT; - if (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and LEASE_DURATION /= DURATION_INFINITE and reader_flags(BEST_EFFORT_FLAG) = '0') then + if (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and LEASE_DURATION /= DURATION_INFINITE and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') then lease_deadline <= time + LEASE_DURATION; -- XXX: Possible Worst Case Path (64-bit addition and comparison in same clock) @@ -710,10 +710,10 @@ begin lease_deadline <= TIME_INVALID; end if; -- Initialize ACK Sequence Number - seq_nr <= SEQUENCENUMBER_UNKNOWN when (reader_flags(BEST_EFFORT_FLAG) = '1') else (others => (others => '0')); + seq_nr <= SEQUENCENUMBER_UNKNOWN when (reader_flags(READER_IS_BEST_EFFORT_FLAG) = '1') else (others => (others => '0')); -- Reader needs Historical Data - if (DURABILITY_QOS /= VOLATILE_DURABILITY_QOS and reader_flags(SEND_HISTORICAL_DATA_FLAG) = '1') then + if (DURABILITY_QOS /= VOLATILE_DURABILITY_QOS and reader_flags(READER_EXPECTS_HISTORICAL_DATA_FLAG) = '1') then -- Send Historical Data historical_push_next <= '1'; @@ -1525,7 +1525,7 @@ begin else next_seq_nr_next <= next_seq_nr + 1; -- If remote Reader is RELIABLE, NACK the SN - cnt_next <= (cnt + 1) when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(BEST_EFFORT_FLAG) = '0') else (cnt + 2); + cnt_next <= (cnt + 1) when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') else (cnt + 2); end if; -- NACK SN when 1 => @@ -1597,7 +1597,7 @@ begin next_seq_nr_next <= min_sn; cnt_next <= cnt + 2; -- Skip Increment -- If remote Reader is RELIABLE, NACK the SN - cnt_next <= 1 when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(BEST_EFFORT_FLAG) = '0') else 2; + cnt_next <= 1 when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') else 2; end if; when others => null; @@ -1675,7 +1675,7 @@ begin data_out_rtps <= 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(EXPECTS_INLINE_QOS_FLAG) = '1') else '0'; + qos_flag <= '1' when (cc_kind /= ALIVE or WITH_KEY or mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') else '0'; cnt_next <= cnt + 1; -- extraFlags, octetsToInlineQoS when 1 => @@ -1709,7 +1709,7 @@ begin elsif (cc_kind /= ALIVE) then cnt_next <= cnt + 5; -- Reader expect in-line QoS - elsif(mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then + elsif(mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then stage_next <= SEND_INLINE_QOS; cnt3_next <= 0; -- Payload Available (DATA or Serialized Key) @@ -1768,7 +1768,7 @@ begin if (cc_kind /= ALIVE) then cnt_next <= cnt + 1; -- Reader expects in-line QoS - elsif (mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then + elsif (mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then stage_next <= SEND_INLINE_QOS; cnt3_next <= 0; else @@ -1791,7 +1791,7 @@ begin end case; -- Reader expects in-line QoS - if (mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then + if (mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then stage_next <= SEND_INLINE_QOS; cnt3_next <= 0; else