From e33d98218211f345a62bc4c70da3c0620725b2d5 Mon Sep 17 00:00:00 2001 From: Greek Date: Tue, 26 Oct 2021 11:16:23 +0200 Subject: [PATCH] Add 'si_ack' to DDS Reader Previously the simaple info data was valid for exectly 1 clock cycle, in which the user had to pull the 'get_data' signal if he wanted the associated payload. This change allows the user to control how long the sample info data is shown. --- .../Level_0/L0_dds_reader_test1_abzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test1_arzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test1_arzksiu.vhd | 1 + .../Level_0/L0_dds_reader_test1_arznriu.vhd | 1 + .../Level_0/L0_dds_reader_test1_lbzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test1_lrzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test2_arpkriu.vhd | 1 + .../Level_0/L0_dds_reader_test3_arzkrio.vhd | 1 + .../Level_0/L0_dds_reader_test3_arzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test3_arzkrto.vhd | 1 + .../Level_0/L0_dds_reader_test3_arzkrtu.vhd | 1 + .../Level_0/L0_dds_reader_test3_arzksto.vhd | 1 + .../Level_0/L0_dds_reader_test3_arznriu.vhd | 1 + .../Level_0/L0_dds_reader_test4_arzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test4_arznriu.vhd | 1 + .../Level_0/L0_dds_reader_test5_arzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test6_arzkriu.vhd | 1 + .../Level_0/L0_dds_reader_test7_arzkriu.vhd | 1 + src/dds_reader.vhd | 24 +++++++++++-------- 19 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/Tests/Level_0/L0_dds_reader_test1_abzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_abzkriu.vhd index 5fbb8ca..24d7426 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_abzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_abzkriu.vhd @@ -205,6 +205,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test1_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_arzkriu.vhd index 1fdf64d..8f45131 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_arzkriu.vhd @@ -204,6 +204,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test1_arzksiu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_arzksiu.vhd index 7f64ae3..940b5ed 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_arzksiu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_arzksiu.vhd @@ -204,6 +204,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test1_arznriu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_arznriu.vhd index 27f2212..7c43c75 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_arznriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_arznriu.vhd @@ -183,6 +183,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test1_lbzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_lbzkriu.vhd index 734030e..e25eed0 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_lbzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_lbzkriu.vhd @@ -205,6 +205,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test1_lrzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test1_lrzkriu.vhd index 568f260..93acc60 100644 --- a/src/Tests/Level_0/L0_dds_reader_test1_lrzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test1_lrzkriu.vhd @@ -205,6 +205,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test2_arpkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test2_arpkriu.vhd index 37ba7e9..272064d 100644 --- a/src/Tests/Level_0/L0_dds_reader_test2_arpkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test2_arpkriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arzkrio.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arzkrio.vhd index 1aa49d8..d86dcad 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arzkrio.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arzkrio.vhd @@ -198,6 +198,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arzkriu.vhd index 466e2d2..a1aa4e6 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arzkriu.vhd @@ -198,6 +198,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arzkrto.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arzkrto.vhd index 0bef4f1..2400644 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arzkrto.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arzkrto.vhd @@ -198,6 +198,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arzkrtu.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arzkrtu.vhd index 8c9a5f9..0aeee6a 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arzkrtu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arzkrtu.vhd @@ -198,6 +198,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arzksto.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arzksto.vhd index a77b4f9..1746579 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arzksto.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arzksto.vhd @@ -199,6 +199,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test3_arznriu.vhd b/src/Tests/Level_0/L0_dds_reader_test3_arznriu.vhd index 294e358..e67e5f6 100644 --- a/src/Tests/Level_0/L0_dds_reader_test3_arznriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test3_arznriu.vhd @@ -179,6 +179,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test4_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test4_arzkriu.vhd index eae931d..e2c1392 100644 --- a/src/Tests/Level_0/L0_dds_reader_test4_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test4_arzkriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test4_arznriu.vhd b/src/Tests/Level_0/L0_dds_reader_test4_arznriu.vhd index 4e8ac07..1252e91 100644 --- a/src/Tests/Level_0/L0_dds_reader_test4_arznriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test4_arznriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test5_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test5_arzkriu.vhd index b21b6f5..fdbe861 100644 --- a/src/Tests/Level_0/L0_dds_reader_test5_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test5_arzkriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test6_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test6_arzkriu.vhd index 4bbddf5..cbed5ea 100644 --- a/src/Tests/Level_0/L0_dds_reader_test6_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test6_arzkriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/Tests/Level_0/L0_dds_reader_test7_arzkriu.vhd b/src/Tests/Level_0/L0_dds_reader_test7_arzkriu.vhd index 3d0285e..dc5f8dd 100644 --- a/src/Tests/Level_0/L0_dds_reader_test7_arzkriu.vhd +++ b/src/Tests/Level_0/L0_dds_reader_test7_arzkriu.vhd @@ -158,6 +158,7 @@ begin si_absolute_generation_rank => si_absolute_generation_rank, si_valid_data => si_valid_data, si_valid => si_valid, + si_ack => '1', eoc => eoc, status => status ); diff --git a/src/dds_reader.vhd b/src/dds_reader.vhd index 6e623f7..189432c 100644 --- a/src/dds_reader.vhd +++ b/src/dds_reader.vhd @@ -84,6 +84,7 @@ entity dds_reader is si_absolute_generation_rank : out std_logic_vector(ABSOLUTE_GENERATION_COUNT_WIDTH-1 downto 0); si_valid_data : out std_logic; si_valid : out std_logic; + si_ack : in std_logic; eoc : out std_logic; -- Communication Status status : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) @@ -647,8 +648,8 @@ begin -- GET_KEY_HASH Fetch the calculated key hash from the Key Hash Generator -- INITIATE_INSTANCE_SEARCH Initiate Instance Search Memory Operation. This state is used to start the Search operation as soon as the required data is available -- FILTER_STAGE This state decides if the RTPS Cache Change is accepted, dropped, or rejected. It also decides what sample (if any) has to be removed. - -- UPDATE_INSTANCE Update the Data of the Instance of the received saample (Cache Change) - -- FINALIZE_PAYLOAD Finalize the payload addition (Update pointers). + -- UPDATE_INSTANCE Update the Data of the Instance of the received sample (Cache Change) + -- FINALIZE_PAYLOAD Finalize the payload addition (Update pointers) -- PRE_SAMPLE_FINALIZE Store Sample Info based on Instance Data -- FIND_POS Find Sample List position based on DESTINATION_ORDER_QOS -- FIX_POINTERS Update the List Pointers of the inserted Sample neighbours (First Step of Sample Addition Finalization) @@ -3975,14 +3976,17 @@ begin -- Reset Data Available Status status_sig_next <= status_sig and (not DATA_AVAILABLE_STATUS); - -- Sample Data Request - if (get_data_dds = '1') then - stage_next <= GET_PAYLOAD; - cnt_next <= 0; - else - cnt_next <= 2; - -- Invalidate Data - si_valid_sig_next <= '0'; + -- Wait on User + if (si_ack = '1') then + -- Sample Data Request + if (get_data_dds = '1') then + stage_next <= GET_PAYLOAD; + cnt_next <= 0; + else + cnt_next <= 2; + -- Invalidate Data + si_valid_sig_next <= '0'; + end if; end if; -- Post-Present Data when 2 =>