Code Refactor

This commit is contained in:
Greek 2021-05-15 20:39:56 +02:00
parent 4392aa8288
commit 609ed2d686
77 changed files with 1750 additions and 6862 deletions

View File

@ -1,8 +1,8 @@
Quartus 18.1 Unsupported
========================
Quartus Unsupported
===================
* Unconstrained arrays in records (Supported in Pro)
* Vectors in aggregate statements
e.g. V := ("0000", others => '1');
* Unary logical operators
* Referencing generics in generic lists
*
* Referencing other generics in generic declaration
* Conditional Assignements

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/DDS-XTYPES_1-1.pdf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -105,7 +105,7 @@ Explicit = 1
; Inhibit range checks on all (implicit and explicit) assignments to
; scalar objects defined with subtypes.
NoRangeCheck = 1
NoRangeCheck = 0
[vlog]

12
src/ASCII.txt Normal file
View File

@ -0,0 +1,12 @@
+----------+ +-------------+ +-----------+ +-----------+ +-------------+ +----------+
|DDS Writer|->|History Cache|->|RTPS Writer|<-->|RTPS Reader|->|History Cache|->|DDS Reader|
+----------+ +-------------+ +-----------+ +-----------+ +-------------+ +----------+
+----------+ +-----------+ +------------+ +------------+ +-----------+ +----------+
|DDS Writer|->|RTPS Writer|<-+->|RTPS Handler|<-->|RTPS Handler|<-+->|RTPS Reader|->|DDS Reader|
+----------+ +-----------+ | +------------+ +------------+ | +-----------+ +----------+
+---------------------+ | | +---------------------+
|RTPS Builtin Endpoint|<-+ +->|RTPS Builtin Endpoint|
+---------------------+ +---------------------+

View File

@ -9,15 +9,15 @@ entity FWFT_FIFO is
);
port
(
reset : in std_logic;
clk : in std_logic;
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
write : in std_logic;
read : in std_logic;
data_out : out std_logic_vector(DATA_WIDTH-1 downto 0);
empty : out std_logic;
full : out std_logic;
free : out natural range 0 to FIFO_DEPTH
reset : in std_logic;
clk : in std_logic;
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
write : in std_logic;
read : in std_logic;
data_out : out std_logic_vector(DATA_WIDTH-1 downto 0);
empty : out std_logic;
full : out std_logic;
free : out natural range 0 to FIFO_DEPTH
);
end entity;
@ -40,21 +40,21 @@ begin
sync : process(clk, reset)
variable free_var : integer range 0 to FIFO_DEPTH;
begin
if(rising_edge(clk)) then
if(reset = '1') then
if rising_edge(clk) then
if (reset = '1') then
fifo_data <= (others => (others => '0'));
free_sig <= FIFO_DEPTH;
else
free_var := free_sig;
if(read = '1' and free_var < FIFO_DEPTH ) then
if (read = '1' and free_var < FIFO_DEPTH ) then
for i in 1 to (FIFO_DEPTH-1) loop
fifo_data(i-1) <= fifo_data(i);
end loop;
fifo_data(FIFO_DEPTH-1) <= (others => '0');
free_var := free_var + 1;
end if;
if(write = '1') then
if(free_var > 0) then
if (write = '1') then
if (free_var > 0) then
fifo_data(FIFO_DEPTH-free_var) <= data_in;
free_var := free_var - 1;
end if;

View File

@ -433,14 +433,13 @@ STATUS INFO
-----------
31............24..............16..............8...............0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-----------------------------------------------+-+-+-+
|R|P|A|K| UNUSED |F|U|D|
+-+-+-+-+-----------------------------------------------+-+-+-+
+-+-+-+-------------------------------------------------+-+-+-+
|R|P|A| UNUSED |F|U|D|
+-+-+-+-------------------------------------------------+-+-+-+
R...Sample has been Read
P...Sample has associated Payload
P...Sample has associated DATA Payload
A...Associated Payload is aligned (Payload does extend until end of last Palyload Slot)
K...Key Hash available
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
D...DisposedFlag (1:1 PID_STATUS_INFO Mapping)
@ -485,7 +484,7 @@ STATUS INFO
+-+-+-+-------------------------------------------------+-+-+-+
R...Sample has been ACKed
P...Sample has associated Payload
P...Sample has associated DATA Payload
A...Associated Payload is aligned (Payload does extend until end of last Palyload Slot)
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
@ -529,7 +528,7 @@ READER
+ +
08| |
+-------------------------------------------------------------+
09| ENDPOINT_POSITION |
09| WRITER_ID |
+-------------------------------------------------------------+
10| |
~ PAYLOAD ~
@ -544,7 +543,7 @@ STATUS INFO
| |P| |K| UNUSED |F|U|D|
+-+-+-+-+-----------------------------------------------+-+-+-+
P...Sample has associated Payload
P...Sample has associated DATA Payload
K...Key Hash available
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)

View File

@ -301,7 +301,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -300,7 +300,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1562,7 +1562,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -300,7 +300,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1560,7 +1560,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -279,7 +279,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1011,7 +1011,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -301,7 +301,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP LAST, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP LAST, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -301,7 +301,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP LAST, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP LAST, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Positive TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - TIME_BASED_FILTER QoS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Positive TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - TIME_BASED_FILTER QoS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -475,7 +475,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -294,7 +294,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Ordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Ordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1348,7 +1348,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -294,7 +294,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -294,7 +294,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Ordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Ordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -294,7 +294,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Unordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Unordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -295,7 +295,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Topic, Ordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Topic, Ordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1366,7 +1366,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -275,7 +275,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - DDS Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - DDS Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -707,7 +707,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Deadline Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Deadline Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -606,7 +606,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Deadline Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Deadline Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -475,7 +475,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -768,7 +768,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -538,7 +538,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -478,7 +478,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));

View File

@ -301,7 +301,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Finite Lifespan, Keyed) - Level 0 - General");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Finite Lifespan, Keyed) - General");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -2087,15 +2087,15 @@ begin
if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -281,7 +281,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - General");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - General");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -2067,15 +2067,15 @@ begin
if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -254,7 +254,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyless) - Level 0 - General");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyless) - General");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -991,15 +991,15 @@ begin
when GET_CACHE_CHANGE =>
if (rtps.ret_code = OK) then
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -281,7 +281,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - General");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - General");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -1839,15 +1839,15 @@ begin
if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -215,7 +215,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Wait For Acknowledgements");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Wait For Acknowledgements");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -472,15 +472,15 @@ begin
if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -232,7 +232,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Deadline Handling");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Deadline Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -599,15 +599,15 @@ begin
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -232,7 +232,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Deadline Handling");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Deadline Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -514,15 +514,15 @@ begin
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -232,7 +232,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Liveliness Handling");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Liveliness Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -609,15 +609,15 @@ begin
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -232,7 +232,7 @@ begin
begin
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Lifespan Handling");
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Lifespan Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);
@ -591,15 +591,15 @@ begin
if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK;
rtps_cnt <= 0;
end if;
when GET_MIN_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when GET_MAX_SN =>
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
when others =>
null;
end case;

View File

@ -29,6 +29,15 @@ architecture testbench of L0_mem_ctrl_test1 is
signal addr : std_logic_vector(ADDR_WIDTH-1 downto 0) := (others => '0');
signal reset : std_logic := '1';
shared variable SB : osvvm.ScoreBoardPkg_slv.ScoreBoardPType;
signal stim_done, test_done : std_logic := '0';
-- *FUNCTION DECLARATION*
procedure wait_on_complete is
begin
if (test_done /= '1') then
wait until test_done = '1';
end if;
end procedure;
begin
@ -69,6 +78,7 @@ begin
RV.InitSeed(RV'instance_name);
Log("Initiating Test", INFO);
stim_done <= '0';
valid_in <= '0';
data_in <= (others => '0');
reset <= '1';
@ -193,10 +203,8 @@ begin
wait until rising_edge(clk);
wait until rising_edge(clk);
-- Wait until test Completion
if (not SB.empty) then
wait until SB.empty;
end if;
stim_done <= '1';
wait_on_complete;
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
SetTranscriptMirror;
ReportAlerts;
@ -217,6 +225,17 @@ begin
end if;
end process;
done_proc : process(clk)
begin
if rising_edge(clk) then
if (stim_done = '1' and SB.empty) then
test_done <= '1';
else
test_done <= '0';
end if;
end if;
end process;
clock_prc : process
begin
clk <= '0';

View File

@ -140,13 +140,13 @@ begin
locator => (
0 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
portn => UDP_PORT_INVALID & META_IPv4_MULTICAST_PORT,
addr => RV.RandSlv(LOCATOR_ADDR_WIDTH)
),
1 => (
kind => LOCATOR_KIND_UDPv4,
portn => RV.RandSlv(LOCATOR_PORT_WIDTH),
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
),
others => EMPTY_LOCATOR
)
@ -175,7 +175,8 @@ begin
-- USER
when others =>
tmp_id := ENTITYID(k);
ref2 := (k => '1', others => '0');
ref2 := (others => '0');
ref2(k) := '1';
end case;
for l in 0 to 1 loop -- Reader/Writer Source

View File

@ -111,7 +111,8 @@ begin
stimulus_prc : process
variable RV : RandomPType;
variable t1, t2, t3 : natural := 0;
variable tmp : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
variable tmp : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
variable tmp_packet : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
procedure gen_rand_packet(size : in natural; output : inout TEST_PACKET_TYPE) is
variable tmp : natural := 0;
@ -193,11 +194,14 @@ begin
push_reference(1, stimulus(t3));
start_test;
-- Wait until begining of t3 sending
tmp := (t3 => '0', others => '1');
tmp := (others => '1');
tmp(t3) := '0';
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
-- Reset Input
stimulus := (t3 => stimulus(t3), others => EMPTY_TEST_PACKET);
tmp_packet := stimulus(t3);
stimulus := (others => EMPTY_TEST_PACKET);
stimulus(t3) := tmp_packet;
Log("Begin Test 2", INFO);
-- Min Valid Packet
gen_rand_packet(4, stimulus(t1));
@ -213,11 +217,14 @@ begin
gen_rand_packet(1, stimulus(t1));
start_test;
-- Wait until all but t1 sent
tmp := (t1 => '0', others => '1');
tmp := (others => '1');
tmp(t1) := '0';
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
-- reset Input
stimulus := (t1 => stimulus(t1), others => EMPTY_TEST_PACKET);
tmp_packet := stimulus(t1);
stimulus := (others => EMPTY_TEST_PACKET) ;
stimulus(t1) := tmp_packet;
Log("Begin Test 3", INFO);
for i in 1 to NUM_ENDPOINTS+1 loop
t3 := (t1+i) mod (NUM_ENDPOINTS+1);

View File

@ -76,7 +76,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -142,7 +142,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Volatile, Best Effort, Keyed) - Level 0 - Metatraffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Best Effort, Keyed) - Metatraffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -76,7 +76,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -142,7 +142,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Volatile, Reliable, Keyed) - Level 0 - Metatraffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Keyed) - Metatraffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Transient Local, Best Effort, Keyed) - Level 0 - User Traffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Transient Local, Best Effort, Keyed) - User Traffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Transient Local, Reliable, Keyed) - Level 0 - User Traffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Transient Local, Reliable, Keyed) - User Traffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Volatile, Best Effort, Keyed) - Level 0 - User Traffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Best Effort, Keyed) - User Traffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Volatile, Reliable, Keyed) - Level 0 - User Traffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Keyed) - User Traffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_reader - (Volatile, Reliable, Non Keyed) - Level 0 - User Traffic Handling");
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Non Keyed) - User Traffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -60,7 +60,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -213,7 +213,7 @@ begin
begin
SetAlertLogName("rtps_reader - (Automatic Liveliness) - Level 0 - Liveliness Handling");
SetAlertLogName("rtps_reader - Level 0 - (Automatic Liveliness) - Liveliness Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -60,7 +60,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -213,7 +213,7 @@ begin
begin
SetAlertLogName("rtps_reader - (Manual by Topic Liveliness) - Level 0 - Liveliness Handling");
SetAlertLogName("rtps_reader - Level 0 - (Manual by Topic Liveliness) - Liveliness Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -70,7 +70,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -149,7 +149,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_writer - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Metatraffic Handling");
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Metatraffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -70,7 +70,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -149,7 +149,7 @@ begin
end procedure;
begin
SetAlertLogName("rtps_writer - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Metatraffic Handling");
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Metatraffic Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -54,7 +54,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -183,7 +183,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Reader Liveliness Handling");
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Reader Liveliness Handling");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -83,7 +83,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
@ -245,7 +245,7 @@ begin
begin
SetAlertLogName("rtps_reader (Transient Local, Reliable, Keyed) - Level 1 - RTPS Output");
SetAlertLogName("rtps_reader - Level 1 - (Transient Local, Reliable, Keyed) - RTPS Output");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -84,7 +84,7 @@ begin
uut : entity work.rtps_reader(arch)
generic map (
ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
@ -246,7 +246,7 @@ begin
begin
SetAlertLogName("rtps_reader (Volatile, Reliable, Keyed) - Level 1 - RTPS Output");
SetAlertLogName("rtps_reader - Level 1 - (Volatile, Reliable, Keyed) - RTPS Output");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Transient Local, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Best Effort, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Transient Local, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Transient Local, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Reliable, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -337,7 +337,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Source Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Source Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -339,7 +339,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Non Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Non Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -76,7 +76,7 @@ begin
-- Unit Under Test
uut : entity work.rtps_writer(arch)
generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -277,7 +277,7 @@ begin
begin
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (HEARTBEAT)");
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (HEARTBEAT)");
SetAlertEnable(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE);

View File

@ -175,7 +175,7 @@ package user_config is
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
15 => BEST_EFFORT_RELIABILITY_QOS,
NUM_READERS+3 => BEST_EFFORT_RELIABILITY_QOS,
others => DEFAULT_RELIABILTY_QOS
others => DEFAULT_RELIABILITY_QOS
);
-- (Only relevant to Writers)
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
@ -215,4 +215,7 @@ package user_config is
-- TESTING PARAMETERS
constant TEST_STRING : string := "TEST_CONFIG_1";
-- Set to TRUE for Simulation Testing (Extra Code generated)
constant SIMULATION_FLAG : boolean := TRUE;
end package;

View File

@ -84,15 +84,15 @@ analyze Level_0/L0_dds_reader_test7_arzkriu.vhd
simulate L0_rtps_handler_test1
simulate L0_rtps_handler_test2
simulate L0_rtps_out_test1
simulate L0_mem_ctrl_test1
simulate L0_rtps_builtin_endpoint_test1
simulate L0_rtps_builtin_endpoint_test2
simulate L0_rtps_builtin_endpoint_test3
simulate L0_rtps_builtin_endpoint_test4
simulate L0_rtps_builtin_endpoint_test5
simulate L0_rtps_builtin_endpoint_test6
simulate L0_rtps_out_test1
simulate L1_rtps_builtin_endpoint_test1
simulate L0_mem_ctrl_test1
simulate L0_rtps_reader_test1_vrk
simulate L0_rtps_reader_test1_vbk
simulate L0_rtps_reader_test2_vrk
@ -106,6 +106,7 @@ simulate L1_rtps_reader_test1_vrk
simulate L1_rtps_reader_test1_trk
simulate L0_rtps_writer_test1_vrkdp
simulate L0_rtps_writer_test1_vbkdp
simulate L0_rtps_writer_test2_vrkdp
simulate L1_rtps_writer_test1_vrkdp
simulate L1_rtps_writer_test1_trkdp
simulate L1_rtps_writer_test1_tbkdp
@ -115,7 +116,6 @@ simulate L1_rtps_writer_test1_vrksp
simulate L1_rtps_writer_test1_vrkdn
simulate L1_rtps_writer_test1_trkdn
simulate L1_rtps_writer_test2_vrkdn
simulate L0_rtps_writer_test2_vrkdp
simulate L0_dds_writer_test1_aik
simulate L0_dds_writer_test1_ain
simulate L0_dds_writer_test1_lik

View File

@ -155,7 +155,7 @@ architecture arch of dds_reader is
-- Address pointing to the beginning of the first Instance Data Frame
constant FIRST_INSTANCE_ADDRESS : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) := (others => '0');
-- *SAMPLE MEMORY FRAME FORMAT*
-- *SAMPLE MEMORY FRAME FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant SMF_STATUS_INFO_OFFSET : natural := 0;
constant SMF_TIMESTAMP_OFFSET : natural := 1;
@ -173,12 +173,12 @@ architecture arch of dds_reader is
constant SMF_PREV_ADDR_OFFSET : natural := SMF_NO_WRITERS_GEN_CNT_OFFSET + 1;
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_OFFSET + 1;
-- *PAYLOAD MEMORY FRAME FORMAT*
-- *PAYLOAD MEMORY FRAME FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant PMF_NEXT_ADDR_OFFSET : natural := 0;
constant PMF_PAYLOAD_OFFSET : natural := 1;
-- *INSTANCE MEMORY FRAME OFFSET*
-- *INSTANCE MEMORY FRAME FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant IMF_NEXT_ADDR_OFFSET : natural := 0;
constant IMF_KEY_HASH_OFFSET : natural := 1;
@ -195,7 +195,7 @@ architecture arch of dds_reader is
end function;
constant IMF_WRITER_BITMAP_OFFSET : natural := gen_imf_writer_bitmap_offset(TIME_BASED_FILTER_QOS);
-- *INSTANCE MEMORY FRAME FORMAT FLAGS*
-- *INSTANCE MEMORY FRAME FIELD FLAGS*
-- Flags mapping to the respective Endpoint Memory Frame Fields
constant IMF_FLAG_WIDTH : natural := 7;
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0');
@ -218,15 +218,22 @@ architecture arch of dds_reader is
REMOVE_INSTANCE, UNMARK_INSTANCES, RESET_MEMORY);
-- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash.
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by inst_addr_update. [This is needed to mark the previous Instance for Instance Removal]
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by "key_hash".
-- Set "inst_addr_base" to Base Address of found Instance, of INSTANCE_MEMORY_MAX_ADDRESS if nothing found.
-- "inst_data" contains Instance Data according to "inst_mem_fields".
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by "inst_addr_update".
-- Set "inst_addr_base" to "inst_addr_update"
-- "inst_data" contains Instance Data according to "inst_mem_fields".
-- INSERT_INSTANCE Insert Instance to memory. The Instance is inserted in Key Hash Numerical Order.
-- UPDATE_INSTANCE Update Instance Data pointed by inst_addr_base. (inst_mem_fields specifies which Fields to update)
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order). (inst_mem_fields specifies which Fields to get)
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by inst_addr_base) (inst_mem_fields specifies which Fields to get)
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get)
-- UNMARK_INSTANCES Reset the MARK_FLAG of all stored Instances
-- UPDATE_INSTANCE Update Instance Data pointed by "inst_addr_base" according to "inst_mem_fields"
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order) according to "inst_mem_fields".
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no Instance in Memory.
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by "inst_addr_base") according to "inst_mem_fields".
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no other Instance in Memory.
-- REMOVE_INSTANCE Remove Instance pointed by "inst_addr_base".
-- GET_INSTANCE Get Data of Instance pointed by "inst_addr_update" according to "inst_mem_fields".
-- Already fetched Data of the Participant is not modified.
-- UNMARK_INSTANCES Reset the MARK_FLAG of all Instances in Memory.
type INSTANCE_OPCODE_TYPE is (NOP, SEARCH_INSTANCE_HASH, SEARCH_INSTANCE_ADDR, INSERT_INSTANCE, UPDATE_INSTANCE, GET_FIRST_INSTANCE, GET_NEXT_INSTANCE, REMOVE_INSTANCE,
GET_INSTANCE, UNMARK_INSTANCES);
type WRITER_BITMAP_ARRAY_TYPE is array (0 to round_div(MAX_REMOTE_ENDPOINTS, WORD_WIDTH)-1) of std_logic_vector(0 to WORD_WIDTH-1);
@ -325,8 +332,8 @@ architecture arch of dds_reader is
signal remove_oldest_sample, remove_oldest_sample_next : std_logic := '0';
-- Denotes if the oldest sample of the Instance with 'key_hash' should be removed
signal remove_oldest_inst_sample, remove_oldest_inst_sample_next : std_logic := '0';
-- Remote Writer Endpoint Bitmap Position
signal writer_pos, writer_pos_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0;
-- Remote Writer ID
signal writer_id, writer_id_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0;
-- Key Hash Latch
signal key_hash, key_hash_next : KEY_HASH_TYPE := HANDLE_NIL;
-- RTPS Return Code Latch
@ -509,7 +516,7 @@ architecture arch of dds_reader is
alias next_inst_next : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) is inst_addr_latch_2_next;
alias first_payload : unsigned(PAYLOAD_MEMORY_ADDR_WIDTH-1 downto 0) is payload_addr_latch_2;
alias first_payload_next : unsigned(PAYLOAD_MEMORY_ADDR_WIDTH-1 downto 0) is payload_addr_latch_2_next;
alias has_data : std_logic is sample_status_info(SSI_PAYLOAD_FLAG);
alias has_data : std_logic is sample_status_info(SSI_DATA_FLAG);
alias has_key_hash : std_logic is sample_status_info(SSI_KEY_HASH_FLAG);
-- *FUNCTION DECLARATION*
@ -533,6 +540,19 @@ architecture arch of dds_reader is
return ret;
end function;
-- This function caps the range of a natural.
-- This is needed, because during simulation some values may be outside the range due to delta time delays.
function cap_range(input : in integer; max : in natural) return natural is
begin
if (input > max and SIMULATION_FLAG) then
return max;
elsif (input < 0 and SIMULATION_FLAG) then
return 0;
else
return input;
end if;
end function;
begin
--*****COMPONENT INSTANTIATION*****
@ -675,7 +695,7 @@ begin
sample_addr_latch_3_next <= sample_addr_latch_3;
sample_addr_latch_4_next <= sample_addr_latch_4;
sample_addr_latch_5_next <= sample_addr_latch_5;
writer_pos_next <= writer_pos;
writer_id_next <= writer_id;
key_hash_next <= key_hash;
sample_status_info_next <= sample_status_info;
remove_oldest_sample_next <= remove_oldest_sample;
@ -911,7 +931,7 @@ begin
-- Synthesis Guard
if (WITH_KEY) then
-- Latch Writer Pos
writer_pos_next <= to_integer(unsigned(data_in_rtps));
writer_id_next <= to_integer(unsigned(data_in_rtps));
stage_next <= REMOVE_WRITER;
cnt_next <= 2;
else
@ -925,7 +945,7 @@ begin
inst_data_next2.writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- NOT_ALIVE_NO_WRITERS Transition
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
trigger_sample_gen_next <= '1';
inst_data_next2.status_info(ISI_GENERATE_SAMPLE_FLAG) <= '1';
inst_data_next2.status_info(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1';
@ -1161,13 +1181,14 @@ begin
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
sample_write_data <= data_in_rtps;
sample_write_data(SSI_READ_FLAG) <= '0';
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_PAYLOAD_FLAG);
sample_write_data <= data_in_rtps;
sample_write_data(SSI_KEY_HASH_FLAG) <= '0'; -- Key Hash Flag is not stored
sample_write_data(SSI_READ_FLAG) <= '0';
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_DATA_FLAG);
-- Latch Status Info
sample_status_info_next <= data_in_rtps;
sample_status_info_next(SSI_READ_FLAG) <= '0';
sample_status_info_next(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_PAYLOAD_FLAG);
sample_status_info_next(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_DATA_FLAG);
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
ready_in_rtps <= '1';
@ -1297,7 +1318,7 @@ begin
if (valid_in_rtps = '1') then
ready_in_rtps <= '1';
-- Latch Input, but do not pass to Memory
writer_pos_next <= to_integer(unsigned(data_in_rtps));
writer_id_next <= cap_range(to_integer(unsigned(data_in_rtps)), MAX_REMOTE_ENDPOINTS-1);
cnt_next <= cnt + 1;
end if;
-- SET Payload Address
@ -1597,6 +1618,7 @@ begin
-- Wait for Instance Search to finish
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_IGNORE_DEADLINE_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
-- Instance Found
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
@ -1763,7 +1785,7 @@ begin
sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1';
tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
if (DESTINATION_ORDER_QOS = BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS and newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) then
@ -1822,7 +1844,7 @@ begin
sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1';
tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
if (DESTINATION_ORDER_QOS = BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS and newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) then
@ -2039,6 +2061,8 @@ begin
-- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_IGNORE_DEADLINE_FLAG) severity FAILURE;
-- DEFAULT STATUS INFO (LIVELINESS)
if (WITH_KEY) then
tmp_update := IMF_STATUS_FLAG;
@ -2054,9 +2078,9 @@ begin
-- ALIVE/FILTERED/DISPOSE Operation
if (sample_status_info(SSI_UNREGISTERED_FLAG) /= '1') then
-- Write if Writer New for Instance
if (tmp_bitmap(writer_pos) /= '1') then
if (tmp_bitmap(writer_id) /= '1') then
-- Insert Writer
tmp_bitmap(writer_pos) := '1';
tmp_bitmap(writer_id) := '1';
-- Convert Back
-- Synthesis Guard
if (WITH_KEY) then
@ -2068,9 +2092,9 @@ begin
end if;
else
-- Write if Writer New for Instance
if (tmp_bitmap(writer_pos) /= '0') then
if (tmp_bitmap(writer_id) /= '0') then
-- Insert Writer
tmp_bitmap(writer_pos) := '0';
tmp_bitmap(writer_id) := '0';
-- Convert Back
-- Synthesis Guard
if (WITH_KEY) then
@ -2128,7 +2152,7 @@ begin
end if;
end if;
-- * -> NOT_ALIVE_NO_WRITERS Transition
elsif (sample_status_info(SSI_UNREGISTERED_FLAG) = '1' and tmp_bitmap = (tmp_bitmap'range => '0')) then
elsif (sample_status_info(SSI_UNREGISTERED_FLAG) = '1' and tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
-- NOT_ALIVE -> NOT_ALIVE_NO_WRITERS
if (inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '1' or inst_data.status_info(ISI_NOT_ALIVE_NO_WRITERS_FLAG) = '1') then
tmp_bool := FALSE;
@ -2206,7 +2230,7 @@ begin
-- Synthesis Guard
if (WITH_KEY) then
-- Stale Instance Transition
if (inst_data.sample_cnt = 0 and inst_data.writer_bitmap /= ZERO_WRITER_BITMAP_ARRAY and tmp_bitmap = (tmp_bitmap'range => '0')) then
if (inst_data.sample_cnt = 0 and inst_data.writer_bitmap /= ZERO_WRITER_BITMAP_ARRAY and tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
stale_inst_cnt_next <= stale_inst_cnt + 1;
end if;
end if;
@ -2276,6 +2300,7 @@ begin
-- Wait for instance Update to Complete
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
case (cnt) is
-- SET Disposed Generation Counter
@ -2481,181 +2506,187 @@ begin
end case;
when GENERATE_SAMPLE =>
-- Precondition: cur_sample set, cur_inst set, inst_data set (IMF_DISPOSED_CNT_FLAG, IMF_NO_WRITERS_CNT_FLAG)
case (cnt) is
-- GET Next Sample (Empty List)
when 0 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
sample_read <= '1';
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Sample Status Info
when 1 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
sample_write_data <= (SSI_UNREGISTERED_FLAG => '1', others => '0');
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Timestamp 1/2
when 2 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET;
sample_write_data <= std_logic_vector(time(0));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Timestamp 2/2
when 3 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET + 1;
sample_write_data <= std_logic_vector(time(1));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Lifespan 1/2
when 4 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET;
sample_write_data <= std_logic_vector(TIME_INVALID(0));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Lifespan 2/2
when 5 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET + 1;
sample_write_data <= std_logic_vector(TIME_INVALID(1));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Payload Pointer
when 6 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_PAYLOAD_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(PAYLOAD_MEMORY_MAX_ADDRESS,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Instance Pointer
when 7 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_INSTANCE_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(cur_inst,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Disposed Generation Count
when 8 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_DISPOSED_GEN_CNT_OFFSET;
sample_write_data <= std_logic_vector(inst_data.disposed_gen_cnt);
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET No Writers Generation Count
when 9 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NO_WRITERS_GEN_CNT_OFFSET;
sample_write_data <= std_logic_vector(inst_data.no_writers_gen_cnt);
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Previous Sample Pointer
when 10 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_PREV_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(newest_sample,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Next Sample Pointer
when 11 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(SAMPLE_MEMORY_MAX_ADDRESS,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
assert (newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
cnt_next <= cnt + 1;
end if;
-- SET Next Sample Pointer (Previous Sample)
when 12 =>
sample_valid_in <= '1';
sample_addr <= newest_sample + SMF_NEXT_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(empty_sample_list_head,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- READ Next Address (Empty List)
when 13 =>
sample_ready_out <= '1';
-- Memory Flow Control Guard
if (sample_valid_out = '1') then
-- Update Sample List Pointer
newest_sample_next <= cur_sample;
empty_sample_list_head_next <= resize(unsigned(sample_read_data), SAMPLE_MEMORY_ADDR_WIDTH);
-- Wait for Instane Data
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
case (cnt) is
-- GET Next Sample (Empty List)
when 0 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
sample_read <= '1';
-- Signal Data Available
status_sig_next <= status_sig or DATA_AVAILABLE_STATUS;
if (WITH_KEY and remove_oldest_inst_sample = '1') then
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
cur_sample_next <= oldest_sample;
stage_next <= FIND_OLDEST_INST_SAMPLE;
cnt_next <= 0;
elsif (remove_oldest_sample = '1') then
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
-- Synthesis Guard
if (WITH_KEY) then
stage_next <= GET_OLDEST_SAMPLE_INSTANCE;
cnt_next <= 0;
else
cur_sample_next <= oldest_sample;
stage_next <= REMOVE_SAMPLE;
cnt_next <= 0;
end if;
elsif (trigger_sample_gen = '1') then
-- Continue
stage_next <= PROCESS_PENDING_SAMPLE_GENERATION;
cnt_next <= 1;
else
-- DONE
stage_next <= IDLE;
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
end if;
when others =>
null;
end case;
-- SET Sample Status Info
when 1 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
sample_write_data <= (SSI_UNREGISTERED_FLAG => '1', others => '0');
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Timestamp 1/2
when 2 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET;
sample_write_data <= std_logic_vector(time(0));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Timestamp 2/2
when 3 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET + 1;
sample_write_data <= std_logic_vector(time(1));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Lifespan 1/2
when 4 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET;
sample_write_data <= std_logic_vector(TIME_INVALID(0));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Lifespan 2/2
when 5 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET + 1;
sample_write_data <= std_logic_vector(TIME_INVALID(1));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Payload Pointer
when 6 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_PAYLOAD_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(PAYLOAD_MEMORY_MAX_ADDRESS,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Instance Pointer
when 7 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_INSTANCE_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(cur_inst,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Disposed Generation Count
when 8 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_DISPOSED_GEN_CNT_OFFSET;
sample_write_data <= std_logic_vector(inst_data.disposed_gen_cnt);
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET No Writers Generation Count
when 9 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NO_WRITERS_GEN_CNT_OFFSET;
sample_write_data <= std_logic_vector(inst_data.no_writers_gen_cnt);
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Previous Sample Pointer
when 10 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_PREV_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(newest_sample,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- SET Next Sample Pointer
when 11 =>
sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(SAMPLE_MEMORY_MAX_ADDRESS,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
assert (newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
cnt_next <= cnt + 1;
end if;
-- SET Next Sample Pointer (Previous Sample)
when 12 =>
sample_valid_in <= '1';
sample_addr <= newest_sample + SMF_NEXT_ADDR_OFFSET;
sample_write_data <= std_logic_vector(resize(empty_sample_list_head,WORD_WIDTH));
-- Memory Flow Control Guard
if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
end if;
-- READ Next Address (Empty List)
when 13 =>
sample_ready_out <= '1';
-- Memory Flow Control Guard
if (sample_valid_out = '1') then
-- Update Sample List Pointer
newest_sample_next <= cur_sample;
empty_sample_list_head_next <= resize(unsigned(sample_read_data), SAMPLE_MEMORY_ADDR_WIDTH);
-- Signal Data Available
status_sig_next <= status_sig or DATA_AVAILABLE_STATUS;
if (WITH_KEY and remove_oldest_inst_sample = '1') then
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
cur_sample_next <= oldest_sample;
stage_next <= FIND_OLDEST_INST_SAMPLE;
cnt_next <= 0;
elsif (remove_oldest_sample = '1') then
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
-- Synthesis Guard
if (WITH_KEY) then
stage_next <= GET_OLDEST_SAMPLE_INSTANCE;
cnt_next <= 0;
else
cur_sample_next <= oldest_sample;
stage_next <= REMOVE_SAMPLE;
cnt_next <= 0;
end if;
elsif (trigger_sample_gen = '1') then
-- Continue
stage_next <= PROCESS_PENDING_SAMPLE_GENERATION;
cnt_next <= 1;
else
-- DONE
stage_next <= IDLE;
end if;
end if;
when others =>
null;
end case;
end if;
when GET_OLDEST_SAMPLE_INSTANCE =>
-- Synthesis Guard
if (WITH_KEY) then
@ -2755,7 +2786,7 @@ begin
if (inst_op_done = '1') then
inst_op_start <= '1';
inst_opcode <= GET_INSTANCE;
inst_mem_fields <= IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG;
inst_mem_fields <= IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG;
inst_addr_update <= cur_inst;
cnt_next <= cnt + 1;
end if;
@ -2960,6 +2991,8 @@ begin
-- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG) severity FAILURE;
-- Synthesis Guard
if (WITH_KEY) then
-- Stale Instance Update
@ -3045,12 +3078,16 @@ begin
null;
end case;
when REMOVE_WRITER =>
-- Precondition: inst_data set (IMF_WRITER_BITMAP_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
-- Synthesis Guard
if (WITH_KEY) then
-- Memory Operation Guard
if (inst_op_done = '1') then
case (cnt) is
when 0 =>
assert check_mask(current_imf, IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG) severity FAILURE;
-- No More Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE
@ -3062,7 +3099,7 @@ begin
tmp_bitmap := from_writer_bitmap_array(inst_data.writer_bitmap);
-- Remove Writer
tmp_bitmap(writer_pos) := '0';
tmp_bitmap(writer_id) := '0';
-- NOTE: writer_bitmap is not latched, since the memory process is latching it at the
-- same clock cycle.
@ -3070,7 +3107,7 @@ begin
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- NOT_ALIVE_NO_WRITERS Transition
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
trigger_sample_gen_next <= '1';
status_info_update <= inst_data.status_info;
status_info_update(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1';
@ -3085,7 +3122,7 @@ begin
end if;
-- Update Stale Instance Count
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.sample_cnt = 0) then
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.sample_cnt = 0) then
stale_inst_cnt_next <= stale_inst_cnt + 1;
end if;
@ -3119,6 +3156,8 @@ begin
case (cnt) is
-- Find and Remove First Stale Instance
when 0 =>
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG) severity FAILURE;
-- Iterated through all Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- NOTE: We should enter this state only if there is at least one stale Instance to be removed, so we should never enter this branch.
@ -3150,7 +3189,7 @@ begin
sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1';
tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- Latch Instance Pointer
@ -3356,6 +3395,7 @@ begin
when 7 =>
-- Wait for Instance Data
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
assert (next_inst = inst_addr_base) severity FAILURE;
-- DEFAULT
@ -3793,6 +3833,7 @@ begin
if (WITH_KEY) then
-- Wait for Instance Data
if (inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
assert (next_inst = inst_addr_base) severity FAILURE;
-- DEFAULT
@ -3947,6 +3988,7 @@ begin
when 2 =>
-- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- NOTE: If we have a presentation of consecutive same instance samples of multiple instances, we have to
-- mark the instances we have already handled, in order to prevent the GET_NEXT_SAMPLE state to
-- re-process them.
@ -3954,6 +3996,7 @@ begin
if (si_sample_rank_sig = 0) then
-- Synthesis Guard
if (WITH_KEY) then
inst_op_start <= '1';
inst_opcode <= UPDATE_INSTANCE;
inst_mem_fields <= IMF_STATUS_FLAG;
@ -4175,6 +4218,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG;
cnt_next <= 2;
when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- DEFAULT
@ -4265,6 +4310,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG;
cnt_next <= cnt + 1;
when 1 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- DEFAULT
@ -4482,6 +4529,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG;
cnt_next <= cnt + 1;
when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- Sample needs to be Generated
@ -4505,6 +4554,8 @@ begin
stage_next <= IDLE;
end if;
when 3 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG) severity FAILURE;
-- RESOURCE_LIMITS_QOS (MAX_SAMPLES_PER_INSTANCE)
if (WITH_KEY and MAX_SAMPLES_PER_INSTANCE /= LENGTH_UNLIMITED and inst_data.sample_cnt = unsigned(MAX_SAMPLES_PER_INSTANCE)) then
if (HISTORY_QOS = KEEP_ALL_HISTORY_QOS and RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS) then
@ -4724,6 +4775,8 @@ begin
cnt_next <= 2;
-- Check Instance
when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
-- Reached End of Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE
@ -4783,8 +4836,10 @@ begin
if (sample_ready_in = '1') then
if (cur_sample = MAX_SAMPLE_ADDRESS) then
-- DONE
stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0;
stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0;
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
else
-- Continue
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
@ -4815,7 +4870,8 @@ begin
if (payload_ready_in = '1') then
if (cur_payload = MAX_PAYLOAD_ADDRESS) then
-- DONE
stage_next <= IDLE;
stage_next <= IDLE;
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
else
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
end if;
@ -4940,6 +4996,7 @@ begin
when UPDATE_INSTANCE =>
current_imf_next <= current_imf or inst_mem_fields;
inst_stage_next <= UPDATE_INSTANCE;
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
inst_cnt_next <= 0;
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
@ -5001,6 +5058,7 @@ begin
else
current_imf_next <= current_imf or inst_mem_fields;
end if;
-- Get Instance Data
inst_stage_next <= GET_INSTANCE_DATA;
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
@ -6462,7 +6520,8 @@ begin
if (inst_ready_in = '1') then
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
-- DONE
inst_stage_next <= IDLE;
inst_stage_next <= IDLE;
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
else
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
end if;
@ -6484,14 +6543,14 @@ begin
inst_stage <= RESET_MEMORY;
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS;
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS;
empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
inst_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_next_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_prev_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_empty_head <= FIRST_INSTANCE_ADDRESS;
inst_empty_head <= INSTANCE_MEMORY_MAX_ADDRESS;
key_hash <= HANDLE_NIL;
si_instance_handle_sig <= HANDLE_NIL;
si_publication_handle_sig <= (others => (others => '0'));
@ -6514,7 +6573,7 @@ begin
sample_rej_last_reason <= NOT_REJECTED;
rtps_return_code_latch <= ERROR;
dds_return_code_latch <= RETCODE_ERROR;
writer_pos <= 0;
writer_id <= 0;
cnt <= 0;
cnt2 <= 0;
cnt3 <= 0;
@ -6601,7 +6660,7 @@ begin
sample_rej_last_reason <= sample_rej_last_reason_next;
rtps_return_code_latch <= rtps_return_code_latch_next;
dds_return_code_latch <= dds_return_code_latch_next;
writer_pos <= writer_pos_next;
writer_id <= writer_id_next;
cnt <= cnt_next;
cnt2 <= cnt2_next;
cnt3 <= cnt3_next;
@ -6624,7 +6683,7 @@ begin
wait_for_sample_removal <= wait_for_sample_removal_next;
dis_gen_cnt_latch <= dis_gen_cnt_latch_next;
no_w_gen_cnt_latch <= no_w_gen_cnt_latch_next;
current_imf <= current_imf_next;
current_imf <= current_imf_next when WITH_KEY else (others => '1');
sample_addr_latch_1 <= sample_addr_latch_1_next;
sample_addr_latch_2 <= sample_addr_latch_2_next;
sample_addr_latch_3 <= sample_addr_latch_3_next;

View File

@ -136,7 +136,7 @@ architecture arch of dds_writer is
-- Address pointing to the beginning of the first Instance Data Frame
constant FIRST_INSTANCE_ADDRESS : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) := (others => '0');
-- *SAMPLE MEMORY FRAME FORMAT*
-- *SAMPLE MEMORY FRAME FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant SMF_STATUS_INFO_OFFSET : natural := 0;
constant SMF_SEQ_NR_OFFSET : natural := 1;
@ -159,12 +159,12 @@ architecture arch of dds_writer is
constant SMF_PREV_ADDR_OFFSET : natural := gen_smf_prev_addr_offset(WITH_KEY);
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_OFFSET + 1;
-- *PAYLOAD MEMORY FRAME FORMAT*
-- *PAYLOAD MEMORY FRAME FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant PMF_NEXT_ADDR_OFFSET : natural := 0;
constant PMF_PAYLOAD_OFFSET : natural := 1;
-- *INSTANCE MEMORY FRAME OFFSET*
-- *INSTANCE MEMORY FIELD OFFSETS*
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant IMF_NEXT_ADDR_OFFSET : natural := 0;
constant IMF_KEY_HASH_OFFSET : natural := 1;
@ -172,7 +172,7 @@ architecture arch of dds_writer is
constant IMF_SAMPLE_CNT_OFFSET : natural := 6;
constant IMF_ACK_CNT_OFFSET : natural := 7;
-- *INSTANCE MEMORY FRAME FORMAT FLAGS*
-- *INSTANCE MEMORY FRAME FIELD FLAGS*
-- Flags mapping to the respective Endpoint Memory Frame Fields
constant IMF_FLAG_WIDTH : natural := 4;
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0');
@ -192,14 +192,21 @@ architecture arch of dds_writer is
REMOVE_INSTANCE, RESET_MEMORY);
-- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash.
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by inst_addr_update. [This is needed to mark the previous Instance for Instance Removal]
-- INSERT_INSTANCE Insert Instance to memory. The Instance is inserted in Key Hash Numerical Order.
-- UPDATE_INSTANCE Update Instance Data pointed by inst_addr_base. (inst_mem_fields specifies which Fields to update)
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order). (inst_mem_fields specifies which Fields to get)
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by inst_addr_base) (inst_mem_fields specifies which Fields to get)
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get)
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by "key_hash".
-- Set "inst_addr_base" to Base Address of found Instance, of INSTANCE_MEMORY_MAX_ADDRESS if nothing found.
-- "inst_data" contains Instance Data according to "inst_mem_fields".
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by "inst_addr_update".
-- Set "inst_addr_base" to "inst_addr_update"
-- "inst_data" contains Instance Data according to "inst_mem_fields".
-- INSERT_INSTANCE Insert Instance to memory.
-- UPDATE_INSTANCE Update Instance Data pointed by "inst_addr_base" according to "inst_mem_fields"
-- GET_FIRST_INSTANCE Get Instance Data of first Instance according to "inst_mem_fields".
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no Instance in Memory.
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by "inst_addr_base") according to "inst_mem_fields".
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no other Instance in Memory.
-- REMOVE_INSTANCE Remove Instance pointed by "inst_addr_base".
-- GET_INSTANCE Get Data of Instance pointed by "inst_addr_update" according to "inst_mem_fields".
-- Already fetched Data of the Participant is not modified.
type INSTANCE_OPCODE_TYPE is (NOP, SEARCH_INSTANCE_HASH, SEARCH_INSTANCE_ADDR, INSERT_INSTANCE, UPDATE_INSTANCE, GET_FIRST_INSTANCE, GET_NEXT_INSTANCE, REMOVE_INSTANCE,
GET_INSTANCE);
-- Record of Instance Data
@ -418,6 +425,8 @@ architecture arch of dds_writer is
signal inst_cnt, inst_cnt_next : natural range 0 to 13 := 0;
-- General Purpose Long Latch
signal inst_long_latch, inst_long_latch_next : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := (others => '0');
-- Instance Memory Flag Array denoting which inst_data Fields are up-to-date with the respective fields of the Instance (Pointed by inst_addr_base)
signal current_imf, current_imf_next : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (others => '0');
--*****ALIAS DECLARATION*****
alias prev_sample : unsigned(SAMPLE_MEMORY_ADDR_WIDTH-1 downto 0) is sample_addr_latch_1;
@ -880,7 +889,7 @@ begin
source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', others => '0');
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', others => '0');
cur_sample_next <= empty_sample_list_head;
-- NOTE: We have to explicitly check the Payload Memory, as it may be "unaligned" with our Sample Memory
@ -937,7 +946,7 @@ begin
source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_DISPOSED_FLAG => '1', others => '0');
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_DISPOSED_FLAG => '1', others => '0');
cur_sample_next <= empty_sample_list_head;
-- NOTE: We always expect a Serialized Key as Input of this Opration, so we also check the Payload memory
@ -992,7 +1001,7 @@ begin
source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_UNREGISTERED_FLAG => '1', others => '0');
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_UNREGISTERED_FLAG => '1', others => '0');
cur_sample_next <= empty_sample_list_head;
-- NOTE: We always expect a Serialized Key as Input of this Opration, so we also check the Payload memory
@ -1278,7 +1287,7 @@ begin
if (ready_out_kh = '1') then
ready_in_dds <= '1';
-- Operation does not have Payload to store
if (sample_status_info(SSI_PAYLOAD_FLAG) = '0') then
if (sample_status_info(SSI_DATA_FLAG) = '0') then
-- End of Payload
if (last_word_in_dds = '1') then
last_word_out_kh <= '1';
@ -1450,10 +1459,14 @@ begin
end if;
end if;
when REGISTER_OPERATION =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Synthesis Guard
if (WITH_KEY) then
-- Wait for Instance Search to finish
if (inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Instance already in Memory
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- Accept Registration
@ -1567,10 +1580,11 @@ begin
null;
end case;
when FILTER_STAGE =>
-- Precondition: cur_sample set
-- Precondition: cur_sample set, inst_data set (IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Wait for Instance Search to finish
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Instance Found
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
@ -1775,8 +1789,12 @@ begin
end if;
end if;
when UPDATE_INSTANCE =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Synthesis Guard
if (WITH_KEY) then
inst_op_start <= '1';
@ -2473,10 +2491,12 @@ begin
null;
end case;
when POST_SAMPLE_REMOVE =>
-- Precondition: inst_data set (Status Info, Sample Count, ACK Count)
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Synthesis Guard
if (WITH_KEY) then
inst_op_start <= '1';
@ -2550,6 +2570,8 @@ begin
cnt_next <= 0;
end if;
when REMOVE_STALE_INSTANCE =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Synthesis Guard
if (WITH_KEY) then
-- Wait for Instance Data
@ -2557,6 +2579,8 @@ begin
case (cnt) is
-- Find and Remove First Stale Instance
when 0 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Iterated through all Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- NOTE: We should enter this state only if there is at least one stale Instance to be removed, so we should never enter this branch.
@ -2822,6 +2846,8 @@ begin
null;
end case;
when ACKNACK_SAMPLE =>
-- Precondition: inst_data set (IMF_ACK_CNT_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
case (cnt) is
-- GET Status Info
when 0 =>
@ -2865,6 +2891,8 @@ begin
if (WITH_KEY) then
-- Wait for Instance Data
if (inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
-- Update
inst_op_start <= '1';
inst_opcode <= UPDATE_INSTANCE;
@ -2897,6 +2925,8 @@ begin
null;
end case;
when GET_SAMPLE =>
-- Precondition: inst_data set (IMF_KEY_HASH_FLAG)
case (cnt) is
-- GET Status Info
when 0 =>
@ -2994,6 +3024,8 @@ begin
if (WITH_KEY) then
-- Wait for Instance Data
if (inst_op_done = '1') then
assert check_mask(current_imf, IMF_KEY_HASH_FLAG) severity FAILURE;
cc_instance_handle_sig_next <= inst_data.key_hash;
cnt_next <= cnt + 1;
@ -3362,7 +3394,8 @@ begin
last_word_out_dds <= '1';
if (ready_out_dds = '1') then
-- Reset
status_sig_next <= status_sig and (not OFFERED_DEADLINE_MISSED_STATUS);
deadline_miss_last_inst_next <= HANDLE_NIL;
status_sig_next <= status_sig and (not OFFERED_DEADLINE_MISSED_STATUS);
-- DONE
stage_next <= IDLE;
@ -3390,6 +3423,8 @@ begin
cnt_next <= 2;
-- Check Instance
when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
-- Reached End of Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE
@ -3449,8 +3484,10 @@ begin
if (sample_ready_in = '1') then
if (cur_sample = MAX_SAMPLE_ADDRESS) then
-- DONE
stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0;
stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0;
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
else
-- Continue
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
@ -3481,7 +3518,8 @@ begin
if (payload_ready_in = '1') then
if (cur_payload = MAX_PAYLOAD_ADDRESS) then
-- DONE
stage_next <= IDLE;
stage_next <= IDLE;
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
else
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
end if;
@ -3520,6 +3558,7 @@ begin
inst_cnt_next <= inst_cnt;
inst_data_next <= inst_data;
inst_long_latch_next <= inst_long_latch;
current_imf_next <= current_imf;
-- DEFAULT Unregistered
inst_ready_out <= '0';
inst_valid_in <= '0';
@ -3548,7 +3587,8 @@ begin
case(inst_opcode) is
when SEARCH_INSTANCE_HASH =>
-- Reset Data
inst_data_next <= ZERO_INSTANCE_DATA;
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances available
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
@ -3561,7 +3601,8 @@ begin
end if;
when SEARCH_INSTANCE_ADDR =>
-- Reset Data
inst_data_next <= ZERO_INSTANCE_DATA;
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
@ -3577,6 +3618,10 @@ begin
-- by the main process that the operation can succeed (Memory is available)
assert (inst_empty_head /= INSTANCE_MEMORY_MAX_ADDRESS) report "Instance Insertion while memory Full" severity FAILURE;
-- Reset Data
current_imf_next <= (others => '1');
inst_data_next <= ZERO_INSTANCE_DATA;
inst_addr_base_next <= inst_empty_head;
inst_stage_next <= INSERT_INSTANCE;
inst_cnt_next <= 0;
@ -3587,7 +3632,9 @@ begin
inst_data_next.sample_cnt <= sample_cnt;
inst_data_next.ack_cnt <= ack_cnt;
when UPDATE_INSTANCE =>
current_imf_next <= current_imf or inst_mem_fields;
inst_stage_next <= UPDATE_INSTANCE;
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
inst_cnt_next <= 0;
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
@ -3599,6 +3646,10 @@ begin
inst_stage_next <= IDLE;
end if;
when GET_FIRST_INSTANCE =>
-- Reset
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
@ -3609,6 +3660,10 @@ begin
inst_cnt_next <= 0;
end if;
when GET_NEXT_INSTANCE =>
-- Reset
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable
if (inst_next_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
@ -3619,12 +3674,23 @@ begin
inst_cnt_next <= 0;
end if;
when REMOVE_INSTANCE =>
-- Reset
current_imf_next <= (others => '0');
inst_data_next <= ZERO_INSTANCE_DATA;
inst_stage_next <= REMOVE_INSTANCE;
inst_cnt_next <= 0;
when GET_INSTANCE =>
inst_addr_base_next <= inst_addr_update;
if (inst_addr_base /= inst_addr_update) then
-- Reset
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
else
current_imf_next <= current_imf or inst_mem_fields;
end if;
-- Get Instance Data
inst_data_next <= ZERO_INSTANCE_DATA;
inst_stage_next <= GET_INSTANCE_DATA;
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
inst_cnt_next <= 0;
@ -4354,7 +4420,8 @@ begin
if (inst_ready_in = '1') then
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
-- DONE
inst_stage_next <= IDLE;
inst_stage_next <= IDLE;
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
else
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
end if;
@ -4413,9 +4480,9 @@ begin
orphan_samples <= '0';
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS;
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS;
empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
payload_addr_latch_1 <= (others => '0');
payload_addr_latch_2 <= (others => '0');
long_latch <= (others => '0');
@ -4434,8 +4501,9 @@ begin
liveliness_lost_cnt <= (others => '0');
liveliness_lost_cnt_change <= (others => '0');
status_sig <= (others => '0');
current_imf <= (others => '0');
inst_addr_base <= (others => '0');
inst_empty_head <= FIRST_INSTANCE_ADDRESS;
inst_empty_head <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_long_latch <= (others => '0');
inst_next_addr_base <= (others => '0');
@ -4504,6 +4572,7 @@ begin
liveliness_lost_cnt <= liveliness_lost_cnt_next;
liveliness_lost_cnt_change <= liveliness_lost_cnt_change_next;
status_sig <= status_sig_next;
current_imf <= current_imf_next when WITH_KEY else (others => '1');
inst_addr_base <= inst_addr_base_next;
inst_empty_head <= inst_empty_head_next;
inst_occupied_head <= inst_occupied_head_next;

View File

@ -8,7 +8,7 @@ entity history_cache is
MAX_INSTANCES : natural := DEFAULT_MAX_INSTANCES;
MAX_SAMPLES_PER_INSTANCE : natural := DEFAULT_MAX_SAMPLES_PER_INSTANCE;
HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_HISTORY_QOS;
RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_RELIABILTY_QOS;
RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_RELIABILITY_QOS;
GENERATION_COUNTERS : boolean := TRUE;
);
port (
@ -990,7 +990,7 @@ begin
writer_bitmap <= from_endpoint_bitmap(tmp_bitmap);
-- No More Writers for Instance
if (tmp_bitmap = (tmp_bitmap'range => '0')) then
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
inst_op_start_a <= '1';
instance_state <= NOT_ALIVE_NO_WRITERS;
inst_opcode_a <= UPDATE_INSTANCE;

File diff suppressed because it is too large Load Diff

View File

@ -54,7 +54,7 @@ package rtps_config_package is
constant SSI_FILTERED_FLAG : natural := STATUS_INFO_FILTERED_FLAG;
constant SSI_KEY_HASH_FLAG : natural := 28; -- Reader Only
constant SSI_ALIGNED_FLAG : natural := 29;
constant SSI_PAYLOAD_FLAG : natural := 30;
constant SSI_DATA_FLAG : natural := 30;
constant SSI_READ_FLAG : natural := 31; -- Reader Only
constant SSI_ACK_FLAG : natural := 31; -- Writer Only
@ -319,7 +319,7 @@ package body rtps_config_package is
-- Count Bytes
ret := ret + 1;
-- Exit on first NULL byte (NULL Byte included in count)
if (str(i)(WORD_WIDTH-(j*BYTE_WIDTH)-1 downto WORD_WIDTH-(j*BYTE_WIDTH)-BYTE_WIDTH) = (BYTE_WIDTH-1 downto 0 => '0')) then
if (str(i)(WORD_WIDTH-(j*BYTE_WIDTH)-1 downto WORD_WIDTH-(j*BYTE_WIDTH)-BYTE_WIDTH) = (0 to BYTE_WIDTH-1 => '0')) then
done := TRUE;
exit;
end if;
@ -490,7 +490,7 @@ package body rtps_config_package is
ret.data(ind+len) := std_logic_vector(ENDPOINT_TIME_BASED_FILTER_QOS(i)(1));
end if;
-- RELIABILITY
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
len := len + 1;
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
len := len + 1;
@ -675,7 +675,7 @@ package body rtps_config_package is
ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(1));
end if;
-- RELIABILITY
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
len := len + 1;
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
len := len + 1;
@ -801,7 +801,7 @@ package body rtps_config_package is
ret.data(ret.length) := std_logic_vector(ENDPOINT_LEASE_DURATION(id)(1));
end if;
-- RELIABILITY
if (ENDPOINT_RELIABILITY_QOS(id) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(id) /= DEFAULT_MAX_BLOCKING_TIME) then
if (ENDPOINT_RELIABILITY_QOS(id) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(id) /= DEFAULT_MAX_BLOCKING_TIME) then
ret.length := ret.length + 1;
ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
ret.length := ret.length + 1;
@ -1123,7 +1123,7 @@ package body rtps_config_package is
ret.LIVELINESS_QOS(i) := '0';
end if;
-- RELIABILITY
if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILTY_QOS), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then
if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then
ret.RELIABILITY_QOS(i) := '0';
end if;
-- DESTINATION_ORDER

View File

@ -385,13 +385,14 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
when 0 =>
src_guidprefix_next(0) <= data_in;
cnt_next <= cnt + 1;
when 1 =>
src_guidprefix_next(1) <= data_in;
cnt_next <= cnt + 1;
when 2 =>
src_guidprefix_next(2) <= data_in;
@ -494,7 +495,6 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
-- If Destination GUID Prefix is not us, skip the rest of the packet
case (cnt) is
@ -503,12 +503,16 @@ begin
if (data_in /= GUIDPREFIX(0)) then
-- Ignore
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- GUID Prefix 2/3
when 1 =>
if (data_in /= GUIDPREFIX(1)) then
-- Ignore
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- GUID Prefix 3/3
when 2 =>
@ -526,25 +530,28 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- unused
when 0 =>
null;
cnt_next <= cnt + 1;
-- Protocol Version & Vendor ID
when 1 =>
-- Check Major Protocol Version
if (data_in(31 downto 24) /= PROTOCOLVERSION_2_4(15 downto 8)) then
-- Protocol not supported, skip rest of Packet
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- GUID Prefix 1/3
when 2 =>
src_guidprefix_next(0) <= data_in;
cnt_next <= cnt + 1;
-- GUID Prefix 2/3
when 3 =>
src_guidprefix_next(1) <= data_in;
cnt_next <= cnt + 1;
-- GUID Prefix 3/3
when 4 =>
src_guidprefix_next(2) <= data_in;
@ -557,12 +564,12 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Timesatmp 1/2
when 0 =>
src_ts_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- Timesatmp 2/2
when 1 =>
src_ts_next(1) <= unsigned(data_in_swapped);
@ -601,7 +608,6 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Locator Kind
@ -612,6 +618,7 @@ begin
else
locator_match_next <= '0';
end if;
cnt_next <= cnt + 1;
-- Locator Port
when 1 =>
-- We only store UDPv4 Locators
@ -623,15 +630,16 @@ begin
long_latch_next <= data_in_swapped;
end if;
end if;
cnt_next <= cnt + 1;
-- Locator Address 1/4
when 2 =>
null;
cnt_next <= cnt + 1;
-- Locator Address 2/4
when 3 =>
null;
cnt_next <= cnt + 1;
-- Locator Address 3/4
when 4 =>
null;
cnt_next <= cnt + 1;
-- Locator Address 4/4 (IPv4 Address)
when 5 =>
-- We only store valid UDPv4 Locators
@ -651,7 +659,6 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- IPv4 Address
@ -663,6 +670,7 @@ begin
locator_match_next <= '1';
long_latch_next <= data_in_swapped;
end if;
cnt_next <= cnt + 1;
-- UDPv4 Port
when 1 =>
-- Store only valid Locators
@ -689,18 +697,20 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Reader Entity ID
when 0 =>
dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID
when 1 =>
src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- First Sequence Number 1/2
when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- First Sequence Number 2/2
when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped);
@ -710,6 +720,8 @@ begin
if (tmp_sn = 0 or tmp_sn(0)(WORD_WIDTH-1) = '1') then
-- If firstSN.value is zero or negative, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.5.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- Last Sequence Number 1/2
when 4 =>
@ -717,6 +729,7 @@ begin
-- Pre-Calculation for Validity Check
sn_latch_3_next <= sn_latch_1 - 1;
cnt_next <= cnt + 1;
-- Last Sequence Number 2/2
when 5 =>
sn_latch_2_next(1) <= unsigned(data_in_swapped);
@ -726,6 +739,8 @@ begin
if (tmp_sn(0)(WORD_WIDTH-1) = '1') then
-- If lastSN.value is negative, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.5.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- Count
when 6 =>
@ -746,19 +761,21 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Reader Entity ID
when 0 =>
src_is_reader_next <= '1';
src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID
when 1 =>
dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- ReaderSNState.Base 1/2
when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- ReaderSNState.Base 2/2
when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped);
@ -769,6 +786,8 @@ begin
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
-- If readerSNState is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.1.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- ReaderSNState.NumBits
when 4 =>
@ -781,6 +800,8 @@ begin
-- If numBits is negative or larger than 256, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
-- If readerSNState is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.1.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- ReaderSNState.Bitmap
when 5 =>
@ -789,13 +810,11 @@ begin
cnt2_next <= cnt2 + 1;
bitmap_latch_next(cnt2) <= data_in_swapped;
-- Keep Sub-State
cnt_next <= cnt;
-- Exit Condition
else
-- Prevent Input Latching
rd_guard := '0';
cnt_next <= cnt + 1;
end if;
-- Count
when 6 =>
@ -811,21 +830,24 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Reader Entity ID
when 0 =>
dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID
when 1 =>
src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- GapStart Sequence Number 1/2
when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- GapStart Sequence Number 2/2
when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- VALIDITY CHECK
tmp_sn := (0 => sn_latch_1(0), 1 => unsigned(data_in_swapped));
@ -833,13 +855,17 @@ begin
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- GapList.Base 1/2
when 4 =>
sn_latch_2_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- GapList.Base 2/2
when 5 =>
sn_latch_2_next(1) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- VALIDITY CHECK
tmp_sn := (0 => sn_latch_2(0), 1 => unsigned(data_in_swapped));
@ -847,6 +873,8 @@ begin
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- ReaderSNState.NumBits
when 6 =>
@ -860,6 +888,8 @@ begin
-- If numBits is negative or larger than 256, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if;
-- ReaderSNState.Bitmap
when 7 =>
@ -868,9 +898,6 @@ begin
cnt2_next <= cnt2 + 1;
bitmap_latch_next(cnt2) <= data_in_swapped;
-- Keep Sub-State
cnt_next <= cnt;
end if;
when others =>
null;
@ -887,7 +914,6 @@ begin
-- Input FIFO Guard
if (empty = '0') then
rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is
-- Extra Flags & octetstoinlineQoS
@ -896,15 +922,19 @@ begin
-- Latch Length to skip Uknown Data Header Part and latch offset to ensure 4-Byte alignement (see align_prc)
offset_latch_next <= std_logic_vector(rtps_sub_data_length(1 downto 0));
data_header_end_next <= (read_cnt_plus & "00") + rtps_sub_data_length;
cnt_next <= cnt + 1;
-- Reader Entity ID
when 1 =>
dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID
when 2 =>
src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Sequence Number 1/2
when 3 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- Sequence Number 2/2
when 4 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped);
@ -993,57 +1023,66 @@ begin
-- 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
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then
cnt_next <= cnt + 1;
case (cnt) is
-- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port
when 0 =>
data_out <= opcode & flags & src_port;
wr_sig <= '1';
cnt_next <= cnt + 1;
-- IPv4 Source Address
when 1 =>
data_out <= src_addr;
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 1/3
when 2 =>
data_out <= src_guidprefix(0);
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 2/3
when 3 =>
data_out <= src_guidprefix(1);
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 3/3
when 4 =>
data_out <= src_guidprefix(2);
wr_sig <= '1';
cnt_next <= cnt + 1;
-- Source Entity ID
when 5 =>
data_out <= src_entityid;
wr_sig <= '1';
cnt_next <= cnt + 1;
-- Destination ID [only for Built-in Endpoints]
when 6 =>
if (builtin_endpoint = '1') then
data_out <= dest_entityid;
wr_sig <= '1';
end if;
cnt_next <= cnt + 1;
-- Sequence Number 1/2 [only for DATA Submessages]
when 7 =>
if (opcode = SID_DATA) then
data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1';
end if;
cnt_next <= cnt + 1;
-- Sequence Number 2/2 [only for DATA Submessages]
when 8 =>
if (opcode = SID_DATA) then
data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1';
end if;
cnt_next <= cnt + 1;
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
when 9 =>
if (opcode = SID_DATA and builtin_endpoint = '0') then
data_out <= std_logic_vector(src_ts(0));
wr_sig <= '1';
end if;
cnt_next <= cnt + 1;
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
when 10 =>
if (opcode = SID_DATA and builtin_endpoint = '0') then
@ -1061,7 +1100,6 @@ begin
-- 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
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then
cnt_next <= cnt + 1;
case (opcode) is
when SID_HEARTBEAT =>
@ -1070,18 +1108,22 @@ begin
when 0 =>
data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- FirstSN 2/2
when 1 =>
data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- LastSN 1/2
when 2 =>
data_out <= std_logic_vector(sn_latch_2(0));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- LastSN 2/2
when 3 =>
data_out <= std_logic_vector(sn_latch_2(1));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- Count
when 4 =>
data_out <= long_latch;
@ -1099,15 +1141,18 @@ begin
when 0 =>
data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- ReaderSNState.Base 2/2
when 1 =>
data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- ReaderSNState.NumBits
when 2 =>
data_out <= std_logic_vector(ulong_latch);
wr_sig <= '1';
cnt2_next <= 0;
cnt_next <= cnt + 1;
-- ReaderSNState.Bitmap
when 3 =>
-- Write Bitmap
@ -1116,9 +1161,8 @@ begin
data_out <= bitmap_latch_next(cnt2);
wr_sig <= '1';
-- Keep Sub-State
cnt_next <= cnt;
else
cnt_next <= cnt + 1;
end if;
-- Count
when 4 =>
@ -1137,22 +1181,27 @@ begin
when 0 =>
data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapStart 2/2
when 1 =>
data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.Base 1/2
when 2 =>
data_out <= std_logic_vector(sn_latch_2(0));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.Base 2/2
when 3 =>
data_out <= std_logic_vector(sn_latch_2(1));
wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.NumBits
when 4 =>
data_out <= std_logic_vector(ulong_latch);
wr_sig <= '1';
cnt_next <= cnt + 1;
cnt2_next <= 0;
-- GapList.Bitmap
when 5 =>
@ -1162,9 +1211,8 @@ begin
data_out <= bitmap_latch_next(cnt2);
wr_sig <= '1';
-- Keep Sub-State
cnt_next <= cnt;
else
cnt_next <= cnt + 1;
end if;
-- NOTE: Because we need to pull "last_word_out" high on the last Byte, and doing so in the last Byte of Bitmap was deemed
-- to much overhead (We need a counter in addition to cnt2 to track the next-to-last Byte of the Bitmap), we just

View File

@ -384,7 +384,7 @@ package rtps_package is
-- RELIABILITY
constant BEST_EFFORT_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,CDR_ENUMERATION_WIDTH));
constant RELIABLE_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,CDR_ENUMERATION_WIDTH));
constant DEFAULT_RELIABILTY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := RELIABLE_RELIABILITY_QOS;
constant DEFAULT_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := RELIABLE_RELIABILITY_QOS;
-- MAX BLOCKING TIME (RELIABILITY)
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE; --Deferred to Package Body (100 ms)
-- TRANSPORT_PRIORITY
@ -463,8 +463,8 @@ package rtps_package is
function to_key_hash (A : GUID_TYPE) return KEY_HASH_TYPE;
-- *OVERLOAD FUNCTIONS*
function convert_from_double_word (input: DOUBLE_WORD_ARRAY) return unsigned;
function convert_to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY;
function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned;
function to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY;
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean;
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean;
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean;
@ -524,7 +524,7 @@ package body rtps_package is
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE := gen_duration(0,100 * (10**6)); -- 100 ms
constant DEFAULT_PARTICIPANT_LEASE_DURATION : DURATION_TYPE := gen_duration(100, 0); -- 100 s
function convert_from_double_word (input: DOUBLE_WORD_ARRAY) return unsigned is
function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned is
variable ret : unsigned(63 downto 0) := (others => '0');
begin
ret(63 downto 32) := input(0);
@ -532,7 +532,7 @@ package body rtps_package is
return ret;
end function;
function convert_to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY is
function to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY is
variable ret : DOUBLE_WORD_ARRAY := (others => (others => '0'));
begin
ret(0) := input(63 downto 32);
@ -542,122 +542,122 @@ package body rtps_package is
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) > convert_from_double_word(R);
return to_unsigned(L) > to_unsigned(R);
end function;
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) > R;
return to_unsigned(L) > R;
end function;
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L > convert_from_double_word(R);
return L > to_unsigned(R);
end function;
function "<" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) < convert_from_double_word(R);
return to_unsigned(L) < to_unsigned(R);
end function;
function "<" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) < R;
return to_unsigned(L) < R;
end function;
function "<" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L < convert_from_double_word(R);
return L < to_unsigned(R);
end function;
function ">=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) >= convert_from_double_word(R);
return to_unsigned(L) >= to_unsigned(R);
end function;
function ">=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) >= R;
return to_unsigned(L) >= R;
end function;
function ">=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L >= convert_from_double_word(R);
return L >= to_unsigned(R);
end function;
function "<=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) <= convert_from_double_word(R);
return to_unsigned(L) <= to_unsigned(R);
end function;
function "<=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) <= R;
return to_unsigned(L) <= R;
end function;
function "<=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L <= convert_from_double_word(R);
return L <= to_unsigned(R);
end function;
function "=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) = convert_from_double_word(R);
return to_unsigned(L) = to_unsigned(R);
end function;
function "=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) = R;
return to_unsigned(L) = R;
end function;
function "=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L = convert_from_double_word(R);
return L = to_unsigned(R);
end function;
function "/=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin
return convert_from_double_word(L) /= convert_from_double_word(R);
return to_unsigned(L) /= to_unsigned(R);
end function;
function "/=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin
return convert_from_double_word(L) /= R;
return to_unsigned(L) /= R;
end function;
function "/=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin
return L /= convert_from_double_word(R);
return L /= to_unsigned(R);
end function;
function "+" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(convert_from_double_word(L) + convert_from_double_word(R));
return to_double_word(to_unsigned(L) + to_unsigned(R));
end function;
function "+" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(convert_from_double_word(L) + R);
return to_double_word(to_unsigned(L) + R);
end function;
function "+" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(L + convert_from_double_word(R));
return to_double_word(L + to_unsigned(R));
end function;
function "-" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(convert_from_double_word(L) - convert_from_double_word(R));
return to_double_word(to_unsigned(L) - to_unsigned(R));
end function;
function "-" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(convert_from_double_word(L) - R);
return to_double_word(to_unsigned(L) - R);
end function;
function "-" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin
return convert_to_double_word(L - convert_from_double_word(R));
return to_double_word(L - to_unsigned(R));
end function;
function min(L, R : DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is

File diff suppressed because it is too large Load Diff

View File

@ -657,23 +657,23 @@ package body rtps_test_package is
locator => (
0 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
),
1 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
),
2 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
),
3 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
),
others => EMPTY_LOCATOR
)
@ -683,13 +683,13 @@ package body rtps_test_package is
locator => (
0 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_MULTICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_MULTICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
),
1 => (
kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_UNICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_UNICAST_PORT,
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
),
others => EMPTY_LOCATOR
)
@ -808,7 +808,7 @@ package body rtps_test_package is
liveliness => DEFAULT_LIVELINESS_QOS,
leaseDuration => DEFAULT_LEASE_DURATION,
time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS,
reliability => DEFAULT_RELIABILTY_QOS,
reliability => DEFAULT_RELIABILITY_QOS,
max_blocking_time => DEFAULT_MAX_BLOCKING_TIME,
transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS,
lifespan => DEFAULT_LIFESPAN_QOS,
@ -1018,9 +1018,9 @@ package body rtps_test_package is
begin
if (ref.kind /= LOCATOR_KIND_UDPv4) then
return FALSE;
elsif (ref.addr(IPv4_ADDRESS_WIDTH-1 downto 0) = (IPv4_ADDRESS_WIDTH-1 downto 0 => '0')) then
elsif (ref.addr(IPv4_ADDRESS_WIDTH-1 downto 0) = IPv4_ADDRESS_INVALID) then
return FALSE;
elsif (ref.portn(UDP_PORT_WIDTH-1 downto 0) = (UDP_PORT_WIDTH-1 downto 0 => '0')) then
elsif (ref.portn(UDP_PORT_WIDTH-1 downto 0) = UDP_PORT_INVALID) then
return FALSE;
else
return TRUE;
@ -1263,10 +1263,10 @@ package body rtps_test_package is
if (ref.submessageID = SID_ACKNACK or ref.submessageID = SID_NACK_FRAG or ref.submessageID = SID_HEARTBEAT or ref.submessageID = SID_HEARTBEAT_FRAG or ref.submessageID = SID_GAP or ref.submessageID = SID_DATA or ref.submessageID = SID_DATA_FRAG or ref.submessageID = SID_INFO_TS or ref.submessageID = SID_INFO_SRC or ref.submessageID = SID_INFO_DST or ref.submessageID = SID_INFO_REPLY or ref.submessageID =SID_INFO_REPLY_IP4) then
-- NOTE: A Submessage Length of 0 is left as is.
-- Fix Submessage Length
if (ref.submessageLength = (ref.submessageLength'range => '1')) then
if (ref.submessageLength = (ref.submessageLength'reverse_range => '1')) then
output.data(start)(SUBMESSAGE_LENGTH_WIDTH-1 downto 0) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), int((output.length-start-1)*4,SUBMESSAGE_LENGTH_WIDTH));
-- Fix(Truncate/Extend) Packet Length to specified Length
elsif (ref.submessageLength /= (ref.submessageLength'range => '0')) then
elsif (ref.submessageLength /= (ref.submessageLength'reverse_range => '0')) then
output.length := start + to_integer(unsigned(ref.submessageLength));
end if;
-- *PAD/UKNOWN*
@ -1422,7 +1422,7 @@ package body rtps_test_package is
null;
end case;
if (ref.payload.length > 0 and (not ref.serialized_key)) then
output.data(output.length)(SSI_PAYLOAD_FLAG) := '1';
output.data(output.length)(SSI_DATA_FLAG) := '1';
end if;
if (ref.instance /= HANDLE_NIL) then
output.data(output.length)(SSI_KEY_HASH_FLAG) := '1';
@ -1604,7 +1604,7 @@ package body rtps_test_package is
end if;
end if;
-- METATRAFFIC MULTICAST LOCATOR
if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'range => '0')) then
if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'reverse_range => '0')) then
tmp := to_integer(unsigned(ref.metatrafficMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then
@ -1632,7 +1632,7 @@ package body rtps_test_package is
end loop;
end if;
-- METATRAFFIC UNICAST LOCATOR
if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'range => '0')) then
if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'reverse_range => '0')) then
tmp := to_integer(unsigned(ref.metatrafficUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then
@ -1660,7 +1660,7 @@ package body rtps_test_package is
end loop;
end if;
-- DEFAULT MULTICAST LOCATOR
if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'range => '0')) then
if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'reverse_range => '0')) then
tmp := to_integer(unsigned(ref.defaultMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then
@ -1689,7 +1689,7 @@ package body rtps_test_package is
end if;
-- DEFAULT UNICAST LOCATOR
assert (unsigned(ref.defaultUnicastLocatorList.numLocators) > 0) report "PARTICIPANT_DATA: Participant needs to have at least one Default Unicast Locator." severity error;
if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'range => '0')) then
if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'reverse_range => '0')) then
tmp := to_integer(unsigned(ref.defaultUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_UNICAST_LOCATOR) then
@ -1885,7 +1885,7 @@ package body rtps_test_package is
-- UDP Port
when 5 =>
if (ref.match = MATCH) then
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
else
ret(i).data := (others => '-');
end if;
@ -2004,7 +2004,7 @@ package body rtps_test_package is
-- UDP Port
when 5 =>
if (ref.match = MATCH) then
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
ret(i).data(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0);
ret(i).data(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '1' when (ref.durability /= VOLATILE_DURABILITY_QOS) else '0';
ret(i).data(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0';
@ -2073,7 +2073,7 @@ package body rtps_test_package is
-- UDP Port
when 5 =>
if (ref.match = MATCH) then
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
ret(i).data(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0);
ret(i).data(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '1' when (ref.durability /= VOLATILE_DURABILITY_QOS) else '0';
ret(i).data(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0';
@ -2373,7 +2373,7 @@ package body rtps_test_package is
end if;
end if;
-- RELIABILITY
if (ref.reliability /= DEFAULT_RELIABILTY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
if (ref.reliability /= DEFAULT_RELIABILITY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
if (pid = PID_RELIABILITY) then
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_RELIABILITY & endian_swap(ref.littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
@ -2601,7 +2601,7 @@ package body rtps_test_package is
procedure gen_sentinel(output : inout TEST_PACKET_TYPE) is
begin
output.data(output.length) := PID_SENTINEL & (PARAMETER_LENGTH_WIDTH-1 downto 0 => '0');
output.data(output.length) := PID_SENTINEL & (0 to PARAMETER_LENGTH_WIDTH-1 => '0');
output.length := output.length + 1;
end procedure;
@ -2803,7 +2803,7 @@ package body rtps_test_package is
end if;
end if;
-- RELIABILITY
if (endpoint.reliability /= DEFAULT_RELIABILTY_QOS or endpoint.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
if (endpoint.reliability /= DEFAULT_RELIABILITY_QOS or endpoint.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
if (pid = PID_RELIABILITY) then
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE;
output.data(output.length) := PID_RELIABILITY & endian_swap(littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
@ -3155,7 +3155,7 @@ package body rtps_test_package is
for i in 0 to max(mem.ilen-1,0) loop
-- Instance Found
if (inst = mem.inst(i).inst) then
if (((mem.inst(i).istate and istate) /= (istate'range => '0')) and ((mem.inst(i).vstate and vstate) /= (vstate'range => '0'))) then
if (((mem.inst(i).istate and istate) /= (istate'reverse_range => '0')) and ((mem.inst(i).vstate and vstate) /= (vstate'reverse_range => '0'))) then
return TRUE;
end if;
end if;
@ -3173,6 +3173,7 @@ package body rtps_test_package is
end if;
end loop;
assert FALSE report "Instance not in Memory" severity FAILURE;
return mem.ilen;
end function;
procedure gen_collection (mem : inout DDS_READER_MEM_TYPE; col : inout COLLECTION_TYPE; inst : INSTANCE_HANDLE_TYPE; sstate : in std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0); istate : in std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0); vstate : in std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0); max_samples : in natural; remove : in boolean; sort : in boolean) is
@ -3189,7 +3190,7 @@ package body rtps_test_package is
loop
if (no_inst) then
-- Sample and Instance Compatible
if (((mem.s(i).sstate and sstate) /= (sstate'range => '0')) and check_instance(istate, vstate, mem, mem.s(i).inst) and ((inst /= HANDLE_NIL and inst = mem.s(i).inst) or inst = HANDLE_NIL) and (sel(i) /= '1')) then
if (((mem.s(i).sstate and sstate) /= (sstate'reverse_range => '0')) and check_instance(istate, vstate, mem, mem.s(i).inst) and ((inst /= HANDLE_NIL and inst = mem.s(i).inst) or inst = HANDLE_NIL) and (sel(i) /= '1')) then
col.s(col.len) := mem.s(i);
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate;
col.s(col.len).vstate := mem.inst(find_instance(mem,mem.s(i).inst)).vstate;
@ -3206,7 +3207,7 @@ package body rtps_test_package is
end if;
end if;
-- Sample Compatible (and belonging to specified Instance)
elsif (((mem.s(i).sstate and sstate) /= (sstate'range => '0')) and (mem.s(i).inst = tmp_inst) and (sel(i) /= '1')) then
elsif (((mem.s(i).sstate and sstate) /= (sstate'reverse_range => '0')) and (mem.s(i).inst = tmp_inst) and (sel(i) /= '1')) then
col.s(col.len) := mem.s(i);
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate;
col.s(col.len).vstate := mem.inst(find_instance(mem,mem.s(i).inst)).vstate;

File diff suppressed because it is too large Load Diff

View File

@ -94,7 +94,7 @@ package user_config is
constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS);
-- XXX: PARTITION QoS Ignored
-- Array mapping RELIABILITY QoS to Endpoints
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_RELIABILTY_QOS);
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_RELIABILITY_QOS);
-- (Only relevant to Writers)
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME);
-- Array mapping TRANSPORT_PRIORITY QoS to Endpoints (Only relevant to Writers)
@ -120,4 +120,7 @@ package user_config is
-- NOTE: The buffer will not only store participants, but also endpoint data
-- Used to determine the size of the builtin endpoint buffer
constant MAX_REMOTE_PARTICIPANTS : natural := 50;
-- Set to TRUE for Simulation Testing (Extra Code generated)
constant SIMULATION_FLAG : boolean := FALSE;
end package;