Rename rtps_builtin_endpoint to rtps_discovery_module
This commit is contained in:
parent
e0280ea490
commit
59bff52832
@ -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
|
||||||
21
src/REF.txt
21
src/REF.txt
@ -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
|
||||||
============
|
============
|
||||||
|
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
28
src/TODO.txt
28
src/TODO.txt
@ -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
|
||||||
|
|||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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';
|
||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
@ -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));
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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,
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
+---------------------------------------------------------------+
|
||||||
|
|||||||
@ -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
|
||||||
@ -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 =>
|
||||||
|
|||||||
@ -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*
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user