Bug Fix: DDS Reader and Writer Interfaces had no signal passthrough for non-Type dependent Operations

The ready/valid Signals were missing from the DDS Reader and Writer Interfaces,
preventing the user from effectively using non-Type dependent operations
(like GET_OFFERED_DEADLINE_MISSED_STATUS).
The L1_Type1_test1 was extended to test for this non-type dependent operation.
This commit is contained in:
John Ring 2023-06-17 13:32:58 +02:00
parent d2d40c1326
commit 35baf341c7
20 changed files with 300 additions and 96 deletions

View File

@ -48,6 +48,10 @@ entity TYPENAME_reader_interface is
get_data_user : in std_logic;
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Sample Info
sample_info_user : out SAMPLE_INFO_TYPE;
sample_info_valid_user : out std_logic;
@ -87,7 +91,7 @@ architecture arch of TYPENAME_reader_interface is
signal optional, optional_next : std_logic;
signal abort_mem : std_logic;
signal ready_in_dds_sig : std_logic;
signal valid_sig, valid_sig_next : std_logic;
signal valid_latch, valid_latch_next : std_logic;
signal decode_stage, decode_stage_next : DECODE_STAGE_TYPE;
signal return_stage, return_stage_next : DECODE_STAGE_TYPE;
-- ###GENERATED START###
@ -125,7 +129,7 @@ begin
eoc_user <= eoc_dds;
status_user <= status_dds;
valid <= valid_sig;
valid <= valid_latch;
decode_error <= decode_error_latch;
ready_in_dds <= ready_in_dds_sig;
@ -147,7 +151,7 @@ begin
align_offset_next <= align_offset;
target_align_next <= target_align;
optional_next <= optional;
valid_sig_next <= valid_sig;
valid_latch_next <= valid_latch;
data_in_latch_next <= data_in_latch;
align_op_next <= align_op;
abort_mem <= '0';
@ -168,9 +172,13 @@ begin
stage_next <= GET_PAYLOAD_HEADER;
-- RESET
decode_error_latch_next <= '0';
valid_sig_next <= '0';
valid_latch_next <= '0';
abort_mem <= '1';
else
valid_out_user <= valid_in_dds;
ready_in_dds_sig <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
-- ###GENERATED START###
-- MEMORY SIGNAL CONNECTIONS
-- ###GENERATED END###
@ -241,7 +249,7 @@ begin
-- If no Decode Error, mark output as valid
if (decode_error_latch = '0') then
valid_sig_next <= '1';
valid_latch_next <= '1';
end if;
-- Reset
@ -331,7 +339,7 @@ begin
last_word_in_latch <= '0';
decode_error_latch <= '0';
optional <= '0';
valid_sig <= '0';
valid_latch <= '0';
align_op <= '0';
align_offset <= (others => '0');
data_in_latch <= (others => '0');
@ -348,7 +356,7 @@ begin
last_word_in_latch <= last_word_in_latch_next;
decode_error_latch <= decode_error_latch_next;
optional <= optional_next;
valid_sig <= valid_sig_next;
valid_latch <= valid_latch_next;
align_op <= align_op_next;
align_offset <= align_offset_next;
data_in_latch <= data_in_latch_next;

View File

@ -47,6 +47,10 @@ entity TYPENAME_writer_interface is
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_user : out INSTANCE_HANDLE_TYPE;
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Communication Status
status_user : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
@ -100,6 +104,10 @@ begin
return_code_user <= return_code_dds;
instance_handle_out_user <= instance_handle_out_dds;
status_user <= status_dds;
valid_out_user <= valid_in_dds;
ready_in_dds <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
-- ###GENERATED START###
-- PORT SIGNAL CONNECTIONS
@ -118,7 +126,6 @@ begin
finalize_payload_next <= finalize_payload;
abort_mem <= '0';
encode_done <= '0';
ready_in_dds <= '0';
valid_out_dds <= '0';
last_word_out_dds <= '0';
data_out_dds <= (others => '0');

View File

@ -75,6 +75,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
id => id_in,
a => a_in,
@ -116,6 +120,10 @@ begin
get_data_user => get_data_r,
done_user => open,
return_code_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
sample_info_user => open,
sample_info_valid_user => open,
sample_info_ack_user => '1',

View File

@ -78,6 +78,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
id => id_in,
a => a_in,
@ -119,6 +123,10 @@ begin
get_data_user => get_data_r,
done_user => open,
return_code_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
sample_info_user => open,
sample_info_valid_user => open,
sample_info_ack_user => '1',

View File

@ -67,6 +67,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
encode_done => encode_done,
id => id_in,

View File

@ -70,6 +70,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
encode_done => encode_done,
id => id_in,

View File

@ -97,6 +97,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
id => id_in,
TestSequence_len => TestSequence_len_in,
@ -188,6 +192,10 @@ begin
get_data_user => get_data_r,
done_user => open,
return_code_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
sample_info_user => open,
sample_info_valid_user => open,
sample_info_ack_user => '1',

View File

@ -100,6 +100,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
id => id_in,
TestSequence_len => TestSequence_len_in,
@ -191,6 +195,10 @@ begin
get_data_user => get_data_r,
done_user => open,
return_code_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
sample_info_user => open,
sample_info_valid_user => open,
sample_info_ack_user => '1',

View File

@ -89,6 +89,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
encode_done => encode_done,
id => id_in,

View File

@ -92,6 +92,10 @@ begin
done_user => open,
return_code_user => open,
instance_handle_out_user => open,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
status_user => open,
encode_done => encode_done,
id => id_in,

View File

@ -34,6 +34,10 @@ entity L2_Testbench_Lib2 is
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_user : out INSTANCE_HANDLE_TYPE;
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Communication Status
status_user : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
-- ###GENERATED START###
@ -574,6 +578,10 @@ begin
done_user => done_user,
return_code_user => return_code_user,
instance_handle_out_user => instance_handle_out_user,
valid_out_user => valid_out_user,
ready_out_user => ready_out_user,
data_out_user => data_out_user,
last_word_out_user => last_word_out_user,
-- Communication Status
status_user => status_user,
-- ###GENERATED START###

View File

@ -36,6 +36,10 @@ entity L2_Testbench_Lib3 is
get_data_user : in std_logic;
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
sample_info_user : out SAMPLE_INFO_TYPE;
sample_info_valid_user : out std_logic;
sample_info_ack_user : in std_logic;
@ -585,6 +589,10 @@ begin
get_data_user => get_data_user,
done_user => done_user,
return_code_user => return_code_user,
valid_out_user => valid_out_user,
ready_out_user => ready_out_user,
data_out_user => data_out_user,
last_word_out_user => last_word_out_user,
sample_info_user => sample_info_user,
sample_info_valid_user => sample_info_valid_user,
sample_info_ack_user => sample_info_ack_user,

View File

@ -581,6 +581,10 @@ begin
get_data_user => get_data_user_ri,
done_user => done_ri_user,
return_code_user => return_code_ri_user,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
sample_info_user => sample_info_ri_user,
sample_info_valid_user => sample_info_valid_ri_user,
sample_info_ack_user => sample_info_ack_user_ri,
@ -631,6 +635,10 @@ begin
done_user => done_wi_user,
return_code_user => return_code_wi_user,
instance_handle_out_user => instance_handle_wi_user,
valid_out_user => open,
ready_out_user => '1',
data_out_user => open,
last_word_out_user => open,
-- Communication Status
status_user => status_wi_user,
-- ###GENERATED START###

View File

@ -36,6 +36,10 @@ entity L2_Testbench_Lib5 is
get_data_r : in std_logic;
done_r : out std_logic;
return_code_r : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
valid_out_r : out std_logic;
ready_out_r : in std_logic;
data_out_r : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_r : out std_logic;
sample_info_r : out SAMPLE_INFO_TYPE;
sample_info_valid_r : out std_logic;
sample_info_ack_r : in std_logic;
@ -55,6 +59,10 @@ entity L2_Testbench_Lib5 is
done_w : out std_logic;
return_code_w : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_w : out INSTANCE_HANDLE_TYPE;
valid_out_w : out std_logic;
ready_out_w : in std_logic;
data_out_w : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_w : out std_logic;
status_w : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
id_w : in std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
a_w : in std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
@ -596,6 +604,10 @@ begin
get_data_user => get_data_r,
done_user => done_r,
return_code_user => return_code_r,
valid_out_user => valid_out_r,
ready_out_user => ready_out_r,
data_out_user => data_out_r,
last_word_out_user => last_word_out_r,
sample_info_user => sample_info_r,
sample_info_valid_user => sample_info_valid_r,
sample_info_ack_user => sample_info_ack_r,
@ -646,6 +658,10 @@ begin
done_user => done_w,
return_code_user => return_code_w,
instance_handle_out_user => instance_handle_out_w,
valid_out_user => valid_out_w,
ready_out_user => ready_out_w,
data_out_user => data_out_w,
last_word_out_user => last_word_out_w,
-- Communication Status
status_user => status_w,
-- ###GENERATED START###

View File

@ -47,7 +47,7 @@ architecture testbench of L2_Type1_test1 is
signal clk, reset : std_logic := '0';
signal time : TIME_TYPE := TIME_ZERO;
-- INPUT
signal start_w, ack_w, done_w, ready_out_w, valid_out_w, last_word_out_w, encode_done_w, empty_rtps_w, full_rtps_w, rd_rtps_w, wr_rtps_w : std_logic := '0';
signal start_w, ack_w, done_w, ready_out_w, ready_out_r, valid_out_w, valid_out_r, last_word_out_w, last_word_out_r, encode_done_w, empty_rtps_w, full_rtps_w, rd_rtps_w, wr_rtps_w : std_logic := '0';
--signal opcode_w : Testbench_Lib2.rtps_config_package.DDS_WRITER_OPCODE_TYPE := Testbench_Lib2.rtps_config_package.DDS_WRITER_OPCODE_TYPE'(NOP);
signal opcode_w : DDS_WRITER_OPCODE_TYPE;
signal instance_handle_in_w : INSTANCE_HANDLE_TYPE := HANDLE_NIL;
@ -55,7 +55,7 @@ architecture testbench of L2_Type1_test1 is
signal source_ts_w : TIME_TYPE := TIME_INVALID;
signal max_wait_w : DURATION_TYPE := DURATION_ZERO;
signal return_code_w : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := RETCODE_OK;
signal data_out_w, data_in_rtps_w, data_out_rtps_w : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal data_out_w, data_out_r, data_in_rtps_w, data_out_rtps_w : std_logic_vector(WORD_WIDTH-1 downto 0) := (others => '0');
signal status_w : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := (others => '0');
signal id_w, a_w : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := (others => '0');
@ -75,6 +75,8 @@ architecture testbench of L2_Type1_test1 is
signal id1, id2, id3, a1, a2, a3 : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := (others => '0');
signal inst1, inst2, inst3 : INSTANCE_HANDLE_TYPE := HANDLE_NIL;
signal sample, data_out : AlertLogIDType;
-- HACK: For some reason (possibly Modelsim/Questasim Bug) I cannot declare the opcode signals from their respective Library sources,
-- because I cannot use a qualified expression to define an enumeration literal (and direct type casting cannot be done because
-- the types are not closely related). So I have to do define explicit type conversions between the types...
@ -115,6 +117,10 @@ begin
done_user => done_w,
return_code_user => return_code_w,
instance_handle_out_user => instance_handle_out_w,
valid_out_user => valid_out_w,
ready_out_user => ready_out_w,
data_out_user => data_out_w,
last_word_out_user => last_word_out_w,
-- Communication Status
status_user => status_w,
-- ###GENERATED START###
@ -186,6 +192,10 @@ begin
get_data_user => get_data_r,
done_user => done_r,
return_code_user => return_code_r,
valid_out_user => valid_out_r,
ready_out_user => ready_out_r,
data_out_user => data_out_r,
last_word_out_user => last_word_out_r,
sample_info_user => sample_info_r,
sample_info_valid_user => sample_info_valid_r,
sample_info_ack_user => sample_info_ack_r,
@ -262,6 +272,8 @@ begin
SetLogEnable(PASSED, FALSE);
SetLogEnable(INFO, TRUE);
RV.InitSeed(RV'instance_name);
sample <= GetAlertLogID("DDS Sample", ALERTLOG_BASE_ID);
data_out <= GetAlertLogID("Data Out", ALERTLOG_BASE_ID);
id1 <= RV.RandSlv(CDR_LONG_WIDTH);
id2 <= RV.RandSlv(CDR_LONG_WIDTH);
@ -372,7 +384,7 @@ begin
wait_on_sig(sample_info_valid_r);
wait for 1 ps; -- Make sure all signals stable
AlertIf(sample_info_r.valid_data /= '1', "Reader returned no Data", ERROR);
AffirmIfEqual(to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst1));
AffirmIfEqual(sample, to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst1));
sample_info_ack_r <= '1';
get_data_r <= '1';
wait until rising_edge(clk);
@ -380,8 +392,8 @@ begin
get_data_r <= '0';
wait_on_sig(valid_r);
wait for 1 ps; -- Make sure all signals stable
AffirmIfEqual(id_r, id1);
AffirmIfEqual(a_r, a1);
AffirmIfEqual(sample, id_r, id1);
AffirmIfEqual(sample, a_r, a1);
wait_on_sig(eoc_r);
wait until rising_edge(clk);
@ -390,7 +402,7 @@ begin
wait_on_sig(sample_info_valid_r);
wait for 1 ps; -- Make sure all signals stable
AlertIf(sample_info_r.valid_data /= '1', "Reader returned no Data", ERROR);
AffirmIfEqual(to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst2));
AffirmIfEqual(sample, to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst2));
sample_info_ack_r <= '1';
get_data_r <= '1';
wait until rising_edge(clk);
@ -398,8 +410,8 @@ begin
get_data_r <= '0';
wait_on_sig(valid_r);
wait for 1 ps; -- Make sure all signals stable
AffirmIfEqual(id_r, id2);
AffirmIfEqual(a_r, a1);
AffirmIfEqual(sample, id_r, id2);
AffirmIfEqual(sample, a_r, a1);
wait_on_sig(eoc_r);
wait until rising_edge(clk);
@ -408,7 +420,7 @@ begin
wait_on_sig(sample_info_valid_r);
wait for 1 ps; -- Make sure all signals stable
AlertIf(sample_info_r.valid_data /= '1', "Reader returned no Data", ERROR);
AffirmIfEqual(to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst1));
AffirmIfEqual(sample, to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst1));
sample_info_ack_r <= '1';
get_data_r <= '1';
wait until rising_edge(clk);
@ -416,8 +428,8 @@ begin
get_data_r <= '0';
wait_on_sig(valid_r);
wait for 1 ps; -- Make sure all signals stable
AffirmIfEqual(id_r, id1);
AffirmIfEqual(a_r, a2);
AffirmIfEqual(sample, id_r, id1);
AffirmIfEqual(sample, a_r, a2);
wait_on_sig(eoc_r);
wait until rising_edge(clk);
@ -426,7 +438,7 @@ begin
wait_on_sig(sample_info_valid_r);
wait for 1 ps; -- Make sure all signals stable
AlertIf(sample_info_r.valid_data /= '1', "Reader returned no Data", ERROR);
AffirmIfEqual(to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst2));
AffirmIfEqual(sample, to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst2));
sample_info_ack_r <= '1';
get_data_r <= '1';
wait until rising_edge(clk);
@ -434,8 +446,8 @@ begin
get_data_r <= '0';
wait_on_sig(valid_r);
wait for 1 ps; -- Make sure all signals stable
AffirmIfEqual(id_r, id2);
AffirmIfEqual(a_r, a2);
AffirmIfEqual(sample, id_r, id2);
AffirmIfEqual(sample, a_r, a2);
wait_on_sig(eoc_r);
wait until rising_edge(clk);
@ -475,7 +487,7 @@ begin
wait_on_sig(sample_info_valid_r);
wait for 1 ps; -- Make sure all signals stable
AlertIf(sample_info_r.valid_data /= '1', "Reader returned no Data", ERROR);
AffirmIfEqual(to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst3));
AffirmIfEqual(sample, to_unsigned(INSTANCE_HANDLE_TYPE(sample_info_r.instance_handle)), to_unsigned(inst3));
sample_info_ack_r <= '1';
get_data_r <= '1';
wait until rising_edge(clk);
@ -483,11 +495,29 @@ begin
get_data_r <= '0';
wait_on_sig(valid_r);
wait for 1 ps; -- Make sure all signals stable
AffirmIfEqual(id_r, id3);
AffirmIfEqual(a_r, a3);
AffirmIfEqual(sample, id_r, id3);
AffirmIfEqual(sample, a_r, a3);
wait_on_sig(eoc_r);
wait until rising_edge(clk);
Log("Test non Type Related Writer Operation (GET_OFFERED_DEADLINE_MISSED_STATUS)", INFO);
start_w <= '1';
opcode_w <= GET_OFFERED_DEADLINE_MISSED_STATUS;
wait_on_sig(ack_w);
wait until rising_edge(clk);
start_w <= '0';
wait_on_sig(done_w);
wait_on_sig(last_word_out_w);
Log("Test non Type Related Reader Operation (GET_REQUESTED_DEADLINE_MISSED_STATUS)", INFO);
start_r <= '1';
opcode_r <= GET_REQUESTED_DEADLINE_MISSED_STATUS;
wait_on_sig(ack_r);
wait until rising_edge(clk);
start_r <= '0';
wait_on_sig(done_r);
wait_on_sig(last_word_out_r);
TranscriptOpen(RESULTS_FILE, APPEND_MODE);
SetTranscriptMirror;
ReportAlerts;
@ -496,6 +526,42 @@ begin
wait;
end process;
check_out_w : process(all)
variable cnt : natural := 0;
begin
if rising_edge(clk) then
ready_out_w <= '1';
if (valid_out_w = '1') then
AffirmIfEqual(data_out, data_out_w, (data_out_w'range => '0'));
if (cnt = 5) then
AffirmIfEqual(data_out, last_word_out_w, '1');
cnt := 0;
else
AffirmIfEqual(data_out, last_word_out_w, '0');
cnt := cnt + 1;
end if;
end if;
end if;
end process;
check_out_r : process(all)
variable cnt : natural := 0;
begin
if rising_edge(clk) then
ready_out_r <= '1';
if (valid_out_r = '1') then
AffirmIfEqual(data_out, data_out_r, (data_out_r'range => '0'));
if (cnt = 5) then
AffirmIfEqual(data_out, last_word_out_r, '1');
cnt := 0;
else
AffirmIfEqual(data_out, last_word_out_r, '0');
cnt := cnt + 1;
end if;
end if;
end if;
end process;
clock_prc : process
begin
clk <= '0';

View File

@ -169,6 +169,10 @@ begin
get_data_r => get_data_r,
done_r => done_r,
return_code_r => return_code_r,
valid_out_r => open,
ready_out_r => '1',
data_out_r => open,
last_word_out_r => open,
sample_info_r => sample_info_r,
sample_info_valid_r => sample_info_valid_r,
sample_info_ack_r => sample_info_ack_r,
@ -188,6 +192,10 @@ begin
done_w => done_w,
return_code_w => return_code_w,
instance_handle_out_w => instance_handle_out_w,
valid_out_w => open,
ready_out_w => '1',
data_out_w => open,
last_word_out_w => open,
status_w => status_w,
id_w => id_w,
a_w => a_w,

View File

@ -26,11 +26,10 @@ entity Type1_reader_interface is
get_data_dds : out std_logic;
done_dds : in std_logic;
return_code_dds : in std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
ready_in_dds : out std_logic;
valid_in_dds : in std_logic;
ready_in_dds : out std_logic;
data_in_dds : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_dds : in std_logic;
-- Sample Info
sample_info_dds : in SAMPLE_INFO_TYPE;
sample_info_valid_dds : in std_logic;
sample_info_ack_dds : out std_logic;
@ -50,6 +49,10 @@ entity Type1_reader_interface is
get_data_user : in std_logic;
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Sample Info
sample_info_user : out SAMPLE_INFO_TYPE;
sample_info_valid_user : out std_logic;
@ -172,7 +175,10 @@ begin
valid_latch_next <= '0';
abort_mem <= '1';
else
null;
valid_out_user <= valid_in_dds;
ready_in_dds_sig <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
end if;
when GET_PAYLOAD_HEADER =>
-- TODO: Latch Offset from Options Field?

View File

@ -27,12 +27,12 @@ entity Type1_writer_interface is
done_dds : in std_logic;
return_code_dds : in std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_dds : in INSTANCE_HANDLE_TYPE;
ready_out_dds : in std_logic;
valid_out_dds : out std_logic;
ready_out_dds : in std_logic;
data_out_dds : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_dds : out std_logic;
ready_in_dds : out std_logic;
valid_in_dds : in std_logic;
ready_in_dds : out std_logic;
data_in_dds : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_dds : in std_logic;
-- Communication Status
@ -48,6 +48,10 @@ entity Type1_writer_interface is
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_user : out INSTANCE_HANDLE_TYPE;
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Communication Status
status_user : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
@ -95,6 +99,10 @@ begin
return_code_user <= return_code_dds;
instance_handle_out_user <= instance_handle_out_dds;
status_user <= status_dds;
valid_out_user <= valid_in_dds;
ready_in_dds <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
main_prc : process (all)
begin
@ -109,7 +117,6 @@ begin
finalize_payload_next <= finalize_payload;
abort_mem <= '0';
encode_done <= '0';
ready_in_dds <= '0';
valid_out_dds <= '0';
last_word_out_dds <= '0';
data_out_dds <= (others => '0');

View File

@ -26,11 +26,10 @@ entity Type2_reader_interface is
get_data_dds : out std_logic;
done_dds : in std_logic;
return_code_dds : in std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
ready_in_dds : out std_logic;
valid_in_dds : in std_logic;
ready_in_dds : out std_logic;
data_in_dds : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_dds : in std_logic;
-- Sample Info
sample_info_dds : in SAMPLE_INFO_TYPE;
sample_info_valid_dds : in std_logic;
sample_info_ack_dds : out std_logic;
@ -50,6 +49,10 @@ entity Type2_reader_interface is
get_data_user : in std_logic;
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Sample Info
sample_info_user : out SAMPLE_INFO_TYPE;
sample_info_valid_user : out std_logic;
@ -501,6 +504,10 @@ begin
valid_latch_next <= '0';
abort_mem <= '1';
else
valid_out_user <= valid_in_dds;
ready_in_dds_sig <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
-- ###GENERATED START###
TestSequence_ready <= TestSequence_TestChar_mem_ready_in and TestSequence_TestWChar_mem_ready_in and TestSequence_TestLongLong_mem_ready_in and TestSequence_TestLongDouble_mem_ready_in;
TestSequence_TestChar_mem_addr <= TestSequence_addr;

View File

@ -27,12 +27,12 @@ entity Type2_writer_interface is
done_dds : in std_logic;
return_code_dds : in std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_dds : in INSTANCE_HANDLE_TYPE;
ready_out_dds : in std_logic;
valid_out_dds : out std_logic;
ready_out_dds : in std_logic;
data_out_dds : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_dds : out std_logic;
ready_in_dds : out std_logic;
valid_in_dds : in std_logic;
ready_in_dds : out std_logic;
data_in_dds : in std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_in_dds : in std_logic;
-- Communication Status
@ -48,6 +48,10 @@ entity Type2_writer_interface is
done_user : out std_logic;
return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0);
instance_handle_out_user : out INSTANCE_HANDLE_TYPE;
valid_out_user : out std_logic;
ready_out_user : in std_logic;
data_out_user : out std_logic_vector(WORD_WIDTH-1 downto 0);
last_word_out_user : out std_logic;
-- Communication Status
status_user : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0);
@ -350,6 +354,10 @@ begin
return_code_user <= return_code_dds;
instance_handle_out_user <= instance_handle_out_dds;
status_user <= status_dds;
valid_out_user <= valid_in_dds;
ready_in_dds <= ready_out_user;
data_out_user <= data_in_dds;
last_word_out_user <= last_word_in_dds;
-- ###GENERATED START###
TestSequence_valid <= TestSequence_TestChar_mem_valid_out and TestSequence_TestWChar_mem_valid_out and TestSequence_TestLongLong_mem_valid_out and TestSequence_TestLongDouble_mem_valid_out;
@ -388,7 +396,6 @@ begin
finalize_payload_next <= finalize_payload;
abort_mem <= '0';
encode_done <= '0';
ready_in_dds <= '0';
valid_out_dds <= '0';
last_word_out_dds <= '0';
data_out_dds <= (others => '0');