From 50860b9e204309eaf6aca88346ae4c51b84665da Mon Sep 17 00:00:00 2001 From: till straumann Date: Wed, 24 Feb 2021 11:08:05 +0100 Subject: [PATCH] Fix for issue #5 (wrong endianness of data stream in test bed) The 'evr320_data_filter' entity presents data in little-endian format. However, the test is written for big-endian; set the SWAP generic to fix this. Also; once this test passes events won't be detected because the checksum timeout is not reached. Set to zero. Last: ghdl complains about mem_data(x) indexing when x > C_MEM_DATA_WIDTH. Replaced hard-coded statements by a simple loop that runs from 0 to C_MEM_DATA_WIDTH/8 - 1. --- tb/evr320_decoder_tb.vhd | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/tb/evr320_decoder_tb.vhd b/tb/evr320_decoder_tb.vhd index 28033b3..5e4dc90 100644 --- a/tb/evr320_decoder_tb.vhd +++ b/tb/evr320_decoder_tb.vhd @@ -176,7 +176,7 @@ begin evr320_data_filter_inst: entity work.evr320_data_filter generic map ( - SWAP => false, + SWAP => true, -- non-swapped uses LE layout; our check below converts to BE NUM_BYTES => 8 ) port map ( @@ -431,6 +431,7 @@ begin event_recorder_ctrl.event_number <= std_logic_vector(to_unsigned(g_EVENT_NR_SOS, 8)); evr_params.cs_min_cnt <= X"00000000"; evr_params.cs_min_time <= X"00000000"; + evr_params.cs_timeout_cnt <= X"00000000"; mem_addr <= x"000"; await_value(rxlos, '0', 0 ns, 10 us, FAILURE, "wait for release RX LOS"); --wait until (rxlos = '0'); @@ -502,14 +503,9 @@ begin for addr in 0 to 31 loop mem_addr <= '0' & C_EVENT_REC_FLAGS & std_logic_vector(to_unsigned(addr, 5)); wait_num_rising_edge_plus_margin(usr_clk, 1, 1 ns); - check_value(mem_data(0), all_expected_events(8*addr), ERROR, "Event " & to_string(8*addr) & " Flag"); - check_value(mem_data(8), all_expected_events(8*addr + 1), ERROR, "Event " & to_string(8*addr + 1) & " Flag"); - check_value(mem_data(16), all_expected_events(8*addr + 2), ERROR, "Event " & to_string(8*addr + 2) & " Flag"); - check_value(mem_data(24), all_expected_events(8*addr + 3), ERROR, "Event " & to_string(8*addr + 3) & " Flag"); - check_value(mem_data(32), all_expected_events(8*addr + 4), ERROR, "Event " & to_string(8*addr + 4) & " Flag"); - check_value(mem_data(40), all_expected_events(8*addr + 5), ERROR, "Event " & to_string(8*addr + 5) & " Flag"); - check_value(mem_data(48), all_expected_events(8*addr + 6), ERROR, "Event " & to_string(8*addr + 6) & " Flag"); - check_value(mem_data(56), all_expected_events(8*addr + 7), ERROR, "Event " & to_string(8*addr + 7) & " Flag"); + for j in 0 to C_MEM_DATA_WIDTH/8 loop + check_value(mem_data(8*j), all_expected_events(8*addr + j), ERROR, "Event " & to_string(8*addr + j) & " Flag"); + end loop; end loop; else error("Unsupported width of C_MEM_DATA_WIDTH"); -- 2.54.0