Commit Graph

257 Commits

Author SHA1 Message Date
158ab05a4d Add Little Endian tests for Fibonacci_ros_action_feedback and GoalStatusArray_ros 2022-02-04 20:31:49 +01:00
f137e8b06b Add "ros" identifier to ROS files 2022-02-04 18:37:02 +01:00
1e1a896613 Add ROS Publisher/Subscriber Templates 2022-02-03 17:06:01 +01:00
0a84093edd Add GoalStatusArray ROS Publisher/Subscriber 2022-02-03 16:07:38 +01:00
4784ee02ff Change UUID encoding/decoding
For efficiency purposes no memory is generated for the UUID
2022-02-03 16:04:38 +01:00
ba58d1a8ba Add ROS UUID definition 2022-02-03 15:13:42 +01:00
b7fd9bfcfe BUG FIX: Decoder may not read last byte of payload
The SKIP_PAYLOAD stage of decoders would not read the last word
(last_word_in = '1').
The <NAME>_MEMBER_END stage was removed from encoders/decoders, since it
could happen that the last aggregated member of a last collection entry
could also be the last type member overall, which would miss toggling
the "last_word_out" correctly. The logic was instead put inside the last
member stage (instead of defining a separate MEMEBR_END stage).
2022-02-03 15:05:10 +01:00
a26faff89a Move functions between rtps_package and rtps_config_package 2022-02-03 14:35:54 +01:00
dc47f72942 Add Fibonacci Action Feedback Topic 2022-02-01 15:26:58 +01:00
45556ab136 Add ROS Action Documentation/References 2022-02-01 14:58:03 +01:00
84220120e5 Add Bound checks in Decoder stage 2022-02-01 14:58:02 +01:00
Greek
98e50e89a9 Add ROS Service Server/Client TEMPLATE 2022-02-01 14:58:02 +01:00
Greek
80eb517eda CYCLONE DDS COMPATIBILITY: Disable PUSH_MODE
It seems that Cyclone DDS discards a DATA message before it has received
a HEARTBEAT, but still ACKs it in the ACKNACKs.
2022-02-01 14:58:02 +01:00
Greek
fcbb6f12f5 BUG FIX: Livelock in rtps_writer when PUSH_MODE=FALSE & DURABILITY=TRANSIENT_LOCAL
A Flag was not reset in a sub-branch that is taken when PUSH_MODE=FALSE
& DURABILITY=TRANSIENT_LOCAL, that prevented the RTPS writer from ever
sending HEARTBEATs.
2022-02-01 14:58:02 +01:00
Greek
a2e00cf0f5 BUG FIX: Service uses 2 seperate Typenames for Request/response 2022-02-01 14:58:02 +01:00
Greek
854b62a379 Add CLOCK_PERIOD to ros_config 2022-02-01 14:58:01 +01:00
Greek
0396097f05 BUG FIX: Subscriber and Publisher ACKNACK destinations were flipped 2022-02-01 14:57:50 +01:00
Greek
6524ad6c0d Make ROS Service Topic Generation compatible with Cyclone DDS
Cyclone DDS appends "Reply" (instead of "Response") to the Response
Message Topic.
2022-01-29 11:12:32 +01:00
Greek
39b7e6960a Fix bug in ROS discovery data generation
The Payload Encapsulation was wrongly set to PL_CDR_BE
2022-01-29 11:12:32 +01:00
Greek
f63fccdcc1 Add/Modify synthesis entities to synthesize AddTwoInts_srv_server 2022-01-29 11:12:32 +01:00
Greek
5894fd9121 Add Level 2 ROS Service Test (AddTwoInts) 2022-01-29 11:12:31 +01:00
Greek
b5741dc9ae Implement ROS glue logic & ROS discovery data
All the necessary "glue" logic to convert ROS Data to a form that the
DDS/RTPS back-end can use is implemented in packages.
The ROS Node discovery information is statically generated in packages
(similar to the RTPS Participant Data), and a special dds writer is
implemented (ros_static_discovery_writer) that has this static data as
its only payload sample.
Some definitions are moved out of rtps_config_package to prevent
circular package dependency.
2022-01-29 11:12:22 +01:00
Greek
2d3c5cf896 Add MAX_PAYLOAD_SIZE to Endpoint Config Record 2022-01-25 17:58:14 +01:00
Greek
63ce5642de Add AddTwoInts ROS Service Implementation
A complete ROS service server and client implementation of the
example_interfaces AddTwoInts service is done, along with an acompaning
testbench.
2022-01-24 17:53:07 +01:00
Greek
a99b8f13c8 Code Refactoring 2022-01-24 17:52:58 +01:00
Greek
59bff52832 Rename rtps_builtin_endpoint to rtps_discovery_module 2022-01-16 18:12:11 +01:00
Greek
e0280ea490 Define RTPS/DDS Configuration in record type 2022-01-16 16:16:58 +01:00
da5eb1ad07 Add IDL definitions for ROS2 MSG and SRV 2022-01-07 13:06:18 +01:00
Greek
3ee4769c52 Rename *_wrapper to *_interface
Since the Type Specific user facing entities did not actually wrap the
DDS entities, but connected to them through port signals, a more
semantically correct name would be "interface", since they are the user
facing interface of the DDS entities.
2022-01-03 14:25:27 +01:00
Greek
4b81cf9484 Propagate LIFESPAN through ENDPOINT_MATCH_FRAME instead of inline QoS
Since we disabled the 'expectsInlineQoS' Flag due to Cyclone DDS
compatibility, we no longer have access to the lifespan of the remote
writers.
The Endpoint Match Format was changed to also send the Lifespan Duration
from the rtps_builtin_endpoint.
2021-12-23 16:20:18 +01:00
Greek
56b80bead2 Match rtps_reader with remote writers (not readers) in testbench 2021-12-23 12:19:19 +01:00
Greek
bc37679d40 BUG FIX: Parse whole Endpoint Match Package in rtps_reader 2021-12-23 12:19:18 +01:00
Greek
97e55ff623 Modify rtps_writer
ACK HANDLING
------------
If there are no remote reliable reader endpoints the new Cache Changes
are immediately ACKed/removed from the HC.
Internal Global ACK SN is set to SEQUENCENUMBER_UNKNOWN, and
only initialized on first reliable remote reader endpoint.
If all remote reliable reader endpints are unmatched the internal Global
ACK SN is set to SEQUENCENUMBER_UNKNOWN and all Cache Changes are
ACKed/removed from the HC.
PUSH MODE
---------
Historical DATA is no longer send on remote endpoint match, if PUSH mode
is FALSE.
TESTBENCH
---------
Level 1 Test2 of rtps_writer was split into 2 tests.
2021-12-23 12:19:11 +01:00
Greek
20dff4a208 BUG FIX: Default Reliability is different for Readers and Writers 2021-12-15 16:49:32 +01:00
Greek
3a1aeb818e Remove TRANSPORT_PRIORITY_QOS
According to RTPS Specification, the TRANSPORT_PRIORITY_QOS is only for
Topic Data.
2021-12-15 16:30:31 +01:00
Greek
6d609a5a34 CYCLONE DDS Compatibility: Remove expectsinlineQoS Flag
Apparently Cyclone DDS does not support Readers with the inline QoS
Flag.
Change rtps_test_package to generate only necessary PIDs (e.g. no
PID_EXPECTS_INLINE_QOS for writers)
2021-12-15 15:58:07 +01:00
Greek
49fc01cf6b BUG FIX: rtps_handler was droping valid ACKNACKs and GAPs
The rtps_handler was droping SequenceNumberSets where the 0 bit was set.
The rtps_handler Test1 was also extended a bit to test for more invalid
variants.
2021-12-14 13:09:10 +01:00
Greek
ef32055f21 BUG FIX: is_live_assert Flag never reset in rtps_builtin_endpoint 2021-12-13 19:07:07 +01:00
Greek
02f0fbfb98 Add PREFER_MULTICAST generic in rtps_buildin_endpoint
Until now the rtps_builtin_endpoint was using the last parsed Locator as
the Locator of choice.
The rtps_builtin_endpoint was extended with a PREFER_MULTICAST boolean
generic that allows to influence which locators are used.
Test1 of rtps_builtin_endpoint was split in two, to test both settings
of the generic.
2021-12-13 14:31:33 +01:00
Greek
719766f5ed BUG FIX: rtps_builtin_endpoint does double endian swap (pre-swaped by rtps_handler) 2021-12-13 14:30:15 +01:00
Greek
48468d1131 BUG FIX: PID is affected by endianness 2021-12-11 12:20:52 +01:00
Greek
e65b152bc6 Modify Level 2 testcases (Test also Altera Implementations)
One Library of each Level 2 testbench is compiled with the Altera
implementations of FIFO and RAM.
2021-12-09 23:32:18 +01:00
Greek
965e7fbb4a TIMING CLOSURE: Further Sub-Split FIND_NEXT_INSTANCE in dds_reader
The FIND_NEXT_INSTANCE stage of the dds_reader was doing a 128-bit
comparison (Key Hash) in 1 clock cycle.
The comparison was split among 4 clock cycles.
2021-12-09 23:32:18 +01:00
Greek
1fdf2198ba TIMING CLOSURE: Further Sub-Split PARTICIPANT_STALE_CHECK in rtps_builtin_endpoint
The PARTICIPANT_STALE_CHECK stage of the rtps_builtin_endpoint was doing
4 consecutive 64-bit comparisons in the same clock cycle.
The stage was further sub-split to make one 64-bit comparison per clock cycle.
2021-12-09 23:32:18 +01:00
Greek
f13d28d811 Add/Modify synthesis entities to synthesize test_loopback 2021-12-09 23:32:08 +01:00
Greek
4896929e1b code refactoring 2021-12-09 19:44:40 +01:00
Greek
3e387b9513 Bug Fix in TYPENAME_writer_wrapper
Default output was missing, inferring latch in synthesis
2021-12-09 19:44:40 +01:00
Greek
c88d4ccf07 Modify rtps_out to use Dual Port RAM 2021-12-09 19:44:40 +01:00
Greek
622ebf6083 Add Dual Port Memory Controller 2021-12-09 19:44:40 +01:00
Greek
46ca2228b6 Add and Redefine existing Dual Port RAM Implementations
Simple Dual Port (Read and Write Port), and True Dual Port RAM
implementations, together with their respective Altera implementations
were added.
The 'arch' Architectures should have the same behaviour as the Altera
Implementations (single_port_ram was modified to achieve that)
2021-12-09 19:44:40 +01:00
Greek
1871adac6d Add a Verbatim Key Hash Generator
Add a Key Hash Generator that just generates a Key Hash with the
verbatim contents of the Type Key Fields.
This is the case for all Types with a combined Key Field size less than
16 Bytes.
2021-12-09 19:44:39 +01:00
Greek
6662935514 Add dds_top TEMPLATE 2021-12-09 19:44:39 +01:00
Greek
e0453657ba Add Test2 Level 2 testbench
A loopback is implemented between 2 seperate systems with one reader and
one writer each. Type1 Topic Type is used.
2021-12-09 19:44:39 +01:00
Greek
70549853d5 code refactoring 2021-12-09 19:44:39 +01:00
Greek
4420a62d63 Fix Bug in Key Holder
The Key Holder was sending only the 1st Byte of 4-Byte Key Fields.
2021-12-09 19:44:39 +01:00
Greek
ddc331d9ba Redesign Interface and Instance Handle Responses of dds_writer
The REGISTER_INSTANCE and LOOKUP_INSTANCE DDS Writer Operations return
an Instance Handle. Until now this instance Handle was returned via the
Data output interface of the dds_writer (ready_out, valid_out,
data_out_last_word_out).
This was changed, so that the dds_writer directly outputs the Instance
Handle via a dedicated port while asserting the done Signal.
This has the result that the <TYPENAME>_writer_wrapper no longer
"exports" data out signals from the dds_writer.
All relevant instantiations and testcases are changed accordingly
2021-12-09 19:44:38 +01:00
Greek
830d6c1409 Bug Fix and Redesign of TEMPLATE_key_holder
Until now it was assumed that a serialized key is the PLAIN_CDR2
Big Endian encoding of a <TYPENAME>KeyHolder Object [DDS_XTYPES v1.3, 7.6.8]
(I.e. the same blob that computes the MD5 key hash).
Taking other DDS implementations as reference (e.g. Cyclone DDS), it
seems they are using a normal Payload containing a KeyHolder(<TYPENAME>)
Object [DDS_XTYPES v1.3, 7.2.2.4.7] as the serialized key.
The Key Holder Template (together with the Type1 and Type2
implementations) were updated to reflect this change.
A bug fix were the Key Hash was not reset on a 'PUSH_SERIALIZED_KEY'
opcode was also fixed (together with the testbench).
2021-12-09 19:44:38 +01:00
5d9acb6f41 Add directive to allow QSYS Compilation
QSYS does not allow to change the VHDL version of processed files.
All respective files have to have a comment directive forcing the VHDL version.
2021-12-09 19:44:38 +01:00
Greek
746b273cff Fix Avalon_MM_wrapper Byte Ordering
According to Avalon MM Interface Specification, the Bus is in Little
Endian.
2021-12-09 19:44:38 +01:00
Greek
0ede0537b7 Add test entities to test PL-PS communication 2021-12-09 19:44:37 +01:00
Greek
4b194f09c9 Add Avalon MemoryMapped Interface Wrapper
Add Entity that connects an input and output FWFT_FIFO to a Avalon MM
Interface.
NOTE: The Implementation has no sync process. It relies on all FIFO
Signals being synchronous. (May affect timing closure)
2021-12-09 19:44:37 +01:00
Greek
6e20b8958d Add VHDL configuration for single_port_ram and FWFT_FIFO
Allow single_port_ram and FWFT_FIFO to have Altera specific
architectures.
2021-12-09 19:43:56 +01:00
Greek
b47d409f13 Make codebase Quartus synthesizable
Remove non-Quartus-supported VHDL 2008 features.
Remove inferred Latches.
Add test Entities to see resulting hw synthesis of various code
segments.
2021-12-07 13:05:24 +01:00
Greek
cffaafb284 Code refactoring 2021-11-20 16:01:57 +01:00
Greek
63465e8e30 Remove default signal initialization from entire codebase 2021-11-19 18:50:18 +01:00
Greek
385257e271 Fix WITH_KEY branching in DDS Entities 2021-11-19 18:24:32 +01:00
Greek
4830645a5a Move key_holder inside the DDS Entities 2021-11-19 12:00:07 +01:00
Greek
e87d84ba24 Modify ports of rtps_builtin_endpoint according to port naming convention
The ports to rtps_out from the rtps_reader and rtps_writer entities were
also modified to apply a uniform naming.
2021-11-18 16:44:42 +01:00
Greek
399bd2bbda Modify ports of rtps_handler according to port naming convention 2021-11-18 12:20:20 +01:00
Greek
8f9f445f21 Add documentation 2021-11-17 14:27:30 +01:00
Greek
9cc4907a2f Add complete Level2 System Test
Using seperately compiled Libraries we interconnect two systems, and
test their communication and interaction.
A bug in rtps_builtin_endpoint was fixed (were if only the SUB data was
to be sent, it was never actually sent).
2021-11-17 14:23:53 +01:00
Greek
308703f754 Add missing 'abort' port to key_holder 2021-11-17 13:56:23 +01:00
Greek
9ae15430f6 Add Type1 test type
Add IDL Definition, Reader/Writer Wrapper, Key Holder, and Testbenches
for a simple type.
2021-11-11 20:40:27 +01:00
Greek
af1de8bab8 Make Templates for reader/writer wrapper and key_holder
Templates with the pre-defined code hull for the reader_wrapper,
writer_wrapper, and key_holder were created.
A "cookbook" of how to expand this TEMPLATES to create type specific IDL
conversions was also added.
The "code generation" is kept general to allow a code generator to
automatically produce this wrappers in the future.
2021-11-11 20:19:26 +01:00
Greek
d907a85c07 Add Level 1 Test 2 of TYPE2 wrapper and key_holder
The writer_wrapper was modified to allow changing the used endian via
generic. This allows to test Little Endian handling in simulations.
The Test2 are basically Test1 with Little Endian
2021-11-07 16:21:20 +01:00
Greek
27aa801e74 Add Level 1 Test 1 of TYPE2 key_holder
The writer_wrapper is used to push normal payloads, and the serialized
key is hardcoded and compared to the output.
2021-11-07 16:19:31 +01:00
Greek
57128bcea3 Add KEY_HOLDER implementation for TYPE2 2021-11-05 17:45:16 +01:00
Greek
eef62e17ce Add Level 1 Test 1 for Type2 Reader and Writer Wrapper
By connecting the output of the writer_wrapper to the input of the
reader_wrapper we can effectively test the encoding/decoding.
Since the writer_wrapper only uses Big Endian we cannot test Little
Endian handling.
2021-11-05 14:26:45 +01:00
Greek
2b3e3ae23b Implement TYPE2_WRITER_WRAPPER 2021-11-04 14:16:53 +01:00
Greek
5a22d51974 Define Type2 IDL and implement TYPE2_READER_WRAPPER
A test type is defined in IDL, and then manually implemented in the
Reader Wrapper.
2021-11-04 14:16:32 +01:00
Greek
ee67fe9493 Minor declaration & documentation fixes 2021-11-03 20:07:14 +01:00
Greek
e33d982182 Add 'si_ack' to DDS Reader
Previously the simaple info data was valid for exectly 1 clock cycle,
in which the user had to pull the 'get_data' signal if he wanted the
associated payload.
This change allows the user to control how long the sample info data is
shown.
2021-11-03 18:33:35 +01:00
Greek
609ed2d686 Code Refactor 2021-05-15 20:39:56 +02:00
Greek
4392aa8288 Parse PID_STATUS_INFO in RTPS Builtin Endpoint
The inline-QoS of PDP Packets is parsed, and Participants/Endpoints can
be unmatched by Unregister/Dispose Status Info Updates.
Test 1,2,3 was extended to test this functionality.
NOTE: PID_KEY_HASH is a requirement (at least for unmatching Endpoints),
as serialized key payloads are unsupported.
2021-05-14 12:08:21 +02:00
Greek
8cd1c29518 Backport GAP parsing logic to RTPS Builtin Endpoint
The GAP parsing logic was backported from RTPS Reader, so that the RTPS
Builtin Endpoint can parse all kind of GAP without making assumptions.
The Test 4 of the RTPS Builtin Endpoint was extended to test HAERTBEAT and GAP Handling of the RTPS
Builting endpoint, and Test 2 of the RTPS Reader was extended with an
additional Test (GAP with next expected SN not marked in bitmap)
2021-05-13 13:31:00 +02:00
Greek
293d89f083 NACK SN in ACKNACk Response of RTPS Builtin Endpoint
Until now the ACKNACK Response of the RTPS Builtin Endpoint had an empty
Bitmap, effectively ACKing SNs, but never NACKing any (i.e. not
requesting any).
Similar to the RTPS Endpoints we request the next 32 SNs on every
ACKNACK Response.
The ParticipantMessageData SN Handling was also implemented.
2021-05-12 12:09:29 +02:00
Greek
90a4c7928a Backport Memory Controller to rtps_builtin_endpoint
Backport Memory Controller and Memory FSM from RTPS/DDS Endpoints to
RTPS Builtin Endpoint.
The Memory is now using a single linked list and the FSM uses Frame Field
Flags.
The main FSM uses check_time to initiate stale checks, and the stale
checks are done in the main FSM.
Testbench was modified to accomodate the changes (Previous L0 Test4 was
removed and integrated in L0 Test 1).
2021-05-11 13:23:55 +02:00
Greek
7f7b7a6164 Add Documentation to rtps_test_package 2021-05-06 15:59:07 +02:00
Greek
e067952e49 Add test 7 of DDS Reader
Test the bitmap writer conversion to/from memory.
2021-04-30 16:33:06 +02:00
Greek
131ee48f2a Add test 6 of DDS Reader
Test the Lifespan Handling of the DDS Reader
2021-04-30 14:48:32 +02:00
Greek
4fc9029554 REMOVE_WRITER DDS Operation generates Samples
The REMOVE_WRITER DDS Operation of DDS Reader now generates Samples if
the Instance State changes.
Updated testbench.
Added checks for DATA_AVAILABLE communication status.
2021-04-30 13:03:13 +02:00
Greek
996c1fe962 Add test 5 of DDS Reader
Test Sample Rejected Status Handling.
Test GET_SAMPLE_REJECTED_STATUS DDS Operation.
Extend Sample Rejected Status Kind by REJECTED_BY_PAYLOAD_MEMORY_LIMIT
2021-04-26 20:47:00 +02:00
Greek
7a096de5c1 Add test 4 of DDS Reader
Test Deadline Handling of the DDS Reader.
Test the GET_REQUESTED_DEADLINE_MISSED_STATUS DDS Operation.
Add Documentation to some Testbenches.
2021-04-26 12:57:09 +02:00
Greek
0beafe13b3 Add test 3 of the DDS Reader
Test the DDS READ, TAKE, READ_NEXT_SAMPLE, TAKE_NEXT_SAMPLE,
READ_INSTANCE, TAKE_INSTANCE, READ_NEXT_INSTANCE, TAKE_NEXT_INSTANCE
Operations.
Backport fixes to previous testbenches.
Change handling of DISPOSE Samples of unknown Instances.
2021-04-25 16:12:22 +02:00
Greek
5a0eeef1e6 Add test 2 of DDS Reader
Test TIME_BASED_FILTER QoS Handling.
2021-04-18 16:17:24 +02:00
Greek
49f3c3eb65 Change DDS Reader - User Interface
The si_last Signal was replaced with eoc (End of Collection)
The eoc signal is pulled high after the last si_valid.
2021-04-18 15:50:53 +02:00
Greek
bac011905a Add Test 1 of DDS Reader
Test RTPS Operations ADD_CACHE_CHANGE, and REMOVE_WRITER of DDS Reader.
Port changes and code refoctoring in DDS Writer.
2021-04-11 16:39:17 +02:00
Greek
c5239679d7 Port changes and fix syntax of DDS Reader 2021-03-31 19:25:21 +02:00
Greek
4a67a18df2 Add Test 5 of DDS Writer
Test Lifespan Handling of DDS Writer.
2021-03-29 17:55:11 +02:00
Greek
501f67a67f Add Test4 of DDS Writer
Test Liveliness handling of RTPS Writer.
Test GET_LIVELINESS_LOST_STATUS and ASSERT_LIVELINESS DDS Operations
2021-03-29 14:13:26 +02:00