diff --git a/libraries/base/mm/tb/vhdl/mm_file_pkg.vhd b/libraries/base/mm/tb/vhdl/mm_file_pkg.vhd index a1fbb1a37a07e5e6bb24213b31acd311f84d1eff..b16058f064906e17dcf9216068812d1d2f24d993 100644 --- a/libraries/base/mm/tb/vhdl/mm_file_pkg.vhd +++ b/libraries/base/mm/tb/vhdl/mm_file_pkg.vhd @@ -148,6 +148,11 @@ PACKAGE mm_file_pkg IS rd_addr : IN INTEGER; -- use integer to support full 32 bit range SIGNAL rd_data : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); SIGNAL mm_clk : IN STD_LOGIC); + -- . rd_latency = 1 + PROCEDURE mmf_mm_bus_rd(filename : IN STRING; + rd_addr : IN INTEGER; + SIGNAL rd_data : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); + SIGNAL mm_clk : IN STD_LOGIC); -- Procedure to get NOW via simulator status PROCEDURE mmf_sim_get_now(filename : IN STRING; -- file name without extension @@ -481,6 +486,9 @@ PACKAGE BODY mm_file_pkg IS hread(rd_line, v_rd_data); file_close(stat_file); rd_data <= v_rd_data; + -- wait to ensure rd_data has got v_rd_data, otherwise rd_data still holds the old data on procedure exit + -- the wait should be < mm_clk period/2 to not affect the read rate + WAIT FOR 1 fs; ELSE REPORT "mmf_mm_bus_rd() could not open " & stat_filename & " at " & time_to_str(now) SEVERITY FAILURE; END IF; @@ -492,6 +500,15 @@ PACKAGE BODY mm_file_pkg IS -- The END implicitely closes the files, if still necessary END; + -- rd_latency = 1 + PROCEDURE mmf_mm_bus_rd(filename : IN STRING; + rd_addr : IN INTEGER; + SIGNAL rd_data : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); + SIGNAL mm_clk : IN STD_LOGIC) IS + BEGIN + mmf_mm_bus_rd(filename, 1, rd_addr, rd_data, mm_clk); + END; + PROCEDURE mmf_sim_get_now(filename : IN STRING; -- file name without extension SIGNAL rd_now : OUT STRING; SIGNAL mm_clk : IN STD_LOGIC) IS diff --git a/libraries/base/mm/tb/vhdl/tb_mm_file.vhd b/libraries/base/mm/tb/vhdl/tb_mm_file.vhd index 7d044fae3ba7318d75b1f638ef38b312ba430ebf..80b4f24676d1361debefa3dcb053ed547648cc6a 100644 --- a/libraries/base/mm/tb/vhdl/tb_mm_file.vhd +++ b/libraries/base/mm/tb/vhdl/tb_mm_file.vhd @@ -136,10 +136,7 @@ BEGIN tb_state <= "Read "; FOR I IN 0 TO c_mm_nof_dat-1 LOOP mmf_mm_bus_rd(c_reg_r_w_dc_file_pathname, c_mem_reg.latency, I, file_rd_data, mm_clk); - IF I>0 THEN - -- skip first because it is undefined due to that assert needs to compare previous value - ASSERT I=TO_UINT(file_rd_data)+1 REPORT "Read data is wrong." SEVERITY ERROR; - END IF; + ASSERT I=TO_UINT(file_rd_data) REPORT "Read data is wrong." SEVERITY ERROR; END LOOP; -- Write/Read @@ -150,10 +147,7 @@ BEGIN mmf_mm_bus_wr(c_reg_r_w_dc_file_pathname, v_addr, I, mm_clk); proc_common_wait_some_cycles(mm_clk, c_cross_nof_mm_clk); mmf_mm_bus_rd(c_reg_r_w_dc_file_pathname, c_mem_reg.latency, v_addr, file_rd_data, mm_clk); - IF I>0 THEN - -- skip first because it is undefined due to that assert needs to compare previous value - ASSERT TO_UINT(file_wr_data)=TO_UINT(file_rd_data)+1 REPORT "Write/read data is wrong." SEVERITY ERROR; - END IF; + ASSERT TO_UINT(file_wr_data)=TO_UINT(file_rd_data) REPORT "Write/read data is wrong." SEVERITY ERROR; END LOOP; proc_common_gen_pulse(mm_clk, get_now);