diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd index 38214e72d7c3202a66b85fe2fed3e064fda6f004..6af5fab043102e74303bf063f837676da6f99846 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd @@ -124,9 +124,7 @@ ARCHITECTURE str OF ddrctrl IS SIGNAL stop : STD_LOGIC; SIGNAL rd_fifo_usedw : STD_LOGIC_VECTOR(c_rd_fifo_uw_w-1 DOWNTO 0); SIGNAL rd_ready : STD_LOGIC; - SIGNAL inp_ds : NATURAL; SIGNAL inp_bsn_adr : NATURAL; - SIGNAL outp_ds : NATURAL; SIGNAL outp_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); SIGNAL data_stopped : STD_LOGIC; @@ -153,7 +151,6 @@ BEGIN in_stop => stop, out_sosi => out_sosi, out_adr => out_adr, - out_bsn_ds => inp_ds, out_bsn_adr => inp_bsn_adr, out_data_stopped => data_stopped ); @@ -247,8 +244,6 @@ BEGIN rst => rst, in_sosi => rd_sosi, - in_ds => outp_ds, - in_bsn => outp_bsn, out_sosi_arr => out_sosi_arr, out_ready => rd_ready @@ -269,7 +264,8 @@ BEGIN g_max_adr => c_nof_adr, g_burstsize => g_burstsize, g_last_burstsize => c_last_burstsize, - g_adr_per_b => c_adr_per_b + g_adr_per_b => c_adr_per_b, + g_bim => c_bim ) PORT MAP( clk => clk, @@ -279,7 +275,6 @@ BEGIN inp_of => out_of, inp_sosi => out_sosi, inp_adr => out_adr, - inp_ds => inp_ds, inp_bsn_adr => inp_bsn_adr, inp_data_stopped => data_stopped, rst_ddrctrl_input => rst_ddrctrl_input, @@ -290,10 +285,6 @@ BEGIN wr_sosi => wr_sosi, rd_fifo_usedw => rd_fifo_usedw, - -- ddrctrl_output - outp_ds => outp_ds, - outp_bsn => outp_bsn, - -- ddrctrl_controller stop_in => stop_in, stop_out => stop diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd index 3f4cab12b7d991c5abd15ddc3fe2030bb5ff222e..3a2b66fd63d8e87508770d7d5902ebff4ec8ae7b 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd @@ -50,7 +50,8 @@ ENTITY ddrctrl_controller IS g_max_adr : NATURAL; -- 16128 g_burstsize : NATURAL; -- 64 g_last_burstsize : NATURAL; -- 18 - g_adr_per_b : NATURAL -- 299 + g_adr_per_b : NATURAL; -- 299 + g_bim : NATURAL -- 54 ); PORT ( clk : IN STD_LOGIC; @@ -60,7 +61,6 @@ ENTITY ddrctrl_controller IS inp_of : IN NATURAL; inp_sosi : IN t_dp_sosi; inp_adr : IN NATURAL; - inp_ds : IN NATURAL; inp_bsn_adr : IN NATURAL; inp_data_stopped : IN STD_LOGIC; rst_ddrctrl_input : OUT STD_LOGIC; @@ -72,7 +72,6 @@ ENTITY ddrctrl_controller IS rd_fifo_usedw : IN STD_LOGIC_VECTOR(g_rd_fifo_uw_w-1 DOWNTO 0); -- ddrctrl_output - outp_ds : OUT NATURAL; outp_bsn : OUT STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0) := (OTHERS => '0'); -- ddrctrl_controller @@ -96,7 +95,6 @@ ARCHITECTURE rtl OF ddrctrl_controller IS CONSTANT c_rest : NATURAL := c_rd_data_w-(g_wr_data_w mod c_rd_data_w); -- 96 CONSTANT c_max_read_cnt : NATURAL := (g_max_adr+1)/g_burstsize; -- 256 CONSTANT c_io_ddr_data_w : NATURAL := func_tech_ddr_ctlr_data_w(g_tech_ddr); -- 576 - CONSTANT c_proportion : NATURAL := (c_io_ddr_data_w/c_rd_data_w)+1; -- type for statemachine TYPE t_state IS (RESET, WRITING, SET_STOP, STOP_WRITING, LAST_WRITE_BURST, START_READING, READING, STOP_READING, IDLE); @@ -119,7 +117,6 @@ ARCHITECTURE rtl OF ddrctrl_controller IS need_burst : STD_LOGIC; -- reading signals - outp_ds : NATURAL; outp_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); read_cnt : NATURAL; rd_burst_en : STD_LOGIC; @@ -129,19 +126,21 @@ ARCHITECTURE rtl OF ddrctrl_controller IS wr_sosi : t_dp_sosi; END RECORD; - CONSTANT c_t_reg_init : t_reg := (RESET, '0', '0', TO_UVEC(g_max_adr, c_adr_w), (OTHERS => '0'), 0, '1', '1', '0', 0, (OTHERS => '0'), 0, '0', c_mem_ctlr_mosi_rst, c_dp_sosi_init); + CONSTANT c_t_reg_init : t_reg := (RESET, '0', '0', TO_UVEC(g_max_adr, c_adr_w), (OTHERS => '0'), 0, '1', '1', '0', (OTHERS => '0'), 0, '0', c_mem_ctlr_mosi_rst, c_dp_sosi_init); -- signals for readability SIGNAL d_reg : t_reg := c_t_reg_init; SIGNAL q_reg : t_reg := c_t_reg_init; + SIGNAL s_bim : NATURAL := g_bim; + BEGIN q_reg <= d_reg WHEN rising_edge(clk); -- put the input data into c_v and fill the output vector from c_v - p_state : PROCESS(q_reg, rst, inp_of, inp_sosi, inp_adr, inp_ds, inp_bsn_adr, inp_data_stopped, dvr_miso, rd_fifo_usedw, stop_in) + p_state : PROCESS(q_reg, rst, inp_of, inp_sosi, inp_adr, inp_bsn_adr, inp_data_stopped, dvr_miso, rd_fifo_usedw, stop_in) VARIABLE v : t_reg := c_t_reg_init; @@ -152,10 +151,10 @@ BEGIN CASE q_reg.state IS WHEN RESET => - v := c_t_reg_init; - v.dvr_mosi.burstbegin := '1'; - v.dvr_mosi.burstsize(dvr_mosi.burstsize'length-1 DOWNTO 0) := (OTHERS => '0'); - v.dvr_mosi.wr := '1'; + v := c_t_reg_init; + v.dvr_mosi.burstbegin := '1'; + v.dvr_mosi.burstsize(dvr_mosi.burstsize'length-1 DOWNTO 0) := (OTHERS => '0'); + v.dvr_mosi.wr := '1'; @@ -279,28 +278,18 @@ BEGIN WHEN START_READING => v.dvr_mosi.burstbegin := '0'; v.rd_burst_en := '1'; - v.outp_ds := inp_ds; v.read_cnt := 0; - - FOR I IN 0 TO inp_bsn_adr+(g_max_adr-TO_UINT(q_reg.stop_adr)) LOOP -- takes a while WRONG, wil be fixed after L2SDP-705, 706 and 70 - IF v.outp_ds-c_rest <= 0 THEN - v.outp_ds := v.outp_ds+c_rd_data_w-c_rest; - ELSE - v.outp_ds := v.outp_ds-c_rest; - END IF; - END LOOP; - v.outp_bsn := TO_UVEC(TO_UINT(inp_sosi.bsn), c_dp_stream_bsn_w); -- WRONG, wil be fixed after L2SDP-705, 706 and 707 - v.state := READING; + v.outp_bsn := TO_UVEC(TO_UINT(inp_sosi.bsn)-g_bim, c_dp_stream_bsn_w); + v.state := READING; WHEN READING => -- rd_fifo needs a refil after rd_fifo_usedw <= 10 because of delays, if you wait until rd_fifo_usedw = 0 then you get an empty fifo which results in your outputs sosi.valid not being constatly valid. - IF TO_UINT(rd_fifo_usedw) <= 10 AND dvr_miso.done = '1' AND q_reg.rd_burst_en = '1' AND dvr_miso.done = '1' THEN + IF TO_UINT(rd_fifo_usedw) <= g_burstsize AND dvr_miso.done = '1' AND q_reg.rd_burst_en = '1' THEN v.dvr_mosi.burstbegin := '0'; v.dvr_mosi.burstsize(dvr_mosi.burstsize'length-1 DOWNTO 0) := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.wr := '0'; v.dvr_mosi.rd := '1'; - v.outp_ds := inp_ds; IF TO_UINT(q_reg.stop_adr(c_adr_w-1 DOWNTO 0))+g_burstsize*q_reg.read_cnt >= g_max_adr THEN v.dvr_mosi.address(c_adr_w-1 DOWNTO 0) := TO_UVEC((TO_UINT(q_reg.stop_adr(c_adr_w-1 DOWNTO 0))+g_burstsize*q_reg.read_cnt)-g_max_adr-1, c_adr_w); ELSE @@ -314,7 +303,7 @@ BEGIN END IF; -- makes sure the fifo is filled before asking for another rd request. to prevent 4 rd burst to happend directly after one another. - IF TO_UINT(rd_fifo_usedw) = 11 THEN + IF dvr_miso.done = '0' THEN v.rd_burst_en := '1'; END IF; @@ -385,7 +374,6 @@ BEGIN wr_sosi <= q_reg.wr_sosi; stop_out <= q_reg.stopped; outp_bsn <= q_reg.outp_bsn; - outp_ds <= q_reg.outp_ds; rst_ddrctrl_input <= q_reg.rst_ddrctrl_input OR rst; END rtl; diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input.vhd index 208780472a0e4df9cfc607de8f8f3e87e0ffb783..c27c54acd3401cc8996d26e5dcebcd664ab65fb3 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input.vhd @@ -59,7 +59,6 @@ ENTITY ddrctrl_input IS in_stop : IN STD_LOGIC; out_sosi : OUT t_dp_sosi; -- output data out_adr : OUT NATURAL; - out_bsn_ds : OUT NATURAL; out_bsn_adr : OUT NATURAL; out_data_stopped : OUT STD_LOGIC ); @@ -76,7 +75,6 @@ ARCHITECTURE str OF ddrctrl_input IS SIGNAL sosi_p_rp : t_dp_sosi := c_dp_sosi_init; SIGNAL sosi_rp_ac : t_dp_sosi := c_dp_sosi_init; SIGNAL adr : NATURAL := 0; - SIGNAL bsn_ds : NATURAL := 0; SIGNAL valid : STD_LOGIC := '0'; SIGNAL data_stopped_rp_ac : STD_LOGIC := '0'; @@ -110,7 +108,6 @@ BEGIN in_sosi => sosi_p_rp, -- input data in_stop => in_stop, out_sosi => sosi_rp_ac, -- output data - out_bsn_ds => bsn_ds, -- amount of bits between adr [0] and sosi_arr[0][0] where bsn is assigned to out_data_stopped => data_stopped_rp_ac ); @@ -124,12 +121,10 @@ BEGIN clk => clk, rst => rst, in_sosi => sosi_rp_ac, -- input data - in_bsn_ds => bsn_ds, in_data_stopped => data_stopped_rp_ac, out_sosi => out_sosi, -- output data out_adr => adr, out_bsn_adr => out_bsn_adr, - out_bsn_ds => out_bsn_ds, out_data_stopped => out_data_stopped ); diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_address_counter.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_address_counter.vhd index 916bbb2a18196a555303ca81f99dc0f79b188292..1fa66ab59c981b7249f3568a099cde1d3d4c1ba4 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_address_counter.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_address_counter.vhd @@ -48,12 +48,10 @@ ENTITY ddrctrl_input_address_counter IS clk : IN STD_LOGIC; rst : IN STD_LOGIC; in_sosi : IN t_dp_sosi; -- input data - in_bsn_ds : IN NATURAL; in_data_stopped : IN STD_LOGIC; out_sosi : OUT t_dp_sosi := c_dp_sosi_init; -- output data out_adr : OUT NATURAL; out_bsn_adr : OUT NATURAL; - out_bsn_ds : OUT NATURAL; out_data_stopped : OUT STD_LOGIC ); END ddrctrl_input_address_counter; @@ -73,15 +71,13 @@ ARCHITECTURE rtl OF ddrctrl_input_address_counter IS bsn_passed : STD_LOGIC; out_sosi : t_dp_sosi; out_bsn_adr : NATURAL; - out_bsn_ds : NATURAL; out_data_stopped : STD_LOGIC; s_in_sosi : t_dp_sosi; - s_in_bsn_ds : NATURAL; s_in_data_stopped : STD_LOGIC; s_adr : NATURAL; END RECORD; - CONSTANT c_t_reg_init : t_reg := (RESET, '0', c_dp_sosi_init, 0, 0, '0', c_dp_sosi_init, 0, '0', 0); + CONSTANT c_t_reg_init : t_reg := (RESET, '0', c_dp_sosi_init, 0, '0', c_dp_sosi_init, '0', 0); -- signals for readability @@ -93,7 +89,7 @@ BEGIN q_reg <= d_reg WHEN rising_edge(clk); -- Increments the address each time in_sosi.valid = '1', if address = g_max_adr the address is reset to 0. - p_adr : PROCESS(rst, in_sosi, in_bsn_ds, in_data_stopped, q_reg) + p_adr : PROCESS(rst, in_sosi, in_data_stopped, q_reg) VARIABLE v : t_reg; @@ -102,10 +98,8 @@ BEGIN -- compensate for delay in ddrctrl_input_address_counter v.out_sosi := q_reg.s_in_sosi; - v.out_bsn_ds := q_reg.s_in_bsn_ds; v.out_data_stopped := q_reg.s_in_data_stopped; v.s_in_sosi := in_sosi; - v.s_in_bsn_ds := in_bsn_ds; v.s_in_data_stopped := in_data_stopped; @@ -160,7 +154,6 @@ BEGIN out_sosi <= q_reg.out_sosi; out_adr <= q_reg.s_adr; out_bsn_adr <= q_reg.out_bsn_adr; - out_bsn_ds <= q_reg.out_bsn_ds; out_sosi.bsn <= q_reg.out_sosi.bsn; out_data_stopped <= q_reg.out_data_stopped; diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd index 7b7a3ed0d98c5229929b4d25982b3aa41910a258..0a429f473357cbb9bc9b43743d335455e1427949 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd @@ -48,7 +48,6 @@ ENTITY ddrctrl_input_repack IS in_sosi : IN t_dp_sosi; -- input data in_stop : IN STD_LOGIC := '0'; out_sosi : OUT t_dp_sosi := c_dp_sosi_init; -- output data - out_bsn_ds : OUT NATURAL := 0; out_bsn_wr : OUT STD_LOGIC := '0'; out_data_stopped : OUT STD_LOGIC := '0' ); @@ -71,17 +70,15 @@ ARCHITECTURE rtl OF ddrctrl_input_repack IS c_v_count : NATURAL; -- the amount of times the c_v vector received data from the input since the last time it was filled completely a_of : NATURAL; -- this is the amount of bits that the first data word(168) is shifted from the first bit in the data word(576) q_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - q_sop : STD_LOGIC; - q_out_bsn_ds : NATURAL; + q_sop : STD_LOGIC; s_input_cnt : NATURAL; out_of : NATURAL; out_data_count : STD_LOGIC; -- the amount of times the output data vector has been filled since the last time c_v was filled completely out_sosi : t_dp_sosi; -- this is the sosi stream that contains the data - out_bsn_ds : NATURAL; -- this is the amount of bits that the data corresponding to out_bsn is shifted from the first bit in that data word out_data_stopped : STD_LOGIC; -- this signal is '1' when there is no more data comming form ddrctrl_input_pack END RECORD; - CONSTANT c_t_reg_init : t_reg := (RESET, (OTHERS => '0'), 0, 0, (OTHERS => '0'), '0', 0, 0, 0, '0', c_dp_sosi_init, 0, '0'); + CONSTANT c_t_reg_init : t_reg := (RESET, (OTHERS => '0'), 0, 0, (OTHERS => '0'), '0', 0, 0, '0', c_dp_sosi_init, '0'); -- signals for readability @@ -139,7 +136,6 @@ BEGIN v.out_data_count := '1'; -- increase the counter of out_sosi.data with 1 v.s_input_cnt := q_reg.s_input_cnt+1; v.out_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0) := q_reg.q_bsn(c_dp_stream_bsn_w-1 DOWNTO 0); - v.out_bsn_ds := q_reg.q_out_bsn_ds; v.out_sosi.sop := q_reg.q_sop; v.out_sosi.eop := '0'; v.out_data_stopped := '0'; @@ -205,11 +201,6 @@ BEGIN -- BSN_INPUT v.q_bsn := in_sosi.bsn; -- a bsn number is saved when the bsn changes - IF g_in_data_w*q_reg.c_v_count+q_reg.out_of >= c_out_data_w THEN - v.q_out_bsn_ds := g_in_data_w*q_reg.c_v_count+q_reg.out_of-c_out_data_w; -- the amount of bits between word[0] and data[0] where data is the data with the bsn - ELSE - v.q_out_bsn_ds := g_in_data_w*q_reg.c_v_count+q_reg.out_of; -- the amount of bits between word[0] and data[0] where data is the data with the bsn - END IF; v.q_sop := '1'; -- a signal which indicates that a bsn is written in this word(576) so the address counter can save the corresponinding address. (there are delay in address counter so in_adr is not the same as the address of the word the data from the bsn is written to) v.a_of := 0; v.c_v(g_in_data_w-1 DOWNTO 0) := in_sosi.data(g_in_data_w-1 DOWNTO 0); -- fill c_v @@ -270,7 +261,6 @@ BEGIN -- fill outputs out_sosi <= q_reg.out_sosi; - out_bsn_ds <= q_reg.out_bsn_ds; out_data_stopped <= q_reg.out_data_stopped; END rtl; diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd index 7896dad2a2c726a34178cab7509d3d598e2ccbf0..edc789a36a3372b9f4a910beb8ecad45f95ef6d2 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd @@ -52,8 +52,6 @@ ENTITY ddrctrl_output IS clk : IN STD_LOGIC := '0'; rst : IN STD_LOGIC; in_sosi : IN t_dp_sosi := c_dp_sosi_init; -- input data - in_ds : IN NATURAL; -- amount of internal overflow this output - in_bsn : IN STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); -- bsn corresponding to the data at in_data[in_of] out_sosi_arr : OUT t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_init); -- output data out_ready : OUT STD_LOGIC ); @@ -82,8 +80,6 @@ BEGIN clk => clk, rst => rst, in_sosi => in_sosi, -- input data - in_ds => in_ds, - in_bsn => in_bsn, out_sosi => sosi, -- output data out_ready => out_ready ); diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd index 823f5e3ec6ae6e3ad0d25bafedd34b46b25af57e..0951666e6b72fe130b415f6a4226727c7b74df60 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd @@ -48,8 +48,6 @@ ENTITY ddrctrl_output_unpack IS clk : IN STD_LOGIC; rst : IN STD_LOGIC; in_sosi : IN t_dp_sosi := c_dp_sosi_init; - in_ds : IN NATURAL; - in_bsn : IN STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); out_sosi : OUT t_dp_sosi := c_dp_sosi_init; out_ready : OUT STD_LOGIC := '0' ); @@ -87,7 +85,7 @@ BEGIN q_reg <= d_reg WHEN rising_edge(clk); -- put the input data into c_v and fill the output vector from c_v - p_state : PROCESS(q_reg, rst, in_sosi, in_ds, in_bsn) + p_state : PROCESS(q_reg, rst, in_sosi) VARIABLE v : t_reg; @@ -165,7 +163,7 @@ BEGIN v.dd_fresh := '0'; v.out_sosi.data(g_out_data_w-1 DOWNTO 0) := v.c_v(g_out_data_w+v.a_of-1 DOWNTO v.a_of); v.out_sosi.valid := '1'; - v.out_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0) := in_bsn(c_dp_stream_bsn_w-1 DOWNTO 0); + v.out_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0) := in_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0); IF in_sosi.valid = '1' THEN v.delay_data(g_in_data_w-1 DOWNTO 0) := in_sosi.data(g_in_data_w-1 DOWNTO 0); diff --git a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd index 422c72f091f333e4dc5d57da568da322917e21c5..9c0675b7390f6d6e061a3cfd3804a8ad65f9a817 100644 --- a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd +++ b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd @@ -59,7 +59,7 @@ ARCHITECTURE tb OF tb_ddrctrl IS -- constants for readability CONSTANT c_ctrl_data_w : NATURAL := func_tech_ddr_ctlr_data_w(c_tech_ddr); -- 576 - CONSTANT c_in_data_w : NATURAL := g_nof_streams * g_data_w; -- output data with, 168 + CONSTANT c_in_data_w : NATURAL := g_nof_streams*g_data_w; -- output data with, 168 -- constants for testbench CONSTANT c_clk_freq : NATURAL := 200; -- clock frequency in MHz @@ -176,7 +176,7 @@ BEGIN -- wr fifo has delay of 4 clockcylces after reset -- filling the input data vectors with the corresponding numbers - run_multiple_times : FOR K in 0 TO 3 LOOP + run_multiple_times : FOR K in 0 TO 1 LOOP make_data : FOR J IN 0 TO c_bim*g_block_size-1 LOOP in_data_cnt <= in_data_cnt+1; fill_in_sosi_arr : FOR I IN 0 TO g_nof_streams-1 LOOP @@ -202,7 +202,7 @@ BEGIN END LOOP; END IF; END LOOP; - IF K = 1 AND J = c_bim*g_block_size-1 THEN + IF K = 0 AND J = c_bim*g_block_size-1 THEN stop_in <= '1'; ELSE stop_in <= '0';