From e2c7107e3582df229bf92822228122ab6f5d118f Mon Sep 17 00:00:00 2001 From: donker <donker@astron.nl> Date: Tue, 30 Mar 2021 14:13:25 +0200 Subject: [PATCH] L2SDP-207, working version. --- .../sdp/src/vhdl/sdp_statistics_offload.vhd | 12 ++-- .../base/dp/src/vhdl/dp_block_from_mm_dc.vhd | 69 +++++++++++-------- 2 files changed, 46 insertions(+), 35 deletions(-) diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd index aa3df06ce1..52a96a0a46 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -130,7 +130,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS SIGNAL nxt_r : t_reg; SIGNAL trigger : STD_LOGIC := '0'; - SIGNAL mm_done : STD_LOGIC := '0'; + SIGNAL done : STD_LOGIC := '0'; SIGNAL dp_block_from_mm_src_out : t_dp_sosi; SIGNAL dp_block_from_mm_src_in : t_dp_siso; @@ -182,7 +182,7 @@ BEGIN END IF; END PROCESS; - p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, mm_done, dp_header_info) + p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, done, dp_header_info) VARIABLE v: t_reg; BEGIN v := r; @@ -221,8 +221,8 @@ BEGIN v.start_pulse := '1'; v.start_address := 0; v.block_count := 1; - ELSIF mm_done = '1' THEN - -- Use mm_done to start next packets + ELSIF done = '1' THEN + -- Use done to start next packets IF r.block_count < c_nof_packets THEN IF r.block_count MOD c_nof_data_per_step = 0 THEN v.start_address := r.start_address + c_data_size; -- step to next packet within block @@ -239,7 +239,7 @@ BEGIN END IF; -- Release header info per packet offload - IF trigger = '1' OR mm_done = '1' THEN + IF trigger = '1' OR done = '1' THEN v.dp_header_info := dp_header_info; END IF; nxt_r <= v; @@ -274,7 +274,7 @@ BEGIN mm_clk => mm_clk, start_pulse => r.start_pulse, start_address => r.start_address, - mm_done => mm_done, + done => done, mm_mosi => master_mosi, mm_miso => master_miso, out_sosi => dp_block_from_mm_src_out, diff --git a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd index 936d476512..c2330f1ce6 100644 --- a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd +++ b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd @@ -40,53 +40,64 @@ ENTITY dp_block_from_mm_dc IS g_nof_data : NATURAL ); PORT ( - dp_rst : IN STD_LOGIC; - dp_clk : IN STD_LOGIC; + -- mm_clk domain mm_rst : IN STD_LOGIC; mm_clk : IN STD_LOGIC; - start_pulse : IN STD_LOGIC; - start_address : IN NATURAL; - mm_done : OUT STD_LOGIC; mm_mosi : OUT t_mem_mosi; mm_miso : IN t_mem_miso; + -- dp_clk domain + dp_rst : IN STD_LOGIC; + dp_clk : IN STD_LOGIC; + start_pulse : IN STD_LOGIC; + start_address : IN NATURAL; + done : OUT STD_LOGIC; out_sosi : OUT t_dp_sosi; out_siso : IN t_dp_siso ); END dp_block_from_mm_dc; -ARCHITECTURE rtl OF dp_block_from_mm_dc IS - CONSTANT c_packet_size : NATURAL := 1024; -- 512 * 2 = 1024 words. - CONSTANT c_fifo_size : NATURAL := c_packet_size * 2; - CONSTANT c_start_addr_w : NATURAL := 29; - SIGNAL fifo_sosi : t_dp_sosi := c_dp_sosi_rst; - SIGNAL fifo_siso : t_dp_siso; - SIGNAL mm_start_pulse : STD_LOGIC := '0'; - SIGNAL mm_mm_done : STD_LOGIC := '0'; - SIGNAL start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0'); +ARCHITECTURE str OF dp_block_from_mm_dc IS + + CONSTANT c_packet_size : NATURAL := g_nof_data * g_data_size; -- 512 * 2 = 1024 words. + CONSTANT c_fifo_size : NATURAL := c_packet_size * 2; + CONSTANT c_start_addr_w : NATURAL := c_natural_w; + + SIGNAL mm_fifo_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL mm_fifo_siso : t_dp_siso; + SIGNAL mm_start_pulse : STD_LOGIC := '0'; + SIGNAL mm_done : STD_LOGIC := '0'; + SIGNAL start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0'); SIGNAL mm_start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0'); - SIGNAL mm_start_address : NATURAL := 0; + SIGNAL mm_start_address : NATURAL := 0; + BEGIN p_common_spulse_start_pulse : ENTITY common_lib.common_spulse PORT MAP ( + in_rst => dp_rst, in_clk => dp_clk, in_pulse => start_pulse, + out_rst => mm_rst, out_clk => mm_clk, out_pulse => mm_start_pulse ); p_common_spulse_mm_done : ENTITY common_lib.common_spulse PORT MAP ( + in_rst => mm_rst, in_clk => mm_clk, - in_pulse => mm_mm_done, + in_pulse => mm_done, + out_rst => dp_rst, out_clk => dp_clk, - out_pulse => mm_done + out_pulse => done ); start_address_slv <= TO_UVEC(start_address, c_start_addr_w); mm_start_address <= TO_UINT(mm_start_address_slv); + p_common_async_slv_start_address : ENTITY common_lib.common_async_slv PORT MAP ( + rst => dp_rst, clk => dp_clk, din => start_address_slv, dout => mm_start_address_slv @@ -100,16 +111,16 @@ BEGIN g_fifo_size => c_fifo_size ) PORT MAP ( - wr_rst => dp_rst, - wr_clk => dp_clk, - rd_rst => mm_rst, - rd_clk => mm_clk, + wr_rst => mm_rst, + wr_clk => mm_clk, + rd_rst => dp_rst, + rd_clk => dp_clk, -- ST sink - snk_out => fifo_siso, - snk_in => fifo_sosi, + snk_in => mm_fifo_sosi, + snk_out => mm_fifo_siso, -- ST source - src_in => out_siso, - src_out => out_sosi + src_out => out_sosi, + src_in => out_siso ); p_dp_block_from_mm : ENTITY work.dp_block_from_mm @@ -124,11 +135,11 @@ BEGIN start_pulse => mm_start_pulse, start_address => mm_start_address, - mm_done => mm_mm_done, + mm_done => mm_done, mm_mosi => mm_mosi, mm_miso => mm_miso, - out_sosi => fifo_sosi, - out_siso => fifo_siso + out_sosi => mm_fifo_sosi, + out_siso => mm_fifo_siso ); -END rtl; \ No newline at end of file +END str; \ No newline at end of file -- GitLab