Skip to content
Snippets Groups Projects
Commit 7cc6f645 authored by Pepping's avatar Pepping
Browse files

Added block generator and BSN monitor

parent 05f5d8be
No related branches found
No related tags found
No related merge requests found
......@@ -63,7 +63,9 @@ ENTITY node_apertif_unb1_correlator_processing IS
g_sim : BOOLEAN := FALSE; -- Overridden by TB
g_sim_fast : BOOLEAN := TRUE; -- TRUE = fast accumulator model and no inter-channel delay in the correlator output stream.
g_use_db : BOOLEAN := FALSE;
g_use_bg : BOOLEAN := FALSE;
g_use_wpfb : BOOLEAN := TRUE; --
g_use_chan_stats : BOOLEAN := FALSE;
g_use_cor : BOOLEAN := TRUE; --
g_usr_data_w : NATURAL := 16; -- Specifies the datawidth of Re + Im
g_nof_input_streams : NATURAL := 8; -- 8: Indicates the number of input streams, where each stream is coming from a unique node.
......@@ -92,11 +94,25 @@ ENTITY node_apertif_unb1_correlator_processing IS
reg_diag_data_buf_mosi : IN t_mem_mosi := c_mem_mosi_rst;
reg_diag_data_buf_miso : OUT t_mem_miso;
-- . block generator
reg_diag_bg_mosi : IN t_mem_mosi := c_mem_mosi_rst;
reg_diag_bg_miso : OUT t_mem_miso;
ram_diag_bg_mosi : IN t_mem_mosi := c_mem_mosi_rst;
ram_diag_bg_miso : OUT t_mem_miso;
-- MM
--. Filterbank
ram_fil_coefs_mosi : IN t_mem_mosi;
ram_fil_coefs_miso : OUT t_mem_miso;
--. Channel stats
ram_st_sst_mosi : IN t_mem_mosi;
ram_st_sst_miso : OUT t_mem_miso;
--. BSN Monitor
reg_bsn_monitor_mosi : IN t_mem_mosi;
reg_bsn_monitor_miso : OUT t_mem_miso;
--. 1GbE visibility offload TX
reg_dp_offload_tx_hdr_dat_mosi : IN t_mem_mosi;
reg_dp_offload_tx_hdr_dat_miso : OUT t_mem_miso
......@@ -114,11 +130,21 @@ ARCHITECTURE str OF node_apertif_unb1_correlator_processing IS
CONSTANT c_nof_interleaved_streams : NATURAL := c_nof_10GbE_streams*c_nof_bf_modules; -- 12
CONSTANT c_nof_deinterleaved_streams : NATURAL := c_interleave_factor*c_nof_interleaved_streams; -- 24
CONSTANT c_compl_dat_w : NATURAL := g_usr_data_w/c_nof_complex; -- 16/2=8
CONSTANT c_block_period : NATURAL := 186; --256; --FIXME: first block size was 176/256. Now 128/186,18 (non-integer...), assuming 186 is OK.
CONSTANT c_nof_blocks_per_sync : NATURAL := 800000;
CONSTANT c_nof_blk_per_sync : NATURAL := sel_a_b(g_sim, 16, c_nof_blocks_per_sync);
-- Re- and Deinterleaver
CONSTANT c_use_complex : BOOLEAN := TRUE;
-----------------------------------------------------------------------------
-- Block Generator
-----------------------------------------------------------------------------
CONSTANT c_bg_nof_streams : NATURAL := c_nof_interleaved_streams;
CONSTANT c_bg_dat_w : NATURAL := 16;
CONSTANT c_bg_addr_w : NATURAL := 7;
CONSTANT c_bg_file_name_prefix : STRING := "hex/composite_signals";
-- Correlator
CONSTANT c_nof_cor_inputs : NATURAL := c_nof_deinterleaved_streams;
CONSTANT c_nof_input_folds : NATURAL := 1;
......@@ -194,11 +220,18 @@ ARCHITECTURE str OF node_apertif_unb1_correlator_processing IS
CONSTANT c_db_data_w : NATURAL := c_nof_complex*c_wpfb_in_dat_w; -- 16 = 8b real + 8bit imaginary
CONSTANT c_db_nof_data : NATURAL := 8;
-- BSN Monitor
CONSTANT c_nof_bsn_mon_streams : NATURAL := 6;
CONSTANT c_bsn_sync_time_out : NATURAL := (c_block_period * c_nof_blocks_per_sync * 10)/8; --*10/8 as margin
SIGNAL reinterleave_in_arr : t_dp_sosi_arr(c_nof_cor_inputs-1 DOWNTO 0);
SIGNAL reinterleave_out_arr : t_dp_sosi_arr(c_nof_interleaved_streams-1 DOWNTO 0);
SIGNAL dp_pipeline_src_out : t_dp_sosi;
-- Block Generator
SIGNAL bg_snk_in_arr : t_dp_sosi_arr(c_nof_interleaved_streams-1 DOWNTO 0);
-- Filterbank and Correlator
SIGNAL wpfb_eop : STD_LOGIC;
SIGNAL wpfb_snk_in_ctrl : t_dp_sosi;
......@@ -208,6 +241,7 @@ ARCHITECTURE str OF node_apertif_unb1_correlator_processing IS
SIGNAL correlator_snk_in_arr : t_dp_sosi_arr(c_nof_interleaved_streams-1 DOWNTO 0);
SIGNAL correlator_src_out_arr : t_dp_sosi_arr(1-1 DOWNTO 0);
-- 1GbE Visibility Offload
SIGNAL dp_fifo_sc_snk_in : t_dp_sosi;
SIGNAL dp_repack_data_snk_in : t_dp_sosi;
......@@ -217,9 +251,11 @@ ARCHITECTURE str OF node_apertif_unb1_correlator_processing IS
SIGNAL dp_offload_tx_src_out_arr : t_dp_sosi_arr(1-1 DOWNTO 0);
SIGNAL dp_offload_tx_src_in_arr : t_dp_siso_arr(1-1 DOWNTO 0);
BEGIN
-- BSN monitors
SIGNAL dp_bsn_monitor_in_siso_arr : t_dp_siso_arr(c_nof_bsn_mon_streams-1 DOWNTO 0);
SIGNAL dp_bsn_monitor_in_sosi_arr : t_dp_sosi_arr(c_nof_bsn_mon_streams-1 DOWNTO 0);
BEGIN
-----------------------------------------------------------------------------
-- Beamlet routing from 10GbE inputs T2..T0 to unfolder correlator inputs 23..0: ***48 VISIBILITY VERSION***
......@@ -344,50 +380,36 @@ BEGIN
-- were OK. They are now not OK and therefor some trickery has to be done to generate
-- proper sosi-control signals for the wpfb.
--------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- DP Pipeline to recover the sosi-control signals after the reinterleaving
-----------------------------------------------------------------------------
u_st_ctrl_pipe : ENTITY dp_lib.dp_pipeline
gen_dp_block_gen : FOR I IN 0 TO c_nof_interleaved_streams-1 GENERATE
u_dp_block_gen : ENTITY dp_lib.dp_block_gen
GENERIC MAP(
g_pipeline => 1 -- 0 for wires, > 0 for registers,
g_use_src_in => FALSE,
g_nof_blk_per_sync => c_nof_blk_per_sync,
g_nof_data => 128
)
PORT MAP(
rst => dp_rst,
clk => dp_clk,
snk_in => reinterleave_in_arr(0),
src_out => dp_pipeline_src_out
);
-- EOP should be one later then the other signals due to reinterleavinga
u_pipe_eop : ENTITY common_lib.common_pipeline
GENERIC MAP (
g_pipeline => 2,
g_in_dat_w => 1,
g_out_dat_w => 1
)
PORT MAP (
rst => dp_rst,
clk => dp_clk,
in_dat => slv(reinterleave_in_arr(0).eop),
sl(out_dat) => wpfb_eop
snk_in => reinterleave_out_arr(I),
src_out => bg_snk_in_arr(I)
);
END GENERATE;
-----------------------------------------------------------------------------
-- Merge reinterleaved data again with pipelined sosi-control signals.
-----------------------------------------------------------------------------
p_add_st_ctrl : PROCESS(reinterleave_out_arr, dp_pipeline_src_out)
BEGIN
FOR I IN 0 TO c_nof_interleaved_streams-1 LOOP
wpfb_snk_in_arr(i) <= dp_pipeline_src_out; -- SOSI ctrl
wpfb_snk_in_arr(i).data <= reinterleave_out_arr(i).data;
wpfb_snk_in_arr(i).im <= reinterleave_out_arr(i).im;
wpfb_snk_in_arr(i).re <= reinterleave_out_arr(i).re;
wpfb_snk_in_arr(i).eop <= wpfb_eop;
wpfb_snk_in_arr(i).valid <= reinterleave_out_arr(i).valid;
END LOOP;
END PROCESS;
--p_add_st_ctrl : PROCESS(reinterleave_out_arr, dp_pipeline_src_out)
--BEGIN
-- FOR I IN 0 TO c_nof_interleaved_streams-1 LOOP
-- wpfb_snk_in_arr(I) <= dp_pipeline_src_out; -- SOSI ctrl
-- wpfb_snk_in_arr(I).data <= reinterleave_out_arr(i).data;
-- wpfb_snk_in_arr(I).im <= reinterleave_out_arr(i).im;
-- wpfb_snk_in_arr(I).re <= reinterleave_out_arr(i).re;
-- wpfb_snk_in_arr(I).eop <= wpfb_eop;
-- wpfb_snk_in_arr(I).valid <= reinterleave_out_arr(i).valid;
-- END LOOP;
--END PROCESS;
gen_databuffer : IF g_use_db = TRUE GENERATE
u_data_buf : ENTITY diag_lib.mms_diag_data_buffer
......@@ -410,11 +432,51 @@ BEGIN
reg_data_buf_mosi => reg_diag_data_buf_mosi,
reg_data_buf_miso => reg_diag_data_buf_miso,
-- ST interface
in_sync => wpfb_snk_in_arr(0).sync,
in_sosi_arr => wpfb_snk_in_arr
in_sync => bg_snk_in_arr(0).sync,
in_sosi_arr => bg_snk_in_arr
);
END GENERATE;
---------------------------------------------------------------------------------------
-- Block Generator
---------------------------------------------------------------------------------------
u_bg : ENTITY diag_lib.mms_diag_block_gen
GENERIC MAP(
-- Generate configurations
g_use_usr_input => TRUE,
g_use_bg => g_use_bg,
g_use_tx_seq => FALSE,
-- General
g_nof_streams => c_bg_nof_streams,
-- BG settings
g_use_bg_buffer_ram => TRUE,
g_buf_dat_w => c_bg_dat_w,
g_buf_addr_w => c_bg_addr_w,
g_file_name_prefix => c_bg_file_name_prefix,
-- User input multiplexer option
g_usr_bypass_xonoff => FALSE
)
PORT MAP(
-- System
mm_rst => mm_rst,
mm_clk => mm_clk,
dp_rst => dp_rst,
dp_clk => dp_clk,
-- MM interface
reg_bg_ctrl_mosi => reg_diag_bg_mosi,
reg_bg_ctrl_miso => reg_diag_bg_miso,
ram_bg_data_mosi => ram_diag_bg_mosi,
ram_bg_data_miso => ram_diag_bg_miso,
-- ST interface
usr_siso_arr => OPEN,
usr_sosi_arr => bg_snk_in_arr,
out_siso_arr => (OTHERS => c_dp_siso_rdy),
out_sosi_arr => wpfb_snk_in_arr
);
-----------------------------------------------------------------------------
-- WPFB
-----------------------------------------------------------------------------
......@@ -422,7 +484,7 @@ BEGIN
u_wpfb_unit : ENTITY wpfb_lib.wpfb_unit
GENERIC MAP(
g_wpfb => c_wpfb,
g_stats_ena => FALSE,
g_stats_ena => g_use_chan_stats,
g_use_bg => FALSE,
g_file_index_arr => array_init(0, 128, 1),
g_coefs_file_prefix => c_wpfb_coefs_file_prefix
......@@ -434,8 +496,8 @@ BEGIN
mm_clk => mm_clk,
ram_fil_coefs_mosi => ram_fil_coefs_mosi,
ram_fil_coefs_miso => ram_fil_coefs_miso,
ram_st_sst_mosi => c_mem_mosi_rst,
ram_st_sst_miso => OPEN,
ram_st_sst_mosi => ram_st_sst_mosi,
ram_st_sst_miso => ram_st_sst_miso,
reg_bg_ctrl_mosi => c_mem_mosi_rst,
reg_bg_ctrl_miso => OPEN,
ram_bg_data_mosi => c_mem_mosi_rst,
......@@ -623,6 +685,47 @@ BEGIN
data_src_out_arr <= dp_offload_tx_src_out_arr;
dp_offload_tx_src_in_arr <= data_src_in_arr;
-----------------------------------------------------------------------------
-- processing node: BSN monitors at several stages in the stream
-----------------------------------------------------------------------------
u_dp_bsn_monitor : ENTITY dp_lib.mms_dp_bsn_monitor
GENERIC MAP (
g_nof_streams => c_nof_bsn_mon_streams,
g_sync_timeout => c_bsn_sync_time_out,
g_log_first_bsn => TRUE
)
PORT MAP (
mm_rst => mm_rst,
mm_clk => mm_clk,
reg_mosi => reg_bsn_monitor_mosi,
reg_miso => reg_bsn_monitor_miso,
dp_rst => dp_rst,
dp_clk => dp_clk,
in_siso_arr => dp_bsn_monitor_in_siso_arr,
in_sosi_arr => dp_bsn_monitor_in_sosi_arr
);
-- 0) Monitor the data input
dp_bsn_monitor_in_sosi_arr(0) <= data_snk_in_arr(0);
dp_bsn_monitor_in_siso_arr(0) <= c_dp_siso_rdy;
-- 1) Monitor the reinterleave output
dp_bsn_monitor_in_sosi_arr(1) <= reinterleave_out_arr(0);
dp_bsn_monitor_in_siso_arr(1) <= c_dp_siso_rdy;
-- 2) Monitor the WPFB input
dp_bsn_monitor_in_sosi_arr(2) <= wpfb_snk_in_arr(0);
dp_bsn_monitor_in_siso_arr(2) <= c_dp_siso_rdy;
-- 3) Monitor the WPFB output
dp_bsn_monitor_in_sosi_arr(3) <= wpfb_src_out_arr(0);
dp_bsn_monitor_in_siso_arr(3) <= c_dp_siso_rdy;
-- 4) Monitor the correlator output / visibility offload input
dp_bsn_monitor_in_sosi_arr(4) <= correlator_src_out_arr(0);
dp_bsn_monitor_in_siso_arr(4) <= c_dp_siso_rdy;
-- 5) Monitor visibility offload output
dp_bsn_monitor_in_sosi_arr(5) <= dp_offload_tx_src_out_arr(0);
dp_bsn_monitor_in_siso_arr(5) <= dp_offload_tx_src_in_arr(0);
-----------------------------------------------------------------------------
-- Stream recorder to record the correlator output stream to a file
-- . The data buffer can only take snapshots.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment