From b5206f66f17acd3b42baaa10ab062b84628b5bef Mon Sep 17 00:00:00 2001 From: Greek Date: Tue, 2 Mar 2021 13:53:12 +0100 Subject: [PATCH] Update Inline QoS Generation related Testbench Code --- .../Level_0/L0_rtps_reader_test2_tbk.vhd | 33 ++- .../Level_0/L0_rtps_reader_test2_trk.vhd | 33 ++- .../Level_0/L0_rtps_reader_test2_vbk.vhd | 33 ++- .../Level_0/L0_rtps_reader_test2_vrk.vhd | 33 ++- .../Level_0/L0_rtps_reader_test2_vrn.vhd | 33 ++- .../Level_0/L0_rtps_writer_test1_vbkdp.vhd | 99 ++++---- .../Level_0/L0_rtps_writer_test1_vrkdp.vhd | 99 ++++---- src/rtps_test_package.vhd | 229 ++++++++++++++++-- 8 files changed, 415 insertions(+), 177 deletions(-) diff --git a/src/Tests/Level_0/L0_rtps_reader_test2_tbk.vhd b/src/Tests/Level_0/L0_rtps_reader_test2_tbk.vhd index d2c7669..8d28936 100644 --- a/src/Tests/Level_0/L0_rtps_reader_test2_tbk.vhd +++ b/src/Tests/Level_0/L0_rtps_reader_test2_tbk.vhd @@ -824,7 +824,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -851,7 +852,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -875,7 +877,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -902,7 +905,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -926,7 +930,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -953,7 +958,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -977,7 +983,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1005,7 +1012,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '1', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '1', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1033,7 +1041,8 @@ begin cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1059,7 +1068,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_UNREGISTERED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1083,7 +1093,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; diff --git a/src/Tests/Level_0/L0_rtps_reader_test2_trk.vhd b/src/Tests/Level_0/L0_rtps_reader_test2_trk.vhd index 0e81971..fbefaf0 100644 --- a/src/Tests/Level_0/L0_rtps_reader_test2_trk.vhd +++ b/src/Tests/Level_0/L0_rtps_reader_test2_trk.vhd @@ -834,7 +834,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -861,7 +862,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -885,7 +887,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -912,7 +915,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -936,7 +940,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -963,7 +968,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -987,7 +993,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1015,7 +1022,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '1', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '1', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1043,7 +1051,8 @@ begin cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1069,7 +1078,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_UNREGISTERED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1093,7 +1103,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; diff --git a/src/Tests/Level_0/L0_rtps_reader_test2_vbk.vhd b/src/Tests/Level_0/L0_rtps_reader_test2_vbk.vhd index eab2376..673f285 100644 --- a/src/Tests/Level_0/L0_rtps_reader_test2_vbk.vhd +++ b/src/Tests/Level_0/L0_rtps_reader_test2_vbk.vhd @@ -805,7 +805,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -832,7 +833,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -856,7 +858,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -883,7 +886,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -907,7 +911,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -934,7 +939,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -958,7 +964,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -986,7 +993,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '1', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '1', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1014,7 +1022,8 @@ begin cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1040,7 +1049,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_UNREGISTERED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1064,7 +1074,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; diff --git a/src/Tests/Level_0/L0_rtps_reader_test2_vrk.vhd b/src/Tests/Level_0/L0_rtps_reader_test2_vrk.vhd index bf9e655..ae3a53f 100644 --- a/src/Tests/Level_0/L0_rtps_reader_test2_vrk.vhd +++ b/src/Tests/Level_0/L0_rtps_reader_test2_vrk.vhd @@ -820,7 +820,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -847,7 +848,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -871,7 +873,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -898,7 +901,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -922,7 +926,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -949,7 +954,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -973,7 +979,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1001,7 +1008,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '1', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '1', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1029,7 +1037,8 @@ begin cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1055,7 +1064,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_UNREGISTERED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); @@ -1079,7 +1089,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; diff --git a/src/Tests/Level_0/L0_rtps_reader_test2_vrn.vhd b/src/Tests/Level_0/L0_rtps_reader_test2_vrn.vhd index 31735c5..57b9112 100644 --- a/src/Tests/Level_0/L0_rtps_reader_test2_vrn.vhd +++ b/src/Tests/Level_0/L0_rtps_reader_test2_vrn.vhd @@ -820,7 +820,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -848,7 +849,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -872,7 +874,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_LIFESPAN, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_LIFESPAN, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -900,7 +903,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -924,7 +928,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_STATUS_INFO, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_STATUS_INFO, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -952,7 +957,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, -1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, -1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); start_user_test; @@ -976,7 +982,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos, PID_KEY_HASH, +1); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos, PID_KEY_HASH, +1); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -1005,7 +1012,8 @@ begin cc.kind := ALIVE_FILTERED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '1', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '1', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -1034,7 +1042,8 @@ begin cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; cc.instance := gen_key_hash; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.instance := HANDLE_NIL; -- No key Hash due to WITH_KEY=FALSE @@ -1061,7 +1070,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_UNREGISTERED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); cc.payload := EMPTY_TEST_PACKET; -- No payload due to WITH_KEY=FALSE @@ -1086,7 +1096,8 @@ begin cc := gen_cache_change(sub); cc.kind := NOT_ALIVE_DISPOSED; cc.src_timestamp := src_ts; - gen_inline_qos(cc, life_ts, '0', sub.inlineQos); + endpoint.lifespan := life_ts; + gen_inline_qos(cc, endpoint, TRUE, '0', sub.inlineQos); gen_sentinel(sub.inlineQos); gen_rtps_handler_out(sub, get_loc(endpoint), FALSE, src_ts, endpoint.participant.guidPrefix, stimulus_user); gen_add_cache_change_dds(cc, life_ts, endpoint.nr, reference); diff --git a/src/Tests/Level_0/L0_rtps_writer_test1_vbkdp.vhd b/src/Tests/Level_0/L0_rtps_writer_test1_vbkdp.vhd index 3777dcf..3611708 100644 --- a/src/Tests/Level_0/L0_rtps_writer_test1_vbkdp.vhd +++ b/src/Tests/Level_0/L0_rtps_writer_test1_vbkdp.vhd @@ -69,55 +69,56 @@ begin -- Unit Under Test uut : entity work.rtps_writer(arch) - generic map ( - RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, - LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, - DURABILITY_QOS => VOLATILE_DURABILITY_QOS, - DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, - ACKNACK_RESPONSE_DELAY => DURATION_ZERO, - ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO, - LEASE_DURATION => DURATION_INFINITE, - HEARTBEAT_PERIOD => DURATION_INFINITE, - ENTITYID => DEFAULT_WRITER_ENTITYID, - WITH_KEY => TRUE, - PUSH_MODE => TRUE, - INLINE_QOS => gen_inline_qos(NUM_READERS), -- TODO - MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS - ) - port map ( - clk => clk, - reset => reset, - time => TIME_ZERO, - empty_user => '1', - rd_user => open, - data_in_user => (others => '0'), - last_word_in_user => '0', - empty_meta => empty_meta or packet_sent, - rd_meta => rd_meta, - data_in_meta => data_in_meta, - last_word_in_meta => last_word_in_meta, - alive_sig => open, - wr_rtps => open, - full_rtps => '0', - last_word_out_rtps => open, - data_out_rtps => open, - assert_liveliness => '0', - data_available => '0', - start_hc => start_hc, - opcode_hc => open, - ack_hc => '0', - seq_nr_hc => open, - done_hc => '0', - ret_hc => ERROR, - get_data_hc => open, - data_in_hc => (others => '0'), - valid_in_hc => '0', - ready_in_hc => open, - last_word_in_hc => '0', - cc_instance_handle => HANDLE_NIL, - cc_kind => ALIVE, - cc_source_timestamp => TIME_INVALID - ); + generic map ( + RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, + LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, + DURABILITY_QOS => VOLATILE_DURABILITY_QOS, + DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => DURATION_ZERO, + ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO, + LEASE_DURATION => DURATION_INFINITE, + HEARTBEAT_PERIOD => DURATION_INFINITE, + ENTITYID => DEFAULT_WRITER_ENTITYID, + WITH_KEY => TRUE, + PUSH_MODE => TRUE, + INLINE_QOS => gen_inline_qos(NUM_READERS), -- TODO + MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS + ) + port map ( + clk => clk, + reset => reset, + time => TIME_ZERO, + empty_user => '1', + rd_user => open, + data_in_user => (others => '0'), + last_word_in_user => '0', + empty_meta => empty_meta or packet_sent, + rd_meta => rd_meta, + data_in_meta => data_in_meta, + last_word_in_meta => last_word_in_meta, + alive_sig => open, + wr_rtps => open, + full_rtps => '0', + last_word_out_rtps => open, + data_out_rtps => open, + assert_liveliness => '0', + data_available => '0', + start_hc => start_hc, + opcode_hc => open, + ack_hc => '0', + seq_nr_hc => open, + done_hc => '0', + ret_hc => ERROR, + get_data_hc => open, + data_in_hc => (others => '0'), + valid_in_hc => '0', + ready_in_hc => open, + last_word_in_hc => '0', + cc_instance_handle => HANDLE_NIL, + cc_kind => ALIVE, + cc_source_timestamp => TIME_INVALID, + cc_seq_nr => SEQUENCENUMBER_UNKNOWN + ); stimulus_prc : process variable RV : RandomPType; diff --git a/src/Tests/Level_0/L0_rtps_writer_test1_vrkdp.vhd b/src/Tests/Level_0/L0_rtps_writer_test1_vrkdp.vhd index abce488..0d8ee49 100644 --- a/src/Tests/Level_0/L0_rtps_writer_test1_vrkdp.vhd +++ b/src/Tests/Level_0/L0_rtps_writer_test1_vrkdp.vhd @@ -69,55 +69,56 @@ begin -- Unit Under Test uut : entity work.rtps_writer(arch) - generic map ( - RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, - LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, - DURABILITY_QOS => VOLATILE_DURABILITY_QOS, - DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, - ACKNACK_RESPONSE_DELAY => DURATION_ZERO, - ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO, - LEASE_DURATION => DURATION_INFINITE, - HEARTBEAT_PERIOD => DURATION_INFINITE, - ENTITYID => DEFAULT_WRITER_ENTITYID, - WITH_KEY => TRUE, - PUSH_MODE => TRUE, - INLINE_QOS => gen_inline_qos(NUM_READERS), -- TODO - MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS - ) - port map ( - clk => clk, - reset => reset, - time => TIME_ZERO, - empty_user => '1', - rd_user => open, - data_in_user => (others => '0'), - last_word_in_user => '0', - empty_meta => empty_meta or packet_sent, - rd_meta => rd_meta, - data_in_meta => data_in_meta, - last_word_in_meta => last_word_in_meta, - alive_sig => open, - wr_rtps => open, - full_rtps => '0', - last_word_out_rtps => open, - data_out_rtps => open, - assert_liveliness => '0', - data_available => '0', - start_hc => start_hc, - opcode_hc => open, - ack_hc => '0', - seq_nr_hc => open, - done_hc => '0', - ret_hc => ERROR, - get_data_hc => open, - data_in_hc => (others => '0'), - valid_in_hc => '0', - ready_in_hc => open, - last_word_in_hc => '0', - cc_instance_handle => HANDLE_NIL, - cc_kind => ALIVE, - cc_source_timestamp => TIME_INVALID - ); + generic map ( + RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, + LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, + DURABILITY_QOS => VOLATILE_DURABILITY_QOS, + DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => DURATION_ZERO, + ACKNACK_SUPPRESSION_DELAY => DURATION_ZERO, + LEASE_DURATION => DURATION_INFINITE, + HEARTBEAT_PERIOD => DURATION_INFINITE, + ENTITYID => DEFAULT_WRITER_ENTITYID, + WITH_KEY => TRUE, + PUSH_MODE => TRUE, + INLINE_QOS => gen_inline_qos(NUM_READERS), -- TODO + MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS + ) + port map ( + clk => clk, + reset => reset, + time => TIME_ZERO, + empty_user => '1', + rd_user => open, + data_in_user => (others => '0'), + last_word_in_user => '0', + empty_meta => empty_meta or packet_sent, + rd_meta => rd_meta, + data_in_meta => data_in_meta, + last_word_in_meta => last_word_in_meta, + alive_sig => open, + wr_rtps => open, + full_rtps => '0', + last_word_out_rtps => open, + data_out_rtps => open, + assert_liveliness => '0', + data_available => '0', + start_hc => start_hc, + opcode_hc => open, + ack_hc => '0', + seq_nr_hc => open, + done_hc => '0', + ret_hc => ERROR, + get_data_hc => open, + data_in_hc => (others => '0'), + valid_in_hc => '0', + ready_in_hc => open, + last_word_in_hc => '0', + cc_instance_handle => HANDLE_NIL, + cc_kind => ALIVE, + cc_source_timestamp => TIME_INVALID, + cc_seq_nr => SEQUENCENUMBER_UNKNOWN + ); stimulus_prc : process variable RV : RandomPType; diff --git a/src/rtps_test_package.vhd b/src/rtps_test_package.vhd index eebd9ed..a89ce1d 100644 --- a/src/rtps_test_package.vhd +++ b/src/rtps_test_package.vhd @@ -265,9 +265,8 @@ package rtps_test_package is procedure gen_sentinel(output : inout TEST_PACKET_TYPE); procedure gen_parameter(pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); data : in TEST_PACKET_TYPE; output : inout TEST_PACKET_TYPE); - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; lifespan : DURATION_TYPE; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer); - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer); - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; lifespan : DURATION_TYPE; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE); + procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer); + procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE); procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE); @@ -2276,25 +2275,212 @@ package body rtps_test_package is end loop; end procedure; - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; lifespan : in DURATION_TYPE; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer) is + procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer) is + variable tmp : natural := 0; begin - -- Lifespan - if (lifespan /= DEFAULT_LIFESPAN_QOS or pid = PID_LIFESPAN) 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(littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH)); + -- ENDPOINT DATA QOS + if (expectsInlineQoS) then + -- TOPIC NAME + tmp := string_len(endpoint.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(littleEndian, int(((round_div(tmp,4)+1)*4)+(offset*4),PARAMETER_LENGTH_WIDTH)); else - output.data(output.length) := PID_LIFESPAN & endian_swap(littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); + output.data(output.length) := PID_TOPIC_NAME & endian_swap(littleEndian, int((round_div(tmp,4)+1)*4,PARAMETER_LENGTH_WIDTH)); end if; - output.length := output.length + 1; - output.data(output.length) := endian_swap(littleEndian, std_logic_vector(lifespan(0))); - output.length := output.length + 1; - output.data(output.length) := endian_swap(littleEndian, std_logic_vector(lifespan(1))); - output.length := output.length + 1; - if (pid = PID_LIFESPAN) then + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, int(tmp, CDR_LONG_WIDTH)); + output.length := output.length + 1; + for i in 0 to round_div(tmp,4)-1 loop + output.data(output.length) := endpoint.topic_name(i); + output.length := output.length + 1; + end loop; + if (pid = PID_TOPIC_NAME) then output.length := output.length + offset; end if; + -- DURABILITY + if (endpoint.durability /= DEFAULT_DURABILITY_QOS or pid = PID_DURABILITY) 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(littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_DURABILITY & endian_swap(littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.durability); + output.length := output.length + 1; + if (pid = PID_DURABILITY) then + output.length := output.length + offset; + end if; + end if; + -- PRESENTATION + if (endpoint.presentation /= DEFAULT_PRESENTATION_QOS or endpoint.coherent_access(0) /= boolean_to_std_logic(DEFAULT_COHERENT_ACCESS) or endpoint.ordered_access(0) /= boolean_to_std_logic(DEFAULT_ORDERED_ACCESS) or pid = PID_PRESENTATION) 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(littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_PRESENTATION & endian_swap(littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.presentation); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.coherent_access) & endian_swap(littleEndian, endpoint.ordered_access) & (0 to 15 => '0'); + output.length := output.length + 1; + if (pid = PID_PRESENTATION) then + output.length := output.length + offset; + end if; + end if; + -- DEADLINE + if (endpoint.deadline /= DEFAULT_DEADLINE_QOS or pid = PID_DEADLINE) 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(littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_DEADLINE & endian_swap(littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.deadline(0))); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.deadline(1))); + output.length := output.length + 1; + if (pid = PID_DEADLINE) then + output.length := output.length + offset; + end if; + end if; + -- LATENCY BUDGET + if (endpoint.latency_budget /= DEFAULT_LATENCY_BUDGET_QOS or pid = PID_LATENCY_BUDGET) 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(littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_LATENCY_BUDGET & endian_swap(littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.latency_budget(0))); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.latency_budget(1))); + output.length := output.length + 1; + if (pid = PID_LATENCY_BUDGET) then + output.length := output.length + offset; + end if; + end if; + -- OWNERSHIP + if (endpoint.ownership /= DEFAULT_OWNERSHIP_QOS or pid = PID_OWNERSHIP) 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(littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_OWNERSHIP & endian_swap(littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.ownership); + output.length := output.length + 1; + if (pid = PID_OWNERSHIP) then + output.length := output.length + offset; + end if; + end if; + -- OWNERSHIP STRENGTH + if (endpoint.ownership_strength /= DEFAULT_OWNERSHIP_STRENGTH_QOS or pid = PID_OWNERSHIP_STRENGTH) 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(littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_OWNERSHIP_STRENGTH & endian_swap(littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.ownership_strength); + output.length := output.length + 1; + if (pid = PID_OWNERSHIP_STRENGTH) then + output.length := output.length + offset; + end if; + end if; + -- LIVELINESS + if (endpoint.liveliness /= DEFAULT_LIVELINESS_QOS or endpoint.leaseDuration /= DEFAULT_LEASE_DURATION or pid = PID_LIVELINESS) 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(littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_LIVELINESS & endian_swap(littleEndian, int(12,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.liveliness); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.leaseDuration(0))); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.leaseDuration(1))); + output.length := output.length + 1; + if (pid = PID_LIVELINESS) then + output.length := output.length + offset; + end if; + end if; + -- RELIABILITY + if (endpoint.reliability /= DEFAULT_RELIABILTY_QOS or endpoint.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) 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(littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_RELIABILITY & endian_swap(littleEndian, int(12,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.reliability); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.max_blocking_time(0))); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.max_blocking_time(1))); + output.length := output.length + 1; + if (pid = PID_RELIABILITY) then + output.length := output.length + offset; + end if; + end if; + -- TRANSPORT PRIORITY + if (endpoint.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(littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.transport_priority); + output.length := output.length + 1; + if (pid = PID_TRANSPORT_PRIORITY) then + output.length := output.length + offset; + end if; + end if; + -- LIFESPAN + if (endpoint.lifespan /= DEFAULT_LIFESPAN_QOS or pid = PID_LIFESPAN) 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(littleEndian, int(8+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_LIFESPAN & endian_swap(littleEndian, int(8,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.lifespan(0))); + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, std_logic_vector(endpoint.lifespan(1))); + output.length := output.length + 1; + if (pid = PID_LIFESPAN) then + output.length := output.length + offset; + end if; + end if; + -- DESTINATION ORDER + if (endpoint.destination_order /= DEFAULT_DESTINATION_ORDER_QOS or pid = PID_DESTINATION_ORDER) 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(littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH)); + else + output.data(output.length) := PID_DESTINATION_ORDER & endian_swap(littleEndian, int(4,PARAMETER_LENGTH_WIDTH)); + end if; + output.length := output.length + 1; + output.data(output.length) := endian_swap(littleEndian, endpoint.destination_order); + output.length := output.length + 1; + if (pid = PID_DESTINATION_ORDER) then + output.length := output.length + offset; + end if; + end if; end if; + -- *INLINE-ONLY* -- Status Info if (ref.kind /= ALIVE or pid = PID_STATUS_INFO) then if (pid = PID_STATUS_INFO) then @@ -2343,19 +2529,14 @@ package body rtps_test_package is end if; end procedure; - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer) is + procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE) is begin - gen_inline_qos(ref,DEFAULT_LIFESPAN_QOS,'0',output,pid,offset); - end procedure; - - procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; lifespan : DURATION_TYPE; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE) is - begin - gen_inline_qos(ref,lifespan,littleEndian,output,PID_PAD,0); + gen_inline_qos(ref,endpoint,expectsInlineQoS,littleEndian,output,PID_PAD,0); end procedure; procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE) is begin - gen_inline_qos(ref,output,PID_PAD,0); + gen_inline_qos(ref,DEFAULT_ENDPOINT_DATA,FALSE,'0',output,PID_PAD,0); end procedure; function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean is