diff --git a/src/TEMPLATE_dds_top.vhd b/src/TEMPLATE_dds_top.vhd index fa1637f..40f21b4 100644 --- a/src/TEMPLATE_dds_top.vhd +++ b/src/TEMPLATE_dds_top.vhd @@ -243,13 +243,13 @@ begin rtps_reader_inst : entity work.rtps_reader(arch) generic map ( ENTITYID => ENTITYID(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i), - HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY, + HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) port map ( @@ -289,17 +289,17 @@ begin else generate rtps_writer_inst : entity work.rtps_writer(arch) generic map ( - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i), - ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY, + ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD, ENTITYID => ENTITYID(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - PUSH_MODE => ENDPOINT_PUSH_MODE(i), + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE, INLINE_QOS => gen_inline_qos(i), MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) @@ -352,18 +352,18 @@ begin dds_endpoint_if : if (i < NUM_READERS) generate dds_reader_inst : entity work.dds_reader(arch) generic map ( - TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i), - ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS, + ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, -- ###GENERATED START### PAYLOAD_FRAME_SIZE => TODO, -- ###GENERATED START### @@ -422,14 +422,14 @@ begin else generate dds_writer_inst : entity work.dds_writer(arch) generic map ( - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, -- ###GENERATED START### PAYLOAD_FRAME_SIZE => TODO -- ###GENERATED START### diff --git a/src/TEMPLATE_user_config.vhd b/src/TEMPLATE_user_config.vhd index 2d80d94..7514cdf 100644 --- a/src/TEMPLATE_user_config.vhd +++ b/src/TEMPLATE_user_config.vhd @@ -48,89 +48,26 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : string(1 to 256) := (others => NUL); --"" + constant USER_DOMAIN_TAG : string(1 to 256) := gen_user_string(""); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => FALSE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Placeholder" & (12 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Placeholder" & (12 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(30,0); -- 30 s + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(30 sec); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100*(10**6)); -- 100 ms - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500*(10**6)); -- 500 ms - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0); - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0); - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(1,0)); -- 1 s - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500*(10**6))); -- 500 ms - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,0)); - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,200*(10**6))); -- 200 ms - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,0)); + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ms); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ms); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms); - - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 0 to NUM_READERS-1 => DEFAULT_RELIABILITY_QOS_R, - NUM_READERS to NUM_WRITERS-1 => DEFAULT_RELIABILITY_QOS_W + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( + 0 to NUM_READERS-1 => DEFAULT_READER_CONFIG, + NUM_READERS to NUM_WRITERS-1 => DEFAULT_WRITER_CONFIG ); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_DEPTH); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_INSTANCES); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := FALSE; diff --git a/src/Tests/Level_2/L2_Testbench_Lib2.vhd b/src/Tests/Level_2/L2_Testbench_Lib2.vhd index 5018cf6..ab39b17 100644 --- a/src/Tests/Level_2/L2_Testbench_Lib2.vhd +++ b/src/Tests/Level_2/L2_Testbench_Lib2.vhd @@ -131,14 +131,14 @@ begin dds_writer_w_inst : entity Testbench_Lib2.dds_writer(arch) generic map ( - HISTORY_QOS => ENDPOINT_HISTORY_QOS(0), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0), - LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(0), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(0), - WITH_KEY => ENDPOINT_WITH_KEY(0), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0), + HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS, + LIFESPAN_QOS => ENDPOINT_CONFIG(0).LIFESPAN_QOS, + LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY, + MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES, + MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE ) port map ( @@ -189,17 +189,17 @@ begin rtps_writer_w_inst : entity Testbench_Lib2.rtps_writer(arch) generic map ( - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0), - ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(0), - ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(0), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(0), - HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(0), + RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(0).ACKNACK_RESPONSE_DELAY, + ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).ACKNACK_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION, + HEARTBEAT_PERIOD => ENDPOINT_CONFIG(0).HEARTBEAT_PERIOD, ENTITYID => ENTITYID(0), - WITH_KEY => ENDPOINT_WITH_KEY(0), - PUSH_MODE => ENDPOINT_PUSH_MODE(0), + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY, + PUSH_MODE => ENDPOINT_CONFIG(0).PUSH_MODE, INLINE_QOS => gen_inline_qos(0), MAX_REMOTE_ENDPOINTS => 5 ) diff --git a/src/Tests/Level_2/L2_Testbench_Lib2_config.vhd b/src/Tests/Level_2/L2_Testbench_Lib2_config.vhd index b7fd23d..8148e7b 100644 --- a/src/Tests/Level_2/L2_Testbench_Lib2_config.vhd +++ b/src/Tests/Level_2/L2_Testbench_Lib2_config.vhd @@ -45,87 +45,55 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : USER_STRING_TYPE := "TEST_DOMAIN" & (12 to 256 => NUL); + constant USER_DOMAIN_TAG : USER_STRING_TYPE := gen_user_string("TEST_DOMAIN"); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Topic1" & (7 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Type1" & (6 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(0,50000); -- 50k ns + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(50 us); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100); -- 100 ns - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,10000)); -- 10k ns - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); - - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRANSIENT_LOCAL_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => RELIABLE_RELIABILITY_QOS); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_DEPTH); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := TRUE; -end package; \ No newline at end of file +end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c : CONFIG_TYPE; + begin + + c := DEFAULT_WRITER_CONFIG; + c.WITH_KEY := TRUE; + c.PUSH_MODE := TRUE; + c.TOPICNAME := gen_user_string("Topic1"); + c.TYPENAME := gen_user_string("Type1"); + c.HEARTBEAT_PERIOD := gen_duration(10 us); + c.HEARTBEAT_RESPONSE_DELAY := gen_duration(500 ns); + c.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(100 ns); + c.ACKNACK_RESPONSE_DELAY := gen_duration(500 ns); + c.ACKNACK_SUPPRESSION_DELAY := gen_duration(100 ns); + c.DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + c.RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + c.MAX_SAMPLES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + c.MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + + ret := (others => c); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file diff --git a/src/Tests/Level_2/L2_Testbench_Lib3.vhd b/src/Tests/Level_2/L2_Testbench_Lib3.vhd index a6196eb..b0c7bc5 100644 --- a/src/Tests/Level_2/L2_Testbench_Lib3.vhd +++ b/src/Tests/Level_2/L2_Testbench_Lib3.vhd @@ -192,18 +192,18 @@ begin dds_reader_r_inst : entity Testbench_Lib3.dds_reader(arch) generic map ( - TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(0), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0), - HISTORY_QOS => ENDPOINT_HISTORY_QOS(0), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0), - PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(0), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0), - COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(0), - ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(0), - WITH_KEY => ENDPOINT_WITH_KEY(0), + TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(0).TIME_BASED_FILTER_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS, + MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE, + MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES, + HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS, + RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS, + PRESENTATION_QOS => ENDPOINT_CONFIG(0).PRESENTATION_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS, + COHERENT_ACCESS => ENDPOINT_CONFIG(0).COHERENT_ACCESS, + ORDERED_ACCESS => ENDPOINT_CONFIG(0).ORDERED_ACCESS, + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE, MAX_REMOTE_ENDPOINTS => 5 ) @@ -261,13 +261,13 @@ begin rtps_reader_r_inst : entity Testbench_Lib3.rtps_reader(arch) generic map ( ENTITYID => ENTITYID(0), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0), - HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(0), - HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(0), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(0), - WITH_KEY => ENDPOINT_WITH_KEY(0), + RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS, + HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_RESPONSE_DELAY, + HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY, MAX_REMOTE_ENDPOINTS => 5 ) port map ( diff --git a/src/Tests/Level_2/L2_Testbench_Lib3_config.vhd b/src/Tests/Level_2/L2_Testbench_Lib3_config.vhd index 13b6152..b53f89e 100644 --- a/src/Tests/Level_2/L2_Testbench_Lib3_config.vhd +++ b/src/Tests/Level_2/L2_Testbench_Lib3_config.vhd @@ -45,89 +45,55 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : USER_STRING_TYPE := "TEST_DOMAIN" & (12 to 256 => NUL); + constant USER_DOMAIN_TAG : USER_STRING_TYPE := gen_user_string("TEST_DOMAIN"); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Topic1" & (7 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Type1" & (6 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(0,50000); -- 50k ns + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(50 us); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100); -- 100 ns - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,10000)); -- 10k ns - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); - - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRANSIENT_LOCAL_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => RELIABLE_RELIABILITY_QOS); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_DEPTH); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := TRUE; -end package; \ No newline at end of file +end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c : CONFIG_TYPE; + begin + + c := DEFAULT_READER_CONFIG; + c.WITH_KEY := TRUE; + c.PUSH_MODE := TRUE; + c.TOPICNAME := gen_user_string("Topic1"); + c.TYPENAME := gen_user_string("Type1"); + c.HEARTBEAT_PERIOD := gen_duration(10 us); + c.HEARTBEAT_RESPONSE_DELAY := gen_duration(500 ns); + c.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(100 ns); + c.ACKNACK_RESPONSE_DELAY := gen_duration(500 ns); + c.ACKNACK_SUPPRESSION_DELAY := gen_duration(100 ns); + c.DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + c.RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + c.MAX_SAMPLES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + c.MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + + ret := (others => c); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file diff --git a/src/Tests/Level_2/L2_testbench_Lib4.vhd b/src/Tests/Level_2/L2_testbench_Lib4.vhd index 9f27214..008b469 100644 --- a/src/Tests/Level_2/L2_testbench_Lib4.vhd +++ b/src/Tests/Level_2/L2_testbench_Lib4.vhd @@ -267,13 +267,13 @@ begin rtps_reader_inst : entity work.rtps_reader(arch) generic map ( ENTITYID => ENTITYID(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i), - HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY, + HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) port map ( @@ -313,17 +313,17 @@ begin else generate rtps_writer_inst : entity work.rtps_writer(arch) generic map ( - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i), - ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY, + ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD, ENTITYID => ENTITYID(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - PUSH_MODE => ENDPOINT_PUSH_MODE(i), + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE, INLINE_QOS => gen_inline_qos(i), MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) @@ -376,18 +376,18 @@ begin dds_endpoint_if : if (i < NUM_READERS) generate dds_reader_inst : entity work.dds_reader(arch) generic map ( - TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i), - ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS, + ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE, MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) @@ -444,14 +444,14 @@ begin else generate dds_writer_inst : entity work.dds_writer(arch) generic map ( - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE ) port map ( diff --git a/src/Tests/Level_2/L2_testbench_Lib4_config.vhd b/src/Tests/Level_2/L2_testbench_Lib4_config.vhd index 3c9e119..ad2632a 100644 --- a/src/Tests/Level_2/L2_testbench_Lib4_config.vhd +++ b/src/Tests/Level_2/L2_testbench_Lib4_config.vhd @@ -45,86 +45,56 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : string(1 to 256) := (others => NUL); --"" + constant USER_DOMAIN_TAG : string(1 to 256) := gen_user_string(""); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Topic1" & (7 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Type1" & (6 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(0,50000); -- 50k ns + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(50 us); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100); -- 100 ns - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,10000)); -- 10k ns - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRANSIENT_LOCAL_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => RELIABLE_RELIABILITY_QOS); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := TRUE; end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c : CONFIG_TYPE; + begin + + c := DEFAULT_READER_CONFIG; + c.WITH_KEY := TRUE; + c.PUSH_MODE := TRUE; + c.TOPICNAME := gen_user_string("Topic1"); + c.TYPENAME := gen_user_string("Type1"); + c.HEARTBEAT_PERIOD := gen_duration(10 us); + c.HEARTBEAT_RESPONSE_DELAY := gen_duration(500 ns); + c.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(100 ns); + c.ACKNACK_RESPONSE_DELAY := gen_duration(500 ns); + c.ACKNACK_SUPPRESSION_DELAY := gen_duration(100 ns); + c.DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + c.RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + c.HISTORY_DEPTH := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + c.MAX_SAMPLES := std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH)); + c.MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + + ret := (others => c); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file diff --git a/src/Tests/Level_2/L2_testbench_Lib5.vhd b/src/Tests/Level_2/L2_testbench_Lib5.vhd index 2c6a528..af90f01 100644 --- a/src/Tests/Level_2/L2_testbench_Lib5.vhd +++ b/src/Tests/Level_2/L2_testbench_Lib5.vhd @@ -289,13 +289,13 @@ begin rtps_reader_inst : entity work.rtps_reader(arch) generic map ( ENTITYID => ENTITYID(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i), - HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY, + HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) port map ( @@ -335,17 +335,17 @@ begin else generate rtps_writer_inst : entity work.rtps_writer(arch) generic map ( - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i), - ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i), + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY, + ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD, ENTITYID => ENTITYID(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - PUSH_MODE => ENDPOINT_PUSH_MODE(i), + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE, INLINE_QOS => gen_inline_qos(i), MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) @@ -398,18 +398,18 @@ begin dds_endpoint_if : if (i < NUM_READERS) generate dds_reader_inst : entity work.dds_reader(arch) generic map ( - TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i), - PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i), - COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i), - ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), + TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS, + PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS, + COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS, + ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE, MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS ) @@ -466,14 +466,14 @@ begin else generate dds_writer_inst : entity work.dds_writer(arch) generic map ( - HISTORY_QOS => ENDPOINT_HISTORY_QOS(i), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i), - LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(i), - WITH_KEY => ENDPOINT_WITH_KEY(i), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i), + HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS, + LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS, + LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY, + MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES, + MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE ) port map ( diff --git a/src/Tests/Level_2/L2_testbench_Lib5_config.vhd b/src/Tests/Level_2/L2_testbench_Lib5_config.vhd index 5d96146..8927120 100644 --- a/src/Tests/Level_2/L2_testbench_Lib5_config.vhd +++ b/src/Tests/Level_2/L2_testbench_Lib5_config.vhd @@ -45,86 +45,56 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : string(1 to 256) := (others => NUL); --"" + constant USER_DOMAIN_TAG : string(1 to 256) := gen_user_string(""); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Topic1" & (7 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Type1" & (6 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(0,50000); -- 50k ns + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(50 us); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100); -- 100 ns - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,10000)); -- 10k ns - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500)); -- 500 ns - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100)); -- 100 ns + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns); - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRANSIENT_LOCAL_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => RELIABLE_RELIABILITY_QOS); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := TRUE; end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c : CONFIG_TYPE; + begin + + c := DEFAULT_READER_CONFIG; + c.WITH_KEY := TRUE; + c.PUSH_MODE := TRUE; + c.TOPICNAME := gen_user_string("Topic1"); + c.TYPENAME := gen_user_string("Type1"); + c.HEARTBEAT_PERIOD := gen_duration(10 us); + c.HEARTBEAT_RESPONSE_DELAY := gen_duration(500 ns); + c.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(100 ns); + c.ACKNACK_RESPONSE_DELAY := gen_duration(500 ns); + c.ACKNACK_SUPPRESSION_DELAY := gen_duration(100 ns); + c.DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + c.RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + c.HISTORY_DEPTH := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + c.MAX_SAMPLES := std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH)); + c.MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + + ret := (others => c); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file diff --git a/src/Tests/Testbench_Lib1_config.vhd b/src/Tests/Testbench_Lib1_config.vhd index 4582702..9f9211c 100644 --- a/src/Tests/Testbench_Lib1_config.vhd +++ b/src/Tests/Testbench_Lib1_config.vhd @@ -45,184 +45,113 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : USER_STRING_TYPE := "TEST_DOMAIN" & (12 to 256 => NUL); + constant USER_DOMAIN_TAG : USER_STRING_TYPE := gen_user_string("TEST_DOMAIN"); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => FALSE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => FALSE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 2 => "TOPIC_2" & (8 to 256 => NUL), - NUM_READERS+2 => "TOPIC_2" & (8 to 256 => NUL), - others => "TOPIC_1" & (8 to 256 => NUL) - ); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 1 => "TYPE_2" & (7 to 256 => NUL), - 2 => "TYPE_2" & (7 to 256 => NUL), - NUM_READERS+1 => "TYPE_2" & (7 to 256 => NUL), - NUM_READERS+2 => "TYPE_2" & (7 to 256 => NUL), - others => "TYPE_1" & (7 to 256 => NUL) - ); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(30,0); -- 30 s + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(30 sec); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100*(10**6)); -- 100 ms - -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,100*(10**6)); -- 100 ms - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(1,0)); -- 1 s - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,100*(10**6))); -- 100 ms - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,200*(10**6))); -- 200 ms - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,200*(10**6))); -- 200 ms - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,200*(10**6))); -- 200 ms + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ms); + -- Timing Characteristics for built-in Endpoints (Discovery Module) + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(100 ms); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(200 ms); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(200 ms); - - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 3 => TRANSIENT_LOCAL_DURABILITY_QOS, - NUM_READERS+4 => TRANSIENT_LOCAL_DURABILITY_QOS, - others => DEFAULT_DURABILITY_QOS - ); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => gen_duration(86400,0), - others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY - ); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => KEEP_ALL_HISTORY_QOS, - others => DEFAULT_DURABILITY_SERVICE_HISTORY - ); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => std_logic_vector(to_unsigned(10, CDR_LONG_WIDTH)), - others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH - ); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => std_logic_vector(to_unsigned(10, CDR_LONG_WIDTH)), - others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES - ); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)), - others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES - ); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)), - others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE - ); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 4 => TOPIC_PRESENTATION_QOS, - NUM_READERS+4 => TOPIC_PRESENTATION_QOS, - NUM_READERS+5 => TOPIC_PRESENTATION_QOS, - others => DEFAULT_PRESENTATION_QOS - ); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 5 => TRUE, - 6 => TRUE, - NUM_READERS+4 => TRUE, - NUM_READERS+5 => TRUE, - others => DEFAULT_COHERENT_ACCESS - ); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 6 => TRUE, - NUM_READERS+5 => TRUE, - others => DEFAULT_ORDERED_ACCESS - ); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 7 => gen_duration(10,0), - 8 => gen_duration(20,0), - NUM_READERS+4 => gen_duration(15,0), - others => DEFAULT_DEADLINE_QOS - ); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 9 => gen_duration(0,500000000), - 10 => gen_duration(2,0), - NUM_READERS+6 => gen_duration(1,0), - others => DEFAULT_LATENCY_BUDGET_QOS - ); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - others => DEFAULT_OWNERSHIP_QOS - ); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => std_logic_vector(to_unsigned(2, CDR_LONG_WIDTH)), - others => DEFAULT_OWNERSHIP_STRENGTH_QOS - ); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 11 => MANUAL_BY_PARTICIPANT_LIVELINESS_QOS, - 12 => MANUAL_BY_TOPIC_LIVELINESS_QOS, - NUM_READERS+4 => MANUAL_BY_PARTICIPANT_LIVELINESS_QOS, - others => DEFAULT_LIVELINESS_QOS - ); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 11 => gen_duration(20,0), - 12 => gen_duration(20,0), - 13 => gen_duration(10,0), - 14 => gen_duration(20,0), - NUM_READERS+4 => gen_duration(15,0), - others => DEFAULT_LEASE_DURATION - ); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 7 => gen_duration(5,0), - 8 => gen_duration(5,0), - others => DEFAULT_TIME_BASED_FILTER_QOS - ); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 0 to 14 => DEFAULT_RELIABILITY_QOS_R, - 15 => RELIABLE_RELIABILITY_QOS, - 16 => DEFAULT_RELIABILITY_QOS_R, - NUM_READERS+3 => BEST_EFFORT_RELIABILITY_QOS, - others => DEFAULT_RELIABILITY_QOS_W - ); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => gen_duration(2,0), - others => DEFAULT_MAX_BLOCKING_TIME - ); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - NUM_READERS+7 => gen_duration(30,0), - others => DEFAULT_LIFESPAN_QOS - ); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( - 16 => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, - NUM_READERS+4 => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, - others => DEFAULT_DESTINATION_ORDER_QOS - ); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_DEPTH); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_INSTANCES); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := TRUE; -- TESTING PARAMETERS constant TEST_STRING : string := "TEST_CONFIG_1"; -end package; \ No newline at end of file +end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c1, c2 : CONFIG_TYPE; + begin + + c1 := DEFAULT_READER_CONFIG; + c1.WITH_KEY := FALSE; + c1.PUSH_MODE := FALSE; + c1.TOPICNAME := gen_user_string("TOPIC_1"); + c1.TYPENAME := gen_user_string("TYPE_1"); + c1.HEARTBEAT_RESPONSE_DELAY := gen_duration(100 ms); + c1.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(200 ms); + c1.ACKNACK_RESPONSE_DELAY := gen_duration(200 ms); + c1.ACKNACK_SUPPRESSION_DELAY := gen_duration(200 ms); + + c2 := DEFAULT_WRITER_CONFIG; + c2.WITH_KEY := FALSE; + c2.PUSH_MODE := FALSE; + c2.TOPICNAME := gen_user_string("TOPIC_1"); + c2.TYPENAME := gen_user_string("TYPE_1"); + c2.HEARTBEAT_RESPONSE_DELAY := gen_duration(100 ms); + c2.HEARTBEAT_SUPPRESSION_DELAY := gen_duration(200 ms); + c2.ACKNACK_RESPONSE_DELAY := gen_duration(200 ms); + c2.ACKNACK_SUPPRESSION_DELAY := gen_duration(200 ms); + + ret := ( + 0 to NUM_READERS-1 => c1, + NUM_READERS to NUM_ENDPOINTS-1 => c2 + ); + + ret(1).TYPENAME := gen_user_string("TYPE_2"); + ret(2).TOPICNAME := gen_user_string("TOPIC_2"); + ret(2).TYPENAME := gen_user_string("TYPE_2"); + ret(3).DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + ret(4).PRESENTATION_QOS := TOPIC_PRESENTATION_QOS; + ret(5).COHERENT_ACCESS := TRUE; + ret(6).COHERENT_ACCESS := TRUE; + ret(6).ORDERED_ACCESS := TRUE; + ret(7).DEADLINE_QOS := gen_duration(10 sec); + ret(7).TIME_BASED_FILTER_QOS := gen_duration(5 sec); + ret(8).DEADLINE_QOS := gen_duration(20 sec); + ret(8).TIME_BASED_FILTER_QOS := gen_duration(5 sec); + ret(9).LATENCY_BUDGET_QOS := gen_duration(500 ms); + ret(10).LATENCY_BUDGET_QOS := gen_duration(2 sec); + ret(11).LIVELINESS_QOS := MANUAL_BY_PARTICIPANT_LIVELINESS_QOS; + ret(11).LEASE_DURATION := gen_duration(20 sec); + ret(12).LIVELINESS_QOS := MANUAL_BY_TOPIC_LIVELINESS_QOS; + ret(12).LEASE_DURATION := gen_duration(20 sec); + ret(13).LEASE_DURATION := gen_duration(10 sec); + ret(14).LEASE_DURATION := gen_duration(20 sec); + ret(15).RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + ret(16).DESTINATION_ORDER_QOS := BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS; + ret(NUM_READERS+1).TYPENAME := gen_user_string("TYPE_2"); + ret(NUM_READERS+2).TOPICNAME := gen_user_string("TOPIC_2"); + ret(NUM_READERS+2).TYPENAME := gen_user_string("TYPE_2"); + ret(NUM_READERS+3).RELIABILITY_QOS := BEST_EFFORT_RELIABILITY_QOS; + ret(NUM_READERS+4).DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + ret(NUM_READERS+4).PRESENTATION_QOS := TOPIC_PRESENTATION_QOS; + ret(NUM_READERS+4).COHERENT_ACCESS := TRUE; + ret(NUM_READERS+4).DEADLINE_QOS := gen_duration(15 sec); + ret(NUM_READERS+4).LIVELINESS_QOS := MANUAL_BY_PARTICIPANT_LIVELINESS_QOS; + ret(NUM_READERS+4).LEASE_DURATION := gen_duration(15 sec); + ret(NUM_READERS+4).DESTINATION_ORDER_QOS := BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS; + ret(NUM_READERS+5).PRESENTATION_QOS := TOPIC_PRESENTATION_QOS; + ret(NUM_READERS+5).COHERENT_ACCESS := TRUE; + ret(NUM_READERS+5).ORDERED_ACCESS := TRUE; + ret(NUM_READERS+6).LATENCY_BUDGET_QOS := gen_duration(1 sec); + ret(NUM_READERS+7).DURABILITY_SERVICE_CLEANUP_DELAY := gen_duration(86400 sec); + ret(NUM_READERS+7).DURABILITY_SERVICE_HISTORY := KEEP_ALL_HISTORY_QOS; + ret(NUM_READERS+7).DURABILITY_SERVICE_HISTORY_DEPTH := std_logic_vector(to_unsigned(10, CDR_LONG_WIDTH)); + ret(NUM_READERS+7).DURABILITY_SERVICE_MAX_SAMPLES := std_logic_vector(to_unsigned(10, CDR_LONG_WIDTH)); + ret(NUM_READERS+7).DURABILITY_SERVICE_MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + ret(NUM_READERS+7).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + ret(NUM_READERS+7).OWNERSHIP_STRENGTH_QOS := std_logic_vector(to_unsigned(2, CDR_LONG_WIDTH)); + ret(NUM_READERS+7).MAX_BLOCKING_TIME := gen_duration(2 sec); + ret(NUM_READERS+7).LIFESPAN_QOS := gen_duration(30 sec); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file diff --git a/src/Tests/Type1_config.vhd b/src/Tests/Type1_cfg.vhd similarity index 100% rename from src/Tests/Type1_config.vhd rename to src/Tests/Type1_cfg.vhd diff --git a/src/Tests/test_config.vhd b/src/Tests/test_cfg.vhd similarity index 100% rename from src/Tests/test_config.vhd rename to src/Tests/test_cfg.vhd diff --git a/src/Tests/testbench.pro b/src/Tests/testbench.pro index f92765e..2d3ccd5 100644 --- a/src/Tests/testbench.pro +++ b/src/Tests/testbench.pro @@ -33,7 +33,7 @@ analyze Type1_reader_interface.vhd analyze Type1_writer_interface.vhd analyze Type1_key_holder.vhd analyze Level_2/L2_Testbench_Lib2.vhd -analyze Type1_config.vhd +analyze Type1_cfg.vhd library Testbench_Lib3 analyze ../math_pkg.vhd @@ -67,7 +67,7 @@ analyze Type1_reader_interface.vhd analyze Type1_writer_interface.vhd analyze Type1_key_holder.vhd analyze Level_2/L2_Testbench_Lib3.vhd -analyze Type1_config.vhd +analyze Type1_cfg.vhd library Testbench_Lib4 analyze ../math_pkg.vhd @@ -102,7 +102,7 @@ analyze Type1_writer_interface.vhd analyze Type1_key_holder.vhd analyze test_loopback.vhd analyze Level_2/L2_Testbench_Lib4.vhd -analyze Type1_config.vhd +analyze Type1_cfg.vhd library Testbench_Lib5 analyze ../math_pkg.vhd @@ -137,7 +137,7 @@ analyze Type1_writer_interface.vhd analyze Type1_key_holder.vhd analyze test_loopback.vhd analyze Level_2/L2_Testbench_Lib5.vhd -analyze Type1_config.vhd +analyze Type1_cfg.vhd # Compile library Testbench_Lib1 @@ -252,7 +252,7 @@ analyze Level_1/L1_Type2_key_holder_test1.vhd analyze Level_1/L1_Type2_key_holder_test2.vhd analyze Level_2/L2_Type1_test1.vhd analyze Level_2/L2_Type1_test2.vhd -analyze test_config.vhd +analyze test_cfg.vhd simulate L0_rtps_handler_test1 diff --git a/src/dds_reader.vhd b/src/dds_reader.vhd index 9ac72de..2b3c8f6 100644 --- a/src/dds_reader.vhd +++ b/src/dds_reader.vhd @@ -16,18 +16,18 @@ entity dds_reader is generic ( -- XXX: Quartus Limitation [VHDL error at : generic "" cannot be used in its own interface list (ID: 10556)] --ID : ID_TYPE := 0; - TIME_BASED_FILTER_QOS : DURATION_TYPE;-- := ENDPOINT_TIME_BASED_FILTER_QOS(ID); - DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_DEADLINE_QOS(ID); - MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_INSTANCES(ID); - MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES_PER_INSTANCE(ID); - MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES(ID); - HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_HISTORY_QOS(ID); - RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_RELIABILITY_QOS(ID); - PRESENTATION_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_PRESENTATION_QOS(ID); - DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_DESTINATION_ORDER_QOS(ID); - COHERENT_ACCESS : boolean;-- := ENDPOINT_COHERENT_ACCESS(ID); - ORDERED_ACCESS : boolean;-- := ENDPOINT_ORDERED_ACCESS(ID); - WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID); + TIME_BASED_FILTER_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).TIME_BASED_FILTER_QOS; + DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).DEADLINE_QOS; + MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_INSTANCES; + MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES; + MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES_PER_INSTANCE; + HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).HISTORY_QOS; + RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).RELIABILITY_QOS; + PRESENTATION_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).PRESENTATION_QOS; + DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DESTINATION_ORDER_QOS; + COHERENT_ACCESS : boolean;-- := ENDPOINT_CONFIG(ID).COHERENT_ACCESS; + ORDERED_ACCESS : boolean;-- := ENDPOINT_CONFIG(ID).ORDERED_ACCESS; + WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY; PAYLOAD_FRAME_SIZE : natural; MAX_REMOTE_ENDPOINTS : natural := 50 ); diff --git a/src/dds_writer.vhd b/src/dds_writer.vhd index e8ac5b7..6582ea1 100644 --- a/src/dds_writer.vhd +++ b/src/dds_writer.vhd @@ -16,14 +16,14 @@ entity dds_writer is generic ( -- XXX: Quartus Limitation [VHDL error at : generic "" cannot be used in its own interface list (ID: 10556)] --ID : ID_TYPE := 0; - HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_HISTORY_QOS(ID); - DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_DEADLINE_QOS(ID); - LIFESPAN_QOS : DURATION_TYPE;-- := ENDPOINT_LIFESPAN_QOS(ID); - LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID); - WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID); - MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES(ID); - MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_INSTANCES(ID); - MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES_PER_INSTANCE(ID); + HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).HISTORY_QOS; + DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).DEADLINE_QOS; + LIFESPAN_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LIFESPAN_QOS; + LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION; + WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY; + MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES; + MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_INSTANCES; + MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES_PER_INSTANCE; PAYLOAD_FRAME_SIZE : natural ); port ( diff --git a/src/rtps_builtin_endpoint.vhd b/src/rtps_builtin_endpoint.vhd index 17df8ef..0363600 100644 --- a/src/rtps_builtin_endpoint.vhd +++ b/src/rtps_builtin_endpoint.vhd @@ -2753,7 +2753,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered >= requested, with VOLATILE < TRANSIENT_LOCAL < TRANSIENT < PERSISTENT for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_DURABILITY_QOS(i)))) then + if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_CONFIG(i).DURABILITY_QOS))) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2786,7 +2786,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered <= requested for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_DEADLINE_QOS(i))) then + if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_CONFIG(i).DEADLINE_QOS)) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2804,7 +2804,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered >= requested, with AUTOMATIC < MANUAL_BY_PARTICIPANT < MANUAL_BY_TOPIC for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_LIVELINESS_QOS(i)))) then + if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_CONFIG(i).LIVELINESS_QOS))) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2827,7 +2827,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered <= requested for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_LEASE_DURATION(i))) then + if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_CONFIG(i).LEASE_DURATION)) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2847,7 +2847,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered >= requested, with BEST_EFFORT < RELIABLE for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then + if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_CONFIG(i).RELIABILITY_QOS))) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2881,7 +2881,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered >= requested, with BY_RECEPTION_TIMESTAMP < BY_SOURCE_TIMESTAMP for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_DESTINATION_ORDER_QOS(i)))) then + if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS))) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2896,7 +2896,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered = requested for i in 0 to NUM_ENDPOINTS-1 loop - if (data_in_swapped /= ENDPOINT_OWNERSHIP_QOS(i)) then + if (data_in_swapped /= ENDPOINT_CONFIG(i).OWNERSHIP_QOS) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2913,7 +2913,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered >= requested, with INSTANCE < TOPIC < GROUP for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_PRESENTATION_QOS(i)))) then + if (not check_qos_compatibility(is_subscriber, '1', unsigned(data_in_swapped), unsigned(ENDPOINT_CONFIG(i).PRESENTATION_QOS))) then endpoint_mask_next(i) <= '0'; end if; end loop; @@ -2924,18 +2924,18 @@ begin -- data-in is Subscriber-Requested -- COMPATIBLE (DDS v1.4): requested=FALSE or requested=offered=TRUE if (is_subscriber = '1') then - if (data_in(24) = '1' and not ENDPOINT_COHERENT_ACCESS(i)) then + if (data_in(24) = '1' and not ENDPOINT_CONFIG(i).COHERENT_ACCESS) then endpoint_mask_next(i) <= '0'; end if; - if (data_in(16) = '1' and not ENDPOINT_ORDERED_ACCESS(i)) then + if (data_in(16) = '1' and not ENDPOINT_CONFIG(i).ORDERED_ACCESS) then endpoint_mask_next(i) <= '0'; end if; -- data-in is Publisher-Offered else - if (data_in(24) = '0' and ENDPOINT_COHERENT_ACCESS(i)) then + if (data_in(24) = '0' and ENDPOINT_CONFIG(i).COHERENT_ACCESS) then endpoint_mask_next(i) <= '0'; end if; - if (data_in(16) = '0' and ENDPOINT_ORDERED_ACCESS(i)) then + if (data_in(16) = '0' and ENDPOINT_CONFIG(i).ORDERED_ACCESS) then endpoint_mask_next(i) <= '0'; end if; end if; @@ -2973,7 +2973,7 @@ begin -- Check QoS Compatibility (Unmark match on incompatibility) -- COMPATIBLE (DDS v1.4): offered <= requested for i in 0 to NUM_ENDPOINTS-1 loop - if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_LATENCY_BUDGET_QOS(i))) then + if (not check_qos_compatibility(is_subscriber, '0', tmp_dw, ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS)) then endpoint_mask_next(i) <= '0'; end if; end loop; diff --git a/src/rtps_config_package.vhd b/src/rtps_config_package.vhd index fdff92c..25c6903 100644 --- a/src/rtps_config_package.vhd +++ b/src/rtps_config_package.vhd @@ -127,7 +127,7 @@ package rtps_config_package is type RTPS_OUT_DATA_TYPE is array (0 to NUM_ENDPOINTS) of std_logic_vector(WORD_WIDTH-1 downto 0); - constant CLOCK_DURATION : DURATION_TYPE := gen_duration(0, CLOCK_PERIOD / 1 ns); + constant CLOCK_DURATION : DURATION_TYPE := gen_duration(CLOCK_PERIOD); -- Swap "data" to Big Endian representation. function endian_swap(swap : std_logic; data : std_logic_vector) return std_logic_vector; @@ -167,53 +167,16 @@ package body rtps_config_package is procedure assertions is begin assert (NUM_ENDPOINTS = (NUM_READERS+NUM_WRITERS)) severity failure; - - assert (ENDPOINT_WITH_KEY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_TOPIC_STRING'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_TYPE_STRING'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_HEARTBEAT_PERIOD'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_HEARTBEAT_RESPONSE_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_ACKNACK_RESPONSE_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_ACKNACK_SUPPRESSION_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_HISTORY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_PRESENTATION_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_COHERENT_ACCESS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_ORDERED_ACCESS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DEADLINE_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_LATENCY_BUDGET_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_OWNERSHIP_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_OWNERSHIP_STRENGTH_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_LIVELINESS_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_LEASE_DURATION'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_TIME_BASED_FILTER_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_RELIABILITY_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_MAX_BLOCKING_TIME'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_LIFESPAN_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_DESTINATION_ORDER_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_HISTORY_QOS'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_HISTORY_DEPTH'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_MAX_SAMPLES'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_MAX_INSTANCES'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_MAX_SAMPLES_PER_INSTANCE'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; - assert (ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY'length = NUM_ENDPOINTS) report "Endpoint arrays have to be NUM_ENDPOINTS long" severity failure; + assert (ENDPOINT_CONFIG'length = NUM_ENDPOINTS) report "Endpoint Configuration Array has to be NUM_ENDPOINTS long" severity failure; assert (PARTICIPANT_ANNOUNCEMENT_PERIOD+DURATION_DELTA <= PARTICIPANT_LEASE_DURATION) report "Participant Announcement Period has to be less than the Participant Lease Duration" severity failure; for i in 0 to NUM_ENDPOINTS-1 loop - assert (unsigned(ENDPOINT_DURABILITY_QOS(i)) < unsigned(TRANSIENT_DURABILITY_QOS)) report "TRANSIENT and PERSISTENT Durability QoS not supported" severity failure; - assert (ENDPOINT_PRESENTATION_QOS(i) /= GROUP_PRESENTATION_QOS) report "GROUP Presentation QoS not supported" severity failure; - assert (ENDPOINT_DEADLINE_QOS(i) >= ENDPOINT_TIME_BASED_FILTER_QOS(i)) report "DEADLINE Qos cannot be less than TIME_BASED_FILTER QoS" severity failure; - assert (ENDPOINT_OWNERSHIP_QOS(i) = SHARED_OWNERSHIP_QOS) report "Only SHARED Ownership QoS supported" severity failure; - assert (unsigned(ENDPOINT_MAX_SAMPLES(i)) >= unsigned(ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i))) report "MAX_SAMPLES cannot be less than MAX_SAMPLES_PER_INSTANCE in Resource Limits QoS" severity failure; + assert (unsigned(ENDPOINT_CONFIG(i).DURABILITY_QOS) < unsigned(TRANSIENT_DURABILITY_QOS)) report "TRANSIENT and PERSISTENT Durability QoS not supported" severity failure; + assert (ENDPOINT_CONFIG(i).PRESENTATION_QOS /= GROUP_PRESENTATION_QOS) report "GROUP Presentation QoS not supported" severity failure; + assert (ENDPOINT_CONFIG(i).DEADLINE_QOS >= ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS) report "DEADLINE Qos cannot be less than TIME_BASED_FILTER QoS" severity failure; + assert (ENDPOINT_CONFIG(i).OWNERSHIP_QOS = SHARED_OWNERSHIP_QOS) report "Only SHARED Ownership QoS supported" severity failure; + assert (unsigned(ENDPOINT_CONFIG(i).MAX_SAMPLES) >= unsigned(ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE)) report "MAX_SAMPLES cannot be less than MAX_SAMPLES_PER_INSTANCE in Resource Limits QoS" severity failure; end loop; end procedure; @@ -247,13 +210,13 @@ package body rtps_config_package is -- Entity Kind Mapping ret(i)(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY; if (i <= NUM_READERS-1) then - if (ENDPOINT_WITH_KEY(i)) then + if (ENDPOINT_CONFIG(i).WITH_KEY) then ret(i)(ENTITY_KIND_L_RANGE) := READER_WITH_KEY; else ret(i)(ENTITY_KIND_L_RANGE) := READER_NO_KEY; end if; else - if (ENDPOINT_WITH_KEY(i)) then + if (ENDPOINT_CONFIG(i).WITH_KEY) then ret(i)(ENTITY_KIND_L_RANGE) := WRITER_WITH_KEY; else ret(i)(ENTITY_KIND_L_RANGE) := WRITER_NO_KEY; @@ -301,10 +264,10 @@ package body rtps_config_package is -- Iterate through writers for i in NUM_READERS to NUM_ENDPOINTS-1 loop -- Do not consider "MANUAL_BY_TOPIC" Liveliness - if (ENDPOINT_LIVELINESS_QOS(i) /= MANUAL_BY_TOPIC_LIVELINESS_QOS) then + if (ENDPOINT_CONFIG(i).LIVELINESS_QOS /= MANUAL_BY_TOPIC_LIVELINESS_QOS) then -- Find Minimum Lease Duration - if (ENDPOINT_LEASE_DURATION(i) < ret) then - ret := ENDPOINT_LEASE_DURATION(i); + if (ENDPOINT_CONFIG(i).LEASE_DURATION < ret) then + ret := ENDPOINT_CONFIG(i).LEASE_DURATION; end if; end if; end loop; @@ -323,18 +286,26 @@ package body rtps_config_package is return ret; end function; - function convert_endpoint_string (string_array : USER_STRING_ARRAY_TYPE) return ENDPOINT_STRING_TYPE is + function convert_endpoint_topic_string (config_array : CONFIG_ARRAY_TYPE) return ENDPOINT_STRING_TYPE is variable ret : ENDPOINT_STRING_TYPE := (others => (others => (others => '0'))); begin - ret := (others => (others => (others => '0'))); for i in 0 to ret'length-1 loop - ret(i) := convert_string(string_array(i)); + ret(i) := convert_string(config_array(i).TOPICNAME); end loop; return ret; end function; - constant ENDPOINT_TOPIC : ENDPOINT_STRING_TYPE := convert_endpoint_string(ENDPOINT_TOPIC_STRING); - constant ENDPOINT_TYPE : ENDPOINT_STRING_TYPE := convert_endpoint_string(ENDPOINT_TYPE_STRING); + function convert_endpoint_type_string (config_array : CONFIG_ARRAY_TYPE) return ENDPOINT_STRING_TYPE is + variable ret : ENDPOINT_STRING_TYPE := (others => (others => (others => '0'))); + begin + for i in 0 to ret'length-1 loop + ret(i) := convert_string(config_array(i).TYPENAME); + end loop; + return ret; + end function; + + constant ENDPOINT_TOPIC : ENDPOINT_STRING_TYPE := convert_endpoint_topic_string(ENDPOINT_CONFIG); + constant ENDPOINT_TYPE : ENDPOINT_STRING_TYPE := convert_endpoint_type_string(ENDPOINT_CONFIG); constant DOMAIN_TAG : STRING_WORD_ARRAY_TYPE := convert_string(USER_DOMAIN_TAG); constant DEFAULT_DOMAIN_TAG : STRING_WORD_ARRAY_TYPE := convert_string(DEFAULT_USER_DOMAIN_TAG); @@ -439,105 +410,105 @@ package body rtps_config_package is ret.data(ind+len) := ENDPOINT_TYPE(i)(j); end loop; -- DURABILITY - if (ENDPOINT_DURABILITY_QOS(i) /= DEFAULT_DURABILITY_QOS) then + if (ENDPOINT_CONFIG(i).DURABILITY_QOS /= DEFAULT_DURABILITY_QOS) then len := len + 1; ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_QOS; end if; -- DURABILITY SERVICE - if (ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i) /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ENDPOINT_DURABILITY_SERVICE_HISTORY(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY or - ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or - ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE + if (ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY /= DEFAULT_DURABILITY_SERVICE_HISTORY or + ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY_DEPTH /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or + ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_INSTANCES /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE ) then len := len + 1; ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY(1)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_HISTORY(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY_DEPTH; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_INSTANCES; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE; end if; -- PRESENTATION - if (ENDPOINT_PRESENTATION_QOS(i) /= DEFAULT_PRESENTATION_QOS or ENDPOINT_COHERENT_ACCESS(i) /= DEFAULT_COHERENT_ACCESS or ENDPOINT_ORDERED_ACCESS(i) /= DEFAULT_ORDERED_ACCESS) then + if (ENDPOINT_CONFIG(i).PRESENTATION_QOS /= DEFAULT_PRESENTATION_QOS or ENDPOINT_CONFIG(i).COHERENT_ACCESS /= DEFAULT_COHERENT_ACCESS or ENDPOINT_CONFIG(i).ORDERED_ACCESS /= DEFAULT_ORDERED_ACCESS) then len := len + 1; ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_PRESENTATION_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).PRESENTATION_QOS; len := len + 1; - ret.data(ind+len) := (24 => boolean_to_std_logic(ENDPOINT_COHERENT_ACCESS(i)), 16 => boolean_to_std_logic(ENDPOINT_ORDERED_ACCESS(i)), others => '0'); + ret.data(ind+len) := (24 => boolean_to_std_logic(ENDPOINT_CONFIG(i).COHERENT_ACCESS), 16 => boolean_to_std_logic(ENDPOINT_CONFIG(i).ORDERED_ACCESS), others => '0'); end if; -- DEADLINE - if (ENDPOINT_DEADLINE_QOS(i) /= DEFAULT_DEADLINE_QOS) then + if (ENDPOINT_CONFIG(i).DEADLINE_QOS /= DEFAULT_DEADLINE_QOS) then len := len + 1; ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DEADLINE_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DEADLINE_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DEADLINE_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DEADLINE_QOS(1)); end if; -- LATENCY_BUDGET - if (ENDPOINT_LATENCY_BUDGET_QOS(i) /= DEFAULT_LATENCY_BUDGET_QOS) then + if (ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS /= DEFAULT_LATENCY_BUDGET_QOS) then len := len + 1; ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(1)); end if; -- OWNERSHIP - if (ENDPOINT_OWNERSHIP_QOS(i) /= DEFAULT_OWNERSHIP_QOS) then + if (ENDPOINT_CONFIG(i).OWNERSHIP_QOS /= DEFAULT_OWNERSHIP_QOS) then len := len + 1; ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_OWNERSHIP_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_QOS; end if; -- LIVELINESS - if (ENDPOINT_LIVELINESS_QOS(i) /= DEFAULT_LIVELINESS_QOS or ENDPOINT_LEASE_DURATION(i) /= DEFAULT_LEASE_DURATION) then + if (ENDPOINT_CONFIG(i).LIVELINESS_QOS /= DEFAULT_LIVELINESS_QOS or ENDPOINT_CONFIG(i).LEASE_DURATION /= DEFAULT_LEASE_DURATION) then len := len + 1; ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_LIVELINESS_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).LIVELINESS_QOS; len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LEASE_DURATION(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LEASE_DURATION(1)); end if; -- TIME BASED FILTER - if (ENDPOINT_TIME_BASED_FILTER_QOS(i) /= DEFAULT_LATENCY_BUDGET_QOS) then + if (ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS /= DEFAULT_LATENCY_BUDGET_QOS) then len := len + 1; ret.data(ind+len) := PID_TIME_BASED_FILTER & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_TIME_BASED_FILTER_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_TIME_BASED_FILTER_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS(1)); end if; -- RELIABILITY - if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS_R or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then + if (ENDPOINT_CONFIG(i).RELIABILITY_QOS /= DEFAULT_RELIABILITY_QOS_R or ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME /= DEFAULT_MAX_BLOCKING_TIME) then len := len + 1; ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_RELIABILITY_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).RELIABILITY_QOS; len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME(1)); end if; -- DESTINATION ORDER - if (ENDPOINT_DESTINATION_ORDER_QOS(i) /= DEFAULT_DESTINATION_ORDER_QOS) then + if (ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS /= DEFAULT_DESTINATION_ORDER_QOS) then len := len + 1; ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DESTINATION_ORDER_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS; end if; -- SENTINEL len := len + 1; @@ -626,112 +597,112 @@ package body rtps_config_package is ret.data(ind+len) := ENDPOINT_TYPE(i)(j); end loop; -- DURABILITY - if (ENDPOINT_DURABILITY_QOS(i) /= DEFAULT_DURABILITY_QOS) then + if (ENDPOINT_CONFIG(i).DURABILITY_QOS /= DEFAULT_DURABILITY_QOS) then len := len + 1; ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_QOS; end if; -- DURABILITY SERVICE - if (ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i) /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ENDPOINT_DURABILITY_SERVICE_HISTORY(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY or - ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or - ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE + if (ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY /= DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY /= DEFAULT_DURABILITY_SERVICE_HISTORY or + ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY_DEPTH /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES or + ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_INSTANCES /= DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES or ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE ) then len := len + 1; ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DURABILITY_SERVICE_CLEANUP_DELAY(1)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_HISTORY(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_HISTORY_DEPTH; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_INSTANCES; len := len + 1; - ret.data(ind+len) := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE; end if; -- PRESENTATION - if (ENDPOINT_PRESENTATION_QOS(i) /= DEFAULT_PRESENTATION_QOS or ENDPOINT_COHERENT_ACCESS(i) /= DEFAULT_COHERENT_ACCESS or ENDPOINT_ORDERED_ACCESS(i) /= DEFAULT_ORDERED_ACCESS) then + if (ENDPOINT_CONFIG(i).PRESENTATION_QOS /= DEFAULT_PRESENTATION_QOS or ENDPOINT_CONFIG(i).COHERENT_ACCESS /= DEFAULT_COHERENT_ACCESS or ENDPOINT_CONFIG(i).ORDERED_ACCESS /= DEFAULT_ORDERED_ACCESS) then len := len + 1; ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_PRESENTATION_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).PRESENTATION_QOS; len := len + 1; - ret.data(ind+len) := (24 => boolean_to_std_logic(ENDPOINT_COHERENT_ACCESS(i)), 16 => boolean_to_std_logic(ENDPOINT_ORDERED_ACCESS(i)), others => '0'); + ret.data(ind+len) := (24 => boolean_to_std_logic(ENDPOINT_CONFIG(i).COHERENT_ACCESS), 16 => boolean_to_std_logic(ENDPOINT_CONFIG(i).ORDERED_ACCESS), others => '0'); end if; -- DEADLINE - if (ENDPOINT_DEADLINE_QOS(i) /= DEFAULT_DEADLINE_QOS) then + if (ENDPOINT_CONFIG(i).DEADLINE_QOS /= DEFAULT_DEADLINE_QOS) then len := len + 1; ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DEADLINE_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DEADLINE_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_DEADLINE_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).DEADLINE_QOS(1)); end if; -- LATENCY_BUDGET - if (ENDPOINT_LATENCY_BUDGET_QOS(i) /= DEFAULT_LATENCY_BUDGET_QOS) then + if (ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS /= DEFAULT_LATENCY_BUDGET_QOS) then len := len + 1; ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(1)); end if; -- OWNERSHIP - if (ENDPOINT_OWNERSHIP_QOS(i) /= DEFAULT_OWNERSHIP_QOS) then + if (ENDPOINT_CONFIG(i).OWNERSHIP_QOS /= DEFAULT_OWNERSHIP_QOS) then len := len + 1; ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_OWNERSHIP_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_QOS; end if; -- OWNERSHIP STRENGTH - if (ENDPOINT_OWNERSHIP_STRENGTH_QOS(i) /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then + if (ENDPOINT_CONFIG(i).OWNERSHIP_STRENGTH_QOS /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then len := len + 1; ret.data(ind+len) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_OWNERSHIP_STRENGTH_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_STRENGTH_QOS; end if; -- LIVELINESS - if (ENDPOINT_LIVELINESS_QOS(i) /= DEFAULT_LIVELINESS_QOS or ENDPOINT_LEASE_DURATION(i) /= DEFAULT_LEASE_DURATION) then + if (ENDPOINT_CONFIG(i).LIVELINESS_QOS /= DEFAULT_LIVELINESS_QOS or ENDPOINT_CONFIG(i).LEASE_DURATION /= DEFAULT_LEASE_DURATION) then len := len + 1; ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_LIVELINESS_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).LIVELINESS_QOS; len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LEASE_DURATION(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LEASE_DURATION(1)); end if; -- RELIABILITY - if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS_W or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then + if (ENDPOINT_CONFIG(i).RELIABILITY_QOS /= DEFAULT_RELIABILITY_QOS_W or ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME /= DEFAULT_MAX_BLOCKING_TIME) then len := len + 1; ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_RELIABILITY_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).RELIABILITY_QOS; len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).MAX_BLOCKING_TIME(1)); end if; -- LIFESPAN - if (ENDPOINT_LIFESPAN_QOS(i) /= DEFAULT_LIFESPAN_QOS) then + if (ENDPOINT_CONFIG(i).LIFESPAN_QOS /= DEFAULT_LIFESPAN_QOS) then len := len + 1; ret.data(ind+len) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LIFESPAN_QOS(i)(0)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LIFESPAN_QOS(0)); len := len + 1; - ret.data(ind+len) := std_logic_vector(ENDPOINT_LIFESPAN_QOS(i)(1)); + ret.data(ind+len) := std_logic_vector(ENDPOINT_CONFIG(i).LIFESPAN_QOS(1)); end if; -- DESTINATION ORDER - if (ENDPOINT_DESTINATION_ORDER_QOS(i) /= DEFAULT_DESTINATION_ORDER_QOS) then + if (ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS /= DEFAULT_DESTINATION_ORDER_QOS) then len := len + 1; ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16)); len := len + 1; - ret.data(ind+len) := ENDPOINT_DESTINATION_ORDER_QOS(i); + ret.data(ind+len) := ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS; end if; -- TODO: MAX_SIZE_SERIALIZED -- SENTINEL @@ -773,90 +744,90 @@ package body rtps_config_package is ret.data(ret.length) := ENDPOINT_TOPIC(id)(j); end loop; -- DURABILITY - if (ENDPOINT_DURABILITY_QOS(id) /= DEFAULT_DURABILITY_QOS) then + if (ENDPOINT_CONFIG(id).DURABILITY_QOS /= DEFAULT_DURABILITY_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_DURABILITY_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).DURABILITY_QOS; end if; -- PRESENTATION - if (ENDPOINT_PRESENTATION_QOS(id) /= DEFAULT_PRESENTATION_QOS or ENDPOINT_COHERENT_ACCESS(id) /= DEFAULT_COHERENT_ACCESS or ENDPOINT_ORDERED_ACCESS(id) /= DEFAULT_ORDERED_ACCESS) then + if (ENDPOINT_CONFIG(id).PRESENTATION_QOS /= DEFAULT_PRESENTATION_QOS or ENDPOINT_CONFIG(id).COHERENT_ACCESS /= DEFAULT_COHERENT_ACCESS or ENDPOINT_CONFIG(id).ORDERED_ACCESS /= DEFAULT_ORDERED_ACCESS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_PRESENTATION_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).PRESENTATION_QOS; ret.length := ret.length + 1; - ret.data(ret.length) := (24 => boolean_to_std_logic(ENDPOINT_COHERENT_ACCESS(id)), 16 => boolean_to_std_logic(ENDPOINT_ORDERED_ACCESS(id)), others => '0'); + ret.data(ret.length) := (24 => boolean_to_std_logic(ENDPOINT_CONFIG(id).COHERENT_ACCESS), 16 => boolean_to_std_logic(ENDPOINT_CONFIG(id).ORDERED_ACCESS), others => '0'); end if; -- DEADLINE - if (ENDPOINT_DEADLINE_QOS(id) /= DEFAULT_DEADLINE_QOS) then + if (ENDPOINT_CONFIG(id).DEADLINE_QOS /= DEFAULT_DEADLINE_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_DEADLINE_QOS(id)(0)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).DEADLINE_QOS(0)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_DEADLINE_QOS(id)(1)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).DEADLINE_QOS(1)); end if; -- LATENCY_BUDGET - if (ENDPOINT_LATENCY_BUDGET_QOS(id) /= DEFAULT_LATENCY_BUDGET_QOS) then + if (ENDPOINT_CONFIG(id).LATENCY_BUDGET_QOS /= DEFAULT_LATENCY_BUDGET_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(id)(0)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LATENCY_BUDGET_QOS(0)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LATENCY_BUDGET_QOS(id)(1)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LATENCY_BUDGET_QOS(1)); end if; -- OWNERSHIP - if (ENDPOINT_OWNERSHIP_QOS(id) /= DEFAULT_OWNERSHIP_QOS) then + if (ENDPOINT_CONFIG(id).OWNERSHIP_QOS /= DEFAULT_OWNERSHIP_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_OWNERSHIP_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).OWNERSHIP_QOS; end if; -- OWNERSHIP STRENGTH - if (ENDPOINT_OWNERSHIP_STRENGTH_QOS(id) /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then + if (ENDPOINT_CONFIG(id).OWNERSHIP_STRENGTH_QOS /= DEFAULT_OWNERSHIP_STRENGTH_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_OWNERSHIP_STRENGTH_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).OWNERSHIP_STRENGTH_QOS; end if; -- LIVELINESS - if (ENDPOINT_LIVELINESS_QOS(id) /= DEFAULT_LIVELINESS_QOS or ENDPOINT_LEASE_DURATION(id) /= DEFAULT_LEASE_DURATION) then + if (ENDPOINT_CONFIG(id).LIVELINESS_QOS /= DEFAULT_LIVELINESS_QOS or ENDPOINT_CONFIG(id).LEASE_DURATION /= DEFAULT_LEASE_DURATION) then ret.length := ret.length + 1; ret.data(ret.length) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_LIVELINESS_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).LIVELINESS_QOS; ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LEASE_DURATION(id)(0)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LEASE_DURATION(0)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LEASE_DURATION(id)(1)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LEASE_DURATION(1)); end if; -- RELIABILITY - if (ENDPOINT_RELIABILITY_QOS(id) /= DEFAULT_RELIABILITY_QOS_W or ENDPOINT_MAX_BLOCKING_TIME(id) /= DEFAULT_MAX_BLOCKING_TIME) then + if (ENDPOINT_CONFIG(id).RELIABILITY_QOS /= DEFAULT_RELIABILITY_QOS_W or ENDPOINT_CONFIG(id).MAX_BLOCKING_TIME /= DEFAULT_MAX_BLOCKING_TIME) then ret.length := ret.length + 1; ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_RELIABILITY_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).RELIABILITY_QOS; ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(id)(0)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).MAX_BLOCKING_TIME(0)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_MAX_BLOCKING_TIME(id)(1)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).MAX_BLOCKING_TIME(1)); end if; -- LIFESPAN - if (ENDPOINT_LIFESPAN_QOS(id) /= DEFAULT_LIFESPAN_QOS) then + if (ENDPOINT_CONFIG(id).LIFESPAN_QOS /= DEFAULT_LIFESPAN_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LIFESPAN_QOS(id)(0)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LIFESPAN_QOS(0)); ret.length := ret.length + 1; - ret.data(ret.length) := std_logic_vector(ENDPOINT_LIFESPAN_QOS(id)(1)); + ret.data(ret.length) := std_logic_vector(ENDPOINT_CONFIG(id).LIFESPAN_QOS(1)); end if; -- DESTINATION ORDER - if (ENDPOINT_DESTINATION_ORDER_QOS(id) /= DEFAULT_DESTINATION_ORDER_QOS) then + if (ENDPOINT_CONFIG(id).DESTINATION_ORDER_QOS /= DEFAULT_DESTINATION_ORDER_QOS) then ret.length := ret.length + 1; ret.data(ret.length) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16)); ret.length := ret.length + 1; - ret.data(ret.length) := ENDPOINT_DESTINATION_ORDER_QOS(id); + ret.data(ret.length) := ENDPOINT_CONFIG(id).DESTINATION_ORDER_QOS; end if; -- SENTINEL ret.length := ret.length + 1; @@ -1096,68 +1067,68 @@ package body rtps_config_package is for i in 0 to NUM_ENDPOINTS-1 loop -- DURABILITY - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_DURABILITY_QOS), unsigned(ENDPOINT_DURABILITY_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_DURABILITY_QOS), unsigned(ENDPOINT_CONFIG(i).DURABILITY_QOS))) then ret.DURABILITY_QOS(i) := '0'; end if; -- PRESENTATION - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_PRESENTATION_QOS), unsigned(ENDPOINT_PRESENTATION_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_PRESENTATION_QOS), unsigned(ENDPOINT_CONFIG(i).PRESENTATION_QOS))) then ret.PRESENTATION_QOS(i) := '0'; end if; if (is_reader) then - if (DEFAULT_COHERENT_ACCESS and not ENDPOINT_COHERENT_ACCESS(i)) then + if (DEFAULT_COHERENT_ACCESS and not ENDPOINT_CONFIG(i).COHERENT_ACCESS) then ret.PRESENTATION_QOS(i) := '0'; end if; - if (DEFAULT_ORDERED_ACCESS and not ENDPOINT_ORDERED_ACCESS(i)) then + if (DEFAULT_ORDERED_ACCESS and not ENDPOINT_CONFIG(i).ORDERED_ACCESS) then ret.PRESENTATION_QOS(i) := '0'; end if; else - if (not DEFAULT_COHERENT_ACCESS and ENDPOINT_COHERENT_ACCESS(i)) then + if (not DEFAULT_COHERENT_ACCESS and ENDPOINT_CONFIG(i).COHERENT_ACCESS) then ret.PRESENTATION_QOS(i) := '0'; end if; - if (not DEFAULT_ORDERED_ACCESS and ENDPOINT_ORDERED_ACCESS(i)) then + if (not DEFAULT_ORDERED_ACCESS and ENDPOINT_CONFIG(i).ORDERED_ACCESS) then ret.PRESENTATION_QOS(i) := '0'; end if; end if; -- DEADLINE - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_DEADLINE_QOS(0), ENDPOINT_DEADLINE_QOS(i)(0))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_DEADLINE_QOS(0), ENDPOINT_CONFIG(i).DEADLINE_QOS(0))) then ret.DEADLINE_QOS(i) := '0'; end if; - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_DEADLINE_QOS(1), ENDPOINT_DEADLINE_QOS(i)(1))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_DEADLINE_QOS(1), ENDPOINT_CONFIG(i).DEADLINE_QOS(1))) then ret.DEADLINE_QOS(i) := '0'; end if; -- LATENCY_BUDGET - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LATENCY_BUDGET_QOS(0), ENDPOINT_LATENCY_BUDGET_QOS(i)(0))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LATENCY_BUDGET_QOS(0), ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(0))) then ret.LATENCY_BUDGET_QOS(i) := '0'; end if; - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LATENCY_BUDGET_QOS(1), ENDPOINT_LATENCY_BUDGET_QOS(i)(1))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LATENCY_BUDGET_QOS(1), ENDPOINT_CONFIG(i).LATENCY_BUDGET_QOS(1))) then ret.LATENCY_BUDGET_QOS(i) := '0'; end if; -- OWNERSHIP - if (DEFAULT_OWNERSHIP_QOS /= ENDPOINT_OWNERSHIP_QOS(i)) then + if (DEFAULT_OWNERSHIP_QOS /= ENDPOINT_CONFIG(i).OWNERSHIP_QOS) then ret.OWNERSHIP_QOS(i) := '0'; end if; -- LIVELINESS - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_LIVELINESS_QOS), unsigned(ENDPOINT_LIVELINESS_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_LIVELINESS_QOS), unsigned(ENDPOINT_CONFIG(i).LIVELINESS_QOS))) then ret.LIVELINESS_QOS(i) := '0'; end if; - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LEASE_DURATION(0), ENDPOINT_LEASE_DURATION(i)(0))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LEASE_DURATION(0), ENDPOINT_CONFIG(i).LEASE_DURATION(0))) then ret.LIVELINESS_QOS(i) := '0'; end if; - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LEASE_DURATION(1), ENDPOINT_LEASE_DURATION(i)(1))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '0', DEFAULT_LEASE_DURATION(1), ENDPOINT_CONFIG(i).LEASE_DURATION(1))) then ret.LIVELINESS_QOS(i) := '0'; end if; -- RELIABILITY if (is_reader) then - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS_R), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS_R), unsigned(ENDPOINT_CONFIG(i).RELIABILITY_QOS))) then ret.RELIABILITY_QOS(i) := '0'; end if; else - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS_W), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS_W), unsigned(ENDPOINT_CONFIG(i).RELIABILITY_QOS))) then ret.RELIABILITY_QOS(i) := '0'; end if; end if; -- DESTINATION_ORDER - if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_DESTINATION_ORDER_QOS), unsigned(ENDPOINT_DESTINATION_ORDER_QOS(i)))) then + if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_DESTINATION_ORDER_QOS), unsigned(ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS))) then ret.DESTINATION_ORDER_QOS(i) := '0'; end if; end loop; @@ -1171,7 +1142,7 @@ package body rtps_config_package is variable ret : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); begin for i in 0 to NUM_ENDPOINTS-1 loop - if (ENDPOINT_LIVELINESS_QOS(i) = qos) then + if (ENDPOINT_CONFIG(i).LIVELINESS_QOS = qos) then ret(i) := '1'; end if; end loop; diff --git a/src/rtps_package.vhd b/src/rtps_package.vhd index b263eea..1e00b4a 100644 --- a/src/rtps_package.vhd +++ b/src/rtps_package.vhd @@ -101,6 +101,7 @@ package rtps_package is -- Helper Function function gen_duration(s,ns : integer) return DURATION_TYPE; + function gen_duration(t : time) return DURATION_TYPE; -- *PREDEFINED VALUES* constant DEFAULT_IPv4_META_ADDRESS : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := x"EFFF0001"; -- Default Multicast Ipv4 Address (239.255.0.1) @@ -474,6 +475,78 @@ package rtps_package is constant DEFAULT_USER_DOMAIN_TAG : USER_STRING_TYPE := (others => NUL); + function gen_user_string(input : string) return string; + + type CONFIG_TYPE is record + -- If Endpoint uses Keye Topics + WITH_KEY : boolean; + -- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first) + PUSH_MODE : boolean; -- (only relevant to Writers) + -- DDS Topicname + TOPICNAME : USER_STRING_TYPE; + -- DDS Typename + TYPENAME : USER_STRING_TYPE; + -- *RTPS Timing Characteristics* + HEARTBEAT_PERIOD : DURATION_TYPE; + HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE; + HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE; + ACKNACK_RESPONSE_DELAY : DURATION_TYPE; + ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE; + -- *DDS QOS* + -- DURABILITY QoS + DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + -- DURABILITY SERVICE QoS + DURABILITY_SERVICE_CLEANUP_DELAY : DURATION_TYPE; + DURABILITY_SERVICE_HISTORY : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + DURABILITY_SERVICE_HISTORY_DEPTH : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + DURABILITY_SERVICE_MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + DURABILITY_SERVICE_MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + -- PRESENTATION QoS + PRESENTATION_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + COHERENT_ACCESS : boolean; + ORDERED_ACCESS : boolean; + -- DEADLINE QoS + DEADLINE_QOS : DURATION_TYPE; + -- LATENCY_BUDGET QoS + LATENCY_BUDGET_QOS : DURATION_TYPE; + -- OWNERSHIP QoS + OWNERSHIP_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + -- OWNERSHIP_STRENGTH QoS + OWNERSHIP_STRENGTH_QOS : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); -- (Only relevant to Writers) + -- LIVELINESS QoS + LIVELINESS_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + LEASE_DURATION : DURATION_TYPE; + -- TIME_BASED_FILTER QoS + TIME_BASED_FILTER_QOS : DURATION_TYPE; + -- XXX: PARTITION QoS Ignored + -- RELIABILITY QoS + RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + MAX_BLOCKING_TIME : DURATION_TYPE; -- (Only relevant to Writers) + -- LIFESPAN QoS + LIFESPAN_QOS : DURATION_TYPE; + -- DESTINATION_ORDER QoS + DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + -- HISTORY QoS + HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0); + HISTORY_DEPTH : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + -- RESOURCE_LIMITS QoS + MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0); + -- XXX: ENTITY_FACTORY QoS Ignored + -- WRITER_DATA_LIFECYCLE QoS + AUTODISPOSE_UNREGISTERED_INSTANCES : boolean; -- (Only relevant to Writers) + -- READER_DATA_LIFECYCLE QoS + AUTOPURGE_NOWRITER_SAMPLES_DELAY : DURATION_TYPE; -- (Only relevant to Readers) + AUTOPURGE_DISPOSED_SAMPLES_DELAY : DURATION_TYPE; -- (Only relevant to Readers) + end record; + + constant DEFAULT_READER_CONFIG : CONFIG_TYPE; -- Deferred to package Body + constant DEFAULT_WRITER_CONFIG : CONFIG_TYPE; -- Deferred to package Body + + type CONFIG_ARRAY_TYPE is array (natural range <>) of CONFIG_TYPE; + function to_guid(A : GUIDPREFIX_TYPE; B : std_logic_vector(ENTITYID_WIDTH-1 downto 0)) return GUID_TYPE; function to_key_hash(A : GUID_TYPE) return KEY_HASH_TYPE; function to_key_hash(A : std_logic_vector) return KEY_HASH_TYPE; @@ -537,8 +610,21 @@ package body rtps_package is return ret; end function; - constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE := gen_duration(0,100 * (10**6)); -- 100 ms - constant DEFAULT_PARTICIPANT_LEASE_DURATION : DURATION_TYPE := gen_duration(100, 0); -- 100 s + function gen_duration(t : time) return DURATION_TYPE is + variable seconds : natural; + variable nanoseconds : natural; + variable tmp : time; + begin + -- Extract Seconds + seconds := t / sec; + -- Extract Nanoseconds + nanoseconds := (t - (seconds * sec)) / ns; + + return gen_duration(seconds, nanoseconds); + end function; + + constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE := gen_duration(100 ms); + constant DEFAULT_PARTICIPANT_LEASE_DURATION : DURATION_TYPE := gen_duration(100 sec); function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned is variable ret : unsigned(63 downto 0) := (others => '0'); @@ -776,4 +862,98 @@ package body rtps_package is return ret; end function; + + function gen_user_string(input : string) return string is + variable ret : string(1 to 256) := (others => NUL); + begin + assert (input'length <= 256) report "String has to be <= 256 Characters" severity FAILURE; + + for i in 1 to input'length loop + ret(i) := input(i); + end loop; + return ret; + end function; + + constant DEFAULT_READER_CONFIG : CONFIG_TYPE := ( + WITH_KEY => FALSE, + PUSH_MODE => TRUE, + TOPICNAME => gen_user_string(""), + TYPENAME => gen_user_string(""), + HEARTBEAT_PERIOD => gen_duration(1 sec), + HEARTBEAT_RESPONSE_DELAY => gen_duration(500 ms), + HEARTBEAT_SUPPRESSION_DELAY => gen_duration(0 ms), + ACKNACK_RESPONSE_DELAY => gen_duration(200 ms), + ACKNACK_SUPPRESSION_DELAY => gen_duration(0 ms), + DURABILITY_QOS => DEFAULT_DURABILITY_QOS, + DURABILITY_SERVICE_CLEANUP_DELAY => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY, + DURABILITY_SERVICE_HISTORY => DEFAULT_DURABILITY_SERVICE_HISTORY, + DURABILITY_SERVICE_HISTORY_DEPTH => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH, + DURABILITY_SERVICE_MAX_SAMPLES => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES, + DURABILITY_SERVICE_MAX_INSTANCES => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES, + DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE, + PRESENTATION_QOS => DEFAULT_PRESENTATION_QOS, + COHERENT_ACCESS => DEFAULT_COHERENT_ACCESS, + ORDERED_ACCESS => DEFAULT_ORDERED_ACCESS, + DEADLINE_QOS => DEFAULT_DEADLINE_QOS, + LATENCY_BUDGET_QOS => DEFAULT_LATENCY_BUDGET_QOS, + OWNERSHIP_QOS => DEFAULT_OWNERSHIP_QOS, + OWNERSHIP_STRENGTH_QOS => DEFAULT_OWNERSHIP_STRENGTH_QOS, + LIVELINESS_QOS => DEFAULT_LIVELINESS_QOS, + LEASE_DURATION => DEFAULT_LEASE_DURATION, + TIME_BASED_FILTER_QOS => DEFAULT_TIME_BASED_FILTER_QOS, + RELIABILITY_QOS => DEFAULT_RELIABILITY_QOS_R, + MAX_BLOCKING_TIME => DEFAULT_MAX_BLOCKING_TIME, + LIFESPAN_QOS => DEFAULT_LIFESPAN_QOS, + DESTINATION_ORDER_QOS => DEFAULT_DESTINATION_ORDER_QOS, + HISTORY_QOS => DEFAULT_HISTORY_QOS, + HISTORY_DEPTH => DEFAULT_HISTORY_DEPTH, + MAX_SAMPLES => DEFAULT_MAX_SAMPLES, + MAX_INSTANCES => DEFAULT_MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => DEFAULT_MAX_SAMPLES_PER_INSTANCE, + AUTODISPOSE_UNREGISTERED_INSTANCES => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES, + AUTOPURGE_NOWRITER_SAMPLES_DELAY => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY, + AUTOPURGE_DISPOSED_SAMPLES_DELAY => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY + ); + + constant DEFAULT_WRITER_CONFIG : CONFIG_TYPE := ( + WITH_KEY => FALSE, + PUSH_MODE => TRUE, + TOPICNAME => gen_user_string(""), + TYPENAME => gen_user_string(""), + HEARTBEAT_PERIOD => gen_duration(1 sec), + HEARTBEAT_RESPONSE_DELAY => gen_duration(500 ms), + HEARTBEAT_SUPPRESSION_DELAY => gen_duration(0 ms), + ACKNACK_RESPONSE_DELAY => gen_duration(200 ms), + ACKNACK_SUPPRESSION_DELAY => gen_duration(0 ms), + DURABILITY_QOS => DEFAULT_DURABILITY_QOS, + DURABILITY_SERVICE_CLEANUP_DELAY => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY, + DURABILITY_SERVICE_HISTORY => DEFAULT_DURABILITY_SERVICE_HISTORY, + DURABILITY_SERVICE_HISTORY_DEPTH => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH, + DURABILITY_SERVICE_MAX_SAMPLES => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES, + DURABILITY_SERVICE_MAX_INSTANCES => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES, + DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE, + PRESENTATION_QOS => DEFAULT_PRESENTATION_QOS, + COHERENT_ACCESS => DEFAULT_COHERENT_ACCESS, + ORDERED_ACCESS => DEFAULT_ORDERED_ACCESS, + DEADLINE_QOS => DEFAULT_DEADLINE_QOS, + LATENCY_BUDGET_QOS => DEFAULT_LATENCY_BUDGET_QOS, + OWNERSHIP_QOS => DEFAULT_OWNERSHIP_QOS, + OWNERSHIP_STRENGTH_QOS => DEFAULT_OWNERSHIP_STRENGTH_QOS, + LIVELINESS_QOS => DEFAULT_LIVELINESS_QOS, + LEASE_DURATION => DEFAULT_LEASE_DURATION, + TIME_BASED_FILTER_QOS => DEFAULT_TIME_BASED_FILTER_QOS, + RELIABILITY_QOS => DEFAULT_RELIABILITY_QOS_W, + MAX_BLOCKING_TIME => DEFAULT_MAX_BLOCKING_TIME, + LIFESPAN_QOS => DEFAULT_LIFESPAN_QOS, + DESTINATION_ORDER_QOS => DEFAULT_DESTINATION_ORDER_QOS, + HISTORY_QOS => DEFAULT_HISTORY_QOS, + HISTORY_DEPTH => DEFAULT_HISTORY_DEPTH, + MAX_SAMPLES => DEFAULT_MAX_SAMPLES, + MAX_INSTANCES => DEFAULT_MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => DEFAULT_MAX_SAMPLES_PER_INSTANCE, + AUTODISPOSE_UNREGISTERED_INSTANCES => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES, + AUTOPURGE_NOWRITER_SAMPLES_DELAY => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY, + AUTOPURGE_DISPOSED_SAMPLES_DELAY => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY + ); + end package body; diff --git a/src/rtps_reader.vhd b/src/rtps_reader.vhd index 7fb3466..90e20bd 100644 --- a/src/rtps_reader.vhd +++ b/src/rtps_reader.vhd @@ -18,13 +18,13 @@ entity rtps_reader is -- XXX: Quartus Limitation [VHDL error at : generic "" cannot be used in its own interface list (ID: 10556)] --ID : ID_TYPE := 0; ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0);-- := ENTITYID(ID); - RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_RELIABILITY_QOS(ID); - LIVELINESS_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_LIVELINESS_QOS(ID); - DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_DURABILITY_QOS(ID); - HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_RESPONSE_DELAY(ID); - HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(ID); - LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID); - WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID); + RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).RELIABILITY_QOS; + LIVELINESS_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).LIVELINESS_QOS; + DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DURABILITY_QOS; + HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_RESPONSE_DELAY; + HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_SUPPRESSION_DELAY; + LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION; + WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY; MAX_REMOTE_ENDPOINTS : natural := 50 ); port ( diff --git a/src/rtps_test_package.vhd b/src/rtps_test_package.vhd index 3b6a12f..a320052 100644 --- a/src/rtps_test_package.vhd +++ b/src/rtps_test_package.vhd @@ -3003,27 +3003,27 @@ package body rtps_test_package is ret.reader := TRUE when (id < NUM_READERS) else FALSE; ret.topic_name := ENDPOINT_TOPIC(id); ret.type_name := ENDPOINT_TYPE(id); - ret.durability := ENDPOINT_DURABILITY_QOS(id); - ret.durability_service_cleanup_delay := ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(id); - ret.durability_service_history := ENDPOINT_DURABILITY_SERVICE_HISTORY(id); - ret.durability_service_history_depth := ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(id); - ret.durability_service_max_samples := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(id); - ret.durability_service_max_instances := ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(id); - ret.durability_service_max_samples_per_instances := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(id); - ret.presentation := ENDPOINT_PRESENTATION_QOS(id); - ret.coherent_access(0) := boolean_to_std_logic(ENDPOINT_COHERENT_ACCESS(id)); - ret.ordered_access(0) := boolean_to_std_logic(ENDPOINT_ORDERED_ACCESS(id)); - ret.deadline := ENDPOINT_DEADLINE_QOS(id); - ret.latency_budget := ENDPOINT_LATENCY_BUDGET_QOS(id); - ret.ownership := ENDPOINT_OWNERSHIP_QOS(id); - ret.ownership_strength := ENDPOINT_OWNERSHIP_STRENGTH_QOS(id); - ret.liveliness := ENDPOINT_LIVELINESS_QOS(id); - ret.leaseDuration := ENDPOINT_LEASE_DURATION(id); - ret.time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(id); - ret.reliability := ENDPOINT_RELIABILITY_QOS(id); - ret.max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(id); - ret.lifespan := ENDPOINT_LIFESPAN_QOS(id); - ret.destination_order := ENDPOINT_DESTINATION_ORDER_QOS(id); + ret.durability := ENDPOINT_CONFIG(id).DURABILITY_QOS; + ret.durability_service_cleanup_delay := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_CLEANUP_DELAY; + ret.durability_service_history := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_HISTORY; + ret.durability_service_history_depth := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_HISTORY_DEPTH; + ret.durability_service_max_samples := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_SAMPLES; + ret.durability_service_max_instances := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_INSTANCES; + ret.durability_service_max_samples_per_instances := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE; + ret.presentation := ENDPOINT_CONFIG(id).PRESENTATION_QOS; + ret.coherent_access(0) := boolean_to_std_logic(ENDPOINT_CONFIG(id).COHERENT_ACCESS); + ret.ordered_access(0) := boolean_to_std_logic(ENDPOINT_CONFIG(id).ORDERED_ACCESS); + ret.deadline := ENDPOINT_CONFIG(id).DEADLINE_QOS; + ret.latency_budget := ENDPOINT_CONFIG(id).LATENCY_BUDGET_QOS; + ret.ownership := ENDPOINT_CONFIG(id).OWNERSHIP_QOS; + ret.ownership_strength := ENDPOINT_CONFIG(id).OWNERSHIP_STRENGTH_QOS; + ret.liveliness := ENDPOINT_CONFIG(id).LIVELINESS_QOS; + ret.leaseDuration := ENDPOINT_CONFIG(id).LEASE_DURATION; + ret.time_based_filter := ENDPOINT_CONFIG(id).TIME_BASED_FILTER_QOS; + ret.reliability := ENDPOINT_CONFIG(id).RELIABILITY_QOS; + ret.max_blocking_time := ENDPOINT_CONFIG(id).MAX_BLOCKING_TIME; + ret.lifespan := ENDPOINT_CONFIG(id).LIFESPAN_QOS; + ret.destination_order := ENDPOINT_CONFIG(id).DESTINATION_ORDER_QOS; ret.expectsInlineQoS(0) := DEFAULT_EXPECTS_INLINE_QOS when (id < NUM_READERS) else '0'; ret.participant := THIS_PARTICIPANT_DATA; ret.entityId := ENTITYID(id); diff --git a/src/rtps_writer.vhd b/src/rtps_writer.vhd index 933f313..a04734a 100644 --- a/src/rtps_writer.vhd +++ b/src/rtps_writer.vhd @@ -16,17 +16,17 @@ entity rtps_writer is generic ( -- XXX: Quartus Limitation [VHDL error at : generic "" cannot be used in its own interface list (ID: 10556)] --ID : ID_TYPE := 0; - RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_RELIABILITY_QOS(ID); - LIVELINESS_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_LIVELINESS_QOS(ID); - DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_DURABILITY_QOS(ID); - DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_DESTINATION_ORDER_QOS(ID); - ACKNACK_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_ACKNACK_RESPONSE_DELAY(ID); - ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_ACKNACK_SUPPRESSION_DELAY(ID); - LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID); - HEARTBEAT_PERIOD : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_PERIOD(ID); + RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).RELIABILITY_QOS; + LIVELINESS_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).LIVELINESS_QOS; + DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DURABILITY_QOS; + DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DESTINATION_ORDER_QOS; + ACKNACK_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).ACKNACK_RESPONSE_DELAY; + ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).ACKNACK_SUPPRESSION_DELAY; + LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION; + HEARTBEAT_PERIOD : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_PERIOD; ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0);-- := ENTITYID(ID); - WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID); - PUSH_MODE : boolean;-- := ENDPOINT_PUSH_MODE(ID); + WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY; + PUSH_MODE : boolean;-- := ENDPOINT_CONFIG(ID).PUSH_MODE; INLINE_QOS : OUTPUT_DATA_TYPE;-- := gen_inline_qos(ID); MAX_REMOTE_ENDPOINTS : natural := 50 ); diff --git a/syn/DE10-Nano/top.qsf b/syn/DE10-Nano/top.qsf index 7574326..680f90b 100644 --- a/syn/DE10-Nano/top.qsf +++ b/syn/DE10-Nano/top.qsf @@ -50,7 +50,6 @@ set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top set_global_assignment -name VHDL_FILE ../test6.vhd -hdl_version VHDL_2008 set_global_assignment -name SDC_FILE ../top.sdc set_global_assignment -name VHDL_FILE ../test_top.vhd -hdl_version VHDL_2008 @@ -97,4 +96,5 @@ set_global_assignment -name VHDL_FILE ../../src/single_port_ram.vhd -hdl_version set_global_assignment -name VHDL_FILE ../../src/rtps_config_package.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../syn_config.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_package.vhd -hdl_version VHDL_2008 -set_global_assignment -name VHDL_FILE ../../src/math_pkg.vhd -hdl_version VHDL_2008 \ No newline at end of file +set_global_assignment -name VHDL_FILE ../../src/math_pkg.vhd -hdl_version VHDL_2008 +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/syn/dds_reader_syn.vhd b/syn/dds_reader_syn.vhd index d8e645f..d4d42d6 100644 --- a/syn/dds_reader_syn.vhd +++ b/syn/dds_reader_syn.vhd @@ -70,18 +70,18 @@ begin if_gen : if (NUM_READERS > 0) generate syn_inst : entity work.dds_reader(arch) generic map ( - TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(0), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0), - HISTORY_QOS => ENDPOINT_HISTORY_QOS(0), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0), - PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(0), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0), - COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(0), - ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(0), - WITH_KEY => ENDPOINT_WITH_KEY(0), + TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(0).TIME_BASED_FILTER_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS, + MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE, + MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES, + HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS, + RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS, + PRESENTATION_QOS => ENDPOINT_CONFIG(0).PRESENTATION_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS, + COHERENT_ACCESS => ENDPOINT_CONFIG(0).COHERENT_ACCESS, + ORDERED_ACCESS => ENDPOINT_CONFIG(0).ORDERED_ACCESS, + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE ) port map ( diff --git a/syn/dds_writer_syn.vhd b/syn/dds_writer_syn.vhd index 11ae8ea..8592fce 100644 --- a/syn/dds_writer_syn.vhd +++ b/syn/dds_writer_syn.vhd @@ -65,14 +65,14 @@ begin if_gen : if (NUM_WRITERS > 0) generate syn_inst : entity work.dds_writer(arch) generic map ( - HISTORY_QOS => ENDPOINT_HISTORY_QOS(NUM_READERS), - DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(NUM_READERS), - LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(NUM_READERS), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(NUM_READERS), - WITH_KEY => ENDPOINT_WITH_KEY(NUM_READERS), - MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(NUM_READERS), - MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(NUM_READERS), - MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(NUM_READERS), + HISTORY_QOS => ENDPOINT_CONFIG(NUM_READERS).HISTORY_QOS, + DEADLINE_QOS => ENDPOINT_CONFIG(NUM_READERS).DEADLINE_QOS, + LIFESPAN_QOS => ENDPOINT_CONFIG(NUM_READERS).LIFESPAN_QOS, + LEASE_DURATION => ENDPOINT_CONFIG(NUM_READERS).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(NUM_READERS).WITH_KEY, + MAX_SAMPLES => ENDPOINT_CONFIG(NUM_READERS).MAX_SAMPLES, + MAX_INSTANCES => ENDPOINT_CONFIG(NUM_READERS).MAX_INSTANCES, + MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(NUM_READERS).MAX_SAMPLES_PER_INSTANCE, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE ) port map ( diff --git a/syn/rtps_reader_syn.vhd b/syn/rtps_reader_syn.vhd index 6cc8db7..801c79f 100644 --- a/syn/rtps_reader_syn.vhd +++ b/syn/rtps_reader_syn.vhd @@ -51,13 +51,13 @@ begin syn_inst : entity work.rtps_reader(arch) generic map ( ENTITYID => ENTITYID(0), - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0), - HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(0), - HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(0), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(0), - WITH_KEY => ENDPOINT_WITH_KEY(0) + RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS, + HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_RESPONSE_DELAY, + HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION, + WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY ) port map ( clk => clk, diff --git a/syn/rtps_writer_syn.vhd b/syn/rtps_writer_syn.vhd index c7c038c..b637821 100644 --- a/syn/rtps_writer_syn.vhd +++ b/syn/rtps_writer_syn.vhd @@ -60,17 +60,17 @@ begin if_gen : if (NUM_WRITERS > 0) generate syn_inst : entity work.rtps_writer(arch) generic map ( - RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(NUM_READERS), - LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(NUM_READERS), - DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(NUM_READERS), - DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(NUM_READERS), - ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(NUM_READERS), - ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(NUM_READERS), - LEASE_DURATION => ENDPOINT_LEASE_DURATION(NUM_READERS), - HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(NUM_READERS), + RELIABILITY_QOS => ENDPOINT_CONFIG(NUM_READERS).RELIABILITY_QOS, + LIVELINESS_QOS => ENDPOINT_CONFIG(NUM_READERS).LIVELINESS_QOS, + DURABILITY_QOS => ENDPOINT_CONFIG(NUM_READERS).DURABILITY_QOS, + DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(NUM_READERS).DESTINATION_ORDER_QOS, + ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(NUM_READERS).ACKNACK_RESPONSE_DELAY, + ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(NUM_READERS).ACKNACK_SUPPRESSION_DELAY, + LEASE_DURATION => ENDPOINT_CONFIG(NUM_READERS).LEASE_DURATION, + HEARTBEAT_PERIOD => ENDPOINT_CONFIG(NUM_READERS).HEARTBEAT_PERIOD, ENTITYID => ENTITYID(NUM_READERS), - WITH_KEY => ENDPOINT_WITH_KEY(NUM_READERS), - PUSH_MODE => ENDPOINT_PUSH_MODE(NUM_READERS), + WITH_KEY => ENDPOINT_CONFIG(NUM_READERS).WITH_KEY, + PUSH_MODE => ENDPOINT_CONFIG(NUM_READERS).PUSH_MODE, INLINE_QOS => gen_inline_qos(NUM_READERS) ) port map ( diff --git a/syn/syn_config.vhd b/syn/syn_config.vhd index d48dffe..a92e4dd 100644 --- a/syn/syn_config.vhd +++ b/syn/syn_config.vhd @@ -45,86 +45,51 @@ package user_config is -- Domain ID constant USER_DOMAIN_ID : natural := 1; -- Domain TAG - constant USER_DOMAIN_TAG : string(1 to 256) := (others => NUL); --"" + constant USER_DOMAIN_TAG : string(1 to 256) := gen_user_string(""); - --***RTPS ENDPOINTS*** - -- Array denoting if Endpoints use Keyed Topics - constant ENDPOINT_WITH_KEY : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array denoting which mode the Endpoints are operating with - constant ENDPOINT_PUSH_MODE : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRUE); - -- Array mapping Topic Names to Endpoints - constant ENDPOINT_TOPIC_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Topic1" & (7 to 256 => NUL)); - -- Array mapping Type Names to Endpoints - constant ENDPOINT_TYPE_STRING : USER_STRING_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => "Type1" & (6 to 256 => NUL)); -- *TIMING CHARACTERISTICS* -- Timing Characteristics for Participant - constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(10,0); -- 10 s + constant PARTICIPANT_ANNOUNCEMENT_PERIOD : DURATION_TYPE := gen_duration(10 sec); constant PARTICIPANT_LEASE_DURATION : DURATION_TYPE := DEFAULT_PARTICIPANT_LEASE_DURATION; -- Denotes how much faster then the deadline/period we schedule in order to account for transport delay. - constant DURATION_DELTA : DURATION_TYPE := gen_duration(0, 100*(10**6)); -- 100 ms + constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ms); -- Timing Characteristics for built-in Endpoints - constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s - constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500*(10**6)); -- 500 ms - constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0); - constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms - constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0); - -- Array mapping Timing Characteristics to Endpoints - constant ENDPOINT_HEARTBEAT_PERIOD : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(1,0)); -- 1 s - constant ENDPOINT_HEARTBEAT_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,500*(10**6))); -- 500 ms - constant ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,0)); - constant ENDPOINT_ACKNACK_RESPONSE_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,200*(10**6))); -- 200 ms - constant ENDPOINT_ACKNACK_SUPPRESSION_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => gen_duration(0,0)); - - --***ENDPOINT DDS QOS*** - -- Array mapping DURABILITY QoS to Endpoints - constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => TRANSIENT_LOCAL_DURABILITY_QOS); - -- Array mapping DURABILITY SERVICE QoS to Endpoints - constant ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_CLEANUP_DELAY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY); - constant ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_INSTANCES); - constant ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE); - -- Array mapping PRESENTATION QoS to Endpoints - constant ENDPOINT_PRESENTATION_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_PRESENTATION_QOS); - constant ENDPOINT_COHERENT_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_COHERENT_ACCESS); - constant ENDPOINT_ORDERED_ACCESS : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_ORDERED_ACCESS); - -- Array mapping DEADLINE QoS to Endpoints - constant ENDPOINT_DEADLINE_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DEADLINE_QOS); - -- Array mapping LATENCY_BUDGET QoS to Endpoints - constant ENDPOINT_LATENCY_BUDGET_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LATENCY_BUDGET_QOS); - -- Array mapping OWNERSHIP QoS to Endpoints - constant ENDPOINT_OWNERSHIP_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_QOS); - -- Array mapping OWNERSHIP_STRENGTH QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_OWNERSHIP_STRENGTH_QOS : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_OWNERSHIP_STRENGTH_QOS); - -- Array mapping LIVELINESS QoS to Endpoints - constant ENDPOINT_LIVELINESS_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIVELINESS_QOS); - constant ENDPOINT_LEASE_DURATION : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LEASE_DURATION); - -- Array mapping TIME_BASED_FILTER QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS); - -- XXX: PARTITION QoS Ignored - -- Array mapping RELIABILITY QoS to Endpoints - constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => RELIABLE_RELIABILITY_QOS); - -- (Only relevant to Writers) - constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); - -- Array mapping LIFESPAN QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_LIFESPAN_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_LIFESPAN_QOS); - -- Array mapping DESTINATION_ORDER QoS to Endpoints - constant ENDPOINT_DESTINATION_ORDER_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DESTINATION_ORDER_QOS); - -- Array mapping HISTORY QoS to Endpoints - constant ENDPOINT_HISTORY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_HISTORY_QOS); - constant ENDPOINT_HISTORY_DEPTH : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - -- Array mapping RESOURCE_LIMITS QoS to Endpoints - constant ENDPOINT_MAX_SAMPLES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_INSTANCES : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH))); - constant ENDPOINT_MAX_SAMPLES_PER_INSTANCE : USER_LONG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_SAMPLES_PER_INSTANCE); - -- XXX: ENTITY_FACTORY QoS Ignored - -- Array mapping WRITER_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Writers) - constant ENDPOINT_AUTODISPOSE_UNREGISTERED_INSTANCES : USER_BOOLEAN_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTODISPOSE_UNREGISTERED_INSTANCES); - -- Array mapping Reader_DATA_LIFECYCLE QoS to Endpoints (Only relevant to Readers) - constant ENDPOINT_AUTOPURGE_NOWRITER_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_NOWRITER_SAMPLES_DELAY); - constant ENDPOINT_AUTOPURGE_DISPOSED_SAMPLES_DELAY : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_AUTOPURGE_DISPOSED_SAMPLES_DELAY); + constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec); + constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ms); + constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms); + constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms); + constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms); + + -- *ENDPOINT CONFIG* + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body -- Set to TRUE for Simulation Testing (Extra Code generated) constant SIMULATION_FLAG : boolean := FALSE; end package; + +package body user_config is + + function gen_config return CONFIG_ARRAY_TYPE is + variable ret : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); + variable c : CONFIG_TYPE; + begin + + c := DEFAULT_WRITER_CONFIG; + c.WITH_KEY := TRUE; + c.PUSH_MODE := TRUE; + c.TOPICNAME := gen_user_string("Topic1"); + c.TYPENAME := gen_user_string("Type1"); + c.DURABILITY_QOS := TRANSIENT_LOCAL_DURABILITY_QOS; + c.RELIABILITY_QOS := RELIABLE_RELIABILITY_QOS; + c.HISTORY_DEPTH := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + c.MAX_SAMPLES := std_logic_vector(to_unsigned(20, CDR_LONG_WIDTH)); + c.MAX_INSTANCES := std_logic_vector(to_unsigned(5, CDR_LONG_WIDTH)); + + ret := (others => c); + + return ret; + end function; + + constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := gen_config; + +end package body; \ No newline at end of file