Define RTPS/DDS Configuration in record type
This commit is contained in:
parent
da5eb1ad07
commit
e0280ea490
@ -243,13 +243,13 @@ begin
|
|||||||
rtps_reader_inst : entity work.rtps_reader(arch)
|
rtps_reader_inst : entity work.rtps_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i),
|
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY,
|
||||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i),
|
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
@ -289,17 +289,17 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
rtps_writer_inst : entity work.rtps_writer(arch)
|
rtps_writer_inst : entity work.rtps_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i),
|
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY,
|
||||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i),
|
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i),
|
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD,
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
PUSH_MODE => ENDPOINT_PUSH_MODE(i),
|
PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE,
|
||||||
INLINE_QOS => gen_inline_qos(i),
|
INLINE_QOS => gen_inline_qos(i),
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
@ -352,18 +352,18 @@ begin
|
|||||||
dds_endpoint_if : if (i < NUM_READERS) generate
|
dds_endpoint_if : if (i < NUM_READERS) generate
|
||||||
dds_reader_inst : entity work.dds_reader(arch)
|
dds_reader_inst : entity work.dds_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i),
|
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i),
|
PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i),
|
COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS,
|
||||||
ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i),
|
ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
PAYLOAD_FRAME_SIZE => TODO,
|
PAYLOAD_FRAME_SIZE => TODO,
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
@ -422,14 +422,14 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
dds_writer_inst : entity work.dds_writer(arch)
|
dds_writer_inst : entity work.dds_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i),
|
LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
PAYLOAD_FRAME_SIZE => TODO
|
PAYLOAD_FRAME_SIZE => TODO
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
|
|||||||
@ -48,89 +48,26 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500*(10**6)); -- 500 ms
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ms);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0);
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0);
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 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,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 CONFIG*
|
||||||
--***ENDPOINT DDS QOS***
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
|
||||||
-- Array mapping DURABILITY QoS to Endpoints
|
0 to NUM_READERS-1 => DEFAULT_READER_CONFIG,
|
||||||
constant ENDPOINT_DURABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_DURABILITY_QOS);
|
NUM_READERS to NUM_WRITERS-1 => DEFAULT_WRITER_CONFIG
|
||||||
-- 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
|
|
||||||
);
|
);
|
||||||
-- (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)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := FALSE;
|
constant SIMULATION_FLAG : boolean := FALSE;
|
||||||
|
|||||||
@ -131,14 +131,14 @@ begin
|
|||||||
|
|
||||||
dds_writer_w_inst : entity Testbench_Lib2.dds_writer(arch)
|
dds_writer_w_inst : entity Testbench_Lib2.dds_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(0),
|
HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0),
|
DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS,
|
||||||
LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(0),
|
LIFESPAN_QOS => ENDPOINT_CONFIG(0).LIFESPAN_QOS,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(0),
|
LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0),
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0),
|
MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0),
|
MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
@ -189,17 +189,17 @@ begin
|
|||||||
|
|
||||||
rtps_writer_w_inst : entity Testbench_Lib2.rtps_writer(arch)
|
rtps_writer_w_inst : entity Testbench_Lib2.rtps_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0),
|
DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS,
|
||||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(0),
|
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(0).ACKNACK_RESPONSE_DELAY,
|
||||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(0),
|
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).ACKNACK_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(0),
|
LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION,
|
||||||
HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(0),
|
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(0).HEARTBEAT_PERIOD,
|
||||||
ENTITYID => ENTITYID(0),
|
ENTITYID => ENTITYID(0),
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0),
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY,
|
||||||
PUSH_MODE => ENDPOINT_PUSH_MODE(0),
|
PUSH_MODE => ENDPOINT_CONFIG(0).PUSH_MODE,
|
||||||
INLINE_QOS => gen_inline_qos(0),
|
INLINE_QOS => gen_inline_qos(0),
|
||||||
MAX_REMOTE_ENDPOINTS => 5
|
MAX_REMOTE_ENDPOINTS => 5
|
||||||
)
|
)
|
||||||
|
|||||||
@ -45,87 +45,55 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns);
|
||||||
-- Timing Characteristics for built-in Endpoints
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(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
|
|
||||||
|
|
||||||
|
-- *ENDPOINT CONFIG*
|
||||||
--***ENDPOINT DDS QOS***
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
-- 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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := TRUE;
|
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;
|
||||||
@ -192,18 +192,18 @@ begin
|
|||||||
|
|
||||||
dds_reader_r_inst : entity Testbench_Lib3.dds_reader(arch)
|
dds_reader_r_inst : entity Testbench_Lib3.dds_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(0),
|
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(0).TIME_BASED_FILTER_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0),
|
DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0),
|
MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0),
|
MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES,
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(0),
|
HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS,
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS,
|
||||||
PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(0),
|
PRESENTATION_QOS => ENDPOINT_CONFIG(0).PRESENTATION_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS,
|
||||||
COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(0),
|
COHERENT_ACCESS => ENDPOINT_CONFIG(0).COHERENT_ACCESS,
|
||||||
ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(0),
|
ORDERED_ACCESS => ENDPOINT_CONFIG(0).ORDERED_ACCESS,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0),
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
||||||
MAX_REMOTE_ENDPOINTS => 5
|
MAX_REMOTE_ENDPOINTS => 5
|
||||||
)
|
)
|
||||||
@ -261,13 +261,13 @@ begin
|
|||||||
rtps_reader_r_inst : entity Testbench_Lib3.rtps_reader(arch)
|
rtps_reader_r_inst : entity Testbench_Lib3.rtps_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
ENTITYID => ENTITYID(0),
|
ENTITYID => ENTITYID(0),
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0),
|
DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS,
|
||||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(0),
|
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_RESPONSE_DELAY,
|
||||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(0),
|
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(0),
|
LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0),
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY,
|
||||||
MAX_REMOTE_ENDPOINTS => 5
|
MAX_REMOTE_ENDPOINTS => 5
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -45,89 +45,55 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns);
|
||||||
-- Timing Characteristics for built-in Endpoints
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(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
|
|
||||||
|
|
||||||
|
-- *ENDPOINT CONFIG*
|
||||||
--***ENDPOINT DDS QOS***
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
-- 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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := TRUE;
|
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;
|
||||||
@ -267,13 +267,13 @@ begin
|
|||||||
rtps_reader_inst : entity work.rtps_reader(arch)
|
rtps_reader_inst : entity work.rtps_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i),
|
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY,
|
||||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i),
|
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
@ -313,17 +313,17 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
rtps_writer_inst : entity work.rtps_writer(arch)
|
rtps_writer_inst : entity work.rtps_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i),
|
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY,
|
||||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i),
|
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i),
|
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD,
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
PUSH_MODE => ENDPOINT_PUSH_MODE(i),
|
PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE,
|
||||||
INLINE_QOS => gen_inline_qos(i),
|
INLINE_QOS => gen_inline_qos(i),
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
@ -376,18 +376,18 @@ begin
|
|||||||
dds_endpoint_if : if (i < NUM_READERS) generate
|
dds_endpoint_if : if (i < NUM_READERS) generate
|
||||||
dds_reader_inst : entity work.dds_reader(arch)
|
dds_reader_inst : entity work.dds_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i),
|
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i),
|
PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i),
|
COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS,
|
||||||
ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i),
|
ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
@ -444,14 +444,14 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
dds_writer_inst : entity work.dds_writer(arch)
|
dds_writer_inst : entity work.dds_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i),
|
LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -45,86 +45,56 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns);
|
||||||
-- Timing Characteristics for built-in Endpoints
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(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
|
|
||||||
|
|
||||||
--***ENDPOINT DDS QOS***
|
-- *ENDPOINT CONFIG*
|
||||||
-- Array mapping DURABILITY QoS to Endpoints
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := TRUE;
|
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.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;
|
||||||
@ -289,13 +289,13 @@ begin
|
|||||||
rtps_reader_inst : entity work.rtps_reader(arch)
|
rtps_reader_inst : entity work.rtps_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(i),
|
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_RESPONSE_DELAY,
|
||||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(i),
|
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).HEARTBEAT_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
@ -335,17 +335,17 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
rtps_writer_inst : entity work.rtps_writer(arch)
|
rtps_writer_inst : entity work.rtps_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(i),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(i).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(i),
|
DURABILITY_QOS => ENDPOINT_CONFIG(i).DURABILITY_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(i),
|
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(i).ACKNACK_RESPONSE_DELAY,
|
||||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(i),
|
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(i).ACKNACK_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(i),
|
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(i).HEARTBEAT_PERIOD,
|
||||||
ENTITYID => ENTITYID(i),
|
ENTITYID => ENTITYID(i),
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
PUSH_MODE => ENDPOINT_PUSH_MODE(i),
|
PUSH_MODE => ENDPOINT_CONFIG(i).PUSH_MODE,
|
||||||
INLINE_QOS => gen_inline_qos(i),
|
INLINE_QOS => gen_inline_qos(i),
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
@ -398,18 +398,18 @@ begin
|
|||||||
dds_endpoint_if : if (i < NUM_READERS) generate
|
dds_endpoint_if : if (i < NUM_READERS) generate
|
||||||
dds_reader_inst : entity work.dds_reader(arch)
|
dds_reader_inst : entity work.dds_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(i),
|
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(i).TIME_BASED_FILTER_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(i),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(i).RELIABILITY_QOS,
|
||||||
PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(i),
|
PRESENTATION_QOS => ENDPOINT_CONFIG(i).PRESENTATION_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(i),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS,
|
||||||
COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(i),
|
COHERENT_ACCESS => ENDPOINT_CONFIG(i).COHERENT_ACCESS,
|
||||||
ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(i),
|
ORDERED_ACCESS => ENDPOINT_CONFIG(i).ORDERED_ACCESS,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE,
|
||||||
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
MAX_REMOTE_ENDPOINTS => MAX_REMOTE_ENDPOINTS
|
||||||
)
|
)
|
||||||
@ -466,14 +466,14 @@ begin
|
|||||||
else generate
|
else generate
|
||||||
dds_writer_inst : entity work.dds_writer(arch)
|
dds_writer_inst : entity work.dds_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(i),
|
HISTORY_QOS => ENDPOINT_CONFIG(i).HISTORY_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(i),
|
DEADLINE_QOS => ENDPOINT_CONFIG(i).DEADLINE_QOS,
|
||||||
LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(i),
|
LIFESPAN_QOS => ENDPOINT_CONFIG(i).LIFESPAN_QOS,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(i),
|
LEASE_DURATION => ENDPOINT_CONFIG(i).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(i),
|
WITH_KEY => ENDPOINT_CONFIG(i).WITH_KEY,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(i),
|
MAX_SAMPLES => ENDPOINT_CONFIG(i).MAX_SAMPLES,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(i),
|
MAX_INSTANCES => ENDPOINT_CONFIG(i).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(i),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(i).MAX_SAMPLES_PER_INSTANCE,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -45,86 +45,56 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
constant DURATION_DELTA : DURATION_TYPE := gen_duration(100 ns);
|
||||||
-- Timing Characteristics for built-in Endpoints
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(0,40000); -- 40k ns
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(40 us);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(100 ns);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500); -- 500 ns
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ns);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,100); -- 100 ns
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(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
|
|
||||||
|
|
||||||
--***ENDPOINT DDS QOS***
|
-- *ENDPOINT CONFIG*
|
||||||
-- Array mapping DURABILITY QoS to Endpoints
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := TRUE;
|
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.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;
|
||||||
@ -45,180 +45,23 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
-- Timing Characteristics for built-in Endpoints (Discovery Module)
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,100*(10**6)); -- 100 ms
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(100 ms);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(200 ms);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(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
|
|
||||||
|
|
||||||
|
-- *ENDPOINT CONFIG*
|
||||||
--***ENDPOINT DDS QOS***
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
-- 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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := TRUE;
|
constant SIMULATION_FLAG : boolean := TRUE;
|
||||||
@ -226,3 +69,89 @@ package user_config is
|
|||||||
-- TESTING PARAMETERS
|
-- TESTING PARAMETERS
|
||||||
constant TEST_STRING : string := "TEST_CONFIG_1";
|
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;
|
||||||
@ -33,7 +33,7 @@ analyze Type1_reader_interface.vhd
|
|||||||
analyze Type1_writer_interface.vhd
|
analyze Type1_writer_interface.vhd
|
||||||
analyze Type1_key_holder.vhd
|
analyze Type1_key_holder.vhd
|
||||||
analyze Level_2/L2_Testbench_Lib2.vhd
|
analyze Level_2/L2_Testbench_Lib2.vhd
|
||||||
analyze Type1_config.vhd
|
analyze Type1_cfg.vhd
|
||||||
|
|
||||||
library Testbench_Lib3
|
library Testbench_Lib3
|
||||||
analyze ../math_pkg.vhd
|
analyze ../math_pkg.vhd
|
||||||
@ -67,7 +67,7 @@ analyze Type1_reader_interface.vhd
|
|||||||
analyze Type1_writer_interface.vhd
|
analyze Type1_writer_interface.vhd
|
||||||
analyze Type1_key_holder.vhd
|
analyze Type1_key_holder.vhd
|
||||||
analyze Level_2/L2_Testbench_Lib3.vhd
|
analyze Level_2/L2_Testbench_Lib3.vhd
|
||||||
analyze Type1_config.vhd
|
analyze Type1_cfg.vhd
|
||||||
|
|
||||||
library Testbench_Lib4
|
library Testbench_Lib4
|
||||||
analyze ../math_pkg.vhd
|
analyze ../math_pkg.vhd
|
||||||
@ -102,7 +102,7 @@ analyze Type1_writer_interface.vhd
|
|||||||
analyze Type1_key_holder.vhd
|
analyze Type1_key_holder.vhd
|
||||||
analyze test_loopback.vhd
|
analyze test_loopback.vhd
|
||||||
analyze Level_2/L2_Testbench_Lib4.vhd
|
analyze Level_2/L2_Testbench_Lib4.vhd
|
||||||
analyze Type1_config.vhd
|
analyze Type1_cfg.vhd
|
||||||
|
|
||||||
library Testbench_Lib5
|
library Testbench_Lib5
|
||||||
analyze ../math_pkg.vhd
|
analyze ../math_pkg.vhd
|
||||||
@ -137,7 +137,7 @@ analyze Type1_writer_interface.vhd
|
|||||||
analyze Type1_key_holder.vhd
|
analyze Type1_key_holder.vhd
|
||||||
analyze test_loopback.vhd
|
analyze test_loopback.vhd
|
||||||
analyze Level_2/L2_Testbench_Lib5.vhd
|
analyze Level_2/L2_Testbench_Lib5.vhd
|
||||||
analyze Type1_config.vhd
|
analyze Type1_cfg.vhd
|
||||||
|
|
||||||
# Compile
|
# Compile
|
||||||
library Testbench_Lib1
|
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_1/L1_Type2_key_holder_test2.vhd
|
||||||
analyze Level_2/L2_Type1_test1.vhd
|
analyze Level_2/L2_Type1_test1.vhd
|
||||||
analyze Level_2/L2_Type1_test2.vhd
|
analyze Level_2/L2_Type1_test2.vhd
|
||||||
analyze test_config.vhd
|
analyze test_cfg.vhd
|
||||||
|
|
||||||
|
|
||||||
simulate L0_rtps_handler_test1
|
simulate L0_rtps_handler_test1
|
||||||
|
|||||||
@ -16,18 +16,18 @@ entity dds_reader is
|
|||||||
generic (
|
generic (
|
||||||
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
||||||
--ID : ID_TYPE := 0;
|
--ID : ID_TYPE := 0;
|
||||||
TIME_BASED_FILTER_QOS : DURATION_TYPE;-- := ENDPOINT_TIME_BASED_FILTER_QOS(ID);
|
TIME_BASED_FILTER_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).TIME_BASED_FILTER_QOS;
|
||||||
DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_DEADLINE_QOS(ID);
|
DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).DEADLINE_QOS;
|
||||||
MAX_INSTANCES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_INSTANCES(ID);
|
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_MAX_SAMPLES_PER_INSTANCE(ID);
|
MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES;
|
||||||
MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES(ID);
|
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_HISTORY_QOS(ID);
|
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_RELIABILITY_QOS(ID);
|
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_PRESENTATION_QOS(ID);
|
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_DESTINATION_ORDER_QOS(ID);
|
DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DESTINATION_ORDER_QOS;
|
||||||
COHERENT_ACCESS : boolean;-- := ENDPOINT_COHERENT_ACCESS(ID);
|
COHERENT_ACCESS : boolean;-- := ENDPOINT_CONFIG(ID).COHERENT_ACCESS;
|
||||||
ORDERED_ACCESS : boolean;-- := ENDPOINT_ORDERED_ACCESS(ID);
|
ORDERED_ACCESS : boolean;-- := ENDPOINT_CONFIG(ID).ORDERED_ACCESS;
|
||||||
WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID);
|
WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY;
|
||||||
PAYLOAD_FRAME_SIZE : natural;
|
PAYLOAD_FRAME_SIZE : natural;
|
||||||
MAX_REMOTE_ENDPOINTS : natural := 50
|
MAX_REMOTE_ENDPOINTS : natural := 50
|
||||||
);
|
);
|
||||||
|
|||||||
@ -16,14 +16,14 @@ entity dds_writer is
|
|||||||
generic (
|
generic (
|
||||||
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
||||||
--ID : ID_TYPE := 0;
|
--ID : ID_TYPE := 0;
|
||||||
HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_HISTORY_QOS(ID);
|
HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).HISTORY_QOS;
|
||||||
DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_DEADLINE_QOS(ID);
|
DEADLINE_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).DEADLINE_QOS;
|
||||||
LIFESPAN_QOS : DURATION_TYPE;-- := ENDPOINT_LIFESPAN_QOS(ID);
|
LIFESPAN_QOS : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LIFESPAN_QOS;
|
||||||
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID);
|
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION;
|
||||||
WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID);
|
WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY;
|
||||||
MAX_SAMPLES : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_MAX_SAMPLES(ID);
|
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_MAX_INSTANCES(ID);
|
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_MAX_SAMPLES_PER_INSTANCE(ID);
|
MAX_SAMPLES_PER_INSTANCE : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).MAX_SAMPLES_PER_INSTANCE;
|
||||||
PAYLOAD_FRAME_SIZE : natural
|
PAYLOAD_FRAME_SIZE : natural
|
||||||
);
|
);
|
||||||
port (
|
port (
|
||||||
|
|||||||
@ -2753,7 +2753,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered >= requested, with VOLATILE < TRANSIENT_LOCAL < TRANSIENT < PERSISTENT
|
-- COMPATIBLE (DDS v1.4): offered >= requested, with VOLATILE < TRANSIENT_LOCAL < TRANSIENT < PERSISTENT
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2786,7 +2786,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered <= requested
|
-- COMPATIBLE (DDS v1.4): offered <= requested
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2804,7 +2804,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered >= requested, with AUTOMATIC < MANUAL_BY_PARTICIPANT < MANUAL_BY_TOPIC
|
-- COMPATIBLE (DDS v1.4): offered >= requested, with AUTOMATIC < MANUAL_BY_PARTICIPANT < MANUAL_BY_TOPIC
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2827,7 +2827,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered <= requested
|
-- COMPATIBLE (DDS v1.4): offered <= requested
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2847,7 +2847,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered >= requested, with BEST_EFFORT < RELIABLE
|
-- COMPATIBLE (DDS v1.4): offered >= requested, with BEST_EFFORT < RELIABLE
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2881,7 +2881,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered >= requested, with BY_RECEPTION_TIMESTAMP < BY_SOURCE_TIMESTAMP
|
-- COMPATIBLE (DDS v1.4): offered >= requested, with BY_RECEPTION_TIMESTAMP < BY_SOURCE_TIMESTAMP
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2896,7 +2896,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered = requested
|
-- COMPATIBLE (DDS v1.4): offered = requested
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2913,7 +2913,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered >= requested, with INSTANCE < TOPIC < GROUP
|
-- COMPATIBLE (DDS v1.4): offered >= requested, with INSTANCE < TOPIC < GROUP
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -2924,18 +2924,18 @@ begin
|
|||||||
-- data-in is Subscriber-Requested
|
-- data-in is Subscriber-Requested
|
||||||
-- COMPATIBLE (DDS v1.4): requested=FALSE or requested=offered=TRUE
|
-- COMPATIBLE (DDS v1.4): requested=FALSE or requested=offered=TRUE
|
||||||
if (is_subscriber = '1') then
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
-- data-in is Publisher-Offered
|
-- data-in is Publisher-Offered
|
||||||
else
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
@ -2973,7 +2973,7 @@ begin
|
|||||||
-- Check QoS Compatibility (Unmark match on incompatibility)
|
-- Check QoS Compatibility (Unmark match on incompatibility)
|
||||||
-- COMPATIBLE (DDS v1.4): offered <= requested
|
-- COMPATIBLE (DDS v1.4): offered <= requested
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
endpoint_mask_next(i) <= '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
|||||||
@ -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);
|
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.
|
-- Swap "data" to Big Endian representation.
|
||||||
function endian_swap(swap : std_logic; data : std_logic_vector) return std_logic_vector;
|
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
|
procedure assertions is
|
||||||
begin
|
begin
|
||||||
assert (NUM_ENDPOINTS = (NUM_READERS+NUM_WRITERS)) severity failure;
|
assert (NUM_ENDPOINTS = (NUM_READERS+NUM_WRITERS)) severity failure;
|
||||||
|
assert (ENDPOINT_CONFIG'length = NUM_ENDPOINTS) report "Endpoint Configuration Array has to be NUM_ENDPOINTS long" 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 (PARTICIPANT_ANNOUNCEMENT_PERIOD+DURATION_DELTA <= PARTICIPANT_LEASE_DURATION) report "Participant Announcement Period has to be less than the Participant Lease Duration" 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
|
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 (unsigned(ENDPOINT_CONFIG(i).DURABILITY_QOS) < 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_CONFIG(i).PRESENTATION_QOS /= 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_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_OWNERSHIP_QOS(i) = SHARED_OWNERSHIP_QOS) report "Only SHARED Ownership QoS supported" severity failure;
|
assert (ENDPOINT_CONFIG(i).OWNERSHIP_QOS = 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).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 loop;
|
||||||
end procedure;
|
end procedure;
|
||||||
|
|
||||||
@ -247,13 +210,13 @@ package body rtps_config_package is
|
|||||||
-- Entity Kind Mapping
|
-- Entity Kind Mapping
|
||||||
ret(i)(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY;
|
ret(i)(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY;
|
||||||
if (i <= NUM_READERS-1) then
|
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;
|
ret(i)(ENTITY_KIND_L_RANGE) := READER_WITH_KEY;
|
||||||
else
|
else
|
||||||
ret(i)(ENTITY_KIND_L_RANGE) := READER_NO_KEY;
|
ret(i)(ENTITY_KIND_L_RANGE) := READER_NO_KEY;
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
if (ENDPOINT_WITH_KEY(i)) then
|
if (ENDPOINT_CONFIG(i).WITH_KEY) then
|
||||||
ret(i)(ENTITY_KIND_L_RANGE) := WRITER_WITH_KEY;
|
ret(i)(ENTITY_KIND_L_RANGE) := WRITER_WITH_KEY;
|
||||||
else
|
else
|
||||||
ret(i)(ENTITY_KIND_L_RANGE) := WRITER_NO_KEY;
|
ret(i)(ENTITY_KIND_L_RANGE) := WRITER_NO_KEY;
|
||||||
@ -301,10 +264,10 @@ package body rtps_config_package is
|
|||||||
-- Iterate through writers
|
-- Iterate through writers
|
||||||
for i in NUM_READERS to NUM_ENDPOINTS-1 loop
|
for i in NUM_READERS to NUM_ENDPOINTS-1 loop
|
||||||
-- Do not consider "MANUAL_BY_TOPIC" Liveliness
|
-- 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
|
-- Find Minimum Lease Duration
|
||||||
if (ENDPOINT_LEASE_DURATION(i) < ret) then
|
if (ENDPOINT_CONFIG(i).LEASE_DURATION < ret) then
|
||||||
ret := ENDPOINT_LEASE_DURATION(i);
|
ret := ENDPOINT_CONFIG(i).LEASE_DURATION;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -323,18 +286,26 @@ package body rtps_config_package is
|
|||||||
return ret;
|
return ret;
|
||||||
end function;
|
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')));
|
variable ret : ENDPOINT_STRING_TYPE := (others => (others => (others => '0')));
|
||||||
begin
|
begin
|
||||||
ret := (others => (others => (others => '0')));
|
|
||||||
for i in 0 to ret'length-1 loop
|
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;
|
end loop;
|
||||||
return ret;
|
return ret;
|
||||||
end function;
|
end function;
|
||||||
|
|
||||||
constant ENDPOINT_TOPIC : ENDPOINT_STRING_TYPE := convert_endpoint_string(ENDPOINT_TOPIC_STRING);
|
function convert_endpoint_type_string (config_array : CONFIG_ARRAY_TYPE) return ENDPOINT_STRING_TYPE is
|
||||||
constant ENDPOINT_TYPE : ENDPOINT_STRING_TYPE := convert_endpoint_string(ENDPOINT_TYPE_STRING);
|
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 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);
|
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);
|
ret.data(ind+len) := ENDPOINT_TYPE(i)(j);
|
||||||
end loop;
|
end loop;
|
||||||
-- DURABILITY
|
-- DURABILITY
|
||||||
if (ENDPOINT_DURABILITY_QOS(i) /= DEFAULT_DURABILITY_QOS) then
|
if (ENDPOINT_CONFIG(i).DURABILITY_QOS /= DEFAULT_DURABILITY_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_DURABILITY_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- DURABILITY SERVICE
|
-- 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
|
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_DURABILITY_SERVICE_HISTORY_DEPTH(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES 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_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
|
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
|
) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16));
|
ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
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;
|
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;
|
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;
|
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;
|
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;
|
end if;
|
||||||
-- PRESENTATION
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_PRESENTATION_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).PRESENTATION_QOS;
|
||||||
len := len + 1;
|
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;
|
end if;
|
||||||
-- DEADLINE
|
-- DEADLINE
|
||||||
if (ENDPOINT_DEADLINE_QOS(i) /= DEFAULT_DEADLINE_QOS) then
|
if (ENDPOINT_CONFIG(i).DEADLINE_QOS /= DEFAULT_DEADLINE_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- LATENCY_BUDGET
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- OWNERSHIP
|
-- OWNERSHIP
|
||||||
if (ENDPOINT_OWNERSHIP_QOS(i) /= DEFAULT_OWNERSHIP_QOS) then
|
if (ENDPOINT_CONFIG(i).OWNERSHIP_QOS /= DEFAULT_OWNERSHIP_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_OWNERSHIP_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- LIVELINESS
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_LIVELINESS_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).LIVELINESS_QOS;
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- TIME BASED FILTER
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_TIME_BASED_FILTER & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_TIME_BASED_FILTER & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- RELIABILITY
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_RELIABILITY_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).RELIABILITY_QOS;
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- DESTINATION ORDER
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_DESTINATION_ORDER_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- SENTINEL
|
-- SENTINEL
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
@ -626,112 +597,112 @@ package body rtps_config_package is
|
|||||||
ret.data(ind+len) := ENDPOINT_TYPE(i)(j);
|
ret.data(ind+len) := ENDPOINT_TYPE(i)(j);
|
||||||
end loop;
|
end loop;
|
||||||
-- DURABILITY
|
-- DURABILITY
|
||||||
if (ENDPOINT_DURABILITY_QOS(i) /= DEFAULT_DURABILITY_QOS) then
|
if (ENDPOINT_CONFIG(i).DURABILITY_QOS /= DEFAULT_DURABILITY_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_DURABILITY_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).DURABILITY_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- DURABILITY SERVICE
|
-- 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
|
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_DURABILITY_SERVICE_HISTORY_DEPTH(i) /= DEFAULT_DURABILITY_SERVICE_HISTORY_DEPTH or ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(i) /= DEFAULT_DURABILITY_SERVICE_MAX_SAMPLES 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_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
|
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
|
) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16));
|
ret.data(ind+len) := PID_DURABILITY_SERVICE & std_logic_vector(to_unsigned(28, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
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;
|
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;
|
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;
|
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;
|
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;
|
end if;
|
||||||
-- PRESENTATION
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_PRESENTATION_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).PRESENTATION_QOS;
|
||||||
len := len + 1;
|
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;
|
end if;
|
||||||
-- DEADLINE
|
-- DEADLINE
|
||||||
if (ENDPOINT_DEADLINE_QOS(i) /= DEFAULT_DEADLINE_QOS) then
|
if (ENDPOINT_CONFIG(i).DEADLINE_QOS /= DEFAULT_DEADLINE_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- LATENCY_BUDGET
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- OWNERSHIP
|
-- OWNERSHIP
|
||||||
if (ENDPOINT_OWNERSHIP_QOS(i) /= DEFAULT_OWNERSHIP_QOS) then
|
if (ENDPOINT_CONFIG(i).OWNERSHIP_QOS /= DEFAULT_OWNERSHIP_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_OWNERSHIP_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- OWNERSHIP STRENGTH
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_OWNERSHIP_STRENGTH_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).OWNERSHIP_STRENGTH_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- LIVELINESS
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ind+len) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_LIVELINESS_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).LIVELINESS_QOS;
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- RELIABILITY
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_RELIABILITY_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).RELIABILITY_QOS;
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- LIFESPAN
|
-- LIFESPAN
|
||||||
if (ENDPOINT_LIFESPAN_QOS(i) /= DEFAULT_LIFESPAN_QOS) then
|
if (ENDPOINT_CONFIG(i).LIFESPAN_QOS /= DEFAULT_LIFESPAN_QOS) then
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ind+len) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16));
|
||||||
len := len + 1;
|
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;
|
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;
|
end if;
|
||||||
-- DESTINATION ORDER
|
-- 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;
|
len := len + 1;
|
||||||
ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ind+len) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
||||||
len := len + 1;
|
len := len + 1;
|
||||||
ret.data(ind+len) := ENDPOINT_DESTINATION_ORDER_QOS(i);
|
ret.data(ind+len) := ENDPOINT_CONFIG(i).DESTINATION_ORDER_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- TODO: MAX_SIZE_SERIALIZED
|
-- TODO: MAX_SIZE_SERIALIZED
|
||||||
-- SENTINEL
|
-- SENTINEL
|
||||||
@ -773,90 +744,90 @@ package body rtps_config_package is
|
|||||||
ret.data(ret.length) := ENDPOINT_TOPIC(id)(j);
|
ret.data(ret.length) := ENDPOINT_TOPIC(id)(j);
|
||||||
end loop;
|
end loop;
|
||||||
-- DURABILITY
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ret.length) := PID_DURABILITY & std_logic_vector(to_unsigned(4, 16));
|
||||||
ret.length := ret.length + 1;
|
ret.length := ret.length + 1;
|
||||||
ret.data(ret.length) := ENDPOINT_DURABILITY_QOS(id);
|
ret.data(ret.length) := ENDPOINT_CONFIG(id).DURABILITY_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- PRESENTATION
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ret.length) := PID_PRESENTATION & std_logic_vector(to_unsigned(8, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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;
|
end if;
|
||||||
-- DEADLINE
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ret.length) := PID_DEADLINE & std_logic_vector(to_unsigned(8, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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;
|
end if;
|
||||||
-- LATENCY_BUDGET
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ret.length) := PID_LATENCY_BUDGET & std_logic_vector(to_unsigned(8, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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;
|
end if;
|
||||||
-- OWNERSHIP
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ret.length) := PID_OWNERSHIP & std_logic_vector(to_unsigned(4, 16));
|
||||||
ret.length := ret.length + 1;
|
ret.length := ret.length + 1;
|
||||||
ret.data(ret.length) := ENDPOINT_OWNERSHIP_QOS(id);
|
ret.data(ret.length) := ENDPOINT_CONFIG(id).OWNERSHIP_QOS;
|
||||||
end if;
|
end if;
|
||||||
-- OWNERSHIP STRENGTH
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ret.length) := PID_OWNERSHIP_STRENGTH & std_logic_vector(to_unsigned(4, 16));
|
||||||
ret.length := ret.length + 1;
|
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;
|
end if;
|
||||||
-- LIVELINESS
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ret.length) := PID_LIVELINESS & std_logic_vector(to_unsigned(12, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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.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;
|
end if;
|
||||||
-- RELIABILITY
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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.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;
|
end if;
|
||||||
-- LIFESPAN
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16));
|
ret.data(ret.length) := PID_LIFESPAN & std_logic_vector(to_unsigned(8, 16));
|
||||||
ret.length := ret.length + 1;
|
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.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;
|
end if;
|
||||||
-- DESTINATION ORDER
|
-- 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.length := ret.length + 1;
|
||||||
ret.data(ret.length) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
ret.data(ret.length) := PID_DESTINATION_ORDER & std_logic_vector(to_unsigned(4, 16));
|
||||||
ret.length := ret.length + 1;
|
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;
|
end if;
|
||||||
-- SENTINEL
|
-- SENTINEL
|
||||||
ret.length := ret.length + 1;
|
ret.length := ret.length + 1;
|
||||||
@ -1096,68 +1067,68 @@ package body rtps_config_package is
|
|||||||
|
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
for i in 0 to NUM_ENDPOINTS-1 loop
|
||||||
-- DURABILITY
|
-- 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';
|
ret.DURABILITY_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
-- PRESENTATION
|
-- 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';
|
ret.PRESENTATION_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
if (is_reader) then
|
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';
|
ret.PRESENTATION_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.PRESENTATION_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
else
|
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';
|
ret.PRESENTATION_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.PRESENTATION_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
-- DEADLINE
|
-- 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';
|
ret.DEADLINE_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.DEADLINE_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
-- LATENCY_BUDGET
|
-- 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';
|
ret.LATENCY_BUDGET_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.LATENCY_BUDGET_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
-- OWNERSHIP
|
-- 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';
|
ret.OWNERSHIP_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
-- LIVELINESS
|
-- 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';
|
ret.LIVELINESS_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.LIVELINESS_QOS(i) := '0';
|
||||||
end if;
|
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';
|
ret.LIVELINESS_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
-- RELIABILITY
|
-- RELIABILITY
|
||||||
if (is_reader) then
|
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';
|
ret.RELIABILITY_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
else
|
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';
|
ret.RELIABILITY_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
-- DESTINATION_ORDER
|
-- 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';
|
ret.DESTINATION_ORDER_QOS(i) := '0';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
@ -1171,7 +1142,7 @@ package body rtps_config_package is
|
|||||||
variable ret : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
|
variable ret : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
|
||||||
begin
|
begin
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
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';
|
ret(i) := '1';
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
|||||||
@ -101,6 +101,7 @@ package rtps_package is
|
|||||||
|
|
||||||
-- Helper Function
|
-- Helper Function
|
||||||
function gen_duration(s,ns : integer) return DURATION_TYPE;
|
function gen_duration(s,ns : integer) return DURATION_TYPE;
|
||||||
|
function gen_duration(t : time) return DURATION_TYPE;
|
||||||
|
|
||||||
-- *PREDEFINED VALUES*
|
-- *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)
|
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);
|
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_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 : GUID_TYPE) return KEY_HASH_TYPE;
|
||||||
function to_key_hash(A : std_logic_vector) 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;
|
return ret;
|
||||||
end function;
|
end function;
|
||||||
|
|
||||||
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE := gen_duration(0,100 * (10**6)); -- 100 ms
|
function gen_duration(t : time) return DURATION_TYPE is
|
||||||
constant DEFAULT_PARTICIPANT_LEASE_DURATION : DURATION_TYPE := gen_duration(100, 0); -- 100 s
|
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
|
function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned is
|
||||||
variable ret : unsigned(63 downto 0) := (others => '0');
|
variable ret : unsigned(63 downto 0) := (others => '0');
|
||||||
@ -776,4 +862,98 @@ package body rtps_package is
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
end function;
|
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;
|
end package body;
|
||||||
|
|||||||
@ -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)]
|
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
||||||
--ID : ID_TYPE := 0;
|
--ID : ID_TYPE := 0;
|
||||||
ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0);-- := ENTITYID(ID);
|
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);
|
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_LIVELINESS_QOS(ID);
|
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_DURABILITY_QOS(ID);
|
DURABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DURABILITY_QOS;
|
||||||
HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_RESPONSE_DELAY(ID);
|
HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_RESPONSE_DELAY;
|
||||||
HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(ID);
|
HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_SUPPRESSION_DELAY;
|
||||||
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID);
|
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION;
|
||||||
WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID);
|
WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY;
|
||||||
MAX_REMOTE_ENDPOINTS : natural := 50
|
MAX_REMOTE_ENDPOINTS : natural := 50
|
||||||
);
|
);
|
||||||
port (
|
port (
|
||||||
|
|||||||
@ -3003,27 +3003,27 @@ package body rtps_test_package is
|
|||||||
ret.reader := TRUE when (id < NUM_READERS) else FALSE;
|
ret.reader := TRUE when (id < NUM_READERS) else FALSE;
|
||||||
ret.topic_name := ENDPOINT_TOPIC(id);
|
ret.topic_name := ENDPOINT_TOPIC(id);
|
||||||
ret.type_name := ENDPOINT_TYPE(id);
|
ret.type_name := ENDPOINT_TYPE(id);
|
||||||
ret.durability := ENDPOINT_DURABILITY_QOS(id);
|
ret.durability := ENDPOINT_CONFIG(id).DURABILITY_QOS;
|
||||||
ret.durability_service_cleanup_delay := ENDPOINT_DURABILITY_SERVICE_CLEANUP_DELAY(id);
|
ret.durability_service_cleanup_delay := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_CLEANUP_DELAY;
|
||||||
ret.durability_service_history := ENDPOINT_DURABILITY_SERVICE_HISTORY(id);
|
ret.durability_service_history := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_HISTORY;
|
||||||
ret.durability_service_history_depth := ENDPOINT_DURABILITY_SERVICE_HISTORY_DEPTH(id);
|
ret.durability_service_history_depth := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_HISTORY_DEPTH;
|
||||||
ret.durability_service_max_samples := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES(id);
|
ret.durability_service_max_samples := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_SAMPLES;
|
||||||
ret.durability_service_max_instances := ENDPOINT_DURABILITY_SERVICE_MAX_INSTANCES(id);
|
ret.durability_service_max_instances := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_INSTANCES;
|
||||||
ret.durability_service_max_samples_per_instances := ENDPOINT_DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE(id);
|
ret.durability_service_max_samples_per_instances := ENDPOINT_CONFIG(id).DURABILITY_SERVICE_MAX_SAMPLES_PER_INSTANCE;
|
||||||
ret.presentation := ENDPOINT_PRESENTATION_QOS(id);
|
ret.presentation := ENDPOINT_CONFIG(id).PRESENTATION_QOS;
|
||||||
ret.coherent_access(0) := boolean_to_std_logic(ENDPOINT_COHERENT_ACCESS(id));
|
ret.coherent_access(0) := boolean_to_std_logic(ENDPOINT_CONFIG(id).COHERENT_ACCESS);
|
||||||
ret.ordered_access(0) := boolean_to_std_logic(ENDPOINT_ORDERED_ACCESS(id));
|
ret.ordered_access(0) := boolean_to_std_logic(ENDPOINT_CONFIG(id).ORDERED_ACCESS);
|
||||||
ret.deadline := ENDPOINT_DEADLINE_QOS(id);
|
ret.deadline := ENDPOINT_CONFIG(id).DEADLINE_QOS;
|
||||||
ret.latency_budget := ENDPOINT_LATENCY_BUDGET_QOS(id);
|
ret.latency_budget := ENDPOINT_CONFIG(id).LATENCY_BUDGET_QOS;
|
||||||
ret.ownership := ENDPOINT_OWNERSHIP_QOS(id);
|
ret.ownership := ENDPOINT_CONFIG(id).OWNERSHIP_QOS;
|
||||||
ret.ownership_strength := ENDPOINT_OWNERSHIP_STRENGTH_QOS(id);
|
ret.ownership_strength := ENDPOINT_CONFIG(id).OWNERSHIP_STRENGTH_QOS;
|
||||||
ret.liveliness := ENDPOINT_LIVELINESS_QOS(id);
|
ret.liveliness := ENDPOINT_CONFIG(id).LIVELINESS_QOS;
|
||||||
ret.leaseDuration := ENDPOINT_LEASE_DURATION(id);
|
ret.leaseDuration := ENDPOINT_CONFIG(id).LEASE_DURATION;
|
||||||
ret.time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(id);
|
ret.time_based_filter := ENDPOINT_CONFIG(id).TIME_BASED_FILTER_QOS;
|
||||||
ret.reliability := ENDPOINT_RELIABILITY_QOS(id);
|
ret.reliability := ENDPOINT_CONFIG(id).RELIABILITY_QOS;
|
||||||
ret.max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(id);
|
ret.max_blocking_time := ENDPOINT_CONFIG(id).MAX_BLOCKING_TIME;
|
||||||
ret.lifespan := ENDPOINT_LIFESPAN_QOS(id);
|
ret.lifespan := ENDPOINT_CONFIG(id).LIFESPAN_QOS;
|
||||||
ret.destination_order := ENDPOINT_DESTINATION_ORDER_QOS(id);
|
ret.destination_order := ENDPOINT_CONFIG(id).DESTINATION_ORDER_QOS;
|
||||||
ret.expectsInlineQoS(0) := DEFAULT_EXPECTS_INLINE_QOS when (id < NUM_READERS) else '0';
|
ret.expectsInlineQoS(0) := DEFAULT_EXPECTS_INLINE_QOS when (id < NUM_READERS) else '0';
|
||||||
ret.participant := THIS_PARTICIPANT_DATA;
|
ret.participant := THIS_PARTICIPANT_DATA;
|
||||||
ret.entityId := ENTITYID(id);
|
ret.entityId := ENTITYID(id);
|
||||||
|
|||||||
@ -16,17 +16,17 @@ entity rtps_writer is
|
|||||||
generic (
|
generic (
|
||||||
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
-- XXX: Quartus Limitation [VHDL error at <location>: generic "<name>" cannot be used in its own interface list (ID: 10556)]
|
||||||
--ID : ID_TYPE := 0;
|
--ID : ID_TYPE := 0;
|
||||||
RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_RELIABILITY_QOS(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_LIVELINESS_QOS(ID);
|
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_DURABILITY_QOS(ID);
|
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_DESTINATION_ORDER_QOS(ID);
|
DESTINATION_ORDER_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);-- := ENDPOINT_CONFIG(ID).DESTINATION_ORDER_QOS;
|
||||||
ACKNACK_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_ACKNACK_RESPONSE_DELAY(ID);
|
ACKNACK_RESPONSE_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).ACKNACK_RESPONSE_DELAY;
|
||||||
ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_ACKNACK_SUPPRESSION_DELAY(ID);
|
ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).ACKNACK_SUPPRESSION_DELAY;
|
||||||
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_LEASE_DURATION(ID);
|
LEASE_DURATION : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).LEASE_DURATION;
|
||||||
HEARTBEAT_PERIOD : DURATION_TYPE;-- := ENDPOINT_HEARTBEAT_PERIOD(ID);
|
HEARTBEAT_PERIOD : DURATION_TYPE;-- := ENDPOINT_CONFIG(ID).HEARTBEAT_PERIOD;
|
||||||
ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0);-- := ENTITYID(ID);
|
ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0);-- := ENTITYID(ID);
|
||||||
WITH_KEY : boolean;-- := ENDPOINT_WITH_KEY(ID);
|
WITH_KEY : boolean;-- := ENDPOINT_CONFIG(ID).WITH_KEY;
|
||||||
PUSH_MODE : boolean;-- := ENDPOINT_PUSH_MODE(ID);
|
PUSH_MODE : boolean;-- := ENDPOINT_CONFIG(ID).PUSH_MODE;
|
||||||
INLINE_QOS : OUTPUT_DATA_TYPE;-- := gen_inline_qos(ID);
|
INLINE_QOS : OUTPUT_DATA_TYPE;-- := gen_inline_qos(ID);
|
||||||
MAX_REMOTE_ENDPOINTS : natural := 50
|
MAX_REMOTE_ENDPOINTS : natural := 50
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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_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_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
|
||||||
set_global_assignment -name PARTITION_COLOR 16764057 -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 VHDL_FILE ../test6.vhd -hdl_version VHDL_2008
|
||||||
set_global_assignment -name SDC_FILE ../top.sdc
|
set_global_assignment -name SDC_FILE ../top.sdc
|
||||||
set_global_assignment -name VHDL_FILE ../test_top.vhd -hdl_version VHDL_2008
|
set_global_assignment -name VHDL_FILE ../test_top.vhd -hdl_version VHDL_2008
|
||||||
@ -98,3 +97,4 @@ set_global_assignment -name VHDL_FILE ../../src/rtps_config_package.vhd -hdl_ver
|
|||||||
set_global_assignment -name VHDL_FILE ../syn_config.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/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
|
||||||
@ -70,18 +70,18 @@ begin
|
|||||||
if_gen : if (NUM_READERS > 0) generate
|
if_gen : if (NUM_READERS > 0) generate
|
||||||
syn_inst : entity work.dds_reader(arch)
|
syn_inst : entity work.dds_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
TIME_BASED_FILTER_QOS => ENDPOINT_TIME_BASED_FILTER_QOS(0),
|
TIME_BASED_FILTER_QOS => ENDPOINT_CONFIG(0).TIME_BASED_FILTER_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(0),
|
DEADLINE_QOS => ENDPOINT_CONFIG(0).DEADLINE_QOS,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(0),
|
MAX_INSTANCES => ENDPOINT_CONFIG(0).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(0),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(0).MAX_SAMPLES_PER_INSTANCE,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(0),
|
MAX_SAMPLES => ENDPOINT_CONFIG(0).MAX_SAMPLES,
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(0),
|
HISTORY_QOS => ENDPOINT_CONFIG(0).HISTORY_QOS,
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS,
|
||||||
PRESENTATION_QOS => ENDPOINT_PRESENTATION_QOS(0),
|
PRESENTATION_QOS => ENDPOINT_CONFIG(0).PRESENTATION_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(0),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(0).DESTINATION_ORDER_QOS,
|
||||||
COHERENT_ACCESS => ENDPOINT_COHERENT_ACCESS(0),
|
COHERENT_ACCESS => ENDPOINT_CONFIG(0).COHERENT_ACCESS,
|
||||||
ORDERED_ACCESS => ENDPOINT_ORDERED_ACCESS(0),
|
ORDERED_ACCESS => ENDPOINT_CONFIG(0).ORDERED_ACCESS,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0),
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -65,14 +65,14 @@ begin
|
|||||||
if_gen : if (NUM_WRITERS > 0) generate
|
if_gen : if (NUM_WRITERS > 0) generate
|
||||||
syn_inst : entity work.dds_writer(arch)
|
syn_inst : entity work.dds_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
HISTORY_QOS => ENDPOINT_HISTORY_QOS(NUM_READERS),
|
HISTORY_QOS => ENDPOINT_CONFIG(NUM_READERS).HISTORY_QOS,
|
||||||
DEADLINE_QOS => ENDPOINT_DEADLINE_QOS(NUM_READERS),
|
DEADLINE_QOS => ENDPOINT_CONFIG(NUM_READERS).DEADLINE_QOS,
|
||||||
LIFESPAN_QOS => ENDPOINT_LIFESPAN_QOS(NUM_READERS),
|
LIFESPAN_QOS => ENDPOINT_CONFIG(NUM_READERS).LIFESPAN_QOS,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(NUM_READERS),
|
LEASE_DURATION => ENDPOINT_CONFIG(NUM_READERS).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(NUM_READERS),
|
WITH_KEY => ENDPOINT_CONFIG(NUM_READERS).WITH_KEY,
|
||||||
MAX_SAMPLES => ENDPOINT_MAX_SAMPLES(NUM_READERS),
|
MAX_SAMPLES => ENDPOINT_CONFIG(NUM_READERS).MAX_SAMPLES,
|
||||||
MAX_INSTANCES => ENDPOINT_MAX_INSTANCES(NUM_READERS),
|
MAX_INSTANCES => ENDPOINT_CONFIG(NUM_READERS).MAX_INSTANCES,
|
||||||
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_MAX_SAMPLES_PER_INSTANCE(NUM_READERS),
|
MAX_SAMPLES_PER_INSTANCE => ENDPOINT_CONFIG(NUM_READERS).MAX_SAMPLES_PER_INSTANCE,
|
||||||
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -51,13 +51,13 @@ begin
|
|||||||
syn_inst : entity work.rtps_reader(arch)
|
syn_inst : entity work.rtps_reader(arch)
|
||||||
generic map (
|
generic map (
|
||||||
ENTITYID => ENTITYID(0),
|
ENTITYID => ENTITYID(0),
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(0),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(0).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(0),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(0).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(0),
|
DURABILITY_QOS => ENDPOINT_CONFIG(0).DURABILITY_QOS,
|
||||||
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_HEARTBEAT_RESPONSE_DELAY(0),
|
HEARTBEAT_RESPONSE_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_RESPONSE_DELAY,
|
||||||
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_HEARTBEAT_SUPPRESSION_DELAY(0),
|
HEARTBEAT_SUPPRESSION_DELAY => ENDPOINT_CONFIG(0).HEARTBEAT_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(0),
|
LEASE_DURATION => ENDPOINT_CONFIG(0).LEASE_DURATION,
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(0)
|
WITH_KEY => ENDPOINT_CONFIG(0).WITH_KEY
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
clk => clk,
|
clk => clk,
|
||||||
|
|||||||
@ -60,17 +60,17 @@ begin
|
|||||||
if_gen : if (NUM_WRITERS > 0) generate
|
if_gen : if (NUM_WRITERS > 0) generate
|
||||||
syn_inst : entity work.rtps_writer(arch)
|
syn_inst : entity work.rtps_writer(arch)
|
||||||
generic map (
|
generic map (
|
||||||
RELIABILITY_QOS => ENDPOINT_RELIABILITY_QOS(NUM_READERS),
|
RELIABILITY_QOS => ENDPOINT_CONFIG(NUM_READERS).RELIABILITY_QOS,
|
||||||
LIVELINESS_QOS => ENDPOINT_LIVELINESS_QOS(NUM_READERS),
|
LIVELINESS_QOS => ENDPOINT_CONFIG(NUM_READERS).LIVELINESS_QOS,
|
||||||
DURABILITY_QOS => ENDPOINT_DURABILITY_QOS(NUM_READERS),
|
DURABILITY_QOS => ENDPOINT_CONFIG(NUM_READERS).DURABILITY_QOS,
|
||||||
DESTINATION_ORDER_QOS => ENDPOINT_DESTINATION_ORDER_QOS(NUM_READERS),
|
DESTINATION_ORDER_QOS => ENDPOINT_CONFIG(NUM_READERS).DESTINATION_ORDER_QOS,
|
||||||
ACKNACK_RESPONSE_DELAY => ENDPOINT_ACKNACK_RESPONSE_DELAY(NUM_READERS),
|
ACKNACK_RESPONSE_DELAY => ENDPOINT_CONFIG(NUM_READERS).ACKNACK_RESPONSE_DELAY,
|
||||||
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_ACKNACK_SUPPRESSION_DELAY(NUM_READERS),
|
ACKNACK_SUPPRESSION_DELAY => ENDPOINT_CONFIG(NUM_READERS).ACKNACK_SUPPRESSION_DELAY,
|
||||||
LEASE_DURATION => ENDPOINT_LEASE_DURATION(NUM_READERS),
|
LEASE_DURATION => ENDPOINT_CONFIG(NUM_READERS).LEASE_DURATION,
|
||||||
HEARTBEAT_PERIOD => ENDPOINT_HEARTBEAT_PERIOD(NUM_READERS),
|
HEARTBEAT_PERIOD => ENDPOINT_CONFIG(NUM_READERS).HEARTBEAT_PERIOD,
|
||||||
ENTITYID => ENTITYID(NUM_READERS),
|
ENTITYID => ENTITYID(NUM_READERS),
|
||||||
WITH_KEY => ENDPOINT_WITH_KEY(NUM_READERS),
|
WITH_KEY => ENDPOINT_CONFIG(NUM_READERS).WITH_KEY,
|
||||||
PUSH_MODE => ENDPOINT_PUSH_MODE(NUM_READERS),
|
PUSH_MODE => ENDPOINT_CONFIG(NUM_READERS).PUSH_MODE,
|
||||||
INLINE_QOS => gen_inline_qos(NUM_READERS)
|
INLINE_QOS => gen_inline_qos(NUM_READERS)
|
||||||
)
|
)
|
||||||
port map (
|
port map (
|
||||||
|
|||||||
@ -45,86 +45,51 @@ package user_config is
|
|||||||
-- Domain ID
|
-- Domain ID
|
||||||
constant USER_DOMAIN_ID : natural := 1;
|
constant USER_DOMAIN_ID : natural := 1;
|
||||||
-- Domain TAG
|
-- 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*
|
||||||
-- Timing Characteristics for Participant
|
-- 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;
|
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.
|
-- 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
|
-- Timing Characteristics for built-in Endpoints
|
||||||
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1,0); -- 1 s
|
constant PARTICIPANT_HEARTBEAT_PERIOD : DURATION_TYPE := gen_duration(1 sec);
|
||||||
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,500*(10**6)); -- 500 ms
|
constant PARTICIPANT_HEARTBEAT_RESPONSE_DELAY : DURATION_TYPE := gen_duration(500 ms);
|
||||||
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0);
|
constant PARTICIPANT_HEARTBEAT_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 ms);
|
||||||
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(0,200*(10**6)); -- 200 ms
|
constant PARTICIPANT_ACKNACK_RESPONSE_DELAY : DURATION_TYPE := gen_duration(200 ms);
|
||||||
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0,0);
|
constant PARTICIPANT_ACKNACK_SUPPRESSION_DELAY : DURATION_TYPE := gen_duration(0 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,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***
|
-- *ENDPOINT CONFIG*
|
||||||
-- Array mapping DURABILITY QoS to Endpoints
|
constant ENDPOINT_CONFIG : CONFIG_ARRAY_TYPE(0 to NUM_ENDPOINTS-1); -- Deferred to Package Body
|
||||||
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);
|
|
||||||
|
|
||||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||||
constant SIMULATION_FLAG : boolean := FALSE;
|
constant SIMULATION_FLAG : boolean := FALSE;
|
||||||
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.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;
|
||||||
Loading…
Reference in New Issue
Block a user