Skip to content
Snippets Groups Projects

initial commit of node_sdp_correlator and st_xsq_dp_to_mm

5 files
+ 432
0
Compare changes
  • Side-by-side
  • Inline

Files

 
-------------------------------------------------------------------------------
 
--
 
-- Copyright 2021
 
-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
 
-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
 
--
 
-- Licensed under the Apache License, Version 2.0 (the "License");
 
-- you may not use this file except in compliance with the License.
 
-- You may obtain a copy of the License at
 
--
 
-- http://www.apache.org/licenses/LICENSE-2.0
 
--
 
-- Unless required by applicable law or agreed to in writing, software
 
-- distributed under the License is distributed on an "AS IS" BASIS,
 
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-- See the License for the specific language governing permissions and
 
-- limitations under the License.
 
--
 
-------------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------------
 
--
 
-- Author: R. van der Walle
 
-- Purpose:
 
-- . Implements the functionality of the Subband Correlator in the
 
-- LOFAR2 SDPFW design.
 
-- Description:
 
-- Remark:
 
-- .
 
-------------------------------------------------------------------------------
 
 
LIBRARY IEEE, common_lib, dp_lib, reorder_lib, st_lib, mm_lib;
 
USE IEEE.STD_LOGIC_1164.ALL;
 
USE common_lib.common_pkg.ALL;
 
USE common_lib.common_mem_pkg.ALL;
 
USE common_lib.common_network_layers_pkg.ALL;
 
USE dp_lib.dp_stream_pkg.ALL;
 
USE work.sdp_pkg.ALL;
 
 
ENTITY node_sdp_correlator IS
 
GENERIC (
 
g_sim : BOOLEAN := FALSE;
 
g_P_sq : NATURAL := c_sdp_P_sq
 
--g_offload_time : NATURAL := c_sdp_offload_time
 
);
 
PORT (
 
dp_clk : IN STD_LOGIC;
 
dp_rst : IN STD_LOGIC;
 
 
in_sosi_arr : IN t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0);
 
--xst_udp_sosi : OUT t_dp_sosi;
 
--xst_udp_siso : IN t_dp_siso;
 
 
mm_rst : IN STD_LOGIC;
 
mm_clk : IN STD_LOGIC;
 
 
reg_dp_sync_insert_v2_mosi : IN t_mem_mosi := c_mem_mosi_rst;
 
reg_dp_sync_insert_v2_miso : OUT t_mem_miso;
 
reg_crosslets_info_mosi : IN t_mem_mosi := c_mem_mosi_rst;
 
reg_crosslets_info_miso : OUT t_mem_miso;
 
reg_bsn_scheduler_xsub_mosi : IN t_mem_mosi := c_mem_mosi_rst;
 
reg_bsn_scheduler_xsub_miso : OUT t_mem_miso;
 
ram_st_xsq_mosi : IN t_mem_mosi := c_mem_mosi_rst;
 
ram_st_xsq_miso : OUT t_mem_miso;
 
 
--sdp_info : IN t_sdp_info;
 
--gn_id : IN STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0);
 
--stat_eth_src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0);
 
--stat_ip_src_addr : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0);
 
--stat_udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0)
 
 
out_crosslets_info : OUT STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0)
 
 
);
 
END node_sdp_correlator;
 
 
ARCHITECTURE str OF node_sdp_correlator IS
 
 
-- CONSTANT c_nof_masters : POSITIVE := 2;
 
 
-- crosslet statistics offload
 
-- SIGNAL ram_st_offload_mosi : t_mem_mosi := c_mem_mosi_rst;
 
-- SIGNAL ram_st_offload_miso : t_mem_miso := c_mem_miso_rst;
 
 
-- SIGNAL master_mem_mux_mosi : t_mem_mosi := c_mem_mosi_rst;
 
-- SIGNAL master_mem_mux_miso : t_mem_miso := c_mem_miso_rst;
 
-- SIGNAL master_mosi_arr : t_mem_mosi_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_mosi_rst);
 
-- SIGNAL master_miso_arr : t_mem_miso_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_miso_rst);
 
 
SIGNAL quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
 
SIGNAL xin_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
 
SIGNAL xsel_sosi : t_dp_sosi := c_dp_sosi_rst;
 
SIGNAL crosslets_sosi_arr : t_dp_sosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
 
SIGNAL crosslets_mosi_arr : t_mem_mosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst);
 
SIGNAL crosslets_miso_arr : t_mem_miso_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst);
 
 
BEGIN
 
---------------------------------------------------------------
 
-- Requantize 18b to 16b
 
---------------------------------------------------------------
 
gen_requantize : FOR I IN 0 TO c_sdp_P_pfb-1 GENERATE
 
u_dp_requantize : ENTITY dp_lib.dp_requantize
 
GENERIC MAP (
 
g_complex => TRUE,
 
g_representation => "SIGNED",
 
g_lsb_w => 0,
 
g_lsb_round => TRUE,
 
g_lsb_round_clip => FALSE,
 
g_msb_clip => TRUE,
 
g_msb_clip_symmetric => FALSE,
 
g_in_dat_w => c_sdp_W_subband,
 
g_out_dat_w => c_sdp_W_crosslet
 
)
 
PORT MAP(
 
rst => dp_rst,
 
clk => dp_clk,
 
 
snk_in => in_sosi_arr(I),
 
src_out => quant_sosi_arr(I)
 
);
 
END GENERATE;
 
 
---------------------------------------------------------------
 
-- dp_sync_insert_v2
 
---------------------------------------------------------------
 
u_dp_sync_insert_v2 : ENTITY dp_lib.dp_sync_insert_v2
 
GENERIC MAP (
 
g_nof_streams => c_sdp_P_pfb,
 
g_nof_blk_per_sync => 200000,
 
g_nof_blk_per_sync_min => 19530
 
)
 
PORT MAP (
 
dp_rst => dp_rst,
 
dp_clk => dp_clk,
 
mm_rst => mm_rst,
 
mm_clk => mm_clk,
 
 
reg_mosi => reg_dp_sync_insert_v2_mosi,
 
reg_miso => reg_dp_sync_insert_v2_miso,
 
 
in_sosi_arr => quant_sosi_arr,
 
out_sosi_arr => xin_sosi_arr
 
);
 
 
---------------------------------------------------------------
 
-- Crosslet Subband Select
 
---------------------------------------------------------------
 
u_crosslets_subband_select : ENTITY work.sdp_crosslets_subband_select
 
GENERIC MAP (
 
g_N_crosslets => c_sdp_N_crosslets
 
)
 
PORT MAP(
 
dp_clk => dp_clk,
 
dp_rst => dp_rst,
 
 
in_sosi_arr => xin_sosi_arr,
 
out_sosi => xsel_sosi,
 
 
mm_rst => mm_rst,
 
mm_clk => mm_clk,
 
 
reg_crosslets_info_mosi => reg_crosslets_info_mosi,
 
reg_crosslets_info_miso => reg_crosslets_info_miso,
 
 
reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi,
 
reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso,
 
 
out_crosslets_info => out_crosslets_info
 
);
 
 
---------------------------------------------------------------
 
-- Repack 32b to 64b
 
---------------------------------------------------------------
 
-- Not implemented yet
 
 
---------------------------------------------------------------
 
-- ring_mux
 
---------------------------------------------------------------
 
-- Not implemented yet
 
 
---------------------------------------------------------------
 
-- Repack 64b to 32b
 
---------------------------------------------------------------
 
-- Not implemented yet
 
 
---------------------------------------------------------------
 
-- dp_demux
 
---------------------------------------------------------------
 
-- Not implemented yet
 
 
---------------------------------------------------------------
 
-- dp_bsn_aligner_v2 Not implemented yet, using st_xsq_dp_to_mm as a tempory replacement
 
---------------------------------------------------------------
 
gen_dp_to_mm : FOR I IN 0 TO g_P_sq-1 GENERATE
 
u_st_xsq_dp_to_mm : ENTITY st_lib.st_xsq_dp_to_mm
 
GENERIC MAP(
 
g_nof_crosslets => c_sdp_N_crosslets,
 
g_nof_signal_inputs => c_sdp_S_pn,
 
g_dsp_data_w => c_sdp_W_crosslet
 
)
 
PORT MAP (
 
rst => dp_rst,
 
clk => dp_clk,
 
 
in_sosi => xsel_sosi,
 
out_sosi_info => crosslets_sosi_arr(I),
 
 
mm_mosi => crosslets_mosi_arr(I),
 
mm_miso => crosslets_miso_arr(I)
 
);
 
END GENERATE;
 
 
---------------------------------------------------------------
 
-- Crosslets Statistics (XST)
 
---------------------------------------------------------------
 
u_crosslets_stats : ENTITY st_lib.st_xst
 
GENERIC MAP(
 
g_nof_streams => g_P_sq,
 
g_nof_crosslets => c_sdp_N_crosslets,
 
g_nof_signal_inputs => c_sdp_S_pn,
 
g_in_data_w => c_sdp_W_crosslet,
 
g_stat_data_w => c_longword_w,
 
g_stat_data_sz => c_longword_sz/c_word_sz
 
)
 
PORT MAP (
 
mm_rst => mm_rst,
 
mm_clk => mm_clk,
 
dp_rst => dp_rst,
 
dp_clk => dp_clk,
 
in_sosi => crosslets_sosi_arr(0),
 
mm_mosi_arr => crosslets_mosi_arr,
 
mm_miso_arr => crosslets_miso_arr,
 
 
ram_st_xsq_mosi => ram_st_xsq_mosi, --master_mem_mux_mosi,
 
ram_st_xsq_miso => ram_st_xsq_miso --master_mem_mux_miso
 
);
 
 
-- ---------------------------------------------------------------
 
-- -- MM master multiplexer
 
-- ---------------------------------------------------------------
 
-- -- Connect 2 mm_masters to the common_mem_mux output
 
-- master_mosi_arr(0) <= ram_st_bst_mosi; -- MM access via QSYS MM bus
 
-- ram_st_bst_miso <= master_miso_arr(0);
 
-- master_mosi_arr(1) <= ram_st_offload_mosi; -- MM access by SST offload
 
-- ram_st_offload_miso <= master_miso_arr(1);
 
--
 
-- u_mem_master_mux : ENTITY mm_lib.mm_master_mux
 
-- GENERIC MAP (
 
-- g_nof_masters => c_nof_masters,
 
-- g_rd_latency_min => 1 -- read latency of statistics RAM is 1
 
-- )
 
-- PORT MAP (
 
-- mm_clk => mm_clk,
 
--
 
-- master_mosi_arr => master_mosi_arr,
 
-- master_miso_arr => master_miso_arr,
 
-- mux_mosi => master_mem_mux_mosi,
 
-- mux_miso => master_mem_mux_miso
 
-- );
 
--
 
-- ---------------------------------------------------------------
 
-- -- XST UDP offload
 
-- ---------------------------------------------------------------
 
-- u_sdp_bst_udp_offload: ENTITY work.sdp_statistics_offload
 
-- GENERIC MAP (
 
-- g_statistics_type => "XST",
 
-- g_offload_time => g_offload_time,
 
-- g_beamset_id => g_beamset_id
 
-- )
 
-- PORT MAP (
 
-- mm_clk => mm_clk,
 
-- mm_rst => mm_rst,
 
--
 
-- dp_clk => dp_clk,
 
-- dp_rst => dp_rst,
 
--
 
-- master_mosi => ram_st_offload_mosi,
 
-- master_miso => ram_st_offload_miso,
 
--
 
-- reg_enable_mosi => reg_stat_enable_mosi,
 
-- reg_enable_miso => reg_stat_enable_miso,
 
--
 
-- reg_hdr_dat_mosi => reg_stat_hdr_dat_mosi,
 
-- reg_hdr_dat_miso => reg_stat_hdr_dat_miso,
 
--
 
-- sdp_info => sdp_info,
 
-- gn_index => TO_UINT(gn_id),
 
--
 
-- in_sosi => bf_sum_sosi,
 
-- out_sosi => bst_udp_sosi,
 
-- out_siso => bst_udp_siso,
 
--
 
-- eth_src_mac => stat_eth_src_mac,
 
-- udp_src_port => stat_udp_src_port,
 
-- ip_src_addr => stat_ip_src_addr
 
-- );
 
 
 
END str;
Loading