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) * Unconstrained arrays in records (Supported in Pro)
* Vectors in aggregate statements * Vectors in aggregate statements
e.g. V := ("0000", others => '1'); e.g. V := ("0000", others => '1');
* Unary logical operators * 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 ; Inhibit range checks on all (implicit and explicit) assignments to
; scalar objects defined with subtypes. ; scalar objects defined with subtypes.
NoRangeCheck = 1 NoRangeCheck = 0
[vlog] [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 port
( (
reset : in std_logic; reset : in std_logic;
clk : in std_logic; clk : in std_logic;
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0); data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
write : in std_logic; write : in std_logic;
read : in std_logic; read : in std_logic;
data_out : out std_logic_vector(DATA_WIDTH-1 downto 0); data_out : out std_logic_vector(DATA_WIDTH-1 downto 0);
empty : out std_logic; empty : out std_logic;
full : out std_logic; full : out std_logic;
free : out natural range 0 to FIFO_DEPTH free : out natural range 0 to FIFO_DEPTH
); );
end entity; end entity;
@ -40,21 +40,21 @@ begin
sync : process(clk, reset) sync : process(clk, reset)
variable free_var : integer range 0 to FIFO_DEPTH; variable free_var : integer range 0 to FIFO_DEPTH;
begin begin
if(rising_edge(clk)) then if rising_edge(clk) then
if(reset = '1') then if (reset = '1') then
fifo_data <= (others => (others => '0')); fifo_data <= (others => (others => '0'));
free_sig <= FIFO_DEPTH; free_sig <= FIFO_DEPTH;
else else
free_var := free_sig; 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 for i in 1 to (FIFO_DEPTH-1) loop
fifo_data(i-1) <= fifo_data(i); fifo_data(i-1) <= fifo_data(i);
end loop; end loop;
fifo_data(FIFO_DEPTH-1) <= (others => '0'); fifo_data(FIFO_DEPTH-1) <= (others => '0');
free_var := free_var + 1; free_var := free_var + 1;
end if; end if;
if(write = '1') then if (write = '1') then
if(free_var > 0) then if (free_var > 0) then
fifo_data(FIFO_DEPTH-free_var) <= data_in; fifo_data(FIFO_DEPTH-free_var) <= data_in;
free_var := free_var - 1; free_var := free_var - 1;
end if; end if;

View File

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

View File

@ -301,7 +301,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1562,7 +1562,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1560,7 +1560,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1011,7 +1011,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1556,7 +1556,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -475,7 +475,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1348,7 +1348,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1347,7 +1347,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1366,7 +1366,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -707,7 +707,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -606,7 +606,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -475,7 +475,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -768,7 +768,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -538,7 +538,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -478,7 +478,7 @@ begin
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate); AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate); AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate); 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(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(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))); 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 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -2087,15 +2087,15 @@ begin
if (rtps.ret_code = OK) then if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -281,7 +281,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -2067,15 +2067,15 @@ begin
if (rtps.ret_code = OK) then if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -254,7 +254,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -991,15 +991,15 @@ begin
when GET_CACHE_CHANGE => when GET_CACHE_CHANGE =>
if (rtps.ret_code = OK) then 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -281,7 +281,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -1839,15 +1839,15 @@ begin
if (rtps.ret_code = OK) then if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -215,7 +215,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -472,15 +472,15 @@ begin
if (rtps.ret_code = OK) then if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -232,7 +232,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, 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(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -232,7 +232,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, 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(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -232,7 +232,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, 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(2), rtps.cc.instance(2));
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; end case;

View File

@ -232,7 +232,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);
@ -591,15 +591,15 @@ begin
if (rtps.ret_code = OK) then if (rtps.ret_code = OK) then
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance)); 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(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(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp)); AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
rtps_stage <= CHECK; rtps_stage <= CHECK;
rtps_cnt <= 0; rtps_cnt <= 0;
end if; end if;
when GET_MIN_SN => 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 => 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 => when others =>
null; null;
end case; 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 addr : std_logic_vector(ADDR_WIDTH-1 downto 0) := (others => '0');
signal reset : std_logic := '1'; signal reset : std_logic := '1';
shared variable SB : osvvm.ScoreBoardPkg_slv.ScoreBoardPType; 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 begin
@ -69,6 +78,7 @@ begin
RV.InitSeed(RV'instance_name); RV.InitSeed(RV'instance_name);
Log("Initiating Test", INFO); Log("Initiating Test", INFO);
stim_done <= '0';
valid_in <= '0'; valid_in <= '0';
data_in <= (others => '0'); data_in <= (others => '0');
reset <= '1'; reset <= '1';
@ -193,10 +203,8 @@ begin
wait until rising_edge(clk); wait until rising_edge(clk);
wait until rising_edge(clk); wait until rising_edge(clk);
-- Wait until test Completion stim_done <= '1';
if (not SB.empty) then wait_on_complete;
wait until SB.empty;
end if;
TranscriptOpen(RESULTS_FILE, APPEND_MODE); TranscriptOpen(RESULTS_FILE, APPEND_MODE);
SetTranscriptMirror; SetTranscriptMirror;
ReportAlerts; ReportAlerts;
@ -217,6 +225,17 @@ begin
end if; end if;
end process; 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 clock_prc : process
begin begin
clk <= '0'; clk <= '0';

View File

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

View File

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

View File

@ -76,7 +76,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -142,7 +142,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -76,7 +76,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -142,7 +142,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -64,7 +64,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -198,7 +198,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

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

View File

@ -60,7 +60,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS, LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO, HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
@ -213,7 +213,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -70,7 +70,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -149,7 +149,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -70,7 +70,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -149,7 +149,7 @@ begin
end procedure; end procedure;
begin 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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -54,7 +54,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -183,7 +183,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -83,7 +83,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0), HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
@ -245,7 +245,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -84,7 +84,7 @@ begin
uut : entity work.rtps_reader(arch) uut : entity work.rtps_reader(arch)
generic map ( generic map (
ENTITYID => DEFAULT_READER_ENTITYID, ENTITYID => DEFAULT_READER_ENTITYID,
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0), HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
@ -246,7 +246,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS, DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS, RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -336,7 +336,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -337,7 +337,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -77,7 +77,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS, LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -339,7 +339,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, TRUE); SetAlertEnable(WARNING, TRUE);

View File

@ -76,7 +76,7 @@ begin
-- Unit Under Test -- Unit Under Test
uut : entity work.rtps_writer(arch) uut : entity work.rtps_writer(arch)
generic map ( generic map (
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS, RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS, LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
DURABILITY_QOS => VOLATILE_DURABILITY_QOS, DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS, DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
@ -277,7 +277,7 @@ begin
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(FAILURE, TRUE);
SetAlertEnable(ERROR, TRUE); SetAlertEnable(ERROR, TRUE);
SetAlertEnable(WARNING, 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) := ( constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
15 => BEST_EFFORT_RELIABILITY_QOS, 15 => BEST_EFFORT_RELIABILITY_QOS,
NUM_READERS+3 => BEST_EFFORT_RELIABILITY_QOS, NUM_READERS+3 => BEST_EFFORT_RELIABILITY_QOS,
others => DEFAULT_RELIABILTY_QOS others => DEFAULT_RELIABILITY_QOS
); );
-- (Only relevant to Writers) -- (Only relevant to Writers)
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := ( constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
@ -215,4 +215,7 @@ package user_config is
-- TESTING PARAMETERS -- TESTING PARAMETERS
constant TEST_STRING : string := "TEST_CONFIG_1"; constant TEST_STRING : string := "TEST_CONFIG_1";
-- Set to TRUE for Simulation Testing (Extra Code generated)
constant SIMULATION_FLAG : boolean := TRUE;
end package; 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_test1
simulate L0_rtps_handler_test2 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_test1
simulate L0_rtps_builtin_endpoint_test2 simulate L0_rtps_builtin_endpoint_test2
simulate L0_rtps_builtin_endpoint_test3 simulate L0_rtps_builtin_endpoint_test3
simulate L0_rtps_builtin_endpoint_test4 simulate L0_rtps_builtin_endpoint_test4
simulate L0_rtps_builtin_endpoint_test5 simulate L0_rtps_builtin_endpoint_test5
simulate L0_rtps_builtin_endpoint_test6 simulate L0_rtps_builtin_endpoint_test6
simulate L0_rtps_out_test1
simulate L1_rtps_builtin_endpoint_test1 simulate L1_rtps_builtin_endpoint_test1
simulate L0_mem_ctrl_test1
simulate L0_rtps_reader_test1_vrk simulate L0_rtps_reader_test1_vrk
simulate L0_rtps_reader_test1_vbk simulate L0_rtps_reader_test1_vbk
simulate L0_rtps_reader_test2_vrk simulate L0_rtps_reader_test2_vrk
@ -106,6 +106,7 @@ simulate L1_rtps_reader_test1_vrk
simulate L1_rtps_reader_test1_trk simulate L1_rtps_reader_test1_trk
simulate L0_rtps_writer_test1_vrkdp simulate L0_rtps_writer_test1_vrkdp
simulate L0_rtps_writer_test1_vbkdp simulate L0_rtps_writer_test1_vbkdp
simulate L0_rtps_writer_test2_vrkdp
simulate L1_rtps_writer_test1_vrkdp simulate L1_rtps_writer_test1_vrkdp
simulate L1_rtps_writer_test1_trkdp simulate L1_rtps_writer_test1_trkdp
simulate L1_rtps_writer_test1_tbkdp 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_vrkdn
simulate L1_rtps_writer_test1_trkdn simulate L1_rtps_writer_test1_trkdn
simulate L1_rtps_writer_test2_vrkdn simulate L1_rtps_writer_test2_vrkdn
simulate L0_rtps_writer_test2_vrkdp
simulate L0_dds_writer_test1_aik simulate L0_dds_writer_test1_aik
simulate L0_dds_writer_test1_ain simulate L0_dds_writer_test1_ain
simulate L0_dds_writer_test1_lik 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 -- 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'); 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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant SMF_STATUS_INFO_OFFSET : natural := 0; constant SMF_STATUS_INFO_OFFSET : natural := 0;
constant SMF_TIMESTAMP_OFFSET : natural := 1; 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_PREV_ADDR_OFFSET : natural := SMF_NO_WRITERS_GEN_CNT_OFFSET + 1;
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant PMF_NEXT_ADDR_OFFSET : natural := 0; constant PMF_NEXT_ADDR_OFFSET : natural := 0;
constant PMF_PAYLOAD_OFFSET : natural := 1; 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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant IMF_NEXT_ADDR_OFFSET : natural := 0; constant IMF_NEXT_ADDR_OFFSET : natural := 0;
constant IMF_KEY_HASH_OFFSET : natural := 1; constant IMF_KEY_HASH_OFFSET : natural := 1;
@ -195,7 +195,7 @@ architecture arch of dds_reader is
end function; end function;
constant IMF_WRITER_BITMAP_OFFSET : natural := gen_imf_writer_bitmap_offset(TIME_BASED_FILTER_QOS); 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 -- Flags mapping to the respective Endpoint Memory Frame Fields
constant IMF_FLAG_WIDTH : natural := 7; constant IMF_FLAG_WIDTH : natural := 7;
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0'); 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); REMOVE_INSTANCE, UNMARK_INSTANCES, RESET_MEMORY);
-- *Instance Memory Opcodes* -- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION -- OPCODE DESCRIPTION
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash. -- 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] -- 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. -- 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) -- 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). (inst_mem_fields specifies which Fields to get) -- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order) according to "inst_mem_fields".
-- 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) -- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no Instance in Memory.
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base -- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by "inst_addr_base") according to "inst_mem_fields".
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get) -- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no other Instance in Memory.
-- UNMARK_INSTANCES Reset the MARK_FLAG of all stored Instances -- 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, 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); 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); 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'; 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 -- 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'; signal remove_oldest_inst_sample, remove_oldest_inst_sample_next : std_logic := '0';
-- Remote Writer Endpoint Bitmap Position -- Remote Writer ID
signal writer_pos, writer_pos_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0; signal writer_id, writer_id_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0;
-- Key Hash Latch -- Key Hash Latch
signal key_hash, key_hash_next : KEY_HASH_TYPE := HANDLE_NIL; signal key_hash, key_hash_next : KEY_HASH_TYPE := HANDLE_NIL;
-- RTPS Return Code Latch -- 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 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 : 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 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); alias has_key_hash : std_logic is sample_status_info(SSI_KEY_HASH_FLAG);
-- *FUNCTION DECLARATION* -- *FUNCTION DECLARATION*
@ -533,6 +540,19 @@ architecture arch of dds_reader is
return ret; return ret;
end function; 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 begin
--*****COMPONENT INSTANTIATION***** --*****COMPONENT INSTANTIATION*****
@ -675,7 +695,7 @@ begin
sample_addr_latch_3_next <= sample_addr_latch_3; sample_addr_latch_3_next <= sample_addr_latch_3;
sample_addr_latch_4_next <= sample_addr_latch_4; sample_addr_latch_4_next <= sample_addr_latch_4;
sample_addr_latch_5_next <= sample_addr_latch_5; sample_addr_latch_5_next <= sample_addr_latch_5;
writer_pos_next <= writer_pos; writer_id_next <= writer_id;
key_hash_next <= key_hash; key_hash_next <= key_hash;
sample_status_info_next <= sample_status_info; sample_status_info_next <= sample_status_info;
remove_oldest_sample_next <= remove_oldest_sample; remove_oldest_sample_next <= remove_oldest_sample;
@ -911,7 +931,7 @@ begin
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Latch Writer Pos -- 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; stage_next <= REMOVE_WRITER;
cnt_next <= 2; cnt_next <= 2;
else else
@ -925,7 +945,7 @@ begin
inst_data_next2.writer_bitmap <= to_writer_bitmap_array(tmp_bitmap); inst_data_next2.writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- NOT_ALIVE_NO_WRITERS Transition -- 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'; trigger_sample_gen_next <= '1';
inst_data_next2.status_info(ISI_GENERATE_SAMPLE_FLAG) <= '1'; inst_data_next2.status_info(ISI_GENERATE_SAMPLE_FLAG) <= '1';
inst_data_next2.status_info(ISI_NOT_ALIVE_NO_WRITERS_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. -- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
sample_valid_in <= '1'; sample_valid_in <= '1';
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET; sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
sample_write_data <= data_in_rtps; sample_write_data <= data_in_rtps;
sample_write_data(SSI_READ_FLAG) <= '0'; sample_write_data(SSI_KEY_HASH_FLAG) <= '0'; -- Key Hash Flag is not stored
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_PAYLOAD_FLAG); sample_write_data(SSI_READ_FLAG) <= '0';
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_DATA_FLAG);
-- Latch Status Info -- Latch Status Info
sample_status_info_next <= data_in_rtps; sample_status_info_next <= data_in_rtps;
sample_status_info_next(SSI_READ_FLAG) <= '0'; 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 -- Memory Flow Control Guard
if (sample_ready_in = '1') then if (sample_ready_in = '1') then
ready_in_rtps <= '1'; ready_in_rtps <= '1';
@ -1297,7 +1318,7 @@ begin
if (valid_in_rtps = '1') then if (valid_in_rtps = '1') then
ready_in_rtps <= '1'; ready_in_rtps <= '1';
-- Latch Input, but do not pass to Memory -- 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; cnt_next <= cnt + 1;
end if; end if;
-- SET Payload Address -- SET Payload Address
@ -1597,6 +1618,7 @@ begin
-- Wait for Instance Search to finish -- Wait for Instance Search to finish
if (not WITH_KEY or inst_op_done = '1') then 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 -- Instance Found
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then 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); sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID; deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0'); tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1'; tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap); 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 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); sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID; deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0'); tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1'; tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap); 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 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 -- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then 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) -- DEFAULT STATUS INFO (LIVELINESS)
if (WITH_KEY) then if (WITH_KEY) then
tmp_update := IMF_STATUS_FLAG; tmp_update := IMF_STATUS_FLAG;
@ -2054,9 +2078,9 @@ begin
-- ALIVE/FILTERED/DISPOSE Operation -- ALIVE/FILTERED/DISPOSE Operation
if (sample_status_info(SSI_UNREGISTERED_FLAG) /= '1') then if (sample_status_info(SSI_UNREGISTERED_FLAG) /= '1') then
-- Write if Writer New for Instance -- Write if Writer New for Instance
if (tmp_bitmap(writer_pos) /= '1') then if (tmp_bitmap(writer_id) /= '1') then
-- Insert Writer -- Insert Writer
tmp_bitmap(writer_pos) := '1'; tmp_bitmap(writer_id) := '1';
-- Convert Back -- Convert Back
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
@ -2068,9 +2092,9 @@ begin
end if; end if;
else else
-- Write if Writer New for Instance -- Write if Writer New for Instance
if (tmp_bitmap(writer_pos) /= '0') then if (tmp_bitmap(writer_id) /= '0') then
-- Insert Writer -- Insert Writer
tmp_bitmap(writer_pos) := '0'; tmp_bitmap(writer_id) := '0';
-- Convert Back -- Convert Back
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
@ -2128,7 +2152,7 @@ begin
end if; end if;
end if; end if;
-- * -> NOT_ALIVE_NO_WRITERS Transition -- * -> 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 -- 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 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; tmp_bool := FALSE;
@ -2206,7 +2230,7 @@ begin
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Stale Instance Transition -- 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; stale_inst_cnt_next <= stale_inst_cnt + 1;
end if; end if;
end if; end if;
@ -2276,6 +2300,7 @@ begin
-- Wait for instance Update to Complete -- Wait for instance Update to Complete
if (not WITH_KEY or inst_op_done = '1') then 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 case (cnt) is
-- SET Disposed Generation Counter -- SET Disposed Generation Counter
@ -2481,181 +2506,187 @@ begin
end case; end case;
when GENERATE_SAMPLE => when GENERATE_SAMPLE =>
-- Precondition: cur_sample set, cur_inst set, inst_data set (IMF_DISPOSED_CNT_FLAG, IMF_NO_WRITERS_CNT_FLAG) -- 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) -- Wait for Instane Data
when 0 => if (not WITH_KEY or inst_op_done = '1') then
sample_valid_in <= '1'; assert check_mask(current_imf, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
sample_read <= '1'; case (cnt) is
-- GET Next Sample (Empty List)
-- Memory Flow Control Guard when 0 =>
if (sample_ready_in = '1') then sample_valid_in <= '1';
cnt_next <= cnt + 1; sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
end if; sample_read <= '1';
-- 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 -- Memory Flow Control Guard
status_sig_next <= status_sig or DATA_AVAILABLE_STATUS; if (sample_ready_in = '1') then
cnt_next <= cnt + 1;
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;
end if; -- SET Sample Status Info
when others => when 1 =>
null; sample_valid_in <= '1';
end case; 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 => when GET_OLDEST_SAMPLE_INSTANCE =>
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
@ -2755,7 +2786,7 @@ begin
if (inst_op_done = '1') then if (inst_op_done = '1') then
inst_op_start <= '1'; inst_op_start <= '1';
inst_opcode <= GET_INSTANCE; 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; inst_addr_update <= cur_inst;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
end if; end if;
@ -2960,6 +2991,8 @@ begin
-- Memory Operation Guard -- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then 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 -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Stale Instance Update -- Stale Instance Update
@ -3045,12 +3078,16 @@ begin
null; null;
end case; end case;
when REMOVE_WRITER => when REMOVE_WRITER =>
-- Precondition: inst_data set (IMF_WRITER_BITMAP_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Memory Operation Guard -- Memory Operation Guard
if (inst_op_done = '1') then if (inst_op_done = '1') then
case (cnt) is case (cnt) is
when 0 => 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 -- No More Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE -- DONE
@ -3062,7 +3099,7 @@ begin
tmp_bitmap := from_writer_bitmap_array(inst_data.writer_bitmap); tmp_bitmap := from_writer_bitmap_array(inst_data.writer_bitmap);
-- Remove Writer -- 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 -- NOTE: writer_bitmap is not latched, since the memory process is latching it at the
-- same clock cycle. -- same clock cycle.
@ -3070,7 +3107,7 @@ begin
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap); writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- NOT_ALIVE_NO_WRITERS Transition -- 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'; trigger_sample_gen_next <= '1';
status_info_update <= inst_data.status_info; status_info_update <= inst_data.status_info;
status_info_update(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1'; status_info_update(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1';
@ -3085,7 +3122,7 @@ begin
end if; end if;
-- Update Stale Instance Count -- 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; stale_inst_cnt_next <= stale_inst_cnt + 1;
end if; end if;
@ -3119,6 +3156,8 @@ begin
case (cnt) is case (cnt) is
-- Find and Remove First Stale Instance -- Find and Remove First Stale Instance
when 0 => when 0 =>
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG) severity FAILURE;
-- Iterated through all Instances -- Iterated through all Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then 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. -- 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); sample_cnt <= to_unsigned(1, WORD_WIDTH);
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID; deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
tmp_bitmap := (others => '0'); tmp_bitmap := (others => '0');
tmp_bitmap(writer_pos) := '1'; tmp_bitmap(writer_id) := '1';
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap); writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
-- Latch Instance Pointer -- Latch Instance Pointer
@ -3356,6 +3395,7 @@ begin
when 7 => when 7 =>
-- Wait for Instance Data -- Wait for Instance Data
if (not WITH_KEY or inst_op_done = '1') then 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; assert (next_inst = inst_addr_base) severity FAILURE;
-- DEFAULT -- DEFAULT
@ -3793,6 +3833,7 @@ begin
if (WITH_KEY) then if (WITH_KEY) then
-- Wait for Instance Data -- Wait for Instance Data
if (inst_op_done = '1') then if (inst_op_done = '1') then
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
assert (next_inst = inst_addr_base) severity FAILURE; assert (next_inst = inst_addr_base) severity FAILURE;
-- DEFAULT -- DEFAULT
@ -3947,6 +3988,7 @@ begin
when 2 => when 2 =>
-- Memory Operation Guard -- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then 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 -- 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 -- mark the instances we have already handled, in order to prevent the GET_NEXT_SAMPLE state to
-- re-process them. -- re-process them.
@ -3954,6 +3996,7 @@ begin
if (si_sample_rank_sig = 0) then if (si_sample_rank_sig = 0) then
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
inst_op_start <= '1'; inst_op_start <= '1';
inst_opcode <= UPDATE_INSTANCE; inst_opcode <= UPDATE_INSTANCE;
inst_mem_fields <= IMF_STATUS_FLAG; inst_mem_fields <= IMF_STATUS_FLAG;
@ -4175,6 +4218,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG; inst_mem_fields <= IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG;
cnt_next <= 2; cnt_next <= 2;
when 2 => when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found -- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- DEFAULT -- DEFAULT
@ -4265,6 +4310,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG; inst_mem_fields <= IMF_STATUS_FLAG;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 1 => when 1 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found -- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- DEFAULT -- DEFAULT
@ -4482,6 +4529,8 @@ begin
inst_mem_fields <= IMF_STATUS_FLAG; inst_mem_fields <= IMF_STATUS_FLAG;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
when 2 => when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
-- Instance Found -- Instance Found
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- Sample needs to be Generated -- Sample needs to be Generated
@ -4505,6 +4554,8 @@ begin
stage_next <= IDLE; stage_next <= IDLE;
end if; end if;
when 3 => when 3 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG) severity FAILURE;
-- RESOURCE_LIMITS_QOS (MAX_SAMPLES_PER_INSTANCE) -- 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 (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 if (HISTORY_QOS = KEEP_ALL_HISTORY_QOS and RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS) then
@ -4724,6 +4775,8 @@ begin
cnt_next <= 2; cnt_next <= 2;
-- Check Instance -- Check Instance
when 2 => when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
-- Reached End of Instances -- Reached End of Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE -- DONE
@ -4783,8 +4836,10 @@ begin
if (sample_ready_in = '1') then if (sample_ready_in = '1') then
if (cur_sample = MAX_SAMPLE_ADDRESS) then if (cur_sample = MAX_SAMPLE_ADDRESS) then
-- DONE -- DONE
stage_next <= RESET_PAYLOAD_MEMORY; stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0; cnt_next <= 0;
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
else else
-- Continue -- Continue
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE; cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
@ -4815,7 +4870,8 @@ begin
if (payload_ready_in = '1') then if (payload_ready_in = '1') then
if (cur_payload = MAX_PAYLOAD_ADDRESS) then if (cur_payload = MAX_PAYLOAD_ADDRESS) then
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
else else
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE; cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
end if; end if;
@ -4940,6 +4996,7 @@ begin
when UPDATE_INSTANCE => when UPDATE_INSTANCE =>
current_imf_next <= current_imf or inst_mem_fields; current_imf_next <= current_imf or inst_mem_fields;
inst_stage_next <= UPDATE_INSTANCE; inst_stage_next <= UPDATE_INSTANCE;
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
inst_cnt_next <= 0; inst_cnt_next <= 0;
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
@ -5001,6 +5058,7 @@ begin
else else
current_imf_next <= current_imf or inst_mem_fields; current_imf_next <= current_imf or inst_mem_fields;
end if; end if;
-- Get Instance Data -- Get Instance Data
inst_stage_next <= GET_INSTANCE_DATA; inst_stage_next <= GET_INSTANCE_DATA;
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
@ -6462,7 +6520,8 @@ begin
if (inst_ready_in = '1') then if (inst_ready_in = '1') then
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
-- DONE -- DONE
inst_stage_next <= IDLE; inst_stage_next <= IDLE;
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
else else
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE; inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
end if; end if;
@ -6484,14 +6543,14 @@ begin
inst_stage <= RESET_MEMORY; inst_stage <= RESET_MEMORY;
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS; newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS; oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS; empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS; empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS; empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
inst_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS; inst_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS; inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_next_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS; inst_next_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_prev_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; key_hash <= HANDLE_NIL;
si_instance_handle_sig <= HANDLE_NIL; si_instance_handle_sig <= HANDLE_NIL;
si_publication_handle_sig <= (others => (others => '0')); si_publication_handle_sig <= (others => (others => '0'));
@ -6514,7 +6573,7 @@ begin
sample_rej_last_reason <= NOT_REJECTED; sample_rej_last_reason <= NOT_REJECTED;
rtps_return_code_latch <= ERROR; rtps_return_code_latch <= ERROR;
dds_return_code_latch <= RETCODE_ERROR; dds_return_code_latch <= RETCODE_ERROR;
writer_pos <= 0; writer_id <= 0;
cnt <= 0; cnt <= 0;
cnt2 <= 0; cnt2 <= 0;
cnt3 <= 0; cnt3 <= 0;
@ -6601,7 +6660,7 @@ begin
sample_rej_last_reason <= sample_rej_last_reason_next; sample_rej_last_reason <= sample_rej_last_reason_next;
rtps_return_code_latch <= rtps_return_code_latch_next; rtps_return_code_latch <= rtps_return_code_latch_next;
dds_return_code_latch <= dds_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; cnt <= cnt_next;
cnt2 <= cnt2_next; cnt2 <= cnt2_next;
cnt3 <= cnt3_next; cnt3 <= cnt3_next;
@ -6624,7 +6683,7 @@ begin
wait_for_sample_removal <= wait_for_sample_removal_next; wait_for_sample_removal <= wait_for_sample_removal_next;
dis_gen_cnt_latch <= dis_gen_cnt_latch_next; dis_gen_cnt_latch <= dis_gen_cnt_latch_next;
no_w_gen_cnt_latch <= no_w_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_1 <= sample_addr_latch_1_next;
sample_addr_latch_2 <= sample_addr_latch_2_next; sample_addr_latch_2 <= sample_addr_latch_2_next;
sample_addr_latch_3 <= sample_addr_latch_3_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 -- 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'); 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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant SMF_STATUS_INFO_OFFSET : natural := 0; constant SMF_STATUS_INFO_OFFSET : natural := 0;
constant SMF_SEQ_NR_OFFSET : natural := 1; 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_PREV_ADDR_OFFSET : natural := gen_smf_prev_addr_offset(WITH_KEY);
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant PMF_NEXT_ADDR_OFFSET : natural := 0; constant PMF_NEXT_ADDR_OFFSET : natural := 0;
constant PMF_PAYLOAD_OFFSET : natural := 1; 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 -- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
constant IMF_NEXT_ADDR_OFFSET : natural := 0; constant IMF_NEXT_ADDR_OFFSET : natural := 0;
constant IMF_KEY_HASH_OFFSET : natural := 1; 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_SAMPLE_CNT_OFFSET : natural := 6;
constant IMF_ACK_CNT_OFFSET : natural := 7; 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 -- Flags mapping to the respective Endpoint Memory Frame Fields
constant IMF_FLAG_WIDTH : natural := 4; constant IMF_FLAG_WIDTH : natural := 4;
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0'); 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); REMOVE_INSTANCE, RESET_MEMORY);
-- *Instance Memory Opcodes* -- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION -- OPCODE DESCRIPTION
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash. -- 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] -- Set "inst_addr_base" to Base Address of found Instance, of INSTANCE_MEMORY_MAX_ADDRESS if nothing found.
-- INSERT_INSTANCE Insert Instance to memory. The Instance is inserted in Key Hash Numerical Order. -- "inst_data" contains Instance Data according to "inst_mem_fields".
-- UPDATE_INSTANCE Update Instance Data pointed by inst_addr_base. (inst_mem_fields specifies which Fields to update) -- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by "inst_addr_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) -- Set "inst_addr_base" to "inst_addr_update"
-- 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) -- "inst_data" contains Instance Data according to "inst_mem_fields".
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base -- INSERT_INSTANCE Insert Instance to memory.
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get) -- 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, 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); GET_INSTANCE);
-- Record of Instance Data -- 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; signal inst_cnt, inst_cnt_next : natural range 0 to 13 := 0;
-- General Purpose Long Latch -- General Purpose Long Latch
signal inst_long_latch, inst_long_latch_next : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := (others => '0'); 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 DECLARATION*****
alias prev_sample : unsigned(SAMPLE_MEMORY_ADDR_WIDTH-1 downto 0) is sample_addr_latch_1; 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; source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset. -- 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; 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 -- 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; source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset. -- 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; 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 -- 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; source_ts_next <= source_ts_dds;
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset. -- 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; 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 -- 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 if (ready_out_kh = '1') then
ready_in_dds <= '1'; ready_in_dds <= '1';
-- Operation does not have Payload to store -- 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 -- End of Payload
if (last_word_in_dds = '1') then if (last_word_in_dds = '1') then
last_word_out_kh <= '1'; last_word_out_kh <= '1';
@ -1450,10 +1459,14 @@ begin
end if; end if;
end if; end if;
when REGISTER_OPERATION => when REGISTER_OPERATION =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Wait for Instance Search to finish -- Wait for Instance Search to finish
if (inst_op_done = '1') then 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 -- Instance already in Memory
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
-- Accept Registration -- Accept Registration
@ -1567,10 +1580,11 @@ begin
null; null;
end case; end case;
when FILTER_STAGE => 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 -- Wait for Instance Search to finish
if (not WITH_KEY or inst_op_done = '1') then 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 -- Instance Found
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
@ -1775,8 +1789,12 @@ begin
end if; end if;
end if; end if;
when UPDATE_INSTANCE => when UPDATE_INSTANCE =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Memory Operation Guard -- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then 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 -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
inst_op_start <= '1'; inst_op_start <= '1';
@ -2473,10 +2491,12 @@ begin
null; null;
end case; end case;
when POST_SAMPLE_REMOVE => 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 -- Memory Operation Guard
if (not WITH_KEY or inst_op_done = '1') then 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 -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
inst_op_start <= '1'; inst_op_start <= '1';
@ -2550,6 +2570,8 @@ begin
cnt_next <= 0; cnt_next <= 0;
end if; end if;
when REMOVE_STALE_INSTANCE => when REMOVE_STALE_INSTANCE =>
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
-- Synthesis Guard -- Synthesis Guard
if (WITH_KEY) then if (WITH_KEY) then
-- Wait for Instance Data -- Wait for Instance Data
@ -2557,6 +2579,8 @@ begin
case (cnt) is case (cnt) is
-- Find and Remove First Stale Instance -- Find and Remove First Stale Instance
when 0 => 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 -- Iterated through all Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then 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. -- 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; null;
end case; end case;
when ACKNACK_SAMPLE => when ACKNACK_SAMPLE =>
-- Precondition: inst_data set (IMF_ACK_CNT_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
case (cnt) is case (cnt) is
-- GET Status Info -- GET Status Info
when 0 => when 0 =>
@ -2865,6 +2891,8 @@ begin
if (WITH_KEY) then if (WITH_KEY) then
-- Wait for Instance Data -- Wait for Instance Data
if (inst_op_done = '1') then 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 -- Update
inst_op_start <= '1'; inst_op_start <= '1';
inst_opcode <= UPDATE_INSTANCE; inst_opcode <= UPDATE_INSTANCE;
@ -2897,6 +2925,8 @@ begin
null; null;
end case; end case;
when GET_SAMPLE => when GET_SAMPLE =>
-- Precondition: inst_data set (IMF_KEY_HASH_FLAG)
case (cnt) is case (cnt) is
-- GET Status Info -- GET Status Info
when 0 => when 0 =>
@ -2994,6 +3024,8 @@ begin
if (WITH_KEY) then if (WITH_KEY) then
-- Wait for Instance Data -- Wait for Instance Data
if (inst_op_done = '1') then 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; cc_instance_handle_sig_next <= inst_data.key_hash;
cnt_next <= cnt + 1; cnt_next <= cnt + 1;
@ -3362,7 +3394,8 @@ begin
last_word_out_dds <= '1'; last_word_out_dds <= '1';
if (ready_out_dds = '1') then if (ready_out_dds = '1') then
-- Reset -- 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 -- DONE
stage_next <= IDLE; stage_next <= IDLE;
@ -3390,6 +3423,8 @@ begin
cnt_next <= 2; cnt_next <= 2;
-- Check Instance -- Check Instance
when 2 => when 2 =>
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
-- Reached End of Instances -- Reached End of Instances
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
-- DONE -- DONE
@ -3449,8 +3484,10 @@ begin
if (sample_ready_in = '1') then if (sample_ready_in = '1') then
if (cur_sample = MAX_SAMPLE_ADDRESS) then if (cur_sample = MAX_SAMPLE_ADDRESS) then
-- DONE -- DONE
stage_next <= RESET_PAYLOAD_MEMORY; stage_next <= RESET_PAYLOAD_MEMORY;
cnt_next <= 0; cnt_next <= 0;
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
else else
-- Continue -- Continue
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE; cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
@ -3481,7 +3518,8 @@ begin
if (payload_ready_in = '1') then if (payload_ready_in = '1') then
if (cur_payload = MAX_PAYLOAD_ADDRESS) then if (cur_payload = MAX_PAYLOAD_ADDRESS) then
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
else else
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE; cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
end if; end if;
@ -3520,6 +3558,7 @@ begin
inst_cnt_next <= inst_cnt; inst_cnt_next <= inst_cnt;
inst_data_next <= inst_data; inst_data_next <= inst_data;
inst_long_latch_next <= inst_long_latch; inst_long_latch_next <= inst_long_latch;
current_imf_next <= current_imf;
-- DEFAULT Unregistered -- DEFAULT Unregistered
inst_ready_out <= '0'; inst_ready_out <= '0';
inst_valid_in <= '0'; inst_valid_in <= '0';
@ -3548,7 +3587,8 @@ begin
case(inst_opcode) is case(inst_opcode) is
when SEARCH_INSTANCE_HASH => when SEARCH_INSTANCE_HASH =>
-- Reset Data -- Reset Data
inst_data_next <= ZERO_INSTANCE_DATA; current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances available -- No Instances available
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
@ -3561,7 +3601,8 @@ begin
end if; end if;
when SEARCH_INSTANCE_ADDR => when SEARCH_INSTANCE_ADDR =>
-- Reset Data -- Reset Data
inst_data_next <= ZERO_INSTANCE_DATA; current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable -- No Instances avialable
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then 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) -- 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; 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_addr_base_next <= inst_empty_head;
inst_stage_next <= INSERT_INSTANCE; inst_stage_next <= INSERT_INSTANCE;
inst_cnt_next <= 0; inst_cnt_next <= 0;
@ -3587,7 +3632,9 @@ begin
inst_data_next.sample_cnt <= sample_cnt; inst_data_next.sample_cnt <= sample_cnt;
inst_data_next.ack_cnt <= ack_cnt; inst_data_next.ack_cnt <= ack_cnt;
when UPDATE_INSTANCE => when UPDATE_INSTANCE =>
current_imf_next <= current_imf or inst_mem_fields;
inst_stage_next <= UPDATE_INSTANCE; inst_stage_next <= UPDATE_INSTANCE;
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
inst_cnt_next <= 0; inst_cnt_next <= 0;
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
@ -3599,6 +3646,10 @@ begin
inst_stage_next <= IDLE; inst_stage_next <= IDLE;
end if; end if;
when GET_FIRST_INSTANCE => when GET_FIRST_INSTANCE =>
-- Reset
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable -- No Instances avialable
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS; inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
@ -3609,6 +3660,10 @@ begin
inst_cnt_next <= 0; inst_cnt_next <= 0;
end if; end if;
when GET_NEXT_INSTANCE => when GET_NEXT_INSTANCE =>
-- Reset
current_imf_next <= inst_mem_fields;
inst_data_next <= ZERO_INSTANCE_DATA;
-- No Instances avialable -- No Instances avialable
if (inst_next_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then if (inst_next_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS; inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
@ -3619,12 +3674,23 @@ begin
inst_cnt_next <= 0; inst_cnt_next <= 0;
end if; end if;
when REMOVE_INSTANCE => when REMOVE_INSTANCE =>
-- Reset
current_imf_next <= (others => '0');
inst_data_next <= ZERO_INSTANCE_DATA;
inst_stage_next <= REMOVE_INSTANCE; inst_stage_next <= REMOVE_INSTANCE;
inst_cnt_next <= 0; inst_cnt_next <= 0;
when GET_INSTANCE => when GET_INSTANCE =>
inst_addr_base_next <= inst_addr_update; 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 -- Get Instance Data
inst_data_next <= ZERO_INSTANCE_DATA;
inst_stage_next <= GET_INSTANCE_DATA; inst_stage_next <= GET_INSTANCE_DATA;
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
inst_cnt_next <= 0; inst_cnt_next <= 0;
@ -4354,7 +4420,8 @@ begin
if (inst_ready_in = '1') then if (inst_ready_in = '1') then
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
-- DONE -- DONE
inst_stage_next <= IDLE; inst_stage_next <= IDLE;
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
else else
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE; inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
end if; end if;
@ -4413,9 +4480,9 @@ begin
orphan_samples <= '0'; orphan_samples <= '0';
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS; newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS; oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS; empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS; empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS; empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
payload_addr_latch_1 <= (others => '0'); payload_addr_latch_1 <= (others => '0');
payload_addr_latch_2 <= (others => '0'); payload_addr_latch_2 <= (others => '0');
long_latch <= (others => '0'); long_latch <= (others => '0');
@ -4434,8 +4501,9 @@ begin
liveliness_lost_cnt <= (others => '0'); liveliness_lost_cnt <= (others => '0');
liveliness_lost_cnt_change <= (others => '0'); liveliness_lost_cnt_change <= (others => '0');
status_sig <= (others => '0'); status_sig <= (others => '0');
current_imf <= (others => '0');
inst_addr_base <= (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_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
inst_long_latch <= (others => '0'); inst_long_latch <= (others => '0');
inst_next_addr_base <= (others => '0'); inst_next_addr_base <= (others => '0');
@ -4504,6 +4572,7 @@ begin
liveliness_lost_cnt <= liveliness_lost_cnt_next; liveliness_lost_cnt <= liveliness_lost_cnt_next;
liveliness_lost_cnt_change <= liveliness_lost_cnt_change_next; liveliness_lost_cnt_change <= liveliness_lost_cnt_change_next;
status_sig <= status_sig_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_addr_base <= inst_addr_base_next;
inst_empty_head <= inst_empty_head_next; inst_empty_head <= inst_empty_head_next;
inst_occupied_head <= inst_occupied_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_INSTANCES : natural := DEFAULT_MAX_INSTANCES;
MAX_SAMPLES_PER_INSTANCE : natural := DEFAULT_MAX_SAMPLES_PER_INSTANCE; MAX_SAMPLES_PER_INSTANCE : natural := DEFAULT_MAX_SAMPLES_PER_INSTANCE;
HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_HISTORY_QOS; 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; GENERATION_COUNTERS : boolean := TRUE;
); );
port ( port (
@ -990,7 +990,7 @@ begin
writer_bitmap <= from_endpoint_bitmap(tmp_bitmap); writer_bitmap <= from_endpoint_bitmap(tmp_bitmap);
-- No More Writers for Instance -- 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'; inst_op_start_a <= '1';
instance_state <= NOT_ALIVE_NO_WRITERS; instance_state <= NOT_ALIVE_NO_WRITERS;
inst_opcode_a <= UPDATE_INSTANCE; 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_FILTERED_FLAG : natural := STATUS_INFO_FILTERED_FLAG;
constant SSI_KEY_HASH_FLAG : natural := 28; -- Reader Only constant SSI_KEY_HASH_FLAG : natural := 28; -- Reader Only
constant SSI_ALIGNED_FLAG : natural := 29; 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_READ_FLAG : natural := 31; -- Reader Only
constant SSI_ACK_FLAG : natural := 31; -- Writer Only constant SSI_ACK_FLAG : natural := 31; -- Writer Only
@ -319,7 +319,7 @@ package body rtps_config_package is
-- Count Bytes -- Count Bytes
ret := ret + 1; ret := ret + 1;
-- Exit on first NULL byte (NULL Byte included in count) -- 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; done := TRUE;
exit; exit;
end if; 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)); ret.data(ind+len) := std_logic_vector(ENDPOINT_TIME_BASED_FILTER_QOS(i)(1));
end if; end if;
-- RELIABILITY -- 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; len := len + 1;
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
len := len + 1; 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)); ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(1));
end if; end if;
-- RELIABILITY -- 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; len := len + 1;
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
len := len + 1; 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)); ret.data(ret.length) := std_logic_vector(ENDPOINT_LEASE_DURATION(id)(1));
end if; end if;
-- RELIABILITY -- 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.length := ret.length + 1;
ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16)); ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
ret.length := ret.length + 1; ret.length := ret.length + 1;
@ -1123,7 +1123,7 @@ package body rtps_config_package is
ret.LIVELINESS_QOS(i) := '0'; ret.LIVELINESS_QOS(i) := '0';
end if; end if;
-- RELIABILITY -- 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'; ret.RELIABILITY_QOS(i) := '0';
end if; end if;
-- DESTINATION_ORDER -- DESTINATION_ORDER

View File

@ -385,13 +385,14 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
when 0 => when 0 =>
src_guidprefix_next(0) <= data_in; src_guidprefix_next(0) <= data_in;
cnt_next <= cnt + 1;
when 1 => when 1 =>
src_guidprefix_next(1) <= data_in; src_guidprefix_next(1) <= data_in;
cnt_next <= cnt + 1;
when 2 => when 2 =>
src_guidprefix_next(2) <= data_in; src_guidprefix_next(2) <= data_in;
@ -494,7 +495,6 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
-- If Destination GUID Prefix is not us, skip the rest of the packet -- If Destination GUID Prefix is not us, skip the rest of the packet
case (cnt) is case (cnt) is
@ -503,12 +503,16 @@ begin
if (data_in /= GUIDPREFIX(0)) then if (data_in /= GUIDPREFIX(0)) then
-- Ignore -- Ignore
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 1 => when 1 =>
if (data_in /= GUIDPREFIX(1)) then if (data_in /= GUIDPREFIX(1)) then
-- Ignore -- Ignore
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 2 => when 2 =>
@ -526,25 +530,28 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- unused -- unused
when 0 => when 0 =>
null; cnt_next <= cnt + 1;
-- Protocol Version & Vendor ID -- Protocol Version & Vendor ID
when 1 => when 1 =>
-- Check Major Protocol Version -- Check Major Protocol Version
if (data_in(31 downto 24) /= PROTOCOLVERSION_2_4(15 downto 8)) then if (data_in(31 downto 24) /= PROTOCOLVERSION_2_4(15 downto 8)) then
-- Protocol not supported, skip rest of Packet -- Protocol not supported, skip rest of Packet
stage_next <= SKIP_PACKET; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 2 => when 2 =>
src_guidprefix_next(0) <= data_in; src_guidprefix_next(0) <= data_in;
cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 3 => when 3 =>
src_guidprefix_next(1) <= data_in; src_guidprefix_next(1) <= data_in;
cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 4 => when 4 =>
src_guidprefix_next(2) <= data_in; src_guidprefix_next(2) <= data_in;
@ -557,12 +564,12 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Timesatmp 1/2 -- Timesatmp 1/2
when 0 => when 0 =>
src_ts_next(0) <= unsigned(data_in_swapped); src_ts_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- Timesatmp 2/2 -- Timesatmp 2/2
when 1 => when 1 =>
src_ts_next(1) <= unsigned(data_in_swapped); src_ts_next(1) <= unsigned(data_in_swapped);
@ -601,7 +608,6 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Locator Kind -- Locator Kind
@ -612,6 +618,7 @@ begin
else else
locator_match_next <= '0'; locator_match_next <= '0';
end if; end if;
cnt_next <= cnt + 1;
-- Locator Port -- Locator Port
when 1 => when 1 =>
-- We only store UDPv4 Locators -- We only store UDPv4 Locators
@ -623,15 +630,16 @@ begin
long_latch_next <= data_in_swapped; long_latch_next <= data_in_swapped;
end if; end if;
end if; end if;
cnt_next <= cnt + 1;
-- Locator Address 1/4 -- Locator Address 1/4
when 2 => when 2 =>
null; cnt_next <= cnt + 1;
-- Locator Address 2/4 -- Locator Address 2/4
when 3 => when 3 =>
null; cnt_next <= cnt + 1;
-- Locator Address 3/4 -- Locator Address 3/4
when 4 => when 4 =>
null; cnt_next <= cnt + 1;
-- Locator Address 4/4 (IPv4 Address) -- Locator Address 4/4 (IPv4 Address)
when 5 => when 5 =>
-- We only store valid UDPv4 Locators -- We only store valid UDPv4 Locators
@ -651,7 +659,6 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- IPv4 Address -- IPv4 Address
@ -663,6 +670,7 @@ begin
locator_match_next <= '1'; locator_match_next <= '1';
long_latch_next <= data_in_swapped; long_latch_next <= data_in_swapped;
end if; end if;
cnt_next <= cnt + 1;
-- UDPv4 Port -- UDPv4 Port
when 1 => when 1 =>
-- Store only valid Locators -- Store only valid Locators
@ -689,18 +697,20 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Reader Entity ID -- Reader Entity ID
when 0 => when 0 =>
dest_entityid_next <= data_in; dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 1 => when 1 =>
src_entityid_next <= data_in; src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- First Sequence Number 1/2 -- First Sequence Number 1/2
when 2 => when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped); sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- First Sequence Number 2/2 -- First Sequence Number 2/2
when 3 => when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped); 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 (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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- Last Sequence Number 1/2 -- Last Sequence Number 1/2
when 4 => when 4 =>
@ -717,6 +729,7 @@ begin
-- Pre-Calculation for Validity Check -- Pre-Calculation for Validity Check
sn_latch_3_next <= sn_latch_1 - 1; sn_latch_3_next <= sn_latch_1 - 1;
cnt_next <= cnt + 1;
-- Last Sequence Number 2/2 -- Last Sequence Number 2/2
when 5 => when 5 =>
sn_latch_2_next(1) <= unsigned(data_in_swapped); sn_latch_2_next(1) <= unsigned(data_in_swapped);
@ -726,6 +739,8 @@ begin
if (tmp_sn(0)(WORD_WIDTH-1) = '1') then 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- Count -- Count
when 6 => when 6 =>
@ -746,19 +761,21 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Reader Entity ID -- Reader Entity ID
when 0 => when 0 =>
src_is_reader_next <= '1'; src_is_reader_next <= '1';
src_entityid_next <= data_in; src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 1 => when 1 =>
dest_entityid_next <= data_in; dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- ReaderSNState.Base 1/2 -- ReaderSNState.Base 1/2
when 2 => when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped); sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- ReaderSNState.Base 2/2 -- ReaderSNState.Base 2/2
when 3 => when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped); 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 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- ReaderSNState.NumBits -- ReaderSNState.NumBits
when 4 => 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 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- ReaderSNState.Bitmap -- ReaderSNState.Bitmap
when 5 => when 5 =>
@ -789,13 +810,11 @@ begin
cnt2_next <= cnt2 + 1; cnt2_next <= cnt2 + 1;
bitmap_latch_next(cnt2) <= data_in_swapped; bitmap_latch_next(cnt2) <= data_in_swapped;
-- Keep Sub-State
cnt_next <= cnt;
-- Exit Condition -- Exit Condition
else else
-- Prevent Input Latching -- Prevent Input Latching
rd_guard := '0'; rd_guard := '0';
cnt_next <= cnt + 1;
end if; end if;
-- Count -- Count
when 6 => when 6 =>
@ -811,21 +830,24 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Reader Entity ID -- Reader Entity ID
when 0 => when 0 =>
dest_entityid_next <= data_in; dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 1 => when 1 =>
src_entityid_next <= data_in; src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- GapStart Sequence Number 1/2 -- GapStart Sequence Number 1/2
when 2 => when 2 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped); sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- GapStart Sequence Number 2/2 -- GapStart Sequence Number 2/2
when 3 => when 3 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped); sn_latch_1_next(1) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- VALIDITY CHECK -- VALIDITY CHECK
tmp_sn := (0 => sn_latch_1(0), 1 => unsigned(data_in_swapped)); 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 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- GapList.Base 1/2 -- GapList.Base 1/2
when 4 => when 4 =>
sn_latch_2_next(0) <= unsigned(data_in_swapped); sn_latch_2_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- GapList.Base 2/2 -- GapList.Base 2/2
when 5 => when 5 =>
sn_latch_2_next(1) <= unsigned(data_in_swapped); sn_latch_2_next(1) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- VALIDITY CHECK -- VALIDITY CHECK
tmp_sn := (0 => sn_latch_2(0), 1 => unsigned(data_in_swapped)); 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 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- ReaderSNState.NumBits -- ReaderSNState.NumBits
when 6 => 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 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) -- 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; stage_next <= SKIP_PACKET;
else
cnt_next <= cnt + 1;
end if; end if;
-- ReaderSNState.Bitmap -- ReaderSNState.Bitmap
when 7 => when 7 =>
@ -868,9 +898,6 @@ begin
cnt2_next <= cnt2 + 1; cnt2_next <= cnt2 + 1;
bitmap_latch_next(cnt2) <= data_in_swapped; bitmap_latch_next(cnt2) <= data_in_swapped;
-- Keep Sub-State
cnt_next <= cnt;
end if; end if;
when others => when others =>
null; null;
@ -887,7 +914,6 @@ begin
-- Input FIFO Guard -- Input FIFO Guard
if (empty = '0') then if (empty = '0') then
rd_guard := '1'; rd_guard := '1';
cnt_next <= cnt + 1;
case (cnt) is case (cnt) is
-- Extra Flags & octetstoinlineQoS -- 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) -- 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)); 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; data_header_end_next <= (read_cnt_plus & "00") + rtps_sub_data_length;
cnt_next <= cnt + 1;
-- Reader Entity ID -- Reader Entity ID
when 1 => when 1 =>
dest_entityid_next <= data_in; dest_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Writer Entity ID -- Writer Entity ID
when 2 => when 2 =>
src_entityid_next <= data_in; src_entityid_next <= data_in;
cnt_next <= cnt + 1;
-- Sequence Number 1/2 -- Sequence Number 1/2
when 3 => when 3 =>
sn_latch_1_next(0) <= unsigned(data_in_swapped); sn_latch_1_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- Sequence Number 2/2 -- Sequence Number 2/2
when 4 => when 4 =>
sn_latch_1_next(1) <= unsigned(data_in_swapped); 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. -- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
-- Output FIFO Guard -- Output FIFO Guard
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then 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 case (cnt) is
-- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port -- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port
when 0 => when 0 =>
data_out <= opcode & flags & src_port; data_out <= opcode & flags & src_port;
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- IPv4 Source Address -- IPv4 Source Address
when 1 => when 1 =>
data_out <= src_addr; data_out <= src_addr;
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 1/3 -- GUID Prefix 1/3
when 2 => when 2 =>
data_out <= src_guidprefix(0); data_out <= src_guidprefix(0);
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 2/3 -- GUID Prefix 2/3
when 3 => when 3 =>
data_out <= src_guidprefix(1); data_out <= src_guidprefix(1);
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GUID Prefix 3/3 -- GUID Prefix 3/3
when 4 => when 4 =>
data_out <= src_guidprefix(2); data_out <= src_guidprefix(2);
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- Source Entity ID -- Source Entity ID
when 5 => when 5 =>
data_out <= src_entityid; data_out <= src_entityid;
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- Destination ID [only for Built-in Endpoints] -- Destination ID [only for Built-in Endpoints]
when 6 => when 6 =>
if (builtin_endpoint = '1') then if (builtin_endpoint = '1') then
data_out <= dest_entityid; data_out <= dest_entityid;
wr_sig <= '1'; wr_sig <= '1';
end if; end if;
cnt_next <= cnt + 1;
-- Sequence Number 1/2 [only for DATA Submessages] -- Sequence Number 1/2 [only for DATA Submessages]
when 7 => when 7 =>
if (opcode = SID_DATA) then if (opcode = SID_DATA) then
data_out <= std_logic_vector(sn_latch_1(0)); data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1'; wr_sig <= '1';
end if; end if;
cnt_next <= cnt + 1;
-- Sequence Number 2/2 [only for DATA Submessages] -- Sequence Number 2/2 [only for DATA Submessages]
when 8 => when 8 =>
if (opcode = SID_DATA) then if (opcode = SID_DATA) then
data_out <= std_logic_vector(sn_latch_1(1)); data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1'; wr_sig <= '1';
end if; end if;
cnt_next <= cnt + 1;
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints] -- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
when 9 => when 9 =>
if (opcode = SID_DATA and builtin_endpoint = '0') then if (opcode = SID_DATA and builtin_endpoint = '0') then
data_out <= std_logic_vector(src_ts(0)); data_out <= std_logic_vector(src_ts(0));
wr_sig <= '1'; wr_sig <= '1';
end if; end if;
cnt_next <= cnt + 1;
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints] -- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
when 10 => when 10 =>
if (opcode = SID_DATA and builtin_endpoint = '0') then 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. -- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
-- Output FIFO Guard -- Output FIFO Guard
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then 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 case (opcode) is
when SID_HEARTBEAT => when SID_HEARTBEAT =>
@ -1070,18 +1108,22 @@ begin
when 0 => when 0 =>
data_out <= std_logic_vector(sn_latch_1(0)); data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- FirstSN 2/2 -- FirstSN 2/2
when 1 => when 1 =>
data_out <= std_logic_vector(sn_latch_1(1)); data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- LastSN 1/2 -- LastSN 1/2
when 2 => when 2 =>
data_out <= std_logic_vector(sn_latch_2(0)); data_out <= std_logic_vector(sn_latch_2(0));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- LastSN 2/2 -- LastSN 2/2
when 3 => when 3 =>
data_out <= std_logic_vector(sn_latch_2(1)); data_out <= std_logic_vector(sn_latch_2(1));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- Count -- Count
when 4 => when 4 =>
data_out <= long_latch; data_out <= long_latch;
@ -1099,15 +1141,18 @@ begin
when 0 => when 0 =>
data_out <= std_logic_vector(sn_latch_1(0)); data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- ReaderSNState.Base 2/2 -- ReaderSNState.Base 2/2
when 1 => when 1 =>
data_out <= std_logic_vector(sn_latch_1(1)); data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- ReaderSNState.NumBits -- ReaderSNState.NumBits
when 2 => when 2 =>
data_out <= std_logic_vector(ulong_latch); data_out <= std_logic_vector(ulong_latch);
wr_sig <= '1'; wr_sig <= '1';
cnt2_next <= 0; cnt2_next <= 0;
cnt_next <= cnt + 1;
-- ReaderSNState.Bitmap -- ReaderSNState.Bitmap
when 3 => when 3 =>
-- Write Bitmap -- Write Bitmap
@ -1116,9 +1161,8 @@ begin
data_out <= bitmap_latch_next(cnt2); data_out <= bitmap_latch_next(cnt2);
wr_sig <= '1'; wr_sig <= '1';
else
-- Keep Sub-State cnt_next <= cnt + 1;
cnt_next <= cnt;
end if; end if;
-- Count -- Count
when 4 => when 4 =>
@ -1137,22 +1181,27 @@ begin
when 0 => when 0 =>
data_out <= std_logic_vector(sn_latch_1(0)); data_out <= std_logic_vector(sn_latch_1(0));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapStart 2/2 -- GapStart 2/2
when 1 => when 1 =>
data_out <= std_logic_vector(sn_latch_1(1)); data_out <= std_logic_vector(sn_latch_1(1));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.Base 1/2 -- GapList.Base 1/2
when 2 => when 2 =>
data_out <= std_logic_vector(sn_latch_2(0)); data_out <= std_logic_vector(sn_latch_2(0));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.Base 2/2 -- GapList.Base 2/2
when 3 => when 3 =>
data_out <= std_logic_vector(sn_latch_2(1)); data_out <= std_logic_vector(sn_latch_2(1));
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
-- GapList.NumBits -- GapList.NumBits
when 4 => when 4 =>
data_out <= std_logic_vector(ulong_latch); data_out <= std_logic_vector(ulong_latch);
wr_sig <= '1'; wr_sig <= '1';
cnt_next <= cnt + 1;
cnt2_next <= 0; cnt2_next <= 0;
-- GapList.Bitmap -- GapList.Bitmap
when 5 => when 5 =>
@ -1162,9 +1211,8 @@ begin
data_out <= bitmap_latch_next(cnt2); data_out <= bitmap_latch_next(cnt2);
wr_sig <= '1'; wr_sig <= '1';
else
-- Keep Sub-State cnt_next <= cnt + 1;
cnt_next <= cnt;
end if; 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 -- 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 -- 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 -- 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 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 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) -- MAX BLOCKING TIME (RELIABILITY)
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE; --Deferred to Package Body (100 ms) constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE; --Deferred to Package Body (100 ms)
-- TRANSPORT_PRIORITY -- TRANSPORT_PRIORITY
@ -463,8 +463,8 @@ package rtps_package is
function to_key_hash (A : GUID_TYPE) return KEY_HASH_TYPE; function to_key_hash (A : GUID_TYPE) return KEY_HASH_TYPE;
-- *OVERLOAD FUNCTIONS* -- *OVERLOAD FUNCTIONS*
function convert_from_double_word (input: DOUBLE_WORD_ARRAY) return unsigned; function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned;
function convert_to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY; function to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY;
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean; function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean;
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean; function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean;
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) 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_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 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'); variable ret : unsigned(63 downto 0) := (others => '0');
begin begin
ret(63 downto 32) := input(0); ret(63 downto 32) := input(0);
@ -532,7 +532,7 @@ package body rtps_package is
return ret; return ret;
end function; 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')); variable ret : DOUBLE_WORD_ARRAY := (others => (others => '0'));
begin begin
ret(0) := input(63 downto 32); ret(0) := input(63 downto 32);
@ -542,122 +542,122 @@ package body rtps_package is
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean is function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) > convert_from_double_word(R); return to_unsigned(L) > to_unsigned(R);
end function; end function;
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) > R; return to_unsigned(L) > R;
end function; end function;
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L > convert_from_double_word(R); return L > to_unsigned(R);
end function; end function;
function "<" (L,R: DOUBLE_WORD_ARRAY) return boolean is function "<" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) < convert_from_double_word(R); return to_unsigned(L) < to_unsigned(R);
end function; end function;
function "<" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function "<" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) < R; return to_unsigned(L) < R;
end function; end function;
function "<" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function "<" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L < convert_from_double_word(R); return L < to_unsigned(R);
end function; end function;
function ">=" (L,R: DOUBLE_WORD_ARRAY) return boolean is function ">=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) >= convert_from_double_word(R); return to_unsigned(L) >= to_unsigned(R);
end function; end function;
function ">=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function ">=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) >= R; return to_unsigned(L) >= R;
end function; end function;
function ">=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function ">=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L >= convert_from_double_word(R); return L >= to_unsigned(R);
end function; end function;
function "<=" (L,R: DOUBLE_WORD_ARRAY) return boolean is function "<=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) <= convert_from_double_word(R); return to_unsigned(L) <= to_unsigned(R);
end function; end function;
function "<=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function "<=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) <= R; return to_unsigned(L) <= R;
end function; end function;
function "<=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function "<=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L <= convert_from_double_word(R); return L <= to_unsigned(R);
end function; end function;
function "=" (L,R: DOUBLE_WORD_ARRAY) return boolean is function "=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) = convert_from_double_word(R); return to_unsigned(L) = to_unsigned(R);
end function; end function;
function "=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function "=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) = R; return to_unsigned(L) = R;
end function; end function;
function "=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function "=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L = convert_from_double_word(R); return L = to_unsigned(R);
end function; end function;
function "/=" (L,R: DOUBLE_WORD_ARRAY) return boolean is function "/=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return convert_from_double_word(L) /= convert_from_double_word(R); return to_unsigned(L) /= to_unsigned(R);
end function; end function;
function "/=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is function "/=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
begin begin
return convert_from_double_word(L) /= R; return to_unsigned(L) /= R;
end function; end function;
function "/=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is function "/=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
begin begin
return L /= convert_from_double_word(R); return L /= to_unsigned(R);
end function; end function;
function "+" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is function "+" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin 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; end function;
function "+" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is function "+" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
begin begin
return convert_to_double_word(convert_from_double_word(L) + R); return to_double_word(to_unsigned(L) + R);
end function; end function;
function "+" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is function "+" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin begin
return convert_to_double_word(L + convert_from_double_word(R)); return to_double_word(L + to_unsigned(R));
end function; end function;
function "-" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is function "-" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin 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; end function;
function "-" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is function "-" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
begin begin
return convert_to_double_word(convert_from_double_word(L) - R); return to_double_word(to_unsigned(L) - R);
end function; end function;
function "-" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is function "-" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
begin begin
return convert_to_double_word(L - convert_from_double_word(R)); return to_double_word(L - to_unsigned(R));
end function; end function;
function min(L, R : DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is 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 => ( locator => (
0 => ( 0 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
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
), ),
1 => ( 1 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
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
), ),
2 => ( 2 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
), ),
3 => ( 3 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
), ),
others => EMPTY_LOCATOR others => EMPTY_LOCATOR
) )
@ -683,13 +683,13 @@ package body rtps_test_package is
locator => ( locator => (
0 => ( 0 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_MULTICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_MULTICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
), ),
1 => ( 1 => (
kind => LOCATOR_KIND_UDPv4, kind => LOCATOR_KIND_UDPv4,
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_UNICAST_PORT, portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_UNICAST_PORT,
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
), ),
others => EMPTY_LOCATOR others => EMPTY_LOCATOR
) )
@ -808,7 +808,7 @@ package body rtps_test_package is
liveliness => DEFAULT_LIVELINESS_QOS, liveliness => DEFAULT_LIVELINESS_QOS,
leaseDuration => DEFAULT_LEASE_DURATION, leaseDuration => DEFAULT_LEASE_DURATION,
time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS, time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS,
reliability => DEFAULT_RELIABILTY_QOS, reliability => DEFAULT_RELIABILITY_QOS,
max_blocking_time => DEFAULT_MAX_BLOCKING_TIME, max_blocking_time => DEFAULT_MAX_BLOCKING_TIME,
transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS, transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS,
lifespan => DEFAULT_LIFESPAN_QOS, lifespan => DEFAULT_LIFESPAN_QOS,
@ -1018,9 +1018,9 @@ package body rtps_test_package is
begin begin
if (ref.kind /= LOCATOR_KIND_UDPv4) then if (ref.kind /= LOCATOR_KIND_UDPv4) then
return FALSE; 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; 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; return FALSE;
else else
return TRUE; 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 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. -- NOTE: A Submessage Length of 0 is left as is.
-- Fix Submessage Length -- 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)); 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 -- 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)); output.length := start + to_integer(unsigned(ref.submessageLength));
end if; end if;
-- *PAD/UKNOWN* -- *PAD/UKNOWN*
@ -1422,7 +1422,7 @@ package body rtps_test_package is
null; null;
end case; end case;
if (ref.payload.length > 0 and (not ref.serialized_key)) then 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; end if;
if (ref.instance /= HANDLE_NIL) then if (ref.instance /= HANDLE_NIL) then
output.data(output.length)(SSI_KEY_HASH_FLAG) := '1'; output.data(output.length)(SSI_KEY_HASH_FLAG) := '1';
@ -1604,7 +1604,7 @@ package body rtps_test_package is
end if; end if;
end if; end if;
-- METATRAFFIC MULTICAST LOCATOR -- 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)); tmp := to_integer(unsigned(ref.metatrafficMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then
@ -1632,7 +1632,7 @@ package body rtps_test_package is
end loop; end loop;
end if; end if;
-- METATRAFFIC UNICAST LOCATOR -- 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)); tmp := to_integer(unsigned(ref.metatrafficUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then
@ -1660,7 +1660,7 @@ package body rtps_test_package is
end loop; end loop;
end if; end if;
-- DEFAULT MULTICAST LOCATOR -- 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)); tmp := to_integer(unsigned(ref.defaultMulticastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then
@ -1689,7 +1689,7 @@ package body rtps_test_package is
end if; end if;
-- DEFAULT UNICAST LOCATOR -- DEFAULT UNICAST LOCATOR
assert (unsigned(ref.defaultUnicastLocatorList.numLocators) > 0) report "PARTICIPANT_DATA: Participant needs to have at least one Default Unicast Locator." severity error; 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)); tmp := to_integer(unsigned(ref.defaultUnicastLocatorList.numLocators));
for i in 0 to tmp-1 loop for i in 0 to tmp-1 loop
if (pid = PID_DEFAULT_UNICAST_LOCATOR) then if (pid = PID_DEFAULT_UNICAST_LOCATOR) then
@ -1885,7 +1885,7 @@ package body rtps_test_package is
-- UDP Port -- UDP Port
when 5 => when 5 =>
if (ref.match = MATCH) then 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 else
ret(i).data := (others => '-'); ret(i).data := (others => '-');
end if; end if;
@ -2004,7 +2004,7 @@ package body rtps_test_package is
-- UDP Port -- UDP Port
when 5 => when 5 =>
if (ref.match = MATCH) then 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_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_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'; 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 -- UDP Port
when 5 => when 5 =>
if (ref.match = MATCH) then 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_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_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'; 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;
end if; end if;
-- RELIABILITY -- 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 if (pid = PID_RELIABILITY) then
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE; 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)); 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 procedure gen_sentinel(output : inout TEST_PACKET_TYPE) is
begin 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; output.length := output.length + 1;
end procedure; end procedure;
@ -2803,7 +2803,7 @@ package body rtps_test_package is
end if; end if;
end if; end if;
-- RELIABILITY -- 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 if (pid = PID_RELIABILITY) then
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE; 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)); 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 for i in 0 to max(mem.ilen-1,0) loop
-- Instance Found -- Instance Found
if (inst = mem.inst(i).inst) then 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; return TRUE;
end if; end if;
end if; end if;
@ -3173,6 +3173,7 @@ package body rtps_test_package is
end if; end if;
end loop; end loop;
assert FALSE report "Instance not in Memory" severity FAILURE; assert FALSE report "Instance not in Memory" severity FAILURE;
return mem.ilen;
end function; 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 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 loop
if (no_inst) then if (no_inst) then
-- Sample and Instance Compatible -- 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) := mem.s(i);
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate; 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; 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;
end if; end if;
-- Sample Compatible (and belonging to specified Instance) -- 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) := mem.s(i);
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate; 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; 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); 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 -- XXX: PARTITION QoS Ignored
-- Array mapping RELIABILITY QoS to Endpoints -- 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) -- (Only relevant to Writers)
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME); 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) -- 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 -- NOTE: The buffer will not only store participants, but also endpoint data
-- Used to determine the size of the builtin endpoint buffer -- Used to determine the size of the builtin endpoint buffer
constant MAX_REMOTE_PARTICIPANTS : natural := 50; constant MAX_REMOTE_PARTICIPANTS : natural := 50;
-- Set to TRUE for Simulation Testing (Extra Code generated)
constant SIMULATION_FLAG : boolean := FALSE;
end package; end package;