Documentation Refactoring (Fix Typos)

This commit is contained in:
John Ring 2023-06-11 13:23:11 +02:00
parent ca80910494
commit d537cd7460
84 changed files with 323 additions and 323 deletions

View File

@ -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.
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 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
================
Primitive Types are directly latched into registers of equal size (name <NAME>_lach), that are
accesible directly via a port of the same name (i.e. <NAME>).
Primitive Types are directly latched into registers of equal size (name <NAME>_latch), that are
accessible directly via a port of the same name (i.e. <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
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'
@ -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: 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]
int8/uint8 1 1
@ -88,7 +88,7 @@ BIT_BOUND PRIMITIVE [3]
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
the contents.
@ -101,7 +101,7 @@ Following Port signals are defined:
NAME DIRECTION CONNECTED
<NAME>_len out <NAME>_len_latch
<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>_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
@ -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.
NOTE: It could be configured, that instead of truncating larger sequences, a decode error is triggered.
* GET_<NAME>
This stage is similar to the respective primitive decode_stage with following valiations:
The <NAME>_cnt is used to set the current <NAME>_mem_addr. On sucessful latch
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 successful latch
(<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
<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'
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 '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 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_*".
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').
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
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 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
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.
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
@ -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
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
case, with a extra sub-stage for the memory fetch operation.
case, with an extra sub-stage for the memory fetch operation.
OPTIONALS
@ -305,7 +305,7 @@ The second - taken on a 'PUSH_SERIALIZED_KEY' opcode - follows the reader_interf
KeyHolder(<NAME>) directly.
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
'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.
The first - taken on a 'READ_SERIALIZED_KEY' opcode - follows the write_interface procedure of the

View File

@ -51,10 +51,10 @@ use work.rtps_test_package.all;
-- TEST: ADD SAMPLE ON MAX_SAMPLES_PER_INSTANCE
-- TEST: ADD SAMPLE ON MAX_SAMPLES [KNOWN 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 [UNKOWN INSTANCE, WITHOUT STALE INSTANCE]
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKOWN 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, WITH STALE INSTANCE]
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE]
-- TEST: ADD SAMPLE ON MAX_INSTANCES [UNKNOWN INSTANCE, WITHOUT STALE INSTANCE, WITH EMPTY 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, WITHOUT STALE INSTANCE]
-- TEST: ADD SAMPLE BIGGER THAN AVAILABLE MEMORY SPACE
@ -377,7 +377,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", 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(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);
dds := DEFAULT_DDS_READER_TEST;
@ -1013,7 +1013,7 @@ begin
cc.payload := gen_payload(kh4,10);
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: 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(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: ACCEPTED", DEBUG);
@ -1224,7 +1224,7 @@ begin
cc.payload := gen_payload(kh1,10);
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: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
@ -2344,7 +2344,7 @@ begin
cc.payload := gen_payload(kh2,10);
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: ACCEPTED", DEBUG);
@ -3520,7 +3520,7 @@ begin
cc.payload := gen_payload(kh4,10);
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: 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(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: ACCEPTED", DEBUG);
@ -3804,7 +3804,7 @@ begin
cc.payload := gen_payload(kh1,10);
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: REJECTED [MAX_INSTANCES exceeded]", DEBUG);
@ -5295,7 +5295,7 @@ begin
cc.payload := gen_payload(kh2,10);
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: ACCEPTED", DEBUG);

View File

@ -260,7 +260,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);
@ -538,7 +538,7 @@ begin
-- ISTATE: I1:ALIVE, I2:ALIVE
-- 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);
dds := DEFAULT_DDS_READER_TEST;

View File

@ -33,13 +33,13 @@ use work.rtps_test_package.all;
-- TEST: TAKE_NEXT_SAMPLE [NO SAMPLE]
-- TEST: TAKE_NEXT_SAMPLE
-- 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 [NO SAMPLES]
-- TEST: TAKE_INSTANCE [NO SAMPLES]
-- TEST: TAKE_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 [HANDLE_NIL]
-- 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);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", 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
-- 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);
dds := DEFAULT_DDS_READER_TEST;
@ -1430,7 +1430,7 @@ begin
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
-- 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);
dds := DEFAULT_DDS_READER_TEST;
@ -2695,7 +2695,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- MEM: I4S2-(7)
-- ISTATE: I4:DISOSED
-- ISTATE: I4:DISPOSED
-- VIEW: I4:NEW
-- WRITER: W2:I4
@ -2727,7 +2727,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- MEM: I1S1(0), I4S2-(7)
-- ISTATE: I1:ALIVE, I4:DISOSED
-- ISTATE: I1:ALIVE, I4:DISPOSED
-- VIEW: I1:NEW, I4:NEW
-- WRITER: W0:I1, W2:I4
@ -2759,7 +2759,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- MEM: I1S1(0), I1S2-(1), I4S2-(7)
-- ISTATE: I1:DISPOSED, I4:DISOSED
-- ISTATE: I1:DISPOSED, I4:DISPOSED
-- VIEW: I1:NEW, I4:NEW
-- WRITER: W0:I1, W2:I4
@ -2791,7 +2791,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- MEM: I1S1(0), I1S2-(1), I4S2-(7), I1S3(9)
-- ISTATE: I1:ALIVE, I4:DISOSED
-- ISTATE: I1:ALIVE, I4:DISPOSED
-- VIEW: I1:NEW, I4:NEW
-- WRITER: W0:I1, W2:I4
@ -2823,7 +2823,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I4
@ -2845,7 +2845,7 @@ begin
wait_on_sig(dds_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I4
@ -2877,7 +2877,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I3,I4
@ -2909,7 +2909,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I3,I4
@ -2941,7 +2941,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I3,I4
@ -2973,7 +2973,7 @@ begin
wait_on_sig(rtps_done);
wait_on_idle;
-- 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
-- WRITER: W0:I1, W2:I3,I4
@ -3069,7 +3069,7 @@ begin
wait_on_sig(rtps_done);
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)
-- 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
-- WRITER: W0:I1, W2:I3,I4
@ -3318,7 +3318,7 @@ begin
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
-- 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);
dds := DEFAULT_DDS_READER_TEST;
@ -3340,7 +3340,7 @@ begin
-- VIEW: I1:NOT_NEW, I2:NOT_NEW, I3:NOT_NEW, I4:NEW
-- 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);
dds := DEFAULT_DDS_READER_TEST;

View File

@ -268,7 +268,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);

View File

@ -240,7 +240,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", 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");
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.opcode := GET_SAMPLE_REJECTED_STATUS;
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");
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.opcode := GET_SAMPLE_REJECTED_STATUS;
dds.ret_code := RETCODE_OK;

View File

@ -240,7 +240,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);

View File

@ -240,7 +240,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);

View File

@ -251,7 +251,7 @@ begin
istate_id <= GetAlertLogID("Instance State", ALERTLOG_BASE_ID);
ts_id <= GetAlertLogID("Source Timestamp", 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);
no_w_gen_cnt_id <= GetAlertLogID("No Writers Generation Count", ALERTLOG_BASE_ID);
srank_id <= GetAlertLogID("Sample Rank", ALERTLOG_BASE_ID);

View File

@ -2531,11 +2531,11 @@ begin
rtps := DEFAULT_RTPS_WRITER_TEST;
rtps.opcode := ACK_CACHE_CHANGE;
rtps.cc.seq_nr := gen_sn(19);
-- WRIITER 0
-- WRITER 0
ind <= 0;
start_rtps;
wait_on_sig(rtps_done);
-- WRIITER 3
-- WRITER 3
ind <= 3;
start_rtps;
wait_on_sig(rtps_done);

View File

@ -7,7 +7,7 @@ context osvvm.OsvvmContext;
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
end entity;

View File

@ -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 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:
-- * Mathing compatible Participants
-- * Matching compatible Participants
-- * Ignoring incompatible Participants
-- * Unmatching previously matched Participants (Due to incompatibility)
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)

View File

@ -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 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:
-- * Mathing compatible Participants
-- * Matching compatible Participants
-- * Ignoring incompatible Participants
-- * Unmatching previously matched Participants (Due to incompatibility)
-- * Unmatching previously matched Participants (Due to Unregister/Dispose Status Updates)

View File

@ -313,7 +313,7 @@ begin
p1.availableBuiltinEndpoints(DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR) := '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.nr := 2;
p2.defaultUnicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));

View File

@ -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)
-- 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)
-- 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:
-- * PID_PARTICIPANT_GUID
-- * PID_DOMAIN_ID

View File

@ -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
-- * 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
-- DATA SUBEMSSAGE
-- DATA SUBMESSAGE
-- * Empty DATA Submessage (No payload/inline-QoS)
-- * META/USER Traffic
-- * Little/Big Endian
@ -50,11 +50,11 @@ use work.rtps_test_package.all;
-- * lastSN.value < firstSN.value - 1
-- INFO_SOURCE SUBMESSAGE
-- * Little/Big Endian
-- * Protocol Version missmatch
-- * Protocol Version mismatch
-- * SubmessageLength invalid
-- INFO_DESTINATION SUBMESSAGE
-- * Little/Big Endian
-- * Destination GUID Prefix missmatch
-- * Destination GUID Prefix mismatch
-- * SubmessageLength invalid
-- INFO_REPLY SUBMESSAGE
-- * Little/Big Endian
@ -73,11 +73,11 @@ use work.rtps_test_package.all;
-- * SubmessageLength invalid
-- PAD SUBMESSAGE
-- * 28 Padding Bytes
-- UKNOWN SUBMESSAGE
-- UNKNOWN SUBMESSAGE
-- * DATA_FRAG Submessage
-- * HEARTBEAT_FRAG Submessage
-- * NACK_FRAG Submessage
-- * UKNOWN SID
-- * UNKNOWN SID
entity L0_rtps_handler_test1 is
end entity;
@ -207,7 +207,7 @@ begin
stimulus := 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
gen_output_header(UDP_META, stimulus);
-- RTPS Header [Incompatible Protocol]
@ -225,7 +225,7 @@ begin
stimulus := 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
gen_output_header(UDP_META, stimulus);
-- RTPS Header [Incompatible Version]
@ -243,7 +243,7 @@ begin
stimulus := 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
gen_output_header(UDP_META, stimulus);
-- RTPS Header
@ -382,7 +382,7 @@ begin
gen_output_header(UDP_META, stimulus);
-- RTPS Header
gen_rtps_header(rtps_header, stimulus);
-- Valid DATA [SubLength > PackeSize] (Dropped)
-- Valid DATA [SubLength > PacketSize] (Dropped)
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
rtps_sub.submessageID := SID_DATA;
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
@ -930,7 +930,7 @@ begin
gen_output_header(UDP_META, stimulus);
-- RTPS Header
gen_rtps_header(rtps_header, stimulus);
-- Invalid HEARTBEAT [SubLength > PackeSize] (Dropped)
-- Invalid HEARTBEAT [SubLength > PacketSize] (Dropped)
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
rtps_sub.submessageID := SID_HEARTBEAT;
rtps_sub.writerId := DEFAULT_WRITER_ENTITYID;
@ -1082,7 +1082,7 @@ begin
gen_rtps_submessage(rtps_data, stimulus);
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_sub.guidPrefix, reference);
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.submessageID := SID_INFO_SRC;
rtps_sub.version := PROTOCOLVERSION_1_0;
@ -1382,7 +1382,7 @@ begin
stimulus := 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
gen_output_header(UDP_META, stimulus);
-- RTPS Header
@ -1469,7 +1469,7 @@ begin
gen_rtps_submessage(rtps_data, stimulus);
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
rtps_data.writerSN := rtps_data.writerSN + 1;
-- UKNOWN (Dropped)
-- UNKNOWN (Dropped)
rtps_sub := DEFAULT_RTPS_SUBMESSAGE;
rtps_sub.submessageID := (others => '1');
rtps_sub.submessageLength := int(28,16);

View File

@ -127,7 +127,7 @@ begin
wait until rising_edge(clk);
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
-- META TRAFFIC ADDRESSES
when 0 =>
@ -139,7 +139,7 @@ begin
tmp_loc_list := DEST_LOC.user;
ref1 := (NUM_ENDPOINTS => '0', others => '1');
is_meta := FALSE;
-- UKNOWN ADDRESSES
-- UNKNOWN ADDRESSES
when others =>
ref1 := (others => '0');
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
case (k) is
-- UKNOWN
-- UNKNOWN
when NUM_ENDPOINTS =>
ref2 := (others => '0');
tmp_id := RV.RandSlv(ENTITYID_WIDTH);
tmp_id(ENTITY_KIND_H_RANGE) := USER_DEFINED_ENTITY;
tmp_id(ENTITY_KIND_L_RANGE) := UNKNOWN_KIND;
-- ENTITYID_UKNOWN
-- ENTITYID_UNKNOWN
when NUM_ENDPOINTS+1 =>
tmp_id := ENTITYID_UNKNOWN;
ref2 := (others => '1');

View File

@ -199,7 +199,7 @@ begin
-- Push T3 Packet 1
push_reference(1, stimulus(t3));
start_test;
-- Wait until begining of t3 sending
-- Wait until beginning of t3 sending
tmp := (others => '1');
tmp(t3) := '0';
wait on rd_sig until packet_sent = tmp and rd_sig = not tmp;

View File

@ -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 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:
-- * Mathing Endpoint
-- * Matching Endpoint
-- * Memory Full Behaviour
-- * Unmatching Endpoint
-- * Unmatching Participant
@ -369,7 +369,7 @@ begin
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
-- 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
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
end loop;
@ -542,7 +542,7 @@ begin
case (stage_hc) is
when IDLE =>
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
-- is still valid.
ack_hc <= (others => '1');

View File

@ -1736,7 +1736,7 @@ begin
case (stage_hc) is
when IDLE =>
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
-- is still valid.
ack_hc <= (others => '1');

View File

@ -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 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:
-- * Mathing Endpoint
-- * Matching Endpoint
-- * Memory Full Behaviour
-- * Unmatching Endpoint
-- * Unmatching Participant
@ -356,7 +356,7 @@ begin
-- MEMORY 0 STATE 0(P1E2),34(P1E3)/17
-- 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
stimulus.data(i) := RV.RandSlv(WORD_WIDTH);
end loop;

View File

@ -338,7 +338,7 @@ begin
wait_on_idle;
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);
wait until rising_edge(clk);
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)/-
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);
wait until rising_edge(clk);
wait until rising_edge(clk); -- Allow idle_sig to go low

View File

@ -13,7 +13,7 @@ use work.Type2_package.all;
-- 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.
-- 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.
entity L1_Type1_key_holder_test1 is
@ -133,7 +133,7 @@ begin
-- Serialized Key Payload Header
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
-- Reset Alignement
-- Reset Alignment
align_offset := (others => '0');
Log("Setting Data in Writer Side", INFO);

View File

@ -13,7 +13,7 @@ use work.Type2_package.all;
-- 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.
-- 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.
entity L1_Type1_key_holder_test2 is
@ -139,7 +139,7 @@ begin
-- Serialized Key Payload Header
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
-- Reset Alignement
-- Reset Alignment
align_offset := (others => '0');
Log("Setting Data in Writer Side", INFO);

View File

@ -13,7 +13,7 @@ use work.Type2_package.all;
-- 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.
-- 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.
entity L1_Type2_key_holder_test1 is
@ -205,7 +205,7 @@ begin
-- Serialized Key Payload Header
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
-- Reset Alignement
-- Reset Alignment
align_offset := (others => '0');
Log("Setting Data in Writer Side", INFO);

View File

@ -13,7 +13,7 @@ use work.Type2_package.all;
-- 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.
-- 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.
entity L1_Type2_key_holder_test2 is
@ -211,7 +211,7 @@ begin
-- Serialized Key Payload Header
gen_CDR(SERIALIZED_KEY_HEADER, ALIGN_4, align_offset, serialized_key);
-- Reset Alignement
-- Reset Alignment
align_offset := (others => '0');
Log("Setting Data in Writer Side", INFO);

View File

@ -12,11 +12,11 @@ use work.rtps_test_package.all;
-- This testbench tests the rtps output of the Discovery Module (Local Liveliness Assertion, Local Heartbeat Generation, Local Participant Announcement, Remote HEARTBEAT Response, Remote ACKNACK Response).
-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators.
-- The testflow is as follows:
-- The test flow is as follows:
-- * 0s
-- - Local participant Announcement
-- - 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
-- - No HEARTBEAT 0 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]
-- * 0.415s
-- - 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]
-- * 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
-- - HEARTBEAT 4/5 Response
-- - Send ACKNACK 3 (Publisher, Expecting SN 1) [Test normal ACKNACK Response]
-- * 0.620s
-- - 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
-- - ACKNACK 3/4 Response
-- * 1.000s
@ -49,14 +49,14 @@ use work.rtps_test_package.all;
-- * 1.205s
-- - ACKNACK 5 Response
-- * 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
-- - No ACKNACK 6 Response
-- * 2.000s
-- - Local HEARTBEAT generation
-- - Liveliness Assertion (Auto only)
-- - 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]
-- * 2.205s
-- - ACKNACK 7/8/9 Response

View File

@ -12,7 +12,7 @@ use work.rtps_test_package.all;
-- This testbench tests the output handling (ACKNACK) of the RTPS Reader
-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators.
-- The testflow is as follows (Heartbeat Suppression and Response delay are configured to 5s):
-- The test flow is as follows (Heartbeat Suppression and Response delay are configured to 5s):
-- * 0s
-- - Match Remote Endpoints 0,1,2
-- - Send HEARTBEAT 0 from Endpoint 0 (Empty, Final Flag) [Test Final Flag Handling]

View File

@ -19,7 +19,7 @@ use work.Type1_package.all;
-- 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 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.
-- 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.

View File

@ -14,7 +14,7 @@ use work.rtps_config_package.all;
use work.rtps_test_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.
-- 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.
@ -236,7 +236,7 @@ begin
wait until rising_edge(clk);
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';
opcode_w <= REGISTER_INSTANCE;
id_w <= int(2,CDR_LONG_WIDTH);

View File

@ -787,7 +787,7 @@ begin
TestSequence_TestArray_cnt_next <= 0;
cnt_next <= 0;
end if;
-- "Comsume" input word
-- "Consume" input word
TestSequence_TestLongDouble_mem_ready_out <= '1';
end if;
-- Reset Alignment

View File

@ -13,7 +13,7 @@ use UNIMACRO.vcomponents.all;
-- Add/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
generic (

View File

@ -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);
-- Denotes if a TAKE operation is in progress
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
signal single_instance, single_instance_next : std_logic;
-- 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);
cnt_next <= cnt + 1;
end if;
-- READ Instance Poiner
-- READ Instance Pointer
when 7 =>
sample_ready_out1 <= '1';
@ -2775,7 +2775,7 @@ begin
when GENERATE_SAMPLE =>
-- 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
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;
@ -3521,7 +3521,7 @@ begin
case (cnt) is
-- GET Next Pointer
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.
-- No Pending Reads
if (payload_cnt2 = 0) then
@ -3584,7 +3584,7 @@ begin
if (payload_cnt = unsigned(long_latch)) then
-- End of Payload
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;
else
-- Next Payload Slot
@ -4512,7 +4512,7 @@ begin
end if;
when ANY_SAMPLE_STATE =>
null;
-- Uknown Sample State
-- Unknown Sample State
when others =>
tmp_bool := FALSE;
end case;
@ -4935,7 +4935,7 @@ begin
end if;
when ANY_SAMPLE_STATE =>
null;
-- Uknown Sample State
-- Unknown Sample State
when others =>
tmp_bool := FALSE;
end case;
@ -5124,7 +5124,7 @@ begin
-- Sample Info 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)
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
-- UPDATE_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
inst_ctrl_prc : process(all)
begin
@ -6302,7 +6302,7 @@ begin
inst_stage_next <= IDLE;
end if;
end if;
-- READ Writer Bitamp
-- READ Writer Bitmap
when 21 =>
inst_ready_out <= '1';

View File

@ -166,7 +166,7 @@ use work.rtps_config_package.all;
-- +-+-+-+---------------------------------------------------+-+-+-+
-- R...Sample has been ACKed
-- 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)
-- U...UnregisteredFlag (1:1 PID_STATUS_INFO Mapping)
-- D...DisposedFlag (1:1 PID_STATUS_INFO Mapping)
@ -640,7 +640,7 @@ architecture arch of dds_writer is
signal remove_oldest_sample, remove_oldest_sample_next : std_logic;
-- Denotes if the oldest sample of the Instance with 'key_hash' should be removed
signal remove_oldest_inst_sample, remove_oldest_inst_sample_next : std_logic;
-- Denotes if the Sample tobe removed should be ACKed
-- Denotes if the Sample to be removed should be ACKed
signal remove_ack_sample, remove_ack_sample_next : std_logic;
-- Lifespan Latch
signal lifespan, lifespan_next : TIME_TYPE;
@ -3379,7 +3379,7 @@ begin
done_rtps(ind) <= '1';
ret_rtps(ind) <= OK;
-- RTPS Requestes Payload
-- RTPS requests Payload
if (get_data_rtps(ind) = '1') then
if (cur_payload /= PAYLOAD_MEMORY_MAX_ADDRESS) then
-- Get Payload
@ -3412,7 +3412,7 @@ begin
case (cnt) is
-- GET Next Pointer
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.
-- No Pending Reads
if (cnt3 = 0) then
@ -3475,7 +3475,7 @@ begin
if (cnt2 = unsigned(long_latch)) then
-- End of Payload
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;
else
-- Next Payload Slot

View File

@ -20,7 +20,7 @@ entity history_cache is
start_a : in std_logic;
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);
valid_in_a : in std_logic;
ready_in_a : out std_logic;
@ -28,7 +28,7 @@ entity history_cache is
start_b : in std_logic;
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);
last_word_out_b : in std_logic;
);
@ -382,7 +382,7 @@ begin
res_a <= ACK;
end if;
when REMOVE_WRITER =>
-- Input and Memory Gurad
-- Input and Memory Guard
if (valid_in_a = '1' and inst_op_done_a = '1') then
-- Latch Writer Pos
writer_pos_next <= to_integer(unsigned(data_in_a));
@ -425,7 +425,7 @@ begin
-- Timestamp 2/2
when 2 =>
ts_latch_next(1) <= data_in_a;
-- Lifespna Deadline 2/2
-- Lifespan Deadline 2/2
when 4 =>
-- Skip Key Hash, if not available
if (has_key_hash = '0') then
@ -484,7 +484,7 @@ begin
sample_write_data_a <= PAYLOAD_MEMORY_MAX_ADDRESS;
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
stage_a_next <= INITIATE_INSTANCE_SEARCH;
else
@ -737,7 +737,7 @@ begin
end if;
end if;
-- INSANCE SAMPLE COUNT
-- INSTANCE SAMPLE COUNT
if (MAX_SAMPLES_PER_INSTANCE /= LENGTH_UNLIMITED) then
tmp_update := tmp_update or SAMPLE_CNT_FLAG;
end if;
@ -939,7 +939,7 @@ begin
when 2 =>
-- No empty Sample Slot Available
if (sample_read_data_a = SAMPLE_MEMORY_MAX_ADDRESS) then
-- Signal Smaple Memory Full
-- Signal Sample Memory Full
sample_mem_full_next <= '1';
else
empty_sample_list_head_next <= sample_read_data_a;
@ -1101,7 +1101,7 @@ begin
end if;
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 <= (
key_hash => key_hash_next,
instance_state => instance_state,
@ -1122,17 +1122,17 @@ begin
-- Reset 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
-- 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
-- process pulls the release_inst_lock signal high during the issuing of the last memory operation (Lock will be release after the opration finishes)
-- 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 operation finishes)
-- Process B has lock
if (inst_delete_lock_b = '1') then
-- Wait until process B releases lock
inst_stage_a_next <= WAIT_FOR_LOCK_1;
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
inst_delete_lock_a_next <= '1';
-- No Instances avialable
-- No Instances available
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
else
@ -1187,10 +1187,10 @@ begin
-- Wait until process B releases lock
inst_stage_a_next <= WAIT_FOR_LOCK_2;
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
inst_delete_lock_a_next <= '1';
-- No Instances avialable
-- No Instances available
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
else
@ -1232,7 +1232,7 @@ begin
if (inst_delete_lock_b = '0') then
-- Get Lock
inst_delete_lock_a_next <= '1';
-- No Instances avialable
-- No Instances available
if (inst_occupied_head = INSTANCE_MEMORY_MAX_ADDRESS) then
inst_addr_base_a_next <= INSTANCE_MEMORY_MAX_ADDRESS;
else

View File

@ -7,7 +7,7 @@ use ieee.numeric_std.all;
package ip_package is
-- TODO : Fix assignemnt of 1 wide array
-- TODO : Fix assignment of 1 wide array
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);
constant LAYER3_PROTOCOLS : LAYER3_PROTOCOL_TYPE := (0 => x"11");

View File

@ -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);
--*****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,
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,
@ -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);
-- 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);
-- 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);
@ -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);
--*****ALIAS DEFINATION*****
--*****ALIAS DEFINITION*****
--IPv4 HEADER
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);
@ -292,7 +292,7 @@ begin
end process;
-- 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_HEADER_1 Parsing first word of IPv4 HEADER
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
@ -301,7 +301,7 @@ begin
-- IPv4_HEADER_5 Parsing fifth word of IPv4 HEADER and writing DEST Addr to output FIFO (if not a fragment)
-- IPv4_PAYLOAD_LENGTH Writing packet(payload) length to output FIFO
-- IPv4_PAYLOAD Writing of packet(payload) from input FIFO to output FIFO
-- IPv4_FRAGMENT_PRE Fragment pre-processing. Checking if fragment is part of already initiated packet re-assembly, initiating new packetre-assembly, or dropping packet if no resources available
-- IPv4_FRAGMENT_PRE Fragment pre-processing. Checking if fragment is part of already initiated packet re-assembly, initiating new packet re-assembly, or dropping packet if no resources available
-- IPv4_FRAGMENT Writing fragment from input FIFO to RAM buffer
-- IPv4_FRAGMENT_POST Fragment post-processing. Checking if received fragment completes the re-assembled packet.
-- IPv4_BUFFER_SRC Writing re-assembled packet(payload) SRC Address to output FIFO
@ -369,7 +369,7 @@ begin
when IPv4_HEADER_1 =>
if (empty = '0') then
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
stage_next <= SKIP_PACKET;
-- Store data and continue Parsing
@ -382,7 +382,7 @@ begin
when IPv4_HEADER_2 =>
if (empty = '0') then
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
stage_next <= IPv4_HEADER_3;
-- IP Fragmentation
@ -528,7 +528,7 @@ begin
reset_buffer_timer_id <= tmp;
-- Reset Maximum Fragment Size
frag_size_next(tmp) <= (others => '0');
-- Reset fragment word cntouer
-- Reset fragment word counter
buffer_word_cnt_next(tmp) <= 0;
-- Calculate buffer address
tmp_frag_offset := (others => '0');
@ -779,7 +779,7 @@ architecture no_frag of ipv4_in_handler is
--*****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,
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
signal wr_sig : std_logic;
--*****ALIAS DEFINATION*****
--*****ALIAS DEFINITION*****
--IPv4 HEADER
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);
@ -844,7 +844,7 @@ begin
end process;
-- 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_HEADER_1 Parsing first word of IPv4 HEADER
-- IPv4_HEADER_2 Parsing second word of IPv4 HEADER
@ -885,7 +885,7 @@ begin
when IPv4_HEADER_1 =>
if (empty = '0') then
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
stage_next <= SKIP_PACKET;
-- Store data and continue Parsing
@ -898,7 +898,7 @@ begin
when IPv4_HEADER_2 =>
if (empty = '0') then
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
stage_next <= IPv4_HEADER_3;
-- IP Fragmentation

View File

@ -12,7 +12,7 @@ package math_pkg is
-- returns the minimum of the two operands
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;
@ -72,11 +72,11 @@ package body math_pkg is
end function;
-- 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;
begin
ret := divident / divisor;
if (divident mod divisor /= 0) then
ret := dividend / divisor;
if (dividend mod divisor /= 0) then
ret := ret + 1;
end if;
return ret;

View File

@ -344,7 +344,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -417,7 +417,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;
@ -620,7 +620,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -338,7 +338,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -396,7 +396,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -615,7 +615,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -340,7 +340,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -592,7 +592,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -335,7 +335,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -392,7 +392,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -336,7 +336,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD

View File

@ -331,7 +331,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD

View File

@ -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)
-- 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:
-- TEST: NEW GOAL [MEMORY EMPTY]
-- TEST: NEW GOAL [ACCEPT]

View File

@ -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)
-- 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:
-- TEST: NEW GOAL [MEMORY EMPTY]
-- TEST: NEW GOAL [ACCEPT]

View File

@ -9,9 +9,9 @@ use work.rtps_package.all;
use work.ros_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -9,9 +9,9 @@ use work.rtps_package.all;
use work.ros_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -9,9 +9,9 @@ use work.rtps_package.all;
use work.ros_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -9,9 +9,9 @@ use work.rtps_package.all;
use work.ros_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -13,7 +13,7 @@ use work.GoalStatus_package;
-- This testbench tests the General Behaviour of ROS Action.
-- More specifically following tests are done:
-- * Test Unsuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test Take Failure on Client TAKE_* Operations
-- * Test multiple concurrent Goals
-- * Test Encoding/Decoding of Action Messages

View File

@ -13,7 +13,7 @@ use work.GoalStatus_package;
-- This testbench tests the General Behaviour of ROS Action.
-- More specifically following tests are done:
-- * Test Unsuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test Take Failure on Client TAKE_* Operations
-- * Test multiple concurrent Goals
-- * Test Encoding/Decoding of Action Messages

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -10,9 +10,9 @@ use work.ros_package.all;
use work.rtps_test_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:
-- * Test Unssuported Opcode Operations
-- * Test Unsupported Opcode Operations
-- * Test RETCODE_NO_DATA response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Reader
-- * Test RETCODE_ERROR response from DDS Writer

View File

@ -12,10 +12,10 @@ use work.rtps_package.all;
use work.ros_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
-- 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.

View File

@ -333,7 +333,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD

View File

@ -331,7 +331,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD

View File

@ -253,7 +253,7 @@ begin
case (encode_stage) is
-- ###GENERATED START###
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -331,7 +331,7 @@ begin
case (decode_stage) is
-- ###GENERATED START###
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -342,7 +342,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -415,7 +415,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;
@ -618,7 +618,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -338,7 +338,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -396,7 +396,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -627,7 +627,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -383,7 +383,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -681,7 +681,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -377,7 +377,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -434,7 +434,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;

View File

@ -422,7 +422,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -524,7 +524,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -560,7 +560,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;
@ -780,7 +780,7 @@ begin
end if;
-- ###GENERATED START###
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -803,7 +803,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -419,7 +419,7 @@ begin
-- };
-- '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.
-- 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.
when GET_RID_WGUID =>
-- ALIGN GUARD
@ -479,7 +479,7 @@ begin
end if;
-- ###GENERATED START###
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -502,7 +502,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;
@ -742,7 +742,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -784,7 +784,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -345,7 +345,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -386,7 +386,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -426,7 +426,7 @@ begin
end if;
end if;
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
if (not check_align(align_offset, ALIGN_1)) then
target_align_next <= ALIGN_1;
@ -462,7 +462,7 @@ begin
end case;
end if;
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
if (not check_align(align_offset, ALIGN_4)) then
target_align_next <= ALIGN_4;

View File

@ -340,7 +340,7 @@ architecture arch of ros_action_server is
-- *Cancel Process Search Types*
-- 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_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);
-- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION
@ -422,7 +422,7 @@ architecture arch of ros_action_server is
signal trigger_result, trigger_result_next : std_logic;
-- Result service Request ID latch
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;
-- Temporal time latch (used in time addition calculation)
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);
-- Toggle latch that latches status update requests from other processes
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;
-- Test signal used for testbench synchronisation
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;
-- Pointer to currently relevant goal memory frame
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);
-- Result index of current empty head goal
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
end if;
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;
stage_next <= GET_C_DATA;
cnt_next <= 1; -- GET_NEXT
@ -2000,13 +2000,13 @@ begin
cancel_ret_code_next <= CancelGoal_package.RR_ERROR_NONE;
stage_next <= SEND_C_RESPONSE;
else
-- Search for Timetamps
-- Search for Timestamps
search_type_c_next <= SEARCH_STAMP;
stage_next <= GET_C_DATA;
cnt_next <= 0; -- GET_FIRST
end if;
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;
stage_next <= GET_C_DATA;
cnt_next <= 1; -- GET_NEXT

View File

@ -215,7 +215,7 @@ architecture arch of ros_action_server is
-- *Cancel Process Search Types*
-- 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_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);
-- *Instance Memory Opcodes*
-- OPCODE DESCRIPTION
@ -300,7 +300,7 @@ architecture arch of ros_action_server is
signal trigger_status_r : std_logic;
-- Result service Request ID latch
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;
-- Temporal time latch (used in time addition calculation)
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;
-- Toggle latch that latches status update requests from other processes
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;
-- Request memory operation
signal mem_start_s : std_logic;
@ -370,7 +370,7 @@ architecture arch of ros_action_server is
-- *GOAL MEMORY PROCESS*
-- Memory process FSM state
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;
-- Head of occupied goal list
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;
-- Pointer to currently relevant goal memory frame
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);
-- Result index of current empty head goal
signal empty_head_res_ind, empty_head_res_ind_next : unsigned(WORD_WIDTH-1 downto 0);
@ -1295,7 +1295,7 @@ begin
null;
end case;
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
-- GET Next Addr
when 0 =>
@ -1873,7 +1873,7 @@ begin
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
cancel_stage_next <= GET;
else
@ -1971,7 +1971,7 @@ begin
mem_data_c_next.addr <= mem_occupied_head;
end if;
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;
cancel_stage_next <= GET_NEXT;
when SEARCH_NONE =>
@ -2018,13 +2018,13 @@ begin
else
assert (mem_occupied_head /= GOAL_MEMORY_MAX_ADDRESS) severity FAILURE;
-- Search for Timetamps
-- Search for Timestamps
search_type_c_next <= SEARCH_STAMP;
cancel_stage_next <= GET;
mem_data_c_next.addr <= mem_occupied_head;
end if;
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;
cancel_stage_next <= GET_NEXT;
when SEARCH_NONE =>
@ -2208,7 +2208,7 @@ begin
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)
-- This allows defined behavious of GET_NEXT when removing goals.
-- This allows defined behaviours of GET_NEXT when removing goals.
when IDLE =>
mem_done <= '1';
if (mem_start_g = '1') then

View File

@ -543,7 +543,7 @@ package body ros_package is
function to_UUID(input : std_logic_vector) return UUID_TYPE is
variable ret : UUID_TYPE;
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;
for i in 0 to ret'length-1 loop
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
variable ret : ROS_TIME_TYPE;
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.nanosec := get_sub_vector(input, 1, ret.nanosec'length, TRUE);
return ret;

View File

@ -184,7 +184,7 @@ package body rtps_config_package is
return ret;
end function;
function gen_entyid return ENTITYID_TYPE is
function gen_entityid return ENTITYID_TYPE is
variable ret : ENTITYID_TYPE;
begin
ret := (others => (others => '0'));
@ -211,7 +211,7 @@ package body rtps_config_package is
return ret;
end function;
constant ENTITYID : ENTITYID_TYPE := gen_entyid;
constant ENTITYID : ENTITYID_TYPE := gen_entityid;
function gen_guidprefix return GUIDPREFIX_TYPE is
variable tmp : std_logic_vector(GUIDPREFIX_WIDTH-1 downto 0) := (others => '0');

View File

@ -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.
-- 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".
-- 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.
-- 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)
-- 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
-- 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
type MEM_OPCODE_TYPE is (NOP, SEARCH_PARTICIPANT, INSERT_PARTICIPANT, UPDATE_PARTICIPANT, GET_NEXT_PARTICIPANT, REMOVE_PARTICIPANT, GET_PARTICIPANT);
-- 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);
-- Signifies if the source of the Participant Data is compatible with our Participant
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;
-- Signifies that the read Locator is a Metatraffic Locator
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_abort_read : std_logic;
--*****ALIAS DEFINATION*****
--*****ALIAS DEFINITION*****
-- ENDPOINT FRAME HEADER
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);
@ -776,7 +776,7 @@ begin
variable tmp_default_qos_match : DEFAULT_QOS_MATCH_TYPE;
variable tmp_dw : DOUBLE_WORD_ARRAY;
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);
begin
--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');
rcvd_next <= (others => '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.
participant_match_next <= '1';
endpoint_mask_next <= (others => '1');
@ -1493,13 +1493,13 @@ begin
end case;
end if;
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.
-- 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...)
-- 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.
-- Participant Unamtch
-- Participant Unmatch
if (message_type = PDP and guid(3) = ENTITYID_PARTICIPANT) then
participant_match_next <= '0';
stage_next <= PARTICIPANT_MATCH_STAGE;
@ -1574,7 +1574,7 @@ begin
else
cnt_next <= cnt + 1;
end if;
-- Participant Mesasge Kind
-- Participant Message Kind
when 3 =>
-- NOTE: Rest of Participant Message is ignored
-- XXX: The Participant Message Data may contain additional data, and according to DDSI-RTPS 2.3
@ -1635,7 +1635,7 @@ begin
end case;
end if;
when PROCESS_GAP =>
-- NOTE: Data is already endain swapped by rtps_handler
-- NOTE: Data is already endian swapped by rtps_handler
-- Input FIFO Guard
if (empty = '0') then
@ -1738,7 +1738,7 @@ begin
end if;
end if;
when PROCESS_HEARTBEAT =>
-- NOTE: Data is already endain swapped by rtps_handler
-- NOTE: Data is already endian swapped by rtps_handler
-- Input FIFO Guard
if (empty = '0') then
@ -1776,7 +1776,7 @@ begin
if (participant_data.heartbeat_res_time = TIME_INVALID) then
-- If current Sequence Number obsolete (removed from source history cache)
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_opcode <= UPDATE_PARTICIPANT;
mem_r.addr <= participant_data.addr;
@ -1854,7 +1854,7 @@ begin
stage_next <= SKIP_PACKET;
end if;
when PROCESS_ACKNACK =>
-- NOTE: Data is already endain swapped by rtps_handler
-- NOTE: Data is already endian swapped by rtps_handler
-- Input FIFO Guard
if (empty = '0') then
@ -2165,7 +2165,7 @@ begin
check_time_next <= participant_data.acknack_res_time;
end if;
end if;
-- HELPER STAGE (Lacthes Participant GUID for participant Unmatching)
-- HELPER STAGE (Latches Participant GUID for participant Unmatching)
when 6 =>
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
-- Continue
cnt_next <= 4; -- CHECK HERTBEAT Response Time
cnt_next <= 4; -- CHECK HEARTBEAT Response Time
-- POST-DATA-SENT
when 8 =>
assert stable(clk, check_mask(participant_data.field_flags, PMF_EXTRA_FLAGS_FLAG)) severity FAILURE;
@ -2611,7 +2611,7 @@ begin
null;
end case;
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).
-- DEFAULT
@ -2621,7 +2621,7 @@ begin
-- Participant Data
when PDP =>
if (PREFER_MULTICAST) then
--*METATRAFIC*
--*METATRAFFIC*
-- Multicast Locator Valid
if (meta_mc_port /= UDP_PORT_INVALID) then
meta_addr_next <= meta_mc_addr;
@ -2650,7 +2650,7 @@ begin
def_port_next <= USER_IPv4_MULTICAST_PORT;
end if;
else
--*METATRAFIC*
--*METATRAFFIC*
-- Unicast Locator Valid
if (meta_uc_port /= UDP_PORT_INVALID) then
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)
-- 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
when TOPIC_NAME_TYPE =>
for i in 0 to NUM_ENDPOINTS-1 loop
@ -4194,7 +4194,7 @@ begin
mem_op_done <= '1';
if (mem_op_start = '1') then
-- Latch Signals needed for Mermory Operation
-- Latch Signals needed for Memory Operation
participant_latch_data_next <= mem_r;
case(mem_opcode) is

View File

@ -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);
-- 4-Byte Aligned Input (see align_prc)
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);
-- 4-Byte Alignement offset latch
-- 4-Byte Alignment offset latch
signal offset_latch, offset_latch_next : std_logic_vector(1 downto 0);
-- IPv4 Source Address latch
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;
-- Sequence Number latch
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);
-- Unsigned long latch
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;
-- 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".
-- 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
@ -341,7 +341,7 @@ begin
-- PARSE_ACKNACK Parse AckNack Submessage
-- PARSE_GAP Parse GAP 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
-- PUSH_PAYLOAD_HEADER Write Payload Header into relevant output FIFOs
-- PUSH_PAYLOAD Write Payload into relevant output FIFOs (May read directly from input FIFO)
@ -485,7 +485,7 @@ begin
stage_next <= SKIP_PACKET;
end case;
end if;
-- First RTPS Header word (Fields: Protocolld)
-- First RTPS Header word (Fields: ProtocolID)
when RTPS_HEADER_1 =>
-- Input FIFO Guard
if (empty = '0') then
@ -697,11 +697,11 @@ begin
rd_guard := '1';
case (cnt) is
-- Timesatmp 1/2
-- Timestamp 1/2
when 0 =>
src_ts_next(0) <= unsigned(data_in_swapped);
cnt_next <= cnt + 1;
-- Timesatmp 2/2
-- Timestamp 2/2
when 1 =>
src_ts_next(1) <= unsigned(data_in_swapped);
@ -1087,7 +1087,7 @@ begin
if ((read_cnt & "00") >= data_header_end) then
stage_next <= MATCH_DST_ENDPOINT;
cnt_next <= 0;
-- Fix alignement
-- Fix alignment
align_offset_next <= offset_latch;
-- Input Guard
elsif(empty = '0') then
@ -1363,7 +1363,7 @@ begin
if (read_cnt = sub_end) then
-- Begin parsing of next submessage
stage_next <= RTPS_SUB_HEADER;
-- Reset alignement
-- Reset alignment
align_offset_next <= (others => '0');
-- Reset Submessage End
sub_end_next <= (others => '1');
@ -1382,7 +1382,7 @@ begin
last_word_out_sig <= '1';
-- Begin parsing of next submessage
stage_next <= RTPS_SUB_HEADER;
-- Reset alignement
-- Reset alignment
align_offset_next <= (others => '0');
-- Reset Submessage End
sub_end_next <= (others => '1');

View File

@ -158,7 +158,7 @@ begin
when IDLE =>
-- Currently Selected Input FIFO is empty
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
selector_next <= 0;
else

View File

@ -254,7 +254,7 @@ package rtps_package is
constant SID_DATA_FRAG : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"16";
-- *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_FINAL_FLAG_POS : natural := 1;
constant SUBMESSAGE_INLINE_QOS_FLAG_POS : natural := 1;
@ -373,7 +373,7 @@ package rtps_package is
-- *LOCATOR KIND*
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_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;
type CONFIG_TYPE is record
-- If Endpoint uses Keye Topics
-- If Endpoint uses Keyed Topics
WITH_KEY : boolean;
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
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.
-- 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
-- If Endpoint uses Keye Topics
-- If Endpoint uses Keyed Topics
WITH_KEY : boolean;
-- If Writer pushes new Cache Changes/Samples immediately (without waiting for reader ACKNACK first)
PUSH_MODE : boolean; -- (only relevant to Writers)
@ -737,7 +737,7 @@ package body rtps_package is
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).
-- So we handle that manualy
-- So we handle that manually
if (ns >= half_sec) then
ret(1) := to_unsigned(natural(CEIL(real(ns-half_sec)*unit)),WORD_WIDTH);
ret(1)(31) := '1';
@ -1202,7 +1202,7 @@ package body rtps_package is
function to_guid(A : std_logic_vector) return GUID_TYPE is
variable ret : GUID_TYPE;
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;
for i in 0 to ret'length-1 loop
ret(i) := get_sub_vector(A, i, ret(i)'length, TRUE);

View File

@ -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);
-- General Memory Address Latch
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;
-- Latch for Endpoint Data from Memory
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
-- Latch for Endpoint Data from main process
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;
-- *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
-- 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_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.
-- INITIATE_ADD_CACHE_CHANGE_REQUEST Initiate an ADD_CACHE_CHANGE Operation
-- ADD_CACHE_CHANGE Send CACHE_CHANGE Data
-- 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.
-- SEND_HEADER Send Output Data Header and RTPS Message Header
-- SEND_ACKNACK Send ACKNACK Submessage
@ -564,7 +564,7 @@ begin
-- SKIP_META_OPERATION Skip Metatraffic Operation
parse_prc : process(all)
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 rd_guard : std_logic;
begin
@ -2058,7 +2058,7 @@ begin
-- XXX: Possible Worst Case Path (64-bit addition and comparison in same clock)
-- Update Check Time
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
-- 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.
@ -2319,7 +2319,7 @@ begin
mem_op_done <= '1';
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;
case(mem_opcode) is

View File

@ -205,7 +205,7 @@ package rtps_test_package is
-- Generic RTPS Endpoint Container
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;
-- Signifies if the Data should be written in Little Endian
littleEndian : std_logic;
@ -284,7 +284,7 @@ package rtps_test_package is
srank : natural;
-- Generation Rank
grank : natural;
-- Absolut Generation Rank
-- Absolute Generation Rank
agrank : natural;
-- Source Timestamp
ts : TIME_TYPE;
@ -313,7 +313,7 @@ package rtps_test_package is
vstate : std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0);
-- Disposed Generation Count
dis_gen_cnt : natural;
-- No Writers Geneation Count
-- No Writers Generation Count
no_w_gen_cnt : natural;
end record;
@ -355,7 +355,7 @@ package rtps_test_package is
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
opcode : HISTORY_CACHE_OPCODE_TYPE;
cc : CACHE_CHANGE_TYPE;
@ -399,7 +399,7 @@ package rtps_test_package is
-- Writes RTPS Output Header based on "ref" to "output"
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
-- 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);
-- Writes RTPS Header based on "ref" to "output"
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
-- manual TRUE if MANUAL_LIVELINESS_UPDATE, FALSE if AUTOMATIC_LIVELINESS_UPDATE
-- 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);
-- 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);
@ -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);
-- 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);
-- 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);
-- 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);
@ -569,7 +569,7 @@ package rtps_test_package is
function int(n : integer; width : natural) return std_logic_vector;
-- to_string Function for ScoreBoardPkg_discovery_module
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
-- meta If TRUE extracts metatraffic Locator
-- 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;
-- *HEARTBEAT_FRAG*
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.length := output.length + 1;
end if;
@ -1225,7 +1225,7 @@ package body rtps_test_package is
-- Fragment Number
output.data(output.length) := endian_swap(ref.flags(SUBMESSAGE_ENDIAN_FLAG_POS), ref.fragmentStartingNumber);
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.length := output.length + 1;
-- Sample Size
@ -1266,7 +1266,7 @@ package body rtps_test_package is
end if;
end loop;
end if;
-- Fix Alignement
-- Fix Alignment
if ((tmp + (ref.data.length*4)) mod 4 /= 0) then
output.length := output.length + 1;
end if;
@ -1334,7 +1334,7 @@ package body rtps_test_package is
elsif (ref.submessageLength /= (ref.submessageLength'reverse_range => '0')) then
output.length := start + to_integer(unsigned(ref.submessageLength));
end if;
-- *PAD/UKNOWN*
-- *PAD/UNKNOWN*
else
-- Padding
tmp := to_integer(unsigned(ref.submessageLength));
@ -1369,7 +1369,7 @@ package body rtps_test_package is
output.data(output.length) := ref.writerId;
output.length := output.length + 1;
end if;
-- Destination Enity ID
-- Destination Entity ID
if (is_meta) then
if (ref.submessageID = SID_ACKNACK or ref.submessageID = SID_NACK_FRAG) then
output.data(output.length) := ref.writerId;
@ -3053,7 +3053,7 @@ package body rtps_test_package is
-- Insert at desired index
mem.s(ind) := sample;
when others =>
assert FALSE report "Unkown DESTINATION_ORDER_QOS" severity FAILURE;
assert FALSE report "Unknown DESTINATION_ORDER_QOS" severity FAILURE;
end case;
mem.slen := mem.slen + 1;
end procedure;

View File

@ -33,7 +33,7 @@ use work.rtps_config_package.all;
-- 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,
-- 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.
-- 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
@ -104,7 +104,7 @@ use work.rtps_config_package.all;
entity rtps_writer is
generic (
-- 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
NUM_WRITERS : natural;
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 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');
begin
assert (qos'length = NUM_WRITERS) severity FAILURE;
@ -184,7 +184,7 @@ architecture arch of rtps_writer is
end loop;
return ret;
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
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);
-- General Memory Address Latch
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;
-- Latch for Endpoint Data from Memory
signal mem_endpoint_data, mem_endpoint_data_next : ENDPOINT_DATA_TYPE;
-- Latch for Endpoint Data from main process
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;
-- *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
-- METATRAFFIC_OPERATION State handling the Metatraffic Operations
-- 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
-- ENDPOINT_STALE_CHECK Check remote Endpoint Entries for Liveliness Lease Expiration, and Response Timeouts.
-- HANDLE_REQUESTS Send requested Cache Changes to remote Reader
@ -603,7 +603,7 @@ begin
-- SKIP_META_OPERATION Skip Metatraffic Operation
parse_prc : process(all)
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_flags : std_logic_vector(0 to EMF_FLAG_WIDTH-1);
begin
@ -1151,7 +1151,7 @@ begin
-- HC Empty (No cache Changes Available)
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;
else
min_sn_next <= cc_seq_nr(ind);
@ -1360,7 +1360,7 @@ begin
mem_r.ack_seq_nr_base <= ack_base;
-- 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.
-- 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.
-- Global ACK SN needs updating
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)
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;
else
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
-- (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
start_hc(ind) <= '1';
if (CONFIG_ARRAY_T(ind).DURABILITY_QOS = VOLATILE_DURABILITY_QOS) then
@ -2079,7 +2079,7 @@ begin
end if;
return_cnt_next <= 0;
end if;
-- Cache Change unavialable
-- Cache Change unavailable
else
assert (ret_hc(ind) = INVALID) report "Unexpected HC response" severity WARNING;
@ -2681,7 +2681,7 @@ begin
mem_op_done <= '1';
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;
case(mem_opcode) is