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

Prepare for g_use_aligner_at_first_node, use true to have no functional change yet.

parent bc8c549e
No related branches found
No related tags found
1 merge request!389Resolve L2SDP-1013
Pipeline #75440 passed
...@@ -41,10 +41,10 @@ entity sdp_beamformer_remote is ...@@ -41,10 +41,10 @@ entity sdp_beamformer_remote is
g_nof_aligners_max : natural := c_sdp_N_pn_max g_nof_aligners_max : natural := c_sdp_N_pn_max
); );
port ( port (
dp_clk : in std_logic; dp_clk : in std_logic;
dp_rst : in std_logic; dp_rst : in std_logic;
rn_index : in natural range 0 to c_sdp_N_pn_max - 1 := 0; rn_index : in natural range 0 to c_sdp_N_pn_max - 1 := 0;
local_bf_sosi : in t_dp_sosi; local_bf_sosi : in t_dp_sosi;
from_ri_sosi : in t_dp_sosi; from_ri_sosi : in t_dp_sosi;
...@@ -68,9 +68,13 @@ end sdp_beamformer_remote; ...@@ -68,9 +68,13 @@ end sdp_beamformer_remote;
architecture str of sdp_beamformer_remote is architecture str of sdp_beamformer_remote is
constant c_data_w : natural := c_nof_complex * c_sdp_W_beamlet_sum; constant c_data_w : natural := c_nof_complex * c_sdp_W_beamlet_sum;
constant c_block_size : natural := c_sdp_S_sub_bf * c_sdp_N_pol_bf; constant c_block_size : natural := c_sdp_S_sub_bf * c_sdp_N_pol_bf;
constant c_fifo_size : natural := 2**ceil_log2((c_block_size * 9) / 16); -- 9/16 = 36/64, 1 block of 64 bit words rounded to the next power of 2 = 1024. constant c_fifo_size : natural := 2**ceil_log2((c_block_size * 9) / 16); -- 9/16 = 36/64, 1 block of
-- 64 bit words rounded to the next power of 2 = 1024.
signal dispatch_sosi_arr : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0) := (others => c_dp_sosi_rst); -- 1 for local, 1 for remote. signal chain_node_index : natural range 0 to c_sdp_N_pn_max - 1 := 0;
-- c_sdp_P_sum = 2 streams, 1 for local, 1 for remote
signal dispatch_sosi_arr : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0) := (others => c_dp_sosi_rst);
signal dp_fifo_sosi : t_dp_sosi := c_dp_sosi_rst; signal dp_fifo_sosi : t_dp_sosi := c_dp_sosi_rst;
signal dp_fifo_siso : t_dp_siso := c_dp_siso_rdy; signal dp_fifo_siso : t_dp_siso := c_dp_siso_rdy;
signal beamlets_data_sosi_arr : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0) := (others => c_dp_sosi_rst); signal beamlets_data_sosi_arr : t_dp_sosi_arr(c_sdp_P_sum - 1 downto 0) := (others => c_dp_sosi_rst);
...@@ -82,8 +86,10 @@ begin ...@@ -82,8 +86,10 @@ begin
p_wire_local_bf_sosi : process(local_bf_sosi) p_wire_local_bf_sosi : process(local_bf_sosi)
begin begin
dispatch_sosi_arr(0) <= local_bf_sosi; dispatch_sosi_arr(0) <= local_bf_sosi;
dispatch_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0) <= local_bf_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0); dispatch_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0) <=
dispatch_sosi_arr(0).data(c_data_w - 1 downto c_sdp_W_beamlet_sum) <= local_bf_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0); local_bf_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0);
dispatch_sosi_arr(0).data(c_data_w - 1 downto c_sdp_W_beamlet_sum) <=
local_bf_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0);
end process; end process;
--------------------------------------------------------------- ---------------------------------------------------------------
...@@ -129,20 +135,30 @@ begin ...@@ -129,20 +135,30 @@ begin
--------------------------------------------------------------- ---------------------------------------------------------------
-- dp_bsn_aligner_v2 -- dp_bsn_aligner_v2
--------------------------------------------------------------- ---------------------------------------------------------------
-- The SDP beamformer starts at ring node 0 and outputs at the last ring
-- node, therefore the chain_node_index = the rn_index. The chain_node_index
-- does not wrap, because it starts at ring node 0. Therefore a design with
-- an SDP beamformer that is defined for g_nof_aligners_max = c_sdp_N_pn_max
-- = 16 will also work in a ring with less nodes.
chain_node_index <= rn_index;
u_mmp_dp_bsn_align_v2 : entity dp_lib.mmp_dp_bsn_align_v2 u_mmp_dp_bsn_align_v2 : entity dp_lib.mmp_dp_bsn_align_v2
generic map( generic map(
-- for dp_bsn_align_v2 -- for dp_bsn_align_v2
g_nof_streams => c_sdp_P_sum, g_nof_streams => c_sdp_P_sum,
g_bsn_latency_max => 2, -- max 2 blocks latency g_bsn_latency_max => 2, -- max 2 blocks latency
g_nof_aligners_max => g_nof_aligners_max, g_use_aligner_at_first_node => true,
g_block_size => c_block_size, g_nof_aligners_max => g_nof_aligners_max,
g_data_w => c_data_w, g_block_size => c_block_size,
g_use_mm_output => false, g_data_w => c_data_w,
g_rd_latency => 1, g_use_mm_output => false,
g_rd_latency => 1,
-- for mms_dp_bsn_monitor_v2 -- for mms_dp_bsn_monitor_v2
g_nof_clk_per_sync => c_sdp_N_clk_sync_timeout, -- Using c_sdp_N_clk_sync_timeout as g_nof_clk_per_sync is used for BSN monitor timeout. g_nof_clk_per_sync => c_sdp_N_clk_sync_timeout, -- Using c_sdp_N_clk_sync_timeout as g_nof_clk_per_sync
g_nof_input_bsn_monitors => c_sdp_P_sum, -- is used for BSN monitor timeout.
g_use_bsn_output_monitor => true g_nof_input_bsn_monitors => c_sdp_P_sum,
g_use_bsn_output_monitor => true
) )
port map ( port map (
-- Memory-mapped clock domain -- Memory-mapped clock domain
...@@ -162,7 +178,7 @@ begin ...@@ -162,7 +178,7 @@ begin
dp_rst => dp_rst, dp_rst => dp_rst,
dp_clk => dp_clk, dp_clk => dp_clk,
node_index => rn_index, chain_node_index => chain_node_index,
-- Streaming input -- Streaming input
in_sosi_arr => dispatch_sosi_arr, in_sosi_arr => dispatch_sosi_arr,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment