* Merged stimulus generation procedures to one single procedure * Integrated OSVVM into testbench * Generated OSVVM Project Script File * Various Bug Fixes to compile testbench
123 lines
7.8 KiB
Plaintext
123 lines
7.8 KiB
Plaintext
* https://github.com/osrf/ros_dds/issues/7 tries to determine the feasibility of an FPGA-only DDS implementation
|
||
It was suggested using a 'OpenMS430' soft-microcontroller to run DDS middleware on-top.
|
||
- Compare resource utilization and performance with this approach
|
||
* DDS FPGA Vendors
|
||
- TwinOaks Computing Inc (CoreDX)
|
||
- OpenVPX
|
||
* Implementation makes unnecessary transitions, that are ignored in later stages.
|
||
This was a design decision to simplify complexity of each stage (and probably FMAX), but increases power consumtion.
|
||
* Is the Timestamp used by something else except ordering by source? If not, does it have to be "sane"?
|
||
2.2.3.16
|
||
This QoS relies on the sender and receiving applications having their clocks sufficiently synchronized. If this is not the case
|
||
and the Service can detect it, the DataReader is allowed to use the reception timestamp instead of the source timestamp in its
|
||
computation of the ‘expiration time.’
|
||
2.2.3.17
|
||
The mechanism to set the source timestamp is middleware dependent.
|
||
* Are the Builtin Endpoints part of the DDS Specification or the RTPS specification?
|
||
- Both
|
||
* ALL Data Fields are sent on each change:
|
||
https://community.rti.com/forum-topic/sending-only-fields-have-changed
|
||
* OFFERED_INCOMPATIBLE_QOS, REQUESTED_INCOMPATIBLE_QOS? (DDS-1.4, 2.2.4.1 Communication Status)
|
||
* Does a RTPS Reader subscribe and receive ALL Instances of a keyed Topic?
|
||
i.e. where are the instances differentiated?
|
||
S.29 - Topic Kind
|
||
* Does a RTPS reader subscribe to more than one Writer (If not using Groups)?
|
||
- Yes
|
||
* Since only positive Sequence Numbers are valid, why is the type signed?
|
||
* Replace also Locator? (In order to prevent storing the Locators in multiple Endpoints)
|
||
* Store only one locator? Select the first supported multicast? Check for active ping response? Verify with source address?
|
||
* What is the purpose of "manualLivelinessCount" in "SPDPdiscoveredParticipantData"? Since the liveliness is asserted by use of "ParticipantMessageData", what is the purpose of also sending an updated "SPDPdiscoveredParticipantData"? (Duplicates is out of the question, since it is not sent with the actual liveliness assertion)
|
||
* What does that mean?:
|
||
2.2.3.19
|
||
If reliability is BEST_EFFORT then the Service is allowed to drop samples. If the reliability is
|
||
RELIABLE, the Service will block the DataWriter or discard the sample at the DataReader in order not to lose existing
|
||
samples.
|
||
* What is now the valid Parameter List length?
|
||
According to DDSI-RTPS 9.4.2.11
|
||
The length encodes the number of octets following the length to reach the ID of the next parameter (or the ID of the sentinel). Because every parameterId starts on a 4-byte boundary, the length is always a multiple of four.
|
||
According to DDS XTypes 7.4.1.2
|
||
Unlike it is stated in [RTPS] Sub Clause 9.4.2.11 “ParameterList”, the value of the parameter length is the exact length of the serialized member. It does not account for any padding bytes that may follow the serialized member. Padding bytes may be added in order to start the next parameterID at a 4 byte offset relative to the previous parameterID.
|
||
* 32-bit Timestamps? Seriously? Ever heard of Y2k38?
|
||
* Use generic package with unconstrained arrays (VHDL-2008), and assert bounds/length inside the package.
|
||
* Count repository lines
|
||
git ls-files | grep .vhd | xargs wc -l
|
||
* Count Field in Heartbeat/Acknack
|
||
The following sentence is quite self-explanatory:
|
||
"A counter that is incremented each time a new message is sent. Provides the means to detect
|
||
duplicate messages that can result from the presence of redundant communication paths."
|
||
But then, in 8.4.15.7 it says:
|
||
"So, an implementation should ensure that same logical HEARTBEATs are tagged with the same Count."
|
||
Does that mean there are cases were I have to put the same count? What is a logical HEARTBEAT?
|
||
* Should a "Keyed" Endpoint communicate with a "Non-Keyed"?
|
||
* Is the empty String a valid Topic and Type Name?
|
||
* We can determine if a Endpoint is a Reader or Writer via the Entity ID. Is it illegal to get a SEDP with incompatible source (Reader Entity ID from Publications Announcer?)
|
||
* Can we make an array of records of uncontrained strings? That we we could make an array of variable sized strings...
|
||
|
||
|
||
* Fast-RTPS doen not follow DDSI-RTPS Specification
|
||
- Open Github Issue
|
||
https://github.com/eProsima/Fast-RTPS/issues/1221
|
||
- Seems that Fast-RTPS is also not checking the Validity of Submessages according to Spec
|
||
|
||
* DDSI-RTPS 2.3 ISSUES
|
||
- 8.3.7.7 InfoDestination
|
||
'This message is sent from an RTPS Writer to an RTPS Reader to modify the GuidPrefix used to interpret the Reader entityIds appearing in the Submessages that follow it.'
|
||
But state is changed as follows 'Receiver.destGuidPrefix = InfoDestination.guidPrefix'.
|
||
Isn't Reader -> Writer also valid? Does it have a specific direction?
|
||
- 9.4.5.3 Data Submessage
|
||
writerSN is incorrectly shown as only 32 bits in width
|
||
- 8.3.4 The RTPS Message Receiver, Table 8.16 - Initial State of the Receiver
|
||
Port of UnicastReplyLocatorList should be initialized to Source Port.
|
||
- 8.3.7.4.3 Validity
|
||
gapList.Base >= gapStart
|
||
- 8.3.7.10.3 Validity
|
||
'This Submessage is invalid when the following is true:
|
||
submessageLength in the Submessage header is too small'
|
||
But if InvalidateFlag is set, Length can be Zero. Since the length is unsigned, there cannot be an invalid length.
|
||
|
||
- 9.4.5.1.2 Flags
|
||
Clarify from where the endianness begins.
|
||
One might think it would begin after the Submessage Header, but the length is also endian dependent.
|
||
|
||
* Source Port of SPDP is irrelevant, since it is BEST EFFORT and we do not reply (only Destination Port is of significance)
|
||
|
||
|
||
|
||
DESIGN DECISIONS
|
||
================
|
||
|
||
* !REJECTED!
|
||
In order to save memory GUID should only be saved once.
|
||
Decision was made to replace GUID with internal reference index.
|
||
Discovery module is responsible for saving the GUID and map it to a refernec eindex, that can then be used by other entities.
|
||
Writer Endpoints may need access to the real GUID for message fields.
|
||
2 options exist:
|
||
- All Endpoints have access to the central memory where the real GUID is saved (needs Arbiter, handle starvation)
|
||
- Writer Endpoints fill the fields with the reference index as placeholder, and a seperate Entity will access the central memory and replace the actual values
|
||
The Second option was chosen (Less resources)
|
||
RTPS Handler should lookup received message GUID in central memory (The lookup should happen in parallel with the actual message handling):
|
||
- If not stored, and messegae not for Built-in ENdpoints, drop message
|
||
- If in memory, replace with refernece index
|
||
The central memory is accessd by 3 Entities:
|
||
- RTPS Handler (READ, GUID Lookup)
|
||
- Placeholder Handler (READ, GUID Lookup)
|
||
- Discovery Module (WRITE, GUID Save) [Need initial Lookup? RTPS Handler should have already handled it. How does DM know if actual GUID or reference index?]
|
||
Use a 2-port RAM with an arbiter for READ operations (Give Placeholder Handler priority to prevent DoS starvation)
|
||
|
||
* !REJECTED! (Use the unused extra flags in the stored participant data)
|
||
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
|
||
|
||
PROTOCOL UNCOMPLIANCE
|
||
=====================
|
||
* Partition QoS
|
||
* Built-in Endpoint is NOT the same as a normal Endpoint
|
||
-> No User access to Data
|
||
* Known but unused Submessage IDs are treated as uknown
|
||
-> No validity check
|
||
* Inline QoS validated in Endpoint
|
||
-> Cannot invalidate Rest of Message/Packet
|
||
|
||
-- Input FIFO Guard
|
||
-- Output FIFO Guard
|
||
-- Deferred to package Body |