Documentation Refactoring (Fix Typos)
This commit is contained in:
parent
ca80910494
commit
d537cd7460
@ -13,7 +13,7 @@ The 'GET_PAYLOAD_HEADER' stage jumps to the stage handling the first declared me
|
|||||||
Each stage jumps to the decode_stage of the next declared member.
|
Each stage jumps to the decode_stage of the next declared member.
|
||||||
If there is no next declared member, stage 'SKIP_PAYLOAD' is selected.
|
If there is no next declared member, stage 'SKIP_PAYLOAD' is selected.
|
||||||
|
|
||||||
The signal 'align_offset' keeps track of the current alignement offset (Basically byte_count mod 8).
|
The signal 'align_offset' keeps track of the current alignment offset (Basically byte_count mod 8).
|
||||||
|
|
||||||
The general procedure is that the input is latched ('data_in_latch') allowing to work Byte-oriented, since
|
The general procedure is that the input is latched ('data_in_latch') allowing to work Byte-oriented, since
|
||||||
the input is word-sized. Each time the 'align_offset' reaches b"X11" a new input word is latched.
|
the input is word-sized. Each time the 'align_offset' reaches b"X11" a new input word is latched.
|
||||||
@ -23,10 +23,10 @@ The CDR Encodings of all types are Byte aligned.
|
|||||||
PRIMITIVES TYPES
|
PRIMITIVES TYPES
|
||||||
================
|
================
|
||||||
|
|
||||||
Primitive Types are directly latched into registers of equal size (name <NAME>_lach), that are
|
Primitive Types are directly latched into registers of equal size (name <NAME>_latch), that are
|
||||||
accesible directly via a port of the same name (i.e. <NAME>).
|
accessible directly via a port of the same name (i.e. <NAME>).
|
||||||
The name of the generated decode_stage is GET_<NAME>.
|
The name of the generated decode_stage is GET_<NAME>.
|
||||||
The generated decode_stage first checks the alignement and aligns the stream using the 'ALIGN_STREAM' stage.
|
The generated decode_stage first checks the alignment and aligns the stream using the 'ALIGN_STREAM' stage.
|
||||||
* Primitive size 1
|
* Primitive size 1
|
||||||
The input is directly latched using the get_sub_vector function together with the current 'align_offset',
|
The input is directly latched using the get_sub_vector function together with the current 'align_offset',
|
||||||
1 is added to the 'align_offset', the decode_stage of the next declared member is taken, and the 'FETCH'
|
1 is added to the 'align_offset', the decode_stage of the next declared member is taken, and the 'FETCH'
|
||||||
@ -54,9 +54,9 @@ The generated decode_stage first checks the alignement and aligns the stream usi
|
|||||||
NOTE: The extra sub-stage is used to push the signal to a memory in a single operation
|
NOTE: The extra sub-stage is used to push the signal to a memory in a single operation
|
||||||
|
|
||||||
NOTE: If there is no next declared member, the last sub-stage should not call the "FETCH" stage.
|
NOTE: If there is no next declared member, the last sub-stage should not call the "FETCH" stage.
|
||||||
(Should be overriden by "SKIP_PAYLOAD")
|
(Should be overridden by "SKIP_PAYLOAD")
|
||||||
|
|
||||||
The alignements and sizes for IDL primitive types are following:
|
The alignments and sizes for IDL primitive types are following:
|
||||||
|
|
||||||
IDL TYPE SIZE ALIGNMENT [2]
|
IDL TYPE SIZE ALIGNMENT [2]
|
||||||
int8/uint8 1 1
|
int8/uint8 1 1
|
||||||
@ -88,7 +88,7 @@ BIT_BOUND PRIMITIVE [3]
|
|||||||
COLLECTION TYPES
|
COLLECTION TYPES
|
||||||
================
|
================
|
||||||
|
|
||||||
In contrast to primitive types, collection types are latched into memories of equal width and depth
|
In contrast to primitive types, collection types are latched into same width memories and with a depth
|
||||||
equal to the maximum length. Memory access port signals are made available to the user to allow to access
|
equal to the maximum length. Memory access port signals are made available to the user to allow to access
|
||||||
the contents.
|
the contents.
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ Following Port signals are defined:
|
|||||||
NAME DIRECTION CONNECTED
|
NAME DIRECTION CONNECTED
|
||||||
<NAME>_len out <NAME>_len_latch
|
<NAME>_len out <NAME>_len_latch
|
||||||
<NAME>_addr in <NAME>_mem_addr in 'IDLE' stage
|
<NAME>_addr in <NAME>_mem_addr in 'IDLE' stage
|
||||||
<NAME>_ready out <NAME>_mem_ready_in in 'IDLE' stage, else '0' [NOTE: ANDing for aggregated elment types (see Structures below)]
|
<NAME>_ready out <NAME>_mem_ready_in in 'IDLE' stage, else '0' [NOTE: ANDing for aggregated element types (see Structures below)]
|
||||||
<NAME>_ren in <NAME>_mem_read and <NAME>_mem_valid_in in 'IDLE' stage
|
<NAME>_ren in <NAME>_mem_read and <NAME>_mem_valid_in in 'IDLE' stage
|
||||||
<NAME>_valid out <NAME>_mem_valid_out [NOTE: ANDing for aggregated element types (see Structures below)]
|
<NAME>_valid out <NAME>_mem_valid_out [NOTE: ANDing for aggregated element types (see Structures below)]
|
||||||
<NAME>_ack in <NAME>_mem_ready_out in 'IDLE' stage
|
<NAME>_ack in <NAME>_mem_ready_out in 'IDLE' stage
|
||||||
@ -116,8 +116,8 @@ NAME DIRECTION CONNECTED
|
|||||||
type package. A special <NAME>_cnt counter (used to index the type specific memory) is initialized to 0.
|
type package. A special <NAME>_cnt counter (used to index the type specific memory) is initialized to 0.
|
||||||
NOTE: It could be configured, that instead of truncating larger sequences, a decode error is triggered.
|
NOTE: It could be configured, that instead of truncating larger sequences, a decode error is triggered.
|
||||||
* GET_<NAME>
|
* GET_<NAME>
|
||||||
This stage is similar to the respective primitive decode_stage with following valiations:
|
This stage is similar to the respective primitive decode_stage with following variations:
|
||||||
The <NAME>_cnt is used to set the current <NAME>_mem_addr. On sucessful latch
|
The <NAME>_cnt is used to set the current <NAME>_mem_addr. On successful latch
|
||||||
(<NAME>_mem_valid_in and <NAME>_ready_in = '1') the align_offset is incremented by the
|
(<NAME>_mem_valid_in and <NAME>_ready_in = '1') the align_offset is incremented by the
|
||||||
respective size, the <NAME>_cnt is incremented, and if the current <NAME>_cnt is equal to
|
respective size, the <NAME>_cnt is incremented, and if the current <NAME>_cnt is equal to
|
||||||
<NAME>_len-1, the decode_stage of the next declared member is taken.
|
<NAME>_len-1, the decode_stage of the next declared member is taken.
|
||||||
@ -212,7 +212,7 @@ A new <NAME>_opt port signal is defined, that is connected to a <NAME>_opt_latch
|
|||||||
The previous decode_stage selects the 'GET_OPTIONAL_HEADER' decode_stage, and sets the 'return_stage'
|
The previous decode_stage selects the 'GET_OPTIONAL_HEADER' decode_stage, and sets the 'return_stage'
|
||||||
to the actual next decode_stage (The decode_stage of the optional member).
|
to the actual next decode_stage (The decode_stage of the optional member).
|
||||||
The first generated decode_stage of the <NAME> (i.e. the stage that was in return_stage) checks
|
The first generated decode_stage of the <NAME> (i.e. the stage that was in return_stage) checks
|
||||||
the 'optional' signal before anything else (even before the alignement). If 'optional' is '0', it sets
|
the 'optional' signal before anything else (even before the alignment). If 'optional' is '0', it sets
|
||||||
the <NAME>_opt_latch to '0' and selects the decode_stage of the next declared member. Otherwise
|
the <NAME>_opt_latch to '0' and selects the decode_stage of the next declared member. Otherwise
|
||||||
the <NAME>_opt_latch is set to '1'.
|
the <NAME>_opt_latch is set to '1'.
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ In General the writer_interface is a similar layout to the reader_interface with
|
|||||||
All "GET_*" stages are renamed to "WRITE_*".
|
All "GET_*" stages are renamed to "WRITE_*".
|
||||||
The "FETCH" stage is renamed to "PUSH".
|
The "FETCH" stage is renamed to "PUSH".
|
||||||
'write_sub_vector' is used to write into 'data_out_latch' (instead of 'get_sub_vector' and 'data_in_latch').
|
'write_sub_vector' is used to write into 'data_out_latch' (instead of 'get_sub_vector' and 'data_in_latch').
|
||||||
The direction of the <NAME> port signals are inverted (i.e. in).
|
The direction of the <NAME> port signals are inverted.
|
||||||
Instead of calling 'SKIP_PAYLOAD' stage on the last declared member, the 'PUSH' stage is explicitly called
|
Instead of calling 'SKIP_PAYLOAD' stage on the last declared member, the 'PUSH' stage is explicitly called
|
||||||
and the 'encode_done' and 'finalize_payload' signals are set.
|
and the 'encode_done' and 'finalize_payload' signals are set.
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ The <NAME>_len_latch is removed (Since the Length is now an input).
|
|||||||
The 'WRITE_<NAME>' encode_stage is divided with the help of 'cnt' into 2 sub-stages.
|
The 'WRITE_<NAME>' encode_stage is divided with the help of 'cnt' into 2 sub-stages.
|
||||||
The first sub-stage is responsible for requesting the value from the memory (Memory READ request).
|
The first sub-stage is responsible for requesting the value from the memory (Memory READ request).
|
||||||
The second sub-stage waits until the value is valid (<NAME>_mem_valid_out) and does the usual write
|
The second sub-stage waits until the value is valid (<NAME>_mem_valid_out) and does the usual write
|
||||||
procedure. On sucessfull write the <NAME>_mem_ready_out has to be pulsed high to finalize the memory
|
procedure. On successful write the <NAME>_mem_ready_out has to be pulsed high to finalize the memory
|
||||||
operation.
|
operation.
|
||||||
NOTE: If the encode_stage already is divided into sub-stages (due to the primitive type), a single
|
NOTE: If the encode_stage already is divided into sub-stages (due to the primitive type), a single
|
||||||
sub-stage is added that does the Memory fetch operation, and the <NAME>_mem_ready_out is pulled high
|
sub-stage is added that does the Memory fetch operation, and the <NAME>_mem_ready_out is pulled high
|
||||||
@ -264,7 +264,7 @@ for storing the individual sequence lengths, similar to the reader_interface.
|
|||||||
The memory signal connections are similar to the normal write_interface collection case, allowing the
|
The memory signal connections are similar to the normal write_interface collection case, allowing the
|
||||||
length to be stored when a write to the outer collection happens.
|
length to be stored when a write to the outer collection happens.
|
||||||
The WRITE_<INNER_COLLECTION_NAME>_LENGTH stage has to be implemented, similar to the normal collection
|
The WRITE_<INNER_COLLECTION_NAME>_LENGTH stage has to be implemented, similar to the normal collection
|
||||||
case, with a extra sub-stage for the memory fetch operation.
|
case, with an extra sub-stage for the memory fetch operation.
|
||||||
|
|
||||||
|
|
||||||
OPTIONALS
|
OPTIONALS
|
||||||
@ -305,7 +305,7 @@ The second - taken on a 'PUSH_SERIALIZED_KEY' opcode - follows the reader_interf
|
|||||||
KeyHolder(<NAME>) directly.
|
KeyHolder(<NAME>) directly.
|
||||||
Since the decode_stages for the second decoding procedure are a subset of the first decoding procedure,
|
Since the decode_stages for the second decoding procedure are a subset of the first decoding procedure,
|
||||||
the same decode stages are used, and only the 'decode_stage_next' signal is set depending on the
|
the same decode stages are used, and only the 'decode_stage_next' signal is set depending on the
|
||||||
'opcode_latch' signal. The 'GET_PAYLAOD_HEADER' stage selects the correct first decode stage.
|
'opcode_latch' signal. The 'GET_PAYLOAD_HEADER' stage selects the correct first decode stage.
|
||||||
|
|
||||||
Similarly the encode procedure also follows 2 different encoding procedures.
|
Similarly the encode procedure also follows 2 different encoding procedures.
|
||||||
The first - taken on a 'READ_SERIALIZED_KEY' opcode - follows the write_interface procedure of the
|
The first - taken on a 'READ_SERIALIZED_KEY' opcode - follows the write_interface procedure of the
|
||||||
|
|||||||
@ -51,10 +51,10 @@ use work.rtps_test_package.all;
|
|||||||
-- TEST: ADD SAMPLE ON MAX_SAMPLES_PER_INSTANCE
|
-- TEST: ADD SAMPLE ON MAX_SAMPLES_PER_INSTANCE
|
||||||
-- TEST: ADD SAMPLE ON MAX_SAMPLES [KNOWN INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_SAMPLES [KNOWN INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_SAMPLES [UNKNOWN INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_SAMPLES [UNKNOWN INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITH STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITH STALE INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_SAMPLES & MAX_INSTANCES [UNKNOWN INSTANCE, WITH STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_SAMPLES & MAX_INSTANCES [UNKNOWN INSTANCE, WITH STALE INSTANCE]
|
||||||
-- TEST: ADD SAMPLE ON MAX_SAMPLES & MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_SAMPLES & MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
|
||||||
-- TEST: ADD SAMPLE BIGGER THAN AVAILABLE MEMORY SPACE
|
-- TEST: ADD SAMPLE BIGGER THAN AVAILABLE MEMORY SPACE
|
||||||
@ -377,7 +377,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
@ -534,7 +534,7 @@ begin
|
|||||||
AffirmIf(status_id,(status(0) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(0) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
AffirmIf(status_id,(status(5) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(5) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
|
|
||||||
-- VAILDATE STATE
|
-- VALIDATE STATE
|
||||||
|
|
||||||
Log("R0,R5: DDS Operation READ [MAX_SAMPLES 4, ANY_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE]", INFO);
|
Log("R0,R5: DDS Operation READ [MAX_SAMPLES 4, ANY_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
@ -1013,7 +1013,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh4,10);
|
cc.payload := gen_payload(kh4,10);
|
||||||
cc.src_timestamp := gen_duration(7 sec);
|
cc.src_timestamp := gen_duration(7 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
||||||
|
|
||||||
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
||||||
Log("R0,R5: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
Log("R0,R5: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
||||||
@ -1094,7 +1094,7 @@ begin
|
|||||||
AffirmIf(status_id,(status(0) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(0) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
AffirmIf(status_id,(status(5) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(5) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITH STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITH STALE INSTANCE]
|
||||||
|
|
||||||
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
||||||
Log("R0,R5: ACCEPTED", DEBUG);
|
Log("R0,R5: ACCEPTED", DEBUG);
|
||||||
@ -1224,7 +1224,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh1,10);
|
cc.payload := gen_payload(kh1,10);
|
||||||
cc.src_timestamp := gen_duration(8 sec);
|
cc.src_timestamp := gen_duration(8 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
|
||||||
|
|
||||||
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 1, Writer 0, Aligned Payload]", INFO);
|
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 1, Writer 0, Aligned Payload]", INFO);
|
||||||
Log("R0,R5: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
Log("R0,R5: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
||||||
@ -2344,7 +2344,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh2,10);
|
cc.payload := gen_payload(kh2,10);
|
||||||
cc.src_timestamp := gen_duration(25 sec);
|
cc.src_timestamp := gen_duration(25 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
||||||
|
|
||||||
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 2, Writer 0, Aligned Payload]", INFO);
|
Log("R0,R5: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 2, Writer 0, Aligned Payload]", INFO);
|
||||||
Log("R0,R5: ACCEPTED", DEBUG);
|
Log("R0,R5: ACCEPTED", DEBUG);
|
||||||
@ -3520,7 +3520,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh4,10);
|
cc.payload := gen_payload(kh4,10);
|
||||||
cc.src_timestamp := gen_duration(8 sec);
|
cc.src_timestamp := gen_duration(8 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY INSTANCE]
|
||||||
|
|
||||||
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
||||||
Log("R1,R2,R3: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
Log("R1,R2,R3: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
||||||
@ -3630,7 +3630,7 @@ begin
|
|||||||
AffirmIf(status_id,(status(2) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(2) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
AffirmIf(status_id,(status(3) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(3) and DATA_AVAILABLE_STATUS) = DATA_AVAILABLE_STATUS, "Expected: 1", "Received: 0");
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITH STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITH STALE INSTANCE]
|
||||||
|
|
||||||
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 4, Writer 1, Aligned Payload]", INFO);
|
||||||
Log("R1,R2,R3: ACCEPTED", DEBUG);
|
Log("R1,R2,R3: ACCEPTED", DEBUG);
|
||||||
@ -3804,7 +3804,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh1,10);
|
cc.payload := gen_payload(kh1,10);
|
||||||
cc.src_timestamp := gen_duration(9 sec);
|
cc.src_timestamp := gen_duration(9 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, WITHOUT STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
|
||||||
|
|
||||||
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 1, Writer 0, Aligned Payload]", INFO);
|
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 1, Writer 0, Aligned Payload]", INFO);
|
||||||
Log("R1,R2,R3: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
Log("R1,R2,R3: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
|
||||||
@ -5295,7 +5295,7 @@ begin
|
|||||||
cc.payload := gen_payload(kh2,10);
|
cc.payload := gen_payload(kh2,10);
|
||||||
cc.src_timestamp := gen_duration(27 sec);
|
cc.src_timestamp := gen_duration(27 sec);
|
||||||
|
|
||||||
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, NOT_ALIVE_DISPOSED & STALE INSTANCE]
|
||||||
|
|
||||||
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 2, Writer 0, Aligned Payload]", INFO);
|
Log("R1,R2,R3: RTPS Operation ADD_CACHE_CHANGE [KEY_HASH, Instance 2, Writer 0, Aligned Payload]", INFO);
|
||||||
Log("R1,R2,R3: ACCEPTED", DEBUG);
|
Log("R1,R2,R3: ACCEPTED", DEBUG);
|
||||||
|
|||||||
@ -260,7 +260,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
@ -538,7 +538,7 @@ begin
|
|||||||
-- ISTATE: I1:ALIVE, I2:ALIVE
|
-- ISTATE: I1:ALIVE, I2:ALIVE
|
||||||
-- WRITER: W0:I1, W1:I2
|
-- WRITER: W0:I1, W1:I2
|
||||||
|
|
||||||
-- VAILDATE STATE
|
-- VALIDATE STATE
|
||||||
|
|
||||||
Log("R0,R1: DDS Operation READ [MAX_SAMPLES 4, ANY_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE]", INFO);
|
Log("R0,R1: DDS Operation READ [MAX_SAMPLES 4, ANY_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
|
|||||||
@ -33,13 +33,13 @@ use work.rtps_test_package.all;
|
|||||||
-- TEST: TAKE_NEXT_SAMPLE [NO SAMPLE]
|
-- TEST: TAKE_NEXT_SAMPLE [NO SAMPLE]
|
||||||
-- TEST: TAKE_NEXT_SAMPLE
|
-- TEST: TAKE_NEXT_SAMPLE
|
||||||
-- TEST: READ_INSTANCE [UNKNOWN INSTANCE]
|
-- TEST: READ_INSTANCE [UNKNOWN INSTANCE]
|
||||||
-- TEST: READ_INSTANCE [KNOWN INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_INSTANCE [KNOWN INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
-- TEST: READ_INSTANCE [KNOWN INSTANCE, COMPATIBLE SAMPLES]
|
-- TEST: READ_INSTANCE [KNOWN INSTANCE, COMPATIBLE SAMPLES]
|
||||||
-- TEST: READ_INSTANCE [NO SAMPLES]
|
-- TEST: READ_INSTANCE [NO SAMPLES]
|
||||||
-- TEST: TAKE_INSTANCE [NO SAMPLES]
|
-- TEST: TAKE_INSTANCE [NO SAMPLES]
|
||||||
-- TEST: TAKE_INSTANCE
|
-- TEST: TAKE_INSTANCE
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH SAMPLES, WITHOUT NEXT INSTANCE]
|
-- TEST: READ_NEXT_INSTANCE [WITH SAMPLES, WITHOUT NEXT INSTANCE]
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, COMPATIBLE SAMPLES]
|
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, COMPATIBLE SAMPLES]
|
||||||
-- TEST: READ_NEXT_INSTANCE [HANDLE_NIL]
|
-- TEST: READ_NEXT_INSTANCE [HANDLE_NIL]
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, WITH COMPATIBLE SAMPLE, NOT DIRECT NEXT INSTANCE]
|
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, WITH COMPATIBLE SAMPLE, NOT DIRECT NEXT INSTANCE]
|
||||||
@ -350,7 +350,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
@ -1393,7 +1393,7 @@ begin
|
|||||||
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
||||||
|
|
||||||
-- TEST: READ_INSTANCE [KNOWN INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_INSTANCE [KNOWN INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
|
|
||||||
Log("R0,R1,R2,R3: DDS Operation READ_INSTANCE [MAX_SAMPLES 20, NOT_READ_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE, Instance 1]", INFO);
|
Log("R0,R1,R2,R3: DDS Operation READ_INSTANCE [MAX_SAMPLES 20, NOT_READ_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE, Instance 1]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
@ -1430,7 +1430,7 @@ begin
|
|||||||
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
||||||
|
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
|
|
||||||
Log("R0,R1,R2,R3: DDS Operation READ_NEXT_INSTANCE [MAX_SAMPLES 20, ANY_SAMPLE_STATE, NOT_ALIVE_DISPOSED_INSTANCE_STATE, ANY_VIEW_STATE, Instance 2]", INFO);
|
Log("R0,R1,R2,R3: DDS Operation READ_NEXT_INSTANCE [MAX_SAMPLES 20, ANY_SAMPLE_STATE, NOT_ALIVE_DISPOSED_INSTANCE_STATE, ANY_VIEW_STATE, Instance 2]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
@ -2695,7 +2695,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I4S2-(7)
|
-- MEM: I4S2-(7)
|
||||||
-- ISTATE: I4:DISOSED
|
-- ISTATE: I4:DISPOSED
|
||||||
-- VIEW: I4:NEW
|
-- VIEW: I4:NEW
|
||||||
-- WRITER: W2:I4
|
-- WRITER: W2:I4
|
||||||
|
|
||||||
@ -2727,7 +2727,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I4S2-(7)
|
-- MEM: I1S1(0), I4S2-(7)
|
||||||
-- ISTATE: I1:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I4:NEW
|
-- VIEW: I1:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I4
|
-- WRITER: W0:I1, W2:I4
|
||||||
|
|
||||||
@ -2759,7 +2759,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I4S2-(7)
|
-- MEM: I1S1(0), I1S2-(1), I4S2-(7)
|
||||||
-- ISTATE: I1:DISPOSED, I4:DISOSED
|
-- ISTATE: I1:DISPOSED, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I4:NEW
|
-- VIEW: I1:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I4
|
-- WRITER: W0:I1, W2:I4
|
||||||
|
|
||||||
@ -2791,7 +2791,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I4:NEW
|
-- VIEW: I1:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I4
|
-- WRITER: W0:I1, W2:I4
|
||||||
|
|
||||||
@ -2823,7 +2823,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I4S1(4), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I4S1(4), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I4:NEW
|
-- VIEW: I1:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I4
|
-- WRITER: W0:I1, W2:I4
|
||||||
|
|
||||||
@ -2845,7 +2845,7 @@ begin
|
|||||||
wait_on_sig(dds_done);
|
wait_on_sig(dds_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I4S1(4), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I4S1(4), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I4:NEW
|
-- VIEW: I1:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I4
|
-- WRITER: W0:I1, W2:I4
|
||||||
|
|
||||||
@ -2877,7 +2877,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I3S1(3), I4S1(4), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I3S1(3), I4S1(4), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I3:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I3:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I3:NEW, I4:NEW
|
-- VIEW: I1:NEW, I3:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I3,I4
|
-- WRITER: W0:I1, W2:I3,I4
|
||||||
|
|
||||||
@ -2909,7 +2909,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I2:ALIVE, I3:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I2:ALIVE, I3:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I3,I4
|
-- WRITER: W0:I1, W2:I3,I4
|
||||||
|
|
||||||
@ -2941,7 +2941,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I2:DISPOSED, I3:ALIVE, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I2:DISPOSED, I3:ALIVE, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I3,I4
|
-- WRITER: W0:I1, W2:I3,I4
|
||||||
|
|
||||||
@ -2973,7 +2973,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I3S2-(6), I4S2-(7), I1S3(9)
|
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I3S2-(6), I4S2-(7), I1S3(9)
|
||||||
-- ISTATE: I1:ALIVE, I2:DISPOSED, I3:DISPOSED, I4:DISOSED
|
-- ISTATE: I1:ALIVE, I2:DISPOSED, I3:DISPOSED, I4:DISPOSED
|
||||||
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I3,I4
|
-- WRITER: W0:I1, W2:I3,I4
|
||||||
|
|
||||||
@ -3069,7 +3069,7 @@ begin
|
|||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I3S2-(6), I4S2-(7), I4S3(8), I1S3(9), I2S3(10), I2S4-(11)
|
-- MEM: I1S1(0), I1S2-(1), I2S1(2), I3S1(3), I4S1(4), I2S2-(5), I3S2-(6), I4S2-(7), I4S3(8), I1S3(9), I2S3(10), I2S4-(11)
|
||||||
-- ISTATE: I1:ALIVE, I2:DISPSOED, I3:DISPOSED, I4:ALIVE
|
-- ISTATE: I1:ALIVE, I2:DISPOSED, I3:DISPOSED, I4:ALIVE
|
||||||
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
-- VIEW: I1:NEW, I2:NEW, I3:NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W2:I3,I4
|
-- WRITER: W0:I1, W2:I3,I4
|
||||||
|
|
||||||
@ -3318,7 +3318,7 @@ begin
|
|||||||
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
||||||
|
|
||||||
-- TEST: READ_INSTANCE [KNOWN INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_INSTANCE [KNOWN INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
|
|
||||||
Log("R5: DDS Operation READ_INSTANCE [MAX_SAMPLES 20, NOT_READ_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE, Instance 1]", INFO);
|
Log("R5: DDS Operation READ_INSTANCE [MAX_SAMPLES 20, NOT_READ_SAMPLE_STATE, ANY_INSTANCE_STATE, ANY_VIEW_STATE, Instance 1]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
@ -3340,7 +3340,7 @@ begin
|
|||||||
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
|
||||||
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
-- WRITER: W0:I1, W1:I2, W2:I3,I4
|
||||||
|
|
||||||
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, UNCOMPATIBLE SAMPLES]
|
-- TEST: READ_NEXT_INSTANCE [WITH NEXT INSTANCE, INCOMPATIBLE SAMPLES]
|
||||||
|
|
||||||
Log("R5: DDS Operation READ_NEXT_INSTANCE [MAX_SAMPLES 20, ANY_SAMPLE_STATE, NOT_ALIVE_DISPOSED_INSTANCE_STATE, ANY_VIEW_STATE, Instance 2]", INFO);
|
Log("R5: DDS Operation READ_NEXT_INSTANCE [MAX_SAMPLES 20, ANY_SAMPLE_STATE, NOT_ALIVE_DISPOSED_INSTANCE_STATE, ANY_VIEW_STATE, Instance 2]", INFO);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
|
|||||||
@ -268,7 +268,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
|
|||||||
@ -240,7 +240,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
@ -326,7 +326,7 @@ begin
|
|||||||
AffirmIf(status_id,(status(0) and SAMPLE_REJECTED_STATUS) = SAMPLE_REJECTED_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(0) and SAMPLE_REJECTED_STATUS) = SAMPLE_REJECTED_STATUS, "Expected: 1", "Received: 0");
|
||||||
|
|
||||||
Log("R0: DDS Operation GET_SAMPLE_REJECTED_STATUS", INFO);
|
Log("R0: DDS Operation GET_SAMPLE_REJECTED_STATUS", INFO);
|
||||||
Log("R0: Expected [Count 1, Change 1, HANDLE_NIL, REJECTED_BY_PAYOAD_MEMORY_LIMIT]", DEBUG);
|
Log("R0: Expected [Count 1, Change 1, HANDLE_NIL, REJECTED_BY_PAYLOAD_MEMORY_LIMIT]", DEBUG);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
dds.opcode := GET_SAMPLE_REJECTED_STATUS;
|
dds.opcode := GET_SAMPLE_REJECTED_STATUS;
|
||||||
dds.ret_code := RETCODE_OK;
|
dds.ret_code := RETCODE_OK;
|
||||||
@ -384,7 +384,7 @@ begin
|
|||||||
AffirmIf(status_id,(status(0) and SAMPLE_REJECTED_STATUS) = SAMPLE_REJECTED_STATUS, "Expected: 1", "Received: 0");
|
AffirmIf(status_id,(status(0) and SAMPLE_REJECTED_STATUS) = SAMPLE_REJECTED_STATUS, "Expected: 1", "Received: 0");
|
||||||
|
|
||||||
Log("R0: DDS Operation GET_SAMPLE_REJECTED_STATUS", INFO);
|
Log("R0: DDS Operation GET_SAMPLE_REJECTED_STATUS", INFO);
|
||||||
Log("R0: Expected [Count 2, Change 1, Instance 2, REJECTED_BY_PAYOAD_MEMORY_LIMIT]", DEBUG);
|
Log("R0: Expected [Count 2, Change 1, Instance 2, REJECTED_BY_PAYLOAD_MEMORY_LIMIT]", DEBUG);
|
||||||
dds := DEFAULT_DDS_READER_TEST;
|
dds := DEFAULT_DDS_READER_TEST;
|
||||||
dds.opcode := GET_SAMPLE_REJECTED_STATUS;
|
dds.opcode := GET_SAMPLE_REJECTED_STATUS;
|
||||||
dds.ret_code := RETCODE_OK;
|
dds.ret_code := RETCODE_OK;
|
||||||
|
|||||||
@ -240,7 +240,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
|
|||||||
@ -240,7 +240,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
|
|||||||
@ -251,7 +251,7 @@ begin
|
|||||||
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
|
||||||
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
ts_id <= GetAlertLogID("Source Timestamp", ALERTLOG_BASE_ID);
|
||||||
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
inst_id <= GetAlertLogID("Instance Handle", ALERTLOG_BASE_ID);
|
||||||
pub_id <= GetAlertLogID("Publication Hanlde", ALERTLOG_BASE_ID);
|
pub_id <= GetAlertLogID("Publication Handle", ALERTLOG_BASE_ID);
|
||||||
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
dis_gen_cnt_id <= GetAlertLogID("Disposed Generation Count", ALERTLOG_BASE_ID);
|
||||||
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
|
||||||
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
|
||||||
|
|||||||
@ -2531,11 +2531,11 @@ begin
|
|||||||
rtps := DEFAULT_RTPS_WRITER_TEST;
|
rtps := DEFAULT_RTPS_WRITER_TEST;
|
||||||
rtps.opcode := ACK_CACHE_CHANGE;
|
rtps.opcode := ACK_CACHE_CHANGE;
|
||||||
rtps.cc.seq_nr := gen_sn(19);
|
rtps.cc.seq_nr := gen_sn(19);
|
||||||
-- WRIITER 0
|
-- WRITER 0
|
||||||
ind <= 0;
|
ind <= 0;
|
||||||
start_rtps;
|
start_rtps;
|
||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
-- WRIITER 3
|
-- WRITER 3
|
||||||
ind <= 3;
|
ind <= 3;
|
||||||
start_rtps;
|
start_rtps;
|
||||||
wait_on_sig(rtps_done);
|
wait_on_sig(rtps_done);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ context osvvm.OsvvmContext;
|
|||||||
|
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench tests the general operation of thr Memory Controler.
|
-- This testbench tests the general operation of thr Memory Controller.
|
||||||
|
|
||||||
entity L0_mem_ctrl_test1 is
|
entity L0_mem_ctrl_test1 is
|
||||||
end entity;
|
end entity;
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.rtps_test_package.all;
|
|||||||
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
|
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
|
||||||
-- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
|
-- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
|
||||||
-- This testbench covers following:
|
-- This testbench covers following:
|
||||||
-- * Mathing compatible Participants
|
-- * Matching compatible Participants
|
||||||
-- * Ignoring incompatible Participants
|
-- * Ignoring incompatible Participants
|
||||||
-- * Unmatching previously matched Participants (Due to incompatibility)
|
-- * Unmatching previously matched Participants (Due to incompatibility)
|
||||||
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)
|
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.rtps_test_package.all;
|
|||||||
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
|
-- This testbench tests the matching of remote participants. Due to the fact, that participant matching does not have an immediate effect visible to the outside,
|
||||||
-- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
|
-- this testbench is using external names to access the memory of the rtps_discovery_module directly and check the contents at the supposed participant locations.
|
||||||
-- This testbench covers following:
|
-- This testbench covers following:
|
||||||
-- * Mathing compatible Participants
|
-- * Matching compatible Participants
|
||||||
-- * Ignoring incompatible Participants
|
-- * Ignoring incompatible Participants
|
||||||
-- * Unmatching previously matched Participants (Due to incompatibility)
|
-- * Unmatching previously matched Participants (Due to incompatibility)
|
||||||
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)
|
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)
|
||||||
|
|||||||
@ -313,7 +313,7 @@ begin
|
|||||||
p1.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1';
|
p1.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '1';
|
||||||
p1.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
|
p1.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER) := '1';
|
||||||
|
|
||||||
-- Participant 2 (Used for dyncamic Endpoints)
|
-- Participant 2 (Used for dynamic Endpoints)
|
||||||
p2.guidPrefix := gen_rand_guid_prefix;
|
p2.guidPrefix := gen_rand_guid_prefix;
|
||||||
p2.nr := 2;
|
p2.nr := 2;
|
||||||
p2.defaultUnicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
p2.defaultUnicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.rtps_test_package.all;
|
|||||||
-- This testbench tests the input handling of parameter lists. We issue one parameter list with invalid parameter length (less than expected)
|
-- This testbench tests the input handling of parameter lists. We issue one parameter list with invalid parameter length (less than expected)
|
||||||
-- and one with valid larger parameter length (extra Bytes after expected parameter end) for each of the parameters that are handled by the Discovery Module by checking if the Participant/Endpoint matched.
|
-- and one with valid larger parameter length (extra Bytes after expected parameter end) for each of the parameters that are handled by the Discovery Module by checking if the Participant/Endpoint matched.
|
||||||
-- (We also issue a parameter list that is missing its sentinel)
|
-- (We also issue a parameter list that is missing its sentinel)
|
||||||
-- Particpant matches are checked by memory content, and Endpoint matches by the generated match frame.
|
-- Participant matches are checked by memory content, and Endpoint matches by the generated match frame.
|
||||||
-- The PIDs handled are:
|
-- The PIDs handled are:
|
||||||
-- * PID_PARTICIPANT_GUID
|
-- * PID_PARTICIPANT_GUID
|
||||||
-- * PID_DOMAIN_ID
|
-- * PID_DOMAIN_ID
|
||||||
|
|||||||
@ -16,7 +16,7 @@ use work.rtps_test_package.all;
|
|||||||
-- * The Message has less than the required number of octets to contain a full Header
|
-- * The Message has less than the required number of octets to contain a full Header
|
||||||
-- * Its protocol value does not match the value of PROTOCOL_RTPS
|
-- * Its protocol value does not match the value of PROTOCOL_RTPS
|
||||||
-- * The major protocol version is larger than the major protocol version supported by the implementation
|
-- * The major protocol version is larger than the major protocol version supported by the implementation
|
||||||
-- DATA SUBEMSSAGE
|
-- DATA SUBMESSAGE
|
||||||
-- * Empty DATA Submessage (No payload/inline-QoS)
|
-- * Empty DATA Submessage (No payload/inline-QoS)
|
||||||
-- * META/USER Traffic
|
-- * META/USER Traffic
|
||||||
-- * Little/Big Endian
|
-- * Little/Big Endian
|
||||||
@ -50,11 +50,11 @@ use work.rtps_test_package.all;
|
|||||||
-- * lastSN.value < firstSN.value - 1
|
-- * lastSN.value < firstSN.value - 1
|
||||||
-- INFO_SOURCE SUBMESSAGE
|
-- INFO_SOURCE SUBMESSAGE
|
||||||
-- * Little/Big Endian
|
-- * Little/Big Endian
|
||||||
-- * Protocol Version missmatch
|
-- * Protocol Version mismatch
|
||||||
-- * SubmessageLength invalid
|
-- * SubmessageLength invalid
|
||||||
-- INFO_DESTINATION SUBMESSAGE
|
-- INFO_DESTINATION SUBMESSAGE
|
||||||
-- * Little/Big Endian
|
-- * Little/Big Endian
|
||||||
-- * Destination GUID Prefix missmatch
|
-- * Destination GUID Prefix mismatch
|
||||||
-- * SubmessageLength invalid
|
-- * SubmessageLength invalid
|
||||||
-- INFO_REPLY SUBMESSAGE
|
-- INFO_REPLY SUBMESSAGE
|
||||||
-- * Little/Big Endian
|
-- * Little/Big Endian
|
||||||
@ -73,11 +73,11 @@ use work.rtps_test_package.all;
|
|||||||
-- * SubmessageLength invalid
|
-- * SubmessageLength invalid
|
||||||
-- PAD SUBMESSAGE
|
-- PAD SUBMESSAGE
|
||||||
-- * 28 Padding Bytes
|
-- * 28 Padding Bytes
|
||||||
-- UKNOWN SUBMESSAGE
|
-- UNKNOWN SUBMESSAGE
|
||||||
-- * DATA_FRAG Submessage
|
-- * DATA_FRAG Submessage
|
||||||
-- * HEARTBEAT_FRAG Submessage
|
-- * HEARTBEAT_FRAG Submessage
|
||||||
-- * NACK_FRAG Submessage
|
-- * NACK_FRAG Submessage
|
||||||
-- * UKNOWN SID
|
-- * UNKNOWN SID
|
||||||
|
|
||||||
entity L0_rtps_handler_test1 is
|
entity L0_rtps_handler_test1 is
|
||||||
end entity;
|
end entity;
|
||||||
@ -207,7 +207,7 @@ begin
|
|||||||
stimulus := EMPTY_TEST_PACKET;
|
stimulus := EMPTY_TEST_PACKET;
|
||||||
reference := EMPTY_TEST_PACKET;
|
reference := EMPTY_TEST_PACKET;
|
||||||
|
|
||||||
Log("Sending invalid RTPS Header [Protocol Missmatch]", INFO);
|
Log("Sending invalid RTPS Header [Protocol Mismatch]", INFO);
|
||||||
-- UDP Header
|
-- UDP Header
|
||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header [Incompatible Protocol]
|
-- RTPS Header [Incompatible Protocol]
|
||||||
@ -225,7 +225,7 @@ begin
|
|||||||
stimulus := EMPTY_TEST_PACKET;
|
stimulus := EMPTY_TEST_PACKET;
|
||||||
reference := EMPTY_TEST_PACKET;
|
reference := EMPTY_TEST_PACKET;
|
||||||
|
|
||||||
Log("Sending invalid RTPS Header [Protocol Major Version Missmatch]", INFO);
|
Log("Sending invalid RTPS Header [Protocol Major Version Mismatch]", INFO);
|
||||||
-- UDP Header
|
-- UDP Header
|
||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header [Incompatible Version]
|
-- RTPS Header [Incompatible Version]
|
||||||
@ -243,7 +243,7 @@ begin
|
|||||||
stimulus := EMPTY_TEST_PACKET;
|
stimulus := EMPTY_TEST_PACKET;
|
||||||
reference := EMPTY_TEST_PACKET;
|
reference := EMPTY_TEST_PACKET;
|
||||||
|
|
||||||
Log("Sending valid RTPS Header [Protocol Minor Version Missmatch]", INFO);
|
Log("Sending valid RTPS Header [Protocol Minor Version Mismatch]", INFO);
|
||||||
-- UDP Header
|
-- UDP Header
|
||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header
|
-- RTPS Header
|
||||||
@ -382,7 +382,7 @@ begin
|
|||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header
|
-- RTPS Header
|
||||||
gen_rtps_header(rtps_header, stimulus);
|
gen_rtps_header(rtps_header, stimulus);
|
||||||
-- Valid DATA [SubLength > PackeSize] (Dropped)
|
-- Valid DATA [SubLength > PacketSize] (Dropped)
|
||||||
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
||||||
rtps_sub.submessageID := SID_DATA;
|
rtps_sub.submessageID := SID_DATA;
|
||||||
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
|
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
|
||||||
@ -930,7 +930,7 @@ begin
|
|||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header
|
-- RTPS Header
|
||||||
gen_rtps_header(rtps_header, stimulus);
|
gen_rtps_header(rtps_header, stimulus);
|
||||||
-- Invalid HEARTBEAT [SubLength > PackeSize] (Dropped)
|
-- Invalid HEARTBEAT [SubLength > PacketSize] (Dropped)
|
||||||
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
||||||
rtps_sub.submessageID := SID_HEARTBEAT;
|
rtps_sub.submessageID := SID_HEARTBEAT;
|
||||||
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
|
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
|
||||||
@ -1082,7 +1082,7 @@ begin
|
|||||||
gen_rtps_submessage(rtps_data, stimulus);
|
gen_rtps_submessage(rtps_data, stimulus);
|
||||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_sub.guidPrefix, reference);
|
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_sub.guidPrefix, reference);
|
||||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||||
-- Valid INFO_SOURCE [Protocol Major Version Missmatch] (Dropped)
|
-- Valid INFO_SOURCE [Protocol Major Version Mismatch] (Dropped)
|
||||||
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
||||||
rtps_sub.submessageID := SID_INFO_SRC;
|
rtps_sub.submessageID := SID_INFO_SRC;
|
||||||
rtps_sub.version := PROTOCOLVERSION_1_0;
|
rtps_sub.version := PROTOCOLVERSION_1_0;
|
||||||
@ -1382,7 +1382,7 @@ begin
|
|||||||
stimulus := EMPTY_TEST_PACKET;
|
stimulus := EMPTY_TEST_PACKET;
|
||||||
reference := EMPTY_TEST_PACKET;
|
reference := EMPTY_TEST_PACKET;
|
||||||
|
|
||||||
Log("Sending invalid INFO_TMESTAMP [Submessage Length too small]", INFO);
|
Log("Sending invalid INFO_TIMESTAMP [Submessage Length too small]", INFO);
|
||||||
-- UDP Header
|
-- UDP Header
|
||||||
gen_output_header(UDP_META, stimulus);
|
gen_output_header(UDP_META, stimulus);
|
||||||
-- RTPS Header
|
-- RTPS Header
|
||||||
@ -1469,7 +1469,7 @@ begin
|
|||||||
gen_rtps_submessage(rtps_data, stimulus);
|
gen_rtps_submessage(rtps_data, stimulus);
|
||||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||||
-- UKNOWN (Dropped)
|
-- UNKNOWN (Dropped)
|
||||||
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
|
||||||
rtps_sub.submessageID := (others => '1');
|
rtps_sub.submessageID := (others => '1');
|
||||||
rtps_sub.submessageLength := int(28,16);
|
rtps_sub.submessageLength := int(28,16);
|
||||||
|
|||||||
@ -127,7 +127,7 @@ begin
|
|||||||
wait until rising_edge(clk);
|
wait until rising_edge(clk);
|
||||||
reset <= '0';
|
reset <= '0';
|
||||||
|
|
||||||
for i in 0 to 2 loop -- USER/META/UKNOWN Traffic
|
for i in 0 to 2 loop -- USER/META/UNKNOWN Traffic
|
||||||
case (i) is
|
case (i) is
|
||||||
-- META TRAFFIC ADDRESSES
|
-- META TRAFFIC ADDRESSES
|
||||||
when 0 =>
|
when 0 =>
|
||||||
@ -139,7 +139,7 @@ begin
|
|||||||
tmp_loc_list := DEST_LOC.user;
|
tmp_loc_list := DEST_LOC.user;
|
||||||
ref1 := (NUM_ENDPOINTS => '0', others => '1');
|
ref1 := (NUM_ENDPOINTS => '0', others => '1');
|
||||||
is_meta := FALSE;
|
is_meta := FALSE;
|
||||||
-- UKNOWN ADDRESSES
|
-- UNKNOWN ADDRESSES
|
||||||
when others =>
|
when others =>
|
||||||
ref1 := (others => '0');
|
ref1 := (others => '0');
|
||||||
tmp_loc_list := ( numLocators => int(2,CDR_LONG_WIDTH),
|
tmp_loc_list := ( numLocators => int(2,CDR_LONG_WIDTH),
|
||||||
@ -164,13 +164,13 @@ begin
|
|||||||
|
|
||||||
for k in 0 to NUM_ENDPOINTS+2 loop -- Destination Entity ID
|
for k in 0 to NUM_ENDPOINTS+2 loop -- Destination Entity ID
|
||||||
case (k) is
|
case (k) is
|
||||||
-- UKNOWN
|
-- UNKNOWN
|
||||||
when NUM_ENDPOINTS =>
|
when NUM_ENDPOINTS =>
|
||||||
ref2 := (others => '0');
|
ref2 := (others => '0');
|
||||||
tmp_id := RV.RandSlv(ENTITYID_WIDTH);
|
tmp_id := RV.RandSlv(ENTITYID_WIDTH);
|
||||||
tmp_id(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY;
|
tmp_id(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY;
|
||||||
tmp_id(ENTITY_KIND_L_RANGE) := UNKNOWN_KIND;
|
tmp_id(ENTITY_KIND_L_RANGE) := UNKNOWN_KIND;
|
||||||
-- ENTITYID_UKNOWN
|
-- ENTITYID_UNKNOWN
|
||||||
when NUM_ENDPOINTS+1 =>
|
when NUM_ENDPOINTS+1 =>
|
||||||
tmp_id := ENTITYID_UNKNOWN;
|
tmp_id := ENTITYID_UNKNOWN;
|
||||||
ref2 := (others => '1');
|
ref2 := (others => '1');
|
||||||
|
|||||||
@ -199,7 +199,7 @@ begin
|
|||||||
-- Push T3 Packet 1
|
-- Push T3 Packet 1
|
||||||
push_reference(1, stimulus(t3));
|
push_reference(1, stimulus(t3));
|
||||||
start_test;
|
start_test;
|
||||||
-- Wait until begining of t3 sending
|
-- Wait until beginning of t3 sending
|
||||||
tmp := (others => '1');
|
tmp := (others => '1');
|
||||||
tmp(t3) := '0';
|
tmp(t3) := '0';
|
||||||
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
|
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.rtps_test_package.all;
|
|||||||
-- This testbench tests the metatraffic operation behaviour of the RTPS Reader. (Remote Endpoint matching and memory behaviour)
|
-- This testbench tests the metatraffic operation behaviour of the RTPS Reader. (Remote Endpoint matching and memory behaviour)
|
||||||
-- This testbench is using external names to access the memory of the rtps_reader directly and check the contents at the supposed locations.
|
-- This testbench is using external names to access the memory of the rtps_reader directly and check the contents at the supposed locations.
|
||||||
-- This testbench covers following:
|
-- This testbench covers following:
|
||||||
-- * Mathing Endpoint
|
-- * Matching Endpoint
|
||||||
-- * Memory Full Behaviour
|
-- * Memory Full Behaviour
|
||||||
-- * Unmatching Endpoint
|
-- * Unmatching Endpoint
|
||||||
-- * Unmatching Participant
|
-- * Unmatching Participant
|
||||||
@ -369,7 +369,7 @@ begin
|
|||||||
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
|
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
|
||||||
-- MEMORY 1 STATE 17(P1E3)/0,34
|
-- MEMORY 1 STATE 17(P1E3)/0,34
|
||||||
|
|
||||||
Log("Unknown Metatraffic Operation followed by insertion of Enpoint 1 Participant 0 {READER 0, READER 1}", INFO);
|
Log("Unknown Metatraffic Operation followed by insertion of Endpoint 1 Participant 0 {READER 0, READER 1}", INFO);
|
||||||
for i in 0 to 9 loop
|
for i in 0 to 9 loop
|
||||||
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
|
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
|
||||||
end loop;
|
end loop;
|
||||||
@ -542,7 +542,7 @@ begin
|
|||||||
case (stage_hc) is
|
case (stage_hc) is
|
||||||
when IDLE =>
|
when IDLE =>
|
||||||
if (start_hc /= (start_hc'range => '0')) then
|
if (start_hc /= (start_hc'range => '0')) then
|
||||||
-- HACK: We trigger all acks because we cannot use 'ind' variable in the same clock cycle
|
-- HACK: We trigger all ACKs because we cannot use 'ind' variable in the same clock cycle
|
||||||
-- Since the uut only interfaces with 1 HC at a time (one-hot encoded start_hc) this
|
-- Since the uut only interfaces with 1 HC at a time (one-hot encoded start_hc) this
|
||||||
-- is still valid.
|
-- is still valid.
|
||||||
ack_hc <= (others => '1');
|
ack_hc <= (others => '1');
|
||||||
|
|||||||
@ -1736,7 +1736,7 @@ begin
|
|||||||
case (stage_hc) is
|
case (stage_hc) is
|
||||||
when IDLE =>
|
when IDLE =>
|
||||||
if (start_hc /= (start_hc'range => '0')) then
|
if (start_hc /= (start_hc'range => '0')) then
|
||||||
-- HACK: We trigger all acks because we cannot use 'ind' variable in the same clock cycle
|
-- HACK: We trigger all ACKs because we cannot use 'ind' variable in the same clock cycle
|
||||||
-- Since the uut only interfaces with 1 HC at a time (one-hot encoded start_hc) this
|
-- Since the uut only interfaces with 1 HC at a time (one-hot encoded start_hc) this
|
||||||
-- is still valid.
|
-- is still valid.
|
||||||
ack_hc <= (others => '1');
|
ack_hc <= (others => '1');
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.rtps_test_package.all;
|
|||||||
-- This testbench tests the metatraffic operation behaviour of the RTPS Writer. (Remote Endpoint matching and Memory behaviour)
|
-- This testbench tests the metatraffic operation behaviour of the RTPS Writer. (Remote Endpoint matching and Memory behaviour)
|
||||||
-- This testbench is using external names to access the memory of the rtps_reader directly and check the contents at the supposed locations.
|
-- This testbench is using external names to access the memory of the rtps_reader directly and check the contents at the supposed locations.
|
||||||
-- This testbench covers following:
|
-- This testbench covers following:
|
||||||
-- * Mathing Endpoint
|
-- * Matching Endpoint
|
||||||
-- * Memory Full Behaviour
|
-- * Memory Full Behaviour
|
||||||
-- * Unmatching Endpoint
|
-- * Unmatching Endpoint
|
||||||
-- * Unmatching Participant
|
-- * Unmatching Participant
|
||||||
@ -356,7 +356,7 @@ begin
|
|||||||
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
|
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
|
||||||
-- MEMORY 1 STATE 17(P1E3)/0,34
|
-- MEMORY 1 STATE 17(P1E3)/0,34
|
||||||
|
|
||||||
Log("Unknown Metatraffic Operation followed by insertion of Enpoint 1 Participant 0 {WRITER 0, WRITER 1}", INFO);
|
Log("Unknown Metatraffic Operation followed by insertion of Endpoint 1 Participant 0 {WRITER 0, WRITER 1}", INFO);
|
||||||
for i in 0 to 9 loop
|
for i in 0 to 9 loop
|
||||||
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
|
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
|
||||||
end loop;
|
end loop;
|
||||||
|
|||||||
@ -338,7 +338,7 @@ begin
|
|||||||
wait_on_idle;
|
wait_on_idle;
|
||||||
|
|
||||||
Log("Current Time: 1s", INFO);
|
Log("Current Time: 1s", INFO);
|
||||||
Log("WRITER 0: Removal of Enpoint 0", INFO);
|
Log("WRITER 0: Removal of Endpoint 0", INFO);
|
||||||
test_time <= gen_duration(1 sec);
|
test_time <= gen_duration(1 sec);
|
||||||
wait until rising_edge(clk);
|
wait until rising_edge(clk);
|
||||||
wait until rising_edge(clk); -- Allow idle_sig to go low
|
wait until rising_edge(clk); -- Allow idle_sig to go low
|
||||||
@ -369,7 +369,7 @@ begin
|
|||||||
-- MEMORY 1 STATE 34(E2),17(E1),0(E0)/-
|
-- MEMORY 1 STATE 34(E2),17(E1),0(E0)/-
|
||||||
|
|
||||||
Log("Current Time: 1.5s", INFO);
|
Log("Current Time: 1.5s", INFO);
|
||||||
Log("WRITER 0: Removal of Enpoint 2", INFO);
|
Log("WRITER 0: Removal of Endpoint 2", INFO);
|
||||||
test_time <= gen_duration(1.5 sec);
|
test_time <= gen_duration(1.5 sec);
|
||||||
wait until rising_edge(clk);
|
wait until rising_edge(clk);
|
||||||
wait until rising_edge(clk); -- Allow idle_sig to go low
|
wait until rising_edge(clk); -- Allow idle_sig to go low
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.Type2_package.all;
|
|||||||
|
|
||||||
-- This testbench tests the KEY_HOLDER commands of TYPE1.
|
-- This testbench tests the KEY_HOLDER commands of TYPE1.
|
||||||
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
||||||
-- Then the reference serialized key is pushed (resetting the internaly generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previosuly compared).
|
-- Then the reference serialized key is pushed (resetting the internally generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previously compared).
|
||||||
-- The payload is sent in Big Endian.
|
-- The payload is sent in Big Endian.
|
||||||
|
|
||||||
entity L1_Type1_key_holder_test1 is
|
entity L1_Type1_key_holder_test1 is
|
||||||
@ -133,7 +133,7 @@ begin
|
|||||||
|
|
||||||
-- Serialized Key Payload Header
|
-- Serialized Key Payload Header
|
||||||
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
||||||
-- Reset Alignement
|
-- Reset Alignment
|
||||||
align_offset := (others => '0');
|
align_offset := (others => '0');
|
||||||
|
|
||||||
Log("Setting Data in Writer Side", INFO);
|
Log("Setting Data in Writer Side", INFO);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.Type2_package.all;
|
|||||||
|
|
||||||
-- This testbench tests the KEY_HOLDER commands of TYPE1.
|
-- This testbench tests the KEY_HOLDER commands of TYPE1.
|
||||||
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
||||||
-- Then the reference serialized key is pushed (resetting the internaly generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previosuly compared).
|
-- Then the reference serialized key is pushed (resetting the internally generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previously compared).
|
||||||
-- The payload is sent in Little Endian.
|
-- The payload is sent in Little Endian.
|
||||||
|
|
||||||
entity L1_Type1_key_holder_test2 is
|
entity L1_Type1_key_holder_test2 is
|
||||||
@ -139,7 +139,7 @@ begin
|
|||||||
|
|
||||||
-- Serialized Key Payload Header
|
-- Serialized Key Payload Header
|
||||||
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
||||||
-- Reset Alignement
|
-- Reset Alignment
|
||||||
align_offset := (others => '0');
|
align_offset := (others => '0');
|
||||||
|
|
||||||
Log("Setting Data in Writer Side", INFO);
|
Log("Setting Data in Writer Side", INFO);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.Type2_package.all;
|
|||||||
|
|
||||||
-- This testbench tests the KEY_HOLDER commands of TYPE2.
|
-- This testbench tests the KEY_HOLDER commands of TYPE2.
|
||||||
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
||||||
-- Then the reference serialized key is pushed (resetting the internaly generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previosuly compared).
|
-- Then the reference serialized key is pushed (resetting the internally generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previously compared).
|
||||||
-- The payload is sent in Big Endian.
|
-- The payload is sent in Big Endian.
|
||||||
|
|
||||||
entity L1_Type2_key_holder_test1 is
|
entity L1_Type2_key_holder_test1 is
|
||||||
@ -205,7 +205,7 @@ begin
|
|||||||
|
|
||||||
-- Serialized Key Payload Header
|
-- Serialized Key Payload Header
|
||||||
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
||||||
-- Reset Alignement
|
-- Reset Alignment
|
||||||
align_offset := (others => '0');
|
align_offset := (others => '0');
|
||||||
|
|
||||||
Log("Setting Data in Writer Side", INFO);
|
Log("Setting Data in Writer Side", INFO);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.Type2_package.all;
|
|||||||
|
|
||||||
-- This testbench tests the KEY_HOLDER commands of TYPE2.
|
-- This testbench tests the KEY_HOLDER commands of TYPE2.
|
||||||
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
-- It uses the writer_interface to send a valid payload, then reads the serialized key and the key hash. The returned serialized key is compared to a "handcrafted" reference, and the key hash is latched for later comparison.
|
||||||
-- Then the reference serialized key is pushed (resetting the internaly generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previosuly compared).
|
-- Then the reference serialized key is pushed (resetting the internally generated key hash), and the serialized key and key hash are re-read and compared (The key hash is compared to the previously compared).
|
||||||
-- The payload is sent in Little Endian.
|
-- The payload is sent in Little Endian.
|
||||||
|
|
||||||
entity L1_Type2_key_holder_test2 is
|
entity L1_Type2_key_holder_test2 is
|
||||||
@ -211,7 +211,7 @@ begin
|
|||||||
|
|
||||||
-- Serialized Key Payload Header
|
-- Serialized Key Payload Header
|
||||||
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
|
||||||
-- Reset Alignement
|
-- Reset Alignment
|
||||||
align_offset := (others => '0');
|
align_offset := (others => '0');
|
||||||
|
|
||||||
Log("Setting Data in Writer Side", INFO);
|
Log("Setting Data in Writer Side", INFO);
|
||||||
|
|||||||
@ -16,7 +16,7 @@ use work.rtps_test_package.all;
|
|||||||
-- * 0s
|
-- * 0s
|
||||||
-- - Local participant Announcement
|
-- - Local participant Announcement
|
||||||
-- - Match a remote participant
|
-- - Match a remote participant
|
||||||
-- - Send HEARTBEAT 0 (Publisher, Empty, Final Flag) [Test Final Flag pasing]
|
-- - Send HEARTBEAT 0 (Publisher, Empty, Final Flag) [Test Final Flag passing]
|
||||||
-- * 0.105s
|
-- * 0.105s
|
||||||
-- - No HEARTBEAT 0 Response
|
-- - No HEARTBEAT 0 Response
|
||||||
-- - Send HEARTBEAT 1 (Publisher, Empty) [Test empty HEARTBEAT Response]
|
-- - Send HEARTBEAT 1 (Publisher, Empty) [Test empty HEARTBEAT Response]
|
||||||
@ -30,16 +30,16 @@ use work.rtps_test_package.all;
|
|||||||
-- - Send HEARTBEAT 3 (Publisher, First SN 1, Last SN 5) [Test HEARTBEAT Suppression Delay]
|
-- - Send HEARTBEAT 3 (Publisher, First SN 1, Last SN 5) [Test HEARTBEAT Suppression Delay]
|
||||||
-- * 0.415s
|
-- * 0.415s
|
||||||
-- - No HEARTBEAT 3 Response
|
-- - No HEARTBEAT 3 Response
|
||||||
-- - Send HEARTBEAT 4 (Publisher, First SN 1, Last SN 5) [Test normal HARTBEAT Response]
|
-- - Send HEARTBEAT 4 (Publisher, First SN 1, Last SN 5) [Test normal HEARTBEAT Response]
|
||||||
-- - Send ACKNACK 2 (Publisher, Expecting 1) [Test ACKNACK Suppression Delay]
|
-- - Send ACKNACK 2 (Publisher, Expecting 1) [Test ACKNACK Suppression Delay]
|
||||||
-- * 0.450s
|
-- * 0.450s
|
||||||
-- - Send HEARTBEAT 5 (Subscriber, First Sn 2, Last SN 5) [Test HEARTBEAT Response Delay, Test HEARTBEAT Resposne Update]
|
-- - Send HEARTBEAT 5 (Subscriber, First Sn 2, Last SN 5) [Test HEARTBEAT Response Delay, Test HEARTBEAT Response Update]
|
||||||
-- * 0.520s
|
-- * 0.520s
|
||||||
-- - HEARTBEAT 4/5 Response
|
-- - HEARTBEAT 4/5 Response
|
||||||
-- - Send ACKNACK 3 (Publisher, Expecting SN 1) [Test normal ACKNACK Response]
|
-- - Send ACKNACK 3 (Publisher, Expecting SN 1) [Test normal ACKNACK Response]
|
||||||
-- * 0.620s
|
-- * 0.620s
|
||||||
-- - No ACKNACK 2 Response
|
-- - No ACKNACK 2 Response
|
||||||
-- - Send ACKNACK 4 (Subscriber, Expecting SN 1) [Test ACKNACK Resposne Delay, Test ACKNACK Response Update]
|
-- - Send ACKNACK 4 (Subscriber, Expecting SN 1) [Test ACKNACK Response Delay, Test ACKNACK Response Update]
|
||||||
-- * 0.725s
|
-- * 0.725s
|
||||||
-- - ACKNACK 3/4 Response
|
-- - ACKNACK 3/4 Response
|
||||||
-- * 1.000s
|
-- * 1.000s
|
||||||
@ -49,14 +49,14 @@ use work.rtps_test_package.all;
|
|||||||
-- * 1.205s
|
-- * 1.205s
|
||||||
-- - ACKNACK 5 Response
|
-- - ACKNACK 5 Response
|
||||||
-- * 1.500s
|
-- * 1.500s
|
||||||
-- - Send ACKNACK 6 (Publihser, Expecting SN 18) [Test ACKNACK SN Response]
|
-- - Send ACKNACK 6 (Publisher, Expecting SN 18) [Test ACKNACK SN Response]
|
||||||
-- * 1.705s
|
-- * 1.705s
|
||||||
-- - No ACKNACK 6 Response
|
-- - No ACKNACK 6 Response
|
||||||
-- * 2.000s
|
-- * 2.000s
|
||||||
-- - Local HEARTBEAT generation
|
-- - Local HEARTBEAT generation
|
||||||
-- - Liveliness Assertion (Auto only)
|
-- - Liveliness Assertion (Auto only)
|
||||||
-- - Send ACKNACK 7 (Message, Expecting SN 5) [Test GAP sending on ACKNACK Response]
|
-- - Send ACKNACK 7 (Message, Expecting SN 5) [Test GAP sending on ACKNACK Response]
|
||||||
-- - Send ACKNACK 8 (Publihser, Expecing SN 2) [Test full ACKNACK Response]
|
-- - Send ACKNACK 8 (Publisher, Expecting SN 2) [Test full ACKNACK Response]
|
||||||
-- - Send ACKNACK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response]
|
-- - Send ACKNACK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response]
|
||||||
-- * 2.205s
|
-- * 2.205s
|
||||||
-- - ACKNACK 7/8/9 Response
|
-- - ACKNACK 7/8/9 Response
|
||||||
|
|||||||
@ -19,7 +19,7 @@ use work.Type1_package.all;
|
|||||||
-- Both Libraries have compatible settings for matching.
|
-- Both Libraries have compatible settings for matching.
|
||||||
-- The testbench first registers 2 instances, and writes 2 samples for each instance (once using the instance handle, and onc using HANDLE_NIL). This initial 4 writes are done before
|
-- The testbench first registers 2 instances, and writes 2 samples for each instance (once using the instance handle, and onc using HANDLE_NIL). This initial 4 writes are done before
|
||||||
-- the two systems have discovered each other (due to the initial Participant Announcement happening at 50k ns), and are thus considered historical data (Data that will be sent to the
|
-- the two systems have discovered each other (due to the initial Participant Announcement happening at 50k ns), and are thus considered historical data (Data that will be sent to the
|
||||||
-- Reader immediately on matching due to trasient local durability setting).
|
-- Reader immediately on matching due to transient local durability setting).
|
||||||
-- After data has arrived on the reader side, the data is read out and compared to the original.
|
-- After data has arrived on the reader side, the data is read out and compared to the original.
|
||||||
-- Afterwards another sample on an unknown instance is written, and the instance handle is fetched via a register lookup operation. After the sample has arrived at the reader side the data is again
|
-- Afterwards another sample on an unknown instance is written, and the instance handle is fetched via a register lookup operation. After the sample has arrived at the reader side the data is again
|
||||||
-- compared to the original.
|
-- compared to the original.
|
||||||
|
|||||||
@ -14,7 +14,7 @@ use work.rtps_config_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.Type1_package.all;
|
use work.Type1_package.all;
|
||||||
|
|
||||||
-- This testbench tests the general system operation by interconnecting two complete systems with a reader and a writer respectively, and perforing a loopback operation.
|
-- This testbench tests the general system operation by interconnecting two complete systems with a reader and a writer respectively, and performing a loopback operation.
|
||||||
-- Libraries are used to allow to use systems with different configurations.
|
-- Libraries are used to allow to use systems with different configurations.
|
||||||
-- The testbench is interfacing with the reader and writer of Testbench_Lib5, and the loopback entity (test_loopback) is interfacing with the reader and writer of Testbench_Lib4.
|
-- The testbench is interfacing with the reader and writer of Testbench_Lib5, and the loopback entity (test_loopback) is interfacing with the reader and writer of Testbench_Lib4.
|
||||||
-- The testbench->test_loopback communication uses a Type1 Instance with id=1, and the test_loopback->testbench communication uses a Type1 Instance with id=2.
|
-- The testbench->test_loopback communication uses a Type1 Instance with id=1, and the test_loopback->testbench communication uses a Type1 Instance with id=2.
|
||||||
@ -236,7 +236,7 @@ begin
|
|||||||
wait until rising_edge(clk);
|
wait until rising_edge(clk);
|
||||||
reset <= '0';
|
reset <= '0';
|
||||||
|
|
||||||
Log("Register Target Instance (Get Instance Handle of Responce)", INFO);
|
Log("Register Target Instance (Get Instance Handle of Response)", INFO);
|
||||||
start_w <= '1';
|
start_w <= '1';
|
||||||
opcode_w <= REGISTER_INSTANCE;
|
opcode_w <= REGISTER_INSTANCE;
|
||||||
id_w <= int(2,CDR_LONG_WIDTH);
|
id_w <= int(2,CDR_LONG_WIDTH);
|
||||||
|
|||||||
@ -787,7 +787,7 @@ begin
|
|||||||
TestSequence_TestArray_cnt_next <= 0;
|
TestSequence_TestArray_cnt_next <= 0;
|
||||||
cnt_next <= 0;
|
cnt_next <= 0;
|
||||||
end if;
|
end if;
|
||||||
-- "Comsume" input word
|
-- "Consume" input word
|
||||||
TestSequence_TestLongDouble_mem_ready_out <= '1';
|
TestSequence_TestLongDouble_mem_ready_out <= '1';
|
||||||
end if;
|
end if;
|
||||||
-- Reset Alignment
|
-- Reset Alignment
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use UNIMACRO.vcomponents.all;
|
|||||||
|
|
||||||
-- Add/Sub
|
-- Add/Sub
|
||||||
-- This entity adds or subtracts inputs 'A' and 'B', depending on 'mode' (1 = add, 0 = sub).
|
-- This entity adds or subtracts inputs 'A' and 'B', depending on 'mode' (1 = add, 0 = sub).
|
||||||
-- If 'cap' is high, on Overfolw/Underflow conditions the result is capped at max/min value.
|
-- If 'cap' is high, on Overflow/Underflow conditions the result is capped at max/min value.
|
||||||
|
|
||||||
entity addsub is
|
entity addsub is
|
||||||
generic (
|
generic (
|
||||||
|
|||||||
@ -843,7 +843,7 @@ architecture arch of dds_reader is
|
|||||||
signal cur_generation_rank, cur_generation_rank_next : unsigned(GENERATION_RANK_WIDTH-1 downto 0);
|
signal cur_generation_rank, cur_generation_rank_next : unsigned(GENERATION_RANK_WIDTH-1 downto 0);
|
||||||
-- Denotes if a TAKE operation is in progress
|
-- Denotes if a TAKE operation is in progress
|
||||||
signal is_take, is_take_next : std_logic;
|
signal is_take, is_take_next : std_logic;
|
||||||
-- NOTE: We use this signal to prevent the costly Instance Marking in the case that we only need to ouptput samples of one Instance.
|
-- NOTE: We use this signal to prevent the costly Instance Marking in the case that we only need to output samples of one Instance.
|
||||||
-- Denotes if the READ/TAKE operation applies to a single Instance
|
-- Denotes if the READ/TAKE operation applies to a single Instance
|
||||||
signal single_instance, single_instance_next : std_logic;
|
signal single_instance, single_instance_next : std_logic;
|
||||||
-- Denotes if the READ/TAKE operation does not apply to a specific Instance
|
-- Denotes if the READ/TAKE operation does not apply to a specific Instance
|
||||||
@ -2301,7 +2301,7 @@ begin
|
|||||||
prev_sample_next <= resize(unsigned(sample_read_data),SAMPLE_MEMORY_ADDR_WIDTH);
|
prev_sample_next <= resize(unsigned(sample_read_data),SAMPLE_MEMORY_ADDR_WIDTH);
|
||||||
cnt_next <= cnt + 1;
|
cnt_next <= cnt + 1;
|
||||||
end if;
|
end if;
|
||||||
-- READ Instance Poiner
|
-- READ Instance Pointer
|
||||||
when 7 =>
|
when 7 =>
|
||||||
sample_ready_out1 <= '1';
|
sample_ready_out1 <= '1';
|
||||||
|
|
||||||
@ -2775,7 +2775,7 @@ begin
|
|||||||
when GENERATE_SAMPLE =>
|
when GENERATE_SAMPLE =>
|
||||||
-- Precondition: cur_sample set, cur_inst set, inst_data set (IMF_DISPOSED_CNT_FLAG, IMF_NO_WRITERS_CNT_FLAG)
|
-- Precondition: cur_sample set, cur_inst set, inst_data set (IMF_DISPOSED_CNT_FLAG, IMF_NO_WRITERS_CNT_FLAG)
|
||||||
|
|
||||||
-- Wait for Instane Data
|
-- Wait for Instance Data
|
||||||
if (inst_op_done = '1') then
|
if (inst_op_done = '1') then
|
||||||
assert (inst_data.addr /= INSTANCE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
assert (inst_data.addr /= INSTANCE_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||||
assert (stable(clk, inst_data.i = ind and check_mask(inst_data.field_flags, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG))) severity FAILURE;
|
assert (stable(clk, inst_data.i = ind and check_mask(inst_data.field_flags, IMF_DISPOSED_CNT_FLAG or IMF_NO_WRITERS_CNT_FLAG))) severity FAILURE;
|
||||||
@ -3521,7 +3521,7 @@ begin
|
|||||||
case (cnt) is
|
case (cnt) is
|
||||||
-- GET Next Pointer
|
-- GET Next Pointer
|
||||||
when 0 =>
|
when 0 =>
|
||||||
-- NOTE: We have to make sure that no pending Reads are in the Memory Controler Buffer,
|
-- NOTE: We have to make sure that no pending Reads are in the Memory Controller Buffer,
|
||||||
-- else the Next Payload Pointer cannot be read.
|
-- else the Next Payload Pointer cannot be read.
|
||||||
-- No Pending Reads
|
-- No Pending Reads
|
||||||
if (payload_cnt2 = 0) then
|
if (payload_cnt2 = 0) then
|
||||||
@ -3584,7 +3584,7 @@ begin
|
|||||||
if (payload_cnt = unsigned(long_latch)) then
|
if (payload_cnt = unsigned(long_latch)) then
|
||||||
-- End of Payload
|
-- End of Payload
|
||||||
if (next_payload = PAYLOAD_MEMORY_MAX_ADDRESS) then
|
if (next_payload = PAYLOAD_MEMORY_MAX_ADDRESS) then
|
||||||
-- DONE (Wait for Output to finidh reading)
|
-- DONE (Wait for Output to finish reading)
|
||||||
cnt_next <= cnt + 1;
|
cnt_next <= cnt + 1;
|
||||||
else
|
else
|
||||||
-- Next Payload Slot
|
-- Next Payload Slot
|
||||||
@ -4512,7 +4512,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
when ANY_SAMPLE_STATE =>
|
when ANY_SAMPLE_STATE =>
|
||||||
null;
|
null;
|
||||||
-- Uknown Sample State
|
-- Unknown Sample State
|
||||||
when others =>
|
when others =>
|
||||||
tmp_bool := FALSE;
|
tmp_bool := FALSE;
|
||||||
end case;
|
end case;
|
||||||
@ -4935,7 +4935,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
when ANY_SAMPLE_STATE =>
|
when ANY_SAMPLE_STATE =>
|
||||||
null;
|
null;
|
||||||
-- Uknown Sample State
|
-- Unknown Sample State
|
||||||
when others =>
|
when others =>
|
||||||
tmp_bool := FALSE;
|
tmp_bool := FALSE;
|
||||||
end case;
|
end case;
|
||||||
@ -5124,7 +5124,7 @@ begin
|
|||||||
-- Sample Info Generation Rank
|
-- Sample Info Generation Rank
|
||||||
si_generation_rank_sig_next <= collection_generation_rank - cur_generation_rank;
|
si_generation_rank_sig_next <= collection_generation_rank - cur_generation_rank;
|
||||||
|
|
||||||
-- Sample Info Absolut Generation Rank
|
-- Sample Info Absolute Generation Rank
|
||||||
-- XXX: Possible Worst Case Path (2 32-bit Operations in same clock)
|
-- XXX: Possible Worst Case Path (2 32-bit Operations in same clock)
|
||||||
si_absolute_generation_rank_sig_next <= (inst_data.disposed_gen_cnt + inst_data.no_writers_gen_cnt) - cur_generation_rank;
|
si_absolute_generation_rank_sig_next <= (inst_data.disposed_gen_cnt + inst_data.no_writers_gen_cnt) - cur_generation_rank;
|
||||||
|
|
||||||
@ -5537,7 +5537,7 @@ begin
|
|||||||
-- INSERT_INSTANCE See Memory OPCODE Description
|
-- INSERT_INSTANCE See Memory OPCODE Description
|
||||||
-- UPDATE_INSTANCE See Memory OPCODE Description
|
-- UPDATE_INSTANCE See Memory OPCODE Description
|
||||||
-- REMOVE_INSTANCE See Memory OPCODE Description
|
-- REMOVE_INSTANCE See Memory OPCODE Description
|
||||||
-- UNMARK_INTANCES See Memory OPCODE Description
|
-- UNMARK_INSTANCES See Memory OPCODE Description
|
||||||
-- RESET_MEMORY Reset Endpoint Memory to Empty State
|
-- RESET_MEMORY Reset Endpoint Memory to Empty State
|
||||||
inst_ctrl_prc : process(all)
|
inst_ctrl_prc : process(all)
|
||||||
begin
|
begin
|
||||||
@ -6302,7 +6302,7 @@ begin
|
|||||||
inst_stage_next <= IDLE;
|
inst_stage_next <= IDLE;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
-- READ Writer Bitamp
|
-- READ Writer Bitmap
|
||||||
when 21 =>
|
when 21 =>
|
||||||
inst_ready_out <= '1';
|
inst_ready_out <= '1';
|
||||||
|
|
||||||
|
|||||||
@ -166,7 +166,7 @@ use work.rtps_config_package.all;
|
|||||||
-- +-+-+-+---------------------------------------------------+-+-+-+
|
-- +-+-+-+---------------------------------------------------+-+-+-+
|
||||||
-- R...Sample has been ACKed
|
-- R...Sample has been ACKed
|
||||||
-- P...Sample has associated DATA Payload
|
-- P...Sample has associated DATA Payload
|
||||||
-- A...Associated Payload is aligned (Payload does extend until end of last Palyload Slot)
|
-- A...Associated Payload is aligned (Payload does extend until end of last Payload Slot)
|
||||||
-- F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
|
-- F...FilteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||||
-- U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
|
-- U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
|
||||||
-- D...DisposedFlag (1:1 PID_STATUS_INFO Mapping)
|
-- D...DisposedFlag (1:1 PID_STATUS_INFO Mapping)
|
||||||
@ -3379,7 +3379,7 @@ begin
|
|||||||
done_rtps(ind) <= '1';
|
done_rtps(ind) <= '1';
|
||||||
ret_rtps(ind) <= OK;
|
ret_rtps(ind) <= OK;
|
||||||
|
|
||||||
-- RTPS Requestes Payload
|
-- RTPS requests Payload
|
||||||
if (get_data_rtps(ind) = '1') then
|
if (get_data_rtps(ind) = '1') then
|
||||||
if (cur_payload /= PAYLOAD_MEMORY_MAX_ADDRESS) then
|
if (cur_payload /= PAYLOAD_MEMORY_MAX_ADDRESS) then
|
||||||
-- Get Payload
|
-- Get Payload
|
||||||
@ -3412,7 +3412,7 @@ begin
|
|||||||
case (cnt) is
|
case (cnt) is
|
||||||
-- GET Next Pointer
|
-- GET Next Pointer
|
||||||
when 0 =>
|
when 0 =>
|
||||||
-- NOTE: We have to make sure that no pending Reads are in the Memory Controler Buffer,
|
-- NOTE: We have to make sure that no pending Reads are in the Memory Controller Buffer,
|
||||||
-- else the Next Payload Pointer cannot be read.
|
-- else the Next Payload Pointer cannot be read.
|
||||||
-- No Pending Reads
|
-- No Pending Reads
|
||||||
if (cnt3 = 0) then
|
if (cnt3 = 0) then
|
||||||
@ -3475,7 +3475,7 @@ begin
|
|||||||
if (cnt2 = unsigned(long_latch)) then
|
if (cnt2 = unsigned(long_latch)) then
|
||||||
-- End of Payload
|
-- End of Payload
|
||||||
if (next_payload = PAYLOAD_MEMORY_MAX_ADDRESS) then
|
if (next_payload = PAYLOAD_MEMORY_MAX_ADDRESS) then
|
||||||
-- DONE (Wait for Output to finidh reading)
|
-- DONE (Wait for Output to finish reading)
|
||||||
cnt_next <= cnt + 1;
|
cnt_next <= cnt + 1;
|
||||||
else
|
else
|
||||||
-- Next Payload Slot
|
-- Next Payload Slot
|
||||||
|
|||||||
@ -20,7 +20,7 @@ entity history_cache is
|
|||||||
|
|
||||||
start_a : in std_logic;
|
start_a : in std_logic;
|
||||||
opcode_a : in HISTORY_CACHE_OPCODE_TYPE;
|
opcode_a : in HISTORY_CACHE_OPCODE_TYPE;
|
||||||
res_a : out HISTORY_CACHE_RESPOSNE_TYPE;
|
res_a : out HISTORY_CACHE_RESPONSE_TYPE;
|
||||||
data_in_a : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
data_in_a : in std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||||
valid_in_a : in std_logic;
|
valid_in_a : in std_logic;
|
||||||
ready_in_a : out std_logic;
|
ready_in_a : out std_logic;
|
||||||
@ -28,7 +28,7 @@ entity history_cache is
|
|||||||
|
|
||||||
start_b : in std_logic;
|
start_b : in std_logic;
|
||||||
opcode_b : in HISTORY_CACHE_OPCODE_TYPE;
|
opcode_b : in HISTORY_CACHE_OPCODE_TYPE;
|
||||||
res_b : out HISTORY_CACHE_RESPOSNE_TYPE;
|
res_b : out HISTORY_CACHE_RESPONSE_TYPE;
|
||||||
data_out_b : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
data_out_b : out std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||||
last_word_out_b : in std_logic;
|
last_word_out_b : in std_logic;
|
||||||
);
|
);
|
||||||
@ -382,7 +382,7 @@ begin
|
|||||||
res_a <= ACK;
|
res_a <= ACK;
|
||||||
end if;
|
end if;
|
||||||
when REMOVE_WRITER =>
|
when REMOVE_WRITER =>
|
||||||
-- Input and Memory Gurad
|
-- Input and Memory Guard
|
||||||
if (valid_in_a = '1' and inst_op_done_a = '1') then
|
if (valid_in_a = '1' and inst_op_done_a = '1') then
|
||||||
-- Latch Writer Pos
|
-- Latch Writer Pos
|
||||||
writer_pos_next <= to_integer(unsigned(data_in_a));
|
writer_pos_next <= to_integer(unsigned(data_in_a));
|
||||||
@ -425,7 +425,7 @@ begin
|
|||||||
-- Timestamp 2/2
|
-- Timestamp 2/2
|
||||||
when 2 =>
|
when 2 =>
|
||||||
ts_latch_next(1) <= data_in_a;
|
ts_latch_next(1) <= data_in_a;
|
||||||
-- Lifespna Deadline 2/2
|
-- Lifespan Deadline 2/2
|
||||||
when 4 =>
|
when 4 =>
|
||||||
-- Skip Key Hash, if not available
|
-- Skip Key Hash, if not available
|
||||||
if (has_key_hash = '0') then
|
if (has_key_hash = '0') then
|
||||||
@ -484,7 +484,7 @@ begin
|
|||||||
sample_write_data_a <= PAYLOAD_MEMORY_MAX_ADDRESS;
|
sample_write_data_a <= PAYLOAD_MEMORY_MAX_ADDRESS;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- If key Hash is avialable, start the Instacne Search first
|
-- If key Hash is available, start the Instance Search first
|
||||||
if (has_key_hash = '1') then
|
if (has_key_hash = '1') then
|
||||||
stage_a_next <= INITIATE_INSTANCE_SEARCH;
|
stage_a_next <= INITIATE_INSTANCE_SEARCH;
|
||||||
else
|
else
|
||||||
@ -737,7 +737,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- INSANCE SAMPLE COUNT
|
-- INSTANCE SAMPLE COUNT
|
||||||
if (MAX_SAMPLES_PER_INSTANCE /= LENGTH_UNLIMITED) then
|
if (MAX_SAMPLES_PER_INSTANCE /= LENGTH_UNLIMITED) then
|
||||||
tmp_update := tmp_update or SAMPLE_CNT_FLAG;
|
tmp_update := tmp_update or SAMPLE_CNT_FLAG;
|
||||||
end if;
|
end if;
|
||||||
@ -939,7 +939,7 @@ begin
|
|||||||
when 2 =>
|
when 2 =>
|
||||||
-- No empty Sample Slot Available
|
-- No empty Sample Slot Available
|
||||||
if (sample_read_data_a = SAMPLE_MEMORY_MAX_ADDRESS) then
|
if (sample_read_data_a = SAMPLE_MEMORY_MAX_ADDRESS) then
|
||||||
-- Signal Smaple Memory Full
|
-- Signal Sample Memory Full
|
||||||
sample_mem_full_next <= '1';
|
sample_mem_full_next <= '1';
|
||||||
else
|
else
|
||||||
empty_sample_list_head_next <= sample_read_data_a;
|
empty_sample_list_head_next <= sample_read_data_a;
|
||||||
@ -1101,7 +1101,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
|
|
||||||
if (inst_op_start_a = '1') then
|
if (inst_op_start_a = '1') then
|
||||||
-- Latch Signals needed for Mermory Operation (Use _next signals, because some signals are set in same clk)
|
-- Latch Signals needed for Memory Operation (Use _next signals, because some signals are set in same clk)
|
||||||
inst_latch_data_next <= (
|
inst_latch_data_next <= (
|
||||||
key_hash => key_hash_next,
|
key_hash => key_hash_next,
|
||||||
instance_state => instance_state,
|
instance_state => instance_state,
|
||||||
@ -1122,17 +1122,17 @@ begin
|
|||||||
-- Reset Data
|
-- Reset Data
|
||||||
inst_data_next <= ZERO_INSTANCE_DATA;
|
inst_data_next <= ZERO_INSTANCE_DATA;
|
||||||
-- NOTE: This process gets the lock implicitly when the SEARCH_INSTANCE, or GET_FIRST_INSTANCE operation is called, and has to be released explicitly
|
-- NOTE: This process gets the lock implicitly when the SEARCH_INSTANCE, or GET_FIRST_INSTANCE operation is called, and has to be released explicitly
|
||||||
-- by the main process. There are two ways to release the lock: 1) The man process explicitly calles the RELEASE_LOCK operation 2) The main
|
-- by the main process. There are two ways to release the lock: 1) The man process explicitly calls the RELEASE_LOCK operation 2) The main
|
||||||
-- process pulls the release_inst_lock signal high during the issuing of the last memory operation (Lock will be release after the opration finishes)
|
-- process pulls the release_inst_lock signal high during the issuing of the last memory operation (Lock will be release after the operation finishes)
|
||||||
-- Process B has lock
|
-- Process B has lock
|
||||||
if (inst_delete_lock_b = '1') then
|
if (inst_delete_lock_b = '1') then
|
||||||
-- Wait until process B releases lock
|
-- Wait until process B releases lock
|
||||||
inst_stage_a_next <= WAIT_FOR_LOCK_1;
|
inst_stage_a_next <= WAIT_FOR_LOCK_1;
|
||||||
else
|
else
|
||||||
-- NOTE: The case that both processes aqcuire the lock at the same time is handled by the B process in the next clock cycle.
|
-- NOTE: The case that both processes acquire the lock at the same time is handled by the B process in the next clock cycle.
|
||||||
-- Get Lock
|
-- Get Lock
|
||||||
inst_delete_lock_a_next <= '1';
|
inst_delete_lock_a_next <= '1';
|
||||||
-- No Instances avialable
|
-- No Instances available
|
||||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||||
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||||
else
|
else
|
||||||
@ -1187,10 +1187,10 @@ begin
|
|||||||
-- Wait until process B releases lock
|
-- Wait until process B releases lock
|
||||||
inst_stage_a_next <= WAIT_FOR_LOCK_2;
|
inst_stage_a_next <= WAIT_FOR_LOCK_2;
|
||||||
else
|
else
|
||||||
-- NOTE: The case that both processes aqcuire the lock at the same time is handled by the B process in the next clock cycle.
|
-- NOTE: The case that both processes acquire the lock at the same time is handled by the B process in the next clock cycle.
|
||||||
-- Get Lock
|
-- Get Lock
|
||||||
inst_delete_lock_a_next <= '1';
|
inst_delete_lock_a_next <= '1';
|
||||||
-- No Instances avialable
|
-- No Instances available
|
||||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||||
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||||
else
|
else
|
||||||
@ -1232,7 +1232,7 @@ begin
|
|||||||
if (inst_delete_lock_b = '0') then
|
if (inst_delete_lock_b = '0') then
|
||||||
-- Get Lock
|
-- Get Lock
|
||||||
inst_delete_lock_a_next <= '1';
|
inst_delete_lock_a_next <= '1';
|
||||||
-- No Instances avialable
|
-- No Instances available
|
||||||
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
|
||||||
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
|
||||||
else
|
else
|
||||||
|
|||||||
@ -7,7 +7,7 @@ use ieee.numeric_std.all;
|
|||||||
|
|
||||||
package ip_package is
|
package ip_package is
|
||||||
|
|
||||||
-- TODO : Fix assignemnt of 1 wide array
|
-- TODO : Fix assignment of 1 wide array
|
||||||
constant LAYER3_PROTOCOL_NUM : integer := 1;
|
constant LAYER3_PROTOCOL_NUM : integer := 1;
|
||||||
type LAYER3_PROTOCOL_TYPE is array (LAYER3_PROTOCOL_NUM-1 downto 0) of std_logic_vector(7 downto 0);
|
type LAYER3_PROTOCOL_TYPE is array (LAYER3_PROTOCOL_NUM-1 downto 0) of std_logic_vector(7 downto 0);
|
||||||
constant LAYER3_PROTOCOLS : LAYER3_PROTOCOL_TYPE := (0 => x"11");
|
constant LAYER3_PROTOCOLS : LAYER3_PROTOCOL_TYPE := (0 => x"11");
|
||||||
|
|||||||
@ -104,7 +104,7 @@ architecture with_frag of ipv4_in_handler is
|
|||||||
constant RAM_ADDR_WIDTH : integer := max(log2c(MAX_PARALLEL_FRAG*MAX_FRAG_SIZE), 14);
|
constant RAM_ADDR_WIDTH : integer := max(log2c(MAX_PARALLEL_FRAG*MAX_FRAG_SIZE), 14);
|
||||||
|
|
||||||
--*****TYPE DECLARATION*****
|
--*****TYPE DECLARATION*****
|
||||||
-- FSM states. Explained delow in detail
|
-- FSM states. Explained below in detail
|
||||||
type PARSER_STAGE_TYPE is (IPv4_INIT, IPv4_HEADER_1, IPv4_HEADER_2, IPv4_HEADER_3, IPv4_HEADER_4,
|
type PARSER_STAGE_TYPE is (IPv4_INIT, IPv4_HEADER_1, IPv4_HEADER_2, IPv4_HEADER_3, IPv4_HEADER_4,
|
||||||
IPv4_HEADER_5, IPv4_PAYLOAD_LENGTH, IPv4_PAYLOAD, IPv4_FRAGMENT_PRE, IPv4_FRAGMENT,
|
IPv4_HEADER_5, IPv4_PAYLOAD_LENGTH, IPv4_PAYLOAD, IPv4_FRAGMENT_PRE, IPv4_FRAGMENT,
|
||||||
IPv4_FRAGMENT_POST, IPv4_BUFFER_SRC, IPv4_BUFFER_DEST, IPv4_BUFFER_LENGTH, IPv4_BUFFER_PAYLOAD,
|
IPv4_FRAGMENT_POST, IPv4_BUFFER_SRC, IPv4_BUFFER_DEST, IPv4_BUFFER_LENGTH, IPv4_BUFFER_PAYLOAD,
|
||||||
@ -120,7 +120,7 @@ architecture with_frag of ipv4_in_handler is
|
|||||||
type BUFFER_ADDR_OFFSET_TYPE is array (MAX_PARALLEL_FRAG-1 downto 0) of unsigned(RAM_ADDR_WIDTH-1 downto 0);
|
type BUFFER_ADDR_OFFSET_TYPE is array (MAX_PARALLEL_FRAG-1 downto 0) of unsigned(RAM_ADDR_WIDTH-1 downto 0);
|
||||||
-- Array of packet sizes in buffers
|
-- Array of packet sizes in buffers
|
||||||
type FRAG_SIZE_ARRAY is array (MAX_PARALLEL_FRAG-1 downto 0) of std_logic_vector(13 downto 0);
|
type FRAG_SIZE_ARRAY is array (MAX_PARALLEL_FRAG-1 downto 0) of std_logic_vector(13 downto 0);
|
||||||
-- Array of 32-bit buffer word counters. Used for counting new received fragments and determining if the packet is completely re-assebled
|
-- Array of 32-bit buffer word counters. Used for counting new received fragments and determining if the packet is completely re-assembled
|
||||||
type BUFFER_WORD_COUNTER_ARRAY is array (MAX_PARALLEL_FRAG-1 downto 0) of integer range 0 to (MAX_FRAG_SIZE/4);
|
type BUFFER_WORD_COUNTER_ARRAY is array (MAX_PARALLEL_FRAG-1 downto 0) of integer range 0 to (MAX_FRAG_SIZE/4);
|
||||||
|
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ architecture with_frag of ipv4_in_handler is
|
|||||||
signal buffer_addr_old, buffer_addr_old_next : unsigned(RAM_ADDR_WIDTH-1 downto 0);
|
signal buffer_addr_old, buffer_addr_old_next : unsigned(RAM_ADDR_WIDTH-1 downto 0);
|
||||||
|
|
||||||
|
|
||||||
--*****ALIAS DEFINATION*****
|
--*****ALIAS DEFINITION*****
|
||||||
--IPv4 HEADER
|
--IPv4 HEADER
|
||||||
alias ip_version : std_logic_vector(3 downto 0) is data_in(31 downto 28);
|
alias ip_version : std_logic_vector(3 downto 0) is data_in(31 downto 28);
|
||||||
alias ip_ihl : std_logic_vector(3 downto 0) is data_in(27 downto 24);
|
alias ip_ihl : std_logic_vector(3 downto 0) is data_in(27 downto 24);
|
||||||
@ -292,7 +292,7 @@ begin
|
|||||||
end process;
|
end process;
|
||||||
|
|
||||||
-- Main State Machine
|
-- Main State Machine
|
||||||
-- STATE DESCRIPSION
|
-- STATE DESCRIPTION
|
||||||
-- IPv4_INIT Initial and idle state. Responsible for checking the buffer timers, and reading the packet length from the input FIFO
|
-- IPv4_INIT Initial and idle state. Responsible for checking the buffer timers, and reading the packet length from the input FIFO
|
||||||
-- IPv4_HEADER_1 Parsing first word of IPv4 HEADER
|
-- IPv4_HEADER_1 Parsing first word of IPv4 HEADER
|
||||||
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
|
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
|
||||||
@ -369,7 +369,7 @@ begin
|
|||||||
when IPv4_HEADER_1 =>
|
when IPv4_HEADER_1 =>
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
rd_sig <= '1';
|
rd_sig <= '1';
|
||||||
-- Wrong IP Version or Packet Length missmatch, skip packet
|
-- Wrong IP Version or Packet Length mismatch, skip packet
|
||||||
if (ip_version /= "0100" or normalize_length(ip_length) /= std_logic_vector(packet_length)) then
|
if (ip_version /= "0100" or normalize_length(ip_length) /= std_logic_vector(packet_length)) then
|
||||||
stage_next <= SKIP_PACKET;
|
stage_next <= SKIP_PACKET;
|
||||||
-- Store data and continue Parsing
|
-- Store data and continue Parsing
|
||||||
@ -382,7 +382,7 @@ begin
|
|||||||
when IPv4_HEADER_2 =>
|
when IPv4_HEADER_2 =>
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
rd_sig <= '1';
|
rd_sig <= '1';
|
||||||
-- No fragmentation, continue parsing normaly
|
-- No fragmentation, continue parsing normally
|
||||||
if (ip_MF_flag = '0' and ip_frag_offset = (ip_frag_offset'reverse_range => '0')) then
|
if (ip_MF_flag = '0' and ip_frag_offset = (ip_frag_offset'reverse_range => '0')) then
|
||||||
stage_next <= IPv4_HEADER_3;
|
stage_next <= IPv4_HEADER_3;
|
||||||
-- IP Fragmentation
|
-- IP Fragmentation
|
||||||
@ -528,7 +528,7 @@ begin
|
|||||||
reset_buffer_timer_id <= tmp;
|
reset_buffer_timer_id <= tmp;
|
||||||
-- Reset Maximum Fragment Size
|
-- Reset Maximum Fragment Size
|
||||||
frag_size_next(tmp) <= (others => '0');
|
frag_size_next(tmp) <= (others => '0');
|
||||||
-- Reset fragment word cntouer
|
-- Reset fragment word counter
|
||||||
buffer_word_cnt_next(tmp) <= 0;
|
buffer_word_cnt_next(tmp) <= 0;
|
||||||
-- Calculate buffer address
|
-- Calculate buffer address
|
||||||
tmp_frag_offset := (others => '0');
|
tmp_frag_offset := (others => '0');
|
||||||
@ -779,7 +779,7 @@ architecture no_frag of ipv4_in_handler is
|
|||||||
|
|
||||||
|
|
||||||
--*****TYPE DECLARATION*****
|
--*****TYPE DECLARATION*****
|
||||||
-- FSM states. Explained delow in detail
|
-- FSM states. Explained below in detail
|
||||||
type PARSER_STAGE_TYPE is (IPv4_INIT, IPv4_HEADER_1, IPv4_HEADER_2, IPv4_HEADER_3, IPv4_HEADER_4,
|
type PARSER_STAGE_TYPE is (IPv4_INIT, IPv4_HEADER_1, IPv4_HEADER_2, IPv4_HEADER_3, IPv4_HEADER_4,
|
||||||
IPv4_HEADER_5, IPv4_PAYLOAD_LENGTH, IPv4_PAYLOAD, SKIP_HEADER, SKIP_PACKET);
|
IPv4_HEADER_5, IPv4_PAYLOAD_LENGTH, IPv4_PAYLOAD, SKIP_HEADER, SKIP_PACKET);
|
||||||
|
|
||||||
@ -803,7 +803,7 @@ architecture no_frag of ipv4_in_handler is
|
|||||||
-- Intermediate output signal, and its 1 clk cycle delayed variant
|
-- Intermediate output signal, and its 1 clk cycle delayed variant
|
||||||
signal wr_sig : std_logic;
|
signal wr_sig : std_logic;
|
||||||
|
|
||||||
--*****ALIAS DEFINATION*****
|
--*****ALIAS DEFINITION*****
|
||||||
--IPv4 HEADER
|
--IPv4 HEADER
|
||||||
alias ip_version : std_logic_vector(3 downto 0) is data_in(31 downto 28);
|
alias ip_version : std_logic_vector(3 downto 0) is data_in(31 downto 28);
|
||||||
alias ip_ihl : std_logic_vector(3 downto 0) is data_in(27 downto 24);
|
alias ip_ihl : std_logic_vector(3 downto 0) is data_in(27 downto 24);
|
||||||
@ -844,7 +844,7 @@ begin
|
|||||||
end process;
|
end process;
|
||||||
|
|
||||||
-- Main State Machine
|
-- Main State Machine
|
||||||
-- STATE DESCRIPSION
|
-- STATE DESCRIPTION
|
||||||
-- IPv4_INIT Initial and idle state. Responsible for checking the buffer timers, and reading the packet length from the input FIFO
|
-- IPv4_INIT Initial and idle state. Responsible for checking the buffer timers, and reading the packet length from the input FIFO
|
||||||
-- IPv4_HEADER_1 Parsing first word of IPv4 HEADER
|
-- IPv4_HEADER_1 Parsing first word of IPv4 HEADER
|
||||||
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
|
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
|
||||||
@ -885,7 +885,7 @@ begin
|
|||||||
when IPv4_HEADER_1 =>
|
when IPv4_HEADER_1 =>
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
rd_sig <= '1';
|
rd_sig <= '1';
|
||||||
-- Wrong IP Version or Packet Length missmatch, skip packet
|
-- Wrong IP Version or Packet Length mismatch, skip packet
|
||||||
if (ip_version /= "0100" or normalize_length(ip_length) /= std_logic_vector(packet_length)) then
|
if (ip_version /= "0100" or normalize_length(ip_length) /= std_logic_vector(packet_length)) then
|
||||||
stage_next <= SKIP_PACKET;
|
stage_next <= SKIP_PACKET;
|
||||||
-- Store data and continue Parsing
|
-- Store data and continue Parsing
|
||||||
@ -898,7 +898,7 @@ begin
|
|||||||
when IPv4_HEADER_2 =>
|
when IPv4_HEADER_2 =>
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
rd_sig <= '1';
|
rd_sig <= '1';
|
||||||
-- No fragmentation, continue parsing normaly
|
-- No fragmentation, continue parsing normally
|
||||||
if (ip_MF_flag = '0' and ip_frag_offset = (ip_frag_offset'reverse_range => '0')) then
|
if (ip_MF_flag = '0' and ip_frag_offset = (ip_frag_offset'reverse_range => '0')) then
|
||||||
stage_next <= IPv4_HEADER_3;
|
stage_next <= IPv4_HEADER_3;
|
||||||
-- IP Fragmentation
|
-- IP Fragmentation
|
||||||
|
|||||||
@ -12,7 +12,7 @@ package math_pkg is
|
|||||||
-- returns the minimum of the two operands
|
-- returns the minimum of the two operands
|
||||||
function min(constant value1, value2 : in integer) return integer;
|
function min(constant value1, value2 : in integer) return integer;
|
||||||
|
|
||||||
function round_div(constant divident, divisor : in integer) return integer;
|
function round_div(constant dividend, divisor : in integer) return integer;
|
||||||
end package;
|
end package;
|
||||||
|
|
||||||
|
|
||||||
@ -72,11 +72,11 @@ package body math_pkg is
|
|||||||
end function;
|
end function;
|
||||||
|
|
||||||
-- TODO: Rename to ceil_div, since we do not actually round
|
-- TODO: Rename to ceil_div, since we do not actually round
|
||||||
function round_div(constant divident, divisor : in integer) return integer is
|
function round_div(constant dividend, divisor : in integer) return integer is
|
||||||
variable ret : integer;
|
variable ret : integer;
|
||||||
begin
|
begin
|
||||||
ret := divident / divisor;
|
ret := dividend / divisor;
|
||||||
if (divident mod divisor /= 0) then
|
if (dividend mod divisor /= 0) then
|
||||||
ret := ret + 1;
|
ret := ret + 1;
|
||||||
end if;
|
end if;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@ -344,7 +344,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -417,7 +417,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when GET_RR_STAMP =>
|
when GET_RR_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
@ -620,7 +620,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RQ_GOAL_ID =>
|
when WRITE_RQ_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -338,7 +338,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -396,7 +396,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_RQ_GOAL_ID =>
|
when GET_RQ_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -615,7 +615,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RR_STAMP =>
|
when WRITE_RR_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -340,7 +340,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -592,7 +592,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RQ_GOAL_ID =>
|
when WRITE_RQ_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -335,7 +335,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -392,7 +392,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_RQ_GOAL_ID =>
|
when GET_RQ_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -336,7 +336,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
|
|||||||
@ -331,7 +331,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
|
|||||||
@ -14,7 +14,7 @@ use work.GoalStatusArray_package;
|
|||||||
|
|
||||||
-- NOTE: Even though this Test instantiates other components, we only (mis-) use them for the memory they instantiate, and thus this Test only tests the uut device (Level 0)
|
-- NOTE: Even though this Test instantiates other components, we only (mis-) use them for the memory they instantiate, and thus this Test only tests the uut device (Level 0)
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Action Server.
|
-- This testbench tests the General Behaviour of ROS Action Server.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- TEST: NEW GOAL [MEMORY EMPTY]
|
-- TEST: NEW GOAL [MEMORY EMPTY]
|
||||||
-- TEST: NEW GOAL [ACCEPT]
|
-- TEST: NEW GOAL [ACCEPT]
|
||||||
|
|||||||
@ -14,7 +14,7 @@ use work.GoalStatusArray_package;
|
|||||||
|
|
||||||
-- NOTE: Even though this Test instantiates other components, we only (mis-) use them for the memory they instantiate, and thus this Test only tests the uut device (Level 0)
|
-- NOTE: Even though this Test instantiates other components, we only (mis-) use them for the memory they instantiate, and thus this Test only tests the uut device (Level 0)
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Action Server.
|
-- This testbench tests the General Behaviour of ROS Action Server.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- TEST: NEW GOAL [MEMORY EMPTY]
|
-- TEST: NEW GOAL [MEMORY EMPTY]
|
||||||
-- TEST: NEW GOAL [ACCEPT]
|
-- TEST: NEW GOAL [ACCEPT]
|
||||||
|
|||||||
@ -9,9 +9,9 @@ use work.rtps_package.all;
|
|||||||
use work.ros_package.all;
|
use work.ros_package.all;
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -9,9 +9,9 @@ use work.rtps_package.all;
|
|||||||
use work.ros_package.all;
|
use work.ros_package.all;
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.CancelGoal_package.all;
|
use work.CancelGoal_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of the ROS Services.
|
-- This testbench tests the General Behaviour of the ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.CancelGoal_package.all;
|
use work.CancelGoal_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.Fibonacci_package.all;
|
use work.Fibonacci_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS publishers and subscribers
|
-- This testbench tests the General Behaviour of ROS publishers and subscribers
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.Fibonacci_package.all;
|
use work.Fibonacci_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS publishers and subscribers
|
-- This testbench tests the General Behaviour of ROS publishers and subscribers
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -9,9 +9,9 @@ use work.rtps_package.all;
|
|||||||
use work.ros_package.all;
|
use work.ros_package.all;
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -9,9 +9,9 @@ use work.rtps_package.all;
|
|||||||
use work.ros_package.all;
|
use work.ros_package.all;
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.Fibonacci_package.all;
|
use work.Fibonacci_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.Fibonacci_package.all;
|
use work.Fibonacci_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS Services.
|
-- This testbench tests the General Behaviour of ROS Services.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.GoalStatus_package;
|
|||||||
|
|
||||||
-- This testbench tests the General Behaviour of ROS Action.
|
-- This testbench tests the General Behaviour of ROS Action.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unsuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test Take Failure on Client TAKE_* Operations
|
-- * Test Take Failure on Client TAKE_* Operations
|
||||||
-- * Test multiple concurrent Goals
|
-- * Test multiple concurrent Goals
|
||||||
-- * Test Encoding/Decoding of Action Messages
|
-- * Test Encoding/Decoding of Action Messages
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use work.GoalStatus_package;
|
|||||||
|
|
||||||
-- This testbench tests the General Behaviour of ROS Action.
|
-- This testbench tests the General Behaviour of ROS Action.
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unsuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test Take Failure on Client TAKE_* Operations
|
-- * Test Take Failure on Client TAKE_* Operations
|
||||||
-- * Test multiple concurrent Goals
|
-- * Test multiple concurrent Goals
|
||||||
-- * Test Encoding/Decoding of Action Messages
|
-- * Test Encoding/Decoding of Action Messages
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.GoalStatusArray_package.all;
|
use work.GoalStatusArray_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS publishers and subscribers
|
-- This testbench tests the General Behaviour of ROS publishers and subscribers
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -10,9 +10,9 @@ use work.ros_package.all;
|
|||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
use work.GoalStatusArray_package.all;
|
use work.GoalStatusArray_package.all;
|
||||||
|
|
||||||
-- This testbench tests the General Behavour of ROS publishers and subscribers
|
-- This testbench tests the General Behaviour of ROS publishers and subscribers
|
||||||
-- More specifically following tests are done:
|
-- More specifically following tests are done:
|
||||||
-- * Test Unssuported Opcode Operations
|
-- * Test Unsupported Opcode Operations
|
||||||
-- * Test RETCODE_NO_DATA response from DDS Reader
|
-- * Test RETCODE_NO_DATA response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Reader
|
-- * Test RETCODE_ERROR response from DDS Reader
|
||||||
-- * Test RETCODE_ERROR response from DDS Writer
|
-- * Test RETCODE_ERROR response from DDS Writer
|
||||||
|
|||||||
@ -12,10 +12,10 @@ use work.rtps_package.all;
|
|||||||
use work.ros_package.all;
|
use work.ros_package.all;
|
||||||
use work.rtps_test_package.all;
|
use work.rtps_test_package.all;
|
||||||
|
|
||||||
-- This testbench test the general the general ROS Action operation by interconnecting a system with a action client, with a system with a action server.
|
-- This testbench test the general ROS Action operation by interconnecting a system with a action client, with a system with a action server.
|
||||||
-- Libraries are used to allow to use systems with different configurations. Testbench_ROS_Lib4 contains the ROS service server, and Testbench_ROS_Lib5
|
-- Libraries are used to allow to use systems with different configurations. Testbench_ROS_Lib4 contains the ROS service server, and Testbench_ROS_Lib5
|
||||||
-- contains the ROS service client.
|
-- contains the ROS service client.
|
||||||
-- The ROS Service is the Fibonacci service used in the example tutorials, which sends a a goal request of order 10, and gets the fibonacci sequence as
|
-- The ROS Action is the Fibonacci action used in the example tutorials, which sends a a goal request of order 10, and gets the fibonacci sequence as
|
||||||
-- result.
|
-- result.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -333,7 +333,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
|
|||||||
@ -331,7 +331,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
|
|||||||
@ -253,7 +253,7 @@ begin
|
|||||||
case (encode_stage) is
|
case (encode_stage) is
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
when WRITE_GOAL_ID =>
|
when WRITE_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -331,7 +331,7 @@ begin
|
|||||||
case (decode_stage) is
|
case (decode_stage) is
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
when GET_GOAL_ID =>
|
when GET_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -342,7 +342,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -415,7 +415,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when GET_RR_STAMP =>
|
when GET_RR_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
@ -618,7 +618,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RQ_GOAL_ID =>
|
when WRITE_RQ_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -338,7 +338,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -396,7 +396,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_RQ_GOAL_ID =>
|
when GET_RQ_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -627,7 +627,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RR_STAMP =>
|
when WRITE_RR_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -383,7 +383,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -681,7 +681,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RQ_GOAL_ID =>
|
when WRITE_RQ_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -377,7 +377,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -434,7 +434,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_RQ_GOAL_ID =>
|
when GET_RQ_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
|
|||||||
@ -422,7 +422,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -524,7 +524,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when GET_RR_GOALS_CANCELING_GOAL_ID =>
|
when GET_RR_GOALS_CANCELING_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -560,7 +560,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_RR_GOALS_CANCELING_STAMP =>
|
when GET_RR_GOALS_CANCELING_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
@ -780,7 +780,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
when WRITE_RQ_GOAL_INFO_GOAL_ID =>
|
when WRITE_RQ_GOAL_INFO_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -803,7 +803,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RQ_GOAL_INFO_STAMP =>
|
when WRITE_RQ_GOAL_INFO_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -419,7 +419,7 @@ begin
|
|||||||
-- };
|
-- };
|
||||||
-- 'seq' is set by a counter that is incremented on each "send_request".
|
-- 'seq' is set by a counter that is incremented on each "send_request".
|
||||||
-- 'guid' is set to the publication handle of the request writer of the service client.
|
-- 'guid' is set to the publication handle of the request writer of the service client.
|
||||||
-- Note that the publication handle is useless for the server, since it is only meanigful localy (i.e. only the client can do something with it)
|
-- Note that the publication handle is useless for the server, since it is only meaningful locally (i.e. only the client can do something with it)
|
||||||
-- Nevertheless the same 'guid' has to be returned to the client.
|
-- Nevertheless the same 'guid' has to be returned to the client.
|
||||||
when GET_RID_WGUID =>
|
when GET_RID_WGUID =>
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
@ -479,7 +479,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- ###GENERATED START###
|
-- ###GENERATED START###
|
||||||
when GET_RQ_GOAL_INFO_GOAL_ID =>
|
when GET_RQ_GOAL_INFO_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -502,7 +502,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when GET_RQ_GOAL_INFO_STAMP =>
|
when GET_RQ_GOAL_INFO_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
@ -742,7 +742,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RR_GOALS_CANCELING_GOAL_ID =>
|
when WRITE_RR_GOALS_CANCELING_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -784,7 +784,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_RR_GOALS_CANCELING_STAMP =>
|
when WRITE_RR_GOALS_CANCELING_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -345,7 +345,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_STATUS_LIST_GOAL_INFO_GOAL_ID =>
|
when WRITE_STATUS_LIST_GOAL_INFO_GOAL_ID =>
|
||||||
-- Special Encoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Encoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -386,7 +386,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when WRITE_STATUS_LIST_GOAL_INFO_STAMP =>
|
when WRITE_STATUS_LIST_GOAL_INFO_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -426,7 +426,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when GET_STATUS_LIST_GOAL_INFO_GOAL_ID =>
|
when GET_STATUS_LIST_GOAL_INFO_GOAL_ID =>
|
||||||
-- Special Decoding for effieciency (Prevent having to define memory for UUID)
|
-- Special Decoding for efficiency (Prevent having to define memory for UUID)
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_1)) then
|
if (not check_align(align_offset, ALIGN_1)) then
|
||||||
target_align_next <= ALIGN_1;
|
target_align_next <= ALIGN_1;
|
||||||
@ -462,7 +462,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when GET_STATUS_LIST_GOAL_INFO_STAMP =>
|
when GET_STATUS_LIST_GOAL_INFO_STAMP =>
|
||||||
-- We intepret the TIME as a double word for efficiency
|
-- We interpret the TIME as a double word for efficiency
|
||||||
-- ALIGN GUARD
|
-- ALIGN GUARD
|
||||||
if (not check_align(align_offset, ALIGN_4)) then
|
if (not check_align(align_offset, ALIGN_4)) then
|
||||||
target_align_next <= ALIGN_4;
|
target_align_next <= ALIGN_4;
|
||||||
|
|||||||
@ -340,7 +340,7 @@ architecture arch of ros_action_server is
|
|||||||
-- *Cancel Process Search Types*
|
-- *Cancel Process Search Types*
|
||||||
-- SEARCH_GOAL_ID Search goal list for a specific goal id
|
-- SEARCH_GOAL_ID Search goal list for a specific goal id
|
||||||
-- SEARCH_STAMP Search goal list for first goal that was accepted at or before a provided timestamp
|
-- SEARCH_STAMP Search goal list for first goal that was accepted at or before a provided timestamp
|
||||||
-- SEARCH_NONE No search criteria. All goals are valid candites (Applies from current list position)
|
-- SEARCH_NONE No search criteria. All goals are valid candidates (Applies from current list position)
|
||||||
type SEARCH_TYPE is (SEARCH_GOAL_ID, SEARCH_STAMP, SEARCH_NONE);
|
type SEARCH_TYPE is (SEARCH_GOAL_ID, SEARCH_STAMP, SEARCH_NONE);
|
||||||
-- *Instance Memory Opcodes*
|
-- *Instance Memory Opcodes*
|
||||||
-- OPCODE DESCRIPTION
|
-- OPCODE DESCRIPTION
|
||||||
@ -422,7 +422,7 @@ architecture arch of ros_action_server is
|
|||||||
signal trigger_result, trigger_result_next : std_logic;
|
signal trigger_result, trigger_result_next : std_logic;
|
||||||
-- Result service Request ID latch
|
-- Result service Request ID latch
|
||||||
signal request_id_latch, request_id_latch_next : REQUEST_ID_TYPE;
|
signal request_id_latch, request_id_latch_next : REQUEST_ID_TYPE;
|
||||||
-- Time of next goal expiration dealine
|
-- Time of next goal expiration deadline
|
||||||
signal check_time, check_time_next : ROS_TIME_TYPE;
|
signal check_time, check_time_next : ROS_TIME_TYPE;
|
||||||
-- Temporal time latch (used in time addition calculation)
|
-- Temporal time latch (used in time addition calculation)
|
||||||
signal time_latch, time_latch_next : ROS_TIME_TYPE;
|
signal time_latch, time_latch_next : ROS_TIME_TYPE;
|
||||||
@ -442,7 +442,7 @@ architecture arch of ros_action_server is
|
|||||||
signal cancel_ret_code, cancel_ret_code_next : std_logic_vector(CDR_INT8_WIDTH-1 downto 0);
|
signal cancel_ret_code, cancel_ret_code_next : std_logic_vector(CDR_INT8_WIDTH-1 downto 0);
|
||||||
-- Toggle latch that latches status update requests from other processes
|
-- Toggle latch that latches status update requests from other processes
|
||||||
signal trigger_status, trigger_status_next : std_logic;
|
signal trigger_status, trigger_status_next : std_logic;
|
||||||
-- Index of statusl list sequence
|
-- Index of status list sequence
|
||||||
signal status_list_cnt, status_list_cnt_next : natural range 0 to MAX_GOALS;
|
signal status_list_cnt, status_list_cnt_next : natural range 0 to MAX_GOALS;
|
||||||
-- Test signal used for testbench synchronisation
|
-- Test signal used for testbench synchronisation
|
||||||
signal idle_sig : std_logic;
|
signal idle_sig : std_logic;
|
||||||
@ -462,7 +462,7 @@ architecture arch of ros_action_server is
|
|||||||
signal mem_cnt, mem_cnt_next : natural range 0 to 19;
|
signal mem_cnt, mem_cnt_next : natural range 0 to 19;
|
||||||
-- Pointer to currently relevant goal memory frame
|
-- Pointer to currently relevant goal memory frame
|
||||||
signal mem_addr_base, mem_addr_base_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_base, mem_addr_base_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- Goal memory fram pointer latch
|
-- Goal memory frame pointer latch
|
||||||
signal mem_addr_latch, mem_addr_latch_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_latch, mem_addr_latch_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- Result index of current empty head goal
|
-- Result index of current empty head goal
|
||||||
signal empty_head_res_ind, empty_head_res_ind_next : unsigned(WORD_WIDTH-1 downto 0);
|
signal empty_head_res_ind, empty_head_res_ind_next : unsigned(WORD_WIDTH-1 downto 0);
|
||||||
@ -1957,7 +1957,7 @@ begin
|
|||||||
cnt_next <= 0; -- GET_FIRST
|
cnt_next <= 0; -- GET_FIRST
|
||||||
end if;
|
end if;
|
||||||
when SEARCH_STAMP =>
|
when SEARCH_STAMP =>
|
||||||
-- NOTE: Since the goals are added chronologically, we don't have to check the timetsamps from now on
|
-- NOTE: Since the goals are added chronologically, we don't have to check the timestamps from now on
|
||||||
search_type_c_next <= SEARCH_NONE;
|
search_type_c_next <= SEARCH_NONE;
|
||||||
stage_next <= GET_C_DATA;
|
stage_next <= GET_C_DATA;
|
||||||
cnt_next <= 1; -- GET_NEXT
|
cnt_next <= 1; -- GET_NEXT
|
||||||
@ -2000,13 +2000,13 @@ begin
|
|||||||
cancel_ret_code_next <= CancelGoal_package.RR_ERROR_NONE;
|
cancel_ret_code_next <= CancelGoal_package.RR_ERROR_NONE;
|
||||||
stage_next <= SEND_C_RESPONSE;
|
stage_next <= SEND_C_RESPONSE;
|
||||||
else
|
else
|
||||||
-- Search for Timetamps
|
-- Search for Timestamps
|
||||||
search_type_c_next <= SEARCH_STAMP;
|
search_type_c_next <= SEARCH_STAMP;
|
||||||
stage_next <= GET_C_DATA;
|
stage_next <= GET_C_DATA;
|
||||||
cnt_next <= 0; -- GET_FIRST
|
cnt_next <= 0; -- GET_FIRST
|
||||||
end if;
|
end if;
|
||||||
when SEARCH_STAMP =>
|
when SEARCH_STAMP =>
|
||||||
-- NOTE: Since the goals are added chronologically, we don't have to check the timetsamps from now on
|
-- NOTE: Since the goals are added chronologically, we don't have to check the timestamps from now on
|
||||||
search_type_c_next <= SEARCH_NONE;
|
search_type_c_next <= SEARCH_NONE;
|
||||||
stage_next <= GET_C_DATA;
|
stage_next <= GET_C_DATA;
|
||||||
cnt_next <= 1; -- GET_NEXT
|
cnt_next <= 1; -- GET_NEXT
|
||||||
|
|||||||
@ -215,7 +215,7 @@ architecture arch of ros_action_server is
|
|||||||
-- *Cancel Process Search Types*
|
-- *Cancel Process Search Types*
|
||||||
-- SEARCH_GOAL_ID Search goal list for a specific goal id
|
-- SEARCH_GOAL_ID Search goal list for a specific goal id
|
||||||
-- SEARCH_STAMP Search goal list for first goal that was accepted at or before a provided timestamp
|
-- SEARCH_STAMP Search goal list for first goal that was accepted at or before a provided timestamp
|
||||||
-- SEARCH_NONE No search criteria. All goals are valid candites (Applies from current list position)
|
-- SEARCH_NONE No search criteria. All goals are valid candidates (Applies from current list position)
|
||||||
type SEARCH_TYPE is (SEARCH_GOAL_ID, SEARCH_STAMP, SEARCH_NONE);
|
type SEARCH_TYPE is (SEARCH_GOAL_ID, SEARCH_STAMP, SEARCH_NONE);
|
||||||
-- *Instance Memory Opcodes*
|
-- *Instance Memory Opcodes*
|
||||||
-- OPCODE DESCRIPTION
|
-- OPCODE DESCRIPTION
|
||||||
@ -300,7 +300,7 @@ architecture arch of ros_action_server is
|
|||||||
signal trigger_status_r : std_logic;
|
signal trigger_status_r : std_logic;
|
||||||
-- Result service Request ID latch
|
-- Result service Request ID latch
|
||||||
signal request_id_latch, request_id_latch_next : REQUEST_ID_TYPE;
|
signal request_id_latch, request_id_latch_next : REQUEST_ID_TYPE;
|
||||||
-- Time of next goal expiration dealine
|
-- Time of next goal expiration deadline
|
||||||
signal check_time, check_time_next : ROS_TIME_TYPE;
|
signal check_time, check_time_next : ROS_TIME_TYPE;
|
||||||
-- Temporal time latch (used in time addition calculation)
|
-- Temporal time latch (used in time addition calculation)
|
||||||
signal time_latch, time_latch_next : ROS_TIME_TYPE;
|
signal time_latch, time_latch_next : ROS_TIME_TYPE;
|
||||||
@ -354,7 +354,7 @@ architecture arch of ros_action_server is
|
|||||||
signal status_stage, status_stage_next : STATUS_STAGE_TYPE;
|
signal status_stage, status_stage_next : STATUS_STAGE_TYPE;
|
||||||
-- Toggle latch that latches status update requests from other processes
|
-- Toggle latch that latches status update requests from other processes
|
||||||
signal trigger_status, trigger_status_next : std_logic;
|
signal trigger_status, trigger_status_next : std_logic;
|
||||||
-- Index of statusl list sequence
|
-- Index of status list sequence
|
||||||
signal status_list_cnt, status_list_cnt_next : natural range 0 to MAX_GOALS-1;
|
signal status_list_cnt, status_list_cnt_next : natural range 0 to MAX_GOALS-1;
|
||||||
-- Request memory operation
|
-- Request memory operation
|
||||||
signal mem_start_s : std_logic;
|
signal mem_start_s : std_logic;
|
||||||
@ -370,7 +370,7 @@ architecture arch of ros_action_server is
|
|||||||
-- *GOAL MEMORY PROCESS*
|
-- *GOAL MEMORY PROCESS*
|
||||||
-- Memory process FSM state
|
-- Memory process FSM state
|
||||||
signal mem_stage, mem_stage_next : MEM_STAGE_TYPE;
|
signal mem_stage, mem_stage_next : MEM_STAGE_TYPE;
|
||||||
-- Acknoledge memoryrequest from respective process
|
-- Acknowledge memory request from respective process
|
||||||
signal mem_ack_r, mem_ack_s, mem_ack_c, mem_ack_g : std_logic;
|
signal mem_ack_r, mem_ack_s, mem_ack_c, mem_ack_g : std_logic;
|
||||||
-- Head of occupied goal list
|
-- Head of occupied goal list
|
||||||
signal mem_occupied_head, mem_occupied_head_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_occupied_head, mem_occupied_head_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
@ -384,7 +384,7 @@ architecture arch of ros_action_server is
|
|||||||
signal mem_cnt, mem_cnt_next : natural range 0 to 19;
|
signal mem_cnt, mem_cnt_next : natural range 0 to 19;
|
||||||
-- Pointer to currently relevant goal memory frame
|
-- Pointer to currently relevant goal memory frame
|
||||||
signal mem_addr_base, mem_addr_base_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_base, mem_addr_base_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- Goal memory fram pointer latch
|
-- Goal memory frame pointer latch
|
||||||
signal mem_addr_latch, mem_addr_latch_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_latch, mem_addr_latch_next : unsigned(GOAL_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- Result index of current empty head goal
|
-- Result index of current empty head goal
|
||||||
signal empty_head_res_ind, empty_head_res_ind_next : unsigned(WORD_WIDTH-1 downto 0);
|
signal empty_head_res_ind, empty_head_res_ind_next : unsigned(WORD_WIDTH-1 downto 0);
|
||||||
@ -1295,7 +1295,7 @@ begin
|
|||||||
null;
|
null;
|
||||||
end case;
|
end case;
|
||||||
when REMOVE_REQUEST =>
|
when REMOVE_REQUEST =>
|
||||||
-- NOTE: After thsi stage the rrq_addr_base is set to the Next request
|
-- NOTE: After this stage the rrq_addr_base is set to the Next request
|
||||||
case (cnt) is
|
case (cnt) is
|
||||||
-- GET Next Addr
|
-- GET Next Addr
|
||||||
when 0 =>
|
when 0 =>
|
||||||
@ -1873,7 +1873,7 @@ begin
|
|||||||
|
|
||||||
mem_data_c_next <= mem_data;
|
mem_data_c_next <= mem_data;
|
||||||
|
|
||||||
-- NOTE: If both the Main and Cancel FSM enter the atomic operation zone at the smae time, the cancel FSM gives way and waits.
|
-- NOTE: If both the Main and Cancel FSM enter the atomic operation zone at the same time, the cancel FSM gives way and waits.
|
||||||
if (atomic_op_r = '1' and mem_data.addr = mem_data_r.addr) then
|
if (atomic_op_r = '1' and mem_data.addr = mem_data_r.addr) then
|
||||||
cancel_stage_next <= GET;
|
cancel_stage_next <= GET;
|
||||||
else
|
else
|
||||||
@ -1971,7 +1971,7 @@ begin
|
|||||||
mem_data_c_next.addr <= mem_occupied_head;
|
mem_data_c_next.addr <= mem_occupied_head;
|
||||||
end if;
|
end if;
|
||||||
when SEARCH_STAMP =>
|
when SEARCH_STAMP =>
|
||||||
-- NOTE: Since the goals are added chronologically, we don't have to check the timetsamps from now on
|
-- NOTE: Since the goals are added chronologically, we don't have to check the timestamps from now on
|
||||||
search_type_c_next <= SEARCH_NONE;
|
search_type_c_next <= SEARCH_NONE;
|
||||||
cancel_stage_next <= GET_NEXT;
|
cancel_stage_next <= GET_NEXT;
|
||||||
when SEARCH_NONE =>
|
when SEARCH_NONE =>
|
||||||
@ -2018,13 +2018,13 @@ begin
|
|||||||
else
|
else
|
||||||
assert (mem_occupied_head /= GOAL_MEMORY_MAX_ADDRESS) severity FAILURE;
|
assert (mem_occupied_head /= GOAL_MEMORY_MAX_ADDRESS) severity FAILURE;
|
||||||
|
|
||||||
-- Search for Timetamps
|
-- Search for Timestamps
|
||||||
search_type_c_next <= SEARCH_STAMP;
|
search_type_c_next <= SEARCH_STAMP;
|
||||||
cancel_stage_next <= GET;
|
cancel_stage_next <= GET;
|
||||||
mem_data_c_next.addr <= mem_occupied_head;
|
mem_data_c_next.addr <= mem_occupied_head;
|
||||||
end if;
|
end if;
|
||||||
when SEARCH_STAMP =>
|
when SEARCH_STAMP =>
|
||||||
-- NOTE: Since the goals are added chronologically, we don't have to check the timetsamps from now on
|
-- NOTE: Since the goals are added chronologically, we don't have to check the timestamps from now on
|
||||||
search_type_c_next <= SEARCH_NONE;
|
search_type_c_next <= SEARCH_NONE;
|
||||||
cancel_stage_next <= GET_NEXT;
|
cancel_stage_next <= GET_NEXT;
|
||||||
when SEARCH_NONE =>
|
when SEARCH_NONE =>
|
||||||
@ -2208,7 +2208,7 @@ begin
|
|||||||
|
|
||||||
case (mem_stage) is
|
case (mem_stage) is
|
||||||
-- NOTE: The REMOVE opcode sets mem_data.addr to the previous slot (or GOAL_MEMORY_MAX_ADDRESS if no previous goals)
|
-- NOTE: The REMOVE opcode sets mem_data.addr to the previous slot (or GOAL_MEMORY_MAX_ADDRESS if no previous goals)
|
||||||
-- This allows defined behavious of GET_NEXT when removing goals.
|
-- This allows defined behaviours of GET_NEXT when removing goals.
|
||||||
when IDLE =>
|
when IDLE =>
|
||||||
mem_done <= '1';
|
mem_done <= '1';
|
||||||
if (mem_start_g = '1') then
|
if (mem_start_g = '1') then
|
||||||
|
|||||||
@ -543,7 +543,7 @@ package body ros_package is
|
|||||||
function to_UUID(input : std_logic_vector) return UUID_TYPE is
|
function to_UUID(input : std_logic_vector) return UUID_TYPE is
|
||||||
variable ret : UUID_TYPE;
|
variable ret : UUID_TYPE;
|
||||||
begin
|
begin
|
||||||
assert (input'length = UUID_WIDTH) report "SLV Length missmatch" severity FAILURE;
|
assert (input'length = UUID_WIDTH) report "SLV Length mismatch" severity FAILURE;
|
||||||
ret := UUID_UNKNOWN;
|
ret := UUID_UNKNOWN;
|
||||||
for i in 0 to ret'length-1 loop
|
for i in 0 to ret'length-1 loop
|
||||||
ret(i) := get_sub_vector(input, i, ret(i)'length, TRUE);
|
ret(i) := get_sub_vector(input, i, ret(i)'length, TRUE);
|
||||||
@ -563,7 +563,7 @@ package body ros_package is
|
|||||||
function to_ROS_TIME(input : std_logic_vector) return ROS_TIME_TYPE is
|
function to_ROS_TIME(input : std_logic_vector) return ROS_TIME_TYPE is
|
||||||
variable ret : ROS_TIME_TYPE;
|
variable ret : ROS_TIME_TYPE;
|
||||||
begin
|
begin
|
||||||
assert (input'length = ROS_TIME_WIDTH) report "SLV Length missmatch" severity FAILURE;
|
assert (input'length = ROS_TIME_WIDTH) report "SLV Length mismatch" severity FAILURE;
|
||||||
ret.sec := get_sub_vector(input, 0, ret.sec'length, TRUE);
|
ret.sec := get_sub_vector(input, 0, ret.sec'length, TRUE);
|
||||||
ret.nanosec := get_sub_vector(input, 1, ret.nanosec'length, TRUE);
|
ret.nanosec := get_sub_vector(input, 1, ret.nanosec'length, TRUE);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@ -184,7 +184,7 @@ package body rtps_config_package is
|
|||||||
return ret;
|
return ret;
|
||||||
end function;
|
end function;
|
||||||
|
|
||||||
function gen_entyid return ENTITYID_TYPE is
|
function gen_entityid return ENTITYID_TYPE is
|
||||||
variable ret : ENTITYID_TYPE;
|
variable ret : ENTITYID_TYPE;
|
||||||
begin
|
begin
|
||||||
ret := (others => (others => '0'));
|
ret := (others => (others => '0'));
|
||||||
@ -211,7 +211,7 @@ package body rtps_config_package is
|
|||||||
return ret;
|
return ret;
|
||||||
end function;
|
end function;
|
||||||
|
|
||||||
constant ENTITYID : ENTITYID_TYPE := gen_entyid;
|
constant ENTITYID : ENTITYID_TYPE := gen_entityid;
|
||||||
|
|
||||||
function gen_guidprefix return GUIDPREFIX_TYPE is
|
function gen_guidprefix return GUIDPREFIX_TYPE is
|
||||||
variable tmp : std_logic_vector(GUIDPREFIX_WIDTH-1 downto 0) := (others => '0');
|
variable tmp : std_logic_vector(GUIDPREFIX_WIDTH-1 downto 0) := (others => '0');
|
||||||
|
|||||||
@ -315,13 +315,13 @@ architecture arch of rtps_discovery_module is
|
|||||||
-- SEARCH_PARTICIPANT Search memory for Participant Entry with GUID Prefix equal to "guid" signal.
|
-- SEARCH_PARTICIPANT Search memory for Participant Entry with GUID Prefix equal to "guid" signal.
|
||||||
-- Set "participant_data.addr" to Base Address of found Participant Entry or PARTICIPANT_MEMORY_MAX_ADDRESS if nothing found.
|
-- Set "participant_data.addr" to Base Address of found Participant Entry or PARTICIPANT_MEMORY_MAX_ADDRESS if nothing found.
|
||||||
-- "participant_data" contains memory Participant Data according to "mem_r.field_flags".
|
-- "participant_data" contains memory Participant Data according to "mem_r.field_flags".
|
||||||
-- INSERT_PARTICIPANT Write Participant Data to next avialable empty slot.
|
-- INSERT_PARTICIPANT Write Participant Data to next available empty slot.
|
||||||
-- UPDATE_PARTICIPANT Update the Participant Data of the Participant Entry pointed by "participant_data.addr" according to the "mem_r.field_flags" flags.
|
-- UPDATE_PARTICIPANT Update the Participant Data of the Participant Entry pointed by "participant_data.addr" according to the "mem_r.field_flags" flags.
|
||||||
-- REMOVE_PARTICIPANT Remove the Participant Entry pointed by "participant_data.addr".
|
-- REMOVE_PARTICIPANT Remove the Participant Entry pointed by "participant_data.addr".
|
||||||
-- "participant_data.addr" is set to the next Endpoint (or ENDPOINT_MEMORY_MAX_ADDRESS if no next Endpoint exists)
|
-- "participant_data.addr" is set to the next Endpoint (or ENDPOINT_MEMORY_MAX_ADDRESS if no next Endpoint exists)
|
||||||
-- GET_NEXT_PARTICIPANT Get Participant Data of next participant (from the one pointed by "participant_data.addr") according to "mem_r.field_flags".
|
-- GET_NEXT_PARTICIPANT Get Participant Data of next participant (from the one pointed by "participant_data.addr") according to "mem_r.field_flags".
|
||||||
-- "participant_data.addr" is set to the Address of the Participant, or PARTICIPANT_MEMORY_MAX_ADDRESS if no Participant in Memory
|
-- "participant_data.addr" is set to the Address of the Participant, or PARTICIPANT_MEMORY_MAX_ADDRESS if no Participant in Memory
|
||||||
-- GET_PATICIPANT Get Participant Data of participant pointed by "mem_r.addr" according to "mem_r.field_flags".
|
-- GET_PARTICIPANT Get Participant Data of participant pointed by "mem_r.addr" according to "mem_r.field_flags".
|
||||||
-- Already fetched Data of the same Participant is not modified
|
-- Already fetched Data of the same Participant is not modified
|
||||||
type MEM_OPCODE_TYPE is (NOP, SEARCH_PARTICIPANT, INSERT_PARTICIPANT, UPDATE_PARTICIPANT, GET_NEXT_PARTICIPANT, REMOVE_PARTICIPANT, GET_PARTICIPANT);
|
type MEM_OPCODE_TYPE is (NOP, SEARCH_PARTICIPANT, INSERT_PARTICIPANT, UPDATE_PARTICIPANT, GET_NEXT_PARTICIPANT, REMOVE_PARTICIPANT, GET_PARTICIPANT);
|
||||||
-- RTPS Data Submessage Content:
|
-- RTPS Data Submessage Content:
|
||||||
@ -412,7 +412,7 @@ architecture arch of rtps_discovery_module is
|
|||||||
signal endpoint_mask, endpoint_mask_next : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
signal endpoint_mask, endpoint_mask_next : std_logic_vector(0 to NUM_ENDPOINTS-1);
|
||||||
-- Signifies if the source of the Participant Data is compatible with our Participant
|
-- Signifies if the source of the Participant Data is compatible with our Participant
|
||||||
signal participant_match, participant_match_next : std_logic;
|
signal participant_match, participant_match_next : std_logic;
|
||||||
-- Signifies if the Packet is comming from a Subscriber Endpoint
|
-- Signifies if the Packet is coming from a Subscriber Endpoint
|
||||||
signal is_subscriber, is_subscriber_next : std_logic;
|
signal is_subscriber, is_subscriber_next : std_logic;
|
||||||
-- Signifies that the read Locator is a Metatraffic Locator
|
-- Signifies that the read Locator is a Metatraffic Locator
|
||||||
signal is_meta_addr, is_meta_addr_next : std_logic;
|
signal is_meta_addr, is_meta_addr_next : std_logic;
|
||||||
@ -549,7 +549,7 @@ architecture arch of rtps_discovery_module is
|
|||||||
signal mem_read : std_logic;
|
signal mem_read : std_logic;
|
||||||
signal mem_abort_read : std_logic;
|
signal mem_abort_read : std_logic;
|
||||||
|
|
||||||
--*****ALIAS DEFINATION*****
|
--*****ALIAS DEFINITION*****
|
||||||
-- ENDPOINT FRAME HEADER
|
-- ENDPOINT FRAME HEADER
|
||||||
alias header_opcode : std_logic_vector(7 downto 0) is data_in(31 downto 24);
|
alias header_opcode : std_logic_vector(7 downto 0) is data_in(31 downto 24);
|
||||||
alias header_flags : std_logic_vector(7 downto 0) is data_in(23 downto 16);
|
alias header_flags : std_logic_vector(7 downto 0) is data_in(23 downto 16);
|
||||||
@ -776,7 +776,7 @@ begin
|
|||||||
variable tmp_default_qos_match : DEFAULT_QOS_MATCH_TYPE;
|
variable tmp_default_qos_match : DEFAULT_QOS_MATCH_TYPE;
|
||||||
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
||||||
variable mem_seq_nr : SEQUENCENUMBER_TYPE;
|
variable mem_seq_nr : SEQUENCENUMBER_TYPE;
|
||||||
-- NOTE: We convert the bitamp to a slv to make operations easier (The tool should handle both cases equally)
|
-- NOTE: We convert the bitmap to a slv to make operations easier (The tool should handle both cases equally)
|
||||||
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
||||||
begin
|
begin
|
||||||
--DEFAULT Registered
|
--DEFAULT Registered
|
||||||
@ -954,7 +954,7 @@ begin
|
|||||||
reader_flags_next <= (READER_EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, READER_EXPECTS_HISTORICAL_DATA_FLAG => DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG, READER_IS_BEST_EFFORT_FLAG => DEFAULT_IS_BEST_EFFORT_FLAG, others => '0');
|
reader_flags_next <= (READER_EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, READER_EXPECTS_HISTORICAL_DATA_FLAG => DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG, READER_IS_BEST_EFFORT_FLAG => DEFAULT_IS_BEST_EFFORT_FLAG, others => '0');
|
||||||
rcvd_next <= (others => '0');
|
rcvd_next <= (others => '0');
|
||||||
ud_status_next <= '0';
|
ud_status_next <= '0';
|
||||||
-- NOTE: We work with a "mark by default, and unmark on first missmatch" System.
|
-- NOTE: We work with a "mark by default, and unmark on first mismatch" System.
|
||||||
-- This assumes that each RxO QoS parameter occur only once in the list, else the behavior is undefined.
|
-- This assumes that each RxO QoS parameter occur only once in the list, else the behavior is undefined.
|
||||||
participant_match_next <= '1';
|
participant_match_next <= '1';
|
||||||
endpoint_mask_next <= (others => '1');
|
endpoint_mask_next <= (others => '1');
|
||||||
@ -1493,13 +1493,13 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
elsif (ud_status = '1') then
|
elsif (ud_status = '1') then
|
||||||
-- NOTE: If the DATA message has a paylaod with DATA, the parsed in-line QoS (i.e. PID_STATUS_INFO) is ignored
|
-- NOTE: If the DATA message has a payload with DATA, the parsed in-line QoS (i.e. PID_STATUS_INFO) is ignored
|
||||||
-- NOTE: A Sanity check is made on the GUID. It is expected that the GUID is correctly configured by parsing of an PID_KEY_HASH.
|
-- NOTE: A Sanity check is made on the GUID. It is expected that the GUID is correctly configured by parsing of an PID_KEY_HASH.
|
||||||
-- According to the specification the PID_KEY_HASH is not a requirement, and the Key should be sent as serialized key in the DATA
|
-- According to the specification the PID_KEY_HASH is not a requirement, and the Key should be sent as serialized key in the DATA
|
||||||
-- message payload. We do not parse the serialized key (because, quite frankly, we can't since we do not have a definition of it...)
|
-- message payload. We do not parse the serialized key (because, quite frankly, we can't since we do not have a definition of it...)
|
||||||
-- This means that if the sender does not send a PID_KEY_HASH and the sanity check here fails, the Packet will be skipped, and thus
|
-- This means that if the sender does not send a PID_KEY_HASH and the sanity check here fails, the Packet will be skipped, and thus
|
||||||
-- processing from the sender will effectively stall, since the SN will never be acknowledged.
|
-- processing from the sender will effectively stall, since the SN will never be acknowledged.
|
||||||
-- Participant Unamtch
|
-- Participant Unmatch
|
||||||
if (message_type = PDP and guid(3) = ENTITYID_PARTICIPANT) then
|
if (message_type = PDP and guid(3) = ENTITYID_PARTICIPANT) then
|
||||||
participant_match_next <= '0';
|
participant_match_next <= '0';
|
||||||
stage_next <= PARTICIPANT_MATCH_STAGE;
|
stage_next <= PARTICIPANT_MATCH_STAGE;
|
||||||
@ -1574,7 +1574,7 @@ begin
|
|||||||
else
|
else
|
||||||
cnt_next <= cnt + 1;
|
cnt_next <= cnt + 1;
|
||||||
end if;
|
end if;
|
||||||
-- Participant Mesasge Kind
|
-- Participant Message Kind
|
||||||
when 3 =>
|
when 3 =>
|
||||||
-- NOTE: Rest of Participant Message is ignored
|
-- NOTE: Rest of Participant Message is ignored
|
||||||
-- XXX: The Participant Message Data may contain additional data, and according to DDSI-RTPS 2.3
|
-- XXX: The Participant Message Data may contain additional data, and according to DDSI-RTPS 2.3
|
||||||
@ -1635,7 +1635,7 @@ begin
|
|||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
when PROCESS_GAP =>
|
when PROCESS_GAP =>
|
||||||
-- NOTE: Data is already endain swapped by rtps_handler
|
-- NOTE: Data is already endian swapped by rtps_handler
|
||||||
|
|
||||||
-- Input FIFO Guard
|
-- Input FIFO Guard
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
@ -1738,7 +1738,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
when PROCESS_HEARTBEAT =>
|
when PROCESS_HEARTBEAT =>
|
||||||
-- NOTE: Data is already endain swapped by rtps_handler
|
-- NOTE: Data is already endian swapped by rtps_handler
|
||||||
|
|
||||||
-- Input FIFO Guard
|
-- Input FIFO Guard
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
@ -1776,7 +1776,7 @@ begin
|
|||||||
if (participant_data.heartbeat_res_time = TIME_INVALID) then
|
if (participant_data.heartbeat_res_time = TIME_INVALID) then
|
||||||
-- If current Sequence Number obsolete (removed from source history cache)
|
-- If current Sequence Number obsolete (removed from source history cache)
|
||||||
if (first_seq_nr > mem_seq_nr) then
|
if (first_seq_nr > mem_seq_nr) then
|
||||||
-- Store new expected Sequence Number and set Response Dealy
|
-- Store new expected Sequence Number and set Response Delay
|
||||||
mem_op_start <= '1';
|
mem_op_start <= '1';
|
||||||
mem_opcode <= UPDATE_PARTICIPANT;
|
mem_opcode <= UPDATE_PARTICIPANT;
|
||||||
mem_r.addr <= participant_data.addr;
|
mem_r.addr <= participant_data.addr;
|
||||||
@ -1854,7 +1854,7 @@ begin
|
|||||||
stage_next <= SKIP_PACKET;
|
stage_next <= SKIP_PACKET;
|
||||||
end if;
|
end if;
|
||||||
when PROCESS_ACKNACK =>
|
when PROCESS_ACKNACK =>
|
||||||
-- NOTE: Data is already endain swapped by rtps_handler
|
-- NOTE: Data is already endian swapped by rtps_handler
|
||||||
|
|
||||||
-- Input FIFO Guard
|
-- Input FIFO Guard
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
@ -2165,7 +2165,7 @@ begin
|
|||||||
check_time_next <= participant_data.acknack_res_time;
|
check_time_next <= participant_data.acknack_res_time;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
-- HELPER STAGE (Lacthes Participant GUID for participant Unmatching)
|
-- HELPER STAGE (Latches Participant GUID for participant Unmatching)
|
||||||
when 6 =>
|
when 6 =>
|
||||||
assert stable(clk, check_mask(participant_data.field_flags, PMF_GUIDPREFIX_FLAG)) severity FAILURE;
|
assert stable(clk, check_mask(participant_data.field_flags, PMF_GUIDPREFIX_FLAG)) severity FAILURE;
|
||||||
|
|
||||||
@ -2199,7 +2199,7 @@ begin
|
|||||||
|
|
||||||
-- NOTE: The HEARTBEAT Time is re-checked in order to update the check_time
|
-- NOTE: The HEARTBEAT Time is re-checked in order to update the check_time
|
||||||
-- Continue
|
-- Continue
|
||||||
cnt_next <= 4; -- CHECK HERTBEAT Response Time
|
cnt_next <= 4; -- CHECK HEARTBEAT Response Time
|
||||||
-- POST-DATA-SENT
|
-- POST-DATA-SENT
|
||||||
when 8 =>
|
when 8 =>
|
||||||
assert stable(clk, check_mask(participant_data.field_flags, PMF_EXTRA_FLAGS_FLAG)) severity FAILURE;
|
assert stable(clk, check_mask(participant_data.field_flags, PMF_EXTRA_FLAGS_FLAG)) severity FAILURE;
|
||||||
@ -2611,7 +2611,7 @@ begin
|
|||||||
null;
|
null;
|
||||||
end case;
|
end case;
|
||||||
when SELECT_LOCATOR =>
|
when SELECT_LOCATOR =>
|
||||||
-- NOTE: If port is set to something other than UDP_PORT_INVALID, the addr is also guarranteed to be unequal IPv4_ADDRESS_INVALID (and vice versa)
|
-- NOTE: If port is set to something other than UDP_PORT_INVALID, the addr is also guaranteed to be unequal IPv4_ADDRESS_INVALID (and vice versa)
|
||||||
-- We compare only the port to save on resources (If necessary we could define a bit for that).
|
-- We compare only the port to save on resources (If necessary we could define a bit for that).
|
||||||
|
|
||||||
-- DEFAULT
|
-- DEFAULT
|
||||||
@ -2621,7 +2621,7 @@ begin
|
|||||||
-- Participant Data
|
-- Participant Data
|
||||||
when PDP =>
|
when PDP =>
|
||||||
if (PREFER_MULTICAST) then
|
if (PREFER_MULTICAST) then
|
||||||
--*METATRAFIC*
|
--*METATRAFFIC*
|
||||||
-- Multicast Locator Valid
|
-- Multicast Locator Valid
|
||||||
if (meta_mc_port /= UDP_PORT_INVALID) then
|
if (meta_mc_port /= UDP_PORT_INVALID) then
|
||||||
meta_addr_next <= meta_mc_addr;
|
meta_addr_next <= meta_mc_addr;
|
||||||
@ -2650,7 +2650,7 @@ begin
|
|||||||
def_port_next <= USER_IPv4_MULTICAST_PORT;
|
def_port_next <= USER_IPv4_MULTICAST_PORT;
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
--*METATRAFIC*
|
--*METATRAFFIC*
|
||||||
-- Unicast Locator Valid
|
-- Unicast Locator Valid
|
||||||
if (meta_uc_port /= UDP_PORT_INVALID) then
|
if (meta_uc_port /= UDP_PORT_INVALID) then
|
||||||
meta_addr_next <= meta_uc_addr;
|
meta_addr_next <= meta_uc_addr;
|
||||||
@ -2733,7 +2733,7 @@ begin
|
|||||||
-- NOTE: This assumes that the Parameter is padded with zeroes (Since we also compare the padding)
|
-- NOTE: This assumes that the Parameter is padded with zeroes (Since we also compare the padding)
|
||||||
-- XTypes 7.4.1.1 requires padding bytes for "PLAIN_CDR" to be zero, but does not specify the value for "PL_CDR"
|
-- XTypes 7.4.1.1 requires padding bytes for "PLAIN_CDR" to be zero, but does not specify the value for "PL_CDR"
|
||||||
|
|
||||||
-- Unmark matches on string comparison missmatch
|
-- Unmark matches on string comparison mismatch
|
||||||
case (string_content) is
|
case (string_content) is
|
||||||
when TOPIC_NAME_TYPE =>
|
when TOPIC_NAME_TYPE =>
|
||||||
for i in 0 to NUM_ENDPOINTS-1 loop
|
for i in 0 to NUM_ENDPOINTS-1 loop
|
||||||
@ -4194,7 +4194,7 @@ begin
|
|||||||
mem_op_done <= '1';
|
mem_op_done <= '1';
|
||||||
|
|
||||||
if (mem_op_start = '1') then
|
if (mem_op_start = '1') then
|
||||||
-- Latch Signals needed for Mermory Operation
|
-- Latch Signals needed for Memory Operation
|
||||||
participant_latch_data_next <= mem_r;
|
participant_latch_data_next <= mem_r;
|
||||||
|
|
||||||
case(mem_opcode) is
|
case(mem_opcode) is
|
||||||
|
|||||||
@ -191,9 +191,9 @@ architecture arch of rtps_handler is
|
|||||||
signal align_sig, align_sig_next : std_logic_vector((3*BYTE_WIDTH)-1 downto 0);
|
signal align_sig, align_sig_next : std_logic_vector((3*BYTE_WIDTH)-1 downto 0);
|
||||||
-- 4-Byte Aligned Input (see align_prc)
|
-- 4-Byte Aligned Input (see align_prc)
|
||||||
signal data_in_aligned : std_logic_vector(WORD_WIDTH-1 downto 0);
|
signal data_in_aligned : std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||||
-- 4-Byte Alignement offset (see align_prc)
|
-- 4-Byte Alignment offset (see align_prc)
|
||||||
signal align_offset, align_offset_next : std_logic_vector(1 downto 0);
|
signal align_offset, align_offset_next : std_logic_vector(1 downto 0);
|
||||||
-- 4-Byte Alignement offset latch
|
-- 4-Byte Alignment offset latch
|
||||||
signal offset_latch, offset_latch_next : std_logic_vector(1 downto 0);
|
signal offset_latch, offset_latch_next : std_logic_vector(1 downto 0);
|
||||||
-- IPv4 Source Address latch
|
-- IPv4 Source Address latch
|
||||||
signal src_addr, src_addr_next : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0);
|
signal src_addr, src_addr_next : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0);
|
||||||
@ -234,7 +234,7 @@ architecture arch of rtps_handler is
|
|||||||
signal sn_latch_2, sn_latch_2_next : SEQUENCENUMBER_TYPE;
|
signal sn_latch_2, sn_latch_2_next : SEQUENCENUMBER_TYPE;
|
||||||
-- Sequence Number latch
|
-- Sequence Number latch
|
||||||
signal sn_latch_3, sn_latch_3_next : SEQUENCENUMBER_TYPE;
|
signal sn_latch_3, sn_latch_3_next : SEQUENCENUMBER_TYPE;
|
||||||
-- Long atch
|
-- Long latch
|
||||||
signal long_latch, long_latch_next : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
|
signal long_latch, long_latch_next : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
|
||||||
-- Unsigned long latch
|
-- Unsigned long latch
|
||||||
signal ulong_latch, ulong_latch_next : unsigned(CDR_LONG_WIDTH-1 downto 0);
|
signal ulong_latch, ulong_latch_next : unsigned(CDR_LONG_WIDTH-1 downto 0);
|
||||||
@ -300,7 +300,7 @@ begin
|
|||||||
last_word_out_rtps <= last_word_out_sig;
|
last_word_out_rtps <= last_word_out_sig;
|
||||||
|
|
||||||
-- This process is responsible for reading the input FIFO 4-Byte Word aligned.
|
-- This process is responsible for reading the input FIFO 4-Byte Word aligned.
|
||||||
-- Even though DDSI-RTPS 2.3 defines that Submessages begin at 4-byte boundries, meaning that the
|
-- Even though DDSI-RTPS 2.3 defines that Submessages begin at 4-byte boundaries, meaning that the
|
||||||
-- submessage length is always a multiple of 4, the same is not defined for the "octetstoinlineQoS".
|
-- submessage length is always a multiple of 4, the same is not defined for the "octetstoinlineQoS".
|
||||||
-- Therefore alignment is not guaranteed from the "SKIP_DATA_HEADER" stage onwards and has to be ensured explicitly.
|
-- Therefore alignment is not guaranteed from the "SKIP_DATA_HEADER" stage onwards and has to be ensured explicitly.
|
||||||
-- We store the lower 2 bits of the octet length (Which denotes the 4-Byte alignment offset), and together
|
-- We store the lower 2 bits of the octet length (Which denotes the 4-Byte alignment offset), and together
|
||||||
@ -341,7 +341,7 @@ begin
|
|||||||
-- PARSE_ACKNACK Parse AckNack Submessage
|
-- PARSE_ACKNACK Parse AckNack Submessage
|
||||||
-- PARSE_GAP Parse GAP Submessage
|
-- PARSE_GAP Parse GAP Submessage
|
||||||
-- PARSE_DATA Parse DATA Submessage
|
-- PARSE_DATA Parse DATA Submessage
|
||||||
-- SKIP_DATA_HEADER Skip uknown DATA Submessage Sub-Header part
|
-- SKIP_DATA_HEADER Skip unknown DATA Submessage Sub-Header part
|
||||||
-- MATCH_DST_ENDPOINT Determine destination of Submessage
|
-- MATCH_DST_ENDPOINT Determine destination of Submessage
|
||||||
-- PUSH_PAYLOAD_HEADER Write Payload Header into relevant output FIFOs
|
-- PUSH_PAYLOAD_HEADER Write Payload Header into relevant output FIFOs
|
||||||
-- PUSH_PAYLOAD Write Payload into relevant output FIFOs (May read directly from input FIFO)
|
-- PUSH_PAYLOAD Write Payload into relevant output FIFOs (May read directly from input FIFO)
|
||||||
@ -485,7 +485,7 @@ begin
|
|||||||
stage_next <= SKIP_PACKET;
|
stage_next <= SKIP_PACKET;
|
||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
-- First RTPS Header word (Fields: Protocolld)
|
-- First RTPS Header word (Fields: ProtocolID)
|
||||||
when RTPS_HEADER_1 =>
|
when RTPS_HEADER_1 =>
|
||||||
-- Input FIFO Guard
|
-- Input FIFO Guard
|
||||||
if (empty = '0') then
|
if (empty = '0') then
|
||||||
@ -697,11 +697,11 @@ begin
|
|||||||
rd_guard := '1';
|
rd_guard := '1';
|
||||||
|
|
||||||
case (cnt) is
|
case (cnt) is
|
||||||
-- Timesatmp 1/2
|
-- Timestamp 1/2
|
||||||
when 0 =>
|
when 0 =>
|
||||||
src_ts_next(0) <= unsigned(data_in_swapped);
|
src_ts_next(0) <= unsigned(data_in_swapped);
|
||||||
cnt_next <= cnt + 1;
|
cnt_next <= cnt + 1;
|
||||||
-- Timesatmp 2/2
|
-- Timestamp 2/2
|
||||||
when 1 =>
|
when 1 =>
|
||||||
src_ts_next(1) <= unsigned(data_in_swapped);
|
src_ts_next(1) <= unsigned(data_in_swapped);
|
||||||
|
|
||||||
@ -1087,7 +1087,7 @@ begin
|
|||||||
if ((read_cnt & "00") >= data_header_end) then
|
if ((read_cnt & "00") >= data_header_end) then
|
||||||
stage_next <= MATCH_DST_ENDPOINT;
|
stage_next <= MATCH_DST_ENDPOINT;
|
||||||
cnt_next <= 0;
|
cnt_next <= 0;
|
||||||
-- Fix alignement
|
-- Fix alignment
|
||||||
align_offset_next <= offset_latch;
|
align_offset_next <= offset_latch;
|
||||||
-- Input Guard
|
-- Input Guard
|
||||||
elsif(empty = '0') then
|
elsif(empty = '0') then
|
||||||
@ -1363,7 +1363,7 @@ begin
|
|||||||
if (read_cnt = sub_end) then
|
if (read_cnt = sub_end) then
|
||||||
-- Begin parsing of next submessage
|
-- Begin parsing of next submessage
|
||||||
stage_next <= RTPS_SUB_HEADER;
|
stage_next <= RTPS_SUB_HEADER;
|
||||||
-- Reset alignement
|
-- Reset alignment
|
||||||
align_offset_next <= (others => '0');
|
align_offset_next <= (others => '0');
|
||||||
-- Reset Submessage End
|
-- Reset Submessage End
|
||||||
sub_end_next <= (others => '1');
|
sub_end_next <= (others => '1');
|
||||||
@ -1382,7 +1382,7 @@ begin
|
|||||||
last_word_out_sig <= '1';
|
last_word_out_sig <= '1';
|
||||||
-- Begin parsing of next submessage
|
-- Begin parsing of next submessage
|
||||||
stage_next <= RTPS_SUB_HEADER;
|
stage_next <= RTPS_SUB_HEADER;
|
||||||
-- Reset alignement
|
-- Reset alignment
|
||||||
align_offset_next <= (others => '0');
|
align_offset_next <= (others => '0');
|
||||||
-- Reset Submessage End
|
-- Reset Submessage End
|
||||||
sub_end_next <= (others => '1');
|
sub_end_next <= (others => '1');
|
||||||
|
|||||||
@ -158,7 +158,7 @@ begin
|
|||||||
when IDLE =>
|
when IDLE =>
|
||||||
-- Currently Selected Input FIFO is empty
|
-- Currently Selected Input FIFO is empty
|
||||||
if (empty(selector) = '1') then
|
if (empty(selector) = '1') then
|
||||||
-- Wrap from End to BEgining (Circular selection)
|
-- Wrap from End to Beginning (Circular selection)
|
||||||
if (selector = RTPS_OUT_WIDTH-1) then
|
if (selector = RTPS_OUT_WIDTH-1) then
|
||||||
selector_next <= 0;
|
selector_next <= 0;
|
||||||
else
|
else
|
||||||
|
|||||||
@ -254,7 +254,7 @@ package rtps_package is
|
|||||||
constant SID_DATA_FRAG : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"16";
|
constant SID_DATA_FRAG : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"16";
|
||||||
|
|
||||||
-- *SUBMESSAGE FLAG POSITIONS*
|
-- *SUBMESSAGE FLAG POSITIONS*
|
||||||
-- NOTE: The KEY and NON_STANDARD_PAYOAD Flags for the DATA_FRAG Submessage are off by one (-1) from this positions
|
-- NOTE: The KEY and NON_STANDARD_PAYLOAD Flags for the DATA_FRAG Submessage are off by one (-1) from this positions
|
||||||
constant SUBMESSAGE_ENDIAN_FLAG_POS : natural := 0;
|
constant SUBMESSAGE_ENDIAN_FLAG_POS : natural := 0;
|
||||||
constant SUBMESSAGE_FINAL_FLAG_POS : natural := 1;
|
constant SUBMESSAGE_FINAL_FLAG_POS : natural := 1;
|
||||||
constant SUBMESSAGE_INLINE_QOS_FLAG_POS : natural := 1;
|
constant SUBMESSAGE_INLINE_QOS_FLAG_POS : natural := 1;
|
||||||
@ -373,7 +373,7 @@ package rtps_package is
|
|||||||
|
|
||||||
-- *LOCATOR KIND*
|
-- *LOCATOR KIND*
|
||||||
constant LOCATOR_KIND_INVALID : std_logic_vector := std_logic_vector(to_signed(-1,LOCATOR_KIND_WIDTH));
|
constant LOCATOR_KIND_INVALID : std_logic_vector := std_logic_vector(to_signed(-1,LOCATOR_KIND_WIDTH));
|
||||||
constant LOCATOR_KIND_RESERVERD : std_logic_vector := std_logic_vector(to_signed(0,LOCATOR_KIND_WIDTH));
|
constant LOCATOR_KIND_RESERVED : std_logic_vector := std_logic_vector(to_signed(0,LOCATOR_KIND_WIDTH));
|
||||||
constant LOCATOR_KIND_UDPv4 : std_logic_vector := std_logic_vector(to_signed(1,LOCATOR_KIND_WIDTH));
|
constant LOCATOR_KIND_UDPv4 : std_logic_vector := std_logic_vector(to_signed(1,LOCATOR_KIND_WIDTH));
|
||||||
constant LOCATOR_KIND_UDPv6 : std_logic_vector := std_logic_vector(to_signed(2,LOCATOR_KIND_WIDTH));
|
constant LOCATOR_KIND_UDPv6 : std_logic_vector := std_logic_vector(to_signed(2,LOCATOR_KIND_WIDTH));
|
||||||
|
|
||||||
@ -517,7 +517,7 @@ package rtps_package is
|
|||||||
function substr(first : natural; last : natural; str : string) return USER_STRING_TYPE;
|
function substr(first : natural; last : natural; str : string) return USER_STRING_TYPE;
|
||||||
|
|
||||||
type CONFIG_TYPE is record
|
type CONFIG_TYPE is record
|
||||||
-- If Endpoint uses Keye Topics
|
-- If Endpoint uses Keyed Topics
|
||||||
WITH_KEY : boolean;
|
WITH_KEY : boolean;
|
||||||
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
|
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
|
||||||
PUSH_MODE : boolean; -- (only relevant to Writers)
|
PUSH_MODE : boolean; -- (only relevant to Writers)
|
||||||
@ -591,7 +591,7 @@ package rtps_package is
|
|||||||
-- Quartus cannot handle arrays of records containing subtypes of strings (USER_STRING_ARRAY_TYPE) in generics.
|
-- Quartus cannot handle arrays of records containing subtypes of strings (USER_STRING_ARRAY_TYPE) in generics.
|
||||||
-- We define a special record type that does not contain string subtypes (TOPIC and TYPE) and a conversion function as a workaround.
|
-- We define a special record type that does not contain string subtypes (TOPIC and TYPE) and a conversion function as a workaround.
|
||||||
type QUARTUS_CONFIG_TYPE is record
|
type QUARTUS_CONFIG_TYPE is record
|
||||||
-- If Endpoint uses Keye Topics
|
-- If Endpoint uses Keyed Topics
|
||||||
WITH_KEY : boolean;
|
WITH_KEY : boolean;
|
||||||
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
|
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
|
||||||
PUSH_MODE : boolean; -- (only relevant to Writers)
|
PUSH_MODE : boolean; -- (only relevant to Writers)
|
||||||
@ -737,7 +737,7 @@ package body rtps_package is
|
|||||||
ret(0) := to_unsigned(s, WORD_WIDTH);
|
ret(0) := to_unsigned(s, WORD_WIDTH);
|
||||||
|
|
||||||
-- If Fraction Bit is >= 500 ms it cannot be represented as a natural (because naturals/integers are signed).
|
-- If Fraction Bit is >= 500 ms it cannot be represented as a natural (because naturals/integers are signed).
|
||||||
-- So we handle that manualy
|
-- So we handle that manually
|
||||||
if (ns >= half_sec) then
|
if (ns >= half_sec) then
|
||||||
ret(1) := to_unsigned(natural(CEIL(real(ns-half_sec)*unit)),WORD_WIDTH);
|
ret(1) := to_unsigned(natural(CEIL(real(ns-half_sec)*unit)),WORD_WIDTH);
|
||||||
ret(1)(31) := '1';
|
ret(1)(31) := '1';
|
||||||
@ -1202,7 +1202,7 @@ package body rtps_package is
|
|||||||
function to_guid(A : std_logic_vector) return GUID_TYPE is
|
function to_guid(A : std_logic_vector) return GUID_TYPE is
|
||||||
variable ret : GUID_TYPE;
|
variable ret : GUID_TYPE;
|
||||||
begin
|
begin
|
||||||
assert (A'length = GUID_WIDTH) report "SLV Length missmatch" severity FAILURE;
|
assert (A'length = GUID_WIDTH) report "SLV Length mismatch" severity FAILURE;
|
||||||
ret := GUID_UNKNOWN;
|
ret := GUID_UNKNOWN;
|
||||||
for i in 0 to ret'length-1 loop
|
for i in 0 to ret'length-1 loop
|
||||||
ret(i) := get_sub_vector(A, i, ret(i)'length, TRUE);
|
ret(i) := get_sub_vector(A, i, ret(i)'length, TRUE);
|
||||||
|
|||||||
@ -357,13 +357,13 @@ architecture arch of rtps_reader is
|
|||||||
signal mem_addr_base, mem_addr_base_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_base, mem_addr_base_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- General Memory Address Latch
|
-- General Memory Address Latch
|
||||||
signal mem_addr_latch, mem_addr_latch_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_latch, mem_addr_latch_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- General Purpose Couter
|
-- General Purpose Counter
|
||||||
signal mem_cnt, mem_cnt_next : natural range 0 to 29;
|
signal mem_cnt, mem_cnt_next : natural range 0 to 29;
|
||||||
-- Latch for Endpoint Data from Memory
|
-- Latch for Endpoint Data from Memory
|
||||||
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
|
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
|
||||||
-- Latch for Endpoint Data from main process
|
-- Latch for Endpoint Data from main process
|
||||||
signal mem_endpoint_latch_data, mem_endpoint_latch_data_next : ENDPOINT_DATA_TYPE;
|
signal mem_endpoint_latch_data, mem_endpoint_latch_data_next : ENDPOINT_DATA_TYPE;
|
||||||
-- Signal used to write to ALL memories simutanously
|
-- Signal used to write to ALL memories simultaneously
|
||||||
signal multi_w : std_logic;
|
signal multi_w : std_logic;
|
||||||
|
|
||||||
-- *ENDPOINT MEMORY CONNECTION SIGNALS*
|
-- *ENDPOINT MEMORY CONNECTION SIGNALS*
|
||||||
@ -550,12 +550,12 @@ begin
|
|||||||
-- INITIATE_ENDPOINT_SEARCH Initiate Endpoint Search Memory Operation. This state is used to start the Search operation as soon as the required data is available
|
-- INITIATE_ENDPOINT_SEARCH Initiate Endpoint Search Memory Operation. This state is used to start the Search operation as soon as the required data is available
|
||||||
-- METATRAFFIC_OPERATION State handling the Metatraffic Operations
|
-- METATRAFFIC_OPERATION State handling the Metatraffic Operations
|
||||||
-- PROCESS_HEARTBEAT Parse RTPS HEARTBEAT Message. Update stored Sequence Number if necessary. Set HEARTBEAT response time accordingly.
|
-- PROCESS_HEARTBEAT Parse RTPS HEARTBEAT Message. Update stored Sequence Number if necessary. Set HEARTBEAT response time accordingly.
|
||||||
-- PROCESS_GAP Parse RTPS GAP Submsessage. Initiates search for next valid Sequence Number if currently expected Sequence Number is in GAP
|
-- PROCESS_GAP Parse RTPS GAP Submessage. Initiates search for next valid Sequence Number if currently expected Sequence Number is in GAP
|
||||||
-- FIND_NEXT_VALID_IN_BITMAP Iterate through Bitmap and find the next valid Sequence Number.
|
-- FIND_NEXT_VALID_IN_BITMAP Iterate through Bitmap and find the next valid Sequence Number.
|
||||||
-- INITIATE_ADD_CACHE_CHANGE_REQUEST Initiate an ADD_CACHE_CHANGE Operation
|
-- INITIATE_ADD_CACHE_CHANGE_REQUEST Initiate an ADD_CACHE_CHANGE Operation
|
||||||
-- ADD_CACHE_CHANGE Send CACHE_CHANGE Data
|
-- ADD_CACHE_CHANGE Send CACHE_CHANGE Data
|
||||||
-- PUSH_PAYLOAD Send CACHE_CHANGE Data (Direct Input Passthrough)
|
-- PUSH_PAYLOAD Send CACHE_CHANGE Data (Direct Input Passthrough)
|
||||||
-- FINALIZE_ADD_CACHE_CHANGE_REQUEST Wait for ADD_CACHE_CHANGE Operation Results. Update Endpoint Data if successfull.
|
-- FINALIZE_ADD_CACHE_CHANGE_REQUEST Wait for ADD_CACHE_CHANGE Operation Results. Update Endpoint Data if successful.
|
||||||
-- ENDPOINT_STALE_CHECK Check remote Endpoint Entries for Liveliness Lease Expiration, and Response Timeouts.
|
-- ENDPOINT_STALE_CHECK Check remote Endpoint Entries for Liveliness Lease Expiration, and Response Timeouts.
|
||||||
-- SEND_HEADER Send Output Data Header and RTPS Message Header
|
-- SEND_HEADER Send Output Data Header and RTPS Message Header
|
||||||
-- SEND_ACKNACK Send ACKNACK Submessage
|
-- SEND_ACKNACK Send ACKNACK Submessage
|
||||||
@ -564,7 +564,7 @@ begin
|
|||||||
-- SKIP_META_OPERATION Skip Metatraffic Operation
|
-- SKIP_META_OPERATION Skip Metatraffic Operation
|
||||||
parse_prc : process(all)
|
parse_prc : process(all)
|
||||||
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
||||||
-- NOTE: We convert the bitamp to a slv to make operations easier (The synthesizer should handle both cases equally)
|
-- NOTE: We convert the bitmap to a slv to make operations easier (The synthesizer should handle both cases equally)
|
||||||
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
||||||
variable rd_guard : std_logic;
|
variable rd_guard : std_logic;
|
||||||
begin
|
begin
|
||||||
@ -2058,7 +2058,7 @@ begin
|
|||||||
-- XXX: Possible Worst Case Path (64-bit addition and comparison in same clock)
|
-- XXX: Possible Worst Case Path (64-bit addition and comparison in same clock)
|
||||||
-- Update Check Time
|
-- Update Check Time
|
||||||
if (tmp_dw < check_time) then
|
if (tmp_dw < check_time) then
|
||||||
-- NOTE: Strictly speaking the check time may not EXACTLY represent the res_time (Since the last bit is ovverriden for a different functionality)
|
-- NOTE: Strictly speaking the check time may not EXACTLY represent the res_time (Since the last bit is overridden for a different functionality)
|
||||||
-- Since the difference is at most 1/10^(-32) seconds, this will never practically impose any problem (since the time will most certainly have
|
-- Since the difference is at most 1/10^(-32) seconds, this will never practically impose any problem (since the time will most certainly have
|
||||||
-- progressed beyond that difference from the check_time trigger to the actual res_time check).
|
-- progressed beyond that difference from the check_time trigger to the actual res_time check).
|
||||||
-- Nevertheless this has to be taken into account in testbenches that use "static" time.
|
-- Nevertheless this has to be taken into account in testbenches that use "static" time.
|
||||||
@ -2319,7 +2319,7 @@ begin
|
|||||||
mem_op_done <= '1';
|
mem_op_done <= '1';
|
||||||
|
|
||||||
if (mem_op_start = '1') then
|
if (mem_op_start = '1') then
|
||||||
-- Latch Signals needed for Mermory Operation
|
-- Latch Signals needed for Memory Operation
|
||||||
mem_endpoint_latch_data_next <= mem_r;
|
mem_endpoint_latch_data_next <= mem_r;
|
||||||
|
|
||||||
case(mem_opcode) is
|
case(mem_opcode) is
|
||||||
|
|||||||
@ -205,7 +205,7 @@ package rtps_test_package is
|
|||||||
|
|
||||||
-- Generic RTPS Endpoint Container
|
-- Generic RTPS Endpoint Container
|
||||||
type ENDPOINT_DATA_TYPE is record
|
type ENDPOINT_DATA_TYPE is record
|
||||||
-- Signifies if the Endoint Data represented by this Record is a Reader Endpoint
|
-- Signifies if the Endpoint Data represented by this Record is a Reader Endpoint
|
||||||
reader : boolean;
|
reader : boolean;
|
||||||
-- Signifies if the Data should be written in Little Endian
|
-- Signifies if the Data should be written in Little Endian
|
||||||
littleEndian : std_logic;
|
littleEndian : std_logic;
|
||||||
@ -284,7 +284,7 @@ package rtps_test_package is
|
|||||||
srank : natural;
|
srank : natural;
|
||||||
-- Generation Rank
|
-- Generation Rank
|
||||||
grank : natural;
|
grank : natural;
|
||||||
-- Absolut Generation Rank
|
-- Absolute Generation Rank
|
||||||
agrank : natural;
|
agrank : natural;
|
||||||
-- Source Timestamp
|
-- Source Timestamp
|
||||||
ts : TIME_TYPE;
|
ts : TIME_TYPE;
|
||||||
@ -313,7 +313,7 @@ package rtps_test_package is
|
|||||||
vstate : std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0);
|
vstate : std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0);
|
||||||
-- Disposed Generation Count
|
-- Disposed Generation Count
|
||||||
dis_gen_cnt : natural;
|
dis_gen_cnt : natural;
|
||||||
-- No Writers Geneation Count
|
-- No Writers Generation Count
|
||||||
no_w_gen_cnt : natural;
|
no_w_gen_cnt : natural;
|
||||||
end record;
|
end record;
|
||||||
|
|
||||||
@ -355,7 +355,7 @@ package rtps_test_package is
|
|||||||
|
|
||||||
constant DEFAULT_DDS_READER_TEST : DDS_READER_TEST_TYPE; -- Deferred to Package Body
|
constant DEFAULT_DDS_READER_TEST : DDS_READER_TEST_TYPE; -- Deferred to Package Body
|
||||||
|
|
||||||
-- Represntation of RTPS Writer Operations
|
-- Representation of RTPS Writer Operations
|
||||||
type RTPS_WRITER_TEST_TYPE is record
|
type RTPS_WRITER_TEST_TYPE is record
|
||||||
opcode : HISTORY_CACHE_OPCODE_TYPE;
|
opcode : HISTORY_CACHE_OPCODE_TYPE;
|
||||||
cc : CACHE_CHANGE_TYPE;
|
cc : CACHE_CHANGE_TYPE;
|
||||||
@ -399,7 +399,7 @@ package rtps_test_package is
|
|||||||
-- Writes RTPS Output Header based on "ref" to "output"
|
-- Writes RTPS Output Header based on "ref" to "output"
|
||||||
procedure gen_output_header(ref : in OUTPUT_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
procedure gen_output_header(ref : in OUTPUT_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
||||||
-- Fixes the "Packet Length" Field of the RTPS Output Reader with the current Packet Length
|
-- Fixes the "Packet Length" Field of the RTPS Output Reader with the current Packet Length
|
||||||
-- This function should be called to fnalize the RTPS packet
|
-- This function should be called to finalize the RTPS packet
|
||||||
procedure fix_output_packet(output : inout TEST_PACKET_TYPE);
|
procedure fix_output_packet(output : inout TEST_PACKET_TYPE);
|
||||||
-- Writes RTPS Header based on "ref" to "output"
|
-- Writes RTPS Header based on "ref" to "output"
|
||||||
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
||||||
@ -423,7 +423,7 @@ package rtps_test_package is
|
|||||||
-- participant participant to assert Liveliness
|
-- participant participant to assert Liveliness
|
||||||
-- manual TRUE if MANUAL_LIVELINESS_UPDATE, FALSE if AUTOMATIC_LIVELINESS_UPDATE
|
-- manual TRUE if MANUAL_LIVELINESS_UPDATE, FALSE if AUTOMATIC_LIVELINESS_UPDATE
|
||||||
-- extra_data Extra Data in Participant Message
|
-- extra_data Extra Data in Participant Message
|
||||||
-- output Destination of generated ouput
|
-- output Destination of generated output
|
||||||
procedure gen_liveliness_assertion(participant : in PARTICIPANT_DATA_TYPE; manual : in boolean; extra_data : in TEST_PACKET_TYPE; output : inout TEST_PACKET_TYPE);
|
procedure gen_liveliness_assertion(participant : in PARTICIPANT_DATA_TYPE; manual : in boolean; extra_data : in TEST_PACKET_TYPE; output : inout TEST_PACKET_TYPE);
|
||||||
-- Same as previous procedure, but extra_data is EMPTY
|
-- Same as previous procedure, but extra_data is EMPTY
|
||||||
procedure gen_liveliness_assertion(participant : in PARTICIPANT_DATA_TYPE; manual : in boolean; output : inout TEST_PACKET_TYPE);
|
procedure gen_liveliness_assertion(participant : in PARTICIPANT_DATA_TYPE; manual : in boolean; output : inout TEST_PACKET_TYPE);
|
||||||
@ -442,7 +442,7 @@ package rtps_test_package is
|
|||||||
procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
|
procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; endpoint : in ENDPOINT_DATA_TYPE; expectsInlineQoS : in boolean; littleEndian : in std_logic; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
|
||||||
-- Like previous procedure, but no Endpoint Data related PIDs are generated (only PID_KEY_HASH, PID_STATUS_INFO)
|
-- Like previous procedure, but no Endpoint Data related PIDs are generated (only PID_KEY_HASH, PID_STATUS_INFO)
|
||||||
procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE);
|
procedure gen_inline_qos(ref : in CACHE_CHANGE_TYPE; output : inout TEST_PACKET_TYPE);
|
||||||
-- Like previous procedure, but the data for PID_STATUS_INFO andf PID_KEY_HASH are given directly.
|
-- Like previous procedure, but the data for PID_STATUS_INFO and PID_KEY_HASH are given directly.
|
||||||
procedure gen_inline_qos(status : in CACHE_CHANGE_KIND_TYPE; key : in INSTANCE_HANDLE_TYPE; output : inout TEST_PACKET_TYPE);
|
procedure gen_inline_qos(status : in CACHE_CHANGE_KIND_TYPE; key : in INSTANCE_HANDLE_TYPE; output : inout TEST_PACKET_TYPE);
|
||||||
-- Like previous procedure but with "pid" and "offset" parameters.
|
-- Like previous procedure but with "pid" and "offset" parameters.
|
||||||
procedure gen_inline_qos(status : in CACHE_CHANGE_KIND_TYPE; key : in INSTANCE_HANDLE_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
|
procedure gen_inline_qos(status : in CACHE_CHANGE_KIND_TYPE; key : in INSTANCE_HANDLE_TYPE; output : inout TEST_PACKET_TYPE; pid : in std_logic_vector(PARAMETER_ID_WIDTH-1 downto 0); offset : in integer);
|
||||||
@ -569,7 +569,7 @@ package rtps_test_package is
|
|||||||
function int(n : integer; width : natural) return std_logic_vector;
|
function int(n : integer; width : natural) return std_logic_vector;
|
||||||
-- to_string Function for ScoreBoardPkg_discovery_module
|
-- to_string Function for ScoreBoardPkg_discovery_module
|
||||||
function to_string1 (input : std_logic_vector) return string;
|
function to_string1 (input : std_logic_vector) return string;
|
||||||
-- Find first valid Locator of Particiapnt Data
|
-- Find first valid Locator of Participant Data
|
||||||
-- ref Participant Data to extract Locator from
|
-- ref Participant Data to extract Locator from
|
||||||
-- meta If TRUE extracts metatraffic Locator
|
-- meta If TRUE extracts metatraffic Locator
|
||||||
-- NOTE: This assumes a specific sending order (Multicast before Unicast)!
|
-- NOTE: This assumes a specific sending order (Multicast before Unicast)!
|
||||||
@ -1198,7 +1198,7 @@ package body rtps_test_package is
|
|||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
-- *HEARTBEAT_FRAG*
|
-- *HEARTBEAT_FRAG*
|
||||||
elsif (ref.submessageID = SID_HEARTBEAT_FRAG) then
|
elsif (ref.submessageID = SID_HEARTBEAT_FRAG) then
|
||||||
-- Last Fargment Number
|
-- Last Fragment Number
|
||||||
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.lastFragmentNum);
|
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.lastFragmentNum);
|
||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
end if;
|
end if;
|
||||||
@ -1225,7 +1225,7 @@ package body rtps_test_package is
|
|||||||
-- Fragment Number
|
-- Fragment Number
|
||||||
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentStartingNumber);
|
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentStartingNumber);
|
||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
-- FragmentsinSubmessage & FragmentSize
|
-- FragmentsInSubmessage & FragmentSize
|
||||||
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentsInSubmessage) & endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentSize);
|
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentsInSubmessage) & endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentSize);
|
||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
-- Sample Size
|
-- Sample Size
|
||||||
@ -1266,7 +1266,7 @@ package body rtps_test_package is
|
|||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
end if;
|
end if;
|
||||||
-- Fix Alignement
|
-- Fix Alignment
|
||||||
if ((tmp + (ref.data.length*4)) mod 4 /= 0) then
|
if ((tmp + (ref.data.length*4)) mod 4 /= 0) then
|
||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
end if;
|
end if;
|
||||||
@ -1334,7 +1334,7 @@ package body rtps_test_package is
|
|||||||
elsif (ref.submessageLength /= (ref.submessageLength'reverse_range => '0')) then
|
elsif (ref.submessageLength /= (ref.submessageLength'reverse_range => '0')) then
|
||||||
output.length := start + to_integer(unsigned(ref.submessageLength));
|
output.length := start + to_integer(unsigned(ref.submessageLength));
|
||||||
end if;
|
end if;
|
||||||
-- *PAD/UKNOWN*
|
-- *PAD/UNKNOWN*
|
||||||
else
|
else
|
||||||
-- Padding
|
-- Padding
|
||||||
tmp := to_integer(unsigned(ref.submessageLength));
|
tmp := to_integer(unsigned(ref.submessageLength));
|
||||||
@ -1369,7 +1369,7 @@ package body rtps_test_package is
|
|||||||
output.data(output.length) := ref.writerId;
|
output.data(output.length) := ref.writerId;
|
||||||
output.length := output.length + 1;
|
output.length := output.length + 1;
|
||||||
end if;
|
end if;
|
||||||
-- Destination Enity ID
|
-- Destination Entity ID
|
||||||
if (is_meta) then
|
if (is_meta) then
|
||||||
if (ref.submessageID = SID_ACKNACK or ref.submessageID = SID_NACK_FRAG) then
|
if (ref.submessageID = SID_ACKNACK or ref.submessageID = SID_NACK_FRAG) then
|
||||||
output.data(output.length) := ref.writerId;
|
output.data(output.length) := ref.writerId;
|
||||||
@ -3053,7 +3053,7 @@ package body rtps_test_package is
|
|||||||
-- Insert at desired index
|
-- Insert at desired index
|
||||||
mem.s(ind) := sample;
|
mem.s(ind) := sample;
|
||||||
when others =>
|
when others =>
|
||||||
assert FALSE report "Unkown DESTINATION_ORDER_QOS" severity FAILURE;
|
assert FALSE report "Unknown DESTINATION_ORDER_QOS" severity FAILURE;
|
||||||
end case;
|
end case;
|
||||||
mem.slen := mem.slen + 1;
|
mem.slen := mem.slen + 1;
|
||||||
end procedure;
|
end procedure;
|
||||||
|
|||||||
@ -33,7 +33,7 @@ use work.rtps_config_package.all;
|
|||||||
-- This entity interacts with the HistoryCache via a start/done operation schema.
|
-- This entity interacts with the HistoryCache via a start/done operation schema.
|
||||||
-- The allowed operations are GET_CACHE_CHANGE, ACK_CACHE_CHANGE, NACK_CACHE_CHANGE, REMOVE_CACHE_CHANGE, GET_MIN_SN,
|
-- The allowed operations are GET_CACHE_CHANGE, ACK_CACHE_CHANGE, NACK_CACHE_CHANGE, REMOVE_CACHE_CHANGE, GET_MIN_SN,
|
||||||
-- and GET_MAX_SN.
|
-- and GET_MAX_SN.
|
||||||
-- Everytime new data is available ('data_available' signal of the HistoryCache is high), or data needs to be fetched to
|
-- every time new data is available ('data_available' signal of the HistoryCache is high), or data needs to be fetched to
|
||||||
-- satisfy a request the GET_CACHE_CHANGE operation is executed.
|
-- satisfy a request the GET_CACHE_CHANGE operation is executed.
|
||||||
-- Once a SN has been acknowledged by all matched remote (reliable) readers, either the ACK_CACHE_CHANGE operation is
|
-- Once a SN has been acknowledged by all matched remote (reliable) readers, either the ACK_CACHE_CHANGE operation is
|
||||||
-- performed on the HistoryCache to convey this information, or the REMOVE_CACHE_CHANGE operation is executed to remove
|
-- performed on the HistoryCache to convey this information, or the REMOVE_CACHE_CHANGE operation is executed to remove
|
||||||
@ -104,7 +104,7 @@ use work.rtps_config_package.all;
|
|||||||
entity rtps_writer is
|
entity rtps_writer is
|
||||||
generic (
|
generic (
|
||||||
-- HACK: FIXME: Quartus Workaround
|
-- HACK: FIXME: Quartus Workaround
|
||||||
-- Quartus does not allow to reference a generic insisde the generic block.
|
-- Quartus does not allow to reference a generic inside the generic block.
|
||||||
-- So we constrain the range later as constant
|
-- So we constrain the range later as constant
|
||||||
NUM_WRITERS : natural;
|
NUM_WRITERS : natural;
|
||||||
CONFIG_ARRAY : QUARTUS_CONFIG_ARRAY_TYPE;
|
CONFIG_ARRAY : QUARTUS_CONFIG_ARRAY_TYPE;
|
||||||
@ -172,7 +172,7 @@ architecture arch of rtps_writer is
|
|||||||
constant INLINE_QOS_T : OUTPUT_DATA_ARRAY_TYPE(0 to NUM_WRITERS-1) := INLINE_QOS;
|
constant INLINE_QOS_T : OUTPUT_DATA_ARRAY_TYPE(0 to NUM_WRITERS-1) := INLINE_QOS;
|
||||||
|
|
||||||
--*****CONSTANT DECLARATION*****
|
--*****CONSTANT DECLARATION*****
|
||||||
function gen_manual_by_topic_livelines_writers(qos : QUARTUS_CONFIG_ARRAY_TYPE) return std_logic_vector is
|
function gen_manual_by_topic_liveliness_writers(qos : QUARTUS_CONFIG_ARRAY_TYPE) return std_logic_vector is
|
||||||
variable ret : std_logic_vector(0 to NUM_WRITERS-1) := (others => '0');
|
variable ret : std_logic_vector(0 to NUM_WRITERS-1) := (others => '0');
|
||||||
begin
|
begin
|
||||||
assert (qos'length = NUM_WRITERS) severity FAILURE;
|
assert (qos'length = NUM_WRITERS) severity FAILURE;
|
||||||
@ -184,7 +184,7 @@ architecture arch of rtps_writer is
|
|||||||
end loop;
|
end loop;
|
||||||
return ret;
|
return ret;
|
||||||
end function;
|
end function;
|
||||||
constant MANUAL_BY_TOPIC_LIVELINESS_WRITERS : std_logic_vector(0 to NUM_WRITERS-1) := gen_manual_by_topic_livelines_writers(CONFIG_ARRAY_T);
|
constant MANUAL_BY_TOPIC_LIVELINESS_WRITERS : std_logic_vector(0 to NUM_WRITERS-1) := gen_manual_by_topic_liveliness_writers(CONFIG_ARRAY_T);
|
||||||
|
|
||||||
function gen_reliable_writers(qos : QUARTUS_CONFIG_ARRAY_TYPE) return std_logic_vector is
|
function gen_reliable_writers(qos : QUARTUS_CONFIG_ARRAY_TYPE) return std_logic_vector is
|
||||||
variable ret : std_logic_vector(0 to NUM_WRITERS-1) := (others => '0');
|
variable ret : std_logic_vector(0 to NUM_WRITERS-1) := (others => '0');
|
||||||
@ -420,13 +420,13 @@ architecture arch of rtps_writer is
|
|||||||
signal mem_addr_base, mem_addr_base_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_base, mem_addr_base_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- General Memory Address Latch
|
-- General Memory Address Latch
|
||||||
signal mem_addr_latch, mem_addr_latch_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
signal mem_addr_latch, mem_addr_latch_next : unsigned(ENDPOINT_MEMORY_ADDR_WIDTH-1 downto 0);
|
||||||
-- General Purpose Couter
|
-- General Purpose Counter
|
||||||
signal mem_cnt, mem_cnt_next : natural range 0 to 29;
|
signal mem_cnt, mem_cnt_next : natural range 0 to 29;
|
||||||
-- Latch for Endpoint Data from Memory
|
-- Latch for Endpoint Data from Memory
|
||||||
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
|
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
|
||||||
-- Latch for Endpoint Data from main process
|
-- Latch for Endpoint Data from main process
|
||||||
signal mem_endpoint_latch_data, mem_endpoint_latch_data_next : ENDPOINT_DATA_TYPE;
|
signal mem_endpoint_latch_data, mem_endpoint_latch_data_next : ENDPOINT_DATA_TYPE;
|
||||||
-- Signal used to write to ALL memories simutanously
|
-- Signal used to write to ALL memories simultaneously
|
||||||
signal multi_w : std_logic;
|
signal multi_w : std_logic;
|
||||||
|
|
||||||
-- *MEMORY CONTROL CONNECTION SIGNALS*
|
-- *MEMORY CONTROL CONNECTION SIGNALS*
|
||||||
@ -584,7 +584,7 @@ begin
|
|||||||
-- INITIATE_ENDPOINT_SEARCH Initiate Endpoint Search Memory Operation. This state is used to start the Search operation as soon as the required data is available
|
-- INITIATE_ENDPOINT_SEARCH Initiate Endpoint Search Memory Operation. This state is used to start the Search operation as soon as the required data is available
|
||||||
-- METATRAFFIC_OPERATION State handling the Metatraffic Operations
|
-- METATRAFFIC_OPERATION State handling the Metatraffic Operations
|
||||||
-- PROCESS_NACK Process Requested (Negatively Acknowledged) Sequence Numbers
|
-- PROCESS_NACK Process Requested (Negatively Acknowledged) Sequence Numbers
|
||||||
-- PROCESS_ACK Process Acknowledged Sequence Numbers. Assert Liveliness of remore Reader.
|
-- PROCESS_ACK Process Acknowledged Sequence Numbers. Assert Liveliness of remote Reader.
|
||||||
-- UPDATE_GLOBAL_ACK Iterate over all remote Readers and update the global_ack_seq_nr_base to the lowest common ACKed Sequence Number
|
-- UPDATE_GLOBAL_ACK Iterate over all remote Readers and update the global_ack_seq_nr_base to the lowest common ACKed Sequence Number
|
||||||
-- ENDPOINT_STALE_CHECK Check remote Endpoint Entries for Liveliness Lease Expiration, and Response Timeouts.
|
-- ENDPOINT_STALE_CHECK Check remote Endpoint Entries for Liveliness Lease Expiration, and Response Timeouts.
|
||||||
-- HANDLE_REQUESTS Send requested Cache Changes to remote Reader
|
-- HANDLE_REQUESTS Send requested Cache Changes to remote Reader
|
||||||
@ -603,7 +603,7 @@ begin
|
|||||||
-- SKIP_META_OPERATION Skip Metatraffic Operation
|
-- SKIP_META_OPERATION Skip Metatraffic Operation
|
||||||
parse_prc : process(all)
|
parse_prc : process(all)
|
||||||
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
variable tmp_dw : DOUBLE_WORD_ARRAY;
|
||||||
-- NOTE: We convert the bitamp to a slv to make operations easier (The tool should handle both cases equally)
|
-- NOTE: We convert the bitmap to a slv to make operations easier (The tool should handle both cases equally)
|
||||||
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
variable tmp_bitmap : std_logic_vector(0 to MAX_BITMAP_WIDTH-1);
|
||||||
variable tmp_flags : std_logic_vector(0 to EMF_FLAG_WIDTH-1);
|
variable tmp_flags : std_logic_vector(0 to EMF_FLAG_WIDTH-1);
|
||||||
begin
|
begin
|
||||||
@ -1151,7 +1151,7 @@ begin
|
|||||||
|
|
||||||
-- HC Empty (No cache Changes Available)
|
-- HC Empty (No cache Changes Available)
|
||||||
if (cc_seq_nr(ind) = SEQUENCENUMBER_UNKNOWN) then
|
if (cc_seq_nr(ind) = SEQUENCENUMBER_UNKNOWN) then
|
||||||
-- NOTE: Identifies the lowest SN that is yet to be written by the writter.
|
-- NOTE: Identifies the lowest SN that is yet to be written by the writer.
|
||||||
min_sn_next <= last_seq_nr(ind) + 1;
|
min_sn_next <= last_seq_nr(ind) + 1;
|
||||||
else
|
else
|
||||||
min_sn_next <= cc_seq_nr(ind);
|
min_sn_next <= cc_seq_nr(ind);
|
||||||
@ -1360,7 +1360,7 @@ begin
|
|||||||
mem_r.ack_seq_nr_base <= ack_base;
|
mem_r.ack_seq_nr_base <= ack_base;
|
||||||
-- NOTE: The global_ack_seq_nr_base contains the lowest SN of all remote Endpoints.
|
-- NOTE: The global_ack_seq_nr_base contains the lowest SN of all remote Endpoints.
|
||||||
-- It only needs to be updated, if the remote Endpoint with the lowest ACKed SN is updated.
|
-- It only needs to be updated, if the remote Endpoint with the lowest ACKed SN is updated.
|
||||||
-- This does not necesserily mean, that the Global ACK SN will change, as there can
|
-- This does not necessarily mean, that the Global ACK SN will change, as there can
|
||||||
-- be multiple remote Endpoints with the same lowest ACK SN.
|
-- be multiple remote Endpoints with the same lowest ACK SN.
|
||||||
-- Global ACK SN needs updating
|
-- Global ACK SN needs updating
|
||||||
if (mem_endpoint_data.ack_seq_nr_base = global_ack_seq_nr_base(ind)) then
|
if (mem_endpoint_data.ack_seq_nr_base = global_ack_seq_nr_base(ind)) then
|
||||||
@ -1788,7 +1788,7 @@ begin
|
|||||||
|
|
||||||
-- HC Empty (No cache Changes Available)
|
-- HC Empty (No cache Changes Available)
|
||||||
if (cc_seq_nr(ind) = SEQUENCENUMBER_UNKNOWN) then
|
if (cc_seq_nr(ind) = SEQUENCENUMBER_UNKNOWN) then
|
||||||
-- NOTE: Identifies the lowest SN that is yet to be written by the writter.
|
-- NOTE: Identifies the lowest SN that is yet to be written by the writer.
|
||||||
min_sn_next <= last_seq_nr(ind) + 1;
|
min_sn_next <= last_seq_nr(ind) + 1;
|
||||||
else
|
else
|
||||||
min_sn_next <= cc_seq_nr(ind);
|
min_sn_next <= cc_seq_nr(ind);
|
||||||
@ -1900,7 +1900,7 @@ begin
|
|||||||
-- NOTE: If PUSH_MODE false and remote reliable endpoints are available, this just does NOPs
|
-- NOTE: If PUSH_MODE false and remote reliable endpoints are available, this just does NOPs
|
||||||
-- (leaves the CCs NACKed in the HC) and updates the last_seq_nr.
|
-- (leaves the CCs NACKed in the HC) and updates the last_seq_nr.
|
||||||
|
|
||||||
-- ACK newly sent Cache Changes if Writer is BEST_EFFORT, or if all remore Readers are BEST_EFFORT
|
-- ACK newly sent Cache Changes if Writer is BEST_EFFORT, or if all remote Readers are BEST_EFFORT
|
||||||
if (CONFIG_ARRAY_T(ind).RELIABILITY_QOS /= RELIABLE_RELIABILITY_QOS or global_ack_seq_nr_base(ind) = SEQUENCENUMBER_UNKNOWN) then
|
if (CONFIG_ARRAY_T(ind).RELIABILITY_QOS /= RELIABLE_RELIABILITY_QOS or global_ack_seq_nr_base(ind) = SEQUENCENUMBER_UNKNOWN) then
|
||||||
start_hc(ind) <= '1';
|
start_hc(ind) <= '1';
|
||||||
if (CONFIG_ARRAY_T(ind).DURABILITY_QOS = VOLATILE_DURABILITY_QOS) then
|
if (CONFIG_ARRAY_T(ind).DURABILITY_QOS = VOLATILE_DURABILITY_QOS) then
|
||||||
@ -2079,7 +2079,7 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
return_cnt_next <= 0;
|
return_cnt_next <= 0;
|
||||||
end if;
|
end if;
|
||||||
-- Cache Change unavialable
|
-- Cache Change unavailable
|
||||||
else
|
else
|
||||||
assert (ret_hc(ind) = INVALID) report "Unexpected HC response" severity WARNING;
|
assert (ret_hc(ind) = INVALID) report "Unexpected HC response" severity WARNING;
|
||||||
|
|
||||||
@ -2681,7 +2681,7 @@ begin
|
|||||||
mem_op_done <= '1';
|
mem_op_done <= '1';
|
||||||
|
|
||||||
if (mem_op_start = '1') then
|
if (mem_op_start = '1') then
|
||||||
-- Latch Signals needed for Mermory Operation
|
-- Latch Signals needed for Memory Operation
|
||||||
mem_endpoint_latch_data_next <= mem_r;
|
mem_endpoint_latch_data_next <= mem_r;
|
||||||
|
|
||||||
case(mem_opcode) is
|
case(mem_opcode) is
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user