Rename rtps_builtin_endpoint to rtps_discovery_module

This commit is contained in:
Greek 2022-01-16 18:12:11 +01:00
parent e0280ea490
commit 59bff52832
28 changed files with 427 additions and 410 deletions

View File

@ -9,7 +9,7 @@
|DDS Writer|->|RTPS Writer|<-+->|RTPS Handler|<-->|RTPS Handler|<-+->|RTPS Reader|->|DDS Reader| |DDS Writer|->|RTPS Writer|<-+->|RTPS Handler|<-->|RTPS Handler|<-+->|RTPS Reader|->|DDS Reader|
+----------+ +-----------+ | +------------+ +------------+ | +-----------+ +----------+ +----------+ +-----------+ | +------------+ +------------+ | +-----------+ +----------+
+---------------------+ | | +---------------------+ +---------------------+ | | +---------------------+
|RTPS Builtin Endpoint|<-+ +->|RTPS Builtin Endpoint| |RTPS Discovery Module|<-+ +->|RTPS Discovery Module|
+---------------------+ +---------------------+ +---------------------+ +---------------------+
@ -20,8 +20,8 @@
+----------+ +-----------+ | | | | +-----------+ +----------+ +----------+ +-----------+ | | | | +-----------+ +----------+
+---------------------+ | | | | +---------------------+ +---------------------+ | | | | +---------------------+
| |<-+ | +-|--| | | |<-+ | +-|--| |
|RTPS Builtin Endpoint| | +------------+ +------------+ | |RTPS Builtin Endpoint| |RTPS Discovery Module| | +------------+ +------------+ | |RTPS Discovery Module|
| |----+->| RTPS OUT |--->|RTPS Handler|----+->| | | |----+->| RTPS OUT |--->|RTPS Handler|----+->| |
+---------------------+ +------------+ +------------+ +---------------------+ +---------------------+ +------------+ +------------+ +---------------------+
TODO: RTPS Reader/Writer and RTPS Builtin Endpoint Interconnection TODO: RTPS Reader/Writer and RTPS Discovery Module Interconnection

View File

@ -106,7 +106,7 @@ ENDPOINT PACKET FORMAT
+---------------------------------------------------------------+ +---------------------------------------------------------------+
| SRC_ENTITYID | | SRC_ENTITYID |
+---------------------------------------------------------------+ +---------------------------------------------------------------+
| DEST_ENTITYID [only for Builtin Destinations] | | DEST_ENTITYID [only for Discovery Module] |
+---------------------------------------------------------------+ +---------------------------------------------------------------+
| | | |
+ Sequence Number [only for DATA Submessage] + + Sequence Number [only for DATA Submessage] +
@ -114,7 +114,7 @@ ENDPOINT PACKET FORMAT
+---------------------------------------------------------------+ +---------------------------------------------------------------+
| | | |
+ Timestamp + + Timestamp +
| [only for DATA Submessage and User Destinations] | | [only for DATA Submessage and RTPS Endpoints] |
+---------------------------------------------------------------+ +---------------------------------------------------------------+
| | | |
~ PAYLOAD (SUBMESSAGE CONTENT) ~ ~ PAYLOAD (SUBMESSAGE CONTENT) ~
@ -182,8 +182,8 @@ ENDPOINT_ID
0...MAX_ENDPOINTS 0...MAX_ENDPOINTS
READERS...WRITERS READERS...WRITERS
BUILT-IN ENDPOINTS DISCOVERY MODULE
================== ================
2.2.5 Built-In Topics 2.2.5 Built-In Topics
The QoS of the built-in Subscriber and DataReader objects is given by the following table: The QoS of the built-in Subscriber and DataReader objects is given by the following table:
@ -334,8 +334,8 @@ ENDPOINT LIVELINESS UPDATE
03| | 03| |
+---------------------------------------------------------------+ +---------------------------------------------------------------+
LOCAL ENDPOINT BUFFER RTPS ENDPOINT
===================== =============
READER READER
------ ------
@ -421,8 +421,8 @@ Q...Reader expects in-line QoS
H...Reader expects Historical Data H...Reader expects Historical Data
B...Reader has RELIABILITY BEST_EFFORT B...Reader has RELIABILITY BEST_EFFORT
HISTORY CACHE DDS ENDPOINT
============= ============
READER READER
------ ------
@ -849,6 +849,11 @@ space available to store the modification, the writer is allowed to block.
If after that, the application wants to modify (write or dispose) the instance, it has to register it again, If after that, the application wants to modify (write or dispose) the instance, it has to register it again,
or else use the special handle value HANDLE_NIL. or else use the special handle value HANDLE_NIL.
2.2.2.5.5 SampleInfo CLass (DDS)
The publication_handle that identifies locally the DataWriter that modified the instance. The publication_handle is the
same InstanceHandle_t that is returned by the operation get_matched_publications on the DataReader and can also
be used as a parameter to the DataReader operation get_matched_publication_data.
INVALIDATION INVALIDATION
============ ============

View File

@ -60,17 +60,17 @@ architecture arch of dds_top is
type DURATION_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DURATION_TYPE; type DURATION_WARRAY_TYPE is array (0 to NUM_WRITERS-1) of DURATION_TYPE;
signal full_fire_rh, write_rh_fire : std_logic_vector(0 to NUM_ENDPOINTS-1); signal full_fire_rh, write_rh_fire : std_logic_vector(0 to NUM_ENDPOINTS-1);
signal data_rh_fire, data_rh_firb : std_logic_vector(WORD_WIDTH downto 0); signal data_rh_fire, data_rh_fidm : std_logic_vector(WORD_WIDTH downto 0);
signal full_firb_rh, write_rh_firb : std_logic; signal full_fidm_rh, write_rh_fidm : std_logic;
signal read_rb_firb, empty_firb_rb : std_logic; signal read_dm_fidm, empty_fidm_dm : std_logic;
signal data_firb_rb : std_logic_vector(WORD_WIDTH downto 0); signal data_fidm_dm : std_logic_vector(WORD_WIDTH downto 0);
signal read_re_fire, empty_fire_re : std_logic_vector(0 to NUM_ENDPOINTS); signal read_re_fire, empty_fire_re : std_logic_vector(0 to NUM_ENDPOINTS);
signal data_fire_re : EARRAY_DATA_TYPE; signal data_fire_re : EARRAY_DATA_TYPE;
signal alive_re_rb, full_frbre_re, write_rb_frbre : std_logic_vector(0 to NUM_ENDPOINTS-1); signal alive_re_dm, full_fdmre_re, write_dm_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
signal data_rb_frbre , data_rb_firo : std_logic_vector(WORD_WIDTH downto 0); signal data_dm_fdmre , data_dm_firo : std_logic_vector(WORD_WIDTH downto 0);
signal full_firo_rb, write_rb_firo : std_logic; signal full_firo_dm, write_dm_firo : std_logic;
signal empty_frbre_re, read_re_frbre : std_logic_vector(0 to NUM_ENDPOINTS-1); signal empty_fdmre_re, read_re_fdmre : std_logic_vector(0 to NUM_ENDPOINTS-1);
signal data_frbre_re : EARRAY_DATA_TYPE; signal data_fdmre_re : EARRAY_DATA_TYPE;
signal full_firo_re, write_re_firo : std_logic_vector(0 to NUM_ENDPOINTS-1); signal full_firo_re, write_re_firo : std_logic_vector(0 to NUM_ENDPOINTS-1);
signal data_re_firo : EARRAY_DATA_TYPE; signal data_re_firo : EARRAY_DATA_TYPE;
signal start_rr_dr, ack_dr_rr, done_dr_rr, valid_rr_dr, ready_dr_rr : std_logic_vector(0 to NUM_READERS-1); signal start_rr_dr, ack_dr_rr, done_dr_rr, valid_rr_dr, ready_dr_rr : std_logic_vector(0 to NUM_READERS-1);
@ -127,20 +127,20 @@ begin
empty => empty, empty => empty,
rd => read, rd => read,
data_in => data_in, data_in => data_in,
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_firb_rh, full_dm => full_fidm_rh,
wr_be => write_rh_firb, wr_dm => write_rh_fidm,
data_out_be => data_rh_firb(WORD_WIDTH-1 downto 0), data_out_dm => data_rh_fidm(WORD_WIDTH-1 downto 0),
last_word_out_be => data_rh_firb(WORD_WIDTH), last_word_out_dm => data_rh_fidm(WORD_WIDTH),
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_fire_rh, full_rtps => full_fire_rh,
wr_ue => write_rh_fire, wr_rtps => write_rh_fire,
data_out_ue => data_rh_fire(WORD_WIDTH-1 downto 0), data_out_rtps => data_rh_fire(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rh_fire(WORD_WIDTH) last_word_out_rtps => data_rh_fire(WORD_WIDTH)
); );
fifo_in_rb_inst : configuration work.FWFT_FIFO_cfg fifo_in_dm_inst : configuration work.FWFT_FIFO_cfg
generic map ( generic map (
FIFO_DEPTH => 2, FIFO_DEPTH => 2,
DATA_WIDTH => WORD_WIDTH+1 DATA_WIDTH => WORD_WIDTH+1
@ -150,13 +150,13 @@ begin
reset => reset, reset => reset,
clk => clk, clk => clk,
-- INPUT -- INPUT
full => full_firb_rh, full => full_fidm_rh,
write => write_rh_firb, write => write_rh_fidm,
data_in => data_rh_firb, data_in => data_rh_fidm,
-- OUTPUT -- OUTPUT
empty => empty_firb_rb, empty => empty_fidm_dm,
read => read_rb_firb, read => read_dm_fidm,
data_out => data_firb_rb, data_out => data_fidm_dm,
-- MISC -- MISC
free => open free => open
); );
@ -186,7 +186,7 @@ begin
end generate; end generate;
rtps_builtin_endpoint_inst : entity work.rtps_builtin_endpoint(arch) rtps_discovery_module_inst : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
@ -195,27 +195,27 @@ begin
reset => reset, reset => reset,
time => time, time => time,
-- FROM RTPS HANDLER -- FROM RTPS HANDLER
empty => empty_firb_rb, empty => empty_fidm_dm,
rd => read_rb_firb, rd => read_dm_fidm,
data_in => data_firb_rb(WORD_WIDTH-1 downto 0), data_in => data_fidm_dm(WORD_WIDTH-1 downto 0),
last_word_in => data_firb_rb(WORD_WIDTH), last_word_in => data_fidm_dm(WORD_WIDTH),
-- FROM USER ENDPOINTS -- FROM RTPS ENDPOINTS
alive => alive_re_rb, alive => alive_re_dm,
-- TO USER ENDPOINTS -- TO RTPS ENDPOINTS
full_ue => full_frbre_re, full_rtps => full_fdmre_re,
wr_ue => write_rb_frbre, wr_rtps => write_dm_fdmre,
data_out_ue => data_rb_frbre(WORD_WIDTH-1 downto 0), data_out_rtps => data_dm_fdmre(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rb_frbre(WORD_WIDTH), last_word_out_rtps => data_dm_fdmre(WORD_WIDTH),
-- TO RTPS OUT -- TO RTPS OUT
full_ro => full_firo_rb, full_ro => full_firo_dm,
wr_ro => write_rb_firo, wr_ro => write_dm_firo,
data_out_ro => data_rb_firo(WORD_WIDTH-1 downto 0), data_out_ro => data_dm_firo(WORD_WIDTH-1 downto 0),
last_word_out_ro => data_rb_firo(WORD_WIDTH) last_word_out_ro => data_dm_firo(WORD_WIDTH)
); );
fifo_rb_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate fifo_dm_re_gen : for i in 0 to NUM_ENDPOINTS-1 generate
fifo_rb_re_inst : configuration work.FWFT_FIFO_cfg fifo_dm_re_inst : configuration work.FWFT_FIFO_cfg
generic map ( generic map (
FIFO_DEPTH => 2, FIFO_DEPTH => 2,
DATA_WIDTH => WORD_WIDTH+1 DATA_WIDTH => WORD_WIDTH+1
@ -225,13 +225,13 @@ begin
reset => reset, reset => reset,
clk => clk, clk => clk,
-- INPUT -- INPUT
full => full_frbre_re(i), full => full_fdmre_re(i),
write => write_rb_frbre(i), write => write_dm_fdmre(i),
data_in => data_rb_frbre, -- Multicast data_in => data_dm_fdmre, -- Multicast
-- OUTPUT -- OUTPUT
empty => empty_frbre_re(i), empty => empty_fdmre_re(i),
read => read_re_frbre(i), read => read_re_fdmre(i),
data_out => data_frbre_re(i), data_out => data_fdmre_re(i),
-- MISC -- MISC
free => open free => open
); );
@ -262,11 +262,11 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_fdmre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_fdmre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_frbre_re(i)(WORD_WIDTH), last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => full_firo_re(i), full_ro => full_firo_re(i),
wr_ro => write_re_firo(i), wr_ro => write_re_firo(i),
@ -285,7 +285,7 @@ begin
); );
-- Set Alive Signals of Readers to Zero -- Set Alive Signals of Readers to Zero
alive_re_rb(i) <= ('0'); alive_re_dm(i) <= ('0');
else generate else generate
rtps_writer_inst : entity work.rtps_writer(arch) rtps_writer_inst : entity work.rtps_writer(arch)
generic map ( generic map (
@ -313,13 +313,13 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_fdmre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_fdmre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_fdmre_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_frbre_re(i)(WORD_WIDTH), last_word_in_meta => data_fdmre_re(i)(WORD_WIDTH),
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO DISCOVERY MODULE (META TRAFFIC)
alive_sig => alive_re_rb(i), alive_sig => alive_re_dm(i),
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => full_firo_re(i), full_ro => full_firo_re(i),
wr_ro => write_re_firo(i), wr_ro => write_re_firo(i),
@ -495,9 +495,9 @@ begin
reset => reset, reset => reset,
clk => clk, clk => clk,
-- INPUT -- INPUT
full => full_firo_rb, full => full_firo_dm,
write => write_rb_firo, write => write_dm_firo,
data_in => data_rb_firo, data_in => data_dm_firo,
-- OUTPUT -- OUTPUT
empty => empty_firo_ro(i), empty => empty_firo_ro(i),
read => read_ro_firo(i), read => read_ro_firo(i),

View File

@ -86,18 +86,19 @@
* Does TIME_BASED_FILTER also apply to meta-samples (DISPOSED, NO_WRITERS)? That is an easy way to not get convergent state in different DDS Readers. What do other implementations do? * Does TIME_BASED_FILTER also apply to meta-samples (DISPOSED, NO_WRITERS)? That is an easy way to not get convergent state in different DDS Readers. What do other implementations do?
* The Participant GUID of the ParticipantMessageData is theoretically not needed, since it is the same as the source GUID of the Packet. This is done, so that the ParticipantMessageData has a key and can be decrypted as every other DATA Message. Our implementation checks if it is the expected GUID and drops it otherwise. * The Participant GUID of the ParticipantMessageData is theoretically not needed, since it is the same as the source GUID of the Packet. This is done, so that the ParticipantMessageData has a key and can be decrypted as every other DATA Message. Our implementation checks if it is the expected GUID and drops it otherwise.
- see (https://issues.omg.org/issues/DDSIRTP21-4) - see (https://issues.omg.org/issues/DDSIRTP21-4)
* The RTPS Builtin Endpoint skips a Packet it doesn't understand. The RTPS Builtin Endpoint does not parse "serialized key" of DATA messages (since the specification does not actually define what the serialized key even is). So a SPDP DATA Packet with in-line QoS (PID_STATUS_INFO) and serialized key will be dropped if the RTPS Builtin Endpoint does not know the GUID, and that may stall the whole process pipeline (since the SN will be never acknowledged) * The Discovery Module skips a Packet it doesn't understand. The Discovery Module does not parse "serialized key" of DATA messages (since the specification does not actually define what the serialized key even is). So a SPDP DATA Packet with in-line QoS (PID_STATUS_INFO) and serialized key will be dropped if the Discovery Module does not know the GUID, and that may stall the whole process pipeline (since the SN will be never acknowledged)
* Is the parameter header of an optional member in CDR_LE also endian swapped? * Is the parameter header of an optional member in CDR_LE also endian swapped?
- Yes. (See Figure 24, 7.4.1.2.1, DDS-XTYPES 1.3) - Yes. (See Figure 24, 7.4.1.2.1, DDS-XTYPES 1.3)
* Based on the examples given in 7.6.8 DDS-XTYPES v1.3 specification it seems that the string bounds do not count the NUL byte. * Based on the examples given in 7.6.8 DDS-XTYPES v1.3 specification it seems that the string bounds do not count the NUL byte.
- Under close inspection the IDL 4.2 specification states under 7.4.1.4.4.3.2 - Under close inspection the IDL 4.2 specification states under 7.4.1.4.4.3.2
"IDL defines the string type string consisting of a list of all possible 8-bit quantities except null." "IDL defines the string type string consisting of a list of all possible 8-bit quantities except null."
Which means that the bound of a bounded string does not count the NUL byte. Which means that the bound of a bounded string does not count the NUL byte.
* Currently we use one rtps_builtin_endpoint per participant. Meaning that if we want to compile 2 seperate participants we have to actually compile 2 different systems (e.g. in seperate Libraries for testing). * Currently we use one rtps_discovery_module per participant. Meaning that if we want to compile 2 seperate participants we have to actually compile 2 different systems (e.g. in seperate Libraries for testing).
It would make sense to remove this restriction, rename the rtps_builtin_endpoint to something more generic like "discovery_module", and allow a way to set participant boundaries. It would make sense to remove this restriction, rename the rtps_discovery_module to something more generic like "discovery_module", and allow a way to set participant boundaries.
* Convert ROS MSG and SRV files to IDL files * Convert ROS MSG and SRV files to IDL files
ros2 run rosidl_adapter msg2idl.py *.msg ros2 run rosidl_adapter msg2idl.py *.msg
ros2 run rosidl_adapter srv2idl.py *.srv ros2 run rosidl_adapter srv2idl.py *.srv
* The publication_handle of the DDS Specification (e.g. the one returned in the Sample Info) is an implementation specific ID that can identify local and remote DDS Entities LOCALY.
* Fast-RTPS does not follow DDSI-RTPS Specification * Fast-RTPS does not follow DDSI-RTPS Specification
- Open Github Issue - Open Github Issue
@ -200,7 +201,7 @@ DESIGN DECISIONS
- 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 - 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) 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): 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 not stored, and message not for Discovery Module, drop message
- If in memory, replace with refernece index - If in memory, replace with refernece index
The central memory is accessd by 3 Entities: The central memory is accessd by 3 Entities:
- RTPS Handler (READ, GUID Lookup) - RTPS Handler (READ, GUID Lookup)
@ -208,9 +209,9 @@ DESIGN DECISIONS
- 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?] - 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) 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
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 between Delay and Suppression. This reduces the resolution from 0.23 ns to 0.47 ns
(A previous version was using the unused extra flags in the stored participant data)
* Originally we stored the mask of local matching endpoints in the memory frame of the remote endpoint * 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 in order to be able to send MATCH frames only to new matches, and UNMATCH frames only to previously
@ -269,7 +270,7 @@ DESIGN DECISIONS
through the whole memory. Originally the memory was to be implemented in a true dual port fashion, 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 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 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 not allow for state keeping (first empty slot address), since it is reset by the "adding" side, but
set by the "removing" side. Because of this, it was decided against concurrent input handling in 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 light of the fact that the history cache will be most commonly quite large in size, and iterating
through all... through all...
@ -413,12 +414,23 @@ DESIGN DECISIONS
This means that a Reliable RTPS Writer in PUSH_MODE = FALSE cannot communicate with Best Effort Readers. This means that a Reliable RTPS Writer in PUSH_MODE = FALSE cannot communicate with Best Effort Readers.
Historical Data is also only sent out on request (But NACKed in the HC, until the remote Reader ACKs them). Historical Data is also only sent out on request (But NACKed in the HC, until the remote Reader ACKs them).
BRAINSTORMING
-------------
* Add all Participant specific configuration into a generic array (maybe array of record?) and modify the
discovery module to be centric to ALL participants. That means that the Participant Memory will
contain ALL remortely matched participants (even if they are matched only be 1 local participant).
The discovery module will also need to differentiate between the local participants for replies
(Parse RTPPS GUID and set local array index).
The port interface of the discovery module will not change, meaning that ALL the endpoints of all the
local participants will be flattened into one array for communication purposes (Maybe define "static"
demangle package function?).
PROTOCOL UNCOMPLIANCE PROTOCOL UNCOMPLIANCE
===================== =====================
* Partition QoS Not Supported * Partition QoS Not Supported
* Coherent Sets Not Supported * Coherent Sets Not Supported
* Built-in Endpoint is NOT the same as a normal Endpoint * Built-in Endpoints (of Discovery Module) is NOT the same as a normal Endpoint
-> No User access to Data -> No User access to Data
* Known but unused Submessage IDs are treated as uknown * Known but unused Submessage IDs are treated as uknown
-> No validity check -> No validity check

View File

@ -11,7 +11,7 @@ use work.rtps_config_package.all;
use work.rtps_test_package.all; use work.rtps_test_package.all;
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside, -- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
-- this testbench is using external names to access the memory of the rtps_builtin_endpoint directly and check the contents at the supposed participant locations. -- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
-- This testbench covers following: -- This testbench covers following:
-- * Mathing compatible Participants -- * Mathing compatible Participants
-- * Ignoring incompatible Participants -- * Ignoring incompatible Participants
@ -23,10 +23,10 @@ use work.rtps_test_package.all;
-- * PREFER_MULTICAST = TRUE -- * PREFER_MULTICAST = TRUE
entity L0_rtps_builtin_endpoint_test1_mc is entity L0_rtps_discovery_module_test1_mc is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test1_mc is architecture testbench of L0_rtps_discovery_module_test1_mc is
-- *CONSTANT DECLARATION* -- *CONSTANT DECLARATION*
constant MAX_REMOTE_PARTICIPANTS : natural := 3; constant MAX_REMOTE_PARTICIPANTS : natural := 3;
@ -36,16 +36,16 @@ architecture testbench of L0_rtps_builtin_endpoint_test1_mc is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; --TODO: Do that in all testbenches signal reset : std_logic := '1'; --TODO: Do that in all testbenches
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType; shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType;
signal stim_done, mem_check_done, check_done, test_done : std_logic := '0'; signal stim_done, mem_check_done, check_done, test_done : std_logic := '0';
@ -72,7 +72,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test1_mc is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS, MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS,
PREFER_MULTICAST => TRUE PREFER_MULTICAST => TRUE
@ -90,10 +90,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -142,7 +142,7 @@ begin
end procedure; end procedure;
begin begin
SetAlertLogName("rtps_builtin_endpoint - Level 0 - (Prefer Multicast) - Participant Matching"); SetAlertLogName("rtps_discovery_module - Level 0 - (Prefer Multicast) - Participant Matching");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -623,10 +623,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -634,7 +634,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -673,8 +673,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -11,7 +11,7 @@ use work.rtps_config_package.all;
use work.rtps_test_package.all; use work.rtps_test_package.all;
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside, -- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
-- this testbench is using external names to access the memory of the rtps_builtin_endpoint directly and check the contents at the supposed participant locations. -- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
-- This testbench covers following: -- This testbench covers following:
-- * Mathing compatible Participants -- * Mathing compatible Participants
-- * Ignoring incompatible Participants -- * Ignoring incompatible Participants
@ -23,10 +23,10 @@ use work.rtps_test_package.all;
-- * PREFER_MULTICAST = FALSE -- * PREFER_MULTICAST = FALSE
entity L0_rtps_builtin_endpoint_test1_uc is entity L0_rtps_discovery_module_test1_uc is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test1_uc is architecture testbench of L0_rtps_discovery_module_test1_uc is
-- *CONSTANT DECLARATION* -- *CONSTANT DECLARATION*
constant MAX_REMOTE_PARTICIPANTS : natural := 3; constant MAX_REMOTE_PARTICIPANTS : natural := 3;
@ -36,16 +36,16 @@ architecture testbench of L0_rtps_builtin_endpoint_test1_uc is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; --TODO: Do that in all testbenches signal reset : std_logic := '1'; --TODO: Do that in all testbenches
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType; shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType;
signal stim_done, mem_check_done, check_done, test_done : std_logic := '0'; signal stim_done, mem_check_done, check_done, test_done : std_logic := '0';
@ -72,7 +72,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test1_uc is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
@ -89,10 +89,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -141,7 +141,7 @@ begin
end procedure; end procedure;
begin begin
SetAlertLogName("rtps_builtin_endpoint - Level 0 - (Prefer Unicast) - Participant Matching"); SetAlertLogName("rtps_discovery_module - Level 0 - (Prefer Unicast) - Participant Matching");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -605,10 +605,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -616,7 +616,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -655,8 +655,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -97,26 +97,26 @@ use work.rtps_test_package.all;
-- The testbench also tests endpoint unmatching by Unregister/Dispose Status Updates. -- The testbench also tests endpoint unmatching by Unregister/Dispose Status Updates.
entity L0_rtps_builtin_endpoint_test2 is entity L0_rtps_discovery_module_test2 is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test2 is architecture testbench of L0_rtps_discovery_module_test2 is
-- *TYPE DECLARATION* -- *TYPE DECLARATION*
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
type MATCH_MATRIX_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(0 to NUM_READERS-1); type MATCH_MATRIX_TYPE is array (0 to NUM_WRITERS-1) of std_logic_vector(0 to NUM_READERS-1);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
signal MATCH_MATRIX : MATCH_MATRIX_TYPE := (others => (others => '0')); signal MATCH_MATRIX : MATCH_MATRIX_TYPE := (others => (others => '0'));
signal stim_done, check_done : std_logic := '0'; signal stim_done, check_done : std_logic := '0';
@ -144,7 +144,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test2 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => 3 MAX_REMOTE_PARTICIPANTS => 3
) )
@ -161,10 +161,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -252,7 +252,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 0 - Endpoint Matching"); SetAlertLogName("rtps_discovery_module - Level 0 - Endpoint Matching");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -917,10 +917,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -928,7 +928,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -968,8 +968,8 @@ begin
begin begin
check_done <= '0'; check_done <= '0';
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB.Check(wr_ue & last_word_out_ue & data_out_ue); SB.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB.empty) then if (stim_done = '1' and SB.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -11,7 +11,7 @@ use work.rtps_config_package.all;
use work.rtps_test_package.all; use work.rtps_test_package.all;
-- This testbench tests the input handling of parameter lists. We issue one parameter list with invalid parameter length (less than expected) -- This testbench tests the input handling of parameter lists. We issue one parameter list with invalid parameter length (less than expected)
-- and one with valid larger parameter length (extra Bytes after expected parameter end) for each of the parameters that are handled by the built-in endpoint by checking if the Participant/Endpoint matched. -- and one with valid larger parameter length (extra Bytes after expected parameter end) for each of the parameters that are handled by the Discovery Module by checking if the Participant/Endpoint matched.
-- (We also issue a parameter list that is missing its sentinel) -- (We also issue a parameter list that is missing its sentinel)
-- Particpant matches are checked by memory content, and Endpoint matches by the generated match frame. -- Particpant matches are checked by memory content, and Endpoint matches by the generated match frame.
-- The PIDs handled are: -- The PIDs handled are:
@ -43,10 +43,10 @@ use work.rtps_test_package.all;
-- * PID_KEY_HASH -- * PID_KEY_HASH
-- * PID_STATUS_INFO -- * PID_STATUS_INFO
entity L0_rtps_builtin_endpoint_test3 is entity L0_rtps_discovery_module_test3 is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test3 is architecture testbench of L0_rtps_discovery_module_test3 is
-- *CONSTANT DECLARATION* -- *CONSTANT DECLARATION*
constant MAX_REMOTE_PARTICIPANTS : natural := 11; constant MAX_REMOTE_PARTICIPANTS : natural := 11;
@ -56,16 +56,16 @@ architecture testbench of L0_rtps_builtin_endpoint_test3 is
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType; shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType;
signal stim_done, check_done, mem_check_done, test_done : std_logic := '0'; signal stim_done, check_done, mem_check_done, test_done : std_logic := '0';
@ -92,7 +92,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test3 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
@ -109,10 +109,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -193,7 +193,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 0 - Input Handling"); SetAlertLogName("rtps_discovery_module - Level 0 - Input Handling");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1315,10 +1315,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -1326,7 +1326,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -1365,8 +1365,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -12,10 +12,10 @@ use work.rtps_test_package.all;
-- This testbench tests the SequenceNumber, HEARTBEAT, and GAP handling of the Participant, Subscriber, Publisher, and ParticipantMessage DATA Submessages. -- This testbench tests the SequenceNumber, HEARTBEAT, and GAP handling of the Participant, Subscriber, Publisher, and ParticipantMessage DATA Submessages.
entity L0_rtps_builtin_endpoint_test4 is entity L0_rtps_discovery_module_test4 is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test4 is architecture testbench of L0_rtps_discovery_module_test4 is
-- *CONSTANT DECLARATION* -- *CONSTANT DECLARATION*
constant MAX_REMOTE_PARTICIPANTS : natural := 1; constant MAX_REMOTE_PARTICIPANTS : natural := 1;
@ -25,16 +25,16 @@ architecture testbench of L0_rtps_builtin_endpoint_test4 is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType; shared variable SB_mem : work.ScoreBoardPkg_MemoryTest.ScoreBoardPType;
signal stim_done, mem_check_done, check_done, test_done : std_logic := '0'; signal stim_done, mem_check_done, check_done, test_done : std_logic := '0';
@ -69,7 +69,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test4 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
@ -86,10 +86,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -186,7 +186,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 0 - Sequence Number Handling"); SetAlertLogName("rtps_discovery_module - Level 0 - Sequence Number Handling");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1774,10 +1774,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -1785,7 +1785,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -1824,8 +1824,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -10,15 +10,15 @@ use work.user_config.all;
use work.rtps_config_package.all; use work.rtps_config_package.all;
use work.rtps_test_package.all; use work.rtps_test_package.all;
-- This testbench tests the stale participant handling of the rtps_builtin_endpoint. It does so by checking for the Participant Unmatch Frame. -- This testbench tests the stale participant handling of the rtps_discovery_module. It does so by checking for the Participant Unmatch Frame.
-- It first matches 3 Participants: Participant 0 with default lease duration 100s, Participant 1 with lease duration 10s, and Participant 2 with lease duration 30s. -- It first matches 3 Participants: Participant 0 with default lease duration 100s, Participant 1 with lease duration 10s, and Participant 2 with lease duration 30s.
-- After matching the time is artificially progressed to 15s (from 0s), and the removal of Participant 1 is checked. Than the time is again artificially progressed to 101s -- After matching the time is artificially progressed to 15s (from 0s), and the removal of Participant 1 is checked. Than the time is again artificially progressed to 101s
-- and the removal of Participant 0 and 2 is checked (in that order). -- and the removal of Participant 0 and 2 is checked (in that order).
entity L0_rtps_builtin_endpoint_test5 is entity L0_rtps_discovery_module_test5 is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test5 is architecture testbench of L0_rtps_discovery_module_test5 is
-- *CONSTANT DECLARATION* -- *CONSTANT DECLARATION*
constant MAX_REMOTE_PARTICIPANTS : natural := 3; constant MAX_REMOTE_PARTICIPANTS : natural := 3;
@ -28,16 +28,16 @@ architecture testbench of L0_rtps_builtin_endpoint_test5 is
type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0); type TEST_RAM_TYPE is array (0 to (MAX_REMOTE_PARTICIPANTS*PARTICIPANT_FRAME_SIZE)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
signal stim_done, check_done, test_done : std_logic := '0'; signal stim_done, check_done, test_done : std_logic := '0';
signal test_time : TIME_TYPE := TIME_ZERO; signal test_time : TIME_TYPE := TIME_ZERO;
@ -65,7 +65,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test5 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS
) )
@ -82,10 +82,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -163,7 +163,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 0 - Stale Participant Handling"); SetAlertLogName("rtps_discovery_module - Level 0 - Stale Participant Handling");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -308,10 +308,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -319,7 +319,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -358,8 +358,8 @@ begin
output_check_prc : process(all) output_check_prc : process(all)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -14,25 +14,25 @@ use work.rtps_test_package.all;
-- The testbench matches 2 remote Participants, P0 and P1. P0 sends an automatic liveliness assertion, while P1 sends a manual liveliness assertion. -- The testbench matches 2 remote Participants, P0 and P1. P0 sends an automatic liveliness assertion, while P1 sends a manual liveliness assertion.
-- P0 also sends a manual liveliness assertion with extra Bytes. -- P0 also sends a manual liveliness assertion with extra Bytes.
entity L0_rtps_builtin_endpoint_test6 is entity L0_rtps_discovery_module_test6 is
end entity; end entity;
architecture testbench of L0_rtps_builtin_endpoint_test6 is architecture testbench of L0_rtps_discovery_module_test6 is
-- *TYPE DECLARATION* -- *TYPE DECLARATION*
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, in_empty, rd_sig, last_word_in, last_word_out_ue: std_logic := '0'; signal clk, in_empty, rd_sig, last_word_in, last_word_out_rtps: std_logic := '0';
signal reset : std_logic := '1'; signal reset : std_logic := '1';
signal wr_ue, full_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal wr_rtps, full_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent : std_logic := '0'; signal packet_sent : std_logic := '0';
signal cnt_stim : natural := 0; signal cnt_stim : natural := 0;
signal start : std_logic := '0'; signal start : std_logic := '0';
shared variable SB_out : work.ScoreBoardPkg_builtin_endpoint.ScoreBoardPType; shared variable SB_out : work.ScoreBoardPkg_discovery_module.ScoreBoardPType;
signal stim_done, check_done, mem_check : std_logic := '0'; signal stim_done, check_done, mem_check : std_logic := '0';
-- *FUNCTION DECLARATION* -- *FUNCTION DECLARATION*
@ -52,7 +52,7 @@ architecture testbench of L0_rtps_builtin_endpoint_test6 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => 2 MAX_REMOTE_PARTICIPANTS => 2
) )
@ -69,10 +69,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => (others => '0'), alive => (others => '0'),
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue, last_word_out_rtps => last_word_out_rtps,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => '0', full_ro => '0',
wr_ro => open, wr_ro => open,
@ -120,7 +120,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 0 - Remote Liveliness Assertion Handling"); SetAlertLogName("rtps_discovery_module - Level 0 - Remote Liveliness Assertion Handling");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -285,10 +285,10 @@ begin
endpoint_full_prc : process endpoint_full_prc : process
begin begin
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until (or wr_ue) = '1'; wait until (or wr_rtps) = '1';
wait until rising_edge(clk); wait until rising_edge(clk);
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -296,7 +296,7 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "Endpoint FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -336,8 +336,8 @@ begin
begin begin
check_done <= '0'; check_done <= '0';
if rising_edge(clk) then if rising_edge(clk) then
if (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then if (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
SB_out.Check(wr_ue & last_word_out_ue & data_out_ue); SB_out.Check(wr_rtps & last_word_out_rtps & data_out_rtps);
end if; end if;
if (stim_done = '1' and SB_out.empty) then if (stim_done = '1' and SB_out.empty) then
check_done <= '1'; check_done <= '1';

View File

@ -88,9 +88,9 @@ architecture testbench of L0_rtps_handler_test1 is
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, reset, in_empty, rd_sig, full_be, wr_be, last_word_out_be, last_word_out_ue : std_logic := '0'; signal clk, reset, in_empty, rd_sig, full_dm, wr_dm, last_word_out_dm, last_word_out_rtps : std_logic := '0';
signal full_ue, wr_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal full_rtps, wr_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_be, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_dm, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage, ref_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage, ref_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, reference : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent, packet_checked : std_logic := '0'; signal packet_sent, packet_checked : std_logic := '0';
@ -118,16 +118,16 @@ begin
empty => in_empty or packet_sent, empty => in_empty or packet_sent,
rd => rd_sig, rd => rd_sig,
data_in => data_in, data_in => data_in,
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_be, full_dm => full_dm,
wr_be => wr_be, wr_dm => wr_dm,
data_out_be => data_out_be, data_out_dm => data_out_dm,
last_word_out_be => last_word_out_be, last_word_out_dm => last_word_out_dm,
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue last_word_out_rtps => last_word_out_rtps
); );
stimulus_prc : process stimulus_prc : process
@ -1506,20 +1506,20 @@ begin
fifo_ctl_prc : process fifo_ctl_prc : process
begin begin
in_empty <= '0'; in_empty <= '0';
full_be <= '0'; full_dm <= '0';
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until rising_edge(clk); wait until rising_edge(clk);
in_empty <= '1'; in_empty <= '1';
full_be <= '0'; full_dm <= '0';
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until rising_edge(clk); wait until rising_edge(clk);
in_empty <= '0'; in_empty <= '0';
full_be <= '1'; full_dm <= '1';
full_ue <= (others => '0'); full_rtps <= (others => '0');
wait until rising_edge(clk); wait until rising_edge(clk);
in_empty <= '0'; in_empty <= '0';
full_be <= '0'; full_dm <= '0';
full_ue <= (others => '1'); full_rtps <= (others => '1');
wait until rising_edge(clk); wait until rising_edge(clk);
end process; end process;
@ -1527,8 +1527,8 @@ begin
begin begin
if rising_edge(clk) then if rising_edge(clk) then
alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR); alertif(in_empty = '1' and rd_sig = '1', "Input FIFO read signal high while empty signal high", ERROR);
alertif(full_be = '1' and wr_be = '1', "Builtin FIFO write signal high while full signal high", ERROR); alertif(full_dm = '1' and wr_dm = '1', "DIscovery Module FIFO write signal high while full signal high", ERROR);
alertif(full_ue /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')), "User FIFO write signal high while full signal high", ERROR); alertif(full_rtps /= (0 to NUM_ENDPOINTS-1 => '0') and (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')), "User FIFO write signal high while full signal high", ERROR);
end if; end if;
end process; end process;
@ -1586,11 +1586,11 @@ begin
when BUSY => when BUSY =>
if (cnt_ref = reference.length) then if (cnt_ref = reference.length) then
ref_stage <= IDLE; ref_stage <= IDLE;
elsif (wr_be = '1') then elsif (wr_dm = '1') then
AffirmIfEqual(last_word_out_be & data_out_be, reference.last(cnt_ref) & reference.data(cnt_ref)); AffirmIfEqual(last_word_out_dm & data_out_dm, reference.last(cnt_ref) & reference.data(cnt_ref));
cnt_ref <= cnt_ref + 1; cnt_ref <= cnt_ref + 1;
elsif (wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then elsif (wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
AffirmIfEqual(last_word_out_ue & data_out_ue, reference.last(cnt_ref) & reference.data(cnt_ref)); AffirmIfEqual(last_word_out_rtps & data_out_rtps, reference.last(cnt_ref) & reference.data(cnt_ref));
cnt_ref <= cnt_ref + 1; cnt_ref <= cnt_ref + 1;
end if; end if;
end case; end case;

View File

@ -26,9 +26,9 @@ architecture testbench of L0_rtps_handler_test2 is
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
-- *SIGNAL DECLARATION* -- *SIGNAL DECLARATION*
signal clk, reset, in_empty, rd_sig, full_be, wr_be, last_word_out_be, last_word_out_ue : std_logic := '0'; signal clk, reset, in_empty, rd_sig, full_dm, wr_dm, last_word_out_dm, last_word_out_rtps : std_logic := '0';
signal full_ue, wr_ue : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0'); signal full_rtps, wr_rtps : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
signal data_in, data_out_be, data_out_ue : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0'); signal data_in, data_out_dm, data_out_rtps : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal stim_stage, ref_stage : TEST_STAGE_TYPE := IDLE; signal stim_stage, ref_stage : TEST_STAGE_TYPE := IDLE;
shared variable stimulus, dummy : TEST_PACKET_TYPE := EMPTY_TEST_PACKET; shared variable stimulus, dummy : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
signal packet_sent, packet_checked : std_logic := '0'; signal packet_sent, packet_checked : std_logic := '0';
@ -57,16 +57,16 @@ begin
empty => in_empty or packet_sent, empty => in_empty or packet_sent,
rd => rd_sig, rd => rd_sig,
data_in => data_in, data_in => data_in,
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_be, full_dm => full_dm,
wr_be => wr_be, wr_dm => wr_dm,
data_out_be => data_out_be, data_out_dm => data_out_dm,
last_word_out_be => last_word_out_be, last_word_out_dm => last_word_out_dm,
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => full_ue, full_rtps => full_rtps,
wr_ue => wr_ue, wr_rtps => wr_rtps,
data_out_ue => data_out_ue, data_out_rtps => data_out_rtps,
last_word_out_ue => last_word_out_ue last_word_out_rtps => last_word_out_rtps
); );
stimulus_prc : process stimulus_prc : process
@ -119,8 +119,8 @@ begin
Log("Initiating Test", INFO); Log("Initiating Test", INFO);
in_empty <= '0'; in_empty <= '0';
full_be <= '0'; full_dm <= '0';
full_ue <= (others => '0'); full_rtps <= (others => '0');
start <= '0'; start <= '0';
reset <= '1'; reset <= '1';
wait until rising_edge(clk); wait until rising_edge(clk);
@ -299,8 +299,8 @@ begin
when BUSY => when BUSY =>
if (cnt_ref = dummy.length) then if (cnt_ref = dummy.length) then
ref_stage <= IDLE; ref_stage <= IDLE;
elsif (wr_be = '1' or wr_ue /= (0 to NUM_ENDPOINTS-1 => '0')) then elsif (wr_dm = '1' or wr_rtps /= (0 to NUM_ENDPOINTS-1 => '0')) then
AffirmIfEqual((wr_ue & wr_be), reference); AffirmIfEqual((wr_rtps & wr_dm), reference);
cnt_ref <= cnt_ref + 1; cnt_ref <= cnt_ref + 1;
end if; end if;
end case; end case;

View File

@ -10,7 +10,7 @@ use work.user_config.all;
use work.rtps_config_package.all; use work.rtps_config_package.all;
use work.rtps_test_package.all; use work.rtps_test_package.all;
-- This testbench tests the rtps output of the builtin endpoint (Local Liveliness Assertion, Local Heartbeat Generation, Local Participant Announcement, Remote HEARTBEAT Response, Remote ACKNACK Response). -- This testbench tests the rtps output of the Discovery Module (Local Liveliness Assertion, Local Heartbeat Generation, Local Participant Announcement, Remote HEARTBEAT Response, Remote ACKNACK Response).
-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators. -- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators.
-- The testflow is as follows: -- The testflow is as follows:
-- * 0s -- * 0s
@ -73,10 +73,10 @@ use work.rtps_test_package.all;
-- - Liveliness Assertion (Auto only) -- - Liveliness Assertion (Auto only)
entity L1_rtps_builtin_endpoint_test1 is entity L1_rtps_discovery_module_test1 is
end entity; end entity;
architecture testbench of L1_rtps_builtin_endpoint_test1 is architecture testbench of L1_rtps_discovery_module_test1 is
-- *TYPE DECLARATION* -- *TYPE DECLARATION*
type TEST_STAGE_TYPE is (IDLE, BUSY); type TEST_STAGE_TYPE is (IDLE, BUSY);
@ -384,7 +384,7 @@ architecture testbench of L1_rtps_builtin_endpoint_test1 is
begin begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_builtin_endpoint(arch) uut : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => 1 MAX_REMOTE_PARTICIPANTS => 1
) )
@ -401,10 +401,10 @@ begin
-- FROM USER ENDPOINT -- FROM USER ENDPOINT
alive => alive, alive => alive,
-- TO USER ENDPOINT -- TO USER ENDPOINT
full_ue => (others => '0'), full_rtps => (others => '0'),
wr_ue => open, wr_rtps => open,
data_out_ue => open, data_out_rtps => open,
last_word_out_ue => open, last_word_out_rtps => open,
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => fifo_full, full_ro => fifo_full,
wr_ro => fifo_wr, wr_ro => fifo_wr,
@ -507,7 +507,7 @@ begin
assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE; assert (TEST_STRING = "TEST_CONFIG_1") report "user_config incompatible with testbench." severity FAILURE;
SetAlertLogName("rtps_builtin_endpoint - Level 1 - RTPS Output"); SetAlertLogName("rtps_discovery_module - Level 1 - RTPS Output");
SetAlertEnable(FAILURE, TRUE); SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -213,12 +213,12 @@ begin
rd_user => rd_rh(0), rd_user => rd_rh(0),
data_in_user => data_out_rh(0)(WORD_WIDTH-1 downto 0), data_in_user => data_out_rh(0)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_out_rh(0)(WORD_WIDTH), last_word_in_user => data_out_rh(0)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_rtps(0), empty_meta => empty_rtps(0),
rd_meta => rd_rtps(0), rd_meta => rd_rtps(0),
data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0), data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_out_rtps(0)(WORD_WIDTH), last_word_in_meta => data_out_rtps(0)(WORD_WIDTH),
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO DISCOVERY MODULE (META TRAFFIC)
alive_sig => alive_sig_rtps(0), alive_sig => alive_sig_rtps(0),
-- RTPS OUTPUT -- RTPS OUTPUT
wr_ro => wr_rtps_out(0), wr_ro => wr_rtps_out(0),
@ -245,7 +245,7 @@ begin
cc_seq_nr => cc_seq_nr_dds_rtps cc_seq_nr => cc_seq_nr_dds_rtps
); );
rtps_builtin_endpoint_w_inst : entity Testbench_Lib2.rtps_builtin_endpoint(arch) rtps_discovery_module_w_inst : entity Testbench_Lib2.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => 5, MAX_REMOTE_PARTICIPANTS => 5,
PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS
@ -262,10 +262,10 @@ begin
-- FROM USER ENDPOINTS -- FROM USER ENDPOINTS
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1), alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_rtps(0 to NUM_ENDPOINTS-1), full_rtps => full_rtps(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rtps(0 to NUM_ENDPOINTS-1), wr_rtps => wr_rtps(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rbe, data_out_rtps => data_out_rbe,
last_word_out_ue => last_word_out_rbe, last_word_out_rtps => last_word_out_rbe,
-- TO RTPS OUT -- TO RTPS OUT
full_ro => full_rtps_out(NUM_ENDPOINTS), full_ro => full_rtps_out(NUM_ENDPOINTS),
wr_ro => wr_rtps_out(NUM_ENDPOINTS), wr_ro => wr_rtps_out(NUM_ENDPOINTS),
@ -284,16 +284,16 @@ begin
empty => empty, empty => empty,
rd => rd, rd => rd,
data_in => data_in, data_in => data_in,
-- TO RTPS BUILTIN ENDPOINT -- TO RTPS DISCOVERY MODULE
full_be => full_rh(NUM_ENDPOINTS), full_dm => full_rh(NUM_ENDPOINTS),
wr_be => wr_rh(NUM_ENDPOINTS), wr_dm => wr_rh(NUM_ENDPOINTS),
data_out_be => data_out_rh_be_s, data_out_dm => data_out_rh_be_s,
last_word_out_be => last_word_out_rh_be_s, last_word_out_dm => last_word_out_rh_be_s,
-- TO RTPS ENDPOINT -- TO RTPS ENDPOINT
full_ue => full_rh(0 to NUM_ENDPOINTS-1), full_rtps => full_rh(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rh(0 to NUM_ENDPOINTS-1), wr_rtps => wr_rh(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rh_ue_s, data_out_rtps => data_out_rh_ue_s,
last_word_out_ue => last_word_out_rh_ue_s last_word_out_rtps => last_word_out_rh_ue_s
); );
data_in_rh <= (NUM_ENDPOINTS => (last_word_out_rh_be_s & data_out_rh_be_s), others => (last_word_out_rh_ue_s & data_out_rh_ue_s)); data_in_rh <= (NUM_ENDPOINTS => (last_word_out_rh_be_s & data_out_rh_be_s), others => (last_word_out_rh_ue_s & data_out_rh_ue_s));

View File

@ -280,7 +280,7 @@ begin
rd_user => rd_rh(0), rd_user => rd_rh(0),
data_in_user => data_out_rh(0)(WORD_WIDTH-1 downto 0), data_in_user => data_out_rh(0)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_out_rh(0)(WORD_WIDTH), last_word_in_user => data_out_rh(0)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_rtps(0), empty_meta => empty_rtps(0),
rd_meta => rd_rtps(0), rd_meta => rd_rtps(0),
data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0), data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0),
@ -302,7 +302,7 @@ begin
last_word_out_hc => last_word_in_dds_rtps last_word_out_hc => last_word_in_dds_rtps
); );
rtps_builtin_endpoint_r_inst : entity Testbench_Lib3.rtps_builtin_endpoint(arch) rtps_discovery_module_r_inst : entity Testbench_Lib3.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => 5, MAX_REMOTE_PARTICIPANTS => 5,
PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS
@ -319,10 +319,10 @@ begin
-- FROM USER ENDPOINTS -- FROM USER ENDPOINTS
alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1), alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1),
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_rtps(0 to NUM_ENDPOINTS-1), full_rtps => full_rtps(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rtps(0 to NUM_ENDPOINTS-1), wr_rtps => wr_rtps(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rbe, data_out_rtps => data_out_rbe,
last_word_out_ue => last_word_out_rbe, last_word_out_rtps => last_word_out_rbe,
-- TO RTPS OUT -- TO RTPS OUT
full_ro => full_rtps_out(NUM_ENDPOINTS), full_ro => full_rtps_out(NUM_ENDPOINTS),
wr_ro => wr_rtps_out(NUM_ENDPOINTS), wr_ro => wr_rtps_out(NUM_ENDPOINTS),
@ -341,16 +341,16 @@ begin
empty => empty, empty => empty,
rd => rd, rd => rd,
data_in => data_in, data_in => data_in,
-- TO RTPS BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_rh(NUM_ENDPOINTS), full_dm => full_rh(NUM_ENDPOINTS),
wr_be => wr_rh(NUM_ENDPOINTS), wr_dm => wr_rh(NUM_ENDPOINTS),
data_out_be => data_out_rh_be_s, data_out_dm => data_out_rh_be_s,
last_word_out_be => last_word_out_rh_be_s, last_word_out_dm => last_word_out_rh_be_s,
-- TO RTPS ENDPOINT -- TO RTPS ENDPOINT
full_ue => full_rh(0 to NUM_ENDPOINTS-1), full_rtps => full_rh(0 to NUM_ENDPOINTS-1),
wr_ue => wr_rh(0 to NUM_ENDPOINTS-1), wr_rtps => wr_rh(0 to NUM_ENDPOINTS-1),
data_out_ue => data_out_rh_ue_s, data_out_rtps => data_out_rh_ue_s,
last_word_out_ue => last_word_out_rh_ue_s last_word_out_rtps => last_word_out_rh_ue_s
); );
data_in_rh <= (NUM_ENDPOINTS => (last_word_out_rh_be_s & data_out_rh_be_s), others => (last_word_out_rh_ue_s & data_out_rh_ue_s)); data_in_rh <= (NUM_ENDPOINTS => (last_word_out_rh_be_s & data_out_rh_be_s), others => (last_word_out_rh_ue_s & data_out_rh_ue_s));

View File

@ -150,16 +150,16 @@ begin
empty => empty, empty => empty,
rd => read, rd => read,
data_in => data_in, data_in => data_in,
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_firb_rh, full_dm => full_firb_rh,
wr_be => write_rh_firb, wr_dm => write_rh_firb,
data_out_be => data_rh_firb(WORD_WIDTH-1 downto 0), data_out_dm => data_rh_firb(WORD_WIDTH-1 downto 0),
last_word_out_be => data_rh_firb(WORD_WIDTH), last_word_out_dm => data_rh_firb(WORD_WIDTH),
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_fire_rh, full_rtps => full_fire_rh,
wr_ue => write_rh_fire, wr_rtps => write_rh_fire,
data_out_ue => data_rh_fire(WORD_WIDTH-1 downto 0), data_out_rtps => data_rh_fire(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rh_fire(WORD_WIDTH) last_word_out_rtps => data_rh_fire(WORD_WIDTH)
); );
@ -209,7 +209,7 @@ begin
end generate; end generate;
rtps_builtin_endpoint_inst : entity work.rtps_builtin_endpoint(arch) rtps_discovery_module_inst : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS, MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS,
PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS
@ -226,10 +226,10 @@ begin
-- FROM USER ENDPOINTS -- FROM USER ENDPOINTS
alive => alive_re_rb, alive => alive_re_rb,
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_frbre_re, full_rtps => full_frbre_re,
wr_ue => write_rb_frbre, wr_rtps => write_rb_frbre,
data_out_ue => data_rb_frbre(WORD_WIDTH-1 downto 0), data_out_rtps => data_rb_frbre(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rb_frbre(WORD_WIDTH), last_word_out_rtps => data_rb_frbre(WORD_WIDTH),
-- TO RTPS OUT -- TO RTPS OUT
full_ro => full_firo_rb, full_ro => full_firo_rb,
wr_ro => write_rb_firo, wr_ro => write_rb_firo,
@ -286,7 +286,7 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_frbre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_frbre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0),
@ -337,12 +337,12 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_frbre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_frbre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_frbre_re(i)(WORD_WIDTH), last_word_in_meta => data_frbre_re(i)(WORD_WIDTH),
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO DISCOVERY MODULE (META TRAFFIC)
alive_sig => alive_re_rb(i), alive_sig => alive_re_rb(i),
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => full_firo_re(i), full_ro => full_firo_re(i),

View File

@ -172,16 +172,16 @@ begin
empty => empty, empty => empty,
rd => read, rd => read,
data_in => data_in, data_in => data_in,
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be => full_firb_rh, full_dm => full_firb_rh,
wr_be => write_rh_firb, wr_dm => write_rh_firb,
data_out_be => data_rh_firb(WORD_WIDTH-1 downto 0), data_out_dm => data_rh_firb(WORD_WIDTH-1 downto 0),
last_word_out_be => data_rh_firb(WORD_WIDTH), last_word_out_dm => data_rh_firb(WORD_WIDTH),
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_fire_rh, full_rtps => full_fire_rh,
wr_ue => write_rh_fire, wr_rtps => write_rh_fire,
data_out_ue => data_rh_fire(WORD_WIDTH-1 downto 0), data_out_rtps => data_rh_fire(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rh_fire(WORD_WIDTH) last_word_out_rtps => data_rh_fire(WORD_WIDTH)
); );
@ -231,7 +231,7 @@ begin
end generate; end generate;
rtps_builtin_endpoint_inst : entity work.rtps_builtin_endpoint(arch) rtps_discovery_module_inst : entity work.rtps_discovery_module(arch)
generic map ( generic map (
MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS, MAX_REMOTE_PARTICIPANTS => MAX_REMOTE_PARTICIPANTS,
PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS PREFER_MULTICAST => PREFER_MULTICAST_LOCATORS
@ -248,10 +248,10 @@ begin
-- FROM USER ENDPOINTS -- FROM USER ENDPOINTS
alive => alive_re_rb, alive => alive_re_rb,
-- TO USER ENDPOINTS -- TO USER ENDPOINTS
full_ue => full_frbre_re, full_rtps => full_frbre_re,
wr_ue => write_rb_frbre, wr_rtps => write_rb_frbre,
data_out_ue => data_rb_frbre(WORD_WIDTH-1 downto 0), data_out_rtps => data_rb_frbre(WORD_WIDTH-1 downto 0),
last_word_out_ue => data_rb_frbre(WORD_WIDTH), last_word_out_rtps => data_rb_frbre(WORD_WIDTH),
-- TO RTPS OUT -- TO RTPS OUT
full_ro => full_firo_rb, full_ro => full_firo_rb,
wr_ro => write_rb_firo, wr_ro => write_rb_firo,
@ -308,7 +308,7 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_frbre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_frbre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0),
@ -359,12 +359,12 @@ begin
rd_user => read_re_fire(i), rd_user => read_re_fire(i),
data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0), data_in_user => data_fire_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_user => data_fire_re(i)(WORD_WIDTH), last_word_in_user => data_fire_re(i)(WORD_WIDTH),
-- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta => empty_frbre_re(i), empty_meta => empty_frbre_re(i),
rd_meta => read_re_frbre(i), rd_meta => read_re_frbre(i),
data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0), data_in_meta => data_frbre_re(i)(WORD_WIDTH-1 downto 0),
last_word_in_meta => data_frbre_re(i)(WORD_WIDTH), last_word_in_meta => data_frbre_re(i)(WORD_WIDTH),
-- TO RTPS_BUILTIN_ENDPOINT (META TRAFFIC) -- TO DISCOVERY MODULE (META TRAFFIC)
alive_sig => alive_re_rb(i), alive_sig => alive_re_rb(i),
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro => full_firo_re(i), full_ro => full_firo_re(i),

View File

@ -7,7 +7,7 @@ context osvvm.OsvvmContext;
use work.rtps_test_package.all; use work.rtps_test_package.all;
package ScoreBoardPkg_builtin_endpoint is new osvvm.ScoreboardGenericPkg package ScoreBoardPkg_discovery_module is new osvvm.ScoreboardGenericPkg
generic map ( generic map (
ExpectedType => std_logic_vector, ExpectedType => std_logic_vector,
ActualType => std_logic_vector, ActualType => std_logic_vector,

View File

@ -19,7 +19,7 @@ analyze ../FWFT_FIFO_cfg.vhd
analyze ../mem_ctrl.vhd analyze ../mem_ctrl.vhd
analyze ../dp_mem_ctrl.vhd analyze ../dp_mem_ctrl.vhd
analyze ../rtps_handler.vhd analyze ../rtps_handler.vhd
analyze ../rtps_builtin_endpoint.vhd analyze ../rtps_discovery_module.vhd
analyze ../rtps_out.vhd analyze ../rtps_out.vhd
analyze ../rtps_reader.vhd analyze ../rtps_reader.vhd
analyze ../rtps_writer.vhd analyze ../rtps_writer.vhd
@ -53,7 +53,7 @@ analyze FWFT_FIFO_cfg.vhd
analyze ../mem_ctrl.vhd analyze ../mem_ctrl.vhd
analyze ../dp_mem_ctrl.vhd analyze ../dp_mem_ctrl.vhd
analyze ../rtps_handler.vhd analyze ../rtps_handler.vhd
analyze ../rtps_builtin_endpoint.vhd analyze ../rtps_discovery_module.vhd
analyze ../rtps_out.vhd analyze ../rtps_out.vhd
analyze ../rtps_reader.vhd analyze ../rtps_reader.vhd
analyze ../rtps_writer.vhd analyze ../rtps_writer.vhd
@ -87,7 +87,7 @@ analyze ../FWFT_FIFO_cfg.vhd
analyze ../mem_ctrl.vhd analyze ../mem_ctrl.vhd
analyze ../dp_mem_ctrl.vhd analyze ../dp_mem_ctrl.vhd
analyze ../rtps_handler.vhd analyze ../rtps_handler.vhd
analyze ../rtps_builtin_endpoint.vhd analyze ../rtps_discovery_module.vhd
analyze ../rtps_out.vhd analyze ../rtps_out.vhd
analyze ../rtps_reader.vhd analyze ../rtps_reader.vhd
analyze ../rtps_writer.vhd analyze ../rtps_writer.vhd
@ -122,7 +122,7 @@ analyze FWFT_FIFO_cfg.vhd
analyze ../mem_ctrl.vhd analyze ../mem_ctrl.vhd
analyze ../dp_mem_ctrl.vhd analyze ../dp_mem_ctrl.vhd
analyze ../rtps_handler.vhd analyze ../rtps_handler.vhd
analyze ../rtps_builtin_endpoint.vhd analyze ../rtps_discovery_module.vhd
analyze ../rtps_out.vhd analyze ../rtps_out.vhd
analyze ../rtps_reader.vhd analyze ../rtps_reader.vhd
analyze ../rtps_writer.vhd analyze ../rtps_writer.vhd
@ -158,7 +158,7 @@ analyze FWFT_FIFO_cfg.vhd
analyze ../mem_ctrl.vhd analyze ../mem_ctrl.vhd
analyze ../dp_mem_ctrl.vhd analyze ../dp_mem_ctrl.vhd
analyze ../rtps_handler.vhd analyze ../rtps_handler.vhd
analyze ../rtps_builtin_endpoint.vhd analyze ../rtps_discovery_module.vhd
analyze ../rtps_out.vhd analyze ../rtps_out.vhd
analyze ../rtps_reader.vhd analyze ../rtps_reader.vhd
analyze ../rtps_writer.vhd analyze ../rtps_writer.vhd
@ -177,18 +177,18 @@ analyze Type2_writer_interface.vhd
analyze Type2_key_holder.vhd analyze Type2_key_holder.vhd
analyze test_key_holder.vhd analyze test_key_holder.vhd
analyze ScoreBoard_test_memory.vhd analyze ScoreBoard_test_memory.vhd
analyze ScoreBoard_builtin_endpoint.vhd analyze ScoreBoard_discovery_module.vhd
analyze Level_0/L0_rtps_handler_test1.vhd analyze Level_0/L0_rtps_handler_test1.vhd
analyze Level_0/L0_rtps_handler_test2.vhd analyze Level_0/L0_rtps_handler_test2.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test1_uc.vhd analyze Level_0/L0_rtps_discovery_module_test1_uc.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test1_mc.vhd analyze Level_0/L0_rtps_discovery_module_test1_mc.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test2.vhd analyze Level_0/L0_rtps_discovery_module_test2.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test3.vhd analyze Level_0/L0_rtps_discovery_module_test3.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test4.vhd analyze Level_0/L0_rtps_discovery_module_test4.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test5.vhd analyze Level_0/L0_rtps_discovery_module_test5.vhd
analyze Level_0/L0_rtps_builtin_endpoint_test6.vhd analyze Level_0/L0_rtps_discovery_module_test6.vhd
analyze Level_0/L0_rtps_out_test1.vhd analyze Level_0/L0_rtps_out_test1.vhd
analyze Level_1/L1_rtps_builtin_endpoint_test1.vhd analyze Level_1/L1_rtps_discovery_module_test1.vhd
analyze Level_0/L0_mem_ctrl_test1.vhd analyze Level_0/L0_mem_ctrl_test1.vhd
analyze Level_0/L0_rtps_reader_test1_vrk.vhd analyze Level_0/L0_rtps_reader_test1_vrk.vhd
analyze Level_0/L0_rtps_reader_test1_vbk.vhd analyze Level_0/L0_rtps_reader_test1_vbk.vhd
@ -259,14 +259,14 @@ simulate L0_rtps_handler_test1
simulate L0_rtps_handler_test2 simulate L0_rtps_handler_test2
simulate L0_rtps_out_test1 simulate L0_rtps_out_test1
simulate L0_mem_ctrl_test1 simulate L0_mem_ctrl_test1
simulate L0_rtps_builtin_endpoint_test1_uc simulate L0_rtps_discovery_module_test1_uc
simulate L0_rtps_builtin_endpoint_test1_mc simulate L0_rtps_discovery_module_test1_mc
simulate L0_rtps_builtin_endpoint_test2 simulate L0_rtps_discovery_module_test2
simulate L0_rtps_builtin_endpoint_test3 simulate L0_rtps_discovery_module_test3
simulate L0_rtps_builtin_endpoint_test4 simulate L0_rtps_discovery_module_test4
simulate L0_rtps_builtin_endpoint_test5 simulate L0_rtps_discovery_module_test5
simulate L0_rtps_builtin_endpoint_test6 simulate L0_rtps_discovery_module_test6
simulate L1_rtps_builtin_endpoint_test1 simulate L1_rtps_discovery_module_test1
simulate L0_rtps_reader_test1_vrk simulate L0_rtps_reader_test1_vrk
simulate L0_rtps_reader_test1_vbk simulate L0_rtps_reader_test1_vbk
simulate L0_rtps_reader_test2_vrk simulate L0_rtps_reader_test2_vrk

View File

@ -105,4 +105,4 @@ message.TestString = "HelloWorld";
6f 57 6f 72 6f 57 6f 72
| TestString[8] | TestString[9] | TestString[10]|###############| | TestString[8] | TestString[9] | TestString[10]|###############|
6c 64 00 6c 64 00
+---------------------------------------------------------------+

View File

@ -10,7 +10,7 @@ use work.rtps_package.all;
use work.user_config.all; use work.user_config.all;
use work.rtps_config_package.all; use work.rtps_config_package.all;
entity rtps_builtin_endpoint is entity rtps_discovery_module is
generic ( generic (
PREFER_MULTICAST : boolean := FALSE; PREFER_MULTICAST : boolean := FALSE;
MAX_REMOTE_PARTICIPANTS : natural := 50 MAX_REMOTE_PARTICIPANTS : natural := 50
@ -25,13 +25,13 @@ entity rtps_builtin_endpoint is
rd : out std_logic; rd : out std_logic;
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in : in std_logic; last_word_in : in std_logic;
-- FROM USER ENDPOINTS -- FROM RTPS ENDPOINTS
alive : in std_logic_vector(0 to NUM_ENDPOINTS-1); alive : in std_logic_vector(0 to NUM_ENDPOINTS-1);
-- TO USER ENDPOINTS -- TO RTPS ENDPOINTS
full_ue : in std_logic_vector(0 to NUM_ENDPOINTS-1); full_rtps : in std_logic_vector(0 to NUM_ENDPOINTS-1);
wr_ue : out std_logic_vector(0 to NUM_ENDPOINTS-1); wr_rtps : out std_logic_vector(0 to NUM_ENDPOINTS-1);
data_out_ue : out std_logic_vector(WORD_WIDTH-1 downto 0); -- one-to-many (Multicast) Connection data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0); -- one-to-many (Multicast) Connection
last_word_out_ue : out std_logic; -- one-to-many (Multicast) Connection last_word_out_rtps : out std_logic; -- one-to-many (Multicast) Connection
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro : in std_logic; full_ro : in std_logic;
wr_ro : out std_logic; wr_ro : out std_logic;
@ -40,7 +40,7 @@ entity rtps_builtin_endpoint is
); );
end entity; end entity;
architecture arch of rtps_builtin_endpoint is architecture arch of rtps_discovery_module is
--*****CONSTANT DECLARATION***** --*****CONSTANT DECLARATION*****
-- Max Serialized Payload Size in a UDP Stream (Bytes) [MAX_PAYLOAD(65536) - IPv4_HEADER(20) - UDP_HEADER(8) - RTPS_HEADER(20) - DATA_HEADER(24)] -- Max Serialized Payload Size in a UDP Stream (Bytes) [MAX_PAYLOAD(65536) - IPv4_HEADER(20) - UDP_HEADER(8) - RTPS_HEADER(20) - DATA_HEADER(24)]
@ -533,33 +533,33 @@ begin
-- This process connects the Intermediate Output Signals to the actual output FIFOs -- This process connects the Intermediate Output Signals to the actual output FIFOs
output_prc : process(all) output_prc : process(all)
begin begin
wr_ue <= (others => '0'); wr_rtps <= (others => '0');
wr_ro <= '0'; wr_ro <= '0';
case (stage) is case (stage) is
when INFORM_ENDPOINTS_MATCH => when INFORM_ENDPOINTS_MATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
wr_ue <= endpoint_mask; wr_rtps <= endpoint_mask;
end if; end if;
when INFORM_ENDPOINTS_UNMATCH => when INFORM_ENDPOINTS_UNMATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
wr_ue <= not endpoint_mask; wr_rtps <= not endpoint_mask;
end if; end if;
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH => when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
if (wr_sig = '1') then if (wr_sig = '1') then
wr_ue <= (others => '1'); wr_rtps <= (others => '1');
end if; end if;
when LIVELINESS_UPDATE => when LIVELINESS_UPDATE =>
if (wr_sig = '1') then if (wr_sig = '1') then
wr_ue <= endpoint_mask; wr_rtps <= endpoint_mask;
end if; end if;
when others => when others =>
wr_ro <= wr_sig; wr_ro <= wr_sig;
end case; end case;
end process; end process;
data_out_ue <= data_out_sig; data_out_rtps <= data_out_sig;
data_out_ro <= data_out_sig; data_out_ro <= data_out_sig;
last_word_out_ue <= last_word_out_sig; last_word_out_rtps <= last_word_out_sig;
last_word_out_ro <= last_word_out_sig; last_word_out_ro <= last_word_out_sig;
-- Main State Machine -- Main State Machine
@ -1432,7 +1432,7 @@ begin
-- DONE -- DONE
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
-- Output FIFO Guard -- Output FIFO Guard
elsif ((endpoint_mask and full_ue) = (full_ue'range => '0')) then elsif ((endpoint_mask and full_rtps) = (full_rtps'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
@ -2114,7 +2114,7 @@ begin
when PID_BUILTIN_ENDPOINT_QOS => when PID_BUILTIN_ENDPOINT_QOS =>
-- Only relevant for Participant Discovery Protocol -- Only relevant for Participant Discovery Protocol
-- NOTE: As of DDSI-RTPS 2.3 the PID_BUILTIN_ENDPOINT_QOS only contains the BEST_EFFORT_PARTICIPANT_MESSAGE_DATA_READER bit -- NOTE: As of DDSI-RTPS 2.3 the PID_BUILTIN_ENDPOINT_QOS only contains the BEST_EFFORT_PARTICIPANT_MESSAGE_DATA_READER bit
-- Due to how the built-in Endpoint is behaving, this bit as no impact in our case and we can safely ignore it. -- Due to how the built-in Endpoint is behaving, this bit has no impact in our case and we can safely ignore it.
-- Ignore -- Ignore
null; null;
when PID_TOPIC_NAME => when PID_TOPIC_NAME =>
@ -3121,7 +3121,7 @@ begin
assert check_mask(current_pmf, PMF_DEFAULT_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE; assert check_mask(current_pmf, PMF_DEFAULT_IPV4_ADDR_FLAG or PMF_UDP_PORT_FLAG) severity FAILURE;
-- Output FIFO Guard -- Output FIFO Guard
if ((endpoint_mask and full_ue) = (full_ue'range => '0')) then if ((endpoint_mask and full_rtps) = (full_rtps'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
@ -3195,7 +3195,7 @@ begin
end if; end if;
when INFORM_ENDPOINTS_UNMATCH => when INFORM_ENDPOINTS_UNMATCH =>
-- Output FIFO Guard -- Output FIFO Guard
if (((not endpoint_mask) and full_ue) = (full_ue'range => '0')) then if (((not endpoint_mask) and full_rtps) = (full_rtps'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is
@ -3228,7 +3228,7 @@ begin
end if; end if;
when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH => when INFORM_ENDPOINTS_PARTICIPANT_UNMATCH =>
-- Output FIFO Guard -- Output FIFO Guard
if (full_ue = (full_ue'range => '0')) then if (full_rtps = (full_rtps'range => '0')) then
wr_sig <= '1'; wr_sig <= '1';
case (cnt) is case (cnt) is

View File

@ -19,16 +19,16 @@ entity rtps_handler is
empty : in std_logic; empty : in std_logic;
rd : out std_logic; rd : out std_logic;
data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in : in std_logic_vector(WORD_WIDTH-1 downto 0);
-- TO BUILTIN ENDPOINT -- TO DISCOVERY MODULE
full_be : in std_logic; full_dm : in std_logic;
wr_be : out std_logic; wr_dm : out std_logic;
data_out_be : out std_logic_vector(WORD_WIDTH-1 downto 0); data_out_dm : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_be : out std_logic; last_word_out_dm : out std_logic;
-- TO USER ENDPOINTS -- TO RTPS ENDPOINTS
full_ue : in std_logic_vector(0 to NUM_ENDPOINTS-1); full_rtps : in std_logic_vector(0 to NUM_ENDPOINTS-1);
wr_ue : out std_logic_vector(0 to NUM_ENDPOINTS-1); wr_rtps : out std_logic_vector(0 to NUM_ENDPOINTS-1);
data_out_ue : out std_logic_vector(WORD_WIDTH-1 downto 0); -- one-to-many (Multicast) Connection data_out_rtps : out std_logic_vector(WORD_WIDTH-1 downto 0); -- one-to-many (Multicast) Connection
last_word_out_ue : out std_logic -- one-to-many (Multicast) Connection last_word_out_rtps : out std_logic -- one-to-many (Multicast) Connection
); );
end entity; end entity;
@ -160,21 +160,21 @@ begin
output_prc : process(all) output_prc : process(all)
begin begin
--Write Enable Signal --Write Enable Signal
wr_be <= '0'; wr_dm <= '0';
wr_ue <= (others => '0'); wr_rtps <= (others => '0');
if (wr_sig = '1') then if (wr_sig = '1') then
if (builtin_endpoint = '1') then if (builtin_endpoint = '1') then
wr_be <= '1'; wr_dm <= '1';
else else
wr_ue <= user_endpoints; wr_rtps <= user_endpoints;
end if; end if;
end if; end if;
end process; end process;
data_out_be <= data_out_sig; data_out_dm <= data_out_sig;
data_out_ue <= data_out_sig; data_out_rtps <= data_out_sig;
last_word_out_be <= last_word_out_sig; last_word_out_dm <= last_word_out_sig;
last_word_out_ue <= last_word_out_sig; last_word_out_rtps <= last_word_out_sig;
-- This process is responsible for reading the input FIFO 4-Byte Word aligned. -- This process is responsible for reading the input FIFO 4-Byte Word aligned.
-- Even though DDSI-RTPS 2.3 defines that Submessages begin at 4-byte boundries, meaning that the -- Even though DDSI-RTPS 2.3 defines that Submessages begin at 4-byte boundries, meaning that the
@ -1031,7 +1031,7 @@ begin
when PUSH_PAYLOAD_HEADER => when PUSH_PAYLOAD_HEADER =>
-- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs. -- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
-- Output FIFO Guard -- Output FIFO Guard
if (builtin_endpoint = '1' and full_be = '0') or (builtin_endpoint = '0' and ((user_endpoints and full_ue) = (user_endpoints'range => '0'))) then if (builtin_endpoint = '1' and full_dm = '0') or (builtin_endpoint = '0' and ((user_endpoints and full_rtps) = (user_endpoints'range => '0'))) then
case (cnt) is case (cnt) is
-- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port -- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port
@ -1108,7 +1108,7 @@ begin
when PUSH_PAYLOAD => when PUSH_PAYLOAD =>
-- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs. -- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
-- Output FIFO Guard -- Output FIFO Guard
if (builtin_endpoint = '1' and full_be = '0') or (builtin_endpoint = '0' and ((user_endpoints and full_ue) = (user_endpoints'range => '0'))) then if (builtin_endpoint = '1' and full_dm = '0') or (builtin_endpoint = '0' and ((user_endpoints and full_rtps) = (user_endpoints'range => '0'))) then
case (opcode) is case (opcode) is
when SID_HEARTBEAT => when SID_HEARTBEAT =>

View File

@ -450,7 +450,7 @@ package rtps_package is
constant DISC_BUILTIN_ENDPOINT_TOPICS_DETECTOR : natural := 29; constant DISC_BUILTIN_ENDPOINT_TOPICS_DETECTOR : natural := 29;
-- *BUILTIN ENDPOINT QOS BITMASK* -- *BUILTIN ENDPOINT QOS BITMASK*
-- XXX: We use some of the unused bits of the 32-bit bitmask when stored in the buffer for internal purposes. (see "builtin_endpoint" Entity) -- XXX: We use some of the unused bits of the 32-bit bitmask when stored in the buffer for internal purposes. (see "rtps_discovery_module" Entity)
constant BEST_EFFORT_PARTICIPANT_MESSAGE_DATA_READER : natural := 0; constant BEST_EFFORT_PARTICIPANT_MESSAGE_DATA_READER : natural := 0;
-- *PARTICIPANT MESSAGE KIND* -- *PARTICIPANT MESSAGE KIND*

View File

@ -37,7 +37,7 @@ entity rtps_reader is
rd_user : out std_logic; rd_user : out std_logic;
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_user : in std_logic; last_word_in_user : in std_logic;
-- FROM RTPS BUILTIN ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta : in std_logic; empty_meta : in std_logic;
rd_meta : out std_logic; rd_meta : out std_logic;
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);

View File

@ -21,7 +21,7 @@ package rtps_test_package is
constant RESULTS_FILE : string := "./Test_Results.txt"; constant RESULTS_FILE : string := "./Test_Results.txt";
-- Frame Sizes have to be specified, so that direct memory probing is possible -- Frame Sizes have to be specified, so that direct memory probing is possible
-- rtps_builtin_endpoint Participant Frame Size -- rtps_discovery_module Participant Frame Size
constant PARTICIPANT_FRAME_SIZE : natural := 24; constant PARTICIPANT_FRAME_SIZE : natural := 24;
-- rtps_reader Endpoint Frame Size (RELIABLE=TRUE) -- rtps_reader Endpoint Frame Size (RELIABLE=TRUE)
constant WRITER_ENDPOINT_FRAME_SIZE_A : natural := 14; constant WRITER_ENDPOINT_FRAME_SIZE_A : natural := 14;
@ -202,7 +202,7 @@ package rtps_test_package is
match : MATCH_TYPE; match : MATCH_TYPE;
-- Denotes the Position in the Memory of this Participant Data -- Denotes the Position in the Memory of this Participant Data
nr : natural; nr : natural;
-- Denotes which locator is to be used (Same as PREFER_MULTICAST generic of rtps_builtin_endpoint) -- Denotes which locator is to be used (Same as PREFER_MULTICAST generic of rtps_discovery_module)
PREFER_MULTICAST : boolean; PREFER_MULTICAST : boolean;
end record; end record;
@ -490,7 +490,7 @@ package rtps_test_package is
-- Generates RTPS_HANDLER output -- Generates RTPS_HANDLER output
-- ref RTPS Submessage -- ref RTPS Submessage
-- loc Source Locator of RTPS Submessage -- loc Source Locator of RTPS Submessage
-- is_meta Indicates if the RTPS Submessage is metatraffic (Destined for Built-in Endpoints) -- is_meta Indicates if the RTPS Submessage is metatraffic (Destined for Discovery Module)
-- ts Source Timestamp of RTPS Submessage -- ts Source Timestamp of RTPS Submessage
-- src_guid Source GUID of RTPS Submessage -- src_guid Source GUID of RTPS Submessage
-- output Destination of generated output -- output Destination of generated output
@ -501,14 +501,14 @@ package rtps_test_package is
procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; endpoint : ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_rtps_handler_out(ref : in RTPS_SUBMESSAGE_TYPE; endpoint : ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
-- *RTPS_BUILTIN_ENDPOINT* -- *DISCOVERY MODULE*
-- Generate a rtps_builtin_endpoint memory Participant Frame based on "ref". -- Generate a rtps_discovery_module memory Participant Frame based on "ref".
function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE; function gen_participant_mem_frame (ref : PARTICIPANT_DATA_TYPE) return TEST_PARTICIPANT_MEMORY_FRAME_TYPE;
-- Writes a rtps_builtin_endpoint Endpoint Match Frame based on "ref" to "output" -- Writes a rtps_discovery_module Endpoint Match Frame based on "ref" to "output"
procedure gen_endpoint_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_endpoint_match_frame( ref : in ENDPOINT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
-- Writes a rtps_builtin_endpoint Participant Match Frame based on "ref" to "output" -- Writes a rtps_discovery_module Participant Match Frame based on "ref" to "output"
procedure gen_participant_match_frame( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_participant_match_frame( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
-- Writes a rtps_builtin_endpoint Endpoint Liveliness Update Frame based on "ref" to "output" -- Writes a rtps_discovery_module Endpoint Liveliness Update Frame based on "ref" to "output"
procedure gen_liveliness_update_frame( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE); procedure gen_liveliness_update_frame( ref : in PARTICIPANT_DATA_TYPE; output : inout TEST_PACKET_TYPE);
@ -577,7 +577,7 @@ package rtps_test_package is
-- n Unsigned Value of generated SLV -- n Unsigned Value of generated SLV
-- width Width of generated SLV -- width Width of generated SLV
function int(n : integer; width : natural) return std_logic_vector; function int(n : integer; width : natural) return std_logic_vector;
-- to_string Function for ScoreBoardPkg_builtin_endpoint -- to_string Function for ScoreBoardPkg_discovery_module
function to_string1 (input : std_logic_vector) return string; function to_string1 (input : std_logic_vector) return string;
-- Find first valid Locator of Particiapnt Data -- Find first valid Locator of Particiapnt Data
-- ref Participant Data to extract Locator from -- ref Participant Data to extract Locator from

View File

@ -40,12 +40,12 @@ entity rtps_writer is
rd_user : out std_logic; rd_user : out std_logic;
data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_user : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_user : in std_logic; last_word_in_user : in std_logic;
-- TO/FROM RTPS BUILTIN ENDPOINT (META TRAFFIC) -- FROM DISCOVERY MODULE (META TRAFFIC)
empty_meta : in std_logic; empty_meta : in std_logic;
rd_meta : out std_logic; rd_meta : out std_logic;
data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0); data_in_meta : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_meta : in std_logic; last_word_in_meta : in std_logic;
-- TO RTPS BUILTIN ENDPOINT (META TRAFFIC) -- TO DISCOVERY MODULE (META TRAFFIC)
alive_sig : out std_logic; alive_sig : out std_logic;
-- RTPS OUTPUT -- RTPS OUTPUT
full_ro : in std_logic; full_ro : in std_logic;

View File

@ -73,7 +73,7 @@ set_global_assignment -name VHDL_FILE ../rtps_reader_syn.vhd -hdl_version VHDL_2
set_global_assignment -name VHDL_FILE ../../src/rtps_reader.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_reader.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../rtps_writer_syn.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../rtps_writer_syn.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../../src/rtps_writer.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_writer.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../../src/rtps_builtin_endpoint.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_discovery_module.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../../src/rtps_handler.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_handler.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../../src/rtps_out.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../../src/rtps_out.vhd -hdl_version VHDL_2008
set_global_assignment -name VHDL_FILE ../test5.vhd -hdl_version VHDL_2008 set_global_assignment -name VHDL_FILE ../test5.vhd -hdl_version VHDL_2008