Modify Endpoint Match Frame, Fix Test Suite

The reader falgs (Expects In-line QoS, Expects Historical Data, Is Best
Effort) of the remote reader is transfered in the Metatraffic Endpoint
Match Frame.
The Level 1 rtps_builtin_endpoint test was also fixed.
This commit is contained in:
Greek 2021-02-15 13:50:48 +01:00
parent a3a51e2f52
commit bfdc366273
12 changed files with 152 additions and 83 deletions

View File

@ -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
======================

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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');

View File

@ -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
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

View File

@ -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
@ -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;

View File

@ -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');

View File

@ -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;

View File

@ -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