event event reception check in simulation, fix stimuli

This commit is contained in:
2018-12-05 17:14:04 +01:00
parent c52673a8ca
commit 84f23d13ab
2 changed files with 44 additions and 9 deletions

View File

@ -91,6 +91,10 @@ architecture testbench of evr320_decoder_tb is
constant FILTER_ADDRESS : std_logic_vector(11 downto 0) := x"028";
constant FILTER_NUM_BYTES : integer := 8;
constant STIMULI_RUNS : integer := 2;
signal received_events : integer := 0;
signal expect_num_events : integer := 0;
signal filter_data, filter_data_check : std_logic_vector(63 downto 0) := (others => '0');
signal filter_valid : std_logic := '0';
@ -179,6 +183,7 @@ begin
if (dec_stream_valid = '1') then
addr := dec_stream_data(18 downto 8);
data := dec_stream_data(7 downto 0);
i := to_integer(unsigned(addr)) - to_integer(unsigned(segment_addr))*16;
-- save stream for later comparision:
dec_stream_check(i).addr <= addr;
dec_stream_check(i).data <= data;
@ -188,6 +193,20 @@ begin
end if;
end process;
---------------------------------------------------------
-- Wait for Event
---------------------------------------------------------
process
begin
wait until rising_edge(usr_clk);
for i in 0 to 3 loop
if (usr_events(i) = '1') then
log(ID_CTRL, "Event Received: 0x" & to_string(evr_params.event_numbers(i), HEX) );
received_events <= received_events + 1;
end if;
end loop;
end process;
---------------------------------------------------------
-- Fetch filter data
---------------------------------------------------------
@ -215,6 +234,7 @@ begin
variable i : integer;
variable parse_fsm : parse_fsm_state := idle;
variable payload_cnt : integer range 0 to 2047;
variable event_cnt : integer := 0;
begin
file_open(file_stimuli, "../tb/stimuli_mgt.dat", read_mode);
readline(file_stimuli, file_line); -- comment
@ -233,12 +253,19 @@ begin
-- write to array:
mgt_stream(i).data <= data;
mgt_stream(i).data_k <= data_k;
mgt_stream(i).event <= data;
mgt_stream(i).event <= event;
mgt_stream(i).event_k <= event_k;
mgt_stream_index <= i;
--debug output:
--log(ID_SEGMENT_DATA, "stimuli file: i=" & integer'image(i) & " event=0x" & to_string(event, HEX) & " k=" & to_string(event_k, HEX)
-- & " data=0x" & to_string(data, HEX) & " k=" & to_string(data_k, HEX) & " ");
-- Count Events:
----------------
if (event /= x"00" and event_k = "0") then
event_cnt := event_cnt + 1;
end if;
expect_num_events <= event_cnt * STIMULI_RUNS;
-- Parse only segment:
----------------------
case (parse_fsm) is
@ -309,8 +336,8 @@ begin
evr_params.event_numbers( 1)<= X"00";
evr_params.event_numbers( 2)<= X"00";
evr_params.event_numbers( 3)<= X"00";
evr_params.cs_min_cnt <= X"00000010";
evr_params.cs_min_time <= X"00000100";
evr_params.cs_min_cnt <= X"00000000";
evr_params.cs_min_time <= X"00000000";
mem_addr <= x"000";
await_value(rxlos, '0', 0 ns, 10 us, FAILURE, "wait for release RX LOS");
--wait until (rxlos = '0');
@ -319,12 +346,14 @@ begin
-- Stimuli MGT
--------------------------------------------------------------------------
wait until rising_edge(rxusrclk);
log(ID_DATA, "Start stimuli Stream for MGT");
for idx in 0 to mgt_stream_index loop
--log(ID_FRAME_DATA, to_string(mgt_stream(idx).data, HEX), to_string(mgt_stream(idx).event, HEX));
wait until rising_edge(rxusrclk);
rxdata <= mgt_stream(idx).data & mgt_stream(idx).event;
rxcharisk <= mgt_stream(idx).data_k & mgt_stream(idx).event_k;
for b in 0 to STIMULI_RUNS-1 loop
log(ID_DATA, "Send stimuli stream to MGT");
for idx in 0 to mgt_stream_index loop
--log(ID_FRAME_DATA, to_string(mgt_stream(idx).data, HEX), to_string(mgt_stream(idx).event, HEX));
wait until rising_edge(rxusrclk);
rxdata <= mgt_stream(idx).data & mgt_stream(idx).event;
rxcharisk <= mgt_stream(idx).data_k & mgt_stream(idx).event_k;
end loop;
end loop;
--------------------------------------------------------------------------
@ -348,6 +377,11 @@ begin
& "addr=0x" & to_string(FILTER_ADDRESS, HEX)
& " bytes=" & integer'image(FILTER_NUM_BYTES));
--------------------------------------------------------------------------
-- Check if correct number of events has been detected
--------------------------------------------------------------------------
check_value(received_events, expect_num_events, ERROR, "Check correct number of received events");
--------------------------------------------------------------------------
-- Read DPRAM buffer
--------------------------------------------------------------------------

View File

@ -128,3 +128,4 @@ BC 1 00 0 align
BC 1 00 0 align
00 0 00 0 gap
0F 0 00 0 BPM event
00 0 00 0 gap