diff --git a/libraries/base/common/tb/vhdl/tb_common_mem_master_mux.vhd b/libraries/base/common/tb/vhdl/tb_common_mem_master_mux.vhd index 01ae0fb1529c6fcee7ffc3fae6882183b5143b60..bab3efcee8670c745fb3cfedd34c336f3fc0fac2 100644 --- a/libraries/base/common/tb/vhdl/tb_common_mem_master_mux.vhd +++ b/libraries/base/common/tb/vhdl/tb_common_mem_master_mux.vhd @@ -52,9 +52,11 @@ USE work.tb_common_mem_pkg.ALL; ENTITY tb_common_mem_master_mux IS GENERIC ( - g_nof_masters : POSITIVE := 2; -- Number of master memory interfaces on the MM bus array. - g_base_arr : t_nat_natural_arr := (0, 256); -- Address base per slave port of common_mem_bus - g_width_arr : t_nat_natural_arr := (4, 8) -- Address width per slave port of common_mem_bus + g_nof_masters : POSITIVE := 2; -- Number of master memory interfaces on the MM bus array. + g_base_arr : t_nat_natural_arr := (0, 256); -- Address base per slave port of common_mem_bus + g_width_arr : t_nat_natural_arr := (4, 8); -- Address width per slave port of common_mem_bus + g_pipeline_bus_mosi : BOOLEAN := FALSE; + g_pipeline_bus_miso : BOOLEAN := FALSE ); END tb_common_mem_master_mux; @@ -67,12 +69,16 @@ ARCHITECTURE tb OF tb_common_mem_master_mux IS CONSTANT mm_clk_period : TIME := 10 ns; - CONSTANT c_rd_latency : NATURAL := 1; - CONSTANT c_rd_latency_arr : t_nat_natural_arr := array_init(c_rd_latency, g_nof_masters); - CONSTANT c_rd_latency_min : NATURAL := smallest(c_rd_latency_arr); + CONSTANT c_bus_mosi_latency : NATURAL := sel_a_b(g_pipeline_bus_mosi, 1, 0); + CONSTANT c_bus_miso_latency : NATURAL := sel_a_b(g_pipeline_bus_miso, 1, 0); + CONSTANT c_ram_rd_latency : NATURAL := 1; + CONSTANT c_ram_rd_latency_arr : t_nat_natural_arr := array_init(c_ram_rd_latency, g_nof_masters); + + CONSTANT c_read_latency : NATURAL := c_bus_mosi_latency + c_ram_rd_latency + c_bus_miso_latency; + CONSTANT c_addr_w : NATURAL := largest(ceil_log2(largest(g_base_arr)), largest(g_width_arr)) + 1; CONSTANT c_data_w : NATURAL := 32; - CONSTANT c_test_ram : t_c_mem := (latency => c_rd_latency, + CONSTANT c_test_ram : t_c_mem := (latency => c_ram_rd_latency, adr_w => c_addr_w, dat_w => c_data_w, nof_dat => 2**c_addr_w, @@ -122,7 +128,7 @@ BEGIN v_span := 2**g_width_arr(I); FOR J IN v_span-1 DOWNTO 0 LOOP proc_mem_mm_bus_rd(v_base + J, mm_clk, stimuli_mosi); - proc_common_wait_some_cycles(mm_clk, c_rd_latency); + proc_common_wait_some_cycles(mm_clk, c_read_latency); v_data := TO_UINT(stimuli_miso.rddata(31 DOWNTO 0)); IF v_data /= R+J THEN REPORT "Error! Readvalue is not as expected" SEVERITY ERROR; @@ -142,9 +148,9 @@ BEGIN g_nof_slaves => g_nof_masters, g_base_arr => g_base_arr, g_width_arr => g_width_arr, - g_rd_latency_arr => c_rd_latency_arr, - g_pipeline_mosi => FALSE, - g_pipeline_miso => FALSE + g_rd_latency_arr => c_ram_rd_latency_arr, + g_pipeline_mosi => g_pipeline_bus_mosi, + g_pipeline_miso => g_pipeline_bus_miso ) PORT MAP ( mm_clk => mm_clk, @@ -158,7 +164,7 @@ BEGIN u_dut: ENTITY work.common_mem_master_mux GENERIC MAP ( g_nof_masters => g_nof_masters, - g_rd_latency_min => c_rd_latency_min + g_rd_latency_min => c_read_latency ) PORT MAP ( mm_clk => mm_clk,