From 6abd0eba22fda30f943d5be9c9f7df993a300e74 Mon Sep 17 00:00:00 2001 From: JobvanWee <wee@astron.nl> Date: Tue, 12 Apr 2022 15:03:40 +0200 Subject: [PATCH] Ready for review. --- .../ddrctrl/src/vhdl/ddrctrl_controller.vhd | 2 +- .../ddrctrl/src/vhdl/ddrctrl_input_pack.vhd | 23 +++++++++++++------ .../libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd index 8997d60756..d553823455 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd @@ -125,7 +125,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, inp_of, inp_sosi, inp_adr, dvr_miso, rd_fifo_usedw) + p_state : PROCESS(q_reg, rst, inp_of, inp_sosi, inp_adr, inp_ds, inp_bsn, inp_bsn_adr, dvr_miso, rd_fifo_usedw, stop_in) VARIABLE v : t_reg := c_t_reg_init; diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_pack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_pack.vhd index 1c2275bf33..8dfb6a752b 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_pack.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_pack.vhd @@ -45,21 +45,30 @@ ENTITY ddrctrl_input_pack IS END ddrctrl_input_pack; ARCHITECTURE rtl OF ddrctrl_input_pack IS - BEGIN -- Putting all the data from the different streams into one data vector. gen_extract_and_pack_data : FOR I IN 0 TO g_nof_streams-1 GENERATE p_generate : PROCESS(in_sosi_arr) IS BEGIN - IF in_sosi_arr(0).valid = '1' THEN - out_data(g_data_w*(I+1)-1 DOWNTO g_data_w*I) <= in_sosi_arr(I).data(g_data_w-1 DOWNTO 0); - out_valid <= '1'; - ELSE - out_valid <= '0'; - END IF; + out_data(g_data_w*(I+1)-1 DOWNTO g_data_w*I) <= in_sosi_arr(I).data(g_data_w-1 DOWNTO 0); END PROCESS; END GENERATE; + + + -- check if the input data is valid bij doing a and operation on all of them + p_valid : PROCESS(in_sosi_arr) IS + + VARIABLE valid : STD_LOGIC := '1'; + + BEGIN + valid := '1'; + FOR I IN 0 TO g_nof_streams-1 LOOP + valid := valid AND in_sosi_arr(I).valid; + END LOOP; + out_valid <= valid; + END PROCESS; + out_bsn <= in_sosi_arr(0).bsn(c_dp_stream_bsn_w-1 DOWNTO 0); END rtl; diff --git a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd index 7ac772d390..445f8d98fd 100644 --- a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd +++ b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl.vhd @@ -156,8 +156,8 @@ BEGIN fill_in_sosi_arr_0 : FOR I IN 0 TO g_nof_streams-1 LOOP in_sosi_arr(I).data(g_data_w-1 DOWNTO 0) <= c_total_vector(g_data_w*(I+1)+J*c_in_data_w-1 DOWNTO g_data_w*I+J*c_in_data_w); in_sosi_arr(I).valid <= '1'; + in_sosi_arr(I).bsn(c_dp_stream_bsn_w-1 DOWNTO 0) <= bsn(c_dp_stream_bsn_w-1 DOWNTO 0); END LOOP; - in_sosi_arr(0).bsn(c_dp_stream_bsn_w-1 DOWNTO 0) <= bsn(c_dp_stream_bsn_w-1 DOWNTO 0); IF K = 1 AND J = 0 THEN stop_in <= '1'; ELSE -- GitLab