Blind implementation of READ/TAKE DDS READER operations
Finalized DDS Reader interface. Implemented read/take, read_next_sample/take_next_sample, read_instance/take_instance, read_next_instance/take_next_instance operations. Instance Get operations were made generic to allow returning 2 variants of instance data.
This commit is contained in:
parent
c3b656c654
commit
164bd508c1
13
src/REF.txt
13
src/REF.txt
@ -459,14 +459,15 @@ STATUS INFO
|
||||
-----------
|
||||
31............24..............16..............8...............0
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
+-----------------------------------------------------+-+-+-+-+
|
||||
| UNUSED |V|L|W|D|
|
||||
+-----------------------------------------------------+-+-+-+-+
|
||||
+---------------------------------------------------+-+-+-+-+-+
|
||||
| UNUSED |M|V|L|W|D|
|
||||
+---------------------------------------------------+-+-+-+-+-+
|
||||
|
||||
D...NOT_ALIVE_DISPOSED
|
||||
W...NOT_ALIVE_NO_WRITERS
|
||||
L...LIVELINESS FLAG
|
||||
V...VIEW STATE
|
||||
M...MARK
|
||||
|
||||
|
||||
OUTPUT DATA
|
||||
@ -608,6 +609,12 @@ The act of reading a sample sets its sample_state to READ. If the sample belongs
|
||||
generation of the instance, it will also set the view_state of the instance to NOT_NEW. It will not
|
||||
affect the instance_state of the instance.
|
||||
|
||||
https://community.rti.com/static/documentation/connext-dds/5.2.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/Content/UsersManual/DESTINATION_ORDER_QosPolicy.htm#sending_2410472787_644578
|
||||
Data will be delivered by a DataReader in the order in which it was sent. If data arrives on the network
|
||||
with a source timestamp earlier than the source timestamp of the last data delivered, the new data will
|
||||
be dropped. This ordering therefore works best when system clocks are relatively synchronized among
|
||||
writing machines.
|
||||
|
||||
INVALIDATION
|
||||
============
|
||||
|
||||
|
||||
78
src/TODO.txt
78
src/TODO.txt
@ -63,14 +63,11 @@
|
||||
* What happens if we get a sample with a source timestamp earlier than the last sample that was accessed by the DataReader when using DESTINATION ORDER BY_SOURCE_TIMESTAMP? Is the smaple dropped?
|
||||
* The spec does not define the serialized Key (KEY=1 DATA MESSAGE)
|
||||
- fast-rtps assumes it is the Key Hash
|
||||
-
|
||||
* Currently the builtin-endpoint does only acknowledge SN, but does not negatively acknowledge any SN (Bitamp is always empty).
|
||||
A writer usually responds with repqirs only to negative acknowledgements.
|
||||
* Currently a RTPS Writer with DURABILITY TARNSIENT_LOCAL does send historical data to all matched readrs, not depensing if they are VOLATILE or TRANSIENT_LOCAL.
|
||||
* Currently a RTPS Writer with DURABILITY TARNSIENT_LOCAL does send historical data to all matched readers, not depending if they are VOLATILE or TRANSIENT_LOCAL.
|
||||
* Assert Heartbeat period > Heartbeat Suppression Period
|
||||
* Can I request (NACK) SNs that were NOT announced by the writer (> last_sn in Heartbeat)?
|
||||
* As it currently works, if a new sample is received and the QOS is not KEEP_ALL/RELIABLE, the oldest sample is removed.
|
||||
In case of DESTINATION_ORDER = BY_SOURCE_TIMESTAMP it could happen that we effectively removed a sample that had a source timestamp later than the one we received.
|
||||
|
||||
* Fast-RTPS doen not follow DDSI-RTPS Specification
|
||||
- Open Github Issue
|
||||
@ -149,20 +146,23 @@ DESIGN DECISIONS
|
||||
Use the lowest bit of the Heartbeat/Acknack Deadline stored in the Participant Data to differentiate
|
||||
between Delay and Suppression. This reduces the resolution from 0.23 ns to 0.47 ns
|
||||
|
||||
* Originally we stored the mask of local matching endpoints in the memory frame of the remote endpoint in order
|
||||
to be able to send MATCH frames only to new matches, and UNMATCH frames only to previously matched local endpoints.
|
||||
This decision was reverted, and we just sent MATCH frames to the currently matched local endpoints (non depending on if they are already matched)
|
||||
and UNMATCH frames to the rest of the local endpoints (non depending on if they were previously matched).
|
||||
So we basically push the responsibility to the local endpoints, which have to handle this situations accordingly.
|
||||
Since META traffic is not supposed to be generated as often , this should not produce any significant overhead.
|
||||
As optimization, on new matched remote endpoints UNMATCH frames can be ignored.
|
||||
* Originally we stored the mask of local matching endpoints in the memory frame of the remote endpoint
|
||||
in order to be able to send MATCH frames only to new matches, and UNMATCH frames only to previously
|
||||
matched local endpoints. This decision was reverted, and we just sent MATCH frames to the currently
|
||||
matched local endpoints (non depending on if they are already matched) and UNMATCH frames to the
|
||||
rest of the local endpoints (non depending on if they were previously matched).
|
||||
So we basically push the responsibility to the local endpoints, which have to handle this situations
|
||||
accordingly. Since META traffic is not supposed to be generated as often, this should not produce
|
||||
any significant overhead. As optimization, on new matched remote endpoints UNMATCH frames can be
|
||||
ignored.
|
||||
|
||||
* The HEARTBEATs are sent out together with the liveliness assertions. This adds a 96-Byte overhead to the output RTPS Message.
|
||||
This was done to prevent having to loop through the memory to find remote participant destination more than once.
|
||||
* The HEARTBEATs are sent out together with the liveliness assertions. This adds a 96-Byte overhead
|
||||
to the output RTPS Message. This was done to prevent having to loop through the memory to find
|
||||
remote participant destination more than once.
|
||||
|
||||
* The Publisher, Subscriber, and Message Data is written on separate RTPS Messages, even though they are
|
||||
sent simutanously. This decision was made to support as many local Endpoints as possible. We could
|
||||
make a compile-time if check and sent them in the same RTPS Message/UDP Packet, but the overhead is
|
||||
make a compile-time check and sent them in the same RTPS Message/UDP Packet, but the overhead is
|
||||
quite small and not worth the hassle.
|
||||
|
||||
* Even though the Reader does not need to keep track of received SN with respect to each Writer with
|
||||
@ -176,29 +176,31 @@ DESIGN DECISIONS
|
||||
In order to acoomodate for that, we could store the lowest (and possibly highest) SN of a requested
|
||||
lost SN and always send ALL GAPs in that range.
|
||||
|
||||
* The meta_data (sample info) of a cache change is fixed size, and a cache change may be connected to data (payload),
|
||||
which may be variable in size. For this reason, we store the cache change and payload in separate memories.
|
||||
The payload size may either be fixed (in which case the memory frame sizes are adjusted according to that),
|
||||
or may be variable, in which case the payload is stored in a linked list of predefined sized memory frames.
|
||||
The first word of a payload contains the address of the next linked memory frame. If this is the last frame
|
||||
(or if the payload is static and there are no linked frames), the address is MAX_ADDRESS.
|
||||
The last bit of this address is the "occupied" bit. This bit signifies if the memory frame is used or free,
|
||||
and is used for the insert operation to find a new empty slot. This in effect means that all frame sizes
|
||||
have to be a multiple of 2 (all frame addresses have to be aligned to 2).
|
||||
* The meta_data (sample info) of a cache change is fixed size, and a cache change may be connected to
|
||||
data (payload), which may be variable in size. For this reason, we store the cache change and
|
||||
payload in separate memories. The payload size may either be fixed (in which case the memory frame
|
||||
sizes are adjusted according to that), or may be variable, in which case the payload is stored in
|
||||
a linked list of predefined sized memory frames. The first word of a payload contains the address
|
||||
of the next linked memory frame. If this is the last frame (or if the payload is static and there
|
||||
are no linked frames), the address is MAX_ADDRESS. The last bit of this address is the "occupied"
|
||||
bit. This bit signifies if the memory frame is used or free, and is used for the insert operation
|
||||
to find a new empty slot. This in effect means that all frame sizes have to be a multiple of 2
|
||||
(all frame addresses have to be aligned to 2).
|
||||
|
||||
* !REJECTED! The History Cache (HC) is the interface between RTPS and DDS. The History Cache contains the Sample Info
|
||||
and Payload memories. The HC has two input "sides", one is connected to the DDS and one to the RTPS entity.
|
||||
Housing the memories inside the HC entity and abstracting the direct memory address via opcode requests
|
||||
allows the memory interface to be replaced in future (e.g. AXI Lite).
|
||||
Since all memory operations are handled by the same entity, this allows some state keeping to improve
|
||||
memory bandwidth. More specifically the "linked list" paradigm can be extended to also reference empty
|
||||
slots (and next unread slots), to allow selecting empty slots without iterating through the whole memory.
|
||||
Originally the memory was to be implemented in a true dual port fashion, and two seperate procoesses
|
||||
would each satisfy the requests from one input side. This would allow concurrent RTPS and DDS requests
|
||||
to be handled. The write concurrency (add and remove change) does not allow for state keeping (first
|
||||
empty slot address), since it is reset by the "adding" side, by set by the "removing" side.
|
||||
Because of this, it was decided against concurrent input handling in light of the fact that the history
|
||||
cache will be most commonly quite large in size, and iterating through all
|
||||
* !REJECTED! The History Cache (HC) is the interface between RTPS and DDS. The History Cache contains
|
||||
the Sample Info and Payload memories. The HC has two input "sides", one is connected to the DDS
|
||||
and one to the RTPS entity. Housing the memories inside the HC entity and abstracting the direct
|
||||
memory address via opcode requests allows the memory interface to be replaced in future (e.g. AXI
|
||||
Lite). Since all memory operations are handled by the same entity, this allows some state keeping
|
||||
to improve memory bandwidth. More specifically the "linked list" paradigm can be extended to also
|
||||
reference empty slots (and next unread slots), to allow selecting empty slots without iterating
|
||||
through the whole memory. Originally the memory was to be implemented in a true dual port fashion,
|
||||
and two seperate procoesses would each satisfy the requests from one input side. This would allow
|
||||
concurrent RTPS and DDS requests to be handled. The write concurrency (add and remove change) does
|
||||
not allow for state keeping (first empty slot address), since it is reset by the "adding" side, by
|
||||
set by the "removing" side. Because of this, it was decided against concurrent input handling in
|
||||
light of the fact that the history cache will be most commonly quite large in size, and iterating
|
||||
through all...
|
||||
|
||||
* Since most of the DDS QoS need information that is directly available to the History Cache (HC),
|
||||
it makes sense to integrate most of the DDS functionality directly into the HC to save up space
|
||||
@ -222,10 +224,8 @@ PROTOCOL UNCOMPLIANCE
|
||||
-> No validity check
|
||||
* Inline QoS validated in Endpoint
|
||||
-> Cannot invalidate Rest of Message/Packet
|
||||
* RESOURCE_LIMITS applies also to "empty" samples (Samples with no valid data).
|
||||
|
||||
-- Input FIFO Guard
|
||||
-- Output FIFO Guard
|
||||
-- Deferred to package Body
|
||||
|
||||
RTPS ENDPOINT
|
||||
=============
|
||||
|
||||
1413
src/dds_endpoint.vhd
1413
src/dds_endpoint.vhd
File diff suppressed because it is too large
Load Diff
@ -53,6 +53,8 @@ package rtps_config_package is
|
||||
type KEY_GENERATOR_OPCODE_TYPE is (NOP, WRITE_PAYLOAD, READ_KEY, READ_SIZE);
|
||||
type HISTORY_CACHE_RESPOSNE_TYPE is (UNDEFINED, ACK, ACCEPTED, REJECTED);
|
||||
type INSTANCE_STATE_TYPE is (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS);
|
||||
type VIEW_STATE_TYPE is (NEW_INSTANCE, NOT_NEW_INSTANCE);
|
||||
type SAMPLE_STATE is (READ, NOT_READ);
|
||||
|
||||
-- Sample Status Info Flags
|
||||
constant DISPOSED_FLAG : natural := 0;
|
||||
@ -66,6 +68,7 @@ package rtps_config_package is
|
||||
constant NOT_ALIVE_NO_WRITERS_FLAG : natural := 1;
|
||||
constant LIVELINESS_FLAG : natural := 2;
|
||||
constant VIEW_FLAG : natural := 3;
|
||||
constant MARK_FLAG : natural := 4;
|
||||
|
||||
-- Marks the Reader Endpoint in the Endpoint Array
|
||||
constant ENDPOINT_READERS : std_logic_vector(0 to NUM_ENDPOINTS-1) := (0 to NUM_READERS-1 => '1', others => '0');
|
||||
|
||||
@ -49,6 +49,35 @@ package rtps_package is
|
||||
constant MAX_BITMAP_WIDTH : natural := 256;
|
||||
constant KEY_HASH_WIDTH : natural := 128;
|
||||
constant STATUS_INFO_WIDTH : natural := 32;
|
||||
-- DDS
|
||||
constant RETURN_CODE_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant STATUS_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant SAMPLE_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant VIEW_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant INSTANCE_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant QOS_POLICY_ID_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant MAX_SAMPLES_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
|
||||
constant DISPOSED_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant NO_WRITERS_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant SAMPLE_RANK_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant GENERATION_RANK_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant ABSOLUTE_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
|
||||
constant INCONSISTENT_TOPIC_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant SAMPLE_LOST_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant SAMPLE_REJECTED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant LIVELINESS_LOST_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant LIVELINESS_CHANGED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant OFFERED_DEADLINE_MISSED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant REQUESTED_DEADLINE_MISSED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant OFFERED_INCOMPATIBLE_QOS_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant REQUESTED_INCOMPATIBLE_QOS_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant PUBLICATION_MATCHED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
constant SUBSCRIPTION_MATCHED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||
|
||||
|
||||
|
||||
|
||||
-- *TYPES DEFINITION*
|
||||
-- Generic Types
|
||||
@ -62,6 +91,9 @@ package rtps_package is
|
||||
type GUID_TYPE is array (0 to (GUID_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
type BITMAP_TYPE is array (0 to (MAX_BITMAP_WIDTH/WORD_WIDTH)-1) of std_logic_vector(0 to WORD_WIDTH-1);
|
||||
type KEY_HASH_TYPE is array (0 to (KEY_HASH_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||
-- DDS
|
||||
subtype INSTANCE_HANDLE_TYPE is KEY_HASH_TYPE;
|
||||
subtype PUBLICATION_HANDLE_TYPE is GUID_TYPE;
|
||||
|
||||
-- Helper Function
|
||||
function gen_duration(s,ns : integer) return DURATION_TYPE;
|
||||
@ -86,6 +118,86 @@ package rtps_package is
|
||||
constant UDP_PORT_INVALID : std_logic_vector(UDP_PORT_WIDTH-1 downto 0) := (others => '0');
|
||||
constant IPv4_ADDRESS_INVALID : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := (others => '0');
|
||||
constant LENGTH_UNLIMITED : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := std_logic_vector(to_signed(-1,CDR_LONG_WIDTH));
|
||||
-- DDS
|
||||
constant HANDLE_NIL : INSTANCE_HANDLE_TYPE := (others => (others => '0'));
|
||||
|
||||
-- *RETURN CODES* (DDS)
|
||||
constant RETCODE_OK : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_ERROR : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_UNSUPPORTED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_BAD_PARAMETER : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_PRECONDITION_NOT_MET : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(4,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_OUT_OF_RESOURCES : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(5,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_NOT_ENABLED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(6,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_IMMUTABLE_POLICY : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(7,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_INCONSISTENT_POLICY : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(8,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_ALREADY_DELETED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(9,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_TIMEOUT : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(10,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_NO_DATA : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(11,RETURN_CODE_WIDTH));
|
||||
constant RETCODE_ILLEGAL_OPERATION : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(12,RETURN_CODE_WIDTH));
|
||||
|
||||
-- *STATUS KIND* (DDS)
|
||||
constant INCONSISTENT_TOPIC_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||
constant OFFERED_DEADLINE_MISSED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||
constant REQUESTED_DEADLINE_MISSED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000004";
|
||||
constant OFFERED_INCOMPATIBLE_QOS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000020";
|
||||
constant REQUESTED_INCOMPATIBLE_QOS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000040";
|
||||
constant SAMPLE_LOST_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000080";
|
||||
constant SAMPLE_REJECTED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000100";
|
||||
constant DATA_ON_READERS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000200";
|
||||
constant DATA_AVAILABLE_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000400";
|
||||
constant LIVELINESS_LOST_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000800";
|
||||
constant LIVELINESS_CHANGED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00001000";
|
||||
constant PUBLICATION_MATCHED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00002000";
|
||||
constant SUBSCRIPTION_MATCHED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00004000";
|
||||
|
||||
-- *SAMPLE STATE KIND* (DDS)
|
||||
constant READ_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||
constant NOT_READ_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||
constant ANY_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||
|
||||
-- *VIEW STATE KIND* (DDS)
|
||||
constant NEW_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||
constant NOT_NEW_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||
constant ANY_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||
|
||||
-- *INSTANCE STATE KIND* (DDS)
|
||||
constant ALIVE_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||
constant NOT_ALIVE_DISPOSED_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||
constant NOT_ALIVE_NO_WRITERS_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000004";
|
||||
constant NOT_ALIVE_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000006";
|
||||
constant ANY_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||
|
||||
-- *SAMPLE REJECTED STATUS KIND* (DDS)
|
||||
constant NOT_REJECTED : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,CDR_ENUMERATION_WIDTH));
|
||||
constant REJECTED_BY_INSTANCES_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,CDR_ENUMERATION_WIDTH));
|
||||
constant REJECTED_BY_SAMPLES_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,CDR_ENUMERATION_WIDTH));
|
||||
constant REJECTED_BY_SAMPLES_PER_INSTANCE_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,CDR_ENUMERATION_WIDTH));
|
||||
|
||||
-- *QOS POLICY ID* (DDS)
|
||||
constant INVALID_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,QOS_POLICY_ID_WIDTH));
|
||||
constant USERDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,QOS_POLICY_ID_WIDTH));
|
||||
constant DURABILITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,QOS_POLICY_ID_WIDTH));
|
||||
constant PRESENTATION_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,QOS_POLICY_ID_WIDTH));
|
||||
constant DEADLINE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(4,QOS_POLICY_ID_WIDTH));
|
||||
constant LATENCYBUDGET_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(5,QOS_POLICY_ID_WIDTH));
|
||||
constant OWNERSHIP_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(6,QOS_POLICY_ID_WIDTH));
|
||||
constant OWNERSHIPSTRENGTH_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(7,QOS_POLICY_ID_WIDTH));
|
||||
constant LIVELINESS_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(8,QOS_POLICY_ID_WIDTH));
|
||||
constant TIMEBASEDFILTER_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(9,QOS_POLICY_ID_WIDTH));
|
||||
constant PARTITION_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(10,QOS_POLICY_ID_WIDTH));
|
||||
constant RELIABILITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(11,QOS_POLICY_ID_WIDTH));
|
||||
constant DESTINATIONORDER_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(12,QOS_POLICY_ID_WIDTH));
|
||||
constant HISTORY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(13,QOS_POLICY_ID_WIDTH));
|
||||
constant RESOURCELIMITS_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(14,QOS_POLICY_ID_WIDTH));
|
||||
constant ENTITYFACTORY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(15,QOS_POLICY_ID_WIDTH));
|
||||
constant WRITERDATALIFECYCLE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(16,QOS_POLICY_ID_WIDTH));
|
||||
constant READERDATALIFECYCLE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(17,QOS_POLICY_ID_WIDTH));
|
||||
constant TOPICDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(18,QOS_POLICY_ID_WIDTH));
|
||||
constant GROUPDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(19,QOS_POLICY_ID_WIDTH));
|
||||
constant TRANSPORTPRIORITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(20,QOS_POLICY_ID_WIDTH));
|
||||
constant LIFESPAN_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(21,QOS_POLICY_ID_WIDTH));
|
||||
constant DURABILITYSERVICE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(22,QOS_POLICY_ID_WIDTH));
|
||||
|
||||
-- *SUBMESSAGE IDs*
|
||||
constant SID_PAD : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"01";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user