* Update rtps_test_package

- Unify get_loc functions
	- Overload functions with less parameters for defaults
	- Add Parameter Corruption Injection to Participant and Endpoint Data Generators
This commit is contained in:
Greek 2020-11-27 12:34:28 +01:00
parent 8ad1cdcf4a
commit ecfeae91d1
4 changed files with 430 additions and 123 deletions

View File

@ -147,7 +147,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -170,7 +170,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -193,7 +193,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -216,7 +216,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -239,7 +239,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -262,7 +262,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -285,7 +285,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -315,7 +315,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -338,7 +338,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -361,7 +361,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -381,7 +381,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -401,7 +401,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_DETECTOR) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_DETECTOR) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -436,7 +436,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_DETECTOR) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_DETECTOR) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -454,7 +454,7 @@ begin
participant.defaultUnicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR)); participant.defaultUnicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -474,7 +474,7 @@ begin
participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1'; participant.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1';
gen_participant_data(participant, rtps_sub.data); gen_participant_data(participant, rtps_sub.data);
gen_sentinel(rtps_sub.data); gen_sentinel(rtps_sub.data);
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, participant.guidPrefix, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
SB.Push(gen_participant_mem_frame(participant)); SB.Push(gen_participant_mem_frame(participant));
start_test; start_test;
wait_on_complete; wait_on_complete;
@ -488,7 +488,7 @@ begin
-- Mark Packet as non-standard Payload, in order to trigger the packet to be skipped (as early as possible) -- Mark Packet as non-standard Payload, in order to trigger the packet to be skipped (as early as possible)
rtps_sub.data := EMPTY_TEST_PACKET; rtps_sub.data := EMPTY_TEST_PACKET;
rtps_sub.flags(SUBMESSAGE_NON_STANDARD_PAYLOAD_FLAG_POS):= '1'; rtps_sub.flags(SUBMESSAGE_NON_STANDARD_PAYLOAD_FLAG_POS):= '1';
gen_rtps_handler_out(rtps_sub, gen_rand_loc_2, TRUE, TIME_INVALID, p0, stimulus); gen_rtps_handler_out(rtps_sub, participant, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;

View File

@ -334,7 +334,7 @@ begin
sub.writerSN := p0_sn; sub.writerSN := p0_sn;
gen_participant_data(p0, sub.data); gen_participant_data(p0, sub.data);
gen_sentinel(sub.data); gen_sentinel(sub.data);
gen_rtps_handler_out(sub, gen_rand_loc_2, TRUE, TIME_INVALID, p0.guidPrefix, stimulus); gen_rtps_handler_out(sub, p0, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -348,7 +348,7 @@ begin
sub.writerSN := p1_sn; sub.writerSN := p1_sn;
gen_participant_data(p1, sub.data); gen_participant_data(p1, sub.data);
gen_sentinel(sub.data); gen_sentinel(sub.data);
gen_rtps_handler_out(sub, gen_rand_loc_2, TRUE, TIME_INVALID, p1.guidPrefix, stimulus); gen_rtps_handler_out(sub, p1, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -362,7 +362,7 @@ begin
sub.writerSN := p2_sn; sub.writerSN := p2_sn;
gen_participant_data(p2, sub.data); gen_participant_data(p2, sub.data);
gen_sentinel(sub.data); gen_sentinel(sub.data);
gen_rtps_handler_out(sub, gen_rand_loc_2, TRUE, TIME_INVALID, p2.guidPrefix, stimulus); gen_rtps_handler_out(sub, p2, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -378,7 +378,7 @@ begin
endpoint.participant := p0; endpoint.participant := p0;
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := gen_wr(i, FALSE); wr_sig := gen_wr(i, FALSE);
if (or wr_sig = '1') then if (or wr_sig = '1') then
@ -401,7 +401,7 @@ begin
endpoint.littleEndian:= '1'; endpoint.littleEndian:= '1';
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := gen_wr(i, FALSE); wr_sig := gen_wr(i, FALSE);
if (or wr_sig = '1') then if (or wr_sig = '1') then
@ -423,7 +423,7 @@ begin
endpoint.participant := p0; endpoint.participant := p0;
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := gen_wr(i, TRUE); wr_sig := gen_wr(i, TRUE);
if (or wr_sig = '1') then if (or wr_sig = '1') then
@ -446,7 +446,7 @@ begin
endpoint.littleEndian:= '1'; endpoint.littleEndian:= '1';
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := gen_wr(i, TRUE); wr_sig := gen_wr(i, TRUE);
if (or wr_sig = '1') then if (or wr_sig = '1') then
@ -467,7 +467,7 @@ begin
p1.match := UNMATCH; p1.match := UNMATCH;
gen_participant_data(p1, sub.data); gen_participant_data(p1, sub.data);
gen_sentinel(sub.data); gen_sentinel(sub.data);
gen_rtps_handler_out(sub, gen_rand_loc_2, TRUE, TIME_INVALID, p1.guidPrefix, stimulus); gen_rtps_handler_out(sub, p1, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -515,7 +515,7 @@ begin
endpoint.durability := PERSISTENT_DURABILITY_QOS; endpoint.durability := PERSISTENT_DURABILITY_QOS;
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := (0 => '1', 3 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0'); wr_sig := (0 => '1', 3 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0');
push_reference; push_reference;
@ -536,7 +536,7 @@ begin
endpoint.presentation := GROUP_PRESENTATION_QOS; endpoint.presentation := GROUP_PRESENTATION_QOS;
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := (0 => '1', 4 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0'); wr_sig := (0 => '1', 4 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0');
push_reference; push_reference;
@ -557,7 +557,7 @@ begin
endpoint.ownership := EXCLUSIVE_OWNERSHIP_QOS; endpoint.ownership := EXCLUSIVE_OWNERSHIP_QOS;
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -578,7 +578,7 @@ begin
endpoint.max_size_serialized:= std_logic_vector(to_unsigned(65000, CDR_LONG_WIDTH)); endpoint.max_size_serialized:= std_logic_vector(to_unsigned(65000, CDR_LONG_WIDTH));
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0'); wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0');
push_reference; push_reference;
@ -602,7 +602,7 @@ begin
endpoint.max_size_serialized:= std_logic_vector(to_unsigned(66000, CDR_LONG_WIDTH)); endpoint.max_size_serialized:= std_logic_vector(to_unsigned(66000, CDR_LONG_WIDTH));
gen_endpoint_data(endpoint, sub_p.data); gen_endpoint_data(endpoint, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, endpoint, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -622,7 +622,7 @@ begin
endpoint.durability := PERSISTENT_DURABILITY_QOS; endpoint.durability := PERSISTENT_DURABILITY_QOS;
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -640,7 +640,7 @@ begin
endpoint.presentation := GROUP_PRESENTATION_QOS; endpoint.presentation := GROUP_PRESENTATION_QOS;
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -659,7 +659,7 @@ begin
endpoint.ownership := EXCLUSIVE_OWNERSHIP_QOS; endpoint.ownership := EXCLUSIVE_OWNERSHIP_QOS;
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
start_test; start_test;
wait_on_complete; wait_on_complete;
stimulus := EMPTY_TEST_PACKET; stimulus := EMPTY_TEST_PACKET;
@ -680,7 +680,7 @@ begin
endpoint.expectsInlineQoS(0):= '1'; endpoint.expectsInlineQoS(0):= '1';
gen_endpoint_data(endpoint, sub_s.data); gen_endpoint_data(endpoint, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, endpoint.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, endpoint, stimulus);
gen_match_frame(endpoint, reference); gen_match_frame(endpoint, reference);
wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0'); wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0');
push_reference; push_reference;
@ -697,7 +697,7 @@ begin
sub_p.writerSN := p2_snp; sub_p.writerSN := p2_snp;
gen_endpoint_data(e1, sub_p.data); gen_endpoint_data(e1, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, e1.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, e1, stimulus);
gen_match_frame(e1, reference); gen_match_frame(e1, reference);
wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0'); wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0');
push_reference; push_reference;
@ -712,7 +712,7 @@ begin
sub_s.writerSN := p2_sns; sub_s.writerSN := p2_sns;
gen_endpoint_data(e2, sub_s.data); gen_endpoint_data(e2, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, e2.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, e2, stimulus);
gen_match_frame(e2, reference); gen_match_frame(e2, reference);
wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0'); wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0');
push_reference; push_reference;
@ -731,7 +731,7 @@ begin
e1.unicastLocatorList.locator(3).portn := (others => '0'); e1.unicastLocatorList.locator(3).portn := (others => '0');
gen_endpoint_data(e1, sub_p.data); gen_endpoint_data(e1, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, e1.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, e1, stimulus);
gen_match_frame(e1, reference); gen_match_frame(e1, reference);
wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0'); wr_sig := (0 => '1', 9 => '1', 10 => '1', 15 => '1', others => '0');
push_reference; push_reference;
@ -750,7 +750,7 @@ begin
e2.multicastLocatorList.locator(3).portn := (others => '0'); e2.multicastLocatorList.locator(3).portn := (others => '0');
gen_endpoint_data(e2, sub_s.data); gen_endpoint_data(e2, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, e2.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, e2, stimulus);
gen_match_frame(e2, reference); gen_match_frame(e2, reference);
wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0'); wr_sig := (NUM_READERS => '1', NUM_READERS+4 => '1', NUM_READERS+5 => '1', NUM_READERS+7 => '1', others => '0');
push_reference; push_reference;
@ -766,7 +766,7 @@ begin
e1.reliability := BEST_EFFORT_RELIABILITY_QOS; e1.reliability := BEST_EFFORT_RELIABILITY_QOS;
gen_endpoint_data(e1, sub_p.data); gen_endpoint_data(e1, sub_p.data);
gen_sentinel(sub_p.data); gen_sentinel(sub_p.data);
gen_rtps_handler_out(sub_p, gen_rand_loc_2, TRUE, TIME_INVALID, e1.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_p, e1, stimulus);
-- MATCH -- MATCH
gen_match_frame(e1, reference); gen_match_frame(e1, reference);
wr_sig := (15 => '1', others => '0'); wr_sig := (15 => '1', others => '0');
@ -790,7 +790,7 @@ begin
e2.type_name := ENDPOINT_TYPE(2); e2.type_name := ENDPOINT_TYPE(2);
gen_endpoint_data(e2, sub_s.data); gen_endpoint_data(e2, sub_s.data);
gen_sentinel(sub_s.data); gen_sentinel(sub_s.data);
gen_rtps_handler_out(sub_s, gen_rand_loc_2, TRUE, TIME_INVALID, e2.participant.guidPrefix, stimulus); gen_rtps_handler_out(sub_s, e2, stimulus);
-- MATCH -- MATCH
gen_match_frame(e2, reference); gen_match_frame(e2, reference);
wr_sig := (NUM_READERS+2 => '1', others => '0'); wr_sig := (NUM_READERS+2 => '1', others => '0');

View File

@ -11,6 +11,7 @@ use work.rtps_config_package.all;
-- TODO: Skip Packet while we are waiting for memory operation to complete -- TODO: Skip Packet while we are waiting for memory operation to complete
-- TODO: add_res is still valid after removal. So we could continue searching the next orphan endpoint from that address on -- TODO: add_res is still valid after removal. So we could continue searching the next orphan endpoint from that address on
-- TODO: is it really necessary to process Sequence Numbers in sequence? Could we not just accept any higher Sequence Number? -- TODO: is it really necessary to process Sequence Numbers in sequence? Could we not just accept any higher Sequence Number?
-- TODO: Remove the Endpoint Bitmask from Memory and just always send MATCH/UNMATCH Frames
entity rtps_builtin_endpoint is entity rtps_builtin_endpoint is
port ( port (

View File

@ -40,9 +40,6 @@ package rtps_test_package is
subtype TEST_PARTICIPANT_MEMORY_FRAME_TYPE is TEST_MEMORY_TYPE(0 to PARTICIPANT_FRAME_SIZE-1); subtype TEST_PARTICIPANT_MEMORY_FRAME_TYPE is TEST_MEMORY_TYPE(0 to PARTICIPANT_FRAME_SIZE-1);
subtype TEST_ENDPOINT_MEMORY_FRAME_TYPE is TEST_MEMORY_TYPE(0 to ENDPOINT_FRAME_SIZE-1); subtype TEST_ENDPOINT_MEMORY_FRAME_TYPE is TEST_MEMORY_TYPE(0 to ENDPOINT_FRAME_SIZE-1);
function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean;
function to_string (input : TEST_MEMORY_TYPE) return string;
constant LOCATOR_PORT_WIDTH : natural := CDR_LONG_WIDTH; constant LOCATOR_PORT_WIDTH : natural := CDR_LONG_WIDTH;
constant LOCATOR_ADDR_WIDTH : natural := 4*CDR_LONG_WIDTH; constant LOCATOR_ADDR_WIDTH : natural := 4*CDR_LONG_WIDTH;
@ -96,9 +93,6 @@ package rtps_test_package is
constant DEFAULT_UDP_HEADER : UDP_HEADER_TYPE; -- Deferred to Package Body constant DEFAULT_UDP_HEADER : UDP_HEADER_TYPE; -- Deferred to Package Body
procedure gen_udp_header(ref : in UDP_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
procedure fix_udp_packet(output : inout TEST_PACKET_TYPE);
-- *RTPS HEADER* -- *RTPS HEADER*
type RTPS_HEADER_TYPE is record type RTPS_HEADER_TYPE is record
protocol : std_logic_vector(PROTOCOL_WIDTH-1 downto 0); protocol : std_logic_vector(PROTOCOL_WIDTH-1 downto 0);
@ -109,8 +103,6 @@ package rtps_test_package is
constant DEFAULT_RTPS_HEADER : RTPS_HEADER_TYPE; -- Deferred to Package Body constant DEFAULT_RTPS_HEADER : RTPS_HEADER_TYPE; -- Deferred to Package Body
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
-- *GENERIC RTPS SUBMESSAGE HEADER* -- *GENERIC RTPS SUBMESSAGE HEADER*
type RTPS_SUBMESSAGE_TYPE is record type RTPS_SUBMESSAGE_TYPE is record
submessageID : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0); submessageID : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0);
@ -147,9 +139,6 @@ package rtps_test_package is
constant DEFAULT_RTPS_SUBMESSAGE : RTPS_SUBMESSAGE_TYPE; -- Deferred to Package Body constant DEFAULT_RTPS_SUBMESSAGE : RTPS_SUBMESSAGE_TYPE; -- Deferred to Package Body
procedure gen_rtps_submessage( ref : in RTPS_SUBMESSAGE_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; loc : in LOCATOR_TYPE; is_meta : in boolean; ts : in TIME_TYPE; src_guid : in GUIDPREFIX_TYPE; output : inout TEST_PACKET_TYPE);
type PARTICIPANT_DATA_TYPE is record type PARTICIPANT_DATA_TYPE is record
littleEndian : std_logic; littleEndian : std_logic;
domainId : std_logic_vector(DOMAIN_ID_WIDTH-1 downto 0); domainId : std_logic_vector(DOMAIN_ID_WIDTH-1 downto 0);
@ -173,10 +162,6 @@ package rtps_test_package is
constant DEFAULT_PARTICIPANT_DATA : PARTICIPANT_DATA_TYPE; -- Deferred to Pckage Body constant DEFAULT_PARTICIPANT_DATA : PARTICIPANT_DATA_TYPE; -- Deferred to Pckage Body
procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
--function gen_participant_data2 ( ref : PARTICIPANT_DATA_TYPE) return TEST_PACKET_TYPE;
function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE;
type ENDPOINT_DATA_TYPE is record type ENDPOINT_DATA_TYPE is record
littleEndian : std_logic; littleEndian : std_logic;
participant : PARTICIPANT_DATA_TYPE; participant : PARTICIPANT_DATA_TYPE;
@ -219,11 +204,30 @@ package rtps_test_package is
constant DEFAULT_ENDPOINT_DATA : ENDPOINT_DATA_TYPE; -- Deferred to Package Body constant DEFAULT_ENDPOINT_DATA : ENDPOINT_DATA_TYPE; -- Deferred to Package Body
type ENDPOINT_DATA_ARRAY_TYPE is array (natural range <>) of ENDPOINT_DATA_TYPE; type ENDPOINT_DATA_ARRAY_TYPE is array (natural range <>) of ENDPOINT_DATA_TYPE;
function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean;
function to_string (input : TEST_MEMORY_TYPE) return string;
procedure gen_udp_header(ref : in UDP_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
procedure fix_udp_packet(output : inout TEST_PACKET_TYPE);
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rtps_submessage( ref : in RTPS_SUBMESSAGE_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; loc : in LOCATOR_TYPE; is_meta : in boolean; ts : in TIME_TYPE; src_guid : in GUIDPREFIX_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; participant : PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; endpoint : ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE;
procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
procedure gen_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
function gen_endpoint_array(readers : boolean) return ENDPOINT_DATA_ARRAY_TYPE; function gen_endpoint_array(readers : boolean) return ENDPOINT_DATA_ARRAY_TYPE;
procedure gen_sentinel(output : inout TEST_PACKET_TYPE); procedure gen_sentinel(output : inout TEST_PACKET_TYPE);
procedure gen_parameter(pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); length : in natural; data : in TEST_PACKET_TYPE; output : inout TEST_PACKET_TYPE);
procedure gen_rand_loc(RV : inout RandomPType; ret : out LOCATOR_TYPE); procedure gen_rand_loc(RV : inout RandomPType; ret : out LOCATOR_TYPE);
procedure gen_rand_entityid(RV : inout RandomPType; reader : boolean; ret : out std_logic_vector(ENTITYID_WIDTH-1 downto 0)); procedure gen_rand_entityid(RV : inout RandomPType; reader : boolean; ret : out std_logic_vector(ENTITYID_WIDTH-1 downto 0));
@ -579,6 +583,43 @@ package body rtps_test_package is
return ret; return ret;
end function; end function;
function get_loc (ref : PARTICIPANT_DATA_TYPE; meta : boolean) return LOCATOR_TYPE is
begin
if (meta) then
if (is_valid_loc(get_loc(ref.metatrafficUnicastLocatorList))) then
return get_loc(ref.metatrafficUnicastLocatorList);
elsif (is_valid_loc(get_loc(ref.metatrafficMulticastLocatorList))) then
return get_loc(ref.metatrafficMulticastLocatorList);
else
return DEST_LOC.meta.locator(0);
end if;
else
if (is_valid_loc(get_loc(ref.defaultUnicastLocatorList))) then
return get_loc(ref.defaultUnicastLocatorList);
elsif (is_valid_loc(get_loc(ref.defaultMulticastLocatorList))) then
return get_loc(ref.defaultMulticastLocatorList);
else
return EMPTY_LOCATOR;
end if;
end if;
end function;
function get_loc (ref : ENDPOINT_DATA_TYPE) return LOCATOR_TYPE is
begin
if (is_valid_loc(get_loc(ref.unicastLocatorList))) then
return get_loc(ref.unicastLocatorList);
elsif (is_valid_loc(get_loc(ref.multicastLocatorList))) then
return get_loc(ref.multicastLocatorList);
elsif (is_valid_loc(get_loc(ref.participant.defaultUnicastLocatorList))) then
return get_loc(ref.participant.defaultUnicastLocatorList);
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;
return EMPTY_LOCATOR;
end if;
end function;
procedure gen_rtps_submessage( ref : in RTPS_SUBMESSAGE_TYPE; output : inout TEST_PACKET_TYPE) is procedure gen_rtps_submessage( ref : in RTPS_SUBMESSAGE_TYPE; output : inout TEST_PACKET_TYPE) is
variable start : natural := 0; variable start : natural := 0;
variable tmp : natural := 0; variable tmp : natural := 0;
@ -872,7 +913,17 @@ package body rtps_test_package is
output.last(output.length-1) := '1'; output.last(output.length-1) := '1';
end procedure; end procedure;
procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; participant : PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is
begin
gen_rtps_handler_out(ref, get_loc(participant, TRUE), TRUE, TIME_INVALID, participant.guidPrefix, output);
end procedure;
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; endpoint : ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is
begin
gen_rtps_handler_out(ref, get_loc(endpoint.participant, TRUE), TRUE, TIME_INVALID, endpoint.participant.guidPrefix, output);
end procedure;
procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer) is
variable tmp : natural := 0; variable tmp : natural := 0;
begin begin
-- Representation Identifier & Representation Options -- Representation Identifier & Representation Options
@ -883,7 +934,12 @@ package body rtps_test_package is
end if; end if;
output.length := output.length + 1; output.length := output.length + 1;
-- GUID -- GUID
if (pid = PID_PARTICIPANT_GUID) then
assert (16+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_PARTICIPANT_GUID & endian_swap(ref.littleEndian, int(16+(offset*4), PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_PARTICIPANT_GUID & endian_swap(ref.littleEndian, int(16, PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_PARTICIPANT_GUID & endian_swap(ref.littleEndian, int(16, PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.guidPrefix(0); output.data(output.length) := ref.guidPrefix(0);
output.length := output.length + 1; output.length := output.length + 1;
@ -893,15 +949,31 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.entityId; output.data(output.length) := ref.entityId;
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_PARTICIPANT_GUID) then
output.length := output.length + offset;
end if;
-- DOMAIN ID -- DOMAIN ID
if (pid = PID_DOMAIN_ID) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DOMAIN_ID & endian_swap(ref.littleEndian, int(4+(offset*4), PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DOMAIN_ID & endian_swap(ref.littleEndian, int(4, PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DOMAIN_ID & endian_swap(ref.littleEndian, int(4, PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.domainId); output.data(output.length) := endian_swap(ref.littleEndian, ref.domainId);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DOMAIN_ID) then
output.length := output.length + offset;
end if;
-- DOMAIN TAG -- DOMAIN TAG
if (ref.domainTag /= DEFAULT_DOMAIN_TAG) then if (ref.domainTag /= DEFAULT_DOMAIN_TAG) then
tmp := string_len(ref.domainTag); tmp := string_len(ref.domainTag);
if (pid = PID_DOMAIN_TAG) then
assert (((round_div(tmp,4)+1)*4)+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DOMAIN_TAG & endian_swap(ref.littleEndian, int(((round_div(tmp,4)+1)*4)+(offset*4), PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DOMAIN_TAG & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4, PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DOMAIN_TAG & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4, PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, int(tmp, CDR_LONG_WIDTH)); output.data(output.length) := endian_swap(ref.littleEndian, int(tmp, CDR_LONG_WIDTH));
output.length := output.length + 1; output.length := output.length + 1;
@ -909,32 +981,64 @@ package body rtps_test_package is
output.data(output.length) := ref.domainTag(i); output.data(output.length) := ref.domainTag(i);
output.length := output.length + 1; output.length := output.length + 1;
end loop; end loop;
if (pid = PID_DOMAIN_TAG) then
output.length := output.length + offset;
end if;
end if; end if;
-- PROTOCOL VERSION -- PROTOCOL VERSION
if (pid = PID_PROTOCOL_VERSION) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_PROTOCOL_VERSION & endian_swap(ref.littleEndian, int(4+(offset*4), PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_PROTOCOL_VERSION & endian_swap(ref.littleEndian, int(4, PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_PROTOCOL_VERSION & endian_swap(ref.littleEndian, int(4, PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := (others => '0'); output.data(output.length) := (others => '0');
output.data(output.length)(31 downto 16) := ref.protocolVersion; output.data(output.length)(31 downto 16) := ref.protocolVersion;
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_PROTOCOL_VERSION) then
output.length := output.length + offset;
end if;
-- VENDORID -- VENDORID
if (pid = PID_VENDORID) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_VENDORID & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_VENDORID & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_VENDORID & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := (others => '0'); output.data(output.length) := (others => '0');
output.data(output.length)(31 downto 16) := ref.vendorId; output.data(output.length)(31 downto 16) := ref.vendorId;
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_VENDORID) then
output.length := output.length + offset;
end if;
-- EXPECTS IN-LINE QOS -- EXPECTS IN-LINE QOS
if (ref.expectsInlineQoS(0) /= DEFAULT_EXPECTS_INLINE_QOS) then if (ref.expectsInlineQoS(0) /= DEFAULT_EXPECTS_INLINE_QOS) then
if (pid = PID_EXPECTS_INLINE_QOS) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := (others => '0'); output.data(output.length) := (others => '0');
output.data(output.length)(31 downto 24) := ref.expectsInlineQoS; -- 1 Byte, No endian swap output.data(output.length)(31 downto 24) := ref.expectsInlineQoS; -- 1 Byte, No endian swap
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_EXPECTS_INLINE_QOS) then
output.length := output.length + offset;
end if;
end if; end if;
-- METATRAFFIC MULTICAST LOCATOR -- METATRAFFIC MULTICAST LOCATOR
if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'range => '0')) then if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'range => '0')) then
tmp := to_integer(unsigned(ref.metatrafficMulticastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.metatrafficMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_METATRAFFIC_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_METATRAFFIC_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_METATRAFFIC_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.metatrafficMulticastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.metatrafficMulticastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -948,13 +1052,21 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.metatrafficMulticastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.metatrafficMulticastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- METATRAFFIC UNICAST LOCATOR -- METATRAFFIC UNICAST LOCATOR
if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'range => '0')) then if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'range => '0')) then
tmp := to_integer(unsigned(ref.metatrafficUnicastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.metatrafficUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_METATRAFFIC_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_METATRAFFIC_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_METATRAFFIC_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.metatrafficUnicastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.metatrafficUnicastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -968,13 +1080,21 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.metatrafficUnicastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.metatrafficUnicastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- DEFAULT MULTICAST LOCATOR -- DEFAULT MULTICAST LOCATOR
if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'range => '0')) then if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'range => '0')) then
tmp := to_integer(unsigned(ref.defaultMulticastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.defaultMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DEFAULT_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DEFAULT_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DEFAULT_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.defaultMulticastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.defaultMulticastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -988,6 +1108,9 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.defaultMulticastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.defaultMulticastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- DEFAULT UNICAST LOCATOR -- DEFAULT UNICAST LOCATOR
@ -995,7 +1118,12 @@ package body rtps_test_package is
if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'range => '0')) then if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'range => '0')) then
tmp := to_integer(unsigned(ref.defaultUnicastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.defaultUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_UNICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DEFAULT_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DEFAULT_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DEFAULT_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.defaultUnicastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.defaultUnicastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -1009,35 +1137,60 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.defaultUnicastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.defaultUnicastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DEFAULT_UNICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- LEASE DURATION -- LEASE DURATION
if (ref.leaseDuration /= DEFAULT_PARTICIPANT_LEASE_DURATION) then if (ref.leaseDuration /= DEFAULT_PARTICIPANT_LEASE_DURATION) then
if (pid = PID_PARTICIPANT_LEASE_DURATION) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_PARTICIPANT_LEASE_DURATION & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_PARTICIPANT_LEASE_DURATION & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_PARTICIPANT_LEASE_DURATION & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(0)));
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_PARTICIPANT_LEASE_DURATION) then
output.length := output.length + offset;
end if;
end if; end if;
-- AVAILABLE ENDPOINTS -- AVAILABLE ENDPOINTS
if (pid = PID_BUILTIN_ENDPOINT_SET) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_BUILTIN_ENDPOINT_SET & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_BUILTIN_ENDPOINT_SET & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_BUILTIN_ENDPOINT_SET & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.availableBuiltinEndpoints); output.data(output.length) := endian_swap(ref.littleEndian, ref.availableBuiltinEndpoints);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_BUILTIN_ENDPOINT_SET) then
output.length := output.length + offset;
end if;
-- MANUAL LIVELINESS COUNT -- MANUAL LIVELINESS COUNT
if (pid = PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.manualLivelinessCount); output.data(output.length) := endian_swap(ref.littleEndian, ref.manualLivelinessCount);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT) then
output.length := output.length + offset;
end if;
end procedure; end procedure;
--function gen_participant_data2 ( ref : PARTICIPANT_DATA_TYPE) return TEST_PACKET_TYPE is procedure gen_participant_data( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is
-- variable ret : TEST_PACKET_TYPE := (length => 0, data => (others => (others => '0')), last => (others => '0')); begin
--begin gen_participant_data(ref, output, PID_PAD, 0);
-- gen_participant_data(ref, ret); end procedure;
-- return ret;
--end function;
function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE is function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE is
variable ret : TEST_PARTICIPANT_MEMORY_FRAME_TYPE; variable ret : TEST_PARTICIPANT_MEMORY_FRAME_TYPE;
@ -1051,20 +1204,8 @@ package body rtps_test_package is
start := PARTICIPANT_FRAME_SIZE * ref.nr; start := PARTICIPANT_FRAME_SIZE * ref.nr;
-- Fetch relevant Locators -- Fetch relevant Locators
if (is_valid_loc(get_loc(ref.metatrafficUnicastLocatorList))) then meta_loc := get_loc (ref, TRUE);
meta_loc := get_loc(ref.metatrafficUnicastLocatorList); user_loc := get_loc (ref, FALSE);
elsif (is_valid_loc(get_loc(ref.metatrafficMulticastLocatorList))) then
meta_loc := get_loc(ref.metatrafficMulticastLocatorList);
else
meta_loc := DEST_LOC.meta.locator(0);
end if;
if (is_valid_loc(get_loc(ref.defaultUnicastLocatorList))) then
user_loc := get_loc(ref.defaultUnicastLocatorList);
elsif (is_valid_loc(get_loc(ref.defaultMulticastLocatorList))) then
user_loc := get_loc(ref.defaultMulticastLocatorList);
else
user_loc := EMPTY_LOCATOR;
end if;
for i in 0 to PARTICIPANT_FRAME_SIZE-1 loop for i in 0 to PARTICIPANT_FRAME_SIZE-1 loop
ret(i).addr := start + i; ret(i).addr := start + i;
@ -1140,7 +1281,7 @@ package body rtps_test_package is
return ret; return ret;
end function; end function;
procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer) is
variable tmp : natural := 0; variable tmp : natural := 0;
begin begin
-- Representation Identifier & Representation Options -- Representation Identifier & Representation Options
@ -1151,7 +1292,12 @@ package body rtps_test_package is
end if; end if;
output.length := output.length + 1; output.length := output.length + 1;
-- GUID -- GUID
if (pid = PID_ENDPOINT_GUID) then
assert (16+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_ENDPOINT_GUID & endian_swap(ref.littleEndian, int(16+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_ENDPOINT_GUID & endian_swap(ref.littleEndian, int(16,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_ENDPOINT_GUID & endian_swap(ref.littleEndian, int(16,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.participant.guidPrefix(0); output.data(output.length) := ref.participant.guidPrefix(0);
output.length := output.length + 1; output.length := output.length + 1;
@ -1161,17 +1307,33 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.entityId; output.data(output.length) := ref.entityId;
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_ENDPOINT_GUID) then
output.length := output.length + offset;
end if;
-- EXPECTS IN-LINE QOS -- EXPECTS IN-LINE QOS
if (ref.expectsInlineQoS(0) /= '0') then if (ref.expectsInlineQoS(0) /= '0') then
if (pid = PID_EXPECTS_INLINE_QOS) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_EXPECTS_INLINE_QOS & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := (others => '0'); output.data(output.length) := (others => '0');
output.data(output.length)(31 downto 24) := ref.expectsInlineQoS; -- 1 Byte, No endian swap output.data(output.length)(31 downto 24) := ref.expectsInlineQoS; -- 1 Byte, No endian swap
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_EXPECTS_INLINE_QOS) then
output.length := output.length + offset;
end if;
end if; end if;
-- TOPIC NAME -- TOPIC NAME
tmp := string_len(ref.topic_name); tmp := string_len(ref.topic_name);
if (pid = PID_TOPIC_NAME) then
assert (((round_div(tmp,4)+1)*4)+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_TOPIC_NAME & endian_swap(ref.littleEndian, int(((round_div(tmp,4)+1)*4)+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_TOPIC_NAME & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_TOPIC_NAME & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, int(tmp, CDR_LONG_WIDTH)); output.data(output.length) := endian_swap(ref.littleEndian, int(tmp, CDR_LONG_WIDTH));
output.length := output.length + 1; output.length := output.length + 1;
@ -1179,9 +1341,17 @@ package body rtps_test_package is
output.data(output.length) := ref.topic_name(i); output.data(output.length) := ref.topic_name(i);
output.length := output.length + 1; output.length := output.length + 1;
end loop; end loop;
if (pid = PID_TOPIC_NAME) then
output.length := output.length + offset;
end if;
-- TYPE NAME -- TYPE NAME
tmp := string_len(ref.type_name); tmp := string_len(ref.type_name);
if (pid = PID_TYPE_NAME) then
assert (((round_div(tmp,4)+1)*4)+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_TYPE_NAME & endian_swap(ref.littleEndian, int(((round_div(tmp,4)+1)*4)+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_TYPE_NAME & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_TYPE_NAME & endian_swap(ref.littleEndian, int((round_div(tmp,4)+1)*4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, int(tmp,CDR_LONG_WIDTH)); output.data(output.length) := endian_swap(ref.littleEndian, int(tmp,CDR_LONG_WIDTH));
output.length := output.length + 1; output.length := output.length + 1;
@ -1189,19 +1359,34 @@ package body rtps_test_package is
output.data(output.length) := ref.type_name(i); output.data(output.length) := ref.type_name(i);
output.length := output.length + 1; output.length := output.length + 1;
end loop; end loop;
if (pid = PID_TYPE_NAME) then
output.length := output.length + offset;
end if;
-- DURABILITY -- DURABILITY
if (ref.durability /= DEFAULT_DURABILITY_QOS) then if (ref.durability /= DEFAULT_DURABILITY_QOS) then
if (pid = PID_DURABILITY) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DURABILITY & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DURABILITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DURABILITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.durability); output.data(output.length) := endian_swap(ref.littleEndian, ref.durability);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DURABILITY) then
output.length := output.length + offset;
end if;
end if; end if;
-- DURABILITY SERVICE -- DURABILITY SERVICE
if (ref.durability_service_cleanup_delay /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ref.durability_service_history /= DEFAULT_DURABILITY_SERVICE_HISTORY or if (ref.durability_service_cleanup_delay /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ref.durability_service_history /= DEFAULT_DURABILITY_SERVICE_HISTORY or
ref.durability_service_history_depth /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ref.durability_service_max_samples /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or ref.durability_service_history_depth /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ref.durability_service_max_samples /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or
ref.durability_service_max_instances /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ref.durability_service_max_samples_per_instances /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE) then ref.durability_service_max_instances /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ref.durability_service_max_samples_per_instances /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE) then
if (pid = PID_DURABILITY_SERVICE) then
assert (28+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DURABILITY_SERVICE & endian_swap(ref.littleEndian, int(28+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DURABILITY_SERVICE & endian_swap(ref.littleEndian, int(28,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DURABILITY_SERVICE & endian_swap(ref.littleEndian, int(28,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.durability_service_cleanup_delay(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.durability_service_cleanup_delay(0)));
output.length := output.length + 1; output.length := output.length + 1;
@ -1217,51 +1402,99 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.durability_service_max_samples_per_instances); output.data(output.length) := endian_swap(ref.littleEndian, ref.durability_service_max_samples_per_instances);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DURABILITY_SERVICE) then
output.length := output.length + offset;
end if;
end if; end if;
-- PRESENTATION -- PRESENTATION
if (ref.presentation /= DEFAULT_PRESENTATION_QOS or ref.coherent_access(0) /= boolean_to_std_logic(DEFAULT_COHERENT_ACCESS) or ref.ordered_access(0) /= boolean_to_std_logic(DEFAULT_ORDERED_ACCESS)) then if (ref.presentation /= DEFAULT_PRESENTATION_QOS or ref.coherent_access(0) /= boolean_to_std_logic(DEFAULT_COHERENT_ACCESS) or ref.ordered_access(0) /= boolean_to_std_logic(DEFAULT_ORDERED_ACCESS)) then
if (pid = PID_PRESENTATION) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_PRESENTATION & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_PRESENTATION & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_PRESENTATION & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.presentation); output.data(output.length) := endian_swap(ref.littleEndian, ref.presentation);
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.coherent_access) & endian_swap(ref.littleEndian, ref.ordered_access) & (0 to 15 => '0'); output.data(output.length) := endian_swap(ref.littleEndian, ref.coherent_access) & endian_swap(ref.littleEndian, ref.ordered_access) & (0 to 15 => '0');
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_PRESENTATION) then
output.length := output.length + offset;
end if;
end if; end if;
-- DEADLINE -- DEADLINE
if (ref.deadline /= DEFAULT_DEADLINE_QOS) then if (ref.deadline /= DEFAULT_DEADLINE_QOS) then
if (pid = PID_DEADLINE) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DEADLINE & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DEADLINE & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DEADLINE & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.deadline(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.deadline(0)));
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.deadline(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.deadline(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DEADLINE) then
output.length := output.length + offset;
end if;
end if; end if;
-- LATENCY BUDGET -- LATENCY BUDGET
if (ref.latency_budget /= DEFAULT_LATENCY_BUDGET_QOS) then if (ref.latency_budget /= DEFAULT_LATENCY_BUDGET_QOS) then
if (pid = PID_LATENCY_BUDGET) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_LATENCY_BUDGET & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_LATENCY_BUDGET & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_LATENCY_BUDGET & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.latency_budget(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.latency_budget(0)));
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.latency_budget(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.latency_budget(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_LATENCY_BUDGET) then
output.length := output.length + offset;
end if;
end if; end if;
-- OWNERSHIP -- OWNERSHIP
if (ref.ownership /= DEFAULT_OWNERSHIP_QOS) then if (ref.ownership /= DEFAULT_OWNERSHIP_QOS) then
if (pid = PID_OWNERSHIP) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_OWNERSHIP & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_OWNERSHIP & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_OWNERSHIP & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.ownership); output.data(output.length) := endian_swap(ref.littleEndian, ref.ownership);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_OWNERSHIP) then
output.length := output.length + offset;
end if;
end if; end if;
-- OWNERSHIP STRENGTH -- OWNERSHIP STRENGTH
if (ref.ownership /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then if (ref.ownership /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then
if (pid = PID_OWNERSHIP_STRENGTH) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_OWNERSHIP_STRENGTH & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_OWNERSHIP_STRENGTH & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_OWNERSHIP_STRENGTH & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.ownership_strength); output.data(output.length) := endian_swap(ref.littleEndian, ref.ownership_strength);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_OWNERSHIP_STRENGTH) then
output.length := output.length + offset;
end if;
end if; end if;
-- LIVELINESS -- LIVELINESS
if (ref.liveliness /= DEFAULT_LIVELINESS_QOS or ref.leaseDuration /= DEFAULT_LEASE_DURATION) then if (ref.liveliness /= DEFAULT_LIVELINESS_QOS or ref.leaseDuration /= DEFAULT_LEASE_DURATION) then
if (pid = PID_LIVELINESS) then
assert (12+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_LIVELINESS & endian_swap(ref.littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_LIVELINESS & endian_swap(ref.littleEndian, int(12,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_LIVELINESS & endian_swap(ref.littleEndian, int(12,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.liveliness); output.data(output.length) := endian_swap(ref.littleEndian, ref.liveliness);
output.length := output.length + 1; output.length := output.length + 1;
@ -1269,19 +1502,35 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.leaseDuration(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_LIVELINESS) then
output.length := output.length + offset;
end if;
end if; end if;
-- TIME BASED FILTER -- TIME BASED FILTER
if (ref.time_based_filter /= DEFAULT_TIME_BASED_FILTER_QOS) then if (ref.time_based_filter /= DEFAULT_TIME_BASED_FILTER_QOS) then
if (pid = PID_TIME_BASED_FILTER) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_TIME_BASED_FILTER & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_TIME_BASED_FILTER & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_TIME_BASED_FILTER & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.time_based_filter(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.time_based_filter(0)));
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.time_based_filter(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.time_based_filter(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_TIME_BASED_FILTER) then
output.length := output.length + offset;
end if;
end if; end if;
-- RELIABILITY -- RELIABILITY
if (ref.reliability /= DEFAULT_RELIABILTY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME) then if (ref.reliability /= DEFAULT_RELIABILTY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME) then
if (pid = PID_RELIABILITY) then
assert (12+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_RELIABILITY & endian_swap(ref.littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_RELIABILITY & endian_swap(ref.littleEndian, int(12,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_RELIABILITY & endian_swap(ref.littleEndian, int(12,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.reliability); output.data(output.length) := endian_swap(ref.littleEndian, ref.reliability);
output.length := output.length + 1; output.length := output.length + 1;
@ -1289,35 +1538,67 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.max_blocking_time(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.max_blocking_time(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_RELIABILITY) then
output.length := output.length + offset;
end if;
end if; end if;
-- TRANSPORT PRIORITY -- TRANSPORT PRIORITY
if (ref.transportnpriority /= DEFAULT_TRANSPORT_PRIORITY_QOS) then if (ref.transportnpriority /= DEFAULT_TRANSPORT_PRIORITY_QOS) 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));
else
output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.transportnpriority); output.data(output.length) := endian_swap(ref.littleEndian, ref.transportnpriority);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_TRANSPORT_PRIORITY) then
output.length := output.length + offset;
end if;
end if; end if;
-- LIFESPAN -- LIFESPAN
if (ref.lifespan /= DEFAULT_LIFESPAN_QOS) then if (ref.lifespan /= DEFAULT_LIFESPAN_QOS) then
if (pid = PID_LIFESPAN) then
assert (8+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_LIFESPAN & endian_swap(ref.littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_LIFESPAN & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_LIFESPAN & endian_swap(ref.littleEndian, int(8,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.lifespan(0))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.lifespan(0)));
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.lifespan(1))); output.data(output.length) := endian_swap(ref.littleEndian, std_logic_vector(ref.lifespan(1)));
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_LIFESPAN) then
output.length := output.length + offset;
end if;
end if; end if;
-- DESTINATION ORDER -- DESTINATION ORDER
if (ref.destination_order /= DEFAULT_DESTINATION_ORDER_QOS) then if (ref.destination_order /= DEFAULT_DESTINATION_ORDER_QOS) then
if (pid = PID_DESTINATION_ORDER) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DESTINATION_ORDER & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DESTINATION_ORDER & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DESTINATION_ORDER & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.destination_order); output.data(output.length) := endian_swap(ref.littleEndian, ref.destination_order);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DESTINATION_ORDER) then
output.length := output.length + offset;
end if;
end if; end if;
-- UNICAST LOCATORS -- UNICAST LOCATORS
if (unsigned(ref.unicastLocatorList.numLocators) > 0) then if (unsigned(ref.unicastLocatorList.numLocators) > 0) then
tmp := to_integer(unsigned(ref.unicastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.unicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_UNICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_UNICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.unicastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.unicastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -1331,13 +1612,21 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.unicastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.unicastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_UNICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- MULTICAST LOCATORS -- MULTICAST LOCATORS
if (unsigned(ref.multicastLocatorList.numLocators) > 0) then if (unsigned(ref.multicastLocatorList.numLocators) > 0) then
tmp := to_integer(unsigned(ref.multicastLocatorList.numLocators)); tmp := to_integer(unsigned(ref.multicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_MULTICAST_LOCATOR) then
assert (24+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_MULTICAST_LOCATOR & endian_swap(ref.littleEndian, int(24,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.multicastLocatorList.locator(i).kind); output.data(output.length) := endian_swap(ref.littleEndian, ref.multicastLocatorList.locator(i).kind);
output.length := output.length + 1; output.length := output.length + 1;
@ -1351,6 +1640,9 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := ref.multicastLocatorList.locator(i).addr(31 downto 0); output.data(output.length) := ref.multicastLocatorList.locator(i).addr(31 downto 0);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_MULTICAST_LOCATOR) then
output.length := output.length + offset;
end if;
end loop; end loop;
end if; end if;
-- USER DATA -- USER DATA
@ -1391,29 +1683,31 @@ package body rtps_test_package is
end if; end if;
-- MAX SIZE SERIALIZED -- MAX SIZE SERIALIZED
if (unsigned(ref.max_size_serialized) /= 0) then if (unsigned(ref.max_size_serialized) /= 0) then
if (pid = PID_DATA_MAX_SIZE_SERIALIZED) then
assert (4+(offset*4) > 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_DATA_MAX_SIZE_SERIALIZED & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
else
output.data(output.length) := PID_DATA_MAX_SIZE_SERIALIZED & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); output.data(output.length) := PID_DATA_MAX_SIZE_SERIALIZED & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
end if;
output.length := output.length + 1; output.length := output.length + 1;
output.data(output.length) := endian_swap(ref.littleEndian, ref.max_size_serialized); output.data(output.length) := endian_swap(ref.littleEndian, ref.max_size_serialized);
output.length := output.length + 1; output.length := output.length + 1;
if (pid = PID_DATA_MAX_SIZE_SERIALIZED) then
output.length := output.length + offset;
end if; end if;
end if;
end procedure;
procedure gen_endpoint_data( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is
begin
gen_endpoint_data(ref, output, PID_PAD, 0);
end procedure; end procedure;
procedure gen_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is procedure gen_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE) is
variable loc : LOCATOR_TYPE; variable loc : LOCATOR_TYPE;
begin begin
-- Fetch relevant Locator -- Fetch relevant Locator
if (is_valid_loc(get_loc(ref.unicastLocatorList))) then loc := get_loc(ref);
loc := get_loc(ref.unicastLocatorList);
elsif (is_valid_loc(get_loc(ref.multicastLocatorList))) then
loc := get_loc(ref.multicastLocatorList);
elsif (is_valid_loc(get_loc(ref.participant.defaultUnicastLocatorList))) then
loc := get_loc(ref.participant.defaultUnicastLocatorList);
elsif (is_valid_loc(get_loc(ref.participant.defaultMulticastLocatorList))) then
loc := get_loc(ref.participant.defaultMulticastLocatorList);
else
assert(FALSE) report "Endpoint has no valid Locators" severity FAILURE;
loc := EMPTY_LOCATOR;
end if;
-- OPCODE -- OPCODE
case (ref.match) is case (ref.match) is
@ -1457,6 +1751,18 @@ package body rtps_test_package is
output.length := output.length + 1; output.length := output.length + 1;
end procedure; end procedure;
procedure gen_parameter(pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); length : in natural; data : in TEST_PACKET_TYPE; output : inout TEST_PACKET_TYPE) is
begin
-- PARAMETER HEADER
output.data(output.length) := pid & int(length*4,PARAMETER_LENGTH_WIDTH);
output.length := output.length + 1;
-- DATA
for i in 0 to length-1 loop
output.data(output.length) := data.data(i);
output.length := output.length + 1;
end loop;
end procedure;
function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean is function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean is
begin begin
if (A'length /= B'length) then if (A'length /= B'length) then