Define RTPS/DDS Configuration in record type

This commit is contained in:
Greek 2022-01-16 16:16:58 +01:00
parent da5eb1ad07
commit e0280ea490
28 changed files with 911 additions and 1055 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -16,18 +16,18 @@ entity dds_reader is
generic (
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" 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
);

View File

@ -16,14 +16,14 @@ entity dds_writer is
generic (
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" 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 (

View File

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

View File

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

View File

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

View File

@ -18,13 +18,13 @@ entity rtps_reader is
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" 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 (

View File

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

View File

@ -16,17 +16,17 @@ entity rtps_writer is
generic (
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" 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
);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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