From 738d01cd226cedeaa683a2a2b642e5bcab5ddd0b Mon Sep 17 00:00:00 2001 From: Reinier van der Walle <walle@astron.nl> Date: Fri, 25 Jun 2021 11:58:28 +0200 Subject: [PATCH] added mem mux for beamlet index in VHDL --- .../src/vhdl/lofar2_unb2b_sdp_station.vhd | 44 +++- .../src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd | 80 ++---- .../qsys_lofar2_unb2b_sdp_station_pkg.vhd | 42 ++-- .../lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd | 230 +++++++++--------- 4 files changed, 189 insertions(+), 207 deletions(-) diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd index fbf9ce2279..d79ab32df2 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd @@ -366,10 +366,14 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS -- BST ---------------------------------------------- -- Statistics Enable + SIGNAL reg_stat_enable_bst_mosi : t_mem_mosi := c_mem_mosi_rst; + SIGNAL reg_stat_enable_bst_miso : t_mem_miso := c_mem_miso_rst; SIGNAL reg_stat_enable_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); SIGNAL reg_stat_enable_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); - -- Statistics header info + -- Statistics header info + SIGNAL reg_stat_hdr_dat_bst_mosi : t_mem_mosi := c_mem_mosi_rst; + SIGNAL reg_stat_hdr_dat_bst_miso : t_mem_miso := c_mem_miso_rst; SIGNAL reg_stat_hdr_dat_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); SIGNAL reg_stat_hdr_dat_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); @@ -691,14 +695,10 @@ BEGIN reg_stat_enable_sst_miso => reg_stat_enable_sst_miso, reg_stat_hdr_dat_sst_mosi => reg_stat_hdr_dat_sst_mosi, reg_stat_hdr_dat_sst_miso => reg_stat_hdr_dat_sst_miso, - reg_stat_enable_bst_0_mosi => reg_stat_enable_bst_mosi_arr(0), - reg_stat_enable_bst_0_miso => reg_stat_enable_bst_miso_arr(0), - reg_stat_hdr_dat_bst_0_mosi => reg_stat_hdr_dat_bst_mosi_arr(0), - reg_stat_hdr_dat_bst_0_miso => reg_stat_hdr_dat_bst_miso_arr(0), - reg_stat_enable_bst_1_mosi => reg_stat_enable_bst_mosi_arr(1), - reg_stat_enable_bst_1_miso => reg_stat_enable_bst_miso_arr(1), - reg_stat_hdr_dat_bst_1_mosi => reg_stat_hdr_dat_bst_mosi_arr(1), - reg_stat_hdr_dat_bst_1_miso => reg_stat_hdr_dat_bst_miso_arr(1), + reg_stat_enable_bst_mosi => reg_stat_enable_bst_mosi, + reg_stat_enable_bst_miso => reg_stat_enable_bst_miso, + reg_stat_hdr_dat_bst_mosi => reg_stat_hdr_dat_bst_mosi, + reg_stat_hdr_dat_bst_miso => reg_stat_hdr_dat_bst_miso, reg_dp_sync_insert_v2_mosi => reg_dp_sync_insert_v2_mosi, reg_dp_sync_insert_v2_miso => reg_dp_sync_insert_v2_miso, reg_crosslets_info_mosi => reg_crosslets_info_mosi, @@ -1009,7 +1009,31 @@ BEGIN mosi_arr => ram_st_bst_mosi_arr, miso_arr => ram_st_bst_miso_arr ); - + + u_mem_mux_reg_stat_enable_bst : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_sdp_reg_stat_enable_addr_w + ) + PORT MAP ( + mosi => reg_stat_enable_bst_mosi, + miso => reg_stat_enable_bst_miso, + mosi_arr => reg_stat_enable_bst_mosi_arr, + miso_arr => reg_stat_enable_bst_miso_arr + ); + + u_mem_mux_reg_stat_hdr_dat_bst : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_sdp_reg_stat_hdr_dat_addr_w + ) + PORT MAP ( + mosi => reg_stat_hdr_dat_bst_mosi, + miso => reg_stat_hdr_dat_bst_miso, + mosi_arr => reg_stat_hdr_dat_bst_mosi_arr, + miso_arr => reg_stat_hdr_dat_bst_miso_arr + ); + ----------------------------------------------------------------------------- -- DP MUX ----------------------------------------------------------------------------- diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd index d6824efd58..7e1bbd3620 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd @@ -190,21 +190,13 @@ ENTITY mmm_lofar2_unb2b_sdp_station IS reg_stat_hdr_dat_sst_mosi : OUT t_mem_mosi; reg_stat_hdr_dat_sst_miso : IN t_mem_miso; - -- Beamlet Statistics offload BS 0 - reg_stat_enable_bst_0_mosi : OUT t_mem_mosi; - reg_stat_enable_bst_0_miso : IN t_mem_miso; + -- Beamlet Statistics offload + reg_stat_enable_bst_mosi : OUT t_mem_mosi; + reg_stat_enable_bst_miso : IN t_mem_miso; - -- Statistics header info - reg_stat_hdr_dat_bst_0_mosi : OUT t_mem_mosi; - reg_stat_hdr_dat_bst_0_miso : IN t_mem_miso; - - -- Beamlet Statistics offload BS 1 - reg_stat_enable_bst_1_mosi : OUT t_mem_mosi; - reg_stat_enable_bst_1_miso : IN t_mem_miso; - - -- Statistics header info - reg_stat_hdr_dat_bst_1_mosi : OUT t_mem_mosi; - reg_stat_hdr_dat_bst_1_miso : IN t_mem_miso; + -- Beamlet Statistics header info + reg_stat_hdr_dat_bst_mosi : OUT t_mem_mosi; + reg_stat_hdr_dat_bst_miso : IN t_mem_miso; -- dp_sync_insert_v2 reg_dp_sync_insert_v2_mosi : OUT t_mem_mosi; @@ -353,17 +345,11 @@ BEGIN u_mm_file_reg_stat_hdr_info_sst : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_SST") PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_sst_mosi, reg_stat_hdr_dat_sst_miso); - u_mm_file_reg_stat_enable_bst_0 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_BST_0") - PORT MAP(mm_rst, mm_clk, reg_stat_enable_bst_0_mosi, reg_stat_enable_bst_0_miso ); - - u_mm_file_reg_stat_hdr_info_bst_0 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_BST_0") - PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_bst_0_mosi, reg_stat_hdr_dat_bst_0_miso); - - u_mm_file_reg_stat_enable_bst_1 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_BST_1") - PORT MAP(mm_rst, mm_clk, reg_stat_enable_bst_1_mosi, reg_stat_enable_bst_1_miso ); + u_mm_file_reg_stat_enable_bst : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_BST") + PORT MAP(mm_rst, mm_clk, reg_stat_enable_bst_mosi, reg_stat_enable_bst_miso ); - u_mm_file_reg_stat_hdr_info_bst_1 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_BST_1") - PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_bst_1_mosi, reg_stat_hdr_dat_bst_1_miso); + u_mm_file_reg_stat_hdr_info_bst : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_BST") + PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_bst_mosi, reg_stat_hdr_dat_bst_miso); u_mm_file_reg_dp_sync_insert_v2 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SYNC_INSERT_V2") PORT MAP(mm_rst, mm_clk, reg_dp_sync_insert_v2_mosi, reg_dp_sync_insert_v2_miso); @@ -745,37 +731,21 @@ BEGIN reg_stat_hdr_dat_sst_read_export => reg_stat_hdr_dat_sst_mosi.rd, reg_stat_hdr_dat_sst_readdata_export => reg_stat_hdr_dat_sst_miso.rddata(c_word_w-1 DOWNTO 0), - reg_stat_enable_bst_0_clk_export => OPEN, - reg_stat_enable_bst_0_reset_export => OPEN, - reg_stat_enable_bst_0_address_export => reg_stat_enable_bst_0_mosi.address(c_sdp_reg_stat_enable_addr_w-1 DOWNTO 0), - reg_stat_enable_bst_0_write_export => reg_stat_enable_bst_0_mosi.wr, - reg_stat_enable_bst_0_writedata_export => reg_stat_enable_bst_0_mosi.wrdata(c_word_w-1 DOWNTO 0), - reg_stat_enable_bst_0_read_export => reg_stat_enable_bst_0_mosi.rd, - reg_stat_enable_bst_0_readdata_export => reg_stat_enable_bst_0_miso.rddata(c_word_w-1 DOWNTO 0), - - reg_stat_hdr_dat_bst_0_clk_export => OPEN, - reg_stat_hdr_dat_bst_0_reset_export => OPEN, - reg_stat_hdr_dat_bst_0_address_export => reg_stat_hdr_dat_bst_0_mosi.address(c_sdp_reg_stat_hdr_dat_addr_w-1 DOWNTO 0), - reg_stat_hdr_dat_bst_0_write_export => reg_stat_hdr_dat_bst_0_mosi.wr, - reg_stat_hdr_dat_bst_0_writedata_export => reg_stat_hdr_dat_bst_0_mosi.wrdata(c_word_w-1 DOWNTO 0), - reg_stat_hdr_dat_bst_0_read_export => reg_stat_hdr_dat_bst_0_mosi.rd, - reg_stat_hdr_dat_bst_0_readdata_export => reg_stat_hdr_dat_bst_0_miso.rddata(c_word_w-1 DOWNTO 0), - - reg_stat_enable_bst_1_clk_export => OPEN, - reg_stat_enable_bst_1_reset_export => OPEN, - reg_stat_enable_bst_1_address_export => reg_stat_enable_bst_1_mosi.address(c_sdp_reg_stat_enable_addr_w-1 DOWNTO 0), - reg_stat_enable_bst_1_write_export => reg_stat_enable_bst_1_mosi.wr, - reg_stat_enable_bst_1_writedata_export => reg_stat_enable_bst_1_mosi.wrdata(c_word_w-1 DOWNTO 0), - reg_stat_enable_bst_1_read_export => reg_stat_enable_bst_1_mosi.rd, - reg_stat_enable_bst_1_readdata_export => reg_stat_enable_bst_1_miso.rddata(c_word_w-1 DOWNTO 0), - - reg_stat_hdr_dat_bst_1_clk_export => OPEN, - reg_stat_hdr_dat_bst_1_reset_export => OPEN, - reg_stat_hdr_dat_bst_1_address_export => reg_stat_hdr_dat_bst_1_mosi.address(c_sdp_reg_stat_hdr_dat_addr_w-1 DOWNTO 0), - reg_stat_hdr_dat_bst_1_write_export => reg_stat_hdr_dat_bst_1_mosi.wr, - reg_stat_hdr_dat_bst_1_writedata_export => reg_stat_hdr_dat_bst_1_mosi.wrdata(c_word_w-1 DOWNTO 0), - reg_stat_hdr_dat_bst_1_read_export => reg_stat_hdr_dat_bst_1_mosi.rd, - reg_stat_hdr_dat_bst_1_readdata_export => reg_stat_hdr_dat_bst_1_miso.rddata(c_word_w-1 DOWNTO 0), + reg_stat_enable_bst_clk_export => OPEN, + reg_stat_enable_bst_reset_export => OPEN, + reg_stat_enable_bst_address_export => reg_stat_enable_bst_mosi.address(c_sdp_reg_stat_enable_bst_addr_w-1 DOWNTO 0), + reg_stat_enable_bst_write_export => reg_stat_enable_bst_mosi.wr, + reg_stat_enable_bst_writedata_export => reg_stat_enable_bst_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_stat_enable_bst_read_export => reg_stat_enable_bst_mosi.rd, + reg_stat_enable_bst_readdata_export => reg_stat_enable_bst_miso.rddata(c_word_w-1 DOWNTO 0), + + reg_stat_hdr_dat_bst_clk_export => OPEN, + reg_stat_hdr_dat_bst_reset_export => OPEN, + reg_stat_hdr_dat_bst_address_export => reg_stat_hdr_dat_bst_mosi.address(c_sdp_reg_stat_hdr_dat_bst_addr_w-1 DOWNTO 0), + reg_stat_hdr_dat_bst_write_export => reg_stat_hdr_dat_bst_mosi.wr, + reg_stat_hdr_dat_bst_writedata_export => reg_stat_hdr_dat_bst_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_stat_hdr_dat_bst_read_export => reg_stat_hdr_dat_bst_mosi.rd, + reg_stat_hdr_dat_bst_readdata_export => reg_stat_hdr_dat_bst_miso.rddata(c_word_w-1 DOWNTO 0), reg_dp_sync_insert_v2_clk_export => OPEN, reg_dp_sync_insert_v2_reset_export => OPEN, diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd index 5de02153d5..dfdc3433e9 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd @@ -301,34 +301,20 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_stat_hdr_dat_sst_reset_export : out std_logic; -- export reg_stat_hdr_dat_sst_write_export : out std_logic; -- export reg_stat_hdr_dat_sst_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_stat_enable_bst_0_address_export : out std_logic_vector(0 downto 0); -- export - reg_stat_enable_bst_0_clk_export : out std_logic; -- export - reg_stat_enable_bst_0_read_export : out std_logic; -- export - reg_stat_enable_bst_0_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_stat_enable_bst_0_reset_export : out std_logic; -- export - reg_stat_enable_bst_0_write_export : out std_logic; -- export - reg_stat_enable_bst_0_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_stat_hdr_dat_bst_0_address_export : out std_logic_vector(5 downto 0); -- export - reg_stat_hdr_dat_bst_0_clk_export : out std_logic; -- export - reg_stat_hdr_dat_bst_0_read_export : out std_logic; -- export - reg_stat_hdr_dat_bst_0_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_stat_hdr_dat_bst_0_reset_export : out std_logic; -- export - reg_stat_hdr_dat_bst_0_write_export : out std_logic; -- export - reg_stat_hdr_dat_bst_0_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_stat_enable_bst_1_address_export : out std_logic_vector(0 downto 0); -- export - reg_stat_enable_bst_1_clk_export : out std_logic; -- export - reg_stat_enable_bst_1_read_export : out std_logic; -- export - reg_stat_enable_bst_1_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_stat_enable_bst_1_reset_export : out std_logic; -- export - reg_stat_enable_bst_1_write_export : out std_logic; -- export - reg_stat_enable_bst_1_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_stat_hdr_dat_bst_1_address_export : out std_logic_vector(5 downto 0); -- export - reg_stat_hdr_dat_bst_1_clk_export : out std_logic; -- export - reg_stat_hdr_dat_bst_1_read_export : out std_logic; -- export - reg_stat_hdr_dat_bst_1_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_stat_hdr_dat_bst_1_reset_export : out std_logic; -- export - reg_stat_hdr_dat_bst_1_write_export : out std_logic; -- export - reg_stat_hdr_dat_bst_1_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_stat_enable_bst_address_export : out std_logic_vector(1 downto 0); -- export + reg_stat_enable_bst_clk_export : out std_logic; -- export + reg_stat_enable_bst_read_export : out std_logic; -- export + reg_stat_enable_bst_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_stat_enable_bst_reset_export : out std_logic; -- export + reg_stat_enable_bst_write_export : out std_logic; -- export + reg_stat_enable_bst_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_stat_hdr_dat_bst_address_export : out std_logic_vector(6 downto 0); -- export + reg_stat_hdr_dat_bst_clk_export : out std_logic; -- export + reg_stat_hdr_dat_bst_read_export : out std_logic; -- export + reg_stat_hdr_dat_bst_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_stat_hdr_dat_bst_reset_export : out std_logic; -- export + reg_stat_hdr_dat_bst_write_export : out std_logic; -- export + reg_stat_hdr_dat_bst_writedata_export : out std_logic_vector(31 downto 0); -- export reg_dp_sync_insert_v2_address_export : out std_logic_vector(0 downto 0); -- export reg_dp_sync_insert_v2_clk_export : out std_logic; -- export reg_dp_sync_insert_v2_read_export : out std_logic; -- export diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 1dcc7eb619..2f50920b76 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -139,120 +139,8 @@ PACKAGE sdp_pkg is true, 54, 2, 195313, c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); - -- JESD204 - CONSTANT c_sdp_jesd204b_freq : STRING := "200MHz"; - CONSTANT c_sdp_jesd204b_mm_jesd_ctrl_reg : t_c_mem := (latency => 1, - adr_w => 1, - dat_w => c_word_w, - nof_dat => 1, - init_sl => '0'); - - -- AIT MM address widths - CONSTANT c_sdp_jesd204b_addr_w : NATURAL := 8 + ceil_log2(c_sdp_S_pn); - CONSTANT c_sdp_jesd_ctrl_addr_w : NATURAL := 1; - CONSTANT c_sdp_reg_bsn_monitor_input_addr_w : NATURAL := 8; - CONSTANT c_sdp_reg_wg_addr_w : NATURAL := 2 + ceil_log2(c_sdp_S_pn); - CONSTANT c_sdp_ram_wg_addr_w : NATURAL := 10 + ceil_log2(c_sdp_S_pn); - CONSTANT c_sdp_reg_dp_shiftram_addr_w : NATURAL := 1 + ceil_log2(c_sdp_S_pn); - CONSTANT c_sdp_reg_bsn_source_v2_addr_w : NATURAL := 3; - CONSTANT c_sdp_reg_bsn_scheduler_addr_w : NATURAL := 1; - CONSTANT c_sdp_ram_diag_data_buf_bsn_addr_w : NATURAL := ceil_log2(c_sdp_S_pn*c_sdp_V_si_db_large); -- Dimension DB address range for largest DB, so that both the large and the default small DB fit. - CONSTANT c_sdp_reg_diag_data_buf_bsn_addr_w : NATURAL := 1 + ceil_log2(c_sdp_S_pn); - CONSTANT c_sdp_reg_aduh_monitor_addr_w : NATURAL := 2 + ceil_log2(c_sdp_S_pn); - - -- FSUB MM address widths - CONSTANT c_sdp_ram_fil_coefs_addr_w : NATURAL := ceil_log2(c_sdp_N_fft * c_sdp_N_taps); - CONSTANT c_sdp_ram_st_sst_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb*c_sdp_N_sub*c_sdp_Q_fft*c_sdp_wpfb_subbands.stat_data_sz); - CONSTANT c_sdp_reg_si_addr_w : NATURAL := 1; --enable/disable - CONSTANT c_sdp_ram_equalizer_gains_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb*c_sdp_N_sub*c_sdp_Q_fft); - CONSTANT c_sdp_reg_dp_selector_addr_w : NATURAL := 1; --Select input 0 or 1. - - -- BF MM address widths - CONSTANT c_sdp_reg_sdp_info_addr_w : NATURAL := 4; - CONSTANT c_sdp_ram_ss_ss_wide_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); - CONSTANT c_sdp_ram_bf_weights_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_N_pol * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); - CONSTANT c_sdp_reg_bf_scale_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; - CONSTANT c_sdp_reg_dp_xonoff_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; - CONSTANT c_sdp_ram_st_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_S_sub_bf*c_sdp_N_pol*(c_longword_sz/c_word_sz)); - - -- SST UDP offload MM address widths - CONSTANT c_sdp_reg_stat_enable_addr_w :NATURAL := 1; - - -- XSUB - CONSTANT c_sdp_crosslets_index_w : NATURAL := ceil_log2(c_sdp_N_sub); - CONSTANT c_sdp_mm_reg_crosslets_info : t_c_mem := (latency => 1, - adr_w => 4, - dat_w => c_sdp_crosslets_index_w, - nof_dat => 16, -- 15 offsets + 1 step - init_sl => '0'); - CONSTANT c_sdp_crosslets_info_reg_w : NATURAL := c_sdp_mm_reg_crosslets_info.nof_dat*c_sdp_mm_reg_crosslets_info.dat_w; - - CONSTANT c_sdp_xst_nof_blk_per_sync_max : NATURAL := 200000; - CONSTANT c_sdp_xst_nof_blk_per_sync_min : NATURAL := 19530; - - -- XSUB MM address widths - CONSTANT c_sdp_reg_dp_sync_insert_v2_addr_w : NATURAL := 1; - CONSTANT c_sdp_reg_crosslets_info_addr_w : NATURAL := c_sdp_mm_reg_crosslets_info.adr_w; - CONSTANT c_sdp_reg_bsn_scheduler_xsub_addr_w : NATURAL := 1; - CONSTANT c_sdp_ram_st_xsq_addr_w : NATURAL := ceil_log2(c_sdp_P_sq) + ceil_log2(c_sdp_N_crosslets * c_sdp_X_sq * c_nof_complex * (c_longword_sz/c_word_sz) ); - - -- 10GbE offload (cep = central processor) - CONSTANT c_sdp_cep_eth_src_mac_47_16 : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node - CONSTANT c_sdp_cep_ip_src_addr_31_16 : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"C0A8"; -- 31:16, 15:8 = backplane, 7:0 = node + 1 = 192.168.xx.yy - CONSTANT c_sdp_cep_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D0"; -- 15:8, 7:0 = gn_id (= ID[7:0] = backplane[5:0] & node[1:0]) - - CONSTANT c_sdp_cep_nof_blocks_per_packet : NATURAL := 4; - CONSTANT c_sdp_cep_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; - CONSTANT c_sdp_cep_nof_hdr_fields : NATURAL := 3+12+4+18+1; -- 592b; 9.25 64b words - CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"1100"&"00000010"&"000110"&"0"; -- 0=data path, 1=MM controlled TODO ---CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "100"&"000000010001"&"0100"&"0100"&"00000000"&"101000"&"0"; -- 0=data path, 1=MM controlled TODO - - CONSTANT c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := ( - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"00074306C700") ), -- 00074306C700=DOP36-eth0 - ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), - - ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), - ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), - ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), - ( field_name_pad("ip_total_length" ), "RW", 16, field_default(7868) ), - ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), - ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), - ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), - ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), - ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), - ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(x"C0A80001") ), -- C0A80001=DOP36-eth0 '192.168.0.1' - - ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(5000) ), - ( field_name_pad("udp_total_length" ), "RW", 16, field_default(7848) ), - ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), - - ( field_name_pad("sdp_marker" ), "RW", 8, field_default(x"62") ), - ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(5) ), - ( field_name_pad("sdp_observation_id" ), "RW", 32, field_default(0) ), - ( field_name_pad("sdp_station_id" ), "RW", 16, field_default(0) ), - - ( field_name_pad("sdp_source_info_antenna_band_id" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_nyquist_zone_id" ), "RW", 2, field_default(0) ), - ( field_name_pad("sdp_source_info_f_adc" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_fsub_type" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_payload_error" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_repositioning_flag" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_beamlet_width" ), "RW", 4, field_default(c_sdp_W_beamlet) ), - ( field_name_pad("sdp_source_info_gn_id" ), "RW", 5, field_default(0) ), - - ( field_name_pad("sdp_reserved" ), "RW", 40, field_default(0) ), - ( field_name_pad("sdp_beamlet_scale" ), "RW", 16, field_default(2**15) ), - ( field_name_pad("sdp_beamlet_id" ), "RW", 16, field_default(0) ), - ( field_name_pad("sdp_nof_blocks_per_packet" ), "RW", 8, field_default(c_sdp_cep_nof_blocks_per_packet) ), - ( field_name_pad("sdp_nof_beamlets_per_block" ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ), - ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(5120) ), - - ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) - ); + -- ST UDP offload MM address widths + CONSTANT c_sdp_reg_stat_enable_addr_w : NATURAL := 1; -- 10GbE MM address widths CONSTANT c_sdp_reg_hdr_dat_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); @@ -328,6 +216,120 @@ PACKAGE sdp_pkg is ); CONSTANT c_sdp_reg_stat_hdr_dat_addr_w : NATURAL := ceil_log2(field_nof_words(c_sdp_stat_hdr_field_arr, c_word_w)); + -- 10GbE offload (cep = central processor) + CONSTANT c_sdp_cep_eth_src_mac_47_16 : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node + CONSTANT c_sdp_cep_ip_src_addr_31_16 : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"C0A8"; -- 31:16, 15:8 = backplane, 7:0 = node + 1 = 192.168.xx.yy + CONSTANT c_sdp_cep_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D0"; -- 15:8, 7:0 = gn_id (= ID[7:0] = backplane[5:0] & node[1:0]) + + CONSTANT c_sdp_cep_nof_blocks_per_packet : NATURAL := 4; + CONSTANT c_sdp_cep_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; + CONSTANT c_sdp_cep_nof_hdr_fields : NATURAL := 3+12+4+18+1; -- 592b; 9.25 64b words + CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"1100"&"00000010"&"000110"&"0"; -- 0=data path, 1=MM controlled TODO +--CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "100"&"000000010001"&"0100"&"0100"&"00000000"&"101000"&"0"; -- 0=data path, 1=MM controlled TODO + + CONSTANT c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := ( + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"00074306C700") ), -- 00074306C700=DOP36-eth0 + ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), + + ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), + ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), + ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), + ( field_name_pad("ip_total_length" ), "RW", 16, field_default(7868) ), + ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), + ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), + ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), + ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), + ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), + ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(x"C0A80001") ), -- C0A80001=DOP36-eth0 '192.168.0.1' + + ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(5000) ), + ( field_name_pad("udp_total_length" ), "RW", 16, field_default(7848) ), + ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), + + ( field_name_pad("sdp_marker" ), "RW", 8, field_default(x"62") ), + ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(5) ), + ( field_name_pad("sdp_observation_id" ), "RW", 32, field_default(0) ), + ( field_name_pad("sdp_station_id" ), "RW", 16, field_default(0) ), + + ( field_name_pad("sdp_source_info_antenna_band_id" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_nyquist_zone_id" ), "RW", 2, field_default(0) ), + ( field_name_pad("sdp_source_info_f_adc" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_fsub_type" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_payload_error" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_repositioning_flag" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_beamlet_width" ), "RW", 4, field_default(c_sdp_W_beamlet) ), + ( field_name_pad("sdp_source_info_gn_id" ), "RW", 5, field_default(0) ), + + ( field_name_pad("sdp_reserved" ), "RW", 40, field_default(0) ), + ( field_name_pad("sdp_beamlet_scale" ), "RW", 16, field_default(2**15) ), + ( field_name_pad("sdp_beamlet_id" ), "RW", 16, field_default(0) ), + ( field_name_pad("sdp_nof_blocks_per_packet" ), "RW", 8, field_default(c_sdp_cep_nof_blocks_per_packet) ), + ( field_name_pad("sdp_nof_beamlets_per_block" ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ), + ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(5120) ), + + ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) + ); + + -- JESD204 + CONSTANT c_sdp_jesd204b_freq : STRING := "200MHz"; + CONSTANT c_sdp_jesd204b_mm_jesd_ctrl_reg : t_c_mem := (latency => 1, + adr_w => 1, + dat_w => c_word_w, + nof_dat => 1, + init_sl => '0'); + + + -- AIT MM address widths + CONSTANT c_sdp_jesd204b_addr_w : NATURAL := 8 + ceil_log2(c_sdp_S_pn); + CONSTANT c_sdp_jesd_ctrl_addr_w : NATURAL := 1; + CONSTANT c_sdp_reg_bsn_monitor_input_addr_w : NATURAL := 8; + CONSTANT c_sdp_reg_wg_addr_w : NATURAL := 2 + ceil_log2(c_sdp_S_pn); + CONSTANT c_sdp_ram_wg_addr_w : NATURAL := 10 + ceil_log2(c_sdp_S_pn); + CONSTANT c_sdp_reg_dp_shiftram_addr_w : NATURAL := 1 + ceil_log2(c_sdp_S_pn); + CONSTANT c_sdp_reg_bsn_source_v2_addr_w : NATURAL := 3; + CONSTANT c_sdp_reg_bsn_scheduler_addr_w : NATURAL := 1; + CONSTANT c_sdp_ram_diag_data_buf_bsn_addr_w : NATURAL := ceil_log2(c_sdp_S_pn*c_sdp_V_si_db_large); -- Dimension DB address range for largest DB, so that both the large and the default small DB fit. + CONSTANT c_sdp_reg_diag_data_buf_bsn_addr_w : NATURAL := 1 + ceil_log2(c_sdp_S_pn); + CONSTANT c_sdp_reg_aduh_monitor_addr_w : NATURAL := 2 + ceil_log2(c_sdp_S_pn); + + -- FSUB MM address widths + CONSTANT c_sdp_ram_fil_coefs_addr_w : NATURAL := ceil_log2(c_sdp_N_fft * c_sdp_N_taps); + CONSTANT c_sdp_ram_st_sst_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb*c_sdp_N_sub*c_sdp_Q_fft*c_sdp_wpfb_subbands.stat_data_sz); + CONSTANT c_sdp_reg_si_addr_w : NATURAL := 1; --enable/disable + CONSTANT c_sdp_ram_equalizer_gains_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb*c_sdp_N_sub*c_sdp_Q_fft); + CONSTANT c_sdp_reg_dp_selector_addr_w : NATURAL := 1; --Select input 0 or 1. + + -- BF MM address widths + CONSTANT c_sdp_reg_sdp_info_addr_w : NATURAL := 4; + CONSTANT c_sdp_ram_ss_ss_wide_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); + CONSTANT c_sdp_ram_bf_weights_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_N_pol * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); + CONSTANT c_sdp_reg_bf_scale_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; + CONSTANT c_sdp_reg_dp_xonoff_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; + CONSTANT c_sdp_ram_st_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_S_sub_bf*c_sdp_N_pol*(c_longword_sz/c_word_sz)); + CONSTANT c_sdp_reg_stat_enable_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_stat_enable_addr_w; + CONSTANT c_sdp_reg_stat_hdr_dat_bst_addr_w: NATURAL := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_stat_hdr_dat_addr_w; + + -- XSUB + CONSTANT c_sdp_crosslets_index_w : NATURAL := ceil_log2(c_sdp_N_sub); + CONSTANT c_sdp_mm_reg_crosslets_info : t_c_mem := (latency => 1, + adr_w => 4, + dat_w => c_sdp_crosslets_index_w, + nof_dat => 16, -- 15 offsets + 1 step + init_sl => '0'); + CONSTANT c_sdp_crosslets_info_reg_w : NATURAL := c_sdp_mm_reg_crosslets_info.nof_dat*c_sdp_mm_reg_crosslets_info.dat_w; + + CONSTANT c_sdp_xst_nof_blk_per_sync_max : NATURAL := 200000; + CONSTANT c_sdp_xst_nof_blk_per_sync_min : NATURAL := 19530; + + -- XSUB MM address widths + CONSTANT c_sdp_reg_dp_sync_insert_v2_addr_w : NATURAL := 1; + CONSTANT c_sdp_reg_crosslets_info_addr_w : NATURAL := c_sdp_mm_reg_crosslets_info.adr_w; + CONSTANT c_sdp_reg_bsn_scheduler_xsub_addr_w : NATURAL := 1; + CONSTANT c_sdp_ram_st_xsq_addr_w : NATURAL := ceil_log2(c_sdp_P_sq) + ceil_log2(c_sdp_N_crosslets * c_sdp_X_sq * c_nof_complex * (c_longword_sz/c_word_sz) ); END PACKAGE sdp_pkg; -- GitLab