Skip to content
Snippets Groups Projects
Commit c2b2d773 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Repack beamlet data in two steps.

parent 1dc76b73
No related branches found
No related tags found
1 merge request!348Use use_bdo_transpose = true in c_bf revision. Test use_bdo_transpose = false...
...@@ -43,8 +43,7 @@ use work.sdp_pkg.all; ...@@ -43,8 +43,7 @@ use work.sdp_pkg.all;
entity sdp_beamformer_output is entity sdp_beamformer_output is
generic ( generic (
g_beamset_id : natural := 0 g_beamset_id : natural := 0
);
);
port ( port (
dp_clk : in std_logic; dp_clk : in std_logic;
dp_rst : in std_logic; dp_rst : in std_logic;
...@@ -89,21 +88,22 @@ architecture str of sdp_beamformer_output is ...@@ -89,21 +88,22 @@ architecture str of sdp_beamformer_output is
constant c_fifo_fill : natural := c_sdp_cep_payload_nof_longwords; -- 976 constant c_fifo_fill : natural := c_sdp_cep_payload_nof_longwords; -- 976
constant c_fifo_size : natural := true_log_pow2(c_sdp_cep_payload_nof_longwords) * c_sdp_N_beamsets; -- 2048 constant c_fifo_size : natural := true_log_pow2(c_sdp_cep_payload_nof_longwords) * c_sdp_N_beamsets; -- 2048
signal snk_in_concat : t_dp_sosi; signal snk_in_concat : t_dp_sosi;
signal dp_repack_data_src_out : t_dp_sosi; signal dp_repack_beamlet_src_out : t_dp_sosi;
signal dp_packet_merge_src_out : t_dp_sosi; signal dp_packet_merge_src_out : t_dp_sosi;
signal dp_fifo_merge_src_out : t_dp_sosi; signal dp_repack_longword_src_out : t_dp_sosi;
signal dp_fifo_merge_src_in : t_dp_siso; signal dp_fifo_fill_eop_src_out : t_dp_sosi;
signal dp_pipeline_src_out : t_dp_sosi; signal dp_fifo_fill_eop_src_in : t_dp_siso;
signal dp_pipeline_src_in : t_dp_siso; signal dp_pipeline_src_out : t_dp_sosi;
signal dp_offload_tx_src_out : t_dp_sosi; signal dp_pipeline_src_in : t_dp_siso;
signal dp_offload_tx_src_in : t_dp_siso; signal dp_offload_tx_src_out : t_dp_sosi;
signal ip_checksum_src_out : t_dp_sosi; signal dp_offload_tx_src_in : t_dp_siso;
signal ip_checksum_src_in : t_dp_siso; signal ip_checksum_src_out : t_dp_sosi;
signal dp_pipeline_ready_src_out : t_dp_sosi; signal ip_checksum_src_in : t_dp_siso;
signal dp_pipeline_ready_src_in : t_dp_siso; signal dp_pipeline_ready_src_out : t_dp_sosi;
signal dp_pipeline_ready_src_in : t_dp_siso;
signal dbg_bsn_offset : std_logic;
signal dbg_bsn_offset : std_logic;
signal payload_err : std_logic_vector(0 downto 0); signal payload_err : std_logic_vector(0 downto 0);
signal station_info : std_logic_vector(15 downto 0) := (others => '0'); signal station_info : std_logic_vector(15 downto 0) := (others => '0');
...@@ -156,14 +156,15 @@ begin ...@@ -156,14 +156,15 @@ begin
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- dp_repack_data -- dp_repack_data
-- . 16b -> 64b -- . Repack 16b -> 32b, to get dual polarization beamlets of N_pol_bf *
-- . We don't need to flow control the source because we're going from 16b->64b -- N_complex * W_beamlet = 2 * 2 * 8 = 32b words
-- . No need to flow control the source, because repack into wider words
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
u_dp_repack_data : entity dp_lib.dp_repack_data u_dp_repack_data_beamlet : entity dp_lib.dp_repack_data
generic map ( generic map (
g_in_dat_w => c_data_w, g_in_dat_w => c_data_w, -- = 16b
g_in_nof_words => 4, g_in_nof_words => c_sdp_N_pol_bf, -- = 2
g_out_dat_w => c_longword_w, g_out_dat_w => c_sdp_W_dual_pol_beamlet, -- = 32b
g_out_nof_words => 1 g_out_nof_words => 1
) )
port map ( port map (
...@@ -173,7 +174,7 @@ begin ...@@ -173,7 +174,7 @@ begin
snk_in => snk_in_concat, snk_in => snk_in_concat,
snk_out => OPEN, snk_out => OPEN,
src_out => dp_repack_data_src_out, src_out => dp_repack_beamlet_src_out,
src_in => c_dp_siso_rdy src_in => c_dp_siso_rdy
); );
...@@ -190,17 +191,42 @@ begin ...@@ -190,17 +191,42 @@ begin
clk => dp_clk, clk => dp_clk,
snk_out => OPEN, snk_out => OPEN,
snk_in => dp_repack_data_src_out, snk_in => dp_repack_beamlet_src_out,
src_in => c_dp_siso_rdy, src_in => c_dp_siso_rdy,
src_out => dp_packet_merge_src_out src_out => dp_packet_merge_src_out
); );
-------------------------------------------------------------------------------
-- dp_repack_data
-- . Repack 32b -> 64b, to get 64b longwords for network packet data
-- . No need to flow control the source, because repack into wider words
-------------------------------------------------------------------------------
u_dp_repack_data_longword : entity dp_lib.dp_repack_data
generic map (
g_in_dat_w => c_sdp_W_dual_pol_beamlet, -- = 32b
g_in_nof_words => 2, -- = 2
g_out_dat_w => c_longword_w, -- = 64b
g_out_nof_words => 1
)
port map (
clk => dp_clk,
rst => dp_rst,
snk_in => dp_packet_merge_src_out,
snk_out => OPEN,
src_out => dp_repack_longword_src_out,
src_in => c_dp_siso_rdy
);
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- FIFO -- FIFO
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Pass on dp_repack_longword_src_out.err field (from u_dp_packet_merge) via
-- separate u_common_fifo_sc_err
u_dp_fifo_fill_eop_sc : entity dp_lib.dp_fifo_fill_eop_sc u_dp_fifo_fill_eop_sc : entity dp_lib.dp_fifo_fill_eop_sc
generic map ( -- pass on dp_packet_merge_src_out.err via u_common_fifo_sc_err generic map (
g_data_w => c_longword_w, g_data_w => c_longword_w,
g_empty_w => c_byte_w, g_empty_w => c_byte_w,
g_use_empty => true, g_use_empty => true,
...@@ -214,9 +240,9 @@ begin ...@@ -214,9 +240,9 @@ begin
port map ( port map (
clk => dp_clk, clk => dp_clk,
rst => dp_rst, rst => dp_rst,
snk_in => dp_packet_merge_src_out, snk_in => dp_repack_longword_src_out,
src_out => dp_fifo_merge_src_out, src_out => dp_fifo_fill_eop_src_out,
src_in => dp_fifo_merge_src_in src_in => dp_fifo_fill_eop_src_in
); );
-- Simple fifo to store the payload error bit at eop of FIFO input to be used at sop of FIFO -- Simple fifo to store the payload error bit at eop of FIFO input to be used at sop of FIFO
...@@ -232,10 +258,10 @@ begin ...@@ -232,10 +258,10 @@ begin
port map ( port map (
rst => dp_rst, rst => dp_rst,
clk => dp_clk, clk => dp_clk,
wr_dat => dp_packet_merge_src_out.err(0 downto 0), wr_dat => dp_repack_longword_src_out.err(0 downto 0),
wr_req => dp_packet_merge_src_out.eop, wr_req => dp_repack_longword_src_out.eop,
rd_dat => payload_err, rd_dat => payload_err,
rd_req => dp_fifo_merge_src_out.sop rd_req => dp_fifo_fill_eop_src_out.sop
); );
-- Pipeline FIFO output to align payload_err at dp_pipeline_src_out.sop -- Pipeline FIFO output to align payload_err at dp_pipeline_src_out.sop
...@@ -247,8 +273,8 @@ begin ...@@ -247,8 +273,8 @@ begin
rst => dp_rst, rst => dp_rst,
clk => dp_clk, clk => dp_clk,
-- ST sink -- ST sink
snk_out => dp_fifo_merge_src_in, snk_out => dp_fifo_fill_eop_src_in,
snk_in => dp_fifo_merge_src_out, snk_in => dp_fifo_fill_eop_src_out,
-- ST source -- ST source
src_in => dp_pipeline_src_in, src_in => dp_pipeline_src_in,
src_out => dp_pipeline_src_out src_out => dp_pipeline_src_out
......
...@@ -135,6 +135,7 @@ package sdp_pkg is ...@@ -135,6 +135,7 @@ package sdp_pkg is
constant c_sdp_X_sq : natural := c_sdp_S_pn * c_sdp_S_pn; -- = 144 constant c_sdp_X_sq : natural := c_sdp_S_pn * c_sdp_S_pn; -- = 144
constant c_sdp_block_period : natural := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz; -- = 5120 [ns] constant c_sdp_block_period : natural := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz; -- = 5120 [ns]
constant c_sdp_N_beamlets_sdp : natural := c_sdp_N_beamsets * c_sdp_S_sub_bf; -- = 976 constant c_sdp_N_beamlets_sdp : natural := c_sdp_N_beamsets * c_sdp_S_sub_bf; -- = 976
constant c_sdp_W_dual_pol_beamlet : natural := c_sdp_N_pol_bf * c_nof_complex * c_sdp_W_beamlet; -- 2 * 2 * 8 = 32b
-- . unit weights -- . unit weights
constant c_sdp_unit_sub_weight : natural := 2**c_sdp_W_sub_weight_fraction; -- 2**13, so range +-4.0 for 16 bit signed weight constant c_sdp_unit_sub_weight : natural := 2**c_sdp_W_sub_weight_fraction; -- 2**13, so range +-4.0 for 16 bit signed weight
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment