Code Refactor
This commit is contained in:
parent
4392aa8288
commit
609ed2d686
@ -1,8 +1,8 @@
|
||||
Quartus 18.1 Unsupported
|
||||
========================
|
||||
Quartus Unsupported
|
||||
===================
|
||||
* Unconstrained arrays in records (Supported in Pro)
|
||||
* Vectors in aggregate statements
|
||||
e.g. V := ("0000", others => '1');
|
||||
* Unary logical operators
|
||||
* Referencing generics in generic lists
|
||||
*
|
||||
* Referencing other generics in generic declaration
|
||||
* Conditional Assignements
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
doc/DDS-XTYPES_1-1.pdf
(Stored with Git LFS)
Normal file
BIN
doc/DDS-XTYPES_1-1.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -105,7 +105,7 @@ Explicit = 1
|
||||
|
||||
; Inhibit range checks on all (implicit and explicit) assignments to
|
||||
; scalar objects defined with subtypes.
|
||||
NoRangeCheck = 1
|
||||
NoRangeCheck = 0
|
||||
|
||||
[vlog]
|
||||
|
||||
|
||||
12
src/ASCII.txt
Normal file
12
src/ASCII.txt
Normal 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|
|
||||
+---------------------+ +---------------------+
|
||||
@ -9,15 +9,15 @@ entity FWFT_FIFO is
|
||||
);
|
||||
port
|
||||
(
|
||||
reset : in std_logic;
|
||||
clk : in std_logic;
|
||||
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
write : in std_logic;
|
||||
read : in std_logic;
|
||||
data_out : out std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
empty : out std_logic;
|
||||
full : out std_logic;
|
||||
free : out natural range 0 to FIFO_DEPTH
|
||||
reset : in std_logic;
|
||||
clk : in std_logic;
|
||||
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
write : in std_logic;
|
||||
read : in std_logic;
|
||||
data_out : out std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
empty : out std_logic;
|
||||
full : out std_logic;
|
||||
free : out natural range 0 to FIFO_DEPTH
|
||||
);
|
||||
end entity;
|
||||
|
||||
@ -40,21 +40,21 @@ begin
|
||||
sync : process(clk, reset)
|
||||
variable free_var : integer range 0 to FIFO_DEPTH;
|
||||
begin
|
||||
if(rising_edge(clk)) then
|
||||
if(reset = '1') then
|
||||
if rising_edge(clk) then
|
||||
if (reset = '1') then
|
||||
fifo_data <= (others => (others => '0'));
|
||||
free_sig <= FIFO_DEPTH;
|
||||
else
|
||||
free_var := free_sig;
|
||||
if(read = '1' and free_var < FIFO_DEPTH ) then
|
||||
if (read = '1' and free_var < FIFO_DEPTH ) then
|
||||
for i in 1 to (FIFO_DEPTH-1) loop
|
||||
fifo_data(i-1) <= fifo_data(i);
|
||||
end loop;
|
||||
fifo_data(FIFO_DEPTH-1) <= (others => '0');
|
||||
free_var := free_var + 1;
|
||||
end if;
|
||||
if(write = '1') then
|
||||
if(free_var > 0) then
|
||||
if (write = '1') then
|
||||
if (free_var > 0) then
|
||||
fifo_data(FIFO_DEPTH-free_var) <= data_in;
|
||||
free_var := free_var - 1;
|
||||
end if;
|
||||
|
||||
15
src/REF.txt
15
src/REF.txt
@ -433,14 +433,13 @@ STATUS INFO
|
||||
-----------
|
||||
31............24..............16..............8...............0
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
+-+-+-+-+-----------------------------------------------+-+-+-+
|
||||
|R|P|A|K| UNUSED |F|U|D|
|
||||
+-+-+-+-+-----------------------------------------------+-+-+-+
|
||||
+-+-+-+-------------------------------------------------+-+-+-+
|
||||
|R|P|A| UNUSED |F|U|D|
|
||||
+-+-+-+-------------------------------------------------+-+-+-+
|
||||
|
||||
R...Sample has been Read
|
||||
P...Sample has associated Payload
|
||||
P...Sample has associated DATA Payload
|
||||
A...Associated Payload is aligned (Payload does extend until end of last Palyload Slot)
|
||||
K...Key Hash available
|
||||
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
D...DisposedFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
@ -485,7 +484,7 @@ STATUS INFO
|
||||
+-+-+-+-------------------------------------------------+-+-+-+
|
||||
|
||||
R...Sample has been ACKed
|
||||
P...Sample has associated Payload
|
||||
P...Sample has associated DATA Payload
|
||||
A...Associated Payload is aligned (Payload does extend until end of last Palyload Slot)
|
||||
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
@ -529,7 +528,7 @@ READER
|
||||
+ +
|
||||
08| |
|
||||
+-------------------------------------------------------------+
|
||||
09| ENDPOINT_POSITION |
|
||||
09| WRITER_ID |
|
||||
+-------------------------------------------------------------+
|
||||
10| |
|
||||
~ PAYLOAD ~
|
||||
@ -544,7 +543,7 @@ STATUS INFO
|
||||
| |P| |K| UNUSED |F|U|D|
|
||||
+-+-+-+-+-----------------------------------------------+-+-+-+
|
||||
|
||||
P...Sample has associated Payload
|
||||
P...Sample has associated DATA Payload
|
||||
K...Key Hash available
|
||||
F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||
|
||||
@ -301,7 +301,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1556,7 +1556,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -300,7 +300,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1562,7 +1562,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -300,7 +300,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1560,7 +1560,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -279,7 +279,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1011,7 +1011,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -301,7 +301,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP LAST, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP LAST, Best Effort, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1556,7 +1556,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -301,7 +301,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP LAST, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - RTPS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP LAST, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - RTPS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1556,7 +1556,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Positive TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - TIME_BASED_FILTER QoS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Positive TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - TIME_BASED_FILTER QoS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -475,7 +475,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -294,7 +294,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Ordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Ordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1348,7 +1348,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -294,7 +294,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1347,7 +1347,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -294,7 +294,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Ordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Ordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1347,7 +1347,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -294,7 +294,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Unordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Topic, Unordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1347,7 +1347,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -295,7 +295,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Topic, Ordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS, ACCESS SCOPE Topic, Ordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1366,7 +1366,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -275,7 +275,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - DDS Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - DDS Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -707,7 +707,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Deadline Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Deadline Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -606,7 +606,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Deadline Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyless, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Deadline Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -475,7 +475,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -768,7 +768,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -538,7 +538,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_reader - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Level 0 - Sample Rejected Status Handling");
|
||||
SetAlertLogName("dds_reader - Level 0 - (KEEP ALL, Reliable, Zero TIME_BASED_FILTER, Keyed, BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER, ACCESS SCOPE Instance, Unordered) - Sample Rejected Status Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -478,7 +478,7 @@ begin
|
||||
AffirmIfEqual(sstate_id, si_sample_state, col.s(dds_cnt).sstate);
|
||||
AffirmIfEqual(vstate_id, si_view_state, col.s(dds_cnt).vstate);
|
||||
AffirmIfEqual(istate_id, si_instance_state, col.s(dds_cnt).istate);
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(si_source_timestamp), convert_from_double_word(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(ts_id, to_unsigned(si_source_timestamp), to_unsigned(col.s(dds_cnt).ts));
|
||||
AffirmIfEqual(inst_id, to_unsigned(si_instance_handle), to_unsigned(col.s(dds_cnt).inst));
|
||||
AffirmIfEqual(pub_id, to_unsigned(si_publication_handle), to_unsigned(HANDLE_NIL));
|
||||
AffirmIfEqual(dis_gen_cnt_id, si_disposed_generation_count, std_logic_vector(to_unsigned(col.s(dds_cnt).dis_gen_cnt,WORD_WIDTH)));
|
||||
|
||||
@ -301,7 +301,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Finite Lifespan, Keyed) - Level 0 - General");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Finite Lifespan, Keyed) - General");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -2087,15 +2087,15 @@ begin
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -281,7 +281,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - General");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - General");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -2067,15 +2067,15 @@ begin
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -254,7 +254,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyless) - Level 0 - General");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyless) - General");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -991,15 +991,15 @@ begin
|
||||
when GET_CACHE_CHANGE =>
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -281,7 +281,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - General");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - General");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -1839,15 +1839,15 @@ begin
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -215,7 +215,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Wait For Acknowledgements");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Wait For Acknowledgements");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -472,15 +472,15 @@ begin
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -232,7 +232,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Deadline Handling");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Deadline Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -599,15 +599,15 @@ begin
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -232,7 +232,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Deadline Handling");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Deadline Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -514,15 +514,15 @@ begin
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -232,7 +232,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Liveliness Handling");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Liveliness Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -609,15 +609,15 @@ begin
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(2), rtps.cc.instance(2));
|
||||
AffirmIfEqual(inst_id, cc_instance_handle(3), rtps.cc.instance(3));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -232,7 +232,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("dds_writer - (KEEP ALL, Infinite Lifespan, Keyed) - Level 0 - Lifespan Handling");
|
||||
SetAlertLogName("dds_writer - Level 0 - (KEEP ALL, Infinite Lifespan, Keyed) - Lifespan Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
@ -591,15 +591,15 @@ begin
|
||||
if (rtps.ret_code = OK) then
|
||||
AffirmIfEqual(inst_id, to_unsigned(cc_instance_handle), to_unsigned(rtps.cc.instance));
|
||||
AffirmIfEqual(kind_id, CACHE_CHANGE_KIND_TYPE'pos(cc_kind), CACHE_CHANGE_KIND_TYPE'pos(rtps.cc.kind));
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, convert_from_double_word(cc_source_timestamp), convert_from_double_word(rtps.cc.src_timestamp));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(ts_id, to_unsigned(cc_source_timestamp), to_unsigned(rtps.cc.src_timestamp));
|
||||
rtps_stage <= CHECK;
|
||||
rtps_cnt <= 0;
|
||||
end if;
|
||||
when GET_MIN_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when GET_MAX_SN =>
|
||||
AffirmIfEqual(sn_id, convert_from_double_word(cc_seq_nr), convert_from_double_word(rtps.cc.seq_nr));
|
||||
AffirmIfEqual(sn_id, to_unsigned(cc_seq_nr), to_unsigned(rtps.cc.seq_nr));
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
|
||||
@ -29,6 +29,15 @@ architecture testbench of L0_mem_ctrl_test1 is
|
||||
signal addr : std_logic_vector(ADDR_WIDTH-1 downto 0) := (others => '0');
|
||||
signal reset : std_logic := '1';
|
||||
shared variable SB : osvvm.ScoreBoardPkg_slv.ScoreBoardPType;
|
||||
signal stim_done, test_done : std_logic := '0';
|
||||
|
||||
-- *FUNCTION DECLARATION*
|
||||
procedure wait_on_complete is
|
||||
begin
|
||||
if (test_done /= '1') then
|
||||
wait until test_done = '1';
|
||||
end if;
|
||||
end procedure;
|
||||
|
||||
begin
|
||||
|
||||
@ -69,6 +78,7 @@ begin
|
||||
RV.InitSeed(RV'instance_name);
|
||||
|
||||
Log("Initiating Test", INFO);
|
||||
stim_done <= '0';
|
||||
valid_in <= '0';
|
||||
data_in <= (others => '0');
|
||||
reset <= '1';
|
||||
@ -193,10 +203,8 @@ begin
|
||||
wait until rising_edge(clk);
|
||||
wait until rising_edge(clk);
|
||||
|
||||
-- Wait until test Completion
|
||||
if (not SB.empty) then
|
||||
wait until SB.empty;
|
||||
end if;
|
||||
stim_done <= '1';
|
||||
wait_on_complete;
|
||||
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
|
||||
SetTranscriptMirror;
|
||||
ReportAlerts;
|
||||
@ -217,6 +225,17 @@ begin
|
||||
end if;
|
||||
end process;
|
||||
|
||||
done_proc : process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if (stim_done = '1' and SB.empty) then
|
||||
test_done <= '1';
|
||||
else
|
||||
test_done <= '0';
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
clock_prc : process
|
||||
begin
|
||||
clk <= '0';
|
||||
|
||||
@ -140,13 +140,13 @@ begin
|
||||
locator => (
|
||||
0 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
|
||||
portn => UDP_PORT_INVALID & META_IPv4_MULTICAST_PORT,
|
||||
addr => RV.RandSlv(LOCATOR_ADDR_WIDTH)
|
||||
),
|
||||
1 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => RV.RandSlv(LOCATOR_PORT_WIDTH),
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
),
|
||||
others => EMPTY_LOCATOR
|
||||
)
|
||||
@ -175,7 +175,8 @@ begin
|
||||
-- USER
|
||||
when others =>
|
||||
tmp_id := ENTITYID(k);
|
||||
ref2 := (k => '1', others => '0');
|
||||
ref2 := (others => '0');
|
||||
ref2(k) := '1';
|
||||
end case;
|
||||
|
||||
for l in 0 to 1 loop -- Reader/Writer Source
|
||||
|
||||
@ -111,7 +111,8 @@ begin
|
||||
stimulus_prc : process
|
||||
variable RV : RandomPType;
|
||||
variable t1, t2, t3 : natural := 0;
|
||||
variable tmp : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
|
||||
variable tmp : std_logic_vector(0 to NUM_ENDPOINTS) := (others => '0');
|
||||
variable tmp_packet : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
|
||||
procedure gen_rand_packet(size : in natural; output : inout TEST_PACKET_TYPE) is
|
||||
variable tmp : natural := 0;
|
||||
@ -193,11 +194,14 @@ begin
|
||||
push_reference(1, stimulus(t3));
|
||||
start_test;
|
||||
-- Wait until begining of t3 sending
|
||||
tmp := (t3 => '0', others => '1');
|
||||
tmp := (others => '1');
|
||||
tmp(t3) := '0';
|
||||
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
|
||||
|
||||
-- Reset Input
|
||||
stimulus := (t3 => stimulus(t3), others => EMPTY_TEST_PACKET);
|
||||
tmp_packet := stimulus(t3);
|
||||
stimulus := (others => EMPTY_TEST_PACKET);
|
||||
stimulus(t3) := tmp_packet;
|
||||
Log("Begin Test 2", INFO);
|
||||
-- Min Valid Packet
|
||||
gen_rand_packet(4, stimulus(t1));
|
||||
@ -213,11 +217,14 @@ begin
|
||||
gen_rand_packet(1, stimulus(t1));
|
||||
start_test;
|
||||
-- Wait until all but t1 sent
|
||||
tmp := (t1 => '0', others => '1');
|
||||
tmp := (others => '1');
|
||||
tmp(t1) := '0';
|
||||
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
|
||||
|
||||
-- reset Input
|
||||
stimulus := (t1 => stimulus(t1), others => EMPTY_TEST_PACKET);
|
||||
tmp_packet := stimulus(t1);
|
||||
stimulus := (others => EMPTY_TEST_PACKET) ;
|
||||
stimulus(t1) := tmp_packet;
|
||||
Log("Begin Test 3", INFO);
|
||||
for i in 1 to NUM_ENDPOINTS+1 loop
|
||||
t3 := (t1+i) mod (NUM_ENDPOINTS+1);
|
||||
|
||||
@ -76,7 +76,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -142,7 +142,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Volatile, Best Effort, Keyed) - Level 0 - Metatraffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Best Effort, Keyed) - Metatraffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -76,7 +76,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -142,7 +142,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Volatile, Reliable, Keyed) - Level 0 - Metatraffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Keyed) - Metatraffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -64,7 +64,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -198,7 +198,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Transient Local, Best Effort, Keyed) - Level 0 - User Traffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Transient Local, Best Effort, Keyed) - User Traffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -64,7 +64,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -198,7 +198,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Transient Local, Reliable, Keyed) - Level 0 - User Traffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Transient Local, Reliable, Keyed) - User Traffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -64,7 +64,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -198,7 +198,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Volatile, Best Effort, Keyed) - Level 0 - User Traffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Best Effort, Keyed) - User Traffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -64,7 +64,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -198,7 +198,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Volatile, Reliable, Keyed) - Level 0 - User Traffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Keyed) - User Traffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -64,7 +64,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -198,7 +198,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Volatile, Reliable, Non Keyed) - Level 0 - User Traffic Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Volatile, Reliable, Non Keyed) - User Traffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -60,7 +60,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -213,7 +213,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Automatic Liveliness) - Level 0 - Liveliness Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Automatic Liveliness) - Liveliness Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -60,7 +60,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => DURATION_ZERO,
|
||||
@ -213,7 +213,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader - (Manual by Topic Liveliness) - Level 0 - Liveliness Handling");
|
||||
SetAlertLogName("rtps_reader - Level 0 - (Manual by Topic Liveliness) - Liveliness Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -70,7 +70,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -149,7 +149,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Metatraffic Handling");
|
||||
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Metatraffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -70,7 +70,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -149,7 +149,7 @@ begin
|
||||
end procedure;
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Metatraffic Handling");
|
||||
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Metatraffic Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -54,7 +54,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -183,7 +183,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 0 - Reader Liveliness Handling");
|
||||
SetAlertLogName("rtps_writer - Level 0 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Reader Liveliness Handling");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -83,7 +83,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
|
||||
@ -245,7 +245,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader (Transient Local, Reliable, Keyed) - Level 1 - RTPS Output");
|
||||
SetAlertLogName("rtps_reader - Level 1 - (Transient Local, Reliable, Keyed) - RTPS Output");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -84,7 +84,7 @@ begin
|
||||
uut : entity work.rtps_reader(arch)
|
||||
generic map (
|
||||
ENTITYID => DEFAULT_READER_ENTITYID,
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
HEARTBEAT_RESPONSE_DELAY => gen_duration(5,0),
|
||||
@ -246,7 +246,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_reader (Volatile, Reliable, Keyed) - Level 1 - RTPS Output");
|
||||
SetAlertLogName("rtps_reader - Level 1 - (Volatile, Reliable, Keyed) - RTPS Output");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Transient Local, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Best Effort, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Transient Local, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => TRANSIENT_LOCAL_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Transient Local, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Transient Local, Reliable, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => BEST_EFFORT_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Best Effort, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -336,7 +336,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -337,7 +337,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Source Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Source Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -77,7 +77,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => AUTOMATIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -339,7 +339,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Non Keyed, By Reception Timestamp, Push Mode) - Level 1 - RTPS Output (DATA & GAP)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Non Keyed, By Reception Timestamp, Push Mode) - RTPS Output (DATA & GAP)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -76,7 +76,7 @@ begin
|
||||
-- Unit Under Test
|
||||
uut : entity work.rtps_writer(arch)
|
||||
generic map (
|
||||
RELIABILTY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
RELIABILITY_QOS => RELIABLE_RELIABILITY_QOS,
|
||||
LIVELINESS_QOS => MANUAL_BY_TOPIC_LIVELINESS_QOS,
|
||||
DURABILITY_QOS => VOLATILE_DURABILITY_QOS,
|
||||
DESTINATION_ORDER_QOS => BY_RECEPTION_TIMESTAMP_DESTINATION_ORDER_QOS,
|
||||
@ -277,7 +277,7 @@ begin
|
||||
|
||||
begin
|
||||
|
||||
SetAlertLogName("rtps_writer (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - Level 1 - RTPS Output (HEARTBEAT)");
|
||||
SetAlertLogName("rtps_writer - Level 1 - (Volatile, Reliable, Keyed, By Reception Timestamp, Pull Mode) - RTPS Output (HEARTBEAT)");
|
||||
SetAlertEnable(FAILURE, TRUE);
|
||||
SetAlertEnable(ERROR, TRUE);
|
||||
SetAlertEnable(WARNING, TRUE);
|
||||
|
||||
@ -175,7 +175,7 @@ package user_config is
|
||||
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
|
||||
15 => BEST_EFFORT_RELIABILITY_QOS,
|
||||
NUM_READERS+3 => BEST_EFFORT_RELIABILITY_QOS,
|
||||
others => DEFAULT_RELIABILTY_QOS
|
||||
others => DEFAULT_RELIABILITY_QOS
|
||||
);
|
||||
-- (Only relevant to Writers)
|
||||
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (
|
||||
@ -215,4 +215,7 @@ package user_config is
|
||||
-- TESTING PARAMETERS
|
||||
constant TEST_STRING : string := "TEST_CONFIG_1";
|
||||
|
||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||
constant SIMULATION_FLAG : boolean := TRUE;
|
||||
|
||||
end package;
|
||||
@ -84,15 +84,15 @@ analyze Level_0/L0_dds_reader_test7_arzkriu.vhd
|
||||
|
||||
simulate L0_rtps_handler_test1
|
||||
simulate L0_rtps_handler_test2
|
||||
simulate L0_rtps_out_test1
|
||||
simulate L0_mem_ctrl_test1
|
||||
simulate L0_rtps_builtin_endpoint_test1
|
||||
simulate L0_rtps_builtin_endpoint_test2
|
||||
simulate L0_rtps_builtin_endpoint_test3
|
||||
simulate L0_rtps_builtin_endpoint_test4
|
||||
simulate L0_rtps_builtin_endpoint_test5
|
||||
simulate L0_rtps_builtin_endpoint_test6
|
||||
simulate L0_rtps_out_test1
|
||||
simulate L1_rtps_builtin_endpoint_test1
|
||||
simulate L0_mem_ctrl_test1
|
||||
simulate L0_rtps_reader_test1_vrk
|
||||
simulate L0_rtps_reader_test1_vbk
|
||||
simulate L0_rtps_reader_test2_vrk
|
||||
@ -106,6 +106,7 @@ simulate L1_rtps_reader_test1_vrk
|
||||
simulate L1_rtps_reader_test1_trk
|
||||
simulate L0_rtps_writer_test1_vrkdp
|
||||
simulate L0_rtps_writer_test1_vbkdp
|
||||
simulate L0_rtps_writer_test2_vrkdp
|
||||
simulate L1_rtps_writer_test1_vrkdp
|
||||
simulate L1_rtps_writer_test1_trkdp
|
||||
simulate L1_rtps_writer_test1_tbkdp
|
||||
@ -115,7 +116,6 @@ simulate L1_rtps_writer_test1_vrksp
|
||||
simulate L1_rtps_writer_test1_vrkdn
|
||||
simulate L1_rtps_writer_test1_trkdn
|
||||
simulate L1_rtps_writer_test2_vrkdn
|
||||
simulate L0_rtps_writer_test2_vrkdp
|
||||
simulate L0_dds_writer_test1_aik
|
||||
simulate L0_dds_writer_test1_ain
|
||||
simulate L0_dds_writer_test1_lik
|
||||
|
||||
@ -155,7 +155,7 @@ architecture arch of dds_reader is
|
||||
-- Address pointing to the beginning of the first Instance Data Frame
|
||||
constant FIRST_INSTANCE_ADDRESS : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) := (others => '0');
|
||||
|
||||
-- *SAMPLE MEMORY FRAME FORMAT*
|
||||
-- *SAMPLE MEMORY FRAME FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant SMF_STATUS_INFO_OFFSET : natural := 0;
|
||||
constant SMF_TIMESTAMP_OFFSET : natural := 1;
|
||||
@ -173,12 +173,12 @@ architecture arch of dds_reader is
|
||||
constant SMF_PREV_ADDR_OFFSET : natural := SMF_NO_WRITERS_GEN_CNT_OFFSET + 1;
|
||||
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_OFFSET + 1;
|
||||
|
||||
-- *PAYLOAD MEMORY FRAME FORMAT*
|
||||
-- *PAYLOAD MEMORY FRAME FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant PMF_NEXT_ADDR_OFFSET : natural := 0;
|
||||
constant PMF_PAYLOAD_OFFSET : natural := 1;
|
||||
|
||||
-- *INSTANCE MEMORY FRAME OFFSET*
|
||||
-- *INSTANCE MEMORY FRAME FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant IMF_NEXT_ADDR_OFFSET : natural := 0;
|
||||
constant IMF_KEY_HASH_OFFSET : natural := 1;
|
||||
@ -195,7 +195,7 @@ architecture arch of dds_reader is
|
||||
end function;
|
||||
constant IMF_WRITER_BITMAP_OFFSET : natural := gen_imf_writer_bitmap_offset(TIME_BASED_FILTER_QOS);
|
||||
|
||||
-- *INSTANCE MEMORY FRAME FORMAT FLAGS*
|
||||
-- *INSTANCE MEMORY FRAME FIELD FLAGS*
|
||||
-- Flags mapping to the respective Endpoint Memory Frame Fields
|
||||
constant IMF_FLAG_WIDTH : natural := 7;
|
||||
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0');
|
||||
@ -218,15 +218,22 @@ architecture arch of dds_reader is
|
||||
REMOVE_INSTANCE, UNMARK_INSTANCES, RESET_MEMORY);
|
||||
-- *Instance Memory Opcodes*
|
||||
-- OPCODE DESCRIPTION
|
||||
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash.
|
||||
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by inst_addr_update. [This is needed to mark the previous Instance for Instance Removal]
|
||||
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by "key_hash".
|
||||
-- Set "inst_addr_base" to Base Address of found Instance, of INSTANCE_MEMORY_MAX_ADDRESS if nothing found.
|
||||
-- "inst_data" contains Instance Data according to "inst_mem_fields".
|
||||
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by "inst_addr_update".
|
||||
-- Set "inst_addr_base" to "inst_addr_update"
|
||||
-- "inst_data" contains Instance Data according to "inst_mem_fields".
|
||||
-- INSERT_INSTANCE Insert Instance to memory. The Instance is inserted in Key Hash Numerical Order.
|
||||
-- UPDATE_INSTANCE Update Instance Data pointed by inst_addr_base. (inst_mem_fields specifies which Fields to update)
|
||||
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order). (inst_mem_fields specifies which Fields to get)
|
||||
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by inst_addr_base) (inst_mem_fields specifies which Fields to get)
|
||||
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base
|
||||
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get)
|
||||
-- UNMARK_INSTANCES Reset the MARK_FLAG of all stored Instances
|
||||
-- UPDATE_INSTANCE Update Instance Data pointed by "inst_addr_base" according to "inst_mem_fields"
|
||||
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order) according to "inst_mem_fields".
|
||||
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no Instance in Memory.
|
||||
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by "inst_addr_base") according to "inst_mem_fields".
|
||||
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no other Instance in Memory.
|
||||
-- REMOVE_INSTANCE Remove Instance pointed by "inst_addr_base".
|
||||
-- GET_INSTANCE Get Data of Instance pointed by "inst_addr_update" according to "inst_mem_fields".
|
||||
-- Already fetched Data of the Participant is not modified.
|
||||
-- UNMARK_INSTANCES Reset the MARK_FLAG of all Instances in Memory.
|
||||
type INSTANCE_OPCODE_TYPE is (NOP, SEARCH_INSTANCE_HASH, SEARCH_INSTANCE_ADDR, INSERT_INSTANCE, UPDATE_INSTANCE, GET_FIRST_INSTANCE, GET_NEXT_INSTANCE, REMOVE_INSTANCE,
|
||||
GET_INSTANCE, UNMARK_INSTANCES);
|
||||
type WRITER_BITMAP_ARRAY_TYPE is array (0 to round_div(MAX_REMOTE_ENDPOINTS, WORD_WIDTH)-1) of std_logic_vector(0 to WORD_WIDTH-1);
|
||||
@ -325,8 +332,8 @@ architecture arch of dds_reader is
|
||||
signal remove_oldest_sample, remove_oldest_sample_next : std_logic := '0';
|
||||
-- Denotes if the oldest sample of the Instance with 'key_hash' should be removed
|
||||
signal remove_oldest_inst_sample, remove_oldest_inst_sample_next : std_logic := '0';
|
||||
-- Remote Writer Endpoint Bitmap Position
|
||||
signal writer_pos, writer_pos_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0;
|
||||
-- Remote Writer ID
|
||||
signal writer_id, writer_id_next : natural range 0 to MAX_REMOTE_ENDPOINTS-1 := 0;
|
||||
-- Key Hash Latch
|
||||
signal key_hash, key_hash_next : KEY_HASH_TYPE := HANDLE_NIL;
|
||||
-- RTPS Return Code Latch
|
||||
@ -509,7 +516,7 @@ architecture arch of dds_reader is
|
||||
alias next_inst_next : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) is inst_addr_latch_2_next;
|
||||
alias first_payload : unsigned(PAYLOAD_MEMORY_ADDR_WIDTH-1 downto 0) is payload_addr_latch_2;
|
||||
alias first_payload_next : unsigned(PAYLOAD_MEMORY_ADDR_WIDTH-1 downto 0) is payload_addr_latch_2_next;
|
||||
alias has_data : std_logic is sample_status_info(SSI_PAYLOAD_FLAG);
|
||||
alias has_data : std_logic is sample_status_info(SSI_DATA_FLAG);
|
||||
alias has_key_hash : std_logic is sample_status_info(SSI_KEY_HASH_FLAG);
|
||||
|
||||
-- *FUNCTION DECLARATION*
|
||||
@ -533,6 +540,19 @@ architecture arch of dds_reader is
|
||||
return ret;
|
||||
end function;
|
||||
|
||||
-- This function caps the range of a natural.
|
||||
-- This is needed, because during simulation some values may be outside the range due to delta time delays.
|
||||
function cap_range(input : in integer; max : in natural) return natural is
|
||||
begin
|
||||
if (input > max and SIMULATION_FLAG) then
|
||||
return max;
|
||||
elsif (input < 0 and SIMULATION_FLAG) then
|
||||
return 0;
|
||||
else
|
||||
return input;
|
||||
end if;
|
||||
end function;
|
||||
|
||||
begin
|
||||
|
||||
--*****COMPONENT INSTANTIATION*****
|
||||
@ -675,7 +695,7 @@ begin
|
||||
sample_addr_latch_3_next <= sample_addr_latch_3;
|
||||
sample_addr_latch_4_next <= sample_addr_latch_4;
|
||||
sample_addr_latch_5_next <= sample_addr_latch_5;
|
||||
writer_pos_next <= writer_pos;
|
||||
writer_id_next <= writer_id;
|
||||
key_hash_next <= key_hash;
|
||||
sample_status_info_next <= sample_status_info;
|
||||
remove_oldest_sample_next <= remove_oldest_sample;
|
||||
@ -911,7 +931,7 @@ begin
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Latch Writer Pos
|
||||
writer_pos_next <= to_integer(unsigned(data_in_rtps));
|
||||
writer_id_next <= to_integer(unsigned(data_in_rtps));
|
||||
stage_next <= REMOVE_WRITER;
|
||||
cnt_next <= 2;
|
||||
else
|
||||
@ -925,7 +945,7 @@ begin
|
||||
inst_data_next2.writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
|
||||
|
||||
-- NOT_ALIVE_NO_WRITERS Transition
|
||||
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
|
||||
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
|
||||
trigger_sample_gen_next <= '1';
|
||||
inst_data_next2.status_info(ISI_GENERATE_SAMPLE_FLAG) <= '1';
|
||||
inst_data_next2.status_info(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1';
|
||||
@ -1161,13 +1181,14 @@ begin
|
||||
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
|
||||
sample_write_data <= data_in_rtps;
|
||||
sample_write_data(SSI_READ_FLAG) <= '0';
|
||||
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_PAYLOAD_FLAG);
|
||||
sample_write_data <= data_in_rtps;
|
||||
sample_write_data(SSI_KEY_HASH_FLAG) <= '0'; -- Key Hash Flag is not stored
|
||||
sample_write_data(SSI_READ_FLAG) <= '0';
|
||||
sample_write_data(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_DATA_FLAG);
|
||||
-- Latch Status Info
|
||||
sample_status_info_next <= data_in_rtps;
|
||||
sample_status_info_next(SSI_READ_FLAG) <= '0';
|
||||
sample_status_info_next(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_PAYLOAD_FLAG);
|
||||
sample_status_info_next(SSI_ALIGNED_FLAG) <= data_in_rtps(SSI_DATA_FLAG);
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
ready_in_rtps <= '1';
|
||||
@ -1297,7 +1318,7 @@ begin
|
||||
if (valid_in_rtps = '1') then
|
||||
ready_in_rtps <= '1';
|
||||
-- Latch Input, but do not pass to Memory
|
||||
writer_pos_next <= to_integer(unsigned(data_in_rtps));
|
||||
writer_id_next <= cap_range(to_integer(unsigned(data_in_rtps)), MAX_REMOTE_ENDPOINTS-1);
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Payload Address
|
||||
@ -1597,6 +1618,7 @@ begin
|
||||
|
||||
-- Wait for Instance Search to finish
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_IGNORE_DEADLINE_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance Found
|
||||
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
@ -1763,7 +1785,7 @@ begin
|
||||
sample_cnt <= to_unsigned(1, WORD_WIDTH);
|
||||
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
|
||||
tmp_bitmap := (others => '0');
|
||||
tmp_bitmap(writer_pos) := '1';
|
||||
tmp_bitmap(writer_id) := '1';
|
||||
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
|
||||
|
||||
if (DESTINATION_ORDER_QOS = BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS and newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) then
|
||||
@ -1822,7 +1844,7 @@ begin
|
||||
sample_cnt <= to_unsigned(1, WORD_WIDTH);
|
||||
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
|
||||
tmp_bitmap := (others => '0');
|
||||
tmp_bitmap(writer_pos) := '1';
|
||||
tmp_bitmap(writer_id) := '1';
|
||||
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
|
||||
|
||||
if (DESTINATION_ORDER_QOS = BY_SOURCE_TIMESTAMP_DESTINATION_ORDER_QOS and newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) then
|
||||
@ -2039,6 +2061,8 @@ begin
|
||||
|
||||
-- Memory Operation Guard
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_IGNORE_DEADLINE_FLAG) severity FAILURE;
|
||||
|
||||
-- DEFAULT STATUS INFO (LIVELINESS)
|
||||
if (WITH_KEY) then
|
||||
tmp_update := IMF_STATUS_FLAG;
|
||||
@ -2054,9 +2078,9 @@ begin
|
||||
-- ALIVE/FILTERED/DISPOSE Operation
|
||||
if (sample_status_info(SSI_UNREGISTERED_FLAG) /= '1') then
|
||||
-- Write if Writer New for Instance
|
||||
if (tmp_bitmap(writer_pos) /= '1') then
|
||||
if (tmp_bitmap(writer_id) /= '1') then
|
||||
-- Insert Writer
|
||||
tmp_bitmap(writer_pos) := '1';
|
||||
tmp_bitmap(writer_id) := '1';
|
||||
-- Convert Back
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
@ -2068,9 +2092,9 @@ begin
|
||||
end if;
|
||||
else
|
||||
-- Write if Writer New for Instance
|
||||
if (tmp_bitmap(writer_pos) /= '0') then
|
||||
if (tmp_bitmap(writer_id) /= '0') then
|
||||
-- Insert Writer
|
||||
tmp_bitmap(writer_pos) := '0';
|
||||
tmp_bitmap(writer_id) := '0';
|
||||
-- Convert Back
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
@ -2128,7 +2152,7 @@ begin
|
||||
end if;
|
||||
end if;
|
||||
-- * -> NOT_ALIVE_NO_WRITERS Transition
|
||||
elsif (sample_status_info(SSI_UNREGISTERED_FLAG) = '1' and tmp_bitmap = (tmp_bitmap'range => '0')) then
|
||||
elsif (sample_status_info(SSI_UNREGISTERED_FLAG) = '1' and tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
|
||||
-- NOT_ALIVE -> NOT_ALIVE_NO_WRITERS
|
||||
if (inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '1' or inst_data.status_info(ISI_NOT_ALIVE_NO_WRITERS_FLAG) = '1') then
|
||||
tmp_bool := FALSE;
|
||||
@ -2206,7 +2230,7 @@ begin
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Stale Instance Transition
|
||||
if (inst_data.sample_cnt = 0 and inst_data.writer_bitmap /= ZERO_WRITER_BITMAP_ARRAY and tmp_bitmap = (tmp_bitmap'range => '0')) then
|
||||
if (inst_data.sample_cnt = 0 and inst_data.writer_bitmap /= ZERO_WRITER_BITMAP_ARRAY and tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
|
||||
stale_inst_cnt_next <= stale_inst_cnt + 1;
|
||||
end if;
|
||||
end if;
|
||||
@ -2276,6 +2300,7 @@ begin
|
||||
|
||||
-- Wait for instance Update to Complete
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
|
||||
|
||||
case (cnt) is
|
||||
-- SET Disposed Generation Counter
|
||||
@ -2481,181 +2506,187 @@ begin
|
||||
end case;
|
||||
when GENERATE_SAMPLE =>
|
||||
-- Precondition: cur_sample set, cur_inst set, inst_data set (IMF_DISPOSED_CNT_FLAG, IMF_NO_WRITERS_CNT_FLAG)
|
||||
case (cnt) is
|
||||
-- GET Next Sample (Empty List)
|
||||
when 0 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_read <= '1';
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Sample Status Info
|
||||
when 1 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
|
||||
sample_write_data <= (SSI_UNREGISTERED_FLAG => '1', others => '0');
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Timestamp 1/2
|
||||
when 2 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET;
|
||||
sample_write_data <= std_logic_vector(time(0));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Timestamp 2/2
|
||||
when 3 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET + 1;
|
||||
sample_write_data <= std_logic_vector(time(1));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Lifespan 1/2
|
||||
when 4 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET;
|
||||
sample_write_data <= std_logic_vector(TIME_INVALID(0));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Lifespan 2/2
|
||||
when 5 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET + 1;
|
||||
sample_write_data <= std_logic_vector(TIME_INVALID(1));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Payload Pointer
|
||||
when 6 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_PAYLOAD_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(PAYLOAD_MEMORY_MAX_ADDRESS,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Instance Pointer
|
||||
when 7 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_INSTANCE_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(cur_inst,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Disposed Generation Count
|
||||
when 8 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_DISPOSED_GEN_CNT_OFFSET;
|
||||
sample_write_data <= std_logic_vector(inst_data.disposed_gen_cnt);
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET No Writers Generation Count
|
||||
when 9 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NO_WRITERS_GEN_CNT_OFFSET;
|
||||
sample_write_data <= std_logic_vector(inst_data.no_writers_gen_cnt);
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Previous Sample Pointer
|
||||
when 10 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_PREV_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(newest_sample,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Next Sample Pointer
|
||||
when 11 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(SAMPLE_MEMORY_MAX_ADDRESS,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
assert (newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Next Sample Pointer (Previous Sample)
|
||||
when 12 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= newest_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(empty_sample_list_head,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- READ Next Address (Empty List)
|
||||
when 13 =>
|
||||
sample_ready_out <= '1';
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_valid_out = '1') then
|
||||
-- Update Sample List Pointer
|
||||
newest_sample_next <= cur_sample;
|
||||
empty_sample_list_head_next <= resize(unsigned(sample_read_data), SAMPLE_MEMORY_ADDR_WIDTH);
|
||||
|
||||
-- Wait for Instane Data
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG) severity FAILURE;
|
||||
|
||||
case (cnt) is
|
||||
-- GET Next Sample (Empty List)
|
||||
when 0 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_read <= '1';
|
||||
|
||||
-- Signal Data Available
|
||||
status_sig_next <= status_sig or DATA_AVAILABLE_STATUS;
|
||||
|
||||
if (WITH_KEY and remove_oldest_inst_sample = '1') then
|
||||
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
|
||||
cur_sample_next <= oldest_sample;
|
||||
stage_next <= FIND_OLDEST_INST_SAMPLE;
|
||||
cnt_next <= 0;
|
||||
elsif (remove_oldest_sample = '1') then
|
||||
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
stage_next <= GET_OLDEST_SAMPLE_INSTANCE;
|
||||
cnt_next <= 0;
|
||||
else
|
||||
cur_sample_next <= oldest_sample;
|
||||
stage_next <= REMOVE_SAMPLE;
|
||||
cnt_next <= 0;
|
||||
end if;
|
||||
elsif (trigger_sample_gen = '1') then
|
||||
-- Continue
|
||||
stage_next <= PROCESS_PENDING_SAMPLE_GENERATION;
|
||||
cnt_next <= 1;
|
||||
else
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
end if;
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
-- SET Sample Status Info
|
||||
when 1 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_STATUS_INFO_OFFSET;
|
||||
sample_write_data <= (SSI_UNREGISTERED_FLAG => '1', others => '0');
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Timestamp 1/2
|
||||
when 2 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET;
|
||||
sample_write_data <= std_logic_vector(time(0));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Timestamp 2/2
|
||||
when 3 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_TIMESTAMP_OFFSET + 1;
|
||||
sample_write_data <= std_logic_vector(time(1));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Lifespan 1/2
|
||||
when 4 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET;
|
||||
sample_write_data <= std_logic_vector(TIME_INVALID(0));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Lifespan 2/2
|
||||
when 5 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_LIFESPAN_DEADLINE_OFFSET + 1;
|
||||
sample_write_data <= std_logic_vector(TIME_INVALID(1));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Payload Pointer
|
||||
when 6 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_PAYLOAD_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(PAYLOAD_MEMORY_MAX_ADDRESS,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Instance Pointer
|
||||
when 7 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_INSTANCE_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(cur_inst,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Disposed Generation Count
|
||||
when 8 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_DISPOSED_GEN_CNT_OFFSET;
|
||||
sample_write_data <= std_logic_vector(inst_data.disposed_gen_cnt);
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET No Writers Generation Count
|
||||
when 9 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NO_WRITERS_GEN_CNT_OFFSET;
|
||||
sample_write_data <= std_logic_vector(inst_data.no_writers_gen_cnt);
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Previous Sample Pointer
|
||||
when 10 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_PREV_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(newest_sample,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Next Sample Pointer
|
||||
when 11 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= cur_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(SAMPLE_MEMORY_MAX_ADDRESS,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
assert (newest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- SET Next Sample Pointer (Previous Sample)
|
||||
when 12 =>
|
||||
sample_valid_in <= '1';
|
||||
sample_addr <= newest_sample + SMF_NEXT_ADDR_OFFSET;
|
||||
sample_write_data <= std_logic_vector(resize(empty_sample_list_head,WORD_WIDTH));
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_ready_in = '1') then
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- READ Next Address (Empty List)
|
||||
when 13 =>
|
||||
sample_ready_out <= '1';
|
||||
|
||||
-- Memory Flow Control Guard
|
||||
if (sample_valid_out = '1') then
|
||||
-- Update Sample List Pointer
|
||||
newest_sample_next <= cur_sample;
|
||||
empty_sample_list_head_next <= resize(unsigned(sample_read_data), SAMPLE_MEMORY_ADDR_WIDTH);
|
||||
|
||||
-- Signal Data Available
|
||||
status_sig_next <= status_sig or DATA_AVAILABLE_STATUS;
|
||||
|
||||
if (WITH_KEY and remove_oldest_inst_sample = '1') then
|
||||
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
|
||||
cur_sample_next <= oldest_sample;
|
||||
stage_next <= FIND_OLDEST_INST_SAMPLE;
|
||||
cnt_next <= 0;
|
||||
elsif (remove_oldest_sample = '1') then
|
||||
assert (oldest_sample /= SAMPLE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
stage_next <= GET_OLDEST_SAMPLE_INSTANCE;
|
||||
cnt_next <= 0;
|
||||
else
|
||||
cur_sample_next <= oldest_sample;
|
||||
stage_next <= REMOVE_SAMPLE;
|
||||
cnt_next <= 0;
|
||||
end if;
|
||||
elsif (trigger_sample_gen = '1') then
|
||||
-- Continue
|
||||
stage_next <= PROCESS_PENDING_SAMPLE_GENERATION;
|
||||
cnt_next <= 1;
|
||||
else
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
end if;
|
||||
end if;
|
||||
when others =>
|
||||
null;
|
||||
end case;
|
||||
end if;
|
||||
when GET_OLDEST_SAMPLE_INSTANCE =>
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
@ -2755,7 +2786,7 @@ begin
|
||||
if (inst_op_done = '1') then
|
||||
inst_op_start <= '1';
|
||||
inst_opcode <= GET_INSTANCE;
|
||||
inst_mem_fields <= IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG;
|
||||
inst_mem_fields <= IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG;
|
||||
inst_addr_update <= cur_inst;
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
@ -2960,6 +2991,8 @@ begin
|
||||
|
||||
-- Memory Operation Guard
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG) severity FAILURE;
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Stale Instance Update
|
||||
@ -3045,12 +3078,16 @@ begin
|
||||
null;
|
||||
end case;
|
||||
when REMOVE_WRITER =>
|
||||
-- Precondition: inst_data set (IMF_WRITER_BITMAP_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Memory Operation Guard
|
||||
if (inst_op_done = '1') then
|
||||
case (cnt) is
|
||||
when 0 =>
|
||||
assert check_mask(current_imf, IMF_WRITER_BITMAP_FLAG or IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- No More Instances
|
||||
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- DONE
|
||||
@ -3062,7 +3099,7 @@ begin
|
||||
tmp_bitmap := from_writer_bitmap_array(inst_data.writer_bitmap);
|
||||
|
||||
-- Remove Writer
|
||||
tmp_bitmap(writer_pos) := '0';
|
||||
tmp_bitmap(writer_id) := '0';
|
||||
|
||||
-- NOTE: writer_bitmap is not latched, since the memory process is latching it at the
|
||||
-- same clock cycle.
|
||||
@ -3070,7 +3107,7 @@ begin
|
||||
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
|
||||
|
||||
-- NOT_ALIVE_NO_WRITERS Transition
|
||||
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
|
||||
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.status_info(ISI_NOT_ALIVE_DISPOSED_FLAG) = '0') then
|
||||
trigger_sample_gen_next <= '1';
|
||||
status_info_update <= inst_data.status_info;
|
||||
status_info_update(ISI_NOT_ALIVE_NO_WRITERS_FLAG) <= '1';
|
||||
@ -3085,7 +3122,7 @@ begin
|
||||
end if;
|
||||
|
||||
-- Update Stale Instance Count
|
||||
if (tmp_bitmap = (tmp_bitmap'range => '0') and inst_data.sample_cnt = 0) then
|
||||
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0') and inst_data.sample_cnt = 0) then
|
||||
stale_inst_cnt_next <= stale_inst_cnt + 1;
|
||||
end if;
|
||||
|
||||
@ -3119,6 +3156,8 @@ begin
|
||||
case (cnt) is
|
||||
-- Find and Remove First Stale Instance
|
||||
when 0 =>
|
||||
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_WRITER_BITMAP_FLAG) severity FAILURE;
|
||||
|
||||
-- Iterated through all Instances
|
||||
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- NOTE: We should enter this state only if there is at least one stale Instance to be removed, so we should never enter this branch.
|
||||
@ -3150,7 +3189,7 @@ begin
|
||||
sample_cnt <= to_unsigned(1, WORD_WIDTH);
|
||||
deadline <= (time + TIME_BASED_FILTER_QOS) when (TIME_BASED_FILTER_QOS /= DURATION_ZERO) else TIME_INVALID;
|
||||
tmp_bitmap := (others => '0');
|
||||
tmp_bitmap(writer_pos) := '1';
|
||||
tmp_bitmap(writer_id) := '1';
|
||||
writer_bitmap <= to_writer_bitmap_array(tmp_bitmap);
|
||||
|
||||
-- Latch Instance Pointer
|
||||
@ -3356,6 +3395,7 @@ begin
|
||||
when 7 =>
|
||||
-- Wait for Instance Data
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
assert (next_inst = inst_addr_base) severity FAILURE;
|
||||
|
||||
-- DEFAULT
|
||||
@ -3793,6 +3833,7 @@ begin
|
||||
if (WITH_KEY) then
|
||||
-- Wait for Instance Data
|
||||
if (inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
assert (next_inst = inst_addr_base) severity FAILURE;
|
||||
|
||||
-- DEFAULT
|
||||
@ -3947,6 +3988,7 @@ begin
|
||||
when 2 =>
|
||||
-- Memory Operation Guard
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
-- NOTE: If we have a presentation of consecutive same instance samples of multiple instances, we have to
|
||||
-- mark the instances we have already handled, in order to prevent the GET_NEXT_SAMPLE state to
|
||||
-- re-process them.
|
||||
@ -3954,6 +3996,7 @@ begin
|
||||
if (si_sample_rank_sig = 0) then
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
|
||||
inst_op_start <= '1';
|
||||
inst_opcode <= UPDATE_INSTANCE;
|
||||
inst_mem_fields <= IMF_STATUS_FLAG;
|
||||
@ -4175,6 +4218,8 @@ begin
|
||||
inst_mem_fields <= IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG;
|
||||
cnt_next <= 2;
|
||||
when 2 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance Found
|
||||
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- DEFAULT
|
||||
@ -4265,6 +4310,8 @@ begin
|
||||
inst_mem_fields <= IMF_STATUS_FLAG;
|
||||
cnt_next <= cnt + 1;
|
||||
when 1 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance Found
|
||||
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- DEFAULT
|
||||
@ -4482,6 +4529,8 @@ begin
|
||||
inst_mem_fields <= IMF_STATUS_FLAG;
|
||||
cnt_next <= cnt + 1;
|
||||
when 2 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance Found
|
||||
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- Sample needs to be Generated
|
||||
@ -4505,6 +4554,8 @@ begin
|
||||
stage_next <= IDLE;
|
||||
end if;
|
||||
when 3 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- RESOURCE_LIMITS_QOS (MAX_SAMPLES_PER_INSTANCE)
|
||||
if (WITH_KEY and MAX_SAMPLES_PER_INSTANCE /= LENGTH_UNLIMITED and inst_data.sample_cnt = unsigned(MAX_SAMPLES_PER_INSTANCE)) then
|
||||
if (HISTORY_QOS = KEEP_ALL_HISTORY_QOS and RELIABILITY_QOS = RELIABLE_RELIABILITY_QOS) then
|
||||
@ -4724,6 +4775,8 @@ begin
|
||||
cnt_next <= 2;
|
||||
-- Check Instance
|
||||
when 2 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
|
||||
|
||||
-- Reached End of Instances
|
||||
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- DONE
|
||||
@ -4783,8 +4836,10 @@ begin
|
||||
if (sample_ready_in = '1') then
|
||||
if (cur_sample = MAX_SAMPLE_ADDRESS) then
|
||||
-- DONE
|
||||
stage_next <= RESET_PAYLOAD_MEMORY;
|
||||
cnt_next <= 0;
|
||||
stage_next <= RESET_PAYLOAD_MEMORY;
|
||||
cnt_next <= 0;
|
||||
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
|
||||
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
|
||||
else
|
||||
-- Continue
|
||||
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
|
||||
@ -4815,7 +4870,8 @@ begin
|
||||
if (payload_ready_in = '1') then
|
||||
if (cur_payload = MAX_PAYLOAD_ADDRESS) then
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
stage_next <= IDLE;
|
||||
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
|
||||
else
|
||||
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
|
||||
end if;
|
||||
@ -4940,6 +4996,7 @@ begin
|
||||
when UPDATE_INSTANCE =>
|
||||
current_imf_next <= current_imf or inst_mem_fields;
|
||||
inst_stage_next <= UPDATE_INSTANCE;
|
||||
|
||||
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
|
||||
inst_cnt_next <= 0;
|
||||
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
|
||||
@ -5001,6 +5058,7 @@ begin
|
||||
else
|
||||
current_imf_next <= current_imf or inst_mem_fields;
|
||||
end if;
|
||||
|
||||
-- Get Instance Data
|
||||
inst_stage_next <= GET_INSTANCE_DATA;
|
||||
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
|
||||
@ -6462,7 +6520,8 @@ begin
|
||||
if (inst_ready_in = '1') then
|
||||
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
|
||||
-- DONE
|
||||
inst_stage_next <= IDLE;
|
||||
inst_stage_next <= IDLE;
|
||||
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
|
||||
else
|
||||
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
|
||||
end if;
|
||||
@ -6484,14 +6543,14 @@ begin
|
||||
inst_stage <= RESET_MEMORY;
|
||||
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS;
|
||||
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS;
|
||||
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS;
|
||||
empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
|
||||
inst_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_next_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_prev_addr_base <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_empty_head <= FIRST_INSTANCE_ADDRESS;
|
||||
inst_empty_head <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
key_hash <= HANDLE_NIL;
|
||||
si_instance_handle_sig <= HANDLE_NIL;
|
||||
si_publication_handle_sig <= (others => (others => '0'));
|
||||
@ -6514,7 +6573,7 @@ begin
|
||||
sample_rej_last_reason <= NOT_REJECTED;
|
||||
rtps_return_code_latch <= ERROR;
|
||||
dds_return_code_latch <= RETCODE_ERROR;
|
||||
writer_pos <= 0;
|
||||
writer_id <= 0;
|
||||
cnt <= 0;
|
||||
cnt2 <= 0;
|
||||
cnt3 <= 0;
|
||||
@ -6601,7 +6660,7 @@ begin
|
||||
sample_rej_last_reason <= sample_rej_last_reason_next;
|
||||
rtps_return_code_latch <= rtps_return_code_latch_next;
|
||||
dds_return_code_latch <= dds_return_code_latch_next;
|
||||
writer_pos <= writer_pos_next;
|
||||
writer_id <= writer_id_next;
|
||||
cnt <= cnt_next;
|
||||
cnt2 <= cnt2_next;
|
||||
cnt3 <= cnt3_next;
|
||||
@ -6624,7 +6683,7 @@ begin
|
||||
wait_for_sample_removal <= wait_for_sample_removal_next;
|
||||
dis_gen_cnt_latch <= dis_gen_cnt_latch_next;
|
||||
no_w_gen_cnt_latch <= no_w_gen_cnt_latch_next;
|
||||
current_imf <= current_imf_next;
|
||||
current_imf <= current_imf_next when WITH_KEY else (others => '1');
|
||||
sample_addr_latch_1 <= sample_addr_latch_1_next;
|
||||
sample_addr_latch_2 <= sample_addr_latch_2_next;
|
||||
sample_addr_latch_3 <= sample_addr_latch_3_next;
|
||||
|
||||
@ -136,7 +136,7 @@ architecture arch of dds_writer is
|
||||
-- Address pointing to the beginning of the first Instance Data Frame
|
||||
constant FIRST_INSTANCE_ADDRESS : unsigned(INSTANCE_MEMORY_ADDR_WIDTH-1 downto 0) := (others => '0');
|
||||
|
||||
-- *SAMPLE MEMORY FRAME FORMAT*
|
||||
-- *SAMPLE MEMORY FRAME FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant SMF_STATUS_INFO_OFFSET : natural := 0;
|
||||
constant SMF_SEQ_NR_OFFSET : natural := 1;
|
||||
@ -159,12 +159,12 @@ architecture arch of dds_writer is
|
||||
constant SMF_PREV_ADDR_OFFSET : natural := gen_smf_prev_addr_offset(WITH_KEY);
|
||||
constant SMF_NEXT_ADDR_OFFSET : natural := SMF_PREV_ADDR_OFFSET + 1;
|
||||
|
||||
-- *PAYLOAD MEMORY FRAME FORMAT*
|
||||
-- *PAYLOAD MEMORY FRAME FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant PMF_NEXT_ADDR_OFFSET : natural := 0;
|
||||
constant PMF_PAYLOAD_OFFSET : natural := 1;
|
||||
|
||||
-- *INSTANCE MEMORY FRAME OFFSET*
|
||||
-- *INSTANCE MEMORY FIELD OFFSETS*
|
||||
-- 4-Byte Word Offsets to Beginning of Respective Fields in the Endpoint Memory Frame
|
||||
constant IMF_NEXT_ADDR_OFFSET : natural := 0;
|
||||
constant IMF_KEY_HASH_OFFSET : natural := 1;
|
||||
@ -172,7 +172,7 @@ architecture arch of dds_writer is
|
||||
constant IMF_SAMPLE_CNT_OFFSET : natural := 6;
|
||||
constant IMF_ACK_CNT_OFFSET : natural := 7;
|
||||
|
||||
-- *INSTANCE MEMORY FRAME FORMAT FLAGS*
|
||||
-- *INSTANCE MEMORY FRAME FIELD FLAGS*
|
||||
-- Flags mapping to the respective Endpoint Memory Frame Fields
|
||||
constant IMF_FLAG_WIDTH : natural := 4;
|
||||
constant IMF_KEY_HASH_FLAG : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (0 => '1', others => '0');
|
||||
@ -192,14 +192,21 @@ architecture arch of dds_writer is
|
||||
REMOVE_INSTANCE, RESET_MEMORY);
|
||||
-- *Instance Memory Opcodes*
|
||||
-- OPCODE DESCRIPTION
|
||||
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by key_hash.
|
||||
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by inst_addr_update. [This is needed to mark the previous Instance for Instance Removal]
|
||||
-- INSERT_INSTANCE Insert Instance to memory. The Instance is inserted in Key Hash Numerical Order.
|
||||
-- UPDATE_INSTANCE Update Instance Data pointed by inst_addr_base. (inst_mem_fields specifies which Fields to update)
|
||||
-- GET_FIRST_INSTANCE Get Instance Data of first Instance (Instance with smallest Key Hash Numerical Order). (inst_mem_fields specifies which Fields to get)
|
||||
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by inst_addr_base) (inst_mem_fields specifies which Fields to get)
|
||||
-- REMOVE_INSTANCE Remove Instance pointed by inst_addr_base
|
||||
-- GET_INSTANCE Get Data of Instance pointed by inst_addr_update. (inst_mem_fields specifies which Fields to get)
|
||||
-- SEARCH_INSTANCE_HASH Search Instance based on Key Hash pointed by "key_hash".
|
||||
-- Set "inst_addr_base" to Base Address of found Instance, of INSTANCE_MEMORY_MAX_ADDRESS if nothing found.
|
||||
-- "inst_data" contains Instance Data according to "inst_mem_fields".
|
||||
-- SEARCH_INSTANCE_ADDR Search Instance based on Instance Pointer pointed by "inst_addr_update".
|
||||
-- Set "inst_addr_base" to "inst_addr_update"
|
||||
-- "inst_data" contains Instance Data according to "inst_mem_fields".
|
||||
-- INSERT_INSTANCE Insert Instance to memory.
|
||||
-- UPDATE_INSTANCE Update Instance Data pointed by "inst_addr_base" according to "inst_mem_fields"
|
||||
-- GET_FIRST_INSTANCE Get Instance Data of first Instance according to "inst_mem_fields".
|
||||
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no Instance in Memory.
|
||||
-- GET_NEXT_INSTANCE Get Instance Data of next Instance (from the Instance pointed by "inst_addr_base") according to "inst_mem_fields".
|
||||
-- Set "inst_addr_base" to Address of Instance or INSTANCE_MEMORY_MAX_ADDRESS if no other Instance in Memory.
|
||||
-- REMOVE_INSTANCE Remove Instance pointed by "inst_addr_base".
|
||||
-- GET_INSTANCE Get Data of Instance pointed by "inst_addr_update" according to "inst_mem_fields".
|
||||
-- Already fetched Data of the Participant is not modified.
|
||||
type INSTANCE_OPCODE_TYPE is (NOP, SEARCH_INSTANCE_HASH, SEARCH_INSTANCE_ADDR, INSERT_INSTANCE, UPDATE_INSTANCE, GET_FIRST_INSTANCE, GET_NEXT_INSTANCE, REMOVE_INSTANCE,
|
||||
GET_INSTANCE);
|
||||
-- Record of Instance Data
|
||||
@ -418,6 +425,8 @@ architecture arch of dds_writer is
|
||||
signal inst_cnt, inst_cnt_next : natural range 0 to 13 := 0;
|
||||
-- General Purpose Long Latch
|
||||
signal inst_long_latch, inst_long_latch_next : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := (others => '0');
|
||||
-- Instance Memory Flag Array denoting which inst_data Fields are up-to-date with the respective fields of the Instance (Pointed by inst_addr_base)
|
||||
signal current_imf, current_imf_next : std_logic_vector(0 to IMF_FLAG_WIDTH-1) := (others => '0');
|
||||
|
||||
--*****ALIAS DECLARATION*****
|
||||
alias prev_sample : unsigned(SAMPLE_MEMORY_ADDR_WIDTH-1 downto 0) is sample_addr_latch_1;
|
||||
@ -880,7 +889,7 @@ begin
|
||||
source_ts_next <= source_ts_dds;
|
||||
|
||||
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
|
||||
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', others => '0');
|
||||
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', others => '0');
|
||||
cur_sample_next <= empty_sample_list_head;
|
||||
|
||||
-- NOTE: We have to explicitly check the Payload Memory, as it may be "unaligned" with our Sample Memory
|
||||
@ -937,7 +946,7 @@ begin
|
||||
source_ts_next <= source_ts_dds;
|
||||
|
||||
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
|
||||
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_DISPOSED_FLAG => '1', others => '0');
|
||||
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_DISPOSED_FLAG => '1', others => '0');
|
||||
cur_sample_next <= empty_sample_list_head;
|
||||
|
||||
-- NOTE: We always expect a Serialized Key as Input of this Opration, so we also check the Payload memory
|
||||
@ -992,7 +1001,7 @@ begin
|
||||
source_ts_next <= source_ts_dds;
|
||||
|
||||
-- NOTE: The ALIGNED_FLAG is set by default. if actual Payload is not aligned, need to reset.
|
||||
sample_status_info_next <= (SSI_PAYLOAD_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_UNREGISTERED_FLAG => '1', others => '0');
|
||||
sample_status_info_next <= (SSI_DATA_FLAG => '1', SSI_ALIGNED_FLAG => '1', SSI_UNREGISTERED_FLAG => '1', others => '0');
|
||||
cur_sample_next <= empty_sample_list_head;
|
||||
|
||||
-- NOTE: We always expect a Serialized Key as Input of this Opration, so we also check the Payload memory
|
||||
@ -1278,7 +1287,7 @@ begin
|
||||
if (ready_out_kh = '1') then
|
||||
ready_in_dds <= '1';
|
||||
-- Operation does not have Payload to store
|
||||
if (sample_status_info(SSI_PAYLOAD_FLAG) = '0') then
|
||||
if (sample_status_info(SSI_DATA_FLAG) = '0') then
|
||||
-- End of Payload
|
||||
if (last_word_in_dds = '1') then
|
||||
last_word_out_kh <= '1';
|
||||
@ -1450,10 +1459,14 @@ begin
|
||||
end if;
|
||||
end if;
|
||||
when REGISTER_OPERATION =>
|
||||
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Wait for Instance Search to finish
|
||||
if (inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance already in Memory
|
||||
if (inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- Accept Registration
|
||||
@ -1567,10 +1580,11 @@ begin
|
||||
null;
|
||||
end case;
|
||||
when FILTER_STAGE =>
|
||||
-- Precondition: cur_sample set
|
||||
-- Precondition: cur_sample set, inst_data set (IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
|
||||
|
||||
-- Wait for Instance Search to finish
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Instance Found
|
||||
if (not WITH_KEY or inst_addr_base /= INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
@ -1775,8 +1789,12 @@ begin
|
||||
end if;
|
||||
end if;
|
||||
when UPDATE_INSTANCE =>
|
||||
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
|
||||
|
||||
-- Memory Operation Guard
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
inst_op_start <= '1';
|
||||
@ -2473,10 +2491,12 @@ begin
|
||||
null;
|
||||
end case;
|
||||
when POST_SAMPLE_REMOVE =>
|
||||
-- Precondition: inst_data set (Status Info, Sample Count, ACK Count)
|
||||
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
|
||||
|
||||
-- Memory Operation Guard
|
||||
if (not WITH_KEY or inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
inst_op_start <= '1';
|
||||
@ -2550,6 +2570,8 @@ begin
|
||||
cnt_next <= 0;
|
||||
end if;
|
||||
when REMOVE_STALE_INSTANCE =>
|
||||
-- Precondition: inst_data set (IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG, IMF_ACK_CNT_FLAG)
|
||||
|
||||
-- Synthesis Guard
|
||||
if (WITH_KEY) then
|
||||
-- Wait for Instance Data
|
||||
@ -2557,6 +2579,8 @@ begin
|
||||
case (cnt) is
|
||||
-- Find and Remove First Stale Instance
|
||||
when 0 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Iterated through all Instances
|
||||
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- NOTE: We should enter this state only if there is at least one stale Instance to be removed, so we should never enter this branch.
|
||||
@ -2822,6 +2846,8 @@ begin
|
||||
null;
|
||||
end case;
|
||||
when ACKNACK_SAMPLE =>
|
||||
-- Precondition: inst_data set (IMF_ACK_CNT_FLAG, IMF_STATUS_FLAG, IMF_SAMPLE_CNT_FLAG)
|
||||
|
||||
case (cnt) is
|
||||
-- GET Status Info
|
||||
when 0 =>
|
||||
@ -2865,6 +2891,8 @@ begin
|
||||
if (WITH_KEY) then
|
||||
-- Wait for Instance Data
|
||||
if (inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_SAMPLE_CNT_FLAG or IMF_ACK_CNT_FLAG) severity FAILURE;
|
||||
|
||||
-- Update
|
||||
inst_op_start <= '1';
|
||||
inst_opcode <= UPDATE_INSTANCE;
|
||||
@ -2897,6 +2925,8 @@ begin
|
||||
null;
|
||||
end case;
|
||||
when GET_SAMPLE =>
|
||||
-- Precondition: inst_data set (IMF_KEY_HASH_FLAG)
|
||||
|
||||
case (cnt) is
|
||||
-- GET Status Info
|
||||
when 0 =>
|
||||
@ -2994,6 +3024,8 @@ begin
|
||||
if (WITH_KEY) then
|
||||
-- Wait for Instance Data
|
||||
if (inst_op_done = '1') then
|
||||
assert check_mask(current_imf, IMF_KEY_HASH_FLAG) severity FAILURE;
|
||||
|
||||
cc_instance_handle_sig_next <= inst_data.key_hash;
|
||||
|
||||
cnt_next <= cnt + 1;
|
||||
@ -3362,7 +3394,8 @@ begin
|
||||
last_word_out_dds <= '1';
|
||||
if (ready_out_dds = '1') then
|
||||
-- Reset
|
||||
status_sig_next <= status_sig and (not OFFERED_DEADLINE_MISSED_STATUS);
|
||||
deadline_miss_last_inst_next <= HANDLE_NIL;
|
||||
status_sig_next <= status_sig and (not OFFERED_DEADLINE_MISSED_STATUS);
|
||||
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
@ -3390,6 +3423,8 @@ begin
|
||||
cnt_next <= 2;
|
||||
-- Check Instance
|
||||
when 2 =>
|
||||
assert check_mask(current_imf, IMF_STATUS_FLAG or IMF_KEY_HASH_FLAG) severity FAILURE;
|
||||
|
||||
-- Reached End of Instances
|
||||
if (inst_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
-- DONE
|
||||
@ -3449,8 +3484,10 @@ begin
|
||||
if (sample_ready_in = '1') then
|
||||
if (cur_sample = MAX_SAMPLE_ADDRESS) then
|
||||
-- DONE
|
||||
stage_next <= RESET_PAYLOAD_MEMORY;
|
||||
cnt_next <= 0;
|
||||
stage_next <= RESET_PAYLOAD_MEMORY;
|
||||
cnt_next <= 0;
|
||||
empty_sample_list_head_next <= FIRST_SAMPLE_ADDRESS;
|
||||
empty_sample_list_tail_next <= MAX_SAMPLE_ADDRESS;
|
||||
else
|
||||
-- Continue
|
||||
cur_sample_next <= cur_sample + SAMPLE_FRAME_SIZE;
|
||||
@ -3481,7 +3518,8 @@ begin
|
||||
if (payload_ready_in = '1') then
|
||||
if (cur_payload = MAX_PAYLOAD_ADDRESS) then
|
||||
-- DONE
|
||||
stage_next <= IDLE;
|
||||
stage_next <= IDLE;
|
||||
empty_payload_list_head_next <= FIRST_PAYLOAD_ADDRESS;
|
||||
else
|
||||
cur_payload_next <= cur_payload + PAYLOAD_FRAME_SIZE;
|
||||
end if;
|
||||
@ -3520,6 +3558,7 @@ begin
|
||||
inst_cnt_next <= inst_cnt;
|
||||
inst_data_next <= inst_data;
|
||||
inst_long_latch_next <= inst_long_latch;
|
||||
current_imf_next <= current_imf;
|
||||
-- DEFAULT Unregistered
|
||||
inst_ready_out <= '0';
|
||||
inst_valid_in <= '0';
|
||||
@ -3548,7 +3587,8 @@ begin
|
||||
case(inst_opcode) is
|
||||
when SEARCH_INSTANCE_HASH =>
|
||||
-- Reset Data
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
current_imf_next <= inst_mem_fields;
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
-- No Instances available
|
||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
@ -3561,7 +3601,8 @@ begin
|
||||
end if;
|
||||
when SEARCH_INSTANCE_ADDR =>
|
||||
-- Reset Data
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
current_imf_next <= inst_mem_fields;
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
-- No Instances avialable
|
||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
@ -3577,6 +3618,10 @@ begin
|
||||
-- by the main process that the operation can succeed (Memory is available)
|
||||
assert (inst_empty_head /= INSTANCE_MEMORY_MAX_ADDRESS) report "Instance Insertion while memory Full" severity FAILURE;
|
||||
|
||||
-- Reset Data
|
||||
current_imf_next <= (others => '1');
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
inst_addr_base_next <= inst_empty_head;
|
||||
inst_stage_next <= INSERT_INSTANCE;
|
||||
inst_cnt_next <= 0;
|
||||
@ -3587,7 +3632,9 @@ begin
|
||||
inst_data_next.sample_cnt <= sample_cnt;
|
||||
inst_data_next.ack_cnt <= ack_cnt;
|
||||
when UPDATE_INSTANCE =>
|
||||
current_imf_next <= current_imf or inst_mem_fields;
|
||||
inst_stage_next <= UPDATE_INSTANCE;
|
||||
|
||||
if check_mask(inst_mem_fields,IMF_STATUS_FLAG) then
|
||||
inst_cnt_next <= 0;
|
||||
elsif check_mask(inst_mem_fields,IMF_SAMPLE_CNT_FLAG) then
|
||||
@ -3599,6 +3646,10 @@ begin
|
||||
inst_stage_next <= IDLE;
|
||||
end if;
|
||||
when GET_FIRST_INSTANCE =>
|
||||
-- Reset
|
||||
current_imf_next <= inst_mem_fields;
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
-- No Instances avialable
|
||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
@ -3609,6 +3660,10 @@ begin
|
||||
inst_cnt_next <= 0;
|
||||
end if;
|
||||
when GET_NEXT_INSTANCE =>
|
||||
-- Reset
|
||||
current_imf_next <= inst_mem_fields;
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
-- No Instances avialable
|
||||
if (inst_next_addr_base = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||
inst_addr_base_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
@ -3619,12 +3674,23 @@ begin
|
||||
inst_cnt_next <= 0;
|
||||
end if;
|
||||
when REMOVE_INSTANCE =>
|
||||
-- Reset
|
||||
current_imf_next <= (others => '0');
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
|
||||
inst_stage_next <= REMOVE_INSTANCE;
|
||||
inst_cnt_next <= 0;
|
||||
when GET_INSTANCE =>
|
||||
inst_addr_base_next <= inst_addr_update;
|
||||
if (inst_addr_base /= inst_addr_update) then
|
||||
-- Reset
|
||||
current_imf_next <= inst_mem_fields;
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
else
|
||||
current_imf_next <= current_imf or inst_mem_fields;
|
||||
end if;
|
||||
|
||||
-- Get Instance Data
|
||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||
inst_stage_next <= GET_INSTANCE_DATA;
|
||||
if check_mask(inst_mem_fields,IMF_KEY_HASH_FLAG) then
|
||||
inst_cnt_next <= 0;
|
||||
@ -4354,7 +4420,8 @@ begin
|
||||
if (inst_ready_in = '1') then
|
||||
if (inst_addr_base = MAX_INSTANCE_ADDRESS) then
|
||||
-- DONE
|
||||
inst_stage_next <= IDLE;
|
||||
inst_stage_next <= IDLE;
|
||||
inst_empty_head_next <= FIRST_INSTANCE_ADDRESS;
|
||||
else
|
||||
inst_addr_base_next <= inst_addr_base + INSTANCE_FRAME_SIZE;
|
||||
end if;
|
||||
@ -4413,9 +4480,9 @@ begin
|
||||
orphan_samples <= '0';
|
||||
newest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
oldest_sample <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
empty_payload_list_head <= FIRST_PAYLOAD_ADDRESS;
|
||||
empty_sample_list_head <= FIRST_SAMPLE_ADDRESS;
|
||||
empty_sample_list_tail <= MAX_SAMPLE_ADDRESS;
|
||||
empty_payload_list_head <= PAYLOAD_MEMORY_MAX_ADDRESS;
|
||||
empty_sample_list_head <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
empty_sample_list_tail <= SAMPLE_MEMORY_MAX_ADDRESS;
|
||||
payload_addr_latch_1 <= (others => '0');
|
||||
payload_addr_latch_2 <= (others => '0');
|
||||
long_latch <= (others => '0');
|
||||
@ -4434,8 +4501,9 @@ begin
|
||||
liveliness_lost_cnt <= (others => '0');
|
||||
liveliness_lost_cnt_change <= (others => '0');
|
||||
status_sig <= (others => '0');
|
||||
current_imf <= (others => '0');
|
||||
inst_addr_base <= (others => '0');
|
||||
inst_empty_head <= FIRST_INSTANCE_ADDRESS;
|
||||
inst_empty_head <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_occupied_head <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||
inst_long_latch <= (others => '0');
|
||||
inst_next_addr_base <= (others => '0');
|
||||
@ -4504,6 +4572,7 @@ begin
|
||||
liveliness_lost_cnt <= liveliness_lost_cnt_next;
|
||||
liveliness_lost_cnt_change <= liveliness_lost_cnt_change_next;
|
||||
status_sig <= status_sig_next;
|
||||
current_imf <= current_imf_next when WITH_KEY else (others => '1');
|
||||
inst_addr_base <= inst_addr_base_next;
|
||||
inst_empty_head <= inst_empty_head_next;
|
||||
inst_occupied_head <= inst_occupied_head_next;
|
||||
|
||||
@ -8,7 +8,7 @@ entity history_cache is
|
||||
MAX_INSTANCES : natural := DEFAULT_MAX_INSTANCES;
|
||||
MAX_SAMPLES_PER_INSTANCE : natural := DEFAULT_MAX_SAMPLES_PER_INSTANCE;
|
||||
HISTORY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_HISTORY_QOS;
|
||||
RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_RELIABILTY_QOS;
|
||||
RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := DEFAULT_RELIABILITY_QOS;
|
||||
GENERATION_COUNTERS : boolean := TRUE;
|
||||
);
|
||||
port (
|
||||
@ -990,7 +990,7 @@ begin
|
||||
writer_bitmap <= from_endpoint_bitmap(tmp_bitmap);
|
||||
|
||||
-- No More Writers for Instance
|
||||
if (tmp_bitmap = (tmp_bitmap'range => '0')) then
|
||||
if (tmp_bitmap = (tmp_bitmap'reverse_range => '0')) then
|
||||
inst_op_start_a <= '1';
|
||||
instance_state <= NOT_ALIVE_NO_WRITERS;
|
||||
inst_opcode_a <= UPDATE_INSTANCE;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -54,7 +54,7 @@ package rtps_config_package is
|
||||
constant SSI_FILTERED_FLAG : natural := STATUS_INFO_FILTERED_FLAG;
|
||||
constant SSI_KEY_HASH_FLAG : natural := 28; -- Reader Only
|
||||
constant SSI_ALIGNED_FLAG : natural := 29;
|
||||
constant SSI_PAYLOAD_FLAG : natural := 30;
|
||||
constant SSI_DATA_FLAG : natural := 30;
|
||||
constant SSI_READ_FLAG : natural := 31; -- Reader Only
|
||||
constant SSI_ACK_FLAG : natural := 31; -- Writer Only
|
||||
|
||||
@ -319,7 +319,7 @@ package body rtps_config_package is
|
||||
-- Count Bytes
|
||||
ret := ret + 1;
|
||||
-- Exit on first NULL byte (NULL Byte included in count)
|
||||
if (str(i)(WORD_WIDTH-(j*BYTE_WIDTH)-1 downto WORD_WIDTH-(j*BYTE_WIDTH)-BYTE_WIDTH) = (BYTE_WIDTH-1 downto 0 => '0')) then
|
||||
if (str(i)(WORD_WIDTH-(j*BYTE_WIDTH)-1 downto WORD_WIDTH-(j*BYTE_WIDTH)-BYTE_WIDTH) = (0 to BYTE_WIDTH-1 => '0')) then
|
||||
done := TRUE;
|
||||
exit;
|
||||
end if;
|
||||
@ -490,7 +490,7 @@ package body rtps_config_package is
|
||||
ret.data(ind+len) := std_logic_vector(ENDPOINT_TIME_BASED_FILTER_QOS(i)(1));
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
len := len + 1;
|
||||
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||
len := len + 1;
|
||||
@ -675,7 +675,7 @@ package body rtps_config_package is
|
||||
ret.data(ind+len) := std_logic_vector(ENDPOINT_LEASE_DURATION(i)(1));
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
if (ENDPOINT_RELIABILITY_QOS(i) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(i) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
len := len + 1;
|
||||
ret.data(ind+len) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||
len := len + 1;
|
||||
@ -801,7 +801,7 @@ package body rtps_config_package is
|
||||
ret.data(ret.length) := std_logic_vector(ENDPOINT_LEASE_DURATION(id)(1));
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (ENDPOINT_RELIABILITY_QOS(id) /= DEFAULT_RELIABILTY_QOS or ENDPOINT_MAX_BLOCKING_TIME(id) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
if (ENDPOINT_RELIABILITY_QOS(id) /= DEFAULT_RELIABILITY_QOS or ENDPOINT_MAX_BLOCKING_TIME(id) /= DEFAULT_MAX_BLOCKING_TIME) then
|
||||
ret.length := ret.length + 1;
|
||||
ret.data(ret.length) := PID_RELIABILITY & std_logic_vector(to_unsigned(12, 16));
|
||||
ret.length := ret.length + 1;
|
||||
@ -1123,7 +1123,7 @@ package body rtps_config_package is
|
||||
ret.LIVELINESS_QOS(i) := '0';
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILTY_QOS), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then
|
||||
if (not check_qos_compatibility(boolean_to_std_logic(is_reader), '1', unsigned(DEFAULT_RELIABILITY_QOS), unsigned(ENDPOINT_RELIABILITY_QOS(i)))) then
|
||||
ret.RELIABILITY_QOS(i) := '0';
|
||||
end if;
|
||||
-- DESTINATION_ORDER
|
||||
|
||||
@ -385,13 +385,14 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
when 0 =>
|
||||
src_guidprefix_next(0) <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
when 1 =>
|
||||
src_guidprefix_next(1) <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
when 2 =>
|
||||
src_guidprefix_next(2) <= data_in;
|
||||
|
||||
@ -494,7 +495,6 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
-- If Destination GUID Prefix is not us, skip the rest of the packet
|
||||
case (cnt) is
|
||||
@ -503,12 +503,16 @@ begin
|
||||
if (data_in /= GUIDPREFIX(0)) then
|
||||
-- Ignore
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- GUID Prefix 2/3
|
||||
when 1 =>
|
||||
if (data_in /= GUIDPREFIX(1)) then
|
||||
-- Ignore
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- GUID Prefix 3/3
|
||||
when 2 =>
|
||||
@ -526,25 +530,28 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- unused
|
||||
when 0 =>
|
||||
null;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Protocol Version & Vendor ID
|
||||
when 1 =>
|
||||
-- Check Major Protocol Version
|
||||
if (data_in(31 downto 24) /= PROTOCOLVERSION_2_4(15 downto 8)) then
|
||||
-- Protocol not supported, skip rest of Packet
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- GUID Prefix 1/3
|
||||
when 2 =>
|
||||
src_guidprefix_next(0) <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 3 =>
|
||||
src_guidprefix_next(1) <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 4 =>
|
||||
src_guidprefix_next(2) <= data_in;
|
||||
@ -557,12 +564,12 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Timesatmp 1/2
|
||||
when 0 =>
|
||||
src_ts_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Timesatmp 2/2
|
||||
when 1 =>
|
||||
src_ts_next(1) <= unsigned(data_in_swapped);
|
||||
@ -601,7 +608,6 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Locator Kind
|
||||
@ -612,6 +618,7 @@ begin
|
||||
else
|
||||
locator_match_next <= '0';
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Locator Port
|
||||
when 1 =>
|
||||
-- We only store UDPv4 Locators
|
||||
@ -623,15 +630,16 @@ begin
|
||||
long_latch_next <= data_in_swapped;
|
||||
end if;
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Locator Address 1/4
|
||||
when 2 =>
|
||||
null;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Locator Address 2/4
|
||||
when 3 =>
|
||||
null;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Locator Address 3/4
|
||||
when 4 =>
|
||||
null;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Locator Address 4/4 (IPv4 Address)
|
||||
when 5 =>
|
||||
-- We only store valid UDPv4 Locators
|
||||
@ -651,7 +659,6 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- IPv4 Address
|
||||
@ -663,6 +670,7 @@ begin
|
||||
locator_match_next <= '1';
|
||||
long_latch_next <= data_in_swapped;
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- UDPv4 Port
|
||||
when 1 =>
|
||||
-- Store only valid Locators
|
||||
@ -689,18 +697,20 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Reader Entity ID
|
||||
when 0 =>
|
||||
dest_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 1 =>
|
||||
src_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- First Sequence Number 1/2
|
||||
when 2 =>
|
||||
sn_latch_1_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- First Sequence Number 2/2
|
||||
when 3 =>
|
||||
sn_latch_1_next(1) <= unsigned(data_in_swapped);
|
||||
@ -710,6 +720,8 @@ begin
|
||||
if (tmp_sn = 0 or tmp_sn(0)(WORD_WIDTH-1) = '1') then
|
||||
-- If firstSN.value is zero or negative, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.5.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Last Sequence Number 1/2
|
||||
when 4 =>
|
||||
@ -717,6 +729,7 @@ begin
|
||||
|
||||
-- Pre-Calculation for Validity Check
|
||||
sn_latch_3_next <= sn_latch_1 - 1;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Last Sequence Number 2/2
|
||||
when 5 =>
|
||||
sn_latch_2_next(1) <= unsigned(data_in_swapped);
|
||||
@ -726,6 +739,8 @@ begin
|
||||
if (tmp_sn(0)(WORD_WIDTH-1) = '1') then
|
||||
-- If lastSN.value is negative, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.5.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Count
|
||||
when 6 =>
|
||||
@ -746,19 +761,21 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Reader Entity ID
|
||||
when 0 =>
|
||||
src_is_reader_next <= '1';
|
||||
src_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 1 =>
|
||||
dest_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- ReaderSNState.Base 1/2
|
||||
when 2 =>
|
||||
sn_latch_1_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- ReaderSNState.Base 2/2
|
||||
when 3 =>
|
||||
sn_latch_1_next(1) <= unsigned(data_in_swapped);
|
||||
@ -769,6 +786,8 @@ begin
|
||||
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
|
||||
-- If readerSNState is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.1.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- ReaderSNState.NumBits
|
||||
when 4 =>
|
||||
@ -781,6 +800,8 @@ begin
|
||||
-- If numBits is negative or larger than 256, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
|
||||
-- If readerSNState is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.1.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- ReaderSNState.Bitmap
|
||||
when 5 =>
|
||||
@ -789,13 +810,11 @@ begin
|
||||
cnt2_next <= cnt2 + 1;
|
||||
|
||||
bitmap_latch_next(cnt2) <= data_in_swapped;
|
||||
|
||||
-- Keep Sub-State
|
||||
cnt_next <= cnt;
|
||||
-- Exit Condition
|
||||
else
|
||||
-- Prevent Input Latching
|
||||
rd_guard := '0';
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Count
|
||||
when 6 =>
|
||||
@ -811,21 +830,24 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Reader Entity ID
|
||||
when 0 =>
|
||||
dest_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 1 =>
|
||||
src_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapStart Sequence Number 1/2
|
||||
when 2 =>
|
||||
sn_latch_1_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapStart Sequence Number 2/2
|
||||
when 3 =>
|
||||
sn_latch_1_next(1) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
-- VALIDITY CHECK
|
||||
tmp_sn := (0 => sn_latch_1(0), 1 => unsigned(data_in_swapped));
|
||||
@ -833,13 +855,17 @@ begin
|
||||
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
|
||||
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- GapList.Base 1/2
|
||||
when 4 =>
|
||||
sn_latch_2_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapList.Base 2/2
|
||||
when 5 =>
|
||||
sn_latch_2_next(1) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
-- VALIDITY CHECK
|
||||
tmp_sn := (0 => sn_latch_2(0), 1 => unsigned(data_in_swapped));
|
||||
@ -847,6 +873,8 @@ begin
|
||||
-- If Bitmap Base is zero or negative, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
|
||||
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- ReaderSNState.NumBits
|
||||
when 6 =>
|
||||
@ -860,6 +888,8 @@ begin
|
||||
-- If numBits is negative or larger than 256, Number Set is invalid (see DDSI-RTPS 2.3 Section 9.4.2.6)
|
||||
-- If gapList is invalid, skip Packet (see DDSI-RTPS 2.3 Section 8.3.7.4.3 and 8.3.4.1)
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- ReaderSNState.Bitmap
|
||||
when 7 =>
|
||||
@ -868,9 +898,6 @@ begin
|
||||
cnt2_next <= cnt2 + 1;
|
||||
|
||||
bitmap_latch_next(cnt2) <= data_in_swapped;
|
||||
|
||||
-- Keep Sub-State
|
||||
cnt_next <= cnt;
|
||||
end if;
|
||||
when others =>
|
||||
null;
|
||||
@ -887,7 +914,6 @@ begin
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- Extra Flags & octetstoinlineQoS
|
||||
@ -896,15 +922,19 @@ begin
|
||||
-- Latch Length to skip Uknown Data Header Part and latch offset to ensure 4-Byte alignement (see align_prc)
|
||||
offset_latch_next <= std_logic_vector(rtps_sub_data_length(1 downto 0));
|
||||
data_header_end_next <= (read_cnt_plus & "00") + rtps_sub_data_length;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader Entity ID
|
||||
when 1 =>
|
||||
dest_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Writer Entity ID
|
||||
when 2 =>
|
||||
src_entityid_next <= data_in;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2
|
||||
when 3 =>
|
||||
sn_latch_1_next(0) <= unsigned(data_in_swapped);
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2
|
||||
when 4 =>
|
||||
sn_latch_1_next(1) <= unsigned(data_in_swapped);
|
||||
@ -993,57 +1023,66 @@ begin
|
||||
-- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
|
||||
-- Output FIFO Guard
|
||||
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (cnt) is
|
||||
-- OPCODE (Submessage ID), Submessage Flags, UPDv4 Source Port
|
||||
when 0 =>
|
||||
data_out <= opcode & flags & src_port;
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- IPv4 Source Address
|
||||
when 1 =>
|
||||
data_out <= src_addr;
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 1/3
|
||||
when 2 =>
|
||||
data_out <= src_guidprefix(0);
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 2/3
|
||||
when 3 =>
|
||||
data_out <= src_guidprefix(1);
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GUID Prefix 3/3
|
||||
when 4 =>
|
||||
data_out <= src_guidprefix(2);
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Source Entity ID
|
||||
when 5 =>
|
||||
data_out <= src_entityid;
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Destination ID [only for Built-in Endpoints]
|
||||
when 6 =>
|
||||
if (builtin_endpoint = '1') then
|
||||
data_out <= dest_entityid;
|
||||
wr_sig <= '1';
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 1/2 [only for DATA Submessages]
|
||||
when 7 =>
|
||||
if (opcode = SID_DATA) then
|
||||
data_out <= std_logic_vector(sn_latch_1(0));
|
||||
wr_sig <= '1';
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Sequence Number 2/2 [only for DATA Submessages]
|
||||
when 8 =>
|
||||
if (opcode = SID_DATA) then
|
||||
data_out <= std_logic_vector(sn_latch_1(1));
|
||||
wr_sig <= '1';
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
|
||||
when 9 =>
|
||||
if (opcode = SID_DATA and builtin_endpoint = '0') then
|
||||
data_out <= std_logic_vector(src_ts(0));
|
||||
wr_sig <= '1';
|
||||
end if;
|
||||
cnt_next <= cnt + 1;
|
||||
-- Source Timestamp 1/2 [only for DATA Submessages and User Endpoints]
|
||||
when 10 =>
|
||||
if (opcode = SID_DATA and builtin_endpoint = '0') then
|
||||
@ -1061,7 +1100,6 @@ begin
|
||||
-- NOTE: This is a synchronised push on potentially multiple output FIFOs. If one FIFO gets full, the process stalls for all FIFOs.
|
||||
-- Output FIFO Guard
|
||||
if (builtin_endpoint = '1' and builtin_full = '0') or (builtin_endpoint = '0' and ((user_endpoint and user_full) = (user_endpoint'range => '0'))) then
|
||||
cnt_next <= cnt + 1;
|
||||
|
||||
case (opcode) is
|
||||
when SID_HEARTBEAT =>
|
||||
@ -1070,18 +1108,22 @@ begin
|
||||
when 0 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(0));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- FirstSN 2/2
|
||||
when 1 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(1));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- LastSN 1/2
|
||||
when 2 =>
|
||||
data_out <= std_logic_vector(sn_latch_2(0));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- LastSN 2/2
|
||||
when 3 =>
|
||||
data_out <= std_logic_vector(sn_latch_2(1));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- Count
|
||||
when 4 =>
|
||||
data_out <= long_latch;
|
||||
@ -1099,15 +1141,18 @@ begin
|
||||
when 0 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(0));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- ReaderSNState.Base 2/2
|
||||
when 1 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(1));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- ReaderSNState.NumBits
|
||||
when 2 =>
|
||||
data_out <= std_logic_vector(ulong_latch);
|
||||
wr_sig <= '1';
|
||||
cnt2_next <= 0;
|
||||
cnt_next <= cnt + 1;
|
||||
-- ReaderSNState.Bitmap
|
||||
when 3 =>
|
||||
-- Write Bitmap
|
||||
@ -1116,9 +1161,8 @@ begin
|
||||
|
||||
data_out <= bitmap_latch_next(cnt2);
|
||||
wr_sig <= '1';
|
||||
|
||||
-- Keep Sub-State
|
||||
cnt_next <= cnt;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- Count
|
||||
when 4 =>
|
||||
@ -1137,22 +1181,27 @@ begin
|
||||
when 0 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(0));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapStart 2/2
|
||||
when 1 =>
|
||||
data_out <= std_logic_vector(sn_latch_1(1));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapList.Base 1/2
|
||||
when 2 =>
|
||||
data_out <= std_logic_vector(sn_latch_2(0));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapList.Base 2/2
|
||||
when 3 =>
|
||||
data_out <= std_logic_vector(sn_latch_2(1));
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
-- GapList.NumBits
|
||||
when 4 =>
|
||||
data_out <= std_logic_vector(ulong_latch);
|
||||
wr_sig <= '1';
|
||||
cnt_next <= cnt + 1;
|
||||
cnt2_next <= 0;
|
||||
-- GapList.Bitmap
|
||||
when 5 =>
|
||||
@ -1162,9 +1211,8 @@ begin
|
||||
|
||||
data_out <= bitmap_latch_next(cnt2);
|
||||
wr_sig <= '1';
|
||||
|
||||
-- Keep Sub-State
|
||||
cnt_next <= cnt;
|
||||
else
|
||||
cnt_next <= cnt + 1;
|
||||
end if;
|
||||
-- NOTE: Because we need to pull "last_word_out" high on the last Byte, and doing so in the last Byte of Bitmap was deemed
|
||||
-- to much overhead (We need a counter in addition to cnt2 to track the next-to-last Byte of the Bitmap), we just
|
||||
|
||||
@ -384,7 +384,7 @@ package rtps_package is
|
||||
-- RELIABILITY
|
||||
constant BEST_EFFORT_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,CDR_ENUMERATION_WIDTH));
|
||||
constant RELIABLE_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,CDR_ENUMERATION_WIDTH));
|
||||
constant DEFAULT_RELIABILTY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := RELIABLE_RELIABILITY_QOS;
|
||||
constant DEFAULT_RELIABILITY_QOS : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := RELIABLE_RELIABILITY_QOS;
|
||||
-- MAX BLOCKING TIME (RELIABILITY)
|
||||
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE; --Deferred to Package Body (100 ms)
|
||||
-- TRANSPORT_PRIORITY
|
||||
@ -463,8 +463,8 @@ package rtps_package is
|
||||
function to_key_hash (A : GUID_TYPE) return KEY_HASH_TYPE;
|
||||
|
||||
-- *OVERLOAD FUNCTIONS*
|
||||
function convert_from_double_word (input: DOUBLE_WORD_ARRAY) return unsigned;
|
||||
function convert_to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY;
|
||||
function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned;
|
||||
function to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY;
|
||||
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean;
|
||||
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean;
|
||||
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean;
|
||||
@ -524,7 +524,7 @@ package body rtps_package is
|
||||
constant DEFAULT_MAX_BLOCKING_TIME : DURATION_TYPE := gen_duration(0,100 * (10**6)); -- 100 ms
|
||||
constant DEFAULT_PARTICIPANT_LEASE_DURATION : DURATION_TYPE := gen_duration(100, 0); -- 100 s
|
||||
|
||||
function convert_from_double_word (input: DOUBLE_WORD_ARRAY) return unsigned is
|
||||
function to_unsigned (input: DOUBLE_WORD_ARRAY) return unsigned is
|
||||
variable ret : unsigned(63 downto 0) := (others => '0');
|
||||
begin
|
||||
ret(63 downto 32) := input(0);
|
||||
@ -532,7 +532,7 @@ package body rtps_package is
|
||||
return ret;
|
||||
end function;
|
||||
|
||||
function convert_to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY is
|
||||
function to_double_word (input: unsigned(63 downto 0)) return DOUBLE_WORD_ARRAY is
|
||||
variable ret : DOUBLE_WORD_ARRAY := (others => (others => '0'));
|
||||
begin
|
||||
ret(0) := input(63 downto 32);
|
||||
@ -542,122 +542,122 @@ package body rtps_package is
|
||||
|
||||
function ">" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) > convert_from_double_word(R);
|
||||
return to_unsigned(L) > to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function ">" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) > R;
|
||||
return to_unsigned(L) > R;
|
||||
end function;
|
||||
|
||||
function ">" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L > convert_from_double_word(R);
|
||||
return L > to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "<" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) < convert_from_double_word(R);
|
||||
return to_unsigned(L) < to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "<" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) < R;
|
||||
return to_unsigned(L) < R;
|
||||
end function;
|
||||
|
||||
function "<" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L < convert_from_double_word(R);
|
||||
return L < to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function ">=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) >= convert_from_double_word(R);
|
||||
return to_unsigned(L) >= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function ">=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) >= R;
|
||||
return to_unsigned(L) >= R;
|
||||
end function;
|
||||
|
||||
function ">=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L >= convert_from_double_word(R);
|
||||
return L >= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "<=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) <= convert_from_double_word(R);
|
||||
return to_unsigned(L) <= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "<=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) <= R;
|
||||
return to_unsigned(L) <= R;
|
||||
end function;
|
||||
|
||||
function "<=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L <= convert_from_double_word(R);
|
||||
return L <= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) = convert_from_double_word(R);
|
||||
return to_unsigned(L) = to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) = R;
|
||||
return to_unsigned(L) = R;
|
||||
end function;
|
||||
|
||||
function "=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L = convert_from_double_word(R);
|
||||
return L = to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "/=" (L,R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) /= convert_from_double_word(R);
|
||||
return to_unsigned(L) /= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "/=" (L: DOUBLE_WORD_ARRAY; R: natural) return boolean is
|
||||
begin
|
||||
return convert_from_double_word(L) /= R;
|
||||
return to_unsigned(L) /= R;
|
||||
end function;
|
||||
|
||||
function "/=" (L: natural; R: DOUBLE_WORD_ARRAY) return boolean is
|
||||
begin
|
||||
return L /= convert_from_double_word(R);
|
||||
return L /= to_unsigned(R);
|
||||
end function;
|
||||
|
||||
function "+" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(convert_from_double_word(L) + convert_from_double_word(R));
|
||||
return to_double_word(to_unsigned(L) + to_unsigned(R));
|
||||
end function;
|
||||
|
||||
function "+" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(convert_from_double_word(L) + R);
|
||||
return to_double_word(to_unsigned(L) + R);
|
||||
end function;
|
||||
|
||||
function "+" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(L + convert_from_double_word(R));
|
||||
return to_double_word(L + to_unsigned(R));
|
||||
end function;
|
||||
|
||||
function "-" (L,R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(convert_from_double_word(L) - convert_from_double_word(R));
|
||||
return to_double_word(to_unsigned(L) - to_unsigned(R));
|
||||
end function;
|
||||
|
||||
function "-" (L: DOUBLE_WORD_ARRAY; R: natural) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(convert_from_double_word(L) - R);
|
||||
return to_double_word(to_unsigned(L) - R);
|
||||
end function;
|
||||
|
||||
function "-" (L: natural; R: DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
|
||||
begin
|
||||
return convert_to_double_word(L - convert_from_double_word(R));
|
||||
return to_double_word(L - to_unsigned(R));
|
||||
end function;
|
||||
|
||||
function min(L, R : DOUBLE_WORD_ARRAY) return DOUBLE_WORD_ARRAY is
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -657,23 +657,23 @@ package body rtps_test_package is
|
||||
locator => (
|
||||
0 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
),
|
||||
1 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_META_ADDRESS
|
||||
),
|
||||
2 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_MULTICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_MULTICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
|
||||
),
|
||||
3 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & META_IPv4_UNICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & META_IPv4_UNICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
|
||||
),
|
||||
others => EMPTY_LOCATOR
|
||||
)
|
||||
@ -683,13 +683,13 @@ package body rtps_test_package is
|
||||
locator => (
|
||||
0 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_MULTICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_MULTICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
|
||||
),
|
||||
1 => (
|
||||
kind => LOCATOR_KIND_UDPv4,
|
||||
portn => (LOCATOR_PORT_WIDTH-1 downto UDP_PORT_WIDTH => '0') & USER_IPv4_UNICAST_PORT,
|
||||
addr => (LOCATOR_ADDR_WIDTH-1 downto IPv4_ADDRESS_WIDTH => '0') & DEFAULT_IPv4_ADDRESS
|
||||
portn => (UDP_PORT_WIDTH to LOCATOR_PORT_WIDTH-1 => '0') & USER_IPv4_UNICAST_PORT,
|
||||
addr => (IPv4_ADDRESS_WIDTH to LOCATOR_ADDR_WIDTH-1 => '0') & DEFAULT_IPv4_ADDRESS
|
||||
),
|
||||
others => EMPTY_LOCATOR
|
||||
)
|
||||
@ -808,7 +808,7 @@ package body rtps_test_package is
|
||||
liveliness => DEFAULT_LIVELINESS_QOS,
|
||||
leaseDuration => DEFAULT_LEASE_DURATION,
|
||||
time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS,
|
||||
reliability => DEFAULT_RELIABILTY_QOS,
|
||||
reliability => DEFAULT_RELIABILITY_QOS,
|
||||
max_blocking_time => DEFAULT_MAX_BLOCKING_TIME,
|
||||
transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS,
|
||||
lifespan => DEFAULT_LIFESPAN_QOS,
|
||||
@ -1018,9 +1018,9 @@ package body rtps_test_package is
|
||||
begin
|
||||
if (ref.kind /= LOCATOR_KIND_UDPv4) then
|
||||
return FALSE;
|
||||
elsif (ref.addr(IPv4_ADDRESS_WIDTH-1 downto 0) = (IPv4_ADDRESS_WIDTH-1 downto 0 => '0')) then
|
||||
elsif (ref.addr(IPv4_ADDRESS_WIDTH-1 downto 0) = IPv4_ADDRESS_INVALID) then
|
||||
return FALSE;
|
||||
elsif (ref.portn(UDP_PORT_WIDTH-1 downto 0) = (UDP_PORT_WIDTH-1 downto 0 => '0')) then
|
||||
elsif (ref.portn(UDP_PORT_WIDTH-1 downto 0) = UDP_PORT_INVALID) then
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
@ -1263,10 +1263,10 @@ package body rtps_test_package is
|
||||
if (ref.submessageID = SID_ACKNACK or ref.submessageID = SID_NACK_FRAG or ref.submessageID = SID_HEARTBEAT or ref.submessageID = SID_HEARTBEAT_FRAG or ref.submessageID = SID_GAP or ref.submessageID = SID_DATA or ref.submessageID = SID_DATA_FRAG or ref.submessageID = SID_INFO_TS or ref.submessageID = SID_INFO_SRC or ref.submessageID = SID_INFO_DST or ref.submessageID = SID_INFO_REPLY or ref.submessageID =SID_INFO_REPLY_IP4) then
|
||||
-- NOTE: A Submessage Length of 0 is left as is.
|
||||
-- Fix Submessage Length
|
||||
if (ref.submessageLength = (ref.submessageLength'range => '1')) then
|
||||
if (ref.submessageLength = (ref.submessageLength'reverse_range => '1')) then
|
||||
output.data(start)(SUBMESSAGE_LENGTH_WIDTH-1 downto 0) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), int((output.length-start-1)*4,SUBMESSAGE_LENGTH_WIDTH));
|
||||
-- Fix(Truncate/Extend) Packet Length to specified Length
|
||||
elsif (ref.submessageLength /= (ref.submessageLength'range => '0')) then
|
||||
elsif (ref.submessageLength /= (ref.submessageLength'reverse_range => '0')) then
|
||||
output.length := start + to_integer(unsigned(ref.submessageLength));
|
||||
end if;
|
||||
-- *PAD/UKNOWN*
|
||||
@ -1422,7 +1422,7 @@ package body rtps_test_package is
|
||||
null;
|
||||
end case;
|
||||
if (ref.payload.length > 0 and (not ref.serialized_key)) then
|
||||
output.data(output.length)(SSI_PAYLOAD_FLAG) := '1';
|
||||
output.data(output.length)(SSI_DATA_FLAG) := '1';
|
||||
end if;
|
||||
if (ref.instance /= HANDLE_NIL) then
|
||||
output.data(output.length)(SSI_KEY_HASH_FLAG) := '1';
|
||||
@ -1604,7 +1604,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end if;
|
||||
-- METATRAFFIC MULTICAST LOCATOR
|
||||
if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'range => '0')) then
|
||||
if (ref.metatrafficMulticastLocatorList.numLocators /= (ref.metatrafficMulticastLocatorList.numLocators'reverse_range => '0')) then
|
||||
tmp := to_integer(unsigned(ref.metatrafficMulticastLocatorList.numLocators));
|
||||
for i in 0 to tmp-1 loop
|
||||
if (pid = PID_METATRAFFIC_MULTICAST_LOCATOR) then
|
||||
@ -1632,7 +1632,7 @@ package body rtps_test_package is
|
||||
end loop;
|
||||
end if;
|
||||
-- METATRAFFIC UNICAST LOCATOR
|
||||
if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'range => '0')) then
|
||||
if (ref.metatrafficUnicastLocatorList.numLocators /= (ref.metatrafficUnicastLocatorList.numLocators'reverse_range => '0')) then
|
||||
tmp := to_integer(unsigned(ref.metatrafficUnicastLocatorList.numLocators));
|
||||
for i in 0 to tmp-1 loop
|
||||
if (pid = PID_METATRAFFIC_UNICAST_LOCATOR) then
|
||||
@ -1660,7 +1660,7 @@ package body rtps_test_package is
|
||||
end loop;
|
||||
end if;
|
||||
-- DEFAULT MULTICAST LOCATOR
|
||||
if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'range => '0')) then
|
||||
if (ref.defaultMulticastLocatorList.numLocators /= (ref.defaultMulticastLocatorList.numLocators'reverse_range => '0')) then
|
||||
tmp := to_integer(unsigned(ref.defaultMulticastLocatorList.numLocators));
|
||||
for i in 0 to tmp-1 loop
|
||||
if (pid = PID_DEFAULT_MULTICAST_LOCATOR) then
|
||||
@ -1689,7 +1689,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
-- DEFAULT UNICAST LOCATOR
|
||||
assert (unsigned(ref.defaultUnicastLocatorList.numLocators) > 0) report "PARTICIPANT_DATA: Participant needs to have at least one Default Unicast Locator." severity error;
|
||||
if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'range => '0')) then
|
||||
if (ref.defaultUnicastLocatorList.numLocators /= (ref.defaultUnicastLocatorList.numLocators'reverse_range => '0')) then
|
||||
tmp := to_integer(unsigned(ref.defaultUnicastLocatorList.numLocators));
|
||||
for i in 0 to tmp-1 loop
|
||||
if (pid = PID_DEFAULT_UNICAST_LOCATOR) then
|
||||
@ -1885,7 +1885,7 @@ package body rtps_test_package is
|
||||
-- UDP Port
|
||||
when 5 =>
|
||||
if (ref.match = MATCH) then
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
|
||||
else
|
||||
ret(i).data := (others => '-');
|
||||
end if;
|
||||
@ -2004,7 +2004,7 @@ package body rtps_test_package is
|
||||
-- UDP Port
|
||||
when 5 =>
|
||||
if (ref.match = MATCH) then
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
|
||||
ret(i).data(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0);
|
||||
ret(i).data(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '1' when (ref.durability /= VOLATILE_DURABILITY_QOS) else '0';
|
||||
ret(i).data(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0';
|
||||
@ -2073,7 +2073,7 @@ package body rtps_test_package is
|
||||
-- UDP Port
|
||||
when 5 =>
|
||||
if (ref.match = MATCH) then
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & (UDP_PORT_WIDTH-1 downto 0 => '0');
|
||||
ret(i).data := user_loc.portn(UDP_PORT_WIDTH-1 downto 0) & UDP_PORT_INVALID;
|
||||
ret(i).data(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0);
|
||||
ret(i).data(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '1' when (ref.durability /= VOLATILE_DURABILITY_QOS) else '0';
|
||||
ret(i).data(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0';
|
||||
@ -2373,7 +2373,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (ref.reliability /= DEFAULT_RELIABILTY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
|
||||
if (ref.reliability /= DEFAULT_RELIABILITY_QOS or ref.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
|
||||
if (pid = PID_RELIABILITY) then
|
||||
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE;
|
||||
output.data(output.length) := PID_RELIABILITY & endian_swap(ref.littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
|
||||
@ -2601,7 +2601,7 @@ package body rtps_test_package is
|
||||
|
||||
procedure gen_sentinel(output : inout TEST_PACKET_TYPE) is
|
||||
begin
|
||||
output.data(output.length) := PID_SENTINEL & (PARAMETER_LENGTH_WIDTH-1 downto 0 => '0');
|
||||
output.data(output.length) := PID_SENTINEL & (0 to PARAMETER_LENGTH_WIDTH-1 => '0');
|
||||
output.length := output.length + 1;
|
||||
end procedure;
|
||||
|
||||
@ -2803,7 +2803,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end if;
|
||||
-- RELIABILITY
|
||||
if (endpoint.reliability /= DEFAULT_RELIABILTY_QOS or endpoint.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
|
||||
if (endpoint.reliability /= DEFAULT_RELIABILITY_QOS or endpoint.max_blocking_time /= DEFAULT_MAX_BLOCKING_TIME or pid = PID_RELIABILITY) then
|
||||
if (pid = PID_RELIABILITY) then
|
||||
assert (12+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE;
|
||||
output.data(output.length) := PID_RELIABILITY & endian_swap(littleEndian, int(12+(offset*4),PARAMETER_LENGTH_WIDTH));
|
||||
@ -3155,7 +3155,7 @@ package body rtps_test_package is
|
||||
for i in 0 to max(mem.ilen-1,0) loop
|
||||
-- Instance Found
|
||||
if (inst = mem.inst(i).inst) then
|
||||
if (((mem.inst(i).istate and istate) /= (istate'range => '0')) and ((mem.inst(i).vstate and vstate) /= (vstate'range => '0'))) then
|
||||
if (((mem.inst(i).istate and istate) /= (istate'reverse_range => '0')) and ((mem.inst(i).vstate and vstate) /= (vstate'reverse_range => '0'))) then
|
||||
return TRUE;
|
||||
end if;
|
||||
end if;
|
||||
@ -3173,6 +3173,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end loop;
|
||||
assert FALSE report "Instance not in Memory" severity FAILURE;
|
||||
return mem.ilen;
|
||||
end function;
|
||||
|
||||
procedure gen_collection (mem : inout DDS_READER_MEM_TYPE; col : inout COLLECTION_TYPE; inst : INSTANCE_HANDLE_TYPE; sstate : in std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0); istate : in std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0); vstate : in std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0); max_samples : in natural; remove : in boolean; sort : in boolean) is
|
||||
@ -3189,7 +3190,7 @@ package body rtps_test_package is
|
||||
loop
|
||||
if (no_inst) then
|
||||
-- Sample and Instance Compatible
|
||||
if (((mem.s(i).sstate and sstate) /= (sstate'range => '0')) and check_instance(istate, vstate, mem, mem.s(i).inst) and ((inst /= HANDLE_NIL and inst = mem.s(i).inst) or inst = HANDLE_NIL) and (sel(i) /= '1')) then
|
||||
if (((mem.s(i).sstate and sstate) /= (sstate'reverse_range => '0')) and check_instance(istate, vstate, mem, mem.s(i).inst) and ((inst /= HANDLE_NIL and inst = mem.s(i).inst) or inst = HANDLE_NIL) and (sel(i) /= '1')) then
|
||||
col.s(col.len) := mem.s(i);
|
||||
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate;
|
||||
col.s(col.len).vstate := mem.inst(find_instance(mem,mem.s(i).inst)).vstate;
|
||||
@ -3206,7 +3207,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end if;
|
||||
-- Sample Compatible (and belonging to specified Instance)
|
||||
elsif (((mem.s(i).sstate and sstate) /= (sstate'range => '0')) and (mem.s(i).inst = tmp_inst) and (sel(i) /= '1')) then
|
||||
elsif (((mem.s(i).sstate and sstate) /= (sstate'reverse_range => '0')) and (mem.s(i).inst = tmp_inst) and (sel(i) /= '1')) then
|
||||
col.s(col.len) := mem.s(i);
|
||||
col.s(col.len).istate := mem.inst(find_instance(mem,mem.s(i).inst)).istate;
|
||||
col.s(col.len).vstate := mem.inst(find_instance(mem,mem.s(i).inst)).vstate;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -94,7 +94,7 @@ package user_config is
|
||||
constant ENDPOINT_TIME_BASED_FILTER_QOS : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_TIME_BASED_FILTER_QOS);
|
||||
-- XXX: PARTITION QoS Ignored
|
||||
-- Array mapping RELIABILITY QoS to Endpoints
|
||||
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_RELIABILTY_QOS);
|
||||
constant ENDPOINT_RELIABILITY_QOS : USER_ENUMERATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_RELIABILITY_QOS);
|
||||
-- (Only relevant to Writers)
|
||||
constant ENDPOINT_MAX_BLOCKING_TIME : USER_DURATION_ARRAY_TYPE(0 to NUM_ENDPOINTS-1) := (others => DEFAULT_MAX_BLOCKING_TIME);
|
||||
-- Array mapping TRANSPORT_PRIORITY QoS to Endpoints (Only relevant to Writers)
|
||||
@ -120,4 +120,7 @@ package user_config is
|
||||
-- NOTE: The buffer will not only store participants, but also endpoint data
|
||||
-- Used to determine the size of the builtin endpoint buffer
|
||||
constant MAX_REMOTE_PARTICIPANTS : natural := 50;
|
||||
|
||||
-- Set to TRUE for Simulation Testing (Extra Code generated)
|
||||
constant SIMULATION_FLAG : boolean := FALSE;
|
||||
end package;
|
||||
Loading…
Reference in New Issue
Block a user