diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/tb/vhdl/tb_lofar2_unb2b_adc_multichannel.vhd b/applications/lofar2/designs/lofar2_unb2b_adc/tb/vhdl/tb_lofar2_unb2b_adc_multichannel.vhd index 16294442b7b7a21a596125399d2de3cd0c9483c8..9a237118121290a8a1571bf33499480e06a5c974 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/tb/vhdl/tb_lofar2_unb2b_adc_multichannel.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_adc/tb/vhdl/tb_lofar2_unb2b_adc_multichannel.vhd @@ -300,7 +300,7 @@ begin -- Generate test pattern at each ADC - proc_data : process (jesd204b_sampclk_adc(i), mm_rst) + p_data : process (jesd204b_sampclk_adc(i), mm_rst) variable data : integer := 0; variable even_sample : boolean := true; begin @@ -339,7 +339,6 @@ begin end if; end if; end process; - end generate; ----------------------------------------------------------------------------- @@ -361,7 +360,7 @@ begin bonding_clock_2 <= not bonding_clock_2 after 500 ps; bonding_clock_0 <= not bonding_clock_0 after 2500 ps; - bonding_clock_1_process : process + p_bonding_clock_1 : process begin bonding_clock_1 <= '0'; wait for 4000 ps; @@ -381,7 +380,7 @@ begin -- clock source process - proc_sysref : process (jesd204b_sampclk, mm_rst) + p_sysref : process (jesd204b_sampclk, mm_rst) variable count : natural := 0; begin if mm_rst = '1' then @@ -407,7 +406,7 @@ begin ------------------------------------------------------------------------------ -- Diagnostics ------------------------------------------------------------------------------ - proc_read_avs_regs : process + p_read_avs_regs : process begin wait for 100 ns; avs_address(0) <= (others => '0'); 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 50813fd6e158e303f7439e6ff6cda8bcacb5dbfc..0c04ea64a1a999388c2a99d7316bc70875bc4f1a 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 @@ -26,21 +26,23 @@ -- Unb2b version for lab testing, using generic sdp_station.vhd for LOFAR2 SDP application. ------------------------------------------------------------------------------- -library IEEE, common_lib, unb2b_board_lib, diag_lib, dp_lib, tech_jesd204b_lib, wpfb_lib, lofar2_sdp_lib, tech_pll_lib, nw_10gbe_lib, eth_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.common_field_pkg.all; -use unb2b_board_lib.unb2b_board_pkg.all; -use unb2b_board_lib.unb2b_board_peripherals_pkg.all; -use diag_lib.diag_pkg.all; -use dp_lib.dp_stream_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; -use work.lofar2_unb2b_sdp_station_pkg.all; -use eth_lib.eth_pkg.all; +library IEEE, common_lib, diag_lib, dp_lib; +library unb2b_board_lib, tech_pll_lib, tech_jesd204b_lib; +library wpfb_lib, nw_10gbe_lib, eth_lib, lofar2_sdp_lib; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.common_field_pkg.all; + use unb2b_board_lib.unb2b_board_pkg.all; + use unb2b_board_lib.unb2b_board_peripherals_pkg.all; + use diag_lib.diag_pkg.all; + use dp_lib.dp_stream_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use eth_lib.eth_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; + use work.lofar2_unb2b_sdp_station_pkg.all; entity lofar2_unb2b_sdp_station is generic ( @@ -99,19 +101,22 @@ entity lofar2_unb2b_sdp_station is QSFP_LED : out std_logic_vector(c_unb2b_board_tr_qsfp_nof_leds - 1 downto 0); -- ring transceivers - RING_0_RX : in std_logic_vector(c_unb2b_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); -- Using qsfp bus width also for ring interfaces + -- . Using qsfp bus width also for ring interfaces + RING_0_RX : in std_logic_vector(c_unb2b_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_0_TX : out std_logic_vector(c_unb2b_board_tr_qsfp.bus_w - 1 downto 0); RING_1_RX : in std_logic_vector(c_unb2b_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_1_TX : out std_logic_vector(c_unb2b_board_tr_qsfp.bus_w - 1 downto 0); -- back transceivers (Note: numbered from 0) - JESD204B_SERIAL_DATA : in std_logic_vector(c_sdp_S_pn - 1 downto 0) := (others => '0'); -- c_sdp_S_pn = 12, c_unb2b_board_nof_tr_jesd204b = 6 + JESD204B_SERIAL_DATA : in std_logic_vector(c_sdp_S_pn - 1 downto 0) := (others => '0'); + -- c_sdp_S_pn = 12, c_unb2b_board_nof_tr_jesd204b = 6 -- Connect to the BCK_RX pins in the top wrapper JESD204B_REFCLK : in std_logic := '0'; -- Connect to BCK_REF_CLK pin in the top level wrapper -- jesd204b syncronization signals JESD204B_SYSREF : in std_logic := '0'; - JESD204B_SYNC_N : out std_logic_vector(c_sdp_N_sync_jesd - 1 downto 0) -- c_unb2b_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 + JESD204B_SYNC_N : out std_logic_vector(c_sdp_N_sync_jesd - 1 downto 0) + -- c_unb2b_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 ); end lofar2_unb2b_sdp_station; @@ -467,8 +472,10 @@ architecture str of lofar2_unb2b_sdp_station is signal reg_nw_10GbE_eth10g_cipo : t_mem_cipo := c_mem_cipo_rst; -- 10GbE - signal i_QSFP_TX : t_unb2b_board_qsfp_bus_2arr(c_unb2b_board_tr_qsfp.nof_bus - 1 downto 0) := (others => (others => '0')); - signal i_QSFP_RX : t_unb2b_board_qsfp_bus_2arr(c_unb2b_board_tr_qsfp.nof_bus - 1 downto 0) := (others => (others => '0')); + signal i_QSFP_TX : t_unb2b_board_qsfp_bus_2arr(c_unb2b_board_tr_qsfp.nof_bus - 1 downto 0) := + (others => (others => '0')); + signal i_QSFP_RX : t_unb2b_board_qsfp_bus_2arr(c_unb2b_board_tr_qsfp.nof_bus - 1 downto 0) := + (others => (others => '0')); signal unb2_board_front_io_serial_tx_arr : std_logic_vector(c_nof_streams_qsfp - 1 downto 0) := (others => '0'); signal unb2_board_front_io_serial_rx_arr : std_logic_vector(c_nof_streams_qsfp - 1 downto 0) := (others => '0'); 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 7a65b2f2389ca4570b8af8e2db5ef8cc21079339..c22d437714a01a5b595fb0c1eb94563f33588666 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 @@ -19,23 +19,23 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, unb2b_board_lib, mm_lib, lofar2_sdp_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use unb2b_board_lib.unb2b_board_pkg.all; -use unb2b_board_lib.unb2b_board_peripherals_pkg.all; -use mm_lib.mm_file_pkg.all; -use mm_lib.mm_file_unb_pkg.all; -use work.qsys_lofar2_unb2b_sdp_station_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use unb2b_board_lib.unb2b_board_pkg.all; + use unb2b_board_lib.unb2b_board_peripherals_pkg.all; + use mm_lib.mm_file_pkg.all; + use mm_lib.mm_file_unb_pkg.all; + use work.qsys_lofar2_unb2b_sdp_station_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; entity mmm_lofar2_unb2b_sdp_station is generic ( g_sim : boolean := false; -- FALSE: use QSYS; TRUE: use mm_file I/O g_sim_unb_nr : natural := 0; g_sim_node_nr : natural := 0 - ); + ); port ( mm_rst : in std_logic; mm_clk : in std_logic; @@ -335,230 +335,311 @@ entity mmm_lofar2_unb2b_sdp_station is -- Jesd reset control jesd_ctrl_copi : out t_mem_copi; jesd_ctrl_cipo : in t_mem_cipo - ); + ); end mmm_lofar2_unb2b_sdp_station; architecture str of mmm_lofar2_unb2b_sdp_station is constant c_sim_node_nr : natural := g_sim_node_nr; constant c_sim_node_type : string(1 to 2) := "FN"; + -- Use shorter alias name for c_unb2b_board_peripherals_mm_reg_default to easier fit line length, and without b, c + -- to make mmm file for unb2b and unb2c more equal. + constant c_unb2_mm_reg_default : t_c_unb2b_board_peripherals_mm_reg := c_unb2b_board_peripherals_mm_reg_default; + signal i_reset_n : std_logic; begin ---------------------------------------------------------------------------- -- MM <-> file I/O for simulation. The files are created in $UPE/sim. ---------------------------------------------------------------------------- gen_mm_file_io : if g_sim = true generate - u_mm_file_reg_unb_system_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") - port map(mm_rst, mm_clk, reg_unb_system_info_copi, reg_unb_system_info_cipo ); - - u_mm_file_rom_unb_system_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") - port map(mm_rst, mm_clk, rom_unb_system_info_copi, rom_unb_system_info_cipo ); - - u_mm_file_reg_wdi : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") - port map(mm_rst, mm_clk, reg_wdi_copi, reg_wdi_cipo ); - - u_mm_file_reg_unb_sens : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_SENS") - port map(mm_rst, mm_clk, reg_unb_sens_copi, reg_unb_sens_cipo ); - - u_mm_file_reg_unb_pmbus : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_PMBUS") - port map(mm_rst, mm_clk, reg_unb_pmbus_copi, reg_unb_pmbus_cipo ); - - u_mm_file_reg_fpga_temp_sens : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_TEMP_SENS") - port map(mm_rst, mm_clk, reg_fpga_temp_sens_copi, reg_fpga_temp_sens_cipo ); - - u_mm_file_reg_fpga_voltage_sens : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_VOLTAGE_SENS") - port map(mm_rst, mm_clk, reg_fpga_voltage_sens_copi, reg_fpga_voltage_sens_cipo ); - - u_mm_file_reg_ppsh : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_PPS") - port map(mm_rst, mm_clk, reg_ppsh_copi, reg_ppsh_cipo ); - - -- Note: the eth1g RAM and TSE buses are only required by unb_osy on the NIOS as they provide the ethernet<->MM gateway. - u_mm_file_reg_eth : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") - port map(mm_rst, mm_clk, eth1g_reg_copi, eth1g_reg_cipo ); - - -- Must use exact g_mm_rd_latency = 1 instead of default 2, because JESD204B IP forces rddata = 0 after it has been read - u_mm_file_jesd204b : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "JESD204B", '1', 1) - port map(mm_rst, mm_clk, jesd204b_copi, jesd204b_cipo ); - - u_mm_file_pio_jesd_ctrl : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_JESD_CTRL") - port map(mm_rst, mm_clk, jesd_ctrl_copi, jesd_ctrl_cipo ); - - u_mm_file_reg_dp_shiftram : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SHIFTRAM") - port map(mm_rst, mm_clk, reg_dp_shiftram_copi, reg_dp_shiftram_cipo ); - - u_mm_file_reg_bsn_source_v2 : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SOURCE_V2") - port map(mm_rst, mm_clk, reg_bsn_source_v2_copi, reg_bsn_source_v2_cipo ); - - u_mm_file_reg_bsn_scheduler : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SCHEDULER") - port map(mm_rst, mm_clk, reg_bsn_scheduler_copi, reg_bsn_scheduler_cipo ); - - u_mm_file_reg_bsn_monitor_input : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_INPUT") - port map(mm_rst, mm_clk, reg_bsn_monitor_input_copi, reg_bsn_monitor_input_cipo ); - - u_mm_file_reg_wg : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WG") - port map(mm_rst, mm_clk, reg_wg_copi, reg_wg_cipo ); - u_mm_file_ram_wg : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_WG") - port map(mm_rst, mm_clk, ram_wg_copi, ram_wg_cipo ); - - u_mm_file_ram_diag_data_buf_bsn : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DIAG_DATA_BUFFER_BSN") - port map(mm_rst, mm_clk, ram_diag_data_buf_bsn_copi, ram_diag_data_buf_bsn_cipo ); - u_mm_file_reg_diag_data_buf_bsn : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAG_DATA_BUFFER_BSN") - port map(mm_rst, mm_clk, reg_diag_data_buf_bsn_copi, reg_diag_data_buf_bsn_cipo ); - - u_mm_file_ram_st_histogram : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_HISTOGRAM") - port map(mm_rst, mm_clk, ram_st_histogram_copi, ram_st_histogram_cipo ); - - u_mm_file_reg_aduh_monitor : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_ADUH_MONITOR") - port map(mm_rst, mm_clk, reg_aduh_monitor_copi, reg_aduh_monitor_cipo ); - - u_mm_file_ram_st_sst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_SST") - port map(mm_rst, mm_clk, ram_st_sst_copi, ram_st_sst_cipo ); - - u_mm_file_ram_fil_coefs : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_FIL_COEFS") - port map(mm_rst, mm_clk, ram_fil_coefs_copi, ram_fil_coefs_cipo ); - - u_mm_file_reg_si : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SI") - port map(mm_rst, mm_clk, reg_si_copi, reg_si_cipo ); - - u_mm_file_ram_equalizer_gains : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS") - port map(mm_rst, mm_clk, ram_equalizer_gains_copi, ram_equalizer_gains_cipo ); - u_mm_file_ram_equalizer_gains_cross : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS_CROSS") - port map(mm_rst, mm_clk, ram_equalizer_gains_cross_copi, ram_equalizer_gains_cross_cipo ); - - u_mm_file_reg_dp_selector : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SELECTOR") - port map(mm_rst, mm_clk, reg_dp_selector_copi, reg_dp_selector_cipo ); - - u_mm_file_reg_sdp_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SDP_INFO") - port map(mm_rst, mm_clk, reg_sdp_info_copi, reg_sdp_info_cipo ); - - u_mm_file_reg_ring_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_INFO") - port map(mm_rst, mm_clk, reg_ring_info_copi, reg_ring_info_cipo ); - - u_mm_file_ram_ss_ss_wide : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SS_SS_WIDE") - port map(mm_rst, mm_clk, ram_ss_ss_wide_copi, ram_ss_ss_wide_cipo ); - - u_mm_file_ram_bf_weights : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_BF_WEIGHTS") - port map(mm_rst, mm_clk, ram_bf_weights_copi, ram_bf_weights_cipo ); - - u_mm_file_reg_bf_scale : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BF_SCALE") - port map(mm_rst, mm_clk, reg_bf_scale_copi, reg_bf_scale_cipo ); - - u_mm_file_reg_hdr_dat : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_HDR_DAT") - port map(mm_rst, mm_clk, reg_hdr_dat_copi, reg_hdr_dat_cipo ); - - u_mm_file_reg_bdo_destinations : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BDO_DESTINATIONS") - port map(mm_rst, mm_clk, reg_bdo_destinations_copi, reg_bdo_destinations_cipo ); - - u_mm_file_reg_dp_xonoff : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_XONOFF") - port map(mm_rst, mm_clk, reg_dp_xonoff_copi, reg_dp_xonoff_cipo ); - - u_mm_file_ram_st_bst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_BST") - port map(mm_rst, mm_clk, ram_st_bst_copi, ram_st_bst_cipo ); - - u_mm_file_reg_stat_enable_sst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_SST") - port map(mm_rst, mm_clk, reg_stat_enable_sst_copi, reg_stat_enable_sst_cipo ); - - 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_copi, reg_stat_hdr_dat_sst_cipo); - - u_mm_file_reg_stat_enable_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_XST") - port map(mm_rst, mm_clk, reg_stat_enable_xst_copi, reg_stat_enable_xst_cipo ); - - u_mm_file_reg_stat_hdr_info_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_XST") - port map(mm_rst, mm_clk, reg_stat_hdr_dat_xst_copi, reg_stat_hdr_dat_xst_cipo); - - 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_copi, reg_stat_enable_bst_cipo ); - - 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_copi, reg_stat_hdr_dat_bst_cipo); - - u_mm_file_reg_crosslets_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_CROSSLETS_INFO") - port map(mm_rst, mm_clk, reg_crosslets_info_copi, reg_crosslets_info_cipo); - - u_mm_file_reg_nof_crosslets : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NOF_CROSSLETS") - port map(mm_rst, mm_clk, reg_nof_crosslets_copi, reg_nof_crosslets_cipo); - - u_mm_file_reg_bsn_sync_scheduler_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SYNC_SCHEDULER_XSUB") - port map(mm_rst, mm_clk, reg_bsn_sync_scheduler_xsub_copi, reg_bsn_sync_scheduler_xsub_cipo); - - u_mm_file_ram_st_xsq : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_XSQ") - port map(mm_rst, mm_clk, ram_st_xsq_copi, ram_st_xsq_cipo); - - u_mm_file_reg_nw_10GbE_mac : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_MAC") - port map(mm_rst, mm_clk, reg_nw_10GbE_mac_copi, reg_nw_10GbE_mac_cipo ); - - u_mm_file_reg_nw_10GbE_eth10g : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_ETH10G") - port map(mm_rst, mm_clk, reg_nw_10GbE_eth10g_copi, reg_nw_10GbE_eth10g_cipo ); - - u_mm_file_reg_bsn_align_v2_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_BF") - port map(mm_rst, mm_clk, reg_bsn_align_v2_bf_copi, reg_bsn_align_v2_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_rx_align_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_bf_copi, reg_bsn_monitor_v2_rx_align_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_aligned_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_bf_copi, reg_bsn_monitor_v2_aligned_bf_cipo ); - - u_mm_file_reg_ring_lane_info_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_BF") - port map(mm_rst, mm_clk, reg_ring_lane_info_bf_copi, reg_ring_lane_info_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_rx_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_bf_copi, reg_bsn_monitor_v2_ring_rx_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_tx_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_bf_copi, reg_bsn_monitor_v2_ring_tx_bf_cipo ); - - u_mm_file_reg_dp_block_validate_err_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_BF") - port map(mm_rst, mm_clk, reg_dp_block_validate_err_bf_copi, reg_dp_block_validate_err_bf_cipo ); - - u_mm_file_reg_dp_block_validate_bsn_at_sync_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_BF") - port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_bf_copi, reg_dp_block_validate_bsn_at_sync_bf_cipo ); - - u_mm_file_reg_bsn_align_v2_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_XSUB") - port map(mm_rst, mm_clk, reg_bsn_align_v2_xsub_copi, reg_bsn_align_v2_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_rx_align_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_xsub_copi, reg_bsn_monitor_v2_rx_align_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_aligned_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_xsub_copi, reg_bsn_monitor_v2_aligned_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_sst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_SST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_sst_offload_copi, reg_bsn_monitor_v2_sst_offload_cipo ); - - u_mm_file_reg_bsn_monitor_v2_bst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_bst_offload_copi, reg_bsn_monitor_v2_bst_offload_cipo ); - - u_mm_file_reg_bsn_monitor_v2_beamlet_output : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BEAMLET_OUTPUT") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_beamlet_output_copi, reg_bsn_monitor_v2_beamlet_output_cipo ); - - u_mm_file_reg_bsn_monitor_v2_xst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_XST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_xst_offload_copi, reg_bsn_monitor_v2_xst_offload_cipo ); - - u_mm_file_reg_ring_lane_info_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_XST") - port map(mm_rst, mm_clk, reg_ring_lane_info_xst_copi, reg_ring_lane_info_xst_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_rx_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_XST") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_xst_copi, reg_bsn_monitor_v2_ring_rx_xst_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_tx_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_XST") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_xst_copi, reg_bsn_monitor_v2_ring_tx_xst_cipo ); - - u_mm_file_reg_dp_block_validate_err_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_XST") - port map(mm_rst, mm_clk, reg_dp_block_validate_err_xst_copi, reg_dp_block_validate_err_xst_cipo ); - - u_mm_file_reg_dp_block_validate_bsn_at_sync_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_XST") - port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_xst_copi, reg_dp_block_validate_bsn_at_sync_xst_cipo ); - - u_mm_file_reg_tr_10GbE_mac : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_MAC") - port map(mm_rst, mm_clk, reg_tr_10GbE_mac_copi, reg_tr_10GbE_mac_cipo ); - - u_mm_file_reg_tr_10GbE_eth10g : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_ETH10G") - port map(mm_rst, mm_clk, reg_tr_10GbE_eth10g_copi, reg_tr_10GbE_eth10g_cipo ); - - u_mm_file_ram_scrap : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SCRAP") - port map(mm_rst, mm_clk, ram_scrap_copi, ram_scrap_cipo ); + u_mm_file_reg_unb_system_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") + port map(mm_rst, mm_clk, reg_unb_system_info_copi, reg_unb_system_info_cipo); + + u_mm_file_rom_unb_system_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") + port map(mm_rst, mm_clk, rom_unb_system_info_copi, rom_unb_system_info_cipo); + + u_mm_file_reg_wdi : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") + port map(mm_rst, mm_clk, reg_wdi_copi, reg_wdi_cipo); + + u_mm_file_reg_unb_sens : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_SENS") + port map(mm_rst, mm_clk, reg_unb_sens_copi, reg_unb_sens_cipo); + + u_mm_file_reg_unb_pmbus : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_PMBUS") + port map(mm_rst, mm_clk, reg_unb_pmbus_copi, reg_unb_pmbus_cipo); + + u_mm_file_reg_fpga_temp_sens : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_TEMP_SENS") + port map(mm_rst, mm_clk, reg_fpga_temp_sens_copi, reg_fpga_temp_sens_cipo); + + u_mm_file_reg_fpga_voltage_sens : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_VOLTAGE_SENS") + port map(mm_rst, mm_clk, reg_fpga_voltage_sens_copi, reg_fpga_voltage_sens_cipo); + + u_mm_file_reg_ppsh : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_PPS") + port map(mm_rst, mm_clk, reg_ppsh_copi, reg_ppsh_cipo); + + -- Note: the eth1g RAM and TSE buses are only required by unb_osy on the NIOS as they provide the + -- ethernet <-> MM gateway. + u_mm_file_reg_eth : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") + port map(mm_rst, mm_clk, eth1g_reg_copi, eth1g_reg_cipo); + + -- Must use exact g_mm_rd_latency = 1 instead of default 2, because JESD204B IP forces rddata = 0 after it has + -- been read + u_mm_file_jesd204b : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "JESD204B", '1', 1) + port map(mm_rst, mm_clk, jesd204b_copi, jesd204b_cipo); + + u_mm_file_pio_jesd_ctrl : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_JESD_CTRL") + port map(mm_rst, mm_clk, jesd_ctrl_copi, jesd_ctrl_cipo); + + u_mm_file_reg_dp_shiftram : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SHIFTRAM") + port map(mm_rst, mm_clk, reg_dp_shiftram_copi, reg_dp_shiftram_cipo); + + u_mm_file_reg_bsn_source_v2 : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SOURCE_V2") + port map(mm_rst, mm_clk, reg_bsn_source_v2_copi, reg_bsn_source_v2_cipo); + + u_mm_file_reg_bsn_scheduler : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SCHEDULER") + port map(mm_rst, mm_clk, reg_bsn_scheduler_copi, reg_bsn_scheduler_cipo); + + u_mm_file_reg_bsn_monitor_input : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_INPUT") + port map(mm_rst, mm_clk, reg_bsn_monitor_input_copi, reg_bsn_monitor_input_cipo); + + u_mm_file_reg_wg : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WG") + port map(mm_rst, mm_clk, reg_wg_copi, reg_wg_cipo); + u_mm_file_ram_wg : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_WG") + port map(mm_rst, mm_clk, ram_wg_copi, ram_wg_cipo); + + u_mm_file_ram_diag_data_buf_bsn : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DIAG_DATA_BUFFER_BSN") + port map(mm_rst, mm_clk, ram_diag_data_buf_bsn_copi, ram_diag_data_buf_bsn_cipo); + u_mm_file_reg_diag_data_buf_bsn : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAG_DATA_BUFFER_BSN") + port map(mm_rst, mm_clk, reg_diag_data_buf_bsn_copi, reg_diag_data_buf_bsn_cipo); + + u_mm_file_ram_st_histogram : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_HISTOGRAM") + port map(mm_rst, mm_clk, ram_st_histogram_copi, ram_st_histogram_cipo); + + u_mm_file_reg_aduh_monitor : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_ADUH_MONITOR") + port map(mm_rst, mm_clk, reg_aduh_monitor_copi, reg_aduh_monitor_cipo); + + u_mm_file_ram_st_sst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_SST") + port map(mm_rst, mm_clk, ram_st_sst_copi, ram_st_sst_cipo); + + u_mm_file_ram_fil_coefs : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_FIL_COEFS") + port map(mm_rst, mm_clk, ram_fil_coefs_copi, ram_fil_coefs_cipo); + + u_mm_file_reg_si : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SI") + port map(mm_rst, mm_clk, reg_si_copi, reg_si_cipo); + + u_mm_file_ram_equalizer_gains : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS") + port map(mm_rst, mm_clk, ram_equalizer_gains_copi, ram_equalizer_gains_cipo); + u_mm_file_ram_equalizer_gains_cross : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS_CROSS") + port map(mm_rst, mm_clk, ram_equalizer_gains_cross_copi, ram_equalizer_gains_cross_cipo); + + u_mm_file_reg_dp_selector : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SELECTOR") + port map(mm_rst, mm_clk, reg_dp_selector_copi, reg_dp_selector_cipo); + + u_mm_file_reg_sdp_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SDP_INFO") + port map(mm_rst, mm_clk, reg_sdp_info_copi, reg_sdp_info_cipo); + + u_mm_file_reg_ring_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_INFO") + port map(mm_rst, mm_clk, reg_ring_info_copi, reg_ring_info_cipo); + + u_mm_file_ram_ss_ss_wide : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SS_SS_WIDE") + port map(mm_rst, mm_clk, ram_ss_ss_wide_copi, ram_ss_ss_wide_cipo); + + u_mm_file_ram_bf_weights : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_BF_WEIGHTS") + port map(mm_rst, mm_clk, ram_bf_weights_copi, ram_bf_weights_cipo); + + u_mm_file_reg_bf_scale : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BF_SCALE") + port map(mm_rst, mm_clk, reg_bf_scale_copi, reg_bf_scale_cipo); + + u_mm_file_reg_hdr_dat : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_HDR_DAT") + port map(mm_rst, mm_clk, reg_hdr_dat_copi, reg_hdr_dat_cipo); + + u_mm_file_reg_bdo_destinations : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BDO_DESTINATIONS") + port map(mm_rst, mm_clk, reg_bdo_destinations_copi, reg_bdo_destinations_cipo); + + u_mm_file_reg_dp_xonoff : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_XONOFF") + port map(mm_rst, mm_clk, reg_dp_xonoff_copi, reg_dp_xonoff_cipo); + + u_mm_file_ram_st_bst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_BST") + port map(mm_rst, mm_clk, ram_st_bst_copi, ram_st_bst_cipo); + + u_mm_file_reg_stat_enable_sst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_SST") + port map(mm_rst, mm_clk, reg_stat_enable_sst_copi, reg_stat_enable_sst_cipo); + + 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_copi, reg_stat_hdr_dat_sst_cipo); + + u_mm_file_reg_stat_enable_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_XST") + port map(mm_rst, mm_clk, reg_stat_enable_xst_copi, reg_stat_enable_xst_cipo); + + u_mm_file_reg_stat_hdr_info_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_XST") + port map(mm_rst, mm_clk, reg_stat_hdr_dat_xst_copi, reg_stat_hdr_dat_xst_cipo); + + 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_copi, reg_stat_enable_bst_cipo); + + 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_copi, reg_stat_hdr_dat_bst_cipo); + + u_mm_file_reg_crosslets_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_CROSSLETS_INFO") + port map(mm_rst, mm_clk, reg_crosslets_info_copi, reg_crosslets_info_cipo); + + u_mm_file_reg_nof_crosslets : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NOF_CROSSLETS") + port map(mm_rst, mm_clk, reg_nof_crosslets_copi, reg_nof_crosslets_cipo); + + u_mm_file_reg_bsn_sync_scheduler_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SYNC_SCHEDULER_XSUB") + port map(mm_rst, mm_clk, reg_bsn_sync_scheduler_xsub_copi, reg_bsn_sync_scheduler_xsub_cipo); + + u_mm_file_ram_st_xsq : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_XSQ") + port map(mm_rst, mm_clk, ram_st_xsq_copi, ram_st_xsq_cipo); + + u_mm_file_reg_nw_10GbE_mac : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_MAC") + port map(mm_rst, mm_clk, reg_nw_10GbE_mac_copi, reg_nw_10GbE_mac_cipo); + + u_mm_file_reg_nw_10GbE_eth10g : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_ETH10G") + port map(mm_rst, mm_clk, reg_nw_10GbE_eth10g_copi, reg_nw_10GbE_eth10g_cipo); + + u_mm_file_reg_bsn_align_v2_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_BF") + port map(mm_rst, mm_clk, reg_bsn_align_v2_bf_copi, reg_bsn_align_v2_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_rx_align_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_bf_copi, reg_bsn_monitor_v2_rx_align_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_aligned_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_bf_copi, reg_bsn_monitor_v2_aligned_bf_cipo); + + u_mm_file_reg_ring_lane_info_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_BF") + port map(mm_rst, mm_clk, reg_ring_lane_info_bf_copi, reg_ring_lane_info_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_rx_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_bf_copi, reg_bsn_monitor_v2_ring_rx_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_tx_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_bf_copi, reg_bsn_monitor_v2_ring_tx_bf_cipo); + + u_mm_file_reg_dp_block_validate_err_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_BF") + port map(mm_rst, mm_clk, reg_dp_block_validate_err_bf_copi, reg_dp_block_validate_err_bf_cipo); + + u_mm_file_reg_dp_block_validate_bsn_at_sync_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_BF") + port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_bf_copi, reg_dp_block_validate_bsn_at_sync_bf_cipo); + + u_mm_file_reg_bsn_align_v2_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_XSUB") + port map(mm_rst, mm_clk, reg_bsn_align_v2_xsub_copi, reg_bsn_align_v2_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_rx_align_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_xsub_copi, reg_bsn_monitor_v2_rx_align_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_aligned_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_xsub_copi, reg_bsn_monitor_v2_aligned_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_sst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_SST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_sst_offload_copi, reg_bsn_monitor_v2_sst_offload_cipo); + + u_mm_file_reg_bsn_monitor_v2_bst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_bst_offload_copi, reg_bsn_monitor_v2_bst_offload_cipo); + + u_mm_file_reg_bsn_monitor_v2_beamlet_output : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_BSN_MONITOR_V2_BEAMLET_OUTPUT") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_beamlet_output_copi, reg_bsn_monitor_v2_beamlet_output_cipo); + + u_mm_file_reg_bsn_monitor_v2_xst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_XST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_xst_offload_copi, reg_bsn_monitor_v2_xst_offload_cipo); + + u_mm_file_reg_ring_lane_info_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_XST") + port map(mm_rst, mm_clk, reg_ring_lane_info_xst_copi, reg_ring_lane_info_xst_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_rx_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_XST") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_xst_copi, reg_bsn_monitor_v2_ring_rx_xst_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_tx_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_XST") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_xst_copi, reg_bsn_monitor_v2_ring_tx_xst_cipo); + + u_mm_file_reg_dp_block_validate_err_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_XST") + port map(mm_rst, mm_clk, reg_dp_block_validate_err_xst_copi, reg_dp_block_validate_err_xst_cipo); + + u_mm_file_reg_dp_block_validate_bsn_at_sync_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_XST") + port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_xst_copi, reg_dp_block_validate_bsn_at_sync_xst_cipo); + + u_mm_file_reg_tr_10GbE_mac : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_MAC") + port map(mm_rst, mm_clk, reg_tr_10GbE_mac_copi, reg_tr_10GbE_mac_cipo); + + u_mm_file_reg_tr_10GbE_eth10g : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_ETH10G") + port map(mm_rst, mm_clk, reg_tr_10GbE_eth10g_copi, reg_tr_10GbE_eth10g_cipo); + + u_mm_file_ram_scrap : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SCRAP") + port map(mm_rst, mm_clk, ram_scrap_copi, ram_scrap_cipo); ---------------------------------------------------------------------------- -- Procedure that polls a sim control file that can be used to e.g. get -- the simulation time in ns @@ -574,214 +655,221 @@ begin u_qsys : qsys_lofar2_unb2b_sdp_station port map ( - clk_clk => mm_clk, - reset_reset_n => i_reset_n, + clk_clk => mm_clk, + reset_reset_n => i_reset_n, -- the_pio_wdi: toggled by NIOS II application unb_osy. Connects to WDI via ctrl_unb2b_board. - pio_wdi_external_connection_export => pout_wdi, - - avs_eth_0_reset_export => eth1g_mm_rst, - avs_eth_0_clk_export => OPEN, - avs_eth_0_tse_address_export => eth1g_tse_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_tse_adr_w - 1 downto 0), - avs_eth_0_tse_write_export => eth1g_tse_copi.wr, - avs_eth_0_tse_read_export => eth1g_tse_copi.rd, - avs_eth_0_tse_writedata_export => eth1g_tse_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_tse_readdata_export => eth1g_tse_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_tse_waitrequest_export => eth1g_tse_cipo.waitrequest, - avs_eth_0_reg_address_export => eth1g_reg_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_eth_adr_w - 1 downto 0), - avs_eth_0_reg_write_export => eth1g_reg_copi.wr, - avs_eth_0_reg_read_export => eth1g_reg_copi.rd, - avs_eth_0_reg_writedata_export => eth1g_reg_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_reg_readdata_export => eth1g_reg_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_ram_address_export => eth1g_ram_copi.address(c_unb2b_board_peripherals_mm_reg_default.ram_eth_adr_w - 1 downto 0), - avs_eth_0_ram_write_export => eth1g_ram_copi.wr, - avs_eth_0_ram_read_export => eth1g_ram_copi.rd, - avs_eth_0_ram_writedata_export => eth1g_ram_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_ram_readdata_export => eth1g_ram_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_irq_export => eth1g_reg_interrupt, - - reg_unb_sens_reset_export => OPEN, - reg_unb_sens_clk_export => OPEN, - reg_unb_sens_address_export => reg_unb_sens_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_unb_sens_adr_w - 1 downto 0), - reg_unb_sens_write_export => reg_unb_sens_copi.wr, - reg_unb_sens_writedata_export => reg_unb_sens_copi.wrdata(c_word_w - 1 downto 0), - reg_unb_sens_read_export => reg_unb_sens_copi.rd, - reg_unb_sens_readdata_export => reg_unb_sens_cipo.rddata(c_word_w - 1 downto 0), - - reg_unb_pmbus_reset_export => OPEN, - reg_unb_pmbus_clk_export => OPEN, - reg_unb_pmbus_address_export => reg_unb_pmbus_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_unb_pmbus_adr_w - 1 downto 0), - reg_unb_pmbus_write_export => reg_unb_pmbus_copi.wr, - reg_unb_pmbus_writedata_export => reg_unb_pmbus_copi.wrdata(c_word_w - 1 downto 0), - reg_unb_pmbus_read_export => reg_unb_pmbus_copi.rd, - reg_unb_pmbus_readdata_export => reg_unb_pmbus_cipo.rddata(c_word_w - 1 downto 0), - - reg_fpga_temp_sens_reset_export => OPEN, - reg_fpga_temp_sens_clk_export => OPEN, - reg_fpga_temp_sens_address_export => reg_fpga_temp_sens_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_fpga_temp_sens_adr_w - 1 downto 0), - reg_fpga_temp_sens_write_export => reg_fpga_temp_sens_copi.wr, - reg_fpga_temp_sens_writedata_export => reg_fpga_temp_sens_copi.wrdata(c_word_w - 1 downto 0), - reg_fpga_temp_sens_read_export => reg_fpga_temp_sens_copi.rd, - reg_fpga_temp_sens_readdata_export => reg_fpga_temp_sens_cipo.rddata(c_word_w - 1 downto 0), - - reg_fpga_voltage_sens_reset_export => OPEN, - reg_fpga_voltage_sens_clk_export => OPEN, - reg_fpga_voltage_sens_address_export => reg_fpga_voltage_sens_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_fpga_voltage_sens_adr_w - 1 downto 0), - reg_fpga_voltage_sens_write_export => reg_fpga_voltage_sens_copi.wr, - reg_fpga_voltage_sens_writedata_export => reg_fpga_voltage_sens_copi.wrdata(c_word_w - 1 downto 0), - reg_fpga_voltage_sens_read_export => reg_fpga_voltage_sens_copi.rd, - reg_fpga_voltage_sens_readdata_export => reg_fpga_voltage_sens_cipo.rddata(c_word_w - 1 downto 0), - - rom_system_info_reset_export => OPEN, - rom_system_info_clk_export => OPEN, + pio_wdi_external_connection_export => pout_wdi, + + avs_eth_0_reset_export => eth1g_mm_rst, + avs_eth_0_clk_export => OPEN, + avs_eth_0_tse_address_export => eth1g_tse_copi.address(c_unb2_mm_reg_default.reg_tse_adr_w - 1 downto 0), + avs_eth_0_tse_write_export => eth1g_tse_copi.wr, + avs_eth_0_tse_read_export => eth1g_tse_copi.rd, + avs_eth_0_tse_writedata_export => eth1g_tse_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_tse_readdata_export => eth1g_tse_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_tse_waitrequest_export => eth1g_tse_cipo.waitrequest, + avs_eth_0_reg_address_export => eth1g_reg_copi.address(c_unb2_mm_reg_default.reg_eth_adr_w - 1 downto 0), + avs_eth_0_reg_write_export => eth1g_reg_copi.wr, + avs_eth_0_reg_read_export => eth1g_reg_copi.rd, + avs_eth_0_reg_writedata_export => eth1g_reg_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_reg_readdata_export => eth1g_reg_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_ram_address_export => eth1g_ram_copi.address(c_unb2_mm_reg_default.ram_eth_adr_w - 1 downto 0), + avs_eth_0_ram_write_export => eth1g_ram_copi.wr, + avs_eth_0_ram_read_export => eth1g_ram_copi.rd, + avs_eth_0_ram_writedata_export => eth1g_ram_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_ram_readdata_export => eth1g_ram_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_irq_export => eth1g_reg_interrupt, + + reg_unb_sens_reset_export => OPEN, + reg_unb_sens_clk_export => OPEN, + reg_unb_sens_address_export => reg_unb_sens_copi.address(c_unb2_mm_reg_default.reg_unb_sens_adr_w - 1 downto 0), + reg_unb_sens_write_export => reg_unb_sens_copi.wr, + reg_unb_sens_writedata_export => reg_unb_sens_copi.wrdata(c_word_w - 1 downto 0), + reg_unb_sens_read_export => reg_unb_sens_copi.rd, + reg_unb_sens_readdata_export => reg_unb_sens_cipo.rddata(c_word_w - 1 downto 0), + + reg_unb_pmbus_reset_export => OPEN, + reg_unb_pmbus_clk_export => OPEN, + reg_unb_pmbus_address_export => reg_unb_pmbus_copi.address( + c_unb2_mm_reg_default.reg_unb_pmbus_adr_w - 1 downto 0), + reg_unb_pmbus_write_export => reg_unb_pmbus_copi.wr, + reg_unb_pmbus_writedata_export => reg_unb_pmbus_copi.wrdata(c_word_w - 1 downto 0), + reg_unb_pmbus_read_export => reg_unb_pmbus_copi.rd, + reg_unb_pmbus_readdata_export => reg_unb_pmbus_cipo.rddata(c_word_w - 1 downto 0), + + reg_fpga_temp_sens_reset_export => OPEN, + reg_fpga_temp_sens_clk_export => OPEN, + reg_fpga_temp_sens_address_export => reg_fpga_temp_sens_copi.address( + c_unb2_mm_reg_default.reg_fpga_temp_sens_adr_w - 1 downto 0), + reg_fpga_temp_sens_write_export => reg_fpga_temp_sens_copi.wr, + reg_fpga_temp_sens_writedata_export => reg_fpga_temp_sens_copi.wrdata(c_word_w - 1 downto 0), + reg_fpga_temp_sens_read_export => reg_fpga_temp_sens_copi.rd, + reg_fpga_temp_sens_readdata_export => reg_fpga_temp_sens_cipo.rddata(c_word_w - 1 downto 0), + + reg_fpga_voltage_sens_reset_export => OPEN, + reg_fpga_voltage_sens_clk_export => OPEN, + reg_fpga_voltage_sens_address_export => reg_fpga_voltage_sens_copi.address( + c_unb2_mm_reg_default.reg_fpga_voltage_sens_adr_w - 1 downto 0), + reg_fpga_voltage_sens_write_export => reg_fpga_voltage_sens_copi.wr, + reg_fpga_voltage_sens_writedata_export => reg_fpga_voltage_sens_copi.wrdata(c_word_w - 1 downto 0), + reg_fpga_voltage_sens_read_export => reg_fpga_voltage_sens_copi.rd, + reg_fpga_voltage_sens_readdata_export => reg_fpga_voltage_sens_cipo.rddata(c_word_w - 1 downto 0), + + rom_system_info_reset_export => OPEN, + rom_system_info_clk_export => OPEN, -- ToDo: This has changed in the peripherals package --- rom_system_info_address_export => rom_unb_system_info_copi.address(9 DOWNTO 0), - rom_system_info_address_export => rom_unb_system_info_copi.address(c_unb2b_board_peripherals_mm_reg_default.rom_unb_system_info_adr_w - 1 downto 0), - rom_system_info_write_export => rom_unb_system_info_copi.wr, - rom_system_info_writedata_export => rom_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), - rom_system_info_read_export => rom_unb_system_info_copi.rd, - rom_system_info_readdata_export => rom_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), - - pio_system_info_reset_export => OPEN, - pio_system_info_clk_export => OPEN, - pio_system_info_address_export => reg_unb_system_info_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_unb_system_info_adr_w - 1 downto 0), - pio_system_info_write_export => reg_unb_system_info_copi.wr, - pio_system_info_writedata_export => reg_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), - pio_system_info_read_export => reg_unb_system_info_copi.rd, - pio_system_info_readdata_export => reg_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), - - pio_pps_reset_export => OPEN, - pio_pps_clk_export => OPEN, - pio_pps_address_export => reg_ppsh_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_ppsh_adr_w - 1 downto 0), - pio_pps_write_export => reg_ppsh_copi.wr, - pio_pps_writedata_export => reg_ppsh_copi.wrdata(c_word_w - 1 downto 0), - pio_pps_read_export => reg_ppsh_copi.rd, - pio_pps_readdata_export => reg_ppsh_cipo.rddata(c_word_w - 1 downto 0), - - reg_wdi_reset_export => OPEN, - reg_wdi_clk_export => OPEN, - reg_wdi_address_export => reg_wdi_copi.address(0 downto 0), - reg_wdi_write_export => reg_wdi_copi.wr, - reg_wdi_writedata_export => reg_wdi_copi.wrdata(c_word_w - 1 downto 0), - reg_wdi_read_export => reg_wdi_copi.rd, - reg_wdi_readdata_export => reg_wdi_cipo.rddata(c_word_w - 1 downto 0), - - reg_remu_reset_export => OPEN, - reg_remu_clk_export => OPEN, - reg_remu_address_export => reg_remu_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_remu_adr_w - 1 downto 0), - reg_remu_write_export => reg_remu_copi.wr, - reg_remu_writedata_export => reg_remu_copi.wrdata(c_word_w - 1 downto 0), - reg_remu_read_export => reg_remu_copi.rd, - reg_remu_readdata_export => reg_remu_cipo.rddata(c_word_w - 1 downto 0), - - jesd204b_reset_export => OPEN, - jesd204b_clk_export => OPEN, - jesd204b_address_export => jesd204b_copi.address(c_sdp_jesd204b_addr_w - 1 downto 0), - jesd204b_write_export => jesd204b_copi.wr, - jesd204b_writedata_export => jesd204b_copi.wrdata(c_word_w - 1 downto 0), - jesd204b_read_export => jesd204b_copi.rd, - jesd204b_readdata_export => jesd204b_cipo.rddata(c_word_w - 1 downto 0), - - pio_jesd_ctrl_reset_export => OPEN, - pio_jesd_ctrl_clk_export => OPEN, - pio_jesd_ctrl_address_export => jesd_ctrl_copi.address(c_sdp_jesd_ctrl_addr_w - 1 downto 0), - pio_jesd_ctrl_write_export => jesd_ctrl_copi.wr, - pio_jesd_ctrl_writedata_export => jesd_ctrl_copi.wrdata(c_word_w - 1 downto 0), - pio_jesd_ctrl_read_export => jesd_ctrl_copi.rd, - pio_jesd_ctrl_readdata_export => jesd_ctrl_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_input_address_export => reg_bsn_monitor_input_copi.address(c_sdp_reg_bsn_monitor_input_addr_w - 1 downto 0), - reg_bsn_monitor_input_clk_export => OPEN, - reg_bsn_monitor_input_read_export => reg_bsn_monitor_input_copi.rd, - reg_bsn_monitor_input_readdata_export => reg_bsn_monitor_input_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_monitor_input_reset_export => OPEN, - reg_bsn_monitor_input_write_export => reg_bsn_monitor_input_copi.wr, - reg_bsn_monitor_input_writedata_export => reg_bsn_monitor_input_copi.wrdata(c_word_w - 1 downto 0), +-- rom_system_info_address_export => rom_unb_system_info_copi.address(9 DOWNTO 0), + rom_system_info_address_export => rom_unb_system_info_copi.address( + c_unb2_mm_reg_default.rom_unb_system_info_adr_w - 1 downto 0), + rom_system_info_write_export => rom_unb_system_info_copi.wr, + rom_system_info_writedata_export => rom_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), + rom_system_info_read_export => rom_unb_system_info_copi.rd, + rom_system_info_readdata_export => rom_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), + + pio_system_info_reset_export => OPEN, + pio_system_info_clk_export => OPEN, + pio_system_info_address_export => reg_unb_system_info_copi.address( + c_unb2_mm_reg_default.reg_unb_system_info_adr_w - 1 downto 0), + pio_system_info_write_export => reg_unb_system_info_copi.wr, + pio_system_info_writedata_export => reg_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), + pio_system_info_read_export => reg_unb_system_info_copi.rd, + pio_system_info_readdata_export => reg_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), + + pio_pps_reset_export => OPEN, + pio_pps_clk_export => OPEN, + pio_pps_address_export => reg_ppsh_copi.address(c_unb2_mm_reg_default.reg_ppsh_adr_w - 1 downto 0), + pio_pps_write_export => reg_ppsh_copi.wr, + pio_pps_writedata_export => reg_ppsh_copi.wrdata(c_word_w - 1 downto 0), + pio_pps_read_export => reg_ppsh_copi.rd, + pio_pps_readdata_export => reg_ppsh_cipo.rddata(c_word_w - 1 downto 0), + + reg_wdi_reset_export => OPEN, + reg_wdi_clk_export => OPEN, + reg_wdi_address_export => reg_wdi_copi.address(0 downto 0), + reg_wdi_write_export => reg_wdi_copi.wr, + reg_wdi_writedata_export => reg_wdi_copi.wrdata(c_word_w - 1 downto 0), + reg_wdi_read_export => reg_wdi_copi.rd, + reg_wdi_readdata_export => reg_wdi_cipo.rddata(c_word_w - 1 downto 0), + + reg_remu_reset_export => OPEN, + reg_remu_clk_export => OPEN, + reg_remu_address_export => reg_remu_copi.address(c_unb2_mm_reg_default.reg_remu_adr_w - 1 downto 0), + reg_remu_write_export => reg_remu_copi.wr, + reg_remu_writedata_export => reg_remu_copi.wrdata(c_word_w - 1 downto 0), + reg_remu_read_export => reg_remu_copi.rd, + reg_remu_readdata_export => reg_remu_cipo.rddata(c_word_w - 1 downto 0), + + jesd204b_reset_export => OPEN, + jesd204b_clk_export => OPEN, + jesd204b_address_export => jesd204b_copi.address(c_sdp_jesd204b_addr_w - 1 downto 0), + jesd204b_write_export => jesd204b_copi.wr, + jesd204b_writedata_export => jesd204b_copi.wrdata(c_word_w - 1 downto 0), + jesd204b_read_export => jesd204b_copi.rd, + jesd204b_readdata_export => jesd204b_cipo.rddata(c_word_w - 1 downto 0), + + pio_jesd_ctrl_reset_export => OPEN, + pio_jesd_ctrl_clk_export => OPEN, + pio_jesd_ctrl_address_export => jesd_ctrl_copi.address(c_sdp_jesd_ctrl_addr_w - 1 downto 0), + pio_jesd_ctrl_write_export => jesd_ctrl_copi.wr, + pio_jesd_ctrl_writedata_export => jesd_ctrl_copi.wrdata(c_word_w - 1 downto 0), + pio_jesd_ctrl_read_export => jesd_ctrl_copi.rd, + pio_jesd_ctrl_readdata_export => jesd_ctrl_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_monitor_input_address_export => reg_bsn_monitor_input_copi.address( + c_sdp_reg_bsn_monitor_input_addr_w - 1 downto 0), + reg_bsn_monitor_input_clk_export => OPEN, + reg_bsn_monitor_input_read_export => reg_bsn_monitor_input_copi.rd, + reg_bsn_monitor_input_readdata_export => reg_bsn_monitor_input_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_input_reset_export => OPEN, + reg_bsn_monitor_input_write_export => reg_bsn_monitor_input_copi.wr, + reg_bsn_monitor_input_writedata_export => reg_bsn_monitor_input_copi.wrdata(c_word_w - 1 downto 0), -- waveform generators (multiplexed) - reg_wg_clk_export => OPEN, - reg_wg_reset_export => OPEN, - reg_wg_address_export => reg_wg_copi.address(c_sdp_reg_wg_addr_w - 1 downto 0), - reg_wg_read_export => reg_wg_copi.rd, - reg_wg_readdata_export => reg_wg_cipo.rddata(c_word_w - 1 downto 0), - reg_wg_write_export => reg_wg_copi.wr, - reg_wg_writedata_export => reg_wg_copi.wrdata(c_word_w - 1 downto 0), - - ram_wg_clk_export => OPEN, - ram_wg_reset_export => OPEN, - ram_wg_address_export => ram_wg_copi.address(c_sdp_ram_wg_addr_w - 1 downto 0), - ram_wg_read_export => ram_wg_copi.rd, - ram_wg_readdata_export => ram_wg_cipo.rddata(c_word_w - 1 downto 0), - ram_wg_write_export => ram_wg_copi.wr, - ram_wg_writedata_export => ram_wg_copi.wrdata(c_word_w - 1 downto 0), - - reg_dp_shiftram_clk_export => OPEN, - reg_dp_shiftram_reset_export => OPEN, - reg_dp_shiftram_address_export => reg_dp_shiftram_copi.address(c_sdp_reg_dp_shiftram_addr_w - 1 downto 0), - reg_dp_shiftram_read_export => reg_dp_shiftram_copi.rd, - reg_dp_shiftram_readdata_export => reg_dp_shiftram_cipo.rddata(c_word_w - 1 downto 0), - reg_dp_shiftram_write_export => reg_dp_shiftram_copi.wr, - reg_dp_shiftram_writedata_export => reg_dp_shiftram_copi.wrdata(c_word_w - 1 downto 0), - - reg_bsn_source_v2_clk_export => OPEN, - reg_bsn_source_v2_reset_export => OPEN, - reg_bsn_source_v2_address_export => reg_bsn_source_v2_copi.address(c_sdp_reg_bsn_source_v2_addr_w - 1 downto 0), - reg_bsn_source_v2_read_export => reg_bsn_source_v2_copi.rd, - reg_bsn_source_v2_readdata_export => reg_bsn_source_v2_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_source_v2_write_export => reg_bsn_source_v2_copi.wr, - reg_bsn_source_v2_writedata_export => reg_bsn_source_v2_copi.wrdata(c_word_w - 1 downto 0), - - reg_bsn_scheduler_clk_export => OPEN, - reg_bsn_scheduler_reset_export => OPEN, - reg_bsn_scheduler_address_export => reg_bsn_scheduler_copi.address(c_sdp_reg_bsn_scheduler_addr_w - 1 downto 0), - reg_bsn_scheduler_read_export => reg_bsn_scheduler_copi.rd, - reg_bsn_scheduler_readdata_export => reg_bsn_scheduler_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_scheduler_write_export => reg_bsn_scheduler_copi.wr, - reg_bsn_scheduler_writedata_export => reg_bsn_scheduler_copi.wrdata(c_word_w - 1 downto 0), - - reg_epcs_reset_export => OPEN, - reg_epcs_clk_export => OPEN, - reg_epcs_address_export => reg_epcs_copi.address(c_unb2b_board_peripherals_mm_reg_default.reg_epcs_adr_w - 1 downto 0), - reg_epcs_write_export => reg_epcs_copi.wr, - reg_epcs_writedata_export => reg_epcs_copi.wrdata(c_word_w - 1 downto 0), - reg_epcs_read_export => reg_epcs_copi.rd, - reg_epcs_readdata_export => reg_epcs_cipo.rddata(c_word_w - 1 downto 0), - - reg_dpmm_ctrl_reset_export => OPEN, - reg_dpmm_ctrl_clk_export => OPEN, - reg_dpmm_ctrl_address_export => reg_dpmm_ctrl_copi.address(0 downto 0), - reg_dpmm_ctrl_write_export => reg_dpmm_ctrl_copi.wr, - reg_dpmm_ctrl_writedata_export => reg_dpmm_ctrl_copi.wrdata(c_word_w - 1 downto 0), - reg_dpmm_ctrl_read_export => reg_dpmm_ctrl_copi.rd, - reg_dpmm_ctrl_readdata_export => reg_dpmm_ctrl_cipo.rddata(c_word_w - 1 downto 0), - - reg_mmdp_data_reset_export => OPEN, - reg_mmdp_data_clk_export => OPEN, - reg_mmdp_data_address_export => reg_mmdp_data_copi.address(0 downto 0), - reg_mmdp_data_write_export => reg_mmdp_data_copi.wr, - reg_mmdp_data_writedata_export => reg_mmdp_data_copi.wrdata(c_word_w - 1 downto 0), - reg_mmdp_data_read_export => reg_mmdp_data_copi.rd, - reg_mmdp_data_readdata_export => reg_mmdp_data_cipo.rddata(c_word_w - 1 downto 0), - - reg_dpmm_data_reset_export => OPEN, - reg_dpmm_data_clk_export => OPEN, - reg_dpmm_data_address_export => reg_dpmm_data_copi.address(0 downto 0), - reg_dpmm_data_read_export => reg_dpmm_data_copi.rd, - reg_dpmm_data_readdata_export => reg_dpmm_data_cipo.rddata(c_word_w - 1 downto 0), - reg_dpmm_data_write_export => reg_dpmm_data_copi.wr, - reg_dpmm_data_writedata_export => reg_dpmm_data_copi.wrdata(c_word_w - 1 downto 0), - - reg_mmdp_ctrl_reset_export => OPEN, - reg_mmdp_ctrl_clk_export => OPEN, - reg_mmdp_ctrl_address_export => reg_mmdp_ctrl_copi.address(0 downto 0), - reg_mmdp_ctrl_read_export => reg_mmdp_ctrl_copi.rd, - reg_mmdp_ctrl_readdata_export => reg_mmdp_ctrl_cipo.rddata(c_word_w - 1 downto 0), - reg_mmdp_ctrl_write_export => reg_mmdp_ctrl_copi.wr, - reg_mmdp_ctrl_writedata_export => reg_mmdp_ctrl_copi.wrdata(c_word_w - 1 downto 0), + reg_wg_clk_export => OPEN, + reg_wg_reset_export => OPEN, + reg_wg_address_export => reg_wg_copi.address(c_sdp_reg_wg_addr_w - 1 downto 0), + reg_wg_read_export => reg_wg_copi.rd, + reg_wg_readdata_export => reg_wg_cipo.rddata(c_word_w - 1 downto 0), + reg_wg_write_export => reg_wg_copi.wr, + reg_wg_writedata_export => reg_wg_copi.wrdata(c_word_w - 1 downto 0), + + ram_wg_clk_export => OPEN, + ram_wg_reset_export => OPEN, + ram_wg_address_export => ram_wg_copi.address(c_sdp_ram_wg_addr_w - 1 downto 0), + ram_wg_read_export => ram_wg_copi.rd, + ram_wg_readdata_export => ram_wg_cipo.rddata(c_word_w - 1 downto 0), + ram_wg_write_export => ram_wg_copi.wr, + ram_wg_writedata_export => ram_wg_copi.wrdata(c_word_w - 1 downto 0), + + reg_dp_shiftram_clk_export => OPEN, + reg_dp_shiftram_reset_export => OPEN, + reg_dp_shiftram_address_export => reg_dp_shiftram_copi.address(c_sdp_reg_dp_shiftram_addr_w - 1 downto 0), + reg_dp_shiftram_read_export => reg_dp_shiftram_copi.rd, + reg_dp_shiftram_readdata_export => reg_dp_shiftram_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_shiftram_write_export => reg_dp_shiftram_copi.wr, + reg_dp_shiftram_writedata_export => reg_dp_shiftram_copi.wrdata(c_word_w - 1 downto 0), + + reg_bsn_source_v2_clk_export => OPEN, + reg_bsn_source_v2_reset_export => OPEN, + reg_bsn_source_v2_address_export => reg_bsn_source_v2_copi.address(c_sdp_reg_bsn_source_v2_addr_w - 1 downto 0), + reg_bsn_source_v2_read_export => reg_bsn_source_v2_copi.rd, + reg_bsn_source_v2_readdata_export => reg_bsn_source_v2_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_source_v2_write_export => reg_bsn_source_v2_copi.wr, + reg_bsn_source_v2_writedata_export => reg_bsn_source_v2_copi.wrdata(c_word_w - 1 downto 0), + + reg_bsn_scheduler_clk_export => OPEN, + reg_bsn_scheduler_reset_export => OPEN, + reg_bsn_scheduler_address_export => reg_bsn_scheduler_copi.address(c_sdp_reg_bsn_scheduler_addr_w - 1 downto 0), + reg_bsn_scheduler_read_export => reg_bsn_scheduler_copi.rd, + reg_bsn_scheduler_readdata_export => reg_bsn_scheduler_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_scheduler_write_export => reg_bsn_scheduler_copi.wr, + reg_bsn_scheduler_writedata_export => reg_bsn_scheduler_copi.wrdata(c_word_w - 1 downto 0), + + reg_epcs_reset_export => OPEN, + reg_epcs_clk_export => OPEN, + reg_epcs_address_export => reg_epcs_copi.address(c_unb2_mm_reg_default.reg_epcs_adr_w - 1 downto 0), + reg_epcs_write_export => reg_epcs_copi.wr, + reg_epcs_writedata_export => reg_epcs_copi.wrdata(c_word_w - 1 downto 0), + reg_epcs_read_export => reg_epcs_copi.rd, + reg_epcs_readdata_export => reg_epcs_cipo.rddata(c_word_w - 1 downto 0), + + reg_dpmm_ctrl_reset_export => OPEN, + reg_dpmm_ctrl_clk_export => OPEN, + reg_dpmm_ctrl_address_export => reg_dpmm_ctrl_copi.address(0 downto 0), + reg_dpmm_ctrl_write_export => reg_dpmm_ctrl_copi.wr, + reg_dpmm_ctrl_writedata_export => reg_dpmm_ctrl_copi.wrdata(c_word_w - 1 downto 0), + reg_dpmm_ctrl_read_export => reg_dpmm_ctrl_copi.rd, + reg_dpmm_ctrl_readdata_export => reg_dpmm_ctrl_cipo.rddata(c_word_w - 1 downto 0), + + reg_mmdp_data_reset_export => OPEN, + reg_mmdp_data_clk_export => OPEN, + reg_mmdp_data_address_export => reg_mmdp_data_copi.address(0 downto 0), + reg_mmdp_data_write_export => reg_mmdp_data_copi.wr, + reg_mmdp_data_writedata_export => reg_mmdp_data_copi.wrdata(c_word_w - 1 downto 0), + reg_mmdp_data_read_export => reg_mmdp_data_copi.rd, + reg_mmdp_data_readdata_export => reg_mmdp_data_cipo.rddata(c_word_w - 1 downto 0), + + reg_dpmm_data_reset_export => OPEN, + reg_dpmm_data_clk_export => OPEN, + reg_dpmm_data_address_export => reg_dpmm_data_copi.address(0 downto 0), + reg_dpmm_data_read_export => reg_dpmm_data_copi.rd, + reg_dpmm_data_readdata_export => reg_dpmm_data_cipo.rddata(c_word_w - 1 downto 0), + reg_dpmm_data_write_export => reg_dpmm_data_copi.wr, + reg_dpmm_data_writedata_export => reg_dpmm_data_copi.wrdata(c_word_w - 1 downto 0), + + reg_mmdp_ctrl_reset_export => OPEN, + reg_mmdp_ctrl_clk_export => OPEN, + reg_mmdp_ctrl_address_export => reg_mmdp_ctrl_copi.address(0 downto 0), + reg_mmdp_ctrl_read_export => reg_mmdp_ctrl_copi.rd, + reg_mmdp_ctrl_readdata_export => reg_mmdp_ctrl_cipo.rddata(c_word_w - 1 downto 0), + reg_mmdp_ctrl_write_export => reg_mmdp_ctrl_copi.wr, + reg_mmdp_ctrl_writedata_export => reg_mmdp_ctrl_copi.wrdata(c_word_w - 1 downto 0), ram_diag_data_buffer_bsn_clk_export => OPEN, ram_diag_data_buffer_bsn_reset_export => OPEN, - ram_diag_data_buffer_bsn_address_export => ram_diag_data_buf_bsn_copi.address(c_sdp_ram_diag_data_buf_bsn_addr_w - 1 downto 0), + ram_diag_data_buffer_bsn_address_export => ram_diag_data_buf_bsn_copi.address( + c_sdp_ram_diag_data_buf_bsn_addr_w - 1 downto 0), ram_diag_data_buffer_bsn_write_export => ram_diag_data_buf_bsn_copi.wr, ram_diag_data_buffer_bsn_writedata_export => ram_diag_data_buf_bsn_copi.wrdata(c_word_w - 1 downto 0), ram_diag_data_buffer_bsn_read_export => ram_diag_data_buf_bsn_copi.rd, @@ -789,351 +877,399 @@ begin reg_diag_data_buffer_bsn_reset_export => OPEN, reg_diag_data_buffer_bsn_clk_export => OPEN, - reg_diag_data_buffer_bsn_address_export => reg_diag_data_buf_bsn_copi.address(c_sdp_reg_diag_data_buf_bsn_addr_w - 1 downto 0), + reg_diag_data_buffer_bsn_address_export => reg_diag_data_buf_bsn_copi.address( + c_sdp_reg_diag_data_buf_bsn_addr_w - 1 downto 0), reg_diag_data_buffer_bsn_write_export => reg_diag_data_buf_bsn_copi.wr, reg_diag_data_buffer_bsn_writedata_export => reg_diag_data_buf_bsn_copi.wrdata(c_word_w - 1 downto 0), reg_diag_data_buffer_bsn_read_export => reg_diag_data_buf_bsn_copi.rd, reg_diag_data_buffer_bsn_readdata_export => reg_diag_data_buf_bsn_cipo.rddata(c_word_w - 1 downto 0), - ram_st_histogram_clk_export => OPEN, - ram_st_histogram_reset_export => OPEN, - ram_st_histogram_address_export => ram_st_histogram_copi.address(c_sdp_ram_st_histogram_addr_w - 1 downto 0), - ram_st_histogram_write_export => ram_st_histogram_copi.wr, - ram_st_histogram_writedata_export => ram_st_histogram_copi.wrdata(c_word_w - 1 downto 0), - ram_st_histogram_read_export => ram_st_histogram_copi.rd, - ram_st_histogram_readdata_export => ram_st_histogram_cipo.rddata(c_word_w - 1 downto 0), - - reg_aduh_monitor_reset_export => OPEN, - reg_aduh_monitor_clk_export => OPEN, - reg_aduh_monitor_address_export => reg_aduh_monitor_copi.address(c_sdp_reg_aduh_monitor_addr_w - 1 downto 0), - reg_aduh_monitor_write_export => reg_aduh_monitor_copi.wr, - reg_aduh_monitor_writedata_export => reg_aduh_monitor_copi.wrdata(c_word_w - 1 downto 0), - reg_aduh_monitor_read_export => reg_aduh_monitor_copi.rd, - reg_aduh_monitor_readdata_export => reg_aduh_monitor_cipo.rddata(c_word_w - 1 downto 0), - - ram_fil_coefs_clk_export => OPEN, - ram_fil_coefs_reset_export => OPEN, - ram_fil_coefs_address_export => ram_fil_coefs_copi.address(c_sdp_ram_fil_coefs_addr_w - 1 downto 0), - ram_fil_coefs_write_export => ram_fil_coefs_copi.wr, - ram_fil_coefs_writedata_export => ram_fil_coefs_copi.wrdata(c_word_w - 1 downto 0), - ram_fil_coefs_read_export => ram_fil_coefs_copi.rd, - ram_fil_coefs_readdata_export => ram_fil_coefs_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_sst_clk_export => OPEN, - ram_st_sst_reset_export => OPEN, - ram_st_sst_address_export => ram_st_sst_copi.address(c_sdp_ram_st_sst_addr_w - 1 downto 0), - ram_st_sst_write_export => ram_st_sst_copi.wr, - ram_st_sst_writedata_export => ram_st_sst_copi.wrdata(c_word_w - 1 downto 0), - ram_st_sst_read_export => ram_st_sst_copi.rd, - ram_st_sst_readdata_export => ram_st_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_si_clk_export => OPEN, - reg_si_reset_export => OPEN, - reg_si_address_export => reg_si_copi.address(c_sdp_reg_si_addr_w - 1 downto 0), - reg_si_write_export => reg_si_copi.wr, - reg_si_writedata_export => reg_si_copi.wrdata(c_word_w - 1 downto 0), - reg_si_read_export => reg_si_copi.rd, - reg_si_readdata_export => reg_si_cipo.rddata(c_word_w - 1 downto 0), - - ram_equalizer_gains_clk_export => OPEN, - ram_equalizer_gains_reset_export => OPEN, - ram_equalizer_gains_address_export => ram_equalizer_gains_copi.address(c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), - ram_equalizer_gains_write_export => ram_equalizer_gains_copi.wr, - ram_equalizer_gains_writedata_export => ram_equalizer_gains_copi.wrdata(c_word_w - 1 downto 0), - ram_equalizer_gains_read_export => ram_equalizer_gains_copi.rd, - ram_equalizer_gains_readdata_export => ram_equalizer_gains_cipo.rddata(c_word_w - 1 downto 0), + ram_st_histogram_clk_export => OPEN, + ram_st_histogram_reset_export => OPEN, + ram_st_histogram_address_export => ram_st_histogram_copi.address(c_sdp_ram_st_histogram_addr_w - 1 downto 0), + ram_st_histogram_write_export => ram_st_histogram_copi.wr, + ram_st_histogram_writedata_export => ram_st_histogram_copi.wrdata(c_word_w - 1 downto 0), + ram_st_histogram_read_export => ram_st_histogram_copi.rd, + ram_st_histogram_readdata_export => ram_st_histogram_cipo.rddata(c_word_w - 1 downto 0), + + reg_aduh_monitor_reset_export => OPEN, + reg_aduh_monitor_clk_export => OPEN, + reg_aduh_monitor_address_export => reg_aduh_monitor_copi.address(c_sdp_reg_aduh_monitor_addr_w - 1 downto 0), + reg_aduh_monitor_write_export => reg_aduh_monitor_copi.wr, + reg_aduh_monitor_writedata_export => reg_aduh_monitor_copi.wrdata(c_word_w - 1 downto 0), + reg_aduh_monitor_read_export => reg_aduh_monitor_copi.rd, + reg_aduh_monitor_readdata_export => reg_aduh_monitor_cipo.rddata(c_word_w - 1 downto 0), + + ram_fil_coefs_clk_export => OPEN, + ram_fil_coefs_reset_export => OPEN, + ram_fil_coefs_address_export => ram_fil_coefs_copi.address(c_sdp_ram_fil_coefs_addr_w - 1 downto 0), + ram_fil_coefs_write_export => ram_fil_coefs_copi.wr, + ram_fil_coefs_writedata_export => ram_fil_coefs_copi.wrdata(c_word_w - 1 downto 0), + ram_fil_coefs_read_export => ram_fil_coefs_copi.rd, + ram_fil_coefs_readdata_export => ram_fil_coefs_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_sst_clk_export => OPEN, + ram_st_sst_reset_export => OPEN, + ram_st_sst_address_export => ram_st_sst_copi.address(c_sdp_ram_st_sst_addr_w - 1 downto 0), + ram_st_sst_write_export => ram_st_sst_copi.wr, + ram_st_sst_writedata_export => ram_st_sst_copi.wrdata(c_word_w - 1 downto 0), + ram_st_sst_read_export => ram_st_sst_copi.rd, + ram_st_sst_readdata_export => ram_st_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_si_clk_export => OPEN, + reg_si_reset_export => OPEN, + reg_si_address_export => reg_si_copi.address(c_sdp_reg_si_addr_w - 1 downto 0), + reg_si_write_export => reg_si_copi.wr, + reg_si_writedata_export => reg_si_copi.wrdata(c_word_w - 1 downto 0), + reg_si_read_export => reg_si_copi.rd, + reg_si_readdata_export => reg_si_cipo.rddata(c_word_w - 1 downto 0), + + ram_equalizer_gains_clk_export => OPEN, + ram_equalizer_gains_reset_export => OPEN, + ram_equalizer_gains_address_export => ram_equalizer_gains_copi.address( + c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), + ram_equalizer_gains_write_export => ram_equalizer_gains_copi.wr, + ram_equalizer_gains_writedata_export => ram_equalizer_gains_copi.wrdata(c_word_w - 1 downto 0), + ram_equalizer_gains_read_export => ram_equalizer_gains_copi.rd, + ram_equalizer_gains_readdata_export => ram_equalizer_gains_cipo.rddata(c_word_w - 1 downto 0), ram_equalizer_gains_cross_clk_export => OPEN, ram_equalizer_gains_cross_reset_export => OPEN, - ram_equalizer_gains_cross_address_export => ram_equalizer_gains_cross_copi.address(c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), + ram_equalizer_gains_cross_address_export => ram_equalizer_gains_cross_copi.address( + c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), ram_equalizer_gains_cross_write_export => ram_equalizer_gains_cross_copi.wr, ram_equalizer_gains_cross_writedata_export => ram_equalizer_gains_cross_copi.wrdata(c_word_w - 1 downto 0), ram_equalizer_gains_cross_read_export => ram_equalizer_gains_cross_copi.rd, ram_equalizer_gains_cross_readdata_export => ram_equalizer_gains_cross_cipo.rddata(c_word_w - 1 downto 0), - reg_dp_selector_clk_export => OPEN, - reg_dp_selector_reset_export => OPEN, - reg_dp_selector_address_export => reg_dp_selector_copi.address(c_sdp_reg_dp_selector_addr_w - 1 downto 0), - reg_dp_selector_write_export => reg_dp_selector_copi.wr, - reg_dp_selector_writedata_export => reg_dp_selector_copi.wrdata(c_word_w - 1 downto 0), - reg_dp_selector_read_export => reg_dp_selector_copi.rd, - reg_dp_selector_readdata_export => reg_dp_selector_cipo.rddata(c_word_w - 1 downto 0), - - reg_sdp_info_clk_export => OPEN, - reg_sdp_info_reset_export => OPEN, - reg_sdp_info_address_export => reg_sdp_info_copi.address(c_sdp_reg_sdp_info_addr_w - 1 downto 0), - reg_sdp_info_write_export => reg_sdp_info_copi.wr, - reg_sdp_info_writedata_export => reg_sdp_info_copi.wrdata(c_word_w - 1 downto 0), - reg_sdp_info_read_export => reg_sdp_info_copi.rd, - reg_sdp_info_readdata_export => reg_sdp_info_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_info_clk_export => OPEN, - reg_ring_info_reset_export => OPEN, - reg_ring_info_address_export => reg_ring_info_copi.address(c_sdp_reg_ring_info_addr_w - 1 downto 0), - reg_ring_info_write_export => reg_ring_info_copi.wr, - reg_ring_info_writedata_export => reg_ring_info_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_info_read_export => reg_ring_info_copi.rd, - reg_ring_info_readdata_export => reg_ring_info_cipo.rddata(c_word_w - 1 downto 0), - - ram_ss_ss_wide_clk_export => OPEN, - ram_ss_ss_wide_reset_export => OPEN, - ram_ss_ss_wide_address_export => ram_ss_ss_wide_copi.address(c_sdp_ram_ss_ss_wide_addr_w - 1 downto 0), - ram_ss_ss_wide_write_export => ram_ss_ss_wide_copi.wr, - ram_ss_ss_wide_writedata_export => ram_ss_ss_wide_copi.wrdata(c_word_w - 1 downto 0), - ram_ss_ss_wide_read_export => ram_ss_ss_wide_copi.rd, - ram_ss_ss_wide_readdata_export => ram_ss_ss_wide_cipo.rddata(c_word_w - 1 downto 0), - - ram_bf_weights_clk_export => OPEN, - ram_bf_weights_reset_export => OPEN, - ram_bf_weights_address_export => ram_bf_weights_copi.address(c_sdp_ram_bf_weights_addr_w - 1 downto 0), - ram_bf_weights_write_export => ram_bf_weights_copi.wr, - ram_bf_weights_writedata_export => ram_bf_weights_copi.wrdata(c_word_w - 1 downto 0), - ram_bf_weights_read_export => ram_bf_weights_copi.rd, - ram_bf_weights_readdata_export => ram_bf_weights_cipo.rddata(c_word_w - 1 downto 0), - - reg_bf_scale_clk_export => OPEN, - reg_bf_scale_reset_export => OPEN, - reg_bf_scale_address_export => reg_bf_scale_copi.address(c_sdp_reg_bf_scale_addr_w - 1 downto 0), - reg_bf_scale_write_export => reg_bf_scale_copi.wr, - reg_bf_scale_writedata_export => reg_bf_scale_copi.wrdata(c_word_w - 1 downto 0), - reg_bf_scale_read_export => reg_bf_scale_copi.rd, - reg_bf_scale_readdata_export => reg_bf_scale_cipo.rddata(c_word_w - 1 downto 0), - - reg_hdr_dat_clk_export => OPEN, - reg_hdr_dat_reset_export => OPEN, - reg_hdr_dat_address_export => reg_hdr_dat_copi.address(c_sdp_reg_bf_hdr_dat_addr_w - 1 downto 0), - reg_hdr_dat_write_export => reg_hdr_dat_copi.wr, - reg_hdr_dat_writedata_export => reg_hdr_dat_copi.wrdata(c_word_w - 1 downto 0), - reg_hdr_dat_read_export => reg_hdr_dat_copi.rd, - reg_hdr_dat_readdata_export => reg_hdr_dat_cipo.rddata(c_word_w - 1 downto 0), - - reg_bdo_destinations_clk_export => OPEN, - reg_bdo_destinations_reset_export => OPEN, - reg_bdo_destinations_address_export => reg_bdo_destinations_copi.address(c_sdp_reg_bdo_destinations_info_w - 1 downto 0), - reg_bdo_destinations_write_export => reg_bdo_destinations_copi.wr, - reg_bdo_destinations_writedata_export => reg_bdo_destinations_copi.wrdata(c_word_w - 1 downto 0), - reg_bdo_destinations_read_export => reg_bdo_destinations_copi.rd, - reg_bdo_destinations_readdata_export => reg_bdo_destinations_cipo.rddata(c_word_w - 1 downto 0), - - reg_dp_xonoff_clk_export => OPEN, - reg_dp_xonoff_reset_export => OPEN, - reg_dp_xonoff_address_export => reg_dp_xonoff_copi.address(c_sdp_reg_dp_xonoff_addr_w - 1 downto 0), - reg_dp_xonoff_write_export => reg_dp_xonoff_copi.wr, - reg_dp_xonoff_writedata_export => reg_dp_xonoff_copi.wrdata(c_word_w - 1 downto 0), - reg_dp_xonoff_read_export => reg_dp_xonoff_copi.rd, - reg_dp_xonoff_readdata_export => reg_dp_xonoff_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_bst_clk_export => OPEN, - ram_st_bst_reset_export => OPEN, - ram_st_bst_address_export => ram_st_bst_copi.address(c_sdp_ram_st_bst_addr_w - 1 downto 0), - ram_st_bst_write_export => ram_st_bst_copi.wr, - ram_st_bst_writedata_export => ram_st_bst_copi.wrdata(c_word_w - 1 downto 0), - ram_st_bst_read_export => ram_st_bst_copi.rd, - ram_st_bst_readdata_export => ram_st_bst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_enable_sst_clk_export => OPEN, - reg_stat_enable_sst_reset_export => OPEN, - reg_stat_enable_sst_address_export => reg_stat_enable_sst_copi.address(c_sdp_reg_stat_enable_addr_w - 1 downto 0), - reg_stat_enable_sst_write_export => reg_stat_enable_sst_copi.wr, - reg_stat_enable_sst_writedata_export => reg_stat_enable_sst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_sst_read_export => reg_stat_enable_sst_copi.rd, - reg_stat_enable_sst_readdata_export => reg_stat_enable_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_hdr_dat_sst_clk_export => OPEN, - reg_stat_hdr_dat_sst_reset_export => OPEN, - reg_stat_hdr_dat_sst_address_export => reg_stat_hdr_dat_sst_copi.address(c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), - reg_stat_hdr_dat_sst_write_export => reg_stat_hdr_dat_sst_copi.wr, - reg_stat_hdr_dat_sst_writedata_export => reg_stat_hdr_dat_sst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_sst_read_export => reg_stat_hdr_dat_sst_copi.rd, - reg_stat_hdr_dat_sst_readdata_export => reg_stat_hdr_dat_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_enable_xst_clk_export => OPEN, - reg_stat_enable_xst_reset_export => OPEN, - reg_stat_enable_xst_address_export => reg_stat_enable_xst_copi.address(c_sdp_reg_stat_enable_addr_w - 1 downto 0), - reg_stat_enable_xst_write_export => reg_stat_enable_xst_copi.wr, - reg_stat_enable_xst_writedata_export => reg_stat_enable_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_xst_read_export => reg_stat_enable_xst_copi.rd, - reg_stat_enable_xst_readdata_export => reg_stat_enable_xst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_hdr_dat_xst_clk_export => OPEN, - reg_stat_hdr_dat_xst_reset_export => OPEN, - reg_stat_hdr_dat_xst_address_export => reg_stat_hdr_dat_xst_copi.address(c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), - reg_stat_hdr_dat_xst_write_export => reg_stat_hdr_dat_xst_copi.wr, - reg_stat_hdr_dat_xst_writedata_export => reg_stat_hdr_dat_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_xst_read_export => reg_stat_hdr_dat_xst_copi.rd, - reg_stat_hdr_dat_xst_readdata_export => reg_stat_hdr_dat_xst_cipo.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_copi.address(c_sdp_reg_stat_enable_bst_addr_w - 1 downto 0), - reg_stat_enable_bst_write_export => reg_stat_enable_bst_copi.wr, - reg_stat_enable_bst_writedata_export => reg_stat_enable_bst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_bst_read_export => reg_stat_enable_bst_copi.rd, - reg_stat_enable_bst_readdata_export => reg_stat_enable_bst_cipo.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_copi.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_copi.wr, - reg_stat_hdr_dat_bst_writedata_export => reg_stat_hdr_dat_bst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_bst_read_export => reg_stat_hdr_dat_bst_copi.rd, - reg_stat_hdr_dat_bst_readdata_export => reg_stat_hdr_dat_bst_cipo.rddata(c_word_w - 1 downto 0), - - reg_crosslets_info_clk_export => OPEN, - reg_crosslets_info_reset_export => OPEN, - reg_crosslets_info_address_export => reg_crosslets_info_copi.address(c_sdp_reg_crosslets_info_addr_w - 1 downto 0), - reg_crosslets_info_write_export => reg_crosslets_info_copi.wr, - reg_crosslets_info_writedata_export => reg_crosslets_info_copi.wrdata(c_word_w - 1 downto 0), - reg_crosslets_info_read_export => reg_crosslets_info_copi.rd, - reg_crosslets_info_readdata_export => reg_crosslets_info_cipo.rddata(c_word_w - 1 downto 0), - - reg_nof_crosslets_clk_export => OPEN, - reg_nof_crosslets_reset_export => OPEN, - reg_nof_crosslets_address_export => reg_nof_crosslets_copi.address(c_sdp_reg_nof_crosslets_addr_w - 1 downto 0), - reg_nof_crosslets_write_export => reg_nof_crosslets_copi.wr, - reg_nof_crosslets_writedata_export => reg_nof_crosslets_copi.wrdata(c_word_w - 1 downto 0), - reg_nof_crosslets_read_export => reg_nof_crosslets_copi.rd, - reg_nof_crosslets_readdata_export => reg_nof_crosslets_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_sync_scheduler_xsub_clk_export => OPEN, - reg_bsn_sync_scheduler_xsub_reset_export => OPEN, - reg_bsn_sync_scheduler_xsub_address_export => reg_bsn_sync_scheduler_xsub_copi.address(c_sdp_reg_bsn_sync_scheduler_xsub_addr_w - 1 downto 0), - reg_bsn_sync_scheduler_xsub_write_export => reg_bsn_sync_scheduler_xsub_copi.wr, - reg_bsn_sync_scheduler_xsub_writedata_export => reg_bsn_sync_scheduler_xsub_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_sync_scheduler_xsub_read_export => reg_bsn_sync_scheduler_xsub_copi.rd, - reg_bsn_sync_scheduler_xsub_readdata_export => reg_bsn_sync_scheduler_xsub_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_xsq_clk_export => OPEN, - ram_st_xsq_reset_export => OPEN, - ram_st_xsq_address_export => ram_st_xsq_copi.address(c_sdp_ram_st_xsq_arr_addr_w - 1 downto 0), - ram_st_xsq_write_export => ram_st_xsq_copi.wr, - ram_st_xsq_writedata_export => ram_st_xsq_copi.wrdata(c_word_w - 1 downto 0), - ram_st_xsq_read_export => ram_st_xsq_copi.rd, - ram_st_xsq_readdata_export => ram_st_xsq_cipo.rddata(c_word_w - 1 downto 0), - - reg_nw_10GbE_mac_clk_export => OPEN, - reg_nw_10GbE_mac_reset_export => OPEN, - reg_nw_10GbE_mac_address_export => reg_nw_10GbE_mac_copi.address(c_sdp_reg_nw_10GbE_mac_addr_w - 1 downto 0), - reg_nw_10GbE_mac_write_export => reg_nw_10GbE_mac_copi.wr, - reg_nw_10GbE_mac_writedata_export => reg_nw_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), - reg_nw_10GbE_mac_read_export => reg_nw_10GbE_mac_copi.rd, - reg_nw_10GbE_mac_readdata_export => reg_nw_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), - - reg_nw_10GbE_eth10g_clk_export => OPEN, - reg_nw_10GbE_eth10g_reset_export => OPEN, - reg_nw_10GbE_eth10g_address_export => reg_nw_10GbE_eth10g_copi.address(c_sdp_reg_nw_10GbE_eth10g_addr_w - 1 downto 0), - reg_nw_10GbE_eth10g_write_export => reg_nw_10GbE_eth10g_copi.wr, - reg_nw_10GbE_eth10g_writedata_export => reg_nw_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), - reg_nw_10GbE_eth10g_read_export => reg_nw_10GbE_eth10g_copi.rd, - reg_nw_10GbE_eth10g_readdata_export => reg_nw_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_align_v2_bf_clk_export => OPEN, - reg_bsn_align_v2_bf_reset_export => OPEN, - reg_bsn_align_v2_bf_address_export => reg_bsn_align_v2_bf_copi.address(c_sdp_reg_bsn_align_v2_bf_addr_w - 1 downto 0), - reg_bsn_align_v2_bf_write_export => reg_bsn_align_v2_bf_copi.wr, - reg_bsn_align_v2_bf_writedata_export => reg_bsn_align_v2_bf_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_align_v2_bf_read_export => reg_bsn_align_v2_bf_copi.rd, - reg_bsn_align_v2_bf_readdata_export => reg_bsn_align_v2_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_selector_clk_export => OPEN, + reg_dp_selector_reset_export => OPEN, + reg_dp_selector_address_export => reg_dp_selector_copi.address(c_sdp_reg_dp_selector_addr_w - 1 downto 0), + reg_dp_selector_write_export => reg_dp_selector_copi.wr, + reg_dp_selector_writedata_export => reg_dp_selector_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_selector_read_export => reg_dp_selector_copi.rd, + reg_dp_selector_readdata_export => reg_dp_selector_cipo.rddata(c_word_w - 1 downto 0), + + reg_sdp_info_clk_export => OPEN, + reg_sdp_info_reset_export => OPEN, + reg_sdp_info_address_export => reg_sdp_info_copi.address(c_sdp_reg_sdp_info_addr_w - 1 downto 0), + reg_sdp_info_write_export => reg_sdp_info_copi.wr, + reg_sdp_info_writedata_export => reg_sdp_info_copi.wrdata(c_word_w - 1 downto 0), + reg_sdp_info_read_export => reg_sdp_info_copi.rd, + reg_sdp_info_readdata_export => reg_sdp_info_cipo.rddata(c_word_w - 1 downto 0), + + reg_ring_info_clk_export => OPEN, + reg_ring_info_reset_export => OPEN, + reg_ring_info_address_export => reg_ring_info_copi.address(c_sdp_reg_ring_info_addr_w - 1 downto 0), + reg_ring_info_write_export => reg_ring_info_copi.wr, + reg_ring_info_writedata_export => reg_ring_info_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_info_read_export => reg_ring_info_copi.rd, + reg_ring_info_readdata_export => reg_ring_info_cipo.rddata(c_word_w - 1 downto 0), + + ram_ss_ss_wide_clk_export => OPEN, + ram_ss_ss_wide_reset_export => OPEN, + ram_ss_ss_wide_address_export => ram_ss_ss_wide_copi.address(c_sdp_ram_ss_ss_wide_addr_w - 1 downto 0), + ram_ss_ss_wide_write_export => ram_ss_ss_wide_copi.wr, + ram_ss_ss_wide_writedata_export => ram_ss_ss_wide_copi.wrdata(c_word_w - 1 downto 0), + ram_ss_ss_wide_read_export => ram_ss_ss_wide_copi.rd, + ram_ss_ss_wide_readdata_export => ram_ss_ss_wide_cipo.rddata(c_word_w - 1 downto 0), + + ram_bf_weights_clk_export => OPEN, + ram_bf_weights_reset_export => OPEN, + ram_bf_weights_address_export => ram_bf_weights_copi.address(c_sdp_ram_bf_weights_addr_w - 1 downto 0), + ram_bf_weights_write_export => ram_bf_weights_copi.wr, + ram_bf_weights_writedata_export => ram_bf_weights_copi.wrdata(c_word_w - 1 downto 0), + ram_bf_weights_read_export => ram_bf_weights_copi.rd, + ram_bf_weights_readdata_export => ram_bf_weights_cipo.rddata(c_word_w - 1 downto 0), + + reg_bf_scale_clk_export => OPEN, + reg_bf_scale_reset_export => OPEN, + reg_bf_scale_address_export => reg_bf_scale_copi.address(c_sdp_reg_bf_scale_addr_w - 1 downto 0), + reg_bf_scale_write_export => reg_bf_scale_copi.wr, + reg_bf_scale_writedata_export => reg_bf_scale_copi.wrdata(c_word_w - 1 downto 0), + reg_bf_scale_read_export => reg_bf_scale_copi.rd, + reg_bf_scale_readdata_export => reg_bf_scale_cipo.rddata(c_word_w - 1 downto 0), + + reg_hdr_dat_clk_export => OPEN, + reg_hdr_dat_reset_export => OPEN, + reg_hdr_dat_address_export => reg_hdr_dat_copi.address(c_sdp_reg_bf_hdr_dat_addr_w - 1 downto 0), + reg_hdr_dat_write_export => reg_hdr_dat_copi.wr, + reg_hdr_dat_writedata_export => reg_hdr_dat_copi.wrdata(c_word_w - 1 downto 0), + reg_hdr_dat_read_export => reg_hdr_dat_copi.rd, + reg_hdr_dat_readdata_export => reg_hdr_dat_cipo.rddata(c_word_w - 1 downto 0), + + reg_bdo_destinations_clk_export => OPEN, + reg_bdo_destinations_reset_export => OPEN, + reg_bdo_destinations_address_export => reg_bdo_destinations_copi.address( + c_sdp_reg_bdo_destinations_info_w - 1 downto 0), + reg_bdo_destinations_write_export => reg_bdo_destinations_copi.wr, + reg_bdo_destinations_writedata_export => reg_bdo_destinations_copi.wrdata(c_word_w - 1 downto 0), + reg_bdo_destinations_read_export => reg_bdo_destinations_copi.rd, + reg_bdo_destinations_readdata_export => reg_bdo_destinations_cipo.rddata(c_word_w - 1 downto 0), + + reg_dp_xonoff_clk_export => OPEN, + reg_dp_xonoff_reset_export => OPEN, + reg_dp_xonoff_address_export => reg_dp_xonoff_copi.address(c_sdp_reg_dp_xonoff_addr_w - 1 downto 0), + reg_dp_xonoff_write_export => reg_dp_xonoff_copi.wr, + reg_dp_xonoff_writedata_export => reg_dp_xonoff_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_xonoff_read_export => reg_dp_xonoff_copi.rd, + reg_dp_xonoff_readdata_export => reg_dp_xonoff_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_bst_clk_export => OPEN, + ram_st_bst_reset_export => OPEN, + ram_st_bst_address_export => ram_st_bst_copi.address(c_sdp_ram_st_bst_addr_w - 1 downto 0), + ram_st_bst_write_export => ram_st_bst_copi.wr, + ram_st_bst_writedata_export => ram_st_bst_copi.wrdata(c_word_w - 1 downto 0), + ram_st_bst_read_export => ram_st_bst_copi.rd, + ram_st_bst_readdata_export => ram_st_bst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_enable_sst_clk_export => OPEN, + reg_stat_enable_sst_reset_export => OPEN, + reg_stat_enable_sst_address_export => reg_stat_enable_sst_copi.address( + c_sdp_reg_stat_enable_addr_w - 1 downto 0), + reg_stat_enable_sst_write_export => reg_stat_enable_sst_copi.wr, + reg_stat_enable_sst_writedata_export => reg_stat_enable_sst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_sst_read_export => reg_stat_enable_sst_copi.rd, + reg_stat_enable_sst_readdata_export => reg_stat_enable_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_hdr_dat_sst_clk_export => OPEN, + reg_stat_hdr_dat_sst_reset_export => OPEN, + reg_stat_hdr_dat_sst_address_export => reg_stat_hdr_dat_sst_copi.address( + c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), + reg_stat_hdr_dat_sst_write_export => reg_stat_hdr_dat_sst_copi.wr, + reg_stat_hdr_dat_sst_writedata_export => reg_stat_hdr_dat_sst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_sst_read_export => reg_stat_hdr_dat_sst_copi.rd, + reg_stat_hdr_dat_sst_readdata_export => reg_stat_hdr_dat_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_enable_xst_clk_export => OPEN, + reg_stat_enable_xst_reset_export => OPEN, + reg_stat_enable_xst_address_export => reg_stat_enable_xst_copi.address( + c_sdp_reg_stat_enable_addr_w - 1 downto 0), + reg_stat_enable_xst_write_export => reg_stat_enable_xst_copi.wr, + reg_stat_enable_xst_writedata_export => reg_stat_enable_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_xst_read_export => reg_stat_enable_xst_copi.rd, + reg_stat_enable_xst_readdata_export => reg_stat_enable_xst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_hdr_dat_xst_clk_export => OPEN, + reg_stat_hdr_dat_xst_reset_export => OPEN, + reg_stat_hdr_dat_xst_address_export => reg_stat_hdr_dat_xst_copi.address( + c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), + reg_stat_hdr_dat_xst_write_export => reg_stat_hdr_dat_xst_copi.wr, + reg_stat_hdr_dat_xst_writedata_export => reg_stat_hdr_dat_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_xst_read_export => reg_stat_hdr_dat_xst_copi.rd, + reg_stat_hdr_dat_xst_readdata_export => reg_stat_hdr_dat_xst_cipo.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_copi.address( + c_sdp_reg_stat_enable_bst_addr_w - 1 downto 0), + reg_stat_enable_bst_write_export => reg_stat_enable_bst_copi.wr, + reg_stat_enable_bst_writedata_export => reg_stat_enable_bst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_bst_read_export => reg_stat_enable_bst_copi.rd, + reg_stat_enable_bst_readdata_export => reg_stat_enable_bst_cipo.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_copi.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_copi.wr, + reg_stat_hdr_dat_bst_writedata_export => reg_stat_hdr_dat_bst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_bst_read_export => reg_stat_hdr_dat_bst_copi.rd, + reg_stat_hdr_dat_bst_readdata_export => reg_stat_hdr_dat_bst_cipo.rddata(c_word_w - 1 downto 0), + + reg_crosslets_info_clk_export => OPEN, + reg_crosslets_info_reset_export => OPEN, + reg_crosslets_info_address_export => reg_crosslets_info_copi.address( + c_sdp_reg_crosslets_info_addr_w - 1 downto 0), + reg_crosslets_info_write_export => reg_crosslets_info_copi.wr, + reg_crosslets_info_writedata_export => reg_crosslets_info_copi.wrdata(c_word_w - 1 downto 0), + reg_crosslets_info_read_export => reg_crosslets_info_copi.rd, + reg_crosslets_info_readdata_export => reg_crosslets_info_cipo.rddata(c_word_w - 1 downto 0), + + reg_nof_crosslets_clk_export => OPEN, + reg_nof_crosslets_reset_export => OPEN, + reg_nof_crosslets_address_export => reg_nof_crosslets_copi.address( + c_sdp_reg_nof_crosslets_addr_w - 1 downto 0), + reg_nof_crosslets_write_export => reg_nof_crosslets_copi.wr, + reg_nof_crosslets_writedata_export => reg_nof_crosslets_copi.wrdata(c_word_w - 1 downto 0), + reg_nof_crosslets_read_export => reg_nof_crosslets_copi.rd, + reg_nof_crosslets_readdata_export => reg_nof_crosslets_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_sync_scheduler_xsub_clk_export => OPEN, + reg_bsn_sync_scheduler_xsub_reset_export => OPEN, + reg_bsn_sync_scheduler_xsub_address_export => reg_bsn_sync_scheduler_xsub_copi.address( + c_sdp_reg_bsn_sync_scheduler_xsub_addr_w - 1 downto 0), + reg_bsn_sync_scheduler_xsub_write_export => reg_bsn_sync_scheduler_xsub_copi.wr, + reg_bsn_sync_scheduler_xsub_writedata_export => reg_bsn_sync_scheduler_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_sync_scheduler_xsub_read_export => reg_bsn_sync_scheduler_xsub_copi.rd, + reg_bsn_sync_scheduler_xsub_readdata_export => reg_bsn_sync_scheduler_xsub_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_xsq_clk_export => OPEN, + ram_st_xsq_reset_export => OPEN, + ram_st_xsq_address_export => ram_st_xsq_copi.address(c_sdp_ram_st_xsq_arr_addr_w - 1 downto 0), + ram_st_xsq_write_export => ram_st_xsq_copi.wr, + ram_st_xsq_writedata_export => ram_st_xsq_copi.wrdata(c_word_w - 1 downto 0), + ram_st_xsq_read_export => ram_st_xsq_copi.rd, + ram_st_xsq_readdata_export => ram_st_xsq_cipo.rddata(c_word_w - 1 downto 0), + + reg_nw_10GbE_mac_clk_export => OPEN, + reg_nw_10GbE_mac_reset_export => OPEN, + reg_nw_10GbE_mac_address_export => reg_nw_10GbE_mac_copi.address(c_sdp_reg_nw_10GbE_mac_addr_w - 1 downto 0), + reg_nw_10GbE_mac_write_export => reg_nw_10GbE_mac_copi.wr, + reg_nw_10GbE_mac_writedata_export => reg_nw_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), + reg_nw_10GbE_mac_read_export => reg_nw_10GbE_mac_copi.rd, + reg_nw_10GbE_mac_readdata_export => reg_nw_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), + + reg_nw_10GbE_eth10g_clk_export => OPEN, + reg_nw_10GbE_eth10g_reset_export => OPEN, + reg_nw_10GbE_eth10g_address_export => reg_nw_10GbE_eth10g_copi.address( + c_sdp_reg_nw_10GbE_eth10g_addr_w - 1 downto 0), + reg_nw_10GbE_eth10g_write_export => reg_nw_10GbE_eth10g_copi.wr, + reg_nw_10GbE_eth10g_writedata_export => reg_nw_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), + reg_nw_10GbE_eth10g_read_export => reg_nw_10GbE_eth10g_copi.rd, + reg_nw_10GbE_eth10g_readdata_export => reg_nw_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_align_v2_bf_clk_export => OPEN, + reg_bsn_align_v2_bf_reset_export => OPEN, + reg_bsn_align_v2_bf_address_export => reg_bsn_align_v2_bf_copi.address( + c_sdp_reg_bsn_align_v2_bf_addr_w - 1 downto 0), + reg_bsn_align_v2_bf_write_export => reg_bsn_align_v2_bf_copi.wr, + reg_bsn_align_v2_bf_writedata_export => reg_bsn_align_v2_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_align_v2_bf_read_export => reg_bsn_align_v2_bf_copi.rd, + reg_bsn_align_v2_bf_readdata_export => reg_bsn_align_v2_bf_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_clk_export => OPEN, reg_bsn_monitor_v2_rx_align_bf_reset_export => OPEN, - reg_bsn_monitor_v2_rx_align_bf_address_export => reg_bsn_monitor_v2_rx_align_bf_copi.address(c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_address_export => reg_bsn_monitor_v2_rx_align_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_write_export => reg_bsn_monitor_v2_rx_align_bf_copi.wr, - reg_bsn_monitor_v2_rx_align_bf_writedata_export => reg_bsn_monitor_v2_rx_align_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_writedata_export => reg_bsn_monitor_v2_rx_align_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_read_export => reg_bsn_monitor_v2_rx_align_bf_copi.rd, - reg_bsn_monitor_v2_rx_align_bf_readdata_export => reg_bsn_monitor_v2_rx_align_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_readdata_export => reg_bsn_monitor_v2_rx_align_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_clk_export => OPEN, reg_bsn_monitor_v2_aligned_bf_reset_export => OPEN, - reg_bsn_monitor_v2_aligned_bf_address_export => reg_bsn_monitor_v2_aligned_bf_copi.address(c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_address_export => reg_bsn_monitor_v2_aligned_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_write_export => reg_bsn_monitor_v2_aligned_bf_copi.wr, - reg_bsn_monitor_v2_aligned_bf_writedata_export => reg_bsn_monitor_v2_aligned_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_writedata_export => reg_bsn_monitor_v2_aligned_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_read_export => reg_bsn_monitor_v2_aligned_bf_copi.rd, - reg_bsn_monitor_v2_aligned_bf_readdata_export => reg_bsn_monitor_v2_aligned_bf_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_align_v2_xsub_clk_export => OPEN, - reg_bsn_align_v2_xsub_reset_export => OPEN, - reg_bsn_align_v2_xsub_address_export => reg_bsn_align_v2_xsub_copi.address(c_sdp_reg_bsn_align_v2_xsub_addr_w - 1 downto 0), - reg_bsn_align_v2_xsub_write_export => reg_bsn_align_v2_xsub_copi.wr, - reg_bsn_align_v2_xsub_writedata_export => reg_bsn_align_v2_xsub_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_align_v2_xsub_read_export => reg_bsn_align_v2_xsub_copi.rd, - reg_bsn_align_v2_xsub_readdata_export => reg_bsn_align_v2_xsub_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_readdata_export => reg_bsn_monitor_v2_aligned_bf_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_align_v2_xsub_clk_export => OPEN, + reg_bsn_align_v2_xsub_reset_export => OPEN, + reg_bsn_align_v2_xsub_address_export => reg_bsn_align_v2_xsub_copi.address( + c_sdp_reg_bsn_align_v2_xsub_addr_w - 1 downto 0), + reg_bsn_align_v2_xsub_write_export => reg_bsn_align_v2_xsub_copi.wr, + reg_bsn_align_v2_xsub_writedata_export => reg_bsn_align_v2_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_align_v2_xsub_read_export => reg_bsn_align_v2_xsub_copi.rd, + reg_bsn_align_v2_xsub_readdata_export => reg_bsn_align_v2_xsub_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_clk_export => OPEN, reg_bsn_monitor_v2_rx_align_xsub_reset_export => OPEN, - reg_bsn_monitor_v2_rx_align_xsub_address_export => reg_bsn_monitor_v2_rx_align_xsub_copi.address(c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_address_export => reg_bsn_monitor_v2_rx_align_xsub_copi.address( + c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_write_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wr, - reg_bsn_monitor_v2_rx_align_xsub_writedata_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_writedata_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_read_export => reg_bsn_monitor_v2_rx_align_xsub_copi.rd, - reg_bsn_monitor_v2_rx_align_xsub_readdata_export => reg_bsn_monitor_v2_rx_align_xsub_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_readdata_export => reg_bsn_monitor_v2_rx_align_xsub_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_clk_export => OPEN, reg_bsn_monitor_v2_aligned_xsub_reset_export => OPEN, - reg_bsn_monitor_v2_aligned_xsub_address_export => reg_bsn_monitor_v2_aligned_xsub_copi.address(c_sdp_reg_bsn_monitor_v2_aligned_xsub_addr_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_address_export => reg_bsn_monitor_v2_aligned_xsub_copi.address( + c_sdp_reg_bsn_monitor_v2_aligned_xsub_addr_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_write_export => reg_bsn_monitor_v2_aligned_xsub_copi.wr, - reg_bsn_monitor_v2_aligned_xsub_writedata_export => reg_bsn_monitor_v2_aligned_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_writedata_export => reg_bsn_monitor_v2_aligned_xsub_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_read_export => reg_bsn_monitor_v2_aligned_xsub_copi.rd, - reg_bsn_monitor_v2_aligned_xsub_readdata_export => reg_bsn_monitor_v2_aligned_xsub_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_sst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_sst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_sst_offload_address_export => reg_bsn_monitor_v2_sst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_sst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_sst_offload_write_export => reg_bsn_monitor_v2_sst_offload_copi.wr, - reg_bsn_monitor_v2_sst_offload_writedata_export => reg_bsn_monitor_v2_sst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_sst_offload_read_export => reg_bsn_monitor_v2_sst_offload_copi.rd, - reg_bsn_monitor_v2_sst_offload_readdata_export => reg_bsn_monitor_v2_sst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_bst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_bst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_bst_offload_address_export => reg_bsn_monitor_v2_bst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_bst_offload_write_export => reg_bsn_monitor_v2_bst_offload_copi.wr, - reg_bsn_monitor_v2_bst_offload_writedata_export => reg_bsn_monitor_v2_bst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_bst_offload_read_export => reg_bsn_monitor_v2_bst_offload_copi.rd, - reg_bsn_monitor_v2_bst_offload_readdata_export => reg_bsn_monitor_v2_bst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_beamlet_output_clk_export => OPEN, - reg_bsn_monitor_v2_beamlet_output_reset_export => OPEN, - reg_bsn_monitor_v2_beamlet_output_address_export => reg_bsn_monitor_v2_beamlet_output_copi.address(c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w - 1 downto 0), - reg_bsn_monitor_v2_beamlet_output_write_export => reg_bsn_monitor_v2_beamlet_output_copi.wr, - reg_bsn_monitor_v2_beamlet_output_writedata_export => reg_bsn_monitor_v2_beamlet_output_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_beamlet_output_read_export => reg_bsn_monitor_v2_beamlet_output_copi.rd, - reg_bsn_monitor_v2_beamlet_output_readdata_export => reg_bsn_monitor_v2_beamlet_output_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_xst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_xst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_xst_offload_address_export => reg_bsn_monitor_v2_xst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_xst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_xst_offload_write_export => reg_bsn_monitor_v2_xst_offload_copi.wr, - reg_bsn_monitor_v2_xst_offload_writedata_export => reg_bsn_monitor_v2_xst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_xst_offload_read_export => reg_bsn_monitor_v2_xst_offload_copi.rd, - reg_bsn_monitor_v2_xst_offload_readdata_export => reg_bsn_monitor_v2_xst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_lane_info_bf_clk_export => OPEN, - reg_ring_lane_info_bf_reset_export => OPEN, - reg_ring_lane_info_bf_address_export => reg_ring_lane_info_bf_copi.address(c_sdp_reg_ring_lane_info_bf_addr_w - 1 downto 0), - reg_ring_lane_info_bf_write_export => reg_ring_lane_info_bf_copi.wr, - reg_ring_lane_info_bf_writedata_export => reg_ring_lane_info_bf_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_lane_info_bf_read_export => reg_ring_lane_info_bf_copi.rd, - reg_ring_lane_info_bf_readdata_export => reg_ring_lane_info_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_readdata_export => reg_bsn_monitor_v2_aligned_xsub_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_sst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_sst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_sst_offload_address_export => reg_bsn_monitor_v2_sst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_sst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_sst_offload_write_export => reg_bsn_monitor_v2_sst_offload_copi.wr, + reg_bsn_monitor_v2_sst_offload_writedata_export => reg_bsn_monitor_v2_sst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_sst_offload_read_export => reg_bsn_monitor_v2_sst_offload_copi.rd, + reg_bsn_monitor_v2_sst_offload_readdata_export => reg_bsn_monitor_v2_sst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_bst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_bst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_bst_offload_address_export => reg_bsn_monitor_v2_bst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_bst_offload_write_export => reg_bsn_monitor_v2_bst_offload_copi.wr, + reg_bsn_monitor_v2_bst_offload_writedata_export => reg_bsn_monitor_v2_bst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_bst_offload_read_export => reg_bsn_monitor_v2_bst_offload_copi.rd, + reg_bsn_monitor_v2_bst_offload_readdata_export => reg_bsn_monitor_v2_bst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_beamlet_output_clk_export => OPEN, + reg_bsn_monitor_v2_beamlet_output_reset_export => OPEN, + reg_bsn_monitor_v2_beamlet_output_address_export => reg_bsn_monitor_v2_beamlet_output_copi.address( + c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w - 1 downto 0), + reg_bsn_monitor_v2_beamlet_output_write_export => reg_bsn_monitor_v2_beamlet_output_copi.wr, + reg_bsn_monitor_v2_beamlet_output_writedata_export => reg_bsn_monitor_v2_beamlet_output_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_beamlet_output_read_export => reg_bsn_monitor_v2_beamlet_output_copi.rd, + reg_bsn_monitor_v2_beamlet_output_readdata_export => reg_bsn_monitor_v2_beamlet_output_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_xst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_xst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_xst_offload_address_export => reg_bsn_monitor_v2_xst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_xst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_xst_offload_write_export => reg_bsn_monitor_v2_xst_offload_copi.wr, + reg_bsn_monitor_v2_xst_offload_writedata_export => reg_bsn_monitor_v2_xst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_xst_offload_read_export => reg_bsn_monitor_v2_xst_offload_copi.rd, + reg_bsn_monitor_v2_xst_offload_readdata_export => reg_bsn_monitor_v2_xst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_ring_lane_info_bf_clk_export => OPEN, + reg_ring_lane_info_bf_reset_export => OPEN, + reg_ring_lane_info_bf_address_export => reg_ring_lane_info_bf_copi.address( + c_sdp_reg_ring_lane_info_bf_addr_w - 1 downto 0), + reg_ring_lane_info_bf_write_export => reg_ring_lane_info_bf_copi.wr, + reg_ring_lane_info_bf_writedata_export => reg_ring_lane_info_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_lane_info_bf_read_export => reg_ring_lane_info_bf_copi.rd, + reg_ring_lane_info_bf_readdata_export => reg_ring_lane_info_bf_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_clk_export => OPEN, reg_bsn_monitor_v2_ring_rx_bf_reset_export => OPEN, - reg_bsn_monitor_v2_ring_rx_bf_address_export => reg_bsn_monitor_v2_ring_rx_bf_copi.address(c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_address_export => reg_bsn_monitor_v2_ring_rx_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_write_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wr, - reg_bsn_monitor_v2_ring_rx_bf_writedata_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_writedata_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_read_export => reg_bsn_monitor_v2_ring_rx_bf_copi.rd, - reg_bsn_monitor_v2_ring_rx_bf_readdata_export => reg_bsn_monitor_v2_ring_rx_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_readdata_export => reg_bsn_monitor_v2_ring_rx_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_clk_export => OPEN, reg_bsn_monitor_v2_ring_tx_bf_reset_export => OPEN, - reg_bsn_monitor_v2_ring_tx_bf_address_export => reg_bsn_monitor_v2_ring_tx_bf_copi.address(c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_address_export => reg_bsn_monitor_v2_ring_tx_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_write_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wr, - reg_bsn_monitor_v2_ring_tx_bf_writedata_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_writedata_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_read_export => reg_bsn_monitor_v2_ring_tx_bf_copi.rd, - reg_bsn_monitor_v2_ring_tx_bf_readdata_export => reg_bsn_monitor_v2_ring_tx_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_readdata_export => reg_bsn_monitor_v2_ring_tx_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_bf_clk_export => OPEN, reg_dp_block_validate_err_bf_reset_export => OPEN, - reg_dp_block_validate_err_bf_address_export => reg_dp_block_validate_err_bf_copi.address(c_sdp_reg_dp_block_validate_err_bf_addr_w - 1 downto 0), + reg_dp_block_validate_err_bf_address_export => reg_dp_block_validate_err_bf_copi.address( + c_sdp_reg_dp_block_validate_err_bf_addr_w - 1 downto 0), reg_dp_block_validate_err_bf_write_export => reg_dp_block_validate_err_bf_copi.wr, reg_dp_block_validate_err_bf_writedata_export => reg_dp_block_validate_err_bf_copi.wrdata(c_word_w - 1 downto 0), reg_dp_block_validate_err_bf_read_export => reg_dp_block_validate_err_bf_copi.rd, @@ -1141,75 +1277,92 @@ begin reg_dp_block_validate_bsn_at_sync_bf_clk_export => OPEN, reg_dp_block_validate_bsn_at_sync_bf_reset_export => OPEN, - reg_dp_block_validate_bsn_at_sync_bf_address_export => reg_dp_block_validate_bsn_at_sync_bf_copi.address(c_sdp_reg_dp_block_validate_bsn_at_sync_bf_addr_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_address_export => reg_dp_block_validate_bsn_at_sync_bf_copi.address( + c_sdp_reg_dp_block_validate_bsn_at_sync_bf_addr_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_bf_write_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wr, - reg_dp_block_validate_bsn_at_sync_bf_writedata_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_writedata_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_bf_read_export => reg_dp_block_validate_bsn_at_sync_bf_copi.rd, - reg_dp_block_validate_bsn_at_sync_bf_readdata_export => reg_dp_block_validate_bsn_at_sync_bf_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_lane_info_xst_clk_export => OPEN, - reg_ring_lane_info_xst_reset_export => OPEN, - reg_ring_lane_info_xst_address_export => reg_ring_lane_info_xst_copi.address(c_sdp_reg_ring_lane_info_xst_addr_w - 1 downto 0), - reg_ring_lane_info_xst_write_export => reg_ring_lane_info_xst_copi.wr, - reg_ring_lane_info_xst_writedata_export => reg_ring_lane_info_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_lane_info_xst_read_export => reg_ring_lane_info_xst_copi.rd, - reg_ring_lane_info_xst_readdata_export => reg_ring_lane_info_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_readdata_export => reg_dp_block_validate_bsn_at_sync_bf_cipo.rddata( + c_word_w - 1 downto 0), + + reg_ring_lane_info_xst_clk_export => OPEN, + reg_ring_lane_info_xst_reset_export => OPEN, + reg_ring_lane_info_xst_address_export => reg_ring_lane_info_xst_copi.address( + c_sdp_reg_ring_lane_info_xst_addr_w - 1 downto 0), + reg_ring_lane_info_xst_write_export => reg_ring_lane_info_xst_copi.wr, + reg_ring_lane_info_xst_writedata_export => reg_ring_lane_info_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_lane_info_xst_read_export => reg_ring_lane_info_xst_copi.rd, + reg_ring_lane_info_xst_readdata_export => reg_ring_lane_info_xst_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_clk_export => OPEN, reg_bsn_monitor_v2_ring_rx_xst_reset_export => OPEN, - reg_bsn_monitor_v2_ring_rx_xst_address_export => reg_bsn_monitor_v2_ring_rx_xst_copi.address(c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_address_export => reg_bsn_monitor_v2_ring_rx_xst_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_write_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wr, - reg_bsn_monitor_v2_ring_rx_xst_writedata_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_writedata_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_read_export => reg_bsn_monitor_v2_ring_rx_xst_copi.rd, - reg_bsn_monitor_v2_ring_rx_xst_readdata_export => reg_bsn_monitor_v2_ring_rx_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_readdata_export => reg_bsn_monitor_v2_ring_rx_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_clk_export => OPEN, reg_bsn_monitor_v2_ring_tx_xst_reset_export => OPEN, - reg_bsn_monitor_v2_ring_tx_xst_address_export => reg_bsn_monitor_v2_ring_tx_xst_copi.address(c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_address_export => reg_bsn_monitor_v2_ring_tx_xst_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_write_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wr, - reg_bsn_monitor_v2_ring_tx_xst_writedata_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_writedata_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_read_export => reg_bsn_monitor_v2_ring_tx_xst_copi.rd, - reg_bsn_monitor_v2_ring_tx_xst_readdata_export => reg_bsn_monitor_v2_ring_tx_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_readdata_export => reg_bsn_monitor_v2_ring_tx_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_xst_clk_export => OPEN, reg_dp_block_validate_err_xst_reset_export => OPEN, - reg_dp_block_validate_err_xst_address_export => reg_dp_block_validate_err_xst_copi.address(c_sdp_reg_dp_block_validate_err_xst_addr_w - 1 downto 0), + reg_dp_block_validate_err_xst_address_export => reg_dp_block_validate_err_xst_copi.address( + c_sdp_reg_dp_block_validate_err_xst_addr_w - 1 downto 0), reg_dp_block_validate_err_xst_write_export => reg_dp_block_validate_err_xst_copi.wr, - reg_dp_block_validate_err_xst_writedata_export => reg_dp_block_validate_err_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_err_xst_writedata_export => reg_dp_block_validate_err_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_xst_read_export => reg_dp_block_validate_err_xst_copi.rd, - reg_dp_block_validate_err_xst_readdata_export => reg_dp_block_validate_err_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_block_validate_err_xst_readdata_export => reg_dp_block_validate_err_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_clk_export => OPEN, reg_dp_block_validate_bsn_at_sync_xst_reset_export => OPEN, - reg_dp_block_validate_bsn_at_sync_xst_address_export => reg_dp_block_validate_bsn_at_sync_xst_copi.address(c_sdp_reg_dp_block_validate_bsn_at_sync_xst_addr_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_xst_address_export => reg_dp_block_validate_bsn_at_sync_xst_copi.address( + c_sdp_reg_dp_block_validate_bsn_at_sync_xst_addr_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_write_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wr, - reg_dp_block_validate_bsn_at_sync_xst_writedata_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_xst_writedata_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_read_export => reg_dp_block_validate_bsn_at_sync_xst_copi.rd, - reg_dp_block_validate_bsn_at_sync_xst_readdata_export => reg_dp_block_validate_bsn_at_sync_xst_cipo.rddata(c_word_w - 1 downto 0), - - reg_tr_10GbE_mac_clk_export => OPEN, - reg_tr_10GbE_mac_reset_export => OPEN, - reg_tr_10GbE_mac_address_export => reg_tr_10GbE_mac_copi.address(c_sdp_reg_tr_10GbE_mac_addr_w - 1 downto 0), - reg_tr_10GbE_mac_write_export => reg_tr_10GbE_mac_copi.wr, - reg_tr_10GbE_mac_writedata_export => reg_tr_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), - reg_tr_10GbE_mac_read_export => reg_tr_10GbE_mac_copi.rd, - reg_tr_10GbE_mac_readdata_export => reg_tr_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), - - reg_tr_10GbE_eth10g_clk_export => OPEN, - reg_tr_10GbE_eth10g_reset_export => OPEN, - reg_tr_10GbE_eth10g_address_export => reg_tr_10GbE_eth10g_copi.address(c_sdp_reg_tr_10GbE_eth10g_addr_w - 1 downto 0), - reg_tr_10GbE_eth10g_write_export => reg_tr_10GbE_eth10g_copi.wr, - reg_tr_10GbE_eth10g_writedata_export => reg_tr_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), - reg_tr_10GbE_eth10g_read_export => reg_tr_10GbE_eth10g_copi.rd, - reg_tr_10GbE_eth10g_readdata_export => reg_tr_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), - - ram_scrap_clk_export => OPEN, - ram_scrap_reset_export => OPEN, - ram_scrap_address_export => ram_scrap_copi.address(9 - 1 downto 0), - ram_scrap_write_export => ram_scrap_copi.wr, - ram_scrap_writedata_export => ram_scrap_copi.wrdata(c_word_w - 1 downto 0), - ram_scrap_read_export => ram_scrap_copi.rd, - ram_scrap_readdata_export => ram_scrap_cipo.rddata(c_word_w - 1 downto 0) - ); + reg_dp_block_validate_bsn_at_sync_xst_readdata_export => reg_dp_block_validate_bsn_at_sync_xst_cipo.rddata( + c_word_w - 1 downto 0), + + reg_tr_10GbE_mac_clk_export => OPEN, + reg_tr_10GbE_mac_reset_export => OPEN, + reg_tr_10GbE_mac_address_export => reg_tr_10GbE_mac_copi.address(c_sdp_reg_tr_10GbE_mac_addr_w - 1 downto 0), + reg_tr_10GbE_mac_write_export => reg_tr_10GbE_mac_copi.wr, + reg_tr_10GbE_mac_writedata_export => reg_tr_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), + reg_tr_10GbE_mac_read_export => reg_tr_10GbE_mac_copi.rd, + reg_tr_10GbE_mac_readdata_export => reg_tr_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), + + reg_tr_10GbE_eth10g_clk_export => OPEN, + reg_tr_10GbE_eth10g_reset_export => OPEN, + reg_tr_10GbE_eth10g_address_export => reg_tr_10GbE_eth10g_copi.address( + c_sdp_reg_tr_10GbE_eth10g_addr_w - 1 downto 0), + reg_tr_10GbE_eth10g_write_export => reg_tr_10GbE_eth10g_copi.wr, + reg_tr_10GbE_eth10g_writedata_export => reg_tr_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), + reg_tr_10GbE_eth10g_read_export => reg_tr_10GbE_eth10g_copi.rd, + reg_tr_10GbE_eth10g_readdata_export => reg_tr_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), + + ram_scrap_clk_export => OPEN, + ram_scrap_reset_export => OPEN, + ram_scrap_address_export => ram_scrap_copi.address(9 - 1 downto 0), + ram_scrap_write_export => ram_scrap_copi.wr, + ram_scrap_writedata_export => ram_scrap_copi.wrdata(c_word_w - 1 downto 0), + ram_scrap_read_export => ram_scrap_copi.rd, + ram_scrap_readdata_export => ram_scrap_cipo.rddata(c_word_w - 1 downto 0) + ); end generate; end str; diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd index 769c5df7b63a5bcadb45a6c8e4584dd5d7701e19..74814f40e2093cc4363c9967e94f408473e129aa 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd @@ -31,20 +31,20 @@ -- c_eth_check_nof_packets = 1 instead of S_pn = 12. ------------------------------------------------------------------------------- library IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, lofar2_sdp_lib, wpfb_lib, eth_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use IEEE.math_real.all; -use common_lib.common_pkg.all; -use unb2b_board_lib.unb2b_board_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.common_str_pkg.all; -use mm_lib.mm_file_pkg.all; -use dp_lib.dp_stream_pkg.all; -use mm_lib.mm_file_unb_pkg.all; -use diag_lib.diag_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; -use eth_lib.eth_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use IEEE.math_real.all; + use common_lib.common_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.common_str_pkg.all; + use dp_lib.dp_stream_pkg.all; + use mm_lib.mm_file_pkg.all; + use mm_lib.mm_file_unb_pkg.all; + use diag_lib.diag_pkg.all; + use unb2b_board_lib.unb2b_board_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use eth_lib.eth_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; entity tb_lofar2_unb2b_sdp_station is end tb_lofar2_unb2b_sdp_station; @@ -65,12 +65,15 @@ architecture tb of tb_lofar2_unb2b_sdp_station is constant c_nof_block_per_sync : natural := 16; constant c_nof_clk_per_sync : natural := c_nof_block_per_sync * c_sdp_N_fft; constant c_pps_period : natural := c_nof_clk_per_sync; - constant c_wpfb_sim : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync); + constant c_wpfb_sim : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, + c_nof_block_per_sync); -- WG - constant c_bsn_start_wg : natural := 2; -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values + constant c_bsn_start_wg : natural := 2; -- start WG at this BSN to instead of some BSN, to avoid + -- mismatches in exact expected data values constant c_ampl_sp_0 : natural := c_sdp_FS_adc / 2; -- = 0.5 * FS, so in number of lsb - constant c_subband_sp_0 : real := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz + constant c_subband_sp_0 : real := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = + -- 19.921875 MHz -- . 1GbE output constant c_eth_check_nof_packets : natural := 1; @@ -212,10 +215,10 @@ begin -- 1 : phase[15:0] -- 2 : freq[30:0] -- 3 : ampl[16:0] - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024 * 2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, integer( 0.0 * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024 * 2**16 + 1, tb_clk); -- nof_samples, mode calc + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, integer(0.0 * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, integer(c_subband_sp_0 * c_sdp_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, integer(real(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk); -- ampl + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, integer(real(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk); -- ampl -- Read current BSN mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 downto 0), tb_clk); diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc_jesd.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc_jesd.vhd index 8ae5191ce5b07c3bc0fb212d7470cc534cee51cf..5367e3a3da24e81e816adcf27a102176afce8f92 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc_jesd.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc_jesd.vhd @@ -355,7 +355,7 @@ begin bonding_clock_2 <= not bonding_clock_2 after 500 ps; bonding_clock_0 <= not bonding_clock_0 after 2500 ps; - bonding_clock_1_process : process + p_bonding_clock_1 : process begin bonding_clock_1 <= '0'; wait for 4000 ps; diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/lofar2_unb2c_sdp_station_full.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/lofar2_unb2c_sdp_station_full.vhd index f637461c321b7f1416fadff1251f8bba7facf813..6d2c9e714e72893661967e7472bfb68760a11967 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/lofar2_unb2c_sdp_station_full.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/lofar2_unb2c_sdp_station_full.vhd @@ -26,13 +26,13 @@ -- Contains complete AIT input stage with 12 ADC streams, FSUB, XSUB, BF and RING library IEEE, common_lib, unb2c_board_lib, diag_lib, dp_lib, tech_jesd204b_lib, lofar2_unb2c_sdp_station_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use unb2c_board_lib.unb2c_board_pkg.all; -use diag_lib.diag_pkg.all; -use dp_lib.dp_stream_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use unb2c_board_lib.unb2c_board_pkg.all; + use diag_lib.diag_pkg.all; + use dp_lib.dp_stream_pkg.all; entity lofar2_unb2c_sdp_station_full is generic ( @@ -77,30 +77,35 @@ entity lofar2_unb2c_sdp_station_full is QSFP_LED : out std_logic_vector(c_unb2c_board_tr_qsfp_nof_leds - 1 downto 0); -- ring transceivers - RING_0_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); -- Using qsfp bus width also for ring interfaces + -- . Using qsfp bus width also for ring interfaces + RING_0_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_0_TX : out std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0); RING_1_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_1_TX : out std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0); -- back transceivers (note only 12 are used in unb2c) - BCK_RX : in std_logic_vector(c_unb2c_board_nof_tr_jesd204b - 1 downto 0); -- c_unb2c_board_nof_tr_jesd204b = c_sdp_S_pn = 12 + -- . c_unb2c_board_nof_tr_jesd204b = c_sdp_S_pn = 12 + BCK_RX : in std_logic_vector(c_unb2c_board_nof_tr_jesd204b - 1 downto 0); BCK_REF_CLK : in std_logic; -- Use as JESD204B_REFCLK -- jesd204b syncronization signals (4 syncs) + -- . c_unb2c_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 JESD204B_SYSREF : in std_logic; - JESD204B_SYNC_N : out std_logic_vector(c_unb2c_board_nof_sync_jesd204b - 1 downto 0) -- c_unb2c_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 + JESD204B_SYNC_N : out std_logic_vector(c_unb2c_board_nof_sync_jesd204b - 1 downto 0) ); end lofar2_unb2c_sdp_station_full; architecture str of lofar2_unb2c_sdp_station_full is - signal JESD204B_SERIAL_DATA : std_logic_vector((c_unb2c_board_tr_jesd204b.bus_w * c_unb2c_board_tr_jesd204b.nof_bus) - 1 downto 0); - signal jesd204b_sync_n_arr : std_logic_vector(c_unb2c_board_nof_sync_jesd204b - 1 downto 0); - signal JESD204B_REFCLK : std_logic; + signal JESD204B_SERIAL_DATA : std_logic_vector( + (c_unb2c_board_tr_jesd204b.bus_w * c_unb2c_board_tr_jesd204b.nof_bus) - 1 downto 0); + signal jesd204b_sync_n_arr : std_logic_vector(c_unb2c_board_nof_sync_jesd204b - 1 downto 0); + signal JESD204B_REFCLK : std_logic; begin -- Mapping between JESD signal names and UNB2B pin/schematic names JESD204B_REFCLK <= BCK_REF_CLK; JESD204B_SERIAL_DATA <= BCK_RX; - JESD204B_SYNC_N(c_unb2c_board_nof_sync_jesd204b - 1 downto 0) <= jesd204b_sync_n_arr(c_unb2c_board_nof_sync_jesd204b - 1 downto 0); + JESD204B_SYNC_N(c_unb2c_board_nof_sync_jesd204b - 1 downto 0) <= + jesd204b_sync_n_arr(c_unb2c_board_nof_sync_jesd204b - 1 downto 0); u_revision : entity lofar2_unb2c_sdp_station_lib.lofar2_unb2c_sdp_station generic map ( diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd index 18a8782ce0d6a3d9e0ebd512aefa68d9bdf7e76a..5e171f4be0268d9107d8d20aa61f3c043d789fcc 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd @@ -26,21 +26,23 @@ -- Unb2c version for lab testing, using generic sdp_station.vhd for LOFAR2 SDP application. ------------------------------------------------------------------------------- -library IEEE, common_lib, unb2c_board_lib, diag_lib, dp_lib, tech_jesd204b_lib, wpfb_lib, lofar2_sdp_lib, tech_pll_lib, nw_10gbe_lib, eth_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.common_field_pkg.all; -use unb2c_board_lib.unb2c_board_pkg.all; -use unb2c_board_lib.unb2c_board_peripherals_pkg.all; -use diag_lib.diag_pkg.all; -use dp_lib.dp_stream_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; -use work.lofar2_unb2c_sdp_station_pkg.all; -use eth_lib.eth_pkg.all; +library IEEE, common_lib, diag_lib, dp_lib; +library unb2c_board_lib, tech_pll_lib, tech_jesd204b_lib; +library wpfb_lib, nw_10gbe_lib, eth_lib, lofar2_sdp_lib; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.common_field_pkg.all; + use unb2c_board_lib.unb2c_board_pkg.all; + use unb2c_board_lib.unb2c_board_peripherals_pkg.all; + use diag_lib.diag_pkg.all; + use dp_lib.dp_stream_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use eth_lib.eth_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; + use work.lofar2_unb2c_sdp_station_pkg.all; entity lofar2_unb2c_sdp_station is generic ( @@ -88,7 +90,8 @@ entity lofar2_unb2c_sdp_station is QSFP_1_TX : out std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0); -- ring transceivers - RING_0_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); -- Using qsfp bus width also for ring interfaces + -- . Using qsfp bus width also for ring interfaces + RING_0_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_0_TX : out std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0); RING_1_RX : in std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0) := (others => '0'); RING_1_TX : out std_logic_vector(c_unb2c_board_tr_qsfp.bus_w - 1 downto 0); @@ -97,13 +100,15 @@ entity lofar2_unb2c_sdp_station is QSFP_LED : out std_logic_vector(c_unb2c_board_tr_qsfp_nof_leds - 1 downto 0); -- back transceivers (Note: numbered from 0) - JESD204B_SERIAL_DATA : in std_logic_vector(c_sdp_S_pn - 1 downto 0) := (others => '0'); -- c_unb2c_board_nof_tr_jesd204b = c_sdp_S_pn = 12 + JESD204B_SERIAL_DATA : in std_logic_vector(c_sdp_S_pn - 1 downto 0) := (others => '0'); + -- c_unb2c_board_nof_tr_jesd204b = c_sdp_S_pn = 12 -- Connect to the BCK_RX pins in the top wrapper JESD204B_REFCLK : in std_logic := '0'; -- Connect to BCK_REF_CLK pin in the top level wrapper -- jesd204b syncronization signals JESD204B_SYSREF : in std_logic := '0'; - JESD204B_SYNC_N : out std_logic_vector(c_sdp_N_sync_jesd - 1 downto 0) -- c_unb2c_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 + JESD204B_SYNC_N : out std_logic_vector(c_sdp_N_sync_jesd - 1 downto 0) + -- c_unb2c_board_nof_sync_jesd204b = c_sdp_N_sync_jesd = 4 ); end lofar2_unb2c_sdp_station; @@ -451,8 +456,10 @@ architecture str of lofar2_unb2c_sdp_station is signal reg_nw_10GbE_eth10g_cipo : t_mem_cipo := c_mem_cipo_rst; -- 10GbE - signal i_QSFP_TX : t_unb2c_board_qsfp_bus_2arr(c_unb2c_board_tr_qsfp.nof_bus - 1 downto 0) := (others => (others => '0')); - signal i_QSFP_RX : t_unb2c_board_qsfp_bus_2arr(c_unb2c_board_tr_qsfp.nof_bus - 1 downto 0) := (others => (others => '0')); + signal i_QSFP_TX : t_unb2c_board_qsfp_bus_2arr(c_unb2c_board_tr_qsfp.nof_bus - 1 downto 0) := + (others => (others => '0')); + signal i_QSFP_RX : t_unb2c_board_qsfp_bus_2arr(c_unb2c_board_tr_qsfp.nof_bus - 1 downto 0) := + (others => (others => '0')); signal unb2_board_front_io_serial_tx_arr : std_logic_vector(c_nof_streams_qsfp - 1 downto 0) := (others => '0'); signal unb2_board_front_io_serial_rx_arr : std_logic_vector(c_nof_streams_qsfp - 1 downto 0) := (others => '0'); diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/mmm_lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/mmm_lofar2_unb2c_sdp_station.vhd index e7071c6a168d77c91dc93177246f5a8974e43bb2..b777d7428bfff14c1f5620f0febdabe8b0751f1b 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/mmm_lofar2_unb2c_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/mmm_lofar2_unb2c_sdp_station.vhd @@ -19,23 +19,23 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, unb2c_board_lib, mm_lib, lofar2_sdp_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use unb2c_board_lib.unb2c_board_pkg.all; -use unb2c_board_lib.unb2c_board_peripherals_pkg.all; -use mm_lib.mm_file_pkg.all; -use mm_lib.mm_file_unb_pkg.all; -use work.qsys_lofar2_unb2c_sdp_station_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use unb2c_board_lib.unb2c_board_pkg.all; + use unb2c_board_lib.unb2c_board_peripherals_pkg.all; + use mm_lib.mm_file_pkg.all; + use mm_lib.mm_file_unb_pkg.all; + use work.qsys_lofar2_unb2c_sdp_station_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; entity mmm_lofar2_unb2c_sdp_station is generic ( g_sim : boolean := false; -- FALSE: use QSYS; TRUE: use mm_file I/O g_sim_unb_nr : natural := 0; g_sim_node_nr : natural := 0 - ); + ); port ( mm_rst : in std_logic; mm_clk : in std_logic; @@ -328,224 +328,303 @@ entity mmm_lofar2_unb2c_sdp_station is -- Jesd reset control jesd_ctrl_copi : out t_mem_copi; jesd_ctrl_cipo : in t_mem_cipo - ); + ); end mmm_lofar2_unb2c_sdp_station; architecture str of mmm_lofar2_unb2c_sdp_station is constant c_sim_node_nr : natural := g_sim_node_nr; constant c_sim_node_type : string(1 to 2) := "FN"; + -- Use shorter alias name for c_unb2b_board_peripherals_mm_reg_default to easier fit line length, and without b, c + -- to make mmm file for unb2b and unb2c more equal. + constant c_unb2_mm_reg_default : t_c_unb2c_board_peripherals_mm_reg := c_unb2c_board_peripherals_mm_reg_default; + signal i_reset_n : std_logic; begin ---------------------------------------------------------------------------- -- MM <-> file I/O for simulation. The files are created in $UPE/sim. ---------------------------------------------------------------------------- gen_mm_file_io : if g_sim = true generate - u_mm_file_reg_unb_system_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") - port map(mm_rst, mm_clk, reg_unb_system_info_copi, reg_unb_system_info_cipo ); - - u_mm_file_rom_unb_system_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") - port map(mm_rst, mm_clk, rom_unb_system_info_copi, rom_unb_system_info_cipo ); - - u_mm_file_reg_wdi : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") - port map(mm_rst, mm_clk, reg_wdi_copi, reg_wdi_cipo ); - - u_mm_file_reg_fpga_temp_sens : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_TEMP_SENS") - port map(mm_rst, mm_clk, reg_fpga_temp_sens_copi, reg_fpga_temp_sens_cipo ); - - u_mm_file_reg_fpga_voltage_sens : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_VOLTAGE_SENS") - port map(mm_rst, mm_clk, reg_fpga_voltage_sens_copi, reg_fpga_voltage_sens_cipo ); - - u_mm_file_reg_ppsh : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_PPS") - port map(mm_rst, mm_clk, reg_ppsh_copi, reg_ppsh_cipo ); - - -- Note: the eth1g RAM and TSE buses are only required by unb_osy on the NIOS as they provide the ethernet<->MM gateway. - u_mm_file_reg_eth : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") - port map(mm_rst, mm_clk, eth1g_reg_copi, eth1g_reg_cipo ); - - -- Must use exact g_mm_rd_latency = 1 instead of default 2, because JESD204B IP forces rddata = 0 after it has been read - u_mm_file_jesd204b : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "JESD204B", '1', 1) - port map(mm_rst, mm_clk, jesd204b_copi, jesd204b_cipo ); - - u_mm_file_pio_jesd_ctrl : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_JESD_CTRL") - port map(mm_rst, mm_clk, jesd_ctrl_copi, jesd_ctrl_cipo ); - - u_mm_file_reg_dp_shiftram : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SHIFTRAM") - port map(mm_rst, mm_clk, reg_dp_shiftram_copi, reg_dp_shiftram_cipo ); - - u_mm_file_reg_bsn_source_v2 : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SOURCE_V2") - port map(mm_rst, mm_clk, reg_bsn_source_v2_copi, reg_bsn_source_v2_cipo ); - - u_mm_file_reg_bsn_scheduler : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SCHEDULER") - port map(mm_rst, mm_clk, reg_bsn_scheduler_copi, reg_bsn_scheduler_cipo ); - - u_mm_file_reg_bsn_monitor_input : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_INPUT") - port map(mm_rst, mm_clk, reg_bsn_monitor_input_copi, reg_bsn_monitor_input_cipo ); - - u_mm_file_reg_wg : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WG") - port map(mm_rst, mm_clk, reg_wg_copi, reg_wg_cipo ); - u_mm_file_ram_wg : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_WG") - port map(mm_rst, mm_clk, ram_wg_copi, ram_wg_cipo ); - - u_mm_file_ram_diag_data_buf_bsn : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DIAG_DATA_BUFFER_BSN") - port map(mm_rst, mm_clk, ram_diag_data_buf_bsn_copi, ram_diag_data_buf_bsn_cipo ); - u_mm_file_reg_diag_data_buf_bsn : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAG_DATA_BUFFER_BSN") - port map(mm_rst, mm_clk, reg_diag_data_buf_bsn_copi, reg_diag_data_buf_bsn_cipo ); - - u_mm_file_ram_st_histogram : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_HISTOGRAM") - port map(mm_rst, mm_clk, ram_st_histogram_copi, ram_st_histogram_cipo ); - - u_mm_file_reg_aduh_monitor : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_ADUH_MONITOR") - port map(mm_rst, mm_clk, reg_aduh_monitor_copi, reg_aduh_monitor_cipo ); - - u_mm_file_ram_st_sst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_SST") - port map(mm_rst, mm_clk, ram_st_sst_copi, ram_st_sst_cipo ); - - u_mm_file_ram_fil_coefs : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_FIL_COEFS") - port map(mm_rst, mm_clk, ram_fil_coefs_copi, ram_fil_coefs_cipo ); - - u_mm_file_reg_si : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SI") - port map(mm_rst, mm_clk, reg_si_copi, reg_si_cipo ); - - u_mm_file_ram_equalizer_gains : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS") - port map(mm_rst, mm_clk, ram_equalizer_gains_copi, ram_equalizer_gains_cipo ); - u_mm_file_ram_equalizer_gains_cross : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS_CROSS") - port map(mm_rst, mm_clk, ram_equalizer_gains_cross_copi, ram_equalizer_gains_cross_cipo ); - - u_mm_file_reg_dp_selector : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SELECTOR") - port map(mm_rst, mm_clk, reg_dp_selector_copi, reg_dp_selector_cipo ); - - u_mm_file_reg_sdp_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SDP_INFO") - port map(mm_rst, mm_clk, reg_sdp_info_copi, reg_sdp_info_cipo ); - - u_mm_file_reg_ring_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_INFO") - port map(mm_rst, mm_clk, reg_ring_info_copi, reg_ring_info_cipo ); - - u_mm_file_ram_ss_ss_wide : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SS_SS_WIDE") - port map(mm_rst, mm_clk, ram_ss_ss_wide_copi, ram_ss_ss_wide_cipo ); - - u_mm_file_ram_bf_weights : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_BF_WEIGHTS") - port map(mm_rst, mm_clk, ram_bf_weights_copi, ram_bf_weights_cipo ); - - u_mm_file_reg_bf_scale : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BF_SCALE") - port map(mm_rst, mm_clk, reg_bf_scale_copi, reg_bf_scale_cipo ); - - u_mm_file_reg_hdr_dat : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_HDR_DAT") - port map(mm_rst, mm_clk, reg_hdr_dat_copi, reg_hdr_dat_cipo ); - - u_mm_file_reg_bdo_destinations : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BDO_DESTINATIONS") - port map(mm_rst, mm_clk, reg_bdo_destinations_copi, reg_bdo_destinations_cipo ); - - u_mm_file_reg_dp_xonoff : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_XONOFF") - port map(mm_rst, mm_clk, reg_dp_xonoff_copi, reg_dp_xonoff_cipo ); - - u_mm_file_ram_st_bst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_BST") - port map(mm_rst, mm_clk, ram_st_bst_copi, ram_st_bst_cipo ); - - u_mm_file_reg_stat_enable_sst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_SST") - port map(mm_rst, mm_clk, reg_stat_enable_sst_copi, reg_stat_enable_sst_cipo ); - - 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_copi, reg_stat_hdr_dat_sst_cipo); - - u_mm_file_reg_stat_enable_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_XST") - port map(mm_rst, mm_clk, reg_stat_enable_xst_copi, reg_stat_enable_xst_cipo ); - - u_mm_file_reg_stat_hdr_info_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_XST") - port map(mm_rst, mm_clk, reg_stat_hdr_dat_xst_copi, reg_stat_hdr_dat_xst_cipo); - - 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_copi, reg_stat_enable_bst_cipo ); - - 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_copi, reg_stat_hdr_dat_bst_cipo); - - u_mm_file_reg_crosslets_info : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_CROSSLETS_INFO") - port map(mm_rst, mm_clk, reg_crosslets_info_copi, reg_crosslets_info_cipo); - - u_mm_file_reg_nof_crosslets : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NOF_CROSSLETS") - port map(mm_rst, mm_clk, reg_nof_crosslets_copi, reg_nof_crosslets_cipo); - - u_mm_file_reg_bsn_sync_scheduler_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SYNC_SCHEDULER_XSUB") - port map(mm_rst, mm_clk, reg_bsn_sync_scheduler_xsub_copi, reg_bsn_sync_scheduler_xsub_cipo); - - u_mm_file_ram_st_xsq : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_XSQ") - port map(mm_rst, mm_clk, ram_st_xsq_copi, ram_st_xsq_cipo); - - u_mm_file_reg_nw_10GbE_mac : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_MAC") - port map(mm_rst, mm_clk, reg_nw_10GbE_mac_copi, reg_nw_10GbE_mac_cipo ); - - u_mm_file_reg_nw_10GbE_eth10g : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_ETH10G") - port map(mm_rst, mm_clk, reg_nw_10GbE_eth10g_copi, reg_nw_10GbE_eth10g_cipo ); - - u_mm_file_reg_bsn_align_v2_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_BF") - port map(mm_rst, mm_clk, reg_bsn_align_v2_bf_copi, reg_bsn_align_v2_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_rx_align_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_bf_copi, reg_bsn_monitor_v2_rx_align_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_aligned_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_bf_copi, reg_bsn_monitor_v2_aligned_bf_cipo ); - - u_mm_file_reg_ring_lane_info_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_BF") - port map(mm_rst, mm_clk, reg_ring_lane_info_bf_copi, reg_ring_lane_info_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_rx_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_bf_copi, reg_bsn_monitor_v2_ring_rx_bf_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_tx_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_BF") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_bf_copi, reg_bsn_monitor_v2_ring_tx_bf_cipo ); - - u_mm_file_reg_dp_block_validate_err_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_BF") - port map(mm_rst, mm_clk, reg_dp_block_validate_err_bf_copi, reg_dp_block_validate_err_bf_cipo ); - - u_mm_file_reg_dp_block_validate_bsn_at_sync_bf : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_BF") - port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_bf_copi, reg_dp_block_validate_bsn_at_sync_bf_cipo ); - - u_mm_file_reg_bsn_align_v2_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_XSUB") - port map(mm_rst, mm_clk, reg_bsn_align_v2_xsub_copi, reg_bsn_align_v2_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_rx_align_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_xsub_copi, reg_bsn_monitor_v2_rx_align_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_aligned_xsub : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_xsub_copi, reg_bsn_monitor_v2_aligned_xsub_cipo ); - - u_mm_file_reg_bsn_monitor_v2_sst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_SST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_sst_offload_copi, reg_bsn_monitor_v2_sst_offload_cipo ); - - u_mm_file_reg_bsn_monitor_v2_bst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_bst_offload_copi, reg_bsn_monitor_v2_bst_offload_cipo ); - - u_mm_file_reg_bsn_monitor_v2_beamlet_output : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BEAMLET_OUTPUT") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_beamlet_output_copi, reg_bsn_monitor_v2_beamlet_output_cipo ); - - u_mm_file_reg_bsn_monitor_v2_xst_offload : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_XST_OFFLOAD") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_xst_offload_copi, reg_bsn_monitor_v2_xst_offload_cipo ); - - u_mm_file_reg_ring_lane_info_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_XST") - port map(mm_rst, mm_clk, reg_ring_lane_info_xst_copi, reg_ring_lane_info_xst_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_rx_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_XST") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_xst_copi, reg_bsn_monitor_v2_ring_rx_xst_cipo ); - - u_mm_file_reg_bsn_monitor_v2_ring_tx_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_XST") - port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_xst_copi, reg_bsn_monitor_v2_ring_tx_xst_cipo ); - - u_mm_file_reg_dp_block_validate_err_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_XST") - port map(mm_rst, mm_clk, reg_dp_block_validate_err_xst_copi, reg_dp_block_validate_err_xst_cipo ); - - u_mm_file_reg_dp_block_validate_bsn_at_sync_xst : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_XST") - port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_xst_copi, reg_dp_block_validate_bsn_at_sync_xst_cipo ); - - u_mm_file_reg_tr_10GbE_mac : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_MAC") - port map(mm_rst, mm_clk, reg_tr_10GbE_mac_copi, reg_tr_10GbE_mac_cipo ); - - u_mm_file_reg_tr_10GbE_eth10g : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_ETH10G") - port map(mm_rst, mm_clk, reg_tr_10GbE_eth10g_copi, reg_tr_10GbE_eth10g_cipo ); - - u_mm_file_ram_scrap : mm_file generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SCRAP") - port map(mm_rst, mm_clk, ram_scrap_copi, ram_scrap_cipo ); + u_mm_file_reg_unb_system_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") + port map(mm_rst, mm_clk, reg_unb_system_info_copi, reg_unb_system_info_cipo); + + u_mm_file_rom_unb_system_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") + port map(mm_rst, mm_clk, rom_unb_system_info_copi, rom_unb_system_info_cipo); + + u_mm_file_reg_wdi : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") + port map(mm_rst, mm_clk, reg_wdi_copi, reg_wdi_cipo); + + u_mm_file_reg_fpga_temp_sens : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_TEMP_SENS") + port map(mm_rst, mm_clk, reg_fpga_temp_sens_copi, reg_fpga_temp_sens_cipo); + + u_mm_file_reg_fpga_voltage_sens : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_VOLTAGE_SENS") + port map(mm_rst, mm_clk, reg_fpga_voltage_sens_copi, reg_fpga_voltage_sens_cipo); + + u_mm_file_reg_ppsh : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_PPS") + port map(mm_rst, mm_clk, reg_ppsh_copi, reg_ppsh_cipo); + + -- Note: the eth1g RAM and TSE buses are only required by unb_osy on the NIOS as they provide the + -- ethernet <-> MM gateway. + u_mm_file_reg_eth : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") + port map(mm_rst, mm_clk, eth1g_reg_copi, eth1g_reg_cipo); + + -- Must use exact g_mm_rd_latency = 1 instead of default 2, because JESD204B IP forces rddata = 0 after it has + -- been read + u_mm_file_jesd204b : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "JESD204B", '1', 1) + port map(mm_rst, mm_clk, jesd204b_copi, jesd204b_cipo); + + u_mm_file_pio_jesd_ctrl : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_JESD_CTRL") + port map(mm_rst, mm_clk, jesd_ctrl_copi, jesd_ctrl_cipo); + + u_mm_file_reg_dp_shiftram : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SHIFTRAM") + port map(mm_rst, mm_clk, reg_dp_shiftram_copi, reg_dp_shiftram_cipo); + + u_mm_file_reg_bsn_source_v2 : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SOURCE_V2") + port map(mm_rst, mm_clk, reg_bsn_source_v2_copi, reg_bsn_source_v2_cipo); + + u_mm_file_reg_bsn_scheduler : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SCHEDULER") + port map(mm_rst, mm_clk, reg_bsn_scheduler_copi, reg_bsn_scheduler_cipo); + + u_mm_file_reg_bsn_monitor_input : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_INPUT") + port map(mm_rst, mm_clk, reg_bsn_monitor_input_copi, reg_bsn_monitor_input_cipo); + + u_mm_file_reg_wg : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WG") + port map(mm_rst, mm_clk, reg_wg_copi, reg_wg_cipo); + u_mm_file_ram_wg : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_WG") + port map(mm_rst, mm_clk, ram_wg_copi, ram_wg_cipo); + + u_mm_file_ram_diag_data_buf_bsn : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DIAG_DATA_BUFFER_BSN") + port map(mm_rst, mm_clk, ram_diag_data_buf_bsn_copi, ram_diag_data_buf_bsn_cipo); + u_mm_file_reg_diag_data_buf_bsn : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAG_DATA_BUFFER_BSN") + port map(mm_rst, mm_clk, reg_diag_data_buf_bsn_copi, reg_diag_data_buf_bsn_cipo); + + u_mm_file_ram_st_histogram : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_HISTOGRAM") + port map(mm_rst, mm_clk, ram_st_histogram_copi, ram_st_histogram_cipo); + + u_mm_file_reg_aduh_monitor : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_ADUH_MONITOR") + port map(mm_rst, mm_clk, reg_aduh_monitor_copi, reg_aduh_monitor_cipo); + + u_mm_file_ram_st_sst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_SST") + port map(mm_rst, mm_clk, ram_st_sst_copi, ram_st_sst_cipo); + + u_mm_file_ram_fil_coefs : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_FIL_COEFS") + port map(mm_rst, mm_clk, ram_fil_coefs_copi, ram_fil_coefs_cipo); + + u_mm_file_reg_si : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SI") + port map(mm_rst, mm_clk, reg_si_copi, reg_si_cipo); + + u_mm_file_ram_equalizer_gains : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS") + port map(mm_rst, mm_clk, ram_equalizer_gains_copi, ram_equalizer_gains_cipo); + u_mm_file_ram_equalizer_gains_cross : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_EQUALIZER_GAINS_CROSS") + port map(mm_rst, mm_clk, ram_equalizer_gains_cross_copi, ram_equalizer_gains_cross_cipo); + + u_mm_file_reg_dp_selector : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SELECTOR") + port map(mm_rst, mm_clk, reg_dp_selector_copi, reg_dp_selector_cipo); + + u_mm_file_reg_sdp_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_SDP_INFO") + port map(mm_rst, mm_clk, reg_sdp_info_copi, reg_sdp_info_cipo); + + u_mm_file_reg_ring_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_INFO") + port map(mm_rst, mm_clk, reg_ring_info_copi, reg_ring_info_cipo); + + u_mm_file_ram_ss_ss_wide : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SS_SS_WIDE") + port map(mm_rst, mm_clk, ram_ss_ss_wide_copi, ram_ss_ss_wide_cipo); + + u_mm_file_ram_bf_weights : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_BF_WEIGHTS") + port map(mm_rst, mm_clk, ram_bf_weights_copi, ram_bf_weights_cipo); + + u_mm_file_reg_bf_scale : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BF_SCALE") + port map(mm_rst, mm_clk, reg_bf_scale_copi, reg_bf_scale_cipo); + + u_mm_file_reg_hdr_dat : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_HDR_DAT") + port map(mm_rst, mm_clk, reg_hdr_dat_copi, reg_hdr_dat_cipo); + + u_mm_file_reg_bdo_destinations : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BDO_DESTINATIONS") + port map(mm_rst, mm_clk, reg_bdo_destinations_copi, reg_bdo_destinations_cipo); + + u_mm_file_reg_dp_xonoff : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_XONOFF") + port map(mm_rst, mm_clk, reg_dp_xonoff_copi, reg_dp_xonoff_cipo); + + u_mm_file_ram_st_bst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_BST") + port map(mm_rst, mm_clk, ram_st_bst_copi, ram_st_bst_cipo); + + u_mm_file_reg_stat_enable_sst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_SST") + port map(mm_rst, mm_clk, reg_stat_enable_sst_copi, reg_stat_enable_sst_cipo); + + 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_copi, reg_stat_hdr_dat_sst_cipo); + + u_mm_file_reg_stat_enable_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_XST") + port map(mm_rst, mm_clk, reg_stat_enable_xst_copi, reg_stat_enable_xst_cipo); + + u_mm_file_reg_stat_hdr_info_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_XST") + port map(mm_rst, mm_clk, reg_stat_hdr_dat_xst_copi, reg_stat_hdr_dat_xst_cipo); + + 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_copi, reg_stat_enable_bst_cipo); + + 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_copi, reg_stat_hdr_dat_bst_cipo); + + u_mm_file_reg_crosslets_info : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_CROSSLETS_INFO") + port map(mm_rst, mm_clk, reg_crosslets_info_copi, reg_crosslets_info_cipo); + + u_mm_file_reg_nof_crosslets : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NOF_CROSSLETS") + port map(mm_rst, mm_clk, reg_nof_crosslets_copi, reg_nof_crosslets_cipo); + + u_mm_file_reg_bsn_sync_scheduler_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_SYNC_SCHEDULER_XSUB") + port map(mm_rst, mm_clk, reg_bsn_sync_scheduler_xsub_copi, reg_bsn_sync_scheduler_xsub_cipo); + + u_mm_file_ram_st_xsq : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_XSQ") + port map(mm_rst, mm_clk, ram_st_xsq_copi, ram_st_xsq_cipo); + + u_mm_file_reg_nw_10GbE_mac : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_MAC") + port map(mm_rst, mm_clk, reg_nw_10GbE_mac_copi, reg_nw_10GbE_mac_cipo); + + u_mm_file_reg_nw_10GbE_eth10g : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_NW_10GBE_ETH10G") + port map(mm_rst, mm_clk, reg_nw_10GbE_eth10g_copi, reg_nw_10GbE_eth10g_cipo); + + u_mm_file_reg_bsn_align_v2_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_BF") + port map(mm_rst, mm_clk, reg_bsn_align_v2_bf_copi, reg_bsn_align_v2_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_rx_align_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RX_ALIGN_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_bf_copi, reg_bsn_monitor_v2_rx_align_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_aligned_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_bf_copi, reg_bsn_monitor_v2_aligned_bf_cipo); + + u_mm_file_reg_ring_lane_info_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_BF") + port map(mm_rst, mm_clk, reg_ring_lane_info_bf_copi, reg_ring_lane_info_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_rx_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_bf_copi, reg_bsn_monitor_v2_ring_rx_bf_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_tx_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_BF") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_bf_copi, reg_bsn_monitor_v2_ring_tx_bf_cipo); + + u_mm_file_reg_dp_block_validate_err_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_BF") + port map(mm_rst, mm_clk, reg_dp_block_validate_err_bf_copi, reg_dp_block_validate_err_bf_cipo); + + u_mm_file_reg_dp_block_validate_bsn_at_sync_bf : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_BF") + port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_bf_copi, reg_dp_block_validate_bsn_at_sync_bf_cipo); + + u_mm_file_reg_bsn_align_v2_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_ALIGN_V2_XSUB") + port map(mm_rst, mm_clk, reg_bsn_align_v2_xsub_copi, reg_bsn_align_v2_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_rx_align_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_rx_align_xsub_copi, reg_bsn_monitor_v2_rx_align_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_aligned_xsub : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_aligned_xsub_copi, reg_bsn_monitor_v2_aligned_xsub_cipo); + + u_mm_file_reg_bsn_monitor_v2_sst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_SST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_sst_offload_copi, reg_bsn_monitor_v2_sst_offload_cipo); + + u_mm_file_reg_bsn_monitor_v2_bst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_BST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_bst_offload_copi, reg_bsn_monitor_v2_bst_offload_cipo); + + u_mm_file_reg_bsn_monitor_v2_beamlet_output : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_BSN_MONITOR_V2_BEAMLET_OUTPUT") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_beamlet_output_copi, reg_bsn_monitor_v2_beamlet_output_cipo); + + u_mm_file_reg_bsn_monitor_v2_xst_offload : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_XST_OFFLOAD") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_xst_offload_copi, reg_bsn_monitor_v2_xst_offload_cipo); + + u_mm_file_reg_ring_lane_info_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_RING_LANE_INFO_XST") + port map(mm_rst, mm_clk, reg_ring_lane_info_xst_copi, reg_ring_lane_info_xst_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_rx_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_RX_XST") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_rx_xst_copi, reg_bsn_monitor_v2_ring_rx_xst_cipo); + + u_mm_file_reg_bsn_monitor_v2_ring_tx_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_BSN_MONITOR_V2_RING_TX_XST") + port map(mm_rst, mm_clk, reg_bsn_monitor_v2_ring_tx_xst_copi, reg_bsn_monitor_v2_ring_tx_xst_cipo); + + u_mm_file_reg_dp_block_validate_err_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_BLOCK_VALIDATE_ERR_XST") + port map(mm_rst, mm_clk, reg_dp_block_validate_err_xst_copi, reg_dp_block_validate_err_xst_cipo); + + u_mm_file_reg_dp_block_validate_bsn_at_sync_xst : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & + "REG_DP_BLOCK_VALIDATE_BSN_AT_SYNC_XST") + port map(mm_rst, mm_clk, reg_dp_block_validate_bsn_at_sync_xst_copi, reg_dp_block_validate_bsn_at_sync_xst_cipo); + + u_mm_file_reg_tr_10GbE_mac : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_MAC") + port map(mm_rst, mm_clk, reg_tr_10GbE_mac_copi, reg_tr_10GbE_mac_cipo); + + u_mm_file_reg_tr_10GbE_eth10g : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE_ETH10G") + port map(mm_rst, mm_clk, reg_tr_10GbE_eth10g_copi, reg_tr_10GbE_eth10g_cipo); + + u_mm_file_ram_scrap : mm_file + generic map(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SCRAP") + port map(mm_rst, mm_clk, ram_scrap_copi, ram_scrap_cipo); ---------------------------------------------------------------------------- -- Procedure that polls a sim control file that can be used to e.g. get -- the simulation time in ns @@ -561,198 +640,204 @@ begin u_qsys : qsys_lofar2_unb2c_sdp_station port map ( - clk_clk => mm_clk, - reset_reset_n => i_reset_n, + clk_clk => mm_clk, + reset_reset_n => i_reset_n, -- the_pio_wdi: toggled by NIOS II application unb_osy. Connects to WDI via ctrl_unb2c_board. - pio_wdi_external_connection_export => pout_wdi, - - avs_eth_0_reset_export => eth1g_mm_rst, - avs_eth_0_clk_export => OPEN, - avs_eth_0_tse_address_export => eth1g_tse_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_tse_adr_w - 1 downto 0), - avs_eth_0_tse_write_export => eth1g_tse_copi.wr, - avs_eth_0_tse_read_export => eth1g_tse_copi.rd, - avs_eth_0_tse_writedata_export => eth1g_tse_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_tse_readdata_export => eth1g_tse_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_tse_waitrequest_export => eth1g_tse_cipo.waitrequest, - avs_eth_0_reg_address_export => eth1g_reg_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_eth_adr_w - 1 downto 0), - avs_eth_0_reg_write_export => eth1g_reg_copi.wr, - avs_eth_0_reg_read_export => eth1g_reg_copi.rd, - avs_eth_0_reg_writedata_export => eth1g_reg_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_reg_readdata_export => eth1g_reg_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_ram_address_export => eth1g_ram_copi.address(c_unb2c_board_peripherals_mm_reg_default.ram_eth_adr_w - 1 downto 0), - avs_eth_0_ram_write_export => eth1g_ram_copi.wr, - avs_eth_0_ram_read_export => eth1g_ram_copi.rd, - avs_eth_0_ram_writedata_export => eth1g_ram_copi.wrdata(c_word_w - 1 downto 0), - avs_eth_0_ram_readdata_export => eth1g_ram_cipo.rddata(c_word_w - 1 downto 0), - avs_eth_0_irq_export => eth1g_reg_interrupt, - - reg_fpga_temp_sens_reset_export => OPEN, - reg_fpga_temp_sens_clk_export => OPEN, - reg_fpga_temp_sens_address_export => reg_fpga_temp_sens_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_fpga_temp_sens_adr_w - 1 downto 0), - reg_fpga_temp_sens_write_export => reg_fpga_temp_sens_copi.wr, - reg_fpga_temp_sens_writedata_export => reg_fpga_temp_sens_copi.wrdata(c_word_w - 1 downto 0), - reg_fpga_temp_sens_read_export => reg_fpga_temp_sens_copi.rd, - reg_fpga_temp_sens_readdata_export => reg_fpga_temp_sens_cipo.rddata(c_word_w - 1 downto 0), - - reg_fpga_voltage_sens_reset_export => OPEN, - reg_fpga_voltage_sens_clk_export => OPEN, - reg_fpga_voltage_sens_address_export => reg_fpga_voltage_sens_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_fpga_voltage_sens_adr_w - 1 downto 0), - reg_fpga_voltage_sens_write_export => reg_fpga_voltage_sens_copi.wr, - reg_fpga_voltage_sens_writedata_export => reg_fpga_voltage_sens_copi.wrdata(c_word_w - 1 downto 0), - reg_fpga_voltage_sens_read_export => reg_fpga_voltage_sens_copi.rd, - reg_fpga_voltage_sens_readdata_export => reg_fpga_voltage_sens_cipo.rddata(c_word_w - 1 downto 0), - - rom_system_info_reset_export => OPEN, - rom_system_info_clk_export => OPEN, + pio_wdi_external_connection_export => pout_wdi, + + avs_eth_0_reset_export => eth1g_mm_rst, + avs_eth_0_clk_export => OPEN, + avs_eth_0_tse_address_export => eth1g_tse_copi.address(c_unb2_mm_reg_default.reg_tse_adr_w - 1 downto 0), + avs_eth_0_tse_write_export => eth1g_tse_copi.wr, + avs_eth_0_tse_read_export => eth1g_tse_copi.rd, + avs_eth_0_tse_writedata_export => eth1g_tse_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_tse_readdata_export => eth1g_tse_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_tse_waitrequest_export => eth1g_tse_cipo.waitrequest, + avs_eth_0_reg_address_export => eth1g_reg_copi.address(c_unb2_mm_reg_default.reg_eth_adr_w - 1 downto 0), + avs_eth_0_reg_write_export => eth1g_reg_copi.wr, + avs_eth_0_reg_read_export => eth1g_reg_copi.rd, + avs_eth_0_reg_writedata_export => eth1g_reg_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_reg_readdata_export => eth1g_reg_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_ram_address_export => eth1g_ram_copi.address(c_unb2_mm_reg_default.ram_eth_adr_w - 1 downto 0), + avs_eth_0_ram_write_export => eth1g_ram_copi.wr, + avs_eth_0_ram_read_export => eth1g_ram_copi.rd, + avs_eth_0_ram_writedata_export => eth1g_ram_copi.wrdata(c_word_w - 1 downto 0), + avs_eth_0_ram_readdata_export => eth1g_ram_cipo.rddata(c_word_w - 1 downto 0), + avs_eth_0_irq_export => eth1g_reg_interrupt, + + reg_fpga_temp_sens_reset_export => OPEN, + reg_fpga_temp_sens_clk_export => OPEN, + reg_fpga_temp_sens_address_export => reg_fpga_temp_sens_copi.address( + c_unb2_mm_reg_default.reg_fpga_temp_sens_adr_w - 1 downto 0), + reg_fpga_temp_sens_write_export => reg_fpga_temp_sens_copi.wr, + reg_fpga_temp_sens_writedata_export => reg_fpga_temp_sens_copi.wrdata(c_word_w - 1 downto 0), + reg_fpga_temp_sens_read_export => reg_fpga_temp_sens_copi.rd, + reg_fpga_temp_sens_readdata_export => reg_fpga_temp_sens_cipo.rddata(c_word_w - 1 downto 0), + + reg_fpga_voltage_sens_reset_export => OPEN, + reg_fpga_voltage_sens_clk_export => OPEN, + reg_fpga_voltage_sens_address_export => reg_fpga_voltage_sens_copi.address( + c_unb2_mm_reg_default.reg_fpga_voltage_sens_adr_w - 1 downto 0), + reg_fpga_voltage_sens_write_export => reg_fpga_voltage_sens_copi.wr, + reg_fpga_voltage_sens_writedata_export => reg_fpga_voltage_sens_copi.wrdata(c_word_w - 1 downto 0), + reg_fpga_voltage_sens_read_export => reg_fpga_voltage_sens_copi.rd, + reg_fpga_voltage_sens_readdata_export => reg_fpga_voltage_sens_cipo.rddata(c_word_w - 1 downto 0), + + rom_system_info_reset_export => OPEN, + rom_system_info_clk_export => OPEN, -- ToDo: This has changed in the peripherals package --- rom_system_info_address_export => rom_unb_system_info_copi.address(9 DOWNTO 0), - rom_system_info_address_export => rom_unb_system_info_copi.address(c_unb2c_board_peripherals_mm_reg_default.rom_unb_system_info_adr_w - 1 downto 0), - rom_system_info_write_export => rom_unb_system_info_copi.wr, - rom_system_info_writedata_export => rom_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), - rom_system_info_read_export => rom_unb_system_info_copi.rd, - rom_system_info_readdata_export => rom_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), - - pio_system_info_reset_export => OPEN, - pio_system_info_clk_export => OPEN, - pio_system_info_address_export => reg_unb_system_info_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_unb_system_info_adr_w - 1 downto 0), - pio_system_info_write_export => reg_unb_system_info_copi.wr, - pio_system_info_writedata_export => reg_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), - pio_system_info_read_export => reg_unb_system_info_copi.rd, - pio_system_info_readdata_export => reg_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), - - pio_pps_reset_export => OPEN, - pio_pps_clk_export => OPEN, - pio_pps_address_export => reg_ppsh_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_ppsh_adr_w - 1 downto 0), - pio_pps_write_export => reg_ppsh_copi.wr, - pio_pps_writedata_export => reg_ppsh_copi.wrdata(c_word_w - 1 downto 0), - pio_pps_read_export => reg_ppsh_copi.rd, - pio_pps_readdata_export => reg_ppsh_cipo.rddata(c_word_w - 1 downto 0), - - reg_wdi_reset_export => OPEN, - reg_wdi_clk_export => OPEN, - reg_wdi_address_export => reg_wdi_copi.address(0 downto 0), - reg_wdi_write_export => reg_wdi_copi.wr, - reg_wdi_writedata_export => reg_wdi_copi.wrdata(c_word_w - 1 downto 0), - reg_wdi_read_export => reg_wdi_copi.rd, - reg_wdi_readdata_export => reg_wdi_cipo.rddata(c_word_w - 1 downto 0), - - reg_remu_reset_export => OPEN, - reg_remu_clk_export => OPEN, - reg_remu_address_export => reg_remu_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_remu_adr_w - 1 downto 0), - reg_remu_write_export => reg_remu_copi.wr, - reg_remu_writedata_export => reg_remu_copi.wrdata(c_word_w - 1 downto 0), - reg_remu_read_export => reg_remu_copi.rd, - reg_remu_readdata_export => reg_remu_cipo.rddata(c_word_w - 1 downto 0), - - jesd204b_reset_export => OPEN, - jesd204b_clk_export => OPEN, - jesd204b_address_export => jesd204b_copi.address(c_sdp_jesd204b_addr_w - 1 downto 0), - jesd204b_write_export => jesd204b_copi.wr, - jesd204b_writedata_export => jesd204b_copi.wrdata(c_word_w - 1 downto 0), - jesd204b_read_export => jesd204b_copi.rd, - jesd204b_readdata_export => jesd204b_cipo.rddata(c_word_w - 1 downto 0), - - pio_jesd_ctrl_reset_export => OPEN, - pio_jesd_ctrl_clk_export => OPEN, - pio_jesd_ctrl_address_export => jesd_ctrl_copi.address(c_sdp_jesd_ctrl_addr_w - 1 downto 0), - pio_jesd_ctrl_write_export => jesd_ctrl_copi.wr, - pio_jesd_ctrl_writedata_export => jesd_ctrl_copi.wrdata(c_word_w - 1 downto 0), - pio_jesd_ctrl_read_export => jesd_ctrl_copi.rd, - pio_jesd_ctrl_readdata_export => jesd_ctrl_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_input_address_export => reg_bsn_monitor_input_copi.address(c_sdp_reg_bsn_monitor_input_addr_w - 1 downto 0), - reg_bsn_monitor_input_clk_export => OPEN, - reg_bsn_monitor_input_read_export => reg_bsn_monitor_input_copi.rd, - reg_bsn_monitor_input_readdata_export => reg_bsn_monitor_input_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_monitor_input_reset_export => OPEN, - reg_bsn_monitor_input_write_export => reg_bsn_monitor_input_copi.wr, - reg_bsn_monitor_input_writedata_export => reg_bsn_monitor_input_copi.wrdata(c_word_w - 1 downto 0), +-- rom_system_info_address_export => rom_unb_system_info_copi.address(9 DOWNTO 0), + rom_system_info_address_export => rom_unb_system_info_copi.address( + c_unb2_mm_reg_default.rom_unb_system_info_adr_w - 1 downto 0), + rom_system_info_write_export => rom_unb_system_info_copi.wr, + rom_system_info_writedata_export => rom_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), + rom_system_info_read_export => rom_unb_system_info_copi.rd, + rom_system_info_readdata_export => rom_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), + + pio_system_info_reset_export => OPEN, + pio_system_info_clk_export => OPEN, + pio_system_info_address_export => reg_unb_system_info_copi.address( + c_unb2_mm_reg_default.reg_unb_system_info_adr_w - 1 downto 0), + pio_system_info_write_export => reg_unb_system_info_copi.wr, + pio_system_info_writedata_export => reg_unb_system_info_copi.wrdata(c_word_w - 1 downto 0), + pio_system_info_read_export => reg_unb_system_info_copi.rd, + pio_system_info_readdata_export => reg_unb_system_info_cipo.rddata(c_word_w - 1 downto 0), + + pio_pps_reset_export => OPEN, + pio_pps_clk_export => OPEN, + pio_pps_address_export => reg_ppsh_copi.address(c_unb2_mm_reg_default.reg_ppsh_adr_w - 1 downto 0), + pio_pps_write_export => reg_ppsh_copi.wr, + pio_pps_writedata_export => reg_ppsh_copi.wrdata(c_word_w - 1 downto 0), + pio_pps_read_export => reg_ppsh_copi.rd, + pio_pps_readdata_export => reg_ppsh_cipo.rddata(c_word_w - 1 downto 0), + + reg_wdi_reset_export => OPEN, + reg_wdi_clk_export => OPEN, + reg_wdi_address_export => reg_wdi_copi.address(0 downto 0), + reg_wdi_write_export => reg_wdi_copi.wr, + reg_wdi_writedata_export => reg_wdi_copi.wrdata(c_word_w - 1 downto 0), + reg_wdi_read_export => reg_wdi_copi.rd, + reg_wdi_readdata_export => reg_wdi_cipo.rddata(c_word_w - 1 downto 0), + + reg_remu_reset_export => OPEN, + reg_remu_clk_export => OPEN, + reg_remu_address_export => reg_remu_copi.address(c_unb2_mm_reg_default.reg_remu_adr_w - 1 downto 0), + reg_remu_write_export => reg_remu_copi.wr, + reg_remu_writedata_export => reg_remu_copi.wrdata(c_word_w - 1 downto 0), + reg_remu_read_export => reg_remu_copi.rd, + reg_remu_readdata_export => reg_remu_cipo.rddata(c_word_w - 1 downto 0), + + jesd204b_reset_export => OPEN, + jesd204b_clk_export => OPEN, + jesd204b_address_export => jesd204b_copi.address(c_sdp_jesd204b_addr_w - 1 downto 0), + jesd204b_write_export => jesd204b_copi.wr, + jesd204b_writedata_export => jesd204b_copi.wrdata(c_word_w - 1 downto 0), + jesd204b_read_export => jesd204b_copi.rd, + jesd204b_readdata_export => jesd204b_cipo.rddata(c_word_w - 1 downto 0), + + pio_jesd_ctrl_reset_export => OPEN, + pio_jesd_ctrl_clk_export => OPEN, + pio_jesd_ctrl_address_export => jesd_ctrl_copi.address(c_sdp_jesd_ctrl_addr_w - 1 downto 0), + pio_jesd_ctrl_write_export => jesd_ctrl_copi.wr, + pio_jesd_ctrl_writedata_export => jesd_ctrl_copi.wrdata(c_word_w - 1 downto 0), + pio_jesd_ctrl_read_export => jesd_ctrl_copi.rd, + pio_jesd_ctrl_readdata_export => jesd_ctrl_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_monitor_input_address_export => reg_bsn_monitor_input_copi.address( + c_sdp_reg_bsn_monitor_input_addr_w - 1 downto 0), + reg_bsn_monitor_input_clk_export => OPEN, + reg_bsn_monitor_input_read_export => reg_bsn_monitor_input_copi.rd, + reg_bsn_monitor_input_readdata_export => reg_bsn_monitor_input_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_input_reset_export => OPEN, + reg_bsn_monitor_input_write_export => reg_bsn_monitor_input_copi.wr, + reg_bsn_monitor_input_writedata_export => reg_bsn_monitor_input_copi.wrdata(c_word_w - 1 downto 0), -- waveform generators (multiplexed) - reg_wg_clk_export => OPEN, - reg_wg_reset_export => OPEN, - reg_wg_address_export => reg_wg_copi.address(c_sdp_reg_wg_addr_w - 1 downto 0), - reg_wg_read_export => reg_wg_copi.rd, - reg_wg_readdata_export => reg_wg_cipo.rddata(c_word_w - 1 downto 0), - reg_wg_write_export => reg_wg_copi.wr, - reg_wg_writedata_export => reg_wg_copi.wrdata(c_word_w - 1 downto 0), - - ram_wg_clk_export => OPEN, - ram_wg_reset_export => OPEN, - ram_wg_address_export => ram_wg_copi.address(c_sdp_ram_wg_addr_w - 1 downto 0), - ram_wg_read_export => ram_wg_copi.rd, - ram_wg_readdata_export => ram_wg_cipo.rddata(c_word_w - 1 downto 0), - ram_wg_write_export => ram_wg_copi.wr, - ram_wg_writedata_export => ram_wg_copi.wrdata(c_word_w - 1 downto 0), - - reg_dp_shiftram_clk_export => OPEN, - reg_dp_shiftram_reset_export => OPEN, - reg_dp_shiftram_address_export => reg_dp_shiftram_copi.address(c_sdp_reg_dp_shiftram_addr_w - 1 downto 0), - reg_dp_shiftram_read_export => reg_dp_shiftram_copi.rd, - reg_dp_shiftram_readdata_export => reg_dp_shiftram_cipo.rddata(c_word_w - 1 downto 0), - reg_dp_shiftram_write_export => reg_dp_shiftram_copi.wr, - reg_dp_shiftram_writedata_export => reg_dp_shiftram_copi.wrdata(c_word_w - 1 downto 0), - - reg_bsn_source_v2_clk_export => OPEN, - reg_bsn_source_v2_reset_export => OPEN, - reg_bsn_source_v2_address_export => reg_bsn_source_v2_copi.address(c_sdp_reg_bsn_source_v2_addr_w - 1 downto 0), - reg_bsn_source_v2_read_export => reg_bsn_source_v2_copi.rd, - reg_bsn_source_v2_readdata_export => reg_bsn_source_v2_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_source_v2_write_export => reg_bsn_source_v2_copi.wr, - reg_bsn_source_v2_writedata_export => reg_bsn_source_v2_copi.wrdata(c_word_w - 1 downto 0), - - reg_bsn_scheduler_clk_export => OPEN, - reg_bsn_scheduler_reset_export => OPEN, - reg_bsn_scheduler_address_export => reg_bsn_scheduler_copi.address(c_sdp_reg_bsn_scheduler_addr_w - 1 downto 0), - reg_bsn_scheduler_read_export => reg_bsn_scheduler_copi.rd, - reg_bsn_scheduler_readdata_export => reg_bsn_scheduler_cipo.rddata(c_word_w - 1 downto 0), - reg_bsn_scheduler_write_export => reg_bsn_scheduler_copi.wr, - reg_bsn_scheduler_writedata_export => reg_bsn_scheduler_copi.wrdata(c_word_w - 1 downto 0), - - reg_epcs_reset_export => OPEN, - reg_epcs_clk_export => OPEN, - reg_epcs_address_export => reg_epcs_copi.address(c_unb2c_board_peripherals_mm_reg_default.reg_epcs_adr_w - 1 downto 0), - reg_epcs_write_export => reg_epcs_copi.wr, - reg_epcs_writedata_export => reg_epcs_copi.wrdata(c_word_w - 1 downto 0), - reg_epcs_read_export => reg_epcs_copi.rd, - reg_epcs_readdata_export => reg_epcs_cipo.rddata(c_word_w - 1 downto 0), - - reg_dpmm_ctrl_reset_export => OPEN, - reg_dpmm_ctrl_clk_export => OPEN, - reg_dpmm_ctrl_address_export => reg_dpmm_ctrl_copi.address(0 downto 0), - reg_dpmm_ctrl_write_export => reg_dpmm_ctrl_copi.wr, - reg_dpmm_ctrl_writedata_export => reg_dpmm_ctrl_copi.wrdata(c_word_w - 1 downto 0), - reg_dpmm_ctrl_read_export => reg_dpmm_ctrl_copi.rd, - reg_dpmm_ctrl_readdata_export => reg_dpmm_ctrl_cipo.rddata(c_word_w - 1 downto 0), - - reg_mmdp_data_reset_export => OPEN, - reg_mmdp_data_clk_export => OPEN, - reg_mmdp_data_address_export => reg_mmdp_data_copi.address(0 downto 0), - reg_mmdp_data_write_export => reg_mmdp_data_copi.wr, - reg_mmdp_data_writedata_export => reg_mmdp_data_copi.wrdata(c_word_w - 1 downto 0), - reg_mmdp_data_read_export => reg_mmdp_data_copi.rd, - reg_mmdp_data_readdata_export => reg_mmdp_data_cipo.rddata(c_word_w - 1 downto 0), - - reg_dpmm_data_reset_export => OPEN, - reg_dpmm_data_clk_export => OPEN, - reg_dpmm_data_address_export => reg_dpmm_data_copi.address(0 downto 0), - reg_dpmm_data_read_export => reg_dpmm_data_copi.rd, - reg_dpmm_data_readdata_export => reg_dpmm_data_cipo.rddata(c_word_w - 1 downto 0), - reg_dpmm_data_write_export => reg_dpmm_data_copi.wr, - reg_dpmm_data_writedata_export => reg_dpmm_data_copi.wrdata(c_word_w - 1 downto 0), - - reg_mmdp_ctrl_reset_export => OPEN, - reg_mmdp_ctrl_clk_export => OPEN, - reg_mmdp_ctrl_address_export => reg_mmdp_ctrl_copi.address(0 downto 0), - reg_mmdp_ctrl_read_export => reg_mmdp_ctrl_copi.rd, - reg_mmdp_ctrl_readdata_export => reg_mmdp_ctrl_cipo.rddata(c_word_w - 1 downto 0), - reg_mmdp_ctrl_write_export => reg_mmdp_ctrl_copi.wr, - reg_mmdp_ctrl_writedata_export => reg_mmdp_ctrl_copi.wrdata(c_word_w - 1 downto 0), + reg_wg_clk_export => OPEN, + reg_wg_reset_export => OPEN, + reg_wg_address_export => reg_wg_copi.address(c_sdp_reg_wg_addr_w - 1 downto 0), + reg_wg_read_export => reg_wg_copi.rd, + reg_wg_readdata_export => reg_wg_cipo.rddata(c_word_w - 1 downto 0), + reg_wg_write_export => reg_wg_copi.wr, + reg_wg_writedata_export => reg_wg_copi.wrdata(c_word_w - 1 downto 0), + + ram_wg_clk_export => OPEN, + ram_wg_reset_export => OPEN, + ram_wg_address_export => ram_wg_copi.address(c_sdp_ram_wg_addr_w - 1 downto 0), + ram_wg_read_export => ram_wg_copi.rd, + ram_wg_readdata_export => ram_wg_cipo.rddata(c_word_w - 1 downto 0), + ram_wg_write_export => ram_wg_copi.wr, + ram_wg_writedata_export => ram_wg_copi.wrdata(c_word_w - 1 downto 0), + + reg_dp_shiftram_clk_export => OPEN, + reg_dp_shiftram_reset_export => OPEN, + reg_dp_shiftram_address_export => reg_dp_shiftram_copi.address(c_sdp_reg_dp_shiftram_addr_w - 1 downto 0), + reg_dp_shiftram_read_export => reg_dp_shiftram_copi.rd, + reg_dp_shiftram_readdata_export => reg_dp_shiftram_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_shiftram_write_export => reg_dp_shiftram_copi.wr, + reg_dp_shiftram_writedata_export => reg_dp_shiftram_copi.wrdata(c_word_w - 1 downto 0), + + reg_bsn_source_v2_clk_export => OPEN, + reg_bsn_source_v2_reset_export => OPEN, + reg_bsn_source_v2_address_export => reg_bsn_source_v2_copi.address(c_sdp_reg_bsn_source_v2_addr_w - 1 downto 0), + reg_bsn_source_v2_read_export => reg_bsn_source_v2_copi.rd, + reg_bsn_source_v2_readdata_export => reg_bsn_source_v2_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_source_v2_write_export => reg_bsn_source_v2_copi.wr, + reg_bsn_source_v2_writedata_export => reg_bsn_source_v2_copi.wrdata(c_word_w - 1 downto 0), + + reg_bsn_scheduler_clk_export => OPEN, + reg_bsn_scheduler_reset_export => OPEN, + reg_bsn_scheduler_address_export => reg_bsn_scheduler_copi.address(c_sdp_reg_bsn_scheduler_addr_w - 1 downto 0), + reg_bsn_scheduler_read_export => reg_bsn_scheduler_copi.rd, + reg_bsn_scheduler_readdata_export => reg_bsn_scheduler_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_scheduler_write_export => reg_bsn_scheduler_copi.wr, + reg_bsn_scheduler_writedata_export => reg_bsn_scheduler_copi.wrdata(c_word_w - 1 downto 0), + + reg_epcs_reset_export => OPEN, + reg_epcs_clk_export => OPEN, + reg_epcs_address_export => reg_epcs_copi.address(c_unb2_mm_reg_default.reg_epcs_adr_w - 1 downto 0), + reg_epcs_write_export => reg_epcs_copi.wr, + reg_epcs_writedata_export => reg_epcs_copi.wrdata(c_word_w - 1 downto 0), + reg_epcs_read_export => reg_epcs_copi.rd, + reg_epcs_readdata_export => reg_epcs_cipo.rddata(c_word_w - 1 downto 0), + + reg_dpmm_ctrl_reset_export => OPEN, + reg_dpmm_ctrl_clk_export => OPEN, + reg_dpmm_ctrl_address_export => reg_dpmm_ctrl_copi.address(0 downto 0), + reg_dpmm_ctrl_write_export => reg_dpmm_ctrl_copi.wr, + reg_dpmm_ctrl_writedata_export => reg_dpmm_ctrl_copi.wrdata(c_word_w - 1 downto 0), + reg_dpmm_ctrl_read_export => reg_dpmm_ctrl_copi.rd, + reg_dpmm_ctrl_readdata_export => reg_dpmm_ctrl_cipo.rddata(c_word_w - 1 downto 0), + + reg_mmdp_data_reset_export => OPEN, + reg_mmdp_data_clk_export => OPEN, + reg_mmdp_data_address_export => reg_mmdp_data_copi.address(0 downto 0), + reg_mmdp_data_write_export => reg_mmdp_data_copi.wr, + reg_mmdp_data_writedata_export => reg_mmdp_data_copi.wrdata(c_word_w - 1 downto 0), + reg_mmdp_data_read_export => reg_mmdp_data_copi.rd, + reg_mmdp_data_readdata_export => reg_mmdp_data_cipo.rddata(c_word_w - 1 downto 0), + + reg_dpmm_data_reset_export => OPEN, + reg_dpmm_data_clk_export => OPEN, + reg_dpmm_data_address_export => reg_dpmm_data_copi.address(0 downto 0), + reg_dpmm_data_read_export => reg_dpmm_data_copi.rd, + reg_dpmm_data_readdata_export => reg_dpmm_data_cipo.rddata(c_word_w - 1 downto 0), + reg_dpmm_data_write_export => reg_dpmm_data_copi.wr, + reg_dpmm_data_writedata_export => reg_dpmm_data_copi.wrdata(c_word_w - 1 downto 0), + + reg_mmdp_ctrl_reset_export => OPEN, + reg_mmdp_ctrl_clk_export => OPEN, + reg_mmdp_ctrl_address_export => reg_mmdp_ctrl_copi.address(0 downto 0), + reg_mmdp_ctrl_read_export => reg_mmdp_ctrl_copi.rd, + reg_mmdp_ctrl_readdata_export => reg_mmdp_ctrl_cipo.rddata(c_word_w - 1 downto 0), + reg_mmdp_ctrl_write_export => reg_mmdp_ctrl_copi.wr, + reg_mmdp_ctrl_writedata_export => reg_mmdp_ctrl_copi.wrdata(c_word_w - 1 downto 0), ram_diag_data_buffer_bsn_clk_export => OPEN, ram_diag_data_buffer_bsn_reset_export => OPEN, - ram_diag_data_buffer_bsn_address_export => ram_diag_data_buf_bsn_copi.address(c_sdp_ram_diag_data_buf_bsn_addr_w - 1 downto 0), + ram_diag_data_buffer_bsn_address_export => ram_diag_data_buf_bsn_copi.address( + c_sdp_ram_diag_data_buf_bsn_addr_w - 1 downto 0), ram_diag_data_buffer_bsn_write_export => ram_diag_data_buf_bsn_copi.wr, ram_diag_data_buffer_bsn_writedata_export => ram_diag_data_buf_bsn_copi.wrdata(c_word_w - 1 downto 0), ram_diag_data_buffer_bsn_read_export => ram_diag_data_buf_bsn_copi.rd, @@ -760,351 +845,399 @@ begin reg_diag_data_buffer_bsn_reset_export => OPEN, reg_diag_data_buffer_bsn_clk_export => OPEN, - reg_diag_data_buffer_bsn_address_export => reg_diag_data_buf_bsn_copi.address(c_sdp_reg_diag_data_buf_bsn_addr_w - 1 downto 0), + reg_diag_data_buffer_bsn_address_export => reg_diag_data_buf_bsn_copi.address( + c_sdp_reg_diag_data_buf_bsn_addr_w - 1 downto 0), reg_diag_data_buffer_bsn_write_export => reg_diag_data_buf_bsn_copi.wr, reg_diag_data_buffer_bsn_writedata_export => reg_diag_data_buf_bsn_copi.wrdata(c_word_w - 1 downto 0), reg_diag_data_buffer_bsn_read_export => reg_diag_data_buf_bsn_copi.rd, reg_diag_data_buffer_bsn_readdata_export => reg_diag_data_buf_bsn_cipo.rddata(c_word_w - 1 downto 0), - ram_st_histogram_clk_export => OPEN, - ram_st_histogram_reset_export => OPEN, - ram_st_histogram_address_export => ram_st_histogram_copi.address(c_sdp_ram_st_histogram_addr_w - 1 downto 0), - ram_st_histogram_write_export => ram_st_histogram_copi.wr, - ram_st_histogram_writedata_export => ram_st_histogram_copi.wrdata(c_word_w - 1 downto 0), - ram_st_histogram_read_export => ram_st_histogram_copi.rd, - ram_st_histogram_readdata_export => ram_st_histogram_cipo.rddata(c_word_w - 1 downto 0), - - reg_aduh_monitor_reset_export => OPEN, - reg_aduh_monitor_clk_export => OPEN, - reg_aduh_monitor_address_export => reg_aduh_monitor_copi.address(c_sdp_reg_aduh_monitor_addr_w - 1 downto 0), - reg_aduh_monitor_write_export => reg_aduh_monitor_copi.wr, - reg_aduh_monitor_writedata_export => reg_aduh_monitor_copi.wrdata(c_word_w - 1 downto 0), - reg_aduh_monitor_read_export => reg_aduh_monitor_copi.rd, - reg_aduh_monitor_readdata_export => reg_aduh_monitor_cipo.rddata(c_word_w - 1 downto 0), - - ram_fil_coefs_clk_export => OPEN, - ram_fil_coefs_reset_export => OPEN, - ram_fil_coefs_address_export => ram_fil_coefs_copi.address(c_sdp_ram_fil_coefs_addr_w - 1 downto 0), - ram_fil_coefs_write_export => ram_fil_coefs_copi.wr, - ram_fil_coefs_writedata_export => ram_fil_coefs_copi.wrdata(c_word_w - 1 downto 0), - ram_fil_coefs_read_export => ram_fil_coefs_copi.rd, - ram_fil_coefs_readdata_export => ram_fil_coefs_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_sst_clk_export => OPEN, - ram_st_sst_reset_export => OPEN, - ram_st_sst_address_export => ram_st_sst_copi.address(c_sdp_ram_st_sst_addr_w - 1 downto 0), - ram_st_sst_write_export => ram_st_sst_copi.wr, - ram_st_sst_writedata_export => ram_st_sst_copi.wrdata(c_word_w - 1 downto 0), - ram_st_sst_read_export => ram_st_sst_copi.rd, - ram_st_sst_readdata_export => ram_st_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_si_clk_export => OPEN, - reg_si_reset_export => OPEN, - reg_si_address_export => reg_si_copi.address(c_sdp_reg_si_addr_w - 1 downto 0), - reg_si_write_export => reg_si_copi.wr, - reg_si_writedata_export => reg_si_copi.wrdata(c_word_w - 1 downto 0), - reg_si_read_export => reg_si_copi.rd, - reg_si_readdata_export => reg_si_cipo.rddata(c_word_w - 1 downto 0), - - ram_equalizer_gains_clk_export => OPEN, - ram_equalizer_gains_reset_export => OPEN, - ram_equalizer_gains_address_export => ram_equalizer_gains_copi.address(c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), - ram_equalizer_gains_write_export => ram_equalizer_gains_copi.wr, - ram_equalizer_gains_writedata_export => ram_equalizer_gains_copi.wrdata(c_word_w - 1 downto 0), - ram_equalizer_gains_read_export => ram_equalizer_gains_copi.rd, - ram_equalizer_gains_readdata_export => ram_equalizer_gains_cipo.rddata(c_word_w - 1 downto 0), + ram_st_histogram_clk_export => OPEN, + ram_st_histogram_reset_export => OPEN, + ram_st_histogram_address_export => ram_st_histogram_copi.address(c_sdp_ram_st_histogram_addr_w - 1 downto 0), + ram_st_histogram_write_export => ram_st_histogram_copi.wr, + ram_st_histogram_writedata_export => ram_st_histogram_copi.wrdata(c_word_w - 1 downto 0), + ram_st_histogram_read_export => ram_st_histogram_copi.rd, + ram_st_histogram_readdata_export => ram_st_histogram_cipo.rddata(c_word_w - 1 downto 0), + + reg_aduh_monitor_reset_export => OPEN, + reg_aduh_monitor_clk_export => OPEN, + reg_aduh_monitor_address_export => reg_aduh_monitor_copi.address(c_sdp_reg_aduh_monitor_addr_w - 1 downto 0), + reg_aduh_monitor_write_export => reg_aduh_monitor_copi.wr, + reg_aduh_monitor_writedata_export => reg_aduh_monitor_copi.wrdata(c_word_w - 1 downto 0), + reg_aduh_monitor_read_export => reg_aduh_monitor_copi.rd, + reg_aduh_monitor_readdata_export => reg_aduh_monitor_cipo.rddata(c_word_w - 1 downto 0), + + ram_fil_coefs_clk_export => OPEN, + ram_fil_coefs_reset_export => OPEN, + ram_fil_coefs_address_export => ram_fil_coefs_copi.address(c_sdp_ram_fil_coefs_addr_w - 1 downto 0), + ram_fil_coefs_write_export => ram_fil_coefs_copi.wr, + ram_fil_coefs_writedata_export => ram_fil_coefs_copi.wrdata(c_word_w - 1 downto 0), + ram_fil_coefs_read_export => ram_fil_coefs_copi.rd, + ram_fil_coefs_readdata_export => ram_fil_coefs_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_sst_clk_export => OPEN, + ram_st_sst_reset_export => OPEN, + ram_st_sst_address_export => ram_st_sst_copi.address(c_sdp_ram_st_sst_addr_w - 1 downto 0), + ram_st_sst_write_export => ram_st_sst_copi.wr, + ram_st_sst_writedata_export => ram_st_sst_copi.wrdata(c_word_w - 1 downto 0), + ram_st_sst_read_export => ram_st_sst_copi.rd, + ram_st_sst_readdata_export => ram_st_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_si_clk_export => OPEN, + reg_si_reset_export => OPEN, + reg_si_address_export => reg_si_copi.address(c_sdp_reg_si_addr_w - 1 downto 0), + reg_si_write_export => reg_si_copi.wr, + reg_si_writedata_export => reg_si_copi.wrdata(c_word_w - 1 downto 0), + reg_si_read_export => reg_si_copi.rd, + reg_si_readdata_export => reg_si_cipo.rddata(c_word_w - 1 downto 0), + + ram_equalizer_gains_clk_export => OPEN, + ram_equalizer_gains_reset_export => OPEN, + ram_equalizer_gains_address_export => ram_equalizer_gains_copi.address( + c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), + ram_equalizer_gains_write_export => ram_equalizer_gains_copi.wr, + ram_equalizer_gains_writedata_export => ram_equalizer_gains_copi.wrdata(c_word_w - 1 downto 0), + ram_equalizer_gains_read_export => ram_equalizer_gains_copi.rd, + ram_equalizer_gains_readdata_export => ram_equalizer_gains_cipo.rddata(c_word_w - 1 downto 0), ram_equalizer_gains_cross_clk_export => OPEN, ram_equalizer_gains_cross_reset_export => OPEN, - ram_equalizer_gains_cross_address_export => ram_equalizer_gains_cross_copi.address(c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), + ram_equalizer_gains_cross_address_export => ram_equalizer_gains_cross_copi.address( + c_sdp_ram_equalizer_gains_addr_w - 1 downto 0), ram_equalizer_gains_cross_write_export => ram_equalizer_gains_cross_copi.wr, ram_equalizer_gains_cross_writedata_export => ram_equalizer_gains_cross_copi.wrdata(c_word_w - 1 downto 0), ram_equalizer_gains_cross_read_export => ram_equalizer_gains_cross_copi.rd, ram_equalizer_gains_cross_readdata_export => ram_equalizer_gains_cross_cipo.rddata(c_word_w - 1 downto 0), - reg_dp_selector_clk_export => OPEN, - reg_dp_selector_reset_export => OPEN, - reg_dp_selector_address_export => reg_dp_selector_copi.address(c_sdp_reg_dp_selector_addr_w - 1 downto 0), - reg_dp_selector_write_export => reg_dp_selector_copi.wr, - reg_dp_selector_writedata_export => reg_dp_selector_copi.wrdata(c_word_w - 1 downto 0), - reg_dp_selector_read_export => reg_dp_selector_copi.rd, - reg_dp_selector_readdata_export => reg_dp_selector_cipo.rddata(c_word_w - 1 downto 0), - - reg_sdp_info_clk_export => OPEN, - reg_sdp_info_reset_export => OPEN, - reg_sdp_info_address_export => reg_sdp_info_copi.address(c_sdp_reg_sdp_info_addr_w - 1 downto 0), - reg_sdp_info_write_export => reg_sdp_info_copi.wr, - reg_sdp_info_writedata_export => reg_sdp_info_copi.wrdata(c_word_w - 1 downto 0), - reg_sdp_info_read_export => reg_sdp_info_copi.rd, - reg_sdp_info_readdata_export => reg_sdp_info_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_info_clk_export => OPEN, - reg_ring_info_reset_export => OPEN, - reg_ring_info_address_export => reg_ring_info_copi.address(c_sdp_reg_ring_info_addr_w - 1 downto 0), - reg_ring_info_write_export => reg_ring_info_copi.wr, - reg_ring_info_writedata_export => reg_ring_info_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_info_read_export => reg_ring_info_copi.rd, - reg_ring_info_readdata_export => reg_ring_info_cipo.rddata(c_word_w - 1 downto 0), - - ram_ss_ss_wide_clk_export => OPEN, - ram_ss_ss_wide_reset_export => OPEN, - ram_ss_ss_wide_address_export => ram_ss_ss_wide_copi.address(c_sdp_ram_ss_ss_wide_addr_w - 1 downto 0), - ram_ss_ss_wide_write_export => ram_ss_ss_wide_copi.wr, - ram_ss_ss_wide_writedata_export => ram_ss_ss_wide_copi.wrdata(c_word_w - 1 downto 0), - ram_ss_ss_wide_read_export => ram_ss_ss_wide_copi.rd, - ram_ss_ss_wide_readdata_export => ram_ss_ss_wide_cipo.rddata(c_word_w - 1 downto 0), - - ram_bf_weights_clk_export => OPEN, - ram_bf_weights_reset_export => OPEN, - ram_bf_weights_address_export => ram_bf_weights_copi.address(c_sdp_ram_bf_weights_addr_w - 1 downto 0), - ram_bf_weights_write_export => ram_bf_weights_copi.wr, - ram_bf_weights_writedata_export => ram_bf_weights_copi.wrdata(c_word_w - 1 downto 0), - ram_bf_weights_read_export => ram_bf_weights_copi.rd, - ram_bf_weights_readdata_export => ram_bf_weights_cipo.rddata(c_word_w - 1 downto 0), - - reg_bf_scale_clk_export => OPEN, - reg_bf_scale_reset_export => OPEN, - reg_bf_scale_address_export => reg_bf_scale_copi.address(c_sdp_reg_bf_scale_addr_w - 1 downto 0), - reg_bf_scale_write_export => reg_bf_scale_copi.wr, - reg_bf_scale_writedata_export => reg_bf_scale_copi.wrdata(c_word_w - 1 downto 0), - reg_bf_scale_read_export => reg_bf_scale_copi.rd, - reg_bf_scale_readdata_export => reg_bf_scale_cipo.rddata(c_word_w - 1 downto 0), - - reg_hdr_dat_clk_export => OPEN, - reg_hdr_dat_reset_export => OPEN, - reg_hdr_dat_address_export => reg_hdr_dat_copi.address(c_sdp_reg_bf_hdr_dat_addr_w - 1 downto 0), - reg_hdr_dat_write_export => reg_hdr_dat_copi.wr, - reg_hdr_dat_writedata_export => reg_hdr_dat_copi.wrdata(c_word_w - 1 downto 0), - reg_hdr_dat_read_export => reg_hdr_dat_copi.rd, - reg_hdr_dat_readdata_export => reg_hdr_dat_cipo.rddata(c_word_w - 1 downto 0), - - reg_bdo_destinations_clk_export => OPEN, - reg_bdo_destinations_reset_export => OPEN, - reg_bdo_destinations_address_export => reg_bdo_destinations_copi.address(c_sdp_reg_bdo_destinations_info_w - 1 downto 0), - reg_bdo_destinations_write_export => reg_bdo_destinations_copi.wr, - reg_bdo_destinations_writedata_export => reg_bdo_destinations_copi.wrdata(c_word_w - 1 downto 0), - reg_bdo_destinations_read_export => reg_bdo_destinations_copi.rd, - reg_bdo_destinations_readdata_export => reg_bdo_destinations_cipo.rddata(c_word_w - 1 downto 0), - - reg_dp_xonoff_clk_export => OPEN, - reg_dp_xonoff_reset_export => OPEN, - reg_dp_xonoff_address_export => reg_dp_xonoff_copi.address(c_sdp_reg_dp_xonoff_addr_w - 1 downto 0), - reg_dp_xonoff_write_export => reg_dp_xonoff_copi.wr, - reg_dp_xonoff_writedata_export => reg_dp_xonoff_copi.wrdata(c_word_w - 1 downto 0), - reg_dp_xonoff_read_export => reg_dp_xonoff_copi.rd, - reg_dp_xonoff_readdata_export => reg_dp_xonoff_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_bst_clk_export => OPEN, - ram_st_bst_reset_export => OPEN, - ram_st_bst_address_export => ram_st_bst_copi.address(c_sdp_ram_st_bst_addr_w - 1 downto 0), - ram_st_bst_write_export => ram_st_bst_copi.wr, - ram_st_bst_writedata_export => ram_st_bst_copi.wrdata(c_word_w - 1 downto 0), - ram_st_bst_read_export => ram_st_bst_copi.rd, - ram_st_bst_readdata_export => ram_st_bst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_enable_sst_clk_export => OPEN, - reg_stat_enable_sst_reset_export => OPEN, - reg_stat_enable_sst_address_export => reg_stat_enable_sst_copi.address(c_sdp_reg_stat_enable_addr_w - 1 downto 0), - reg_stat_enable_sst_write_export => reg_stat_enable_sst_copi.wr, - reg_stat_enable_sst_writedata_export => reg_stat_enable_sst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_sst_read_export => reg_stat_enable_sst_copi.rd, - reg_stat_enable_sst_readdata_export => reg_stat_enable_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_hdr_dat_sst_clk_export => OPEN, - reg_stat_hdr_dat_sst_reset_export => OPEN, - reg_stat_hdr_dat_sst_address_export => reg_stat_hdr_dat_sst_copi.address(c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), - reg_stat_hdr_dat_sst_write_export => reg_stat_hdr_dat_sst_copi.wr, - reg_stat_hdr_dat_sst_writedata_export => reg_stat_hdr_dat_sst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_sst_read_export => reg_stat_hdr_dat_sst_copi.rd, - reg_stat_hdr_dat_sst_readdata_export => reg_stat_hdr_dat_sst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_enable_xst_clk_export => OPEN, - reg_stat_enable_xst_reset_export => OPEN, - reg_stat_enable_xst_address_export => reg_stat_enable_xst_copi.address(c_sdp_reg_stat_enable_addr_w - 1 downto 0), - reg_stat_enable_xst_write_export => reg_stat_enable_xst_copi.wr, - reg_stat_enable_xst_writedata_export => reg_stat_enable_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_xst_read_export => reg_stat_enable_xst_copi.rd, - reg_stat_enable_xst_readdata_export => reg_stat_enable_xst_cipo.rddata(c_word_w - 1 downto 0), - - reg_stat_hdr_dat_xst_clk_export => OPEN, - reg_stat_hdr_dat_xst_reset_export => OPEN, - reg_stat_hdr_dat_xst_address_export => reg_stat_hdr_dat_xst_copi.address(c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), - reg_stat_hdr_dat_xst_write_export => reg_stat_hdr_dat_xst_copi.wr, - reg_stat_hdr_dat_xst_writedata_export => reg_stat_hdr_dat_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_xst_read_export => reg_stat_hdr_dat_xst_copi.rd, - reg_stat_hdr_dat_xst_readdata_export => reg_stat_hdr_dat_xst_cipo.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_copi.address(c_sdp_reg_stat_enable_bst_addr_w - 1 downto 0), - reg_stat_enable_bst_write_export => reg_stat_enable_bst_copi.wr, - reg_stat_enable_bst_writedata_export => reg_stat_enable_bst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_enable_bst_read_export => reg_stat_enable_bst_copi.rd, - reg_stat_enable_bst_readdata_export => reg_stat_enable_bst_cipo.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_copi.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_copi.wr, - reg_stat_hdr_dat_bst_writedata_export => reg_stat_hdr_dat_bst_copi.wrdata(c_word_w - 1 downto 0), - reg_stat_hdr_dat_bst_read_export => reg_stat_hdr_dat_bst_copi.rd, - reg_stat_hdr_dat_bst_readdata_export => reg_stat_hdr_dat_bst_cipo.rddata(c_word_w - 1 downto 0), - - reg_crosslets_info_clk_export => OPEN, - reg_crosslets_info_reset_export => OPEN, - reg_crosslets_info_address_export => reg_crosslets_info_copi.address(c_sdp_reg_crosslets_info_addr_w - 1 downto 0), - reg_crosslets_info_write_export => reg_crosslets_info_copi.wr, - reg_crosslets_info_writedata_export => reg_crosslets_info_copi.wrdata(c_word_w - 1 downto 0), - reg_crosslets_info_read_export => reg_crosslets_info_copi.rd, - reg_crosslets_info_readdata_export => reg_crosslets_info_cipo.rddata(c_word_w - 1 downto 0), - - reg_nof_crosslets_clk_export => OPEN, - reg_nof_crosslets_reset_export => OPEN, - reg_nof_crosslets_address_export => reg_nof_crosslets_copi.address(c_sdp_reg_nof_crosslets_addr_w - 1 downto 0), - reg_nof_crosslets_write_export => reg_nof_crosslets_copi.wr, - reg_nof_crosslets_writedata_export => reg_nof_crosslets_copi.wrdata(c_word_w - 1 downto 0), - reg_nof_crosslets_read_export => reg_nof_crosslets_copi.rd, - reg_nof_crosslets_readdata_export => reg_nof_crosslets_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_sync_scheduler_xsub_clk_export => OPEN, - reg_bsn_sync_scheduler_xsub_reset_export => OPEN, - reg_bsn_sync_scheduler_xsub_address_export => reg_bsn_sync_scheduler_xsub_copi.address(c_sdp_reg_bsn_sync_scheduler_xsub_addr_w - 1 downto 0), - reg_bsn_sync_scheduler_xsub_write_export => reg_bsn_sync_scheduler_xsub_copi.wr, - reg_bsn_sync_scheduler_xsub_writedata_export => reg_bsn_sync_scheduler_xsub_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_sync_scheduler_xsub_read_export => reg_bsn_sync_scheduler_xsub_copi.rd, - reg_bsn_sync_scheduler_xsub_readdata_export => reg_bsn_sync_scheduler_xsub_cipo.rddata(c_word_w - 1 downto 0), - - ram_st_xsq_clk_export => OPEN, - ram_st_xsq_reset_export => OPEN, - ram_st_xsq_address_export => ram_st_xsq_copi.address(c_sdp_ram_st_xsq_arr_addr_w - 1 downto 0), - ram_st_xsq_write_export => ram_st_xsq_copi.wr, - ram_st_xsq_writedata_export => ram_st_xsq_copi.wrdata(c_word_w - 1 downto 0), - ram_st_xsq_read_export => ram_st_xsq_copi.rd, - ram_st_xsq_readdata_export => ram_st_xsq_cipo.rddata(c_word_w - 1 downto 0), - - reg_nw_10GbE_mac_clk_export => OPEN, - reg_nw_10GbE_mac_reset_export => OPEN, - reg_nw_10GbE_mac_address_export => reg_nw_10GbE_mac_copi.address(c_sdp_reg_nw_10GbE_mac_addr_w - 1 downto 0), - reg_nw_10GbE_mac_write_export => reg_nw_10GbE_mac_copi.wr, - reg_nw_10GbE_mac_writedata_export => reg_nw_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), - reg_nw_10GbE_mac_read_export => reg_nw_10GbE_mac_copi.rd, - reg_nw_10GbE_mac_readdata_export => reg_nw_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), - - reg_nw_10GbE_eth10g_clk_export => OPEN, - reg_nw_10GbE_eth10g_reset_export => OPEN, - reg_nw_10GbE_eth10g_address_export => reg_nw_10GbE_eth10g_copi.address(c_sdp_reg_nw_10GbE_eth10g_addr_w - 1 downto 0), - reg_nw_10GbE_eth10g_write_export => reg_nw_10GbE_eth10g_copi.wr, - reg_nw_10GbE_eth10g_writedata_export => reg_nw_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), - reg_nw_10GbE_eth10g_read_export => reg_nw_10GbE_eth10g_copi.rd, - reg_nw_10GbE_eth10g_readdata_export => reg_nw_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_align_v2_bf_clk_export => OPEN, - reg_bsn_align_v2_bf_reset_export => OPEN, - reg_bsn_align_v2_bf_address_export => reg_bsn_align_v2_bf_copi.address(c_sdp_reg_bsn_align_v2_bf_addr_w - 1 downto 0), - reg_bsn_align_v2_bf_write_export => reg_bsn_align_v2_bf_copi.wr, - reg_bsn_align_v2_bf_writedata_export => reg_bsn_align_v2_bf_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_align_v2_bf_read_export => reg_bsn_align_v2_bf_copi.rd, - reg_bsn_align_v2_bf_readdata_export => reg_bsn_align_v2_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_selector_clk_export => OPEN, + reg_dp_selector_reset_export => OPEN, + reg_dp_selector_address_export => reg_dp_selector_copi.address(c_sdp_reg_dp_selector_addr_w - 1 downto 0), + reg_dp_selector_write_export => reg_dp_selector_copi.wr, + reg_dp_selector_writedata_export => reg_dp_selector_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_selector_read_export => reg_dp_selector_copi.rd, + reg_dp_selector_readdata_export => reg_dp_selector_cipo.rddata(c_word_w - 1 downto 0), + + reg_sdp_info_clk_export => OPEN, + reg_sdp_info_reset_export => OPEN, + reg_sdp_info_address_export => reg_sdp_info_copi.address(c_sdp_reg_sdp_info_addr_w - 1 downto 0), + reg_sdp_info_write_export => reg_sdp_info_copi.wr, + reg_sdp_info_writedata_export => reg_sdp_info_copi.wrdata(c_word_w - 1 downto 0), + reg_sdp_info_read_export => reg_sdp_info_copi.rd, + reg_sdp_info_readdata_export => reg_sdp_info_cipo.rddata(c_word_w - 1 downto 0), + + reg_ring_info_clk_export => OPEN, + reg_ring_info_reset_export => OPEN, + reg_ring_info_address_export => reg_ring_info_copi.address(c_sdp_reg_ring_info_addr_w - 1 downto 0), + reg_ring_info_write_export => reg_ring_info_copi.wr, + reg_ring_info_writedata_export => reg_ring_info_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_info_read_export => reg_ring_info_copi.rd, + reg_ring_info_readdata_export => reg_ring_info_cipo.rddata(c_word_w - 1 downto 0), + + ram_ss_ss_wide_clk_export => OPEN, + ram_ss_ss_wide_reset_export => OPEN, + ram_ss_ss_wide_address_export => ram_ss_ss_wide_copi.address(c_sdp_ram_ss_ss_wide_addr_w - 1 downto 0), + ram_ss_ss_wide_write_export => ram_ss_ss_wide_copi.wr, + ram_ss_ss_wide_writedata_export => ram_ss_ss_wide_copi.wrdata(c_word_w - 1 downto 0), + ram_ss_ss_wide_read_export => ram_ss_ss_wide_copi.rd, + ram_ss_ss_wide_readdata_export => ram_ss_ss_wide_cipo.rddata(c_word_w - 1 downto 0), + + ram_bf_weights_clk_export => OPEN, + ram_bf_weights_reset_export => OPEN, + ram_bf_weights_address_export => ram_bf_weights_copi.address(c_sdp_ram_bf_weights_addr_w - 1 downto 0), + ram_bf_weights_write_export => ram_bf_weights_copi.wr, + ram_bf_weights_writedata_export => ram_bf_weights_copi.wrdata(c_word_w - 1 downto 0), + ram_bf_weights_read_export => ram_bf_weights_copi.rd, + ram_bf_weights_readdata_export => ram_bf_weights_cipo.rddata(c_word_w - 1 downto 0), + + reg_bf_scale_clk_export => OPEN, + reg_bf_scale_reset_export => OPEN, + reg_bf_scale_address_export => reg_bf_scale_copi.address(c_sdp_reg_bf_scale_addr_w - 1 downto 0), + reg_bf_scale_write_export => reg_bf_scale_copi.wr, + reg_bf_scale_writedata_export => reg_bf_scale_copi.wrdata(c_word_w - 1 downto 0), + reg_bf_scale_read_export => reg_bf_scale_copi.rd, + reg_bf_scale_readdata_export => reg_bf_scale_cipo.rddata(c_word_w - 1 downto 0), + + reg_hdr_dat_clk_export => OPEN, + reg_hdr_dat_reset_export => OPEN, + reg_hdr_dat_address_export => reg_hdr_dat_copi.address(c_sdp_reg_bf_hdr_dat_addr_w - 1 downto 0), + reg_hdr_dat_write_export => reg_hdr_dat_copi.wr, + reg_hdr_dat_writedata_export => reg_hdr_dat_copi.wrdata(c_word_w - 1 downto 0), + reg_hdr_dat_read_export => reg_hdr_dat_copi.rd, + reg_hdr_dat_readdata_export => reg_hdr_dat_cipo.rddata(c_word_w - 1 downto 0), + + reg_bdo_destinations_clk_export => OPEN, + reg_bdo_destinations_reset_export => OPEN, + reg_bdo_destinations_address_export => reg_bdo_destinations_copi.address( + c_sdp_reg_bdo_destinations_info_w - 1 downto 0), + reg_bdo_destinations_write_export => reg_bdo_destinations_copi.wr, + reg_bdo_destinations_writedata_export => reg_bdo_destinations_copi.wrdata(c_word_w - 1 downto 0), + reg_bdo_destinations_read_export => reg_bdo_destinations_copi.rd, + reg_bdo_destinations_readdata_export => reg_bdo_destinations_cipo.rddata(c_word_w - 1 downto 0), + + reg_dp_xonoff_clk_export => OPEN, + reg_dp_xonoff_reset_export => OPEN, + reg_dp_xonoff_address_export => reg_dp_xonoff_copi.address(c_sdp_reg_dp_xonoff_addr_w - 1 downto 0), + reg_dp_xonoff_write_export => reg_dp_xonoff_copi.wr, + reg_dp_xonoff_writedata_export => reg_dp_xonoff_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_xonoff_read_export => reg_dp_xonoff_copi.rd, + reg_dp_xonoff_readdata_export => reg_dp_xonoff_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_bst_clk_export => OPEN, + ram_st_bst_reset_export => OPEN, + ram_st_bst_address_export => ram_st_bst_copi.address(c_sdp_ram_st_bst_addr_w - 1 downto 0), + ram_st_bst_write_export => ram_st_bst_copi.wr, + ram_st_bst_writedata_export => ram_st_bst_copi.wrdata(c_word_w - 1 downto 0), + ram_st_bst_read_export => ram_st_bst_copi.rd, + ram_st_bst_readdata_export => ram_st_bst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_enable_sst_clk_export => OPEN, + reg_stat_enable_sst_reset_export => OPEN, + reg_stat_enable_sst_address_export => reg_stat_enable_sst_copi.address( + c_sdp_reg_stat_enable_addr_w - 1 downto 0), + reg_stat_enable_sst_write_export => reg_stat_enable_sst_copi.wr, + reg_stat_enable_sst_writedata_export => reg_stat_enable_sst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_sst_read_export => reg_stat_enable_sst_copi.rd, + reg_stat_enable_sst_readdata_export => reg_stat_enable_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_hdr_dat_sst_clk_export => OPEN, + reg_stat_hdr_dat_sst_reset_export => OPEN, + reg_stat_hdr_dat_sst_address_export => reg_stat_hdr_dat_sst_copi.address( + c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), + reg_stat_hdr_dat_sst_write_export => reg_stat_hdr_dat_sst_copi.wr, + reg_stat_hdr_dat_sst_writedata_export => reg_stat_hdr_dat_sst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_sst_read_export => reg_stat_hdr_dat_sst_copi.rd, + reg_stat_hdr_dat_sst_readdata_export => reg_stat_hdr_dat_sst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_enable_xst_clk_export => OPEN, + reg_stat_enable_xst_reset_export => OPEN, + reg_stat_enable_xst_address_export => reg_stat_enable_xst_copi.address( + c_sdp_reg_stat_enable_addr_w - 1 downto 0), + reg_stat_enable_xst_write_export => reg_stat_enable_xst_copi.wr, + reg_stat_enable_xst_writedata_export => reg_stat_enable_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_xst_read_export => reg_stat_enable_xst_copi.rd, + reg_stat_enable_xst_readdata_export => reg_stat_enable_xst_cipo.rddata(c_word_w - 1 downto 0), + + reg_stat_hdr_dat_xst_clk_export => OPEN, + reg_stat_hdr_dat_xst_reset_export => OPEN, + reg_stat_hdr_dat_xst_address_export => reg_stat_hdr_dat_xst_copi.address( + c_sdp_reg_stat_hdr_dat_addr_w - 1 downto 0), + reg_stat_hdr_dat_xst_write_export => reg_stat_hdr_dat_xst_copi.wr, + reg_stat_hdr_dat_xst_writedata_export => reg_stat_hdr_dat_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_xst_read_export => reg_stat_hdr_dat_xst_copi.rd, + reg_stat_hdr_dat_xst_readdata_export => reg_stat_hdr_dat_xst_cipo.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_copi.address( + c_sdp_reg_stat_enable_bst_addr_w - 1 downto 0), + reg_stat_enable_bst_write_export => reg_stat_enable_bst_copi.wr, + reg_stat_enable_bst_writedata_export => reg_stat_enable_bst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_enable_bst_read_export => reg_stat_enable_bst_copi.rd, + reg_stat_enable_bst_readdata_export => reg_stat_enable_bst_cipo.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_copi.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_copi.wr, + reg_stat_hdr_dat_bst_writedata_export => reg_stat_hdr_dat_bst_copi.wrdata(c_word_w - 1 downto 0), + reg_stat_hdr_dat_bst_read_export => reg_stat_hdr_dat_bst_copi.rd, + reg_stat_hdr_dat_bst_readdata_export => reg_stat_hdr_dat_bst_cipo.rddata(c_word_w - 1 downto 0), + + reg_crosslets_info_clk_export => OPEN, + reg_crosslets_info_reset_export => OPEN, + reg_crosslets_info_address_export => reg_crosslets_info_copi.address( + c_sdp_reg_crosslets_info_addr_w - 1 downto 0), + reg_crosslets_info_write_export => reg_crosslets_info_copi.wr, + reg_crosslets_info_writedata_export => reg_crosslets_info_copi.wrdata(c_word_w - 1 downto 0), + reg_crosslets_info_read_export => reg_crosslets_info_copi.rd, + reg_crosslets_info_readdata_export => reg_crosslets_info_cipo.rddata(c_word_w - 1 downto 0), + + reg_nof_crosslets_clk_export => OPEN, + reg_nof_crosslets_reset_export => OPEN, + reg_nof_crosslets_address_export => reg_nof_crosslets_copi.address( + c_sdp_reg_nof_crosslets_addr_w - 1 downto 0), + reg_nof_crosslets_write_export => reg_nof_crosslets_copi.wr, + reg_nof_crosslets_writedata_export => reg_nof_crosslets_copi.wrdata(c_word_w - 1 downto 0), + reg_nof_crosslets_read_export => reg_nof_crosslets_copi.rd, + reg_nof_crosslets_readdata_export => reg_nof_crosslets_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_sync_scheduler_xsub_clk_export => OPEN, + reg_bsn_sync_scheduler_xsub_reset_export => OPEN, + reg_bsn_sync_scheduler_xsub_address_export => reg_bsn_sync_scheduler_xsub_copi.address( + c_sdp_reg_bsn_sync_scheduler_xsub_addr_w - 1 downto 0), + reg_bsn_sync_scheduler_xsub_write_export => reg_bsn_sync_scheduler_xsub_copi.wr, + reg_bsn_sync_scheduler_xsub_writedata_export => reg_bsn_sync_scheduler_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_sync_scheduler_xsub_read_export => reg_bsn_sync_scheduler_xsub_copi.rd, + reg_bsn_sync_scheduler_xsub_readdata_export => reg_bsn_sync_scheduler_xsub_cipo.rddata(c_word_w - 1 downto 0), + + ram_st_xsq_clk_export => OPEN, + ram_st_xsq_reset_export => OPEN, + ram_st_xsq_address_export => ram_st_xsq_copi.address(c_sdp_ram_st_xsq_arr_addr_w - 1 downto 0), + ram_st_xsq_write_export => ram_st_xsq_copi.wr, + ram_st_xsq_writedata_export => ram_st_xsq_copi.wrdata(c_word_w - 1 downto 0), + ram_st_xsq_read_export => ram_st_xsq_copi.rd, + ram_st_xsq_readdata_export => ram_st_xsq_cipo.rddata(c_word_w - 1 downto 0), + + reg_nw_10GbE_mac_clk_export => OPEN, + reg_nw_10GbE_mac_reset_export => OPEN, + reg_nw_10GbE_mac_address_export => reg_nw_10GbE_mac_copi.address(c_sdp_reg_nw_10GbE_mac_addr_w - 1 downto 0), + reg_nw_10GbE_mac_write_export => reg_nw_10GbE_mac_copi.wr, + reg_nw_10GbE_mac_writedata_export => reg_nw_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), + reg_nw_10GbE_mac_read_export => reg_nw_10GbE_mac_copi.rd, + reg_nw_10GbE_mac_readdata_export => reg_nw_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), + + reg_nw_10GbE_eth10g_clk_export => OPEN, + reg_nw_10GbE_eth10g_reset_export => OPEN, + reg_nw_10GbE_eth10g_address_export => reg_nw_10GbE_eth10g_copi.address( + c_sdp_reg_nw_10GbE_eth10g_addr_w - 1 downto 0), + reg_nw_10GbE_eth10g_write_export => reg_nw_10GbE_eth10g_copi.wr, + reg_nw_10GbE_eth10g_writedata_export => reg_nw_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), + reg_nw_10GbE_eth10g_read_export => reg_nw_10GbE_eth10g_copi.rd, + reg_nw_10GbE_eth10g_readdata_export => reg_nw_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), + + reg_bsn_align_v2_bf_clk_export => OPEN, + reg_bsn_align_v2_bf_reset_export => OPEN, + reg_bsn_align_v2_bf_address_export => reg_bsn_align_v2_bf_copi.address( + c_sdp_reg_bsn_align_v2_bf_addr_w - 1 downto 0), + reg_bsn_align_v2_bf_write_export => reg_bsn_align_v2_bf_copi.wr, + reg_bsn_align_v2_bf_writedata_export => reg_bsn_align_v2_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_align_v2_bf_read_export => reg_bsn_align_v2_bf_copi.rd, + reg_bsn_align_v2_bf_readdata_export => reg_bsn_align_v2_bf_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_clk_export => OPEN, reg_bsn_monitor_v2_rx_align_bf_reset_export => OPEN, - reg_bsn_monitor_v2_rx_align_bf_address_export => reg_bsn_monitor_v2_rx_align_bf_copi.address(c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_address_export => reg_bsn_monitor_v2_rx_align_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_write_export => reg_bsn_monitor_v2_rx_align_bf_copi.wr, - reg_bsn_monitor_v2_rx_align_bf_writedata_export => reg_bsn_monitor_v2_rx_align_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_writedata_export => reg_bsn_monitor_v2_rx_align_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_bf_read_export => reg_bsn_monitor_v2_rx_align_bf_copi.rd, - reg_bsn_monitor_v2_rx_align_bf_readdata_export => reg_bsn_monitor_v2_rx_align_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_bf_readdata_export => reg_bsn_monitor_v2_rx_align_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_clk_export => OPEN, reg_bsn_monitor_v2_aligned_bf_reset_export => OPEN, - reg_bsn_monitor_v2_aligned_bf_address_export => reg_bsn_monitor_v2_aligned_bf_copi.address(c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_address_export => reg_bsn_monitor_v2_aligned_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_write_export => reg_bsn_monitor_v2_aligned_bf_copi.wr, - reg_bsn_monitor_v2_aligned_bf_writedata_export => reg_bsn_monitor_v2_aligned_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_writedata_export => reg_bsn_monitor_v2_aligned_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_bf_read_export => reg_bsn_monitor_v2_aligned_bf_copi.rd, - reg_bsn_monitor_v2_aligned_bf_readdata_export => reg_bsn_monitor_v2_aligned_bf_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_align_v2_xsub_clk_export => OPEN, - reg_bsn_align_v2_xsub_reset_export => OPEN, - reg_bsn_align_v2_xsub_address_export => reg_bsn_align_v2_xsub_copi.address(c_sdp_reg_bsn_align_v2_xsub_addr_w - 1 downto 0), - reg_bsn_align_v2_xsub_write_export => reg_bsn_align_v2_xsub_copi.wr, - reg_bsn_align_v2_xsub_writedata_export => reg_bsn_align_v2_xsub_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_align_v2_xsub_read_export => reg_bsn_align_v2_xsub_copi.rd, - reg_bsn_align_v2_xsub_readdata_export => reg_bsn_align_v2_xsub_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_bf_readdata_export => reg_bsn_monitor_v2_aligned_bf_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_align_v2_xsub_clk_export => OPEN, + reg_bsn_align_v2_xsub_reset_export => OPEN, + reg_bsn_align_v2_xsub_address_export => reg_bsn_align_v2_xsub_copi.address( + c_sdp_reg_bsn_align_v2_xsub_addr_w - 1 downto 0), + reg_bsn_align_v2_xsub_write_export => reg_bsn_align_v2_xsub_copi.wr, + reg_bsn_align_v2_xsub_writedata_export => reg_bsn_align_v2_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_align_v2_xsub_read_export => reg_bsn_align_v2_xsub_copi.rd, + reg_bsn_align_v2_xsub_readdata_export => reg_bsn_align_v2_xsub_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_clk_export => OPEN, reg_bsn_monitor_v2_rx_align_xsub_reset_export => OPEN, - reg_bsn_monitor_v2_rx_align_xsub_address_export => reg_bsn_monitor_v2_rx_align_xsub_copi.address(c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_address_export => reg_bsn_monitor_v2_rx_align_xsub_copi.address( + c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_write_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wr, - reg_bsn_monitor_v2_rx_align_xsub_writedata_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_writedata_export => reg_bsn_monitor_v2_rx_align_xsub_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_rx_align_xsub_read_export => reg_bsn_monitor_v2_rx_align_xsub_copi.rd, - reg_bsn_monitor_v2_rx_align_xsub_readdata_export => reg_bsn_monitor_v2_rx_align_xsub_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_rx_align_xsub_readdata_export => reg_bsn_monitor_v2_rx_align_xsub_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_clk_export => OPEN, reg_bsn_monitor_v2_aligned_xsub_reset_export => OPEN, - reg_bsn_monitor_v2_aligned_xsub_address_export => reg_bsn_monitor_v2_aligned_xsub_copi.address(c_sdp_reg_bsn_monitor_v2_aligned_xsub_addr_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_address_export => reg_bsn_monitor_v2_aligned_xsub_copi.address( + c_sdp_reg_bsn_monitor_v2_aligned_xsub_addr_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_write_export => reg_bsn_monitor_v2_aligned_xsub_copi.wr, - reg_bsn_monitor_v2_aligned_xsub_writedata_export => reg_bsn_monitor_v2_aligned_xsub_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_writedata_export => reg_bsn_monitor_v2_aligned_xsub_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_aligned_xsub_read_export => reg_bsn_monitor_v2_aligned_xsub_copi.rd, - reg_bsn_monitor_v2_aligned_xsub_readdata_export => reg_bsn_monitor_v2_aligned_xsub_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_sst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_sst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_sst_offload_address_export => reg_bsn_monitor_v2_sst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_sst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_sst_offload_write_export => reg_bsn_monitor_v2_sst_offload_copi.wr, - reg_bsn_monitor_v2_sst_offload_writedata_export => reg_bsn_monitor_v2_sst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_sst_offload_read_export => reg_bsn_monitor_v2_sst_offload_copi.rd, - reg_bsn_monitor_v2_sst_offload_readdata_export => reg_bsn_monitor_v2_sst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_bst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_bst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_bst_offload_address_export => reg_bsn_monitor_v2_bst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_bst_offload_write_export => reg_bsn_monitor_v2_bst_offload_copi.wr, - reg_bsn_monitor_v2_bst_offload_writedata_export => reg_bsn_monitor_v2_bst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_bst_offload_read_export => reg_bsn_monitor_v2_bst_offload_copi.rd, - reg_bsn_monitor_v2_bst_offload_readdata_export => reg_bsn_monitor_v2_bst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_beamlet_output_clk_export => OPEN, - reg_bsn_monitor_v2_beamlet_output_reset_export => OPEN, - reg_bsn_monitor_v2_beamlet_output_address_export => reg_bsn_monitor_v2_beamlet_output_copi.address(c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w - 1 downto 0), - reg_bsn_monitor_v2_beamlet_output_write_export => reg_bsn_monitor_v2_beamlet_output_copi.wr, - reg_bsn_monitor_v2_beamlet_output_writedata_export => reg_bsn_monitor_v2_beamlet_output_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_beamlet_output_read_export => reg_bsn_monitor_v2_beamlet_output_copi.rd, - reg_bsn_monitor_v2_beamlet_output_readdata_export => reg_bsn_monitor_v2_beamlet_output_cipo.rddata(c_word_w - 1 downto 0), - - reg_bsn_monitor_v2_xst_offload_clk_export => OPEN, - reg_bsn_monitor_v2_xst_offload_reset_export => OPEN, - reg_bsn_monitor_v2_xst_offload_address_export => reg_bsn_monitor_v2_xst_offload_copi.address(c_sdp_reg_bsn_monitor_v2_xst_offload_addr_w - 1 downto 0), - reg_bsn_monitor_v2_xst_offload_write_export => reg_bsn_monitor_v2_xst_offload_copi.wr, - reg_bsn_monitor_v2_xst_offload_writedata_export => reg_bsn_monitor_v2_xst_offload_copi.wrdata(c_word_w - 1 downto 0), - reg_bsn_monitor_v2_xst_offload_read_export => reg_bsn_monitor_v2_xst_offload_copi.rd, - reg_bsn_monitor_v2_xst_offload_readdata_export => reg_bsn_monitor_v2_xst_offload_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_lane_info_bf_clk_export => OPEN, - reg_ring_lane_info_bf_reset_export => OPEN, - reg_ring_lane_info_bf_address_export => reg_ring_lane_info_bf_copi.address(c_sdp_reg_ring_lane_info_bf_addr_w - 1 downto 0), - reg_ring_lane_info_bf_write_export => reg_ring_lane_info_bf_copi.wr, - reg_ring_lane_info_bf_writedata_export => reg_ring_lane_info_bf_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_lane_info_bf_read_export => reg_ring_lane_info_bf_copi.rd, - reg_ring_lane_info_bf_readdata_export => reg_ring_lane_info_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_aligned_xsub_readdata_export => reg_bsn_monitor_v2_aligned_xsub_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_sst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_sst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_sst_offload_address_export => reg_bsn_monitor_v2_sst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_sst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_sst_offload_write_export => reg_bsn_monitor_v2_sst_offload_copi.wr, + reg_bsn_monitor_v2_sst_offload_writedata_export => reg_bsn_monitor_v2_sst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_sst_offload_read_export => reg_bsn_monitor_v2_sst_offload_copi.rd, + reg_bsn_monitor_v2_sst_offload_readdata_export => reg_bsn_monitor_v2_sst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_bst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_bst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_bst_offload_address_export => reg_bsn_monitor_v2_bst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_bst_offload_write_export => reg_bsn_monitor_v2_bst_offload_copi.wr, + reg_bsn_monitor_v2_bst_offload_writedata_export => reg_bsn_monitor_v2_bst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_bst_offload_read_export => reg_bsn_monitor_v2_bst_offload_copi.rd, + reg_bsn_monitor_v2_bst_offload_readdata_export => reg_bsn_monitor_v2_bst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_beamlet_output_clk_export => OPEN, + reg_bsn_monitor_v2_beamlet_output_reset_export => OPEN, + reg_bsn_monitor_v2_beamlet_output_address_export => reg_bsn_monitor_v2_beamlet_output_copi.address( + c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w - 1 downto 0), + reg_bsn_monitor_v2_beamlet_output_write_export => reg_bsn_monitor_v2_beamlet_output_copi.wr, + reg_bsn_monitor_v2_beamlet_output_writedata_export => reg_bsn_monitor_v2_beamlet_output_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_beamlet_output_read_export => reg_bsn_monitor_v2_beamlet_output_copi.rd, + reg_bsn_monitor_v2_beamlet_output_readdata_export => reg_bsn_monitor_v2_beamlet_output_cipo.rddata( + c_word_w - 1 downto 0), + + reg_bsn_monitor_v2_xst_offload_clk_export => OPEN, + reg_bsn_monitor_v2_xst_offload_reset_export => OPEN, + reg_bsn_monitor_v2_xst_offload_address_export => reg_bsn_monitor_v2_xst_offload_copi.address( + c_sdp_reg_bsn_monitor_v2_xst_offload_addr_w - 1 downto 0), + reg_bsn_monitor_v2_xst_offload_write_export => reg_bsn_monitor_v2_xst_offload_copi.wr, + reg_bsn_monitor_v2_xst_offload_writedata_export => reg_bsn_monitor_v2_xst_offload_copi.wrdata( + c_word_w - 1 downto 0), + reg_bsn_monitor_v2_xst_offload_read_export => reg_bsn_monitor_v2_xst_offload_copi.rd, + reg_bsn_monitor_v2_xst_offload_readdata_export => reg_bsn_monitor_v2_xst_offload_cipo.rddata( + c_word_w - 1 downto 0), + + reg_ring_lane_info_bf_clk_export => OPEN, + reg_ring_lane_info_bf_reset_export => OPEN, + reg_ring_lane_info_bf_address_export => reg_ring_lane_info_bf_copi.address( + c_sdp_reg_ring_lane_info_bf_addr_w - 1 downto 0), + reg_ring_lane_info_bf_write_export => reg_ring_lane_info_bf_copi.wr, + reg_ring_lane_info_bf_writedata_export => reg_ring_lane_info_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_lane_info_bf_read_export => reg_ring_lane_info_bf_copi.rd, + reg_ring_lane_info_bf_readdata_export => reg_ring_lane_info_bf_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_clk_export => OPEN, reg_bsn_monitor_v2_ring_rx_bf_reset_export => OPEN, - reg_bsn_monitor_v2_ring_rx_bf_address_export => reg_bsn_monitor_v2_ring_rx_bf_copi.address(c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_address_export => reg_bsn_monitor_v2_ring_rx_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_write_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wr, - reg_bsn_monitor_v2_ring_rx_bf_writedata_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_writedata_export => reg_bsn_monitor_v2_ring_rx_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_bf_read_export => reg_bsn_monitor_v2_ring_rx_bf_copi.rd, - reg_bsn_monitor_v2_ring_rx_bf_readdata_export => reg_bsn_monitor_v2_ring_rx_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_bf_readdata_export => reg_bsn_monitor_v2_ring_rx_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_clk_export => OPEN, reg_bsn_monitor_v2_ring_tx_bf_reset_export => OPEN, - reg_bsn_monitor_v2_ring_tx_bf_address_export => reg_bsn_monitor_v2_ring_tx_bf_copi.address(c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_address_export => reg_bsn_monitor_v2_ring_tx_bf_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_write_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wr, - reg_bsn_monitor_v2_ring_tx_bf_writedata_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_writedata_export => reg_bsn_monitor_v2_ring_tx_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_bf_read_export => reg_bsn_monitor_v2_ring_tx_bf_copi.rd, - reg_bsn_monitor_v2_ring_tx_bf_readdata_export => reg_bsn_monitor_v2_ring_tx_bf_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_bf_readdata_export => reg_bsn_monitor_v2_ring_tx_bf_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_bf_clk_export => OPEN, reg_dp_block_validate_err_bf_reset_export => OPEN, - reg_dp_block_validate_err_bf_address_export => reg_dp_block_validate_err_bf_copi.address(c_sdp_reg_dp_block_validate_err_bf_addr_w - 1 downto 0), + reg_dp_block_validate_err_bf_address_export => reg_dp_block_validate_err_bf_copi.address( + c_sdp_reg_dp_block_validate_err_bf_addr_w - 1 downto 0), reg_dp_block_validate_err_bf_write_export => reg_dp_block_validate_err_bf_copi.wr, reg_dp_block_validate_err_bf_writedata_export => reg_dp_block_validate_err_bf_copi.wrdata(c_word_w - 1 downto 0), reg_dp_block_validate_err_bf_read_export => reg_dp_block_validate_err_bf_copi.rd, @@ -1112,75 +1245,92 @@ begin reg_dp_block_validate_bsn_at_sync_bf_clk_export => OPEN, reg_dp_block_validate_bsn_at_sync_bf_reset_export => OPEN, - reg_dp_block_validate_bsn_at_sync_bf_address_export => reg_dp_block_validate_bsn_at_sync_bf_copi.address(c_sdp_reg_dp_block_validate_bsn_at_sync_bf_addr_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_address_export => reg_dp_block_validate_bsn_at_sync_bf_copi.address( + c_sdp_reg_dp_block_validate_bsn_at_sync_bf_addr_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_bf_write_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wr, - reg_dp_block_validate_bsn_at_sync_bf_writedata_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_writedata_export => reg_dp_block_validate_bsn_at_sync_bf_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_bf_read_export => reg_dp_block_validate_bsn_at_sync_bf_copi.rd, - reg_dp_block_validate_bsn_at_sync_bf_readdata_export => reg_dp_block_validate_bsn_at_sync_bf_cipo.rddata(c_word_w - 1 downto 0), - - reg_ring_lane_info_xst_clk_export => OPEN, - reg_ring_lane_info_xst_reset_export => OPEN, - reg_ring_lane_info_xst_address_export => reg_ring_lane_info_xst_copi.address(c_sdp_reg_ring_lane_info_xst_addr_w - 1 downto 0), - reg_ring_lane_info_xst_write_export => reg_ring_lane_info_xst_copi.wr, - reg_ring_lane_info_xst_writedata_export => reg_ring_lane_info_xst_copi.wrdata(c_word_w - 1 downto 0), - reg_ring_lane_info_xst_read_export => reg_ring_lane_info_xst_copi.rd, - reg_ring_lane_info_xst_readdata_export => reg_ring_lane_info_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_bf_readdata_export => reg_dp_block_validate_bsn_at_sync_bf_cipo.rddata( + c_word_w - 1 downto 0), + + reg_ring_lane_info_xst_clk_export => OPEN, + reg_ring_lane_info_xst_reset_export => OPEN, + reg_ring_lane_info_xst_address_export => reg_ring_lane_info_xst_copi.address( + c_sdp_reg_ring_lane_info_xst_addr_w - 1 downto 0), + reg_ring_lane_info_xst_write_export => reg_ring_lane_info_xst_copi.wr, + reg_ring_lane_info_xst_writedata_export => reg_ring_lane_info_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_ring_lane_info_xst_read_export => reg_ring_lane_info_xst_copi.rd, + reg_ring_lane_info_xst_readdata_export => reg_ring_lane_info_xst_cipo.rddata(c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_clk_export => OPEN, reg_bsn_monitor_v2_ring_rx_xst_reset_export => OPEN, - reg_bsn_monitor_v2_ring_rx_xst_address_export => reg_bsn_monitor_v2_ring_rx_xst_copi.address(c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_address_export => reg_bsn_monitor_v2_ring_rx_xst_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_write_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wr, - reg_bsn_monitor_v2_ring_rx_xst_writedata_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_writedata_export => reg_bsn_monitor_v2_ring_rx_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_rx_xst_read_export => reg_bsn_monitor_v2_ring_rx_xst_copi.rd, - reg_bsn_monitor_v2_ring_rx_xst_readdata_export => reg_bsn_monitor_v2_ring_rx_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_rx_xst_readdata_export => reg_bsn_monitor_v2_ring_rx_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_clk_export => OPEN, reg_bsn_monitor_v2_ring_tx_xst_reset_export => OPEN, - reg_bsn_monitor_v2_ring_tx_xst_address_export => reg_bsn_monitor_v2_ring_tx_xst_copi.address(c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_address_export => reg_bsn_monitor_v2_ring_tx_xst_copi.address( + c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_write_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wr, - reg_bsn_monitor_v2_ring_tx_xst_writedata_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_writedata_export => reg_bsn_monitor_v2_ring_tx_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_bsn_monitor_v2_ring_tx_xst_read_export => reg_bsn_monitor_v2_ring_tx_xst_copi.rd, - reg_bsn_monitor_v2_ring_tx_xst_readdata_export => reg_bsn_monitor_v2_ring_tx_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_bsn_monitor_v2_ring_tx_xst_readdata_export => reg_bsn_monitor_v2_ring_tx_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_xst_clk_export => OPEN, reg_dp_block_validate_err_xst_reset_export => OPEN, - reg_dp_block_validate_err_xst_address_export => reg_dp_block_validate_err_xst_copi.address(c_sdp_reg_dp_block_validate_err_xst_addr_w - 1 downto 0), + reg_dp_block_validate_err_xst_address_export => reg_dp_block_validate_err_xst_copi.address( + c_sdp_reg_dp_block_validate_err_xst_addr_w - 1 downto 0), reg_dp_block_validate_err_xst_write_export => reg_dp_block_validate_err_xst_copi.wr, - reg_dp_block_validate_err_xst_writedata_export => reg_dp_block_validate_err_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_err_xst_writedata_export => reg_dp_block_validate_err_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_err_xst_read_export => reg_dp_block_validate_err_xst_copi.rd, - reg_dp_block_validate_err_xst_readdata_export => reg_dp_block_validate_err_xst_cipo.rddata(c_word_w - 1 downto 0), + reg_dp_block_validate_err_xst_readdata_export => reg_dp_block_validate_err_xst_cipo.rddata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_clk_export => OPEN, reg_dp_block_validate_bsn_at_sync_xst_reset_export => OPEN, - reg_dp_block_validate_bsn_at_sync_xst_address_export => reg_dp_block_validate_bsn_at_sync_xst_copi.address(c_sdp_reg_dp_block_validate_bsn_at_sync_xst_addr_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_xst_address_export => reg_dp_block_validate_bsn_at_sync_xst_copi.address( + c_sdp_reg_dp_block_validate_bsn_at_sync_xst_addr_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_write_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wr, - reg_dp_block_validate_bsn_at_sync_xst_writedata_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wrdata(c_word_w - 1 downto 0), + reg_dp_block_validate_bsn_at_sync_xst_writedata_export => reg_dp_block_validate_bsn_at_sync_xst_copi.wrdata( + c_word_w - 1 downto 0), reg_dp_block_validate_bsn_at_sync_xst_read_export => reg_dp_block_validate_bsn_at_sync_xst_copi.rd, - reg_dp_block_validate_bsn_at_sync_xst_readdata_export => reg_dp_block_validate_bsn_at_sync_xst_cipo.rddata(c_word_w - 1 downto 0), - - reg_tr_10GbE_mac_clk_export => OPEN, - reg_tr_10GbE_mac_reset_export => OPEN, - reg_tr_10GbE_mac_address_export => reg_tr_10GbE_mac_copi.address(c_sdp_reg_tr_10GbE_mac_addr_w - 1 downto 0), - reg_tr_10GbE_mac_write_export => reg_tr_10GbE_mac_copi.wr, - reg_tr_10GbE_mac_writedata_export => reg_tr_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), - reg_tr_10GbE_mac_read_export => reg_tr_10GbE_mac_copi.rd, - reg_tr_10GbE_mac_readdata_export => reg_tr_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), - - reg_tr_10GbE_eth10g_clk_export => OPEN, - reg_tr_10GbE_eth10g_reset_export => OPEN, - reg_tr_10GbE_eth10g_address_export => reg_tr_10GbE_eth10g_copi.address(c_sdp_reg_tr_10GbE_eth10g_addr_w - 1 downto 0), - reg_tr_10GbE_eth10g_write_export => reg_tr_10GbE_eth10g_copi.wr, - reg_tr_10GbE_eth10g_writedata_export => reg_tr_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), - reg_tr_10GbE_eth10g_read_export => reg_tr_10GbE_eth10g_copi.rd, - reg_tr_10GbE_eth10g_readdata_export => reg_tr_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), - - ram_scrap_clk_export => OPEN, - ram_scrap_reset_export => OPEN, - ram_scrap_address_export => ram_scrap_copi.address(9 - 1 downto 0), - ram_scrap_write_export => ram_scrap_copi.wr, - ram_scrap_writedata_export => ram_scrap_copi.wrdata(c_word_w - 1 downto 0), - ram_scrap_read_export => ram_scrap_copi.rd, - ram_scrap_readdata_export => ram_scrap_cipo.rddata(c_word_w - 1 downto 0) - ); + reg_dp_block_validate_bsn_at_sync_xst_readdata_export => reg_dp_block_validate_bsn_at_sync_xst_cipo.rddata( + c_word_w - 1 downto 0), + + reg_tr_10GbE_mac_clk_export => OPEN, + reg_tr_10GbE_mac_reset_export => OPEN, + reg_tr_10GbE_mac_address_export => reg_tr_10GbE_mac_copi.address(c_sdp_reg_tr_10GbE_mac_addr_w - 1 downto 0), + reg_tr_10GbE_mac_write_export => reg_tr_10GbE_mac_copi.wr, + reg_tr_10GbE_mac_writedata_export => reg_tr_10GbE_mac_copi.wrdata(c_word_w - 1 downto 0), + reg_tr_10GbE_mac_read_export => reg_tr_10GbE_mac_copi.rd, + reg_tr_10GbE_mac_readdata_export => reg_tr_10GbE_mac_cipo.rddata(c_word_w - 1 downto 0), + + reg_tr_10GbE_eth10g_clk_export => OPEN, + reg_tr_10GbE_eth10g_reset_export => OPEN, + reg_tr_10GbE_eth10g_address_export => reg_tr_10GbE_eth10g_copi.address( + c_sdp_reg_tr_10GbE_eth10g_addr_w - 1 downto 0), + reg_tr_10GbE_eth10g_write_export => reg_tr_10GbE_eth10g_copi.wr, + reg_tr_10GbE_eth10g_writedata_export => reg_tr_10GbE_eth10g_copi.wrdata(c_word_w - 1 downto 0), + reg_tr_10GbE_eth10g_read_export => reg_tr_10GbE_eth10g_copi.rd, + reg_tr_10GbE_eth10g_readdata_export => reg_tr_10GbE_eth10g_cipo.rddata(c_word_w - 1 downto 0), + + ram_scrap_clk_export => OPEN, + ram_scrap_reset_export => OPEN, + ram_scrap_address_export => ram_scrap_copi.address(9 - 1 downto 0), + ram_scrap_write_export => ram_scrap_copi.wr, + ram_scrap_writedata_export => ram_scrap_copi.wrdata(c_word_w - 1 downto 0), + ram_scrap_read_export => ram_scrap_copi.rd, + ram_scrap_readdata_export => ram_scrap_cipo.rddata(c_word_w - 1 downto 0) + ); end generate; end str; diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd index 985c676665579ebb87eb4c6ff8e2251648cb4f2d..9d9bdfb5a95467c1ed399a59329a0464e06947a9 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd @@ -31,20 +31,20 @@ -- c_eth_check_nof_packets = 1 instead of S_pn = 12. ------------------------------------------------------------------------------- library IEEE, common_lib, unb2c_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, lofar2_sdp_lib, wpfb_lib, eth_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use IEEE.math_real.all; -use common_lib.common_pkg.all; -use unb2c_board_lib.unb2c_board_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.common_str_pkg.all; -use mm_lib.mm_file_pkg.all; -use dp_lib.dp_stream_pkg.all; -use mm_lib.mm_file_unb_pkg.all; -use diag_lib.diag_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use lofar2_sdp_lib.sdp_pkg.all; -use eth_lib.eth_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use IEEE.math_real.all; + use common_lib.common_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.common_str_pkg.all; + use dp_lib.dp_stream_pkg.all; + use mm_lib.mm_file_pkg.all; + use mm_lib.mm_file_unb_pkg.all; + use diag_lib.diag_pkg.all; + use unb2c_board_lib.unb2c_board_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use eth_lib.eth_pkg.all; + use lofar2_sdp_lib.sdp_pkg.all; entity tb_lofar2_unb2c_sdp_station is end tb_lofar2_unb2c_sdp_station; @@ -65,12 +65,15 @@ architecture tb of tb_lofar2_unb2c_sdp_station is constant c_nof_block_per_sync : natural := 16; constant c_nof_clk_per_sync : natural := c_nof_block_per_sync * c_sdp_N_fft; constant c_pps_period : natural := c_nof_clk_per_sync; - constant c_wpfb_sim : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync); + constant c_wpfb_sim : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, + c_nof_block_per_sync); -- WG - constant c_bsn_start_wg : natural := 2; -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values + constant c_bsn_start_wg : natural := 2; -- start WG at this BSN to instead of some BSN, to avoid + -- mismatches in exact expected data values constant c_ampl_sp_0 : natural := 2**(c_sdp_W_adc - 1) / 2; -- in number of lsb - constant c_subband_sp_0 : real := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz + constant c_subband_sp_0 : real := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = + -- 19.921875 MHz -- 1GbE output constant c_eth_check_nof_packets : natural := 1; @@ -174,7 +177,7 @@ begin JESD204B_SYNC_N => jesd204b_sync_n ); - --------------------------------------------------------------------------------------------------------------------- + ----------------------------------------------------------------------------- -- Stimuli -- MM slave accesses via file IO tb_clk <= (not tb_clk) or tb_end after c_tb_clk_period / 2; -- Testbench MM clock @@ -199,10 +202,10 @@ begin -- 1 : phase[15:0] -- 2 : freq[30:0] -- 3 : ampl[16:0] - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024 * 2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, integer( 0.0 * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024 * 2**16 + 1, tb_clk); -- nof_samples, mode calc + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, integer(0.0 * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, integer(c_subband_sp_0 * c_sdp_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, integer(real(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk); -- ampl + mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, integer(real(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk); -- ampl -- Read current BSN mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 downto 0), tb_clk); diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd index 2c232e370e4a19cdca0067674e2991ebbd649fbd..185ca0134506d26287dbce6f2ee321f5790d629e 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_input_repack.vhd @@ -56,7 +56,7 @@ end ddrctrl_input_repack; architecture rtl of ddrctrl_input_repack is -- constant for readability constant c_out_data_w : natural := func_tech_ddr_ctlr_data_w( g_tech_ddr ); -- the output data with, 576 - constant k_c_v_w : natural := c_out_data_w * 2; -- the c_v data with, 2*576=1152 + constant c_c_v_w : natural := c_out_data_w * 2; -- the c_v data with, 2*576=1152 -- type for statemachine type t_state is (OVERFLOW_OUTPUT, FILL_VECTOR, FIRST_OUTPUT, RESET, STOP, BSN); @@ -64,7 +64,7 @@ architecture rtl of ddrctrl_input_repack is -- record for readability type t_reg is record state : t_state; -- the state the process is currently in; - c_v : std_logic_vector(k_c_v_w - 1 downto 0); -- the vector that stores the input data until the data is put into the output data vector + c_v : std_logic_vector(c_c_v_w - 1 downto 0); -- the vector that stores the input data until the data is put into the output data vector c_v_count : natural; -- the amount of times the c_v vector received data from the input since the last time it was filled completely q_bsn : std_logic_vector(c_dp_stream_bsn_w - 1 downto 0); q_sop : std_logic; @@ -114,9 +114,9 @@ begin when OVERFLOW_OUTPUT => -- if the input data exceeds the output data vector width and the c_v width v.out_of := q_reg.out_of + (g_in_data_w * (q_reg.c_v_count + 1)) - (c_out_data_w * 2); -- check how much overflow there is and safe it in out_of - v.c_v(k_c_v_w - 1 downto k_c_v_w - (g_in_data_w - v.out_of)) := in_sosi.data(g_in_data_w - v.out_of - 1 downto 0); -- fill the rest of c_v untill the end + v.c_v(c_c_v_w - 1 downto c_c_v_w - (g_in_data_w - v.out_of)) := in_sosi.data(g_in_data_w - v.out_of - 1 downto 0); -- fill the rest of c_v untill the end v.c_v(v.out_of - 1 downto 0) := in_sosi.data(g_in_data_w - 1 downto g_in_data_w - v.out_of); -- fill the start of c_v untill the out_of - v.out_sosi.data(c_out_data_w - 1 downto 0) := v.c_v(k_c_v_w - 1 downto c_out_data_w); -- fill out_sosi.data with 2nd part of c_v + v.out_sosi.data(c_out_data_w - 1 downto 0) := v.c_v(c_c_v_w - 1 downto c_out_data_w); -- fill out_sosi.data with 2nd part of c_v v.out_sosi.valid := '1'; -- out_sosi.valid 1 v.c_v_count := 0; -- reset counter v.out_data_count := '0'; -- reset counter @@ -128,13 +128,13 @@ begin when BSN => - v.c_v(k_c_v_w - 1 downto ((g_in_data_w * q_reg.c_v_count) + q_reg.out_of)) := (others => '0'); + v.c_v(c_c_v_w - 1 downto ((g_in_data_w * q_reg.c_v_count) + q_reg.out_of)) := (others => '0'); v.out_of := 0; if ((g_in_data_w * q_reg.c_v_count) + q_reg.out_of < c_out_data_w * 1) then v.out_sosi.data(c_out_data_w - 1 downto 0) := v.c_v(c_out_data_w - 1 downto 0); -- fill out_sosi.data with 1st part of c_v v.out_sosi.valid := '1'; -- out_sosi.valid 1 else - v.out_sosi.data(c_out_data_w - 1 downto 0) := v.c_v(k_c_v_w - 1 downto c_out_data_w); -- fill out_sosi.data with 2nd part of c_v + v.out_sosi.data(c_out_data_w - 1 downto 0) := v.c_v(c_c_v_w - 1 downto c_out_data_w); -- fill out_sosi.data with 2nd part of c_v v.out_sosi.valid := '1'; -- out_sosi.valid 1 end if; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd index be5959997943e1b997138934c514bda52e710d98..5b81c46fe106d9f6783fe589787ed397060025c7 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd @@ -36,18 +36,19 @@ -- . ------------------------------------------------------------------------------- -library IEEE, common_lib, dp_lib, diag_lib, rTwoSDF_lib, common_mult_lib, fft_lib, wpfb_lib, filter_lib, si_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 rTwoSDF_lib.rTwoSDFPkg.all; -use filter_lib.fil_pkg.all; -use fft_lib.fft_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use diag_lib.diag_pkg.all; -use work.sdp_pkg.all; +library IEEE, common_lib, dp_lib, mm_lib, diag_lib, common_mult_lib; +library rTwoSDF_lib, fft_lib, wpfb_lib, filter_lib, si_lib, st_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 diag_lib.diag_pkg.all; + use rTwoSDF_lib.rTwoSDFPkg.all; + use filter_lib.fil_pkg.all; + use fft_lib.fft_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use work.sdp_pkg.all; entity node_sdp_oversampled_filterbank is generic ( @@ -114,7 +115,8 @@ architecture str of node_sdp_oversampled_filterbank is constant c_subband_raw_fraction_w : natural := func_fft_raw_fraction_w(c_fft); constant c_complex_subband_raw_dat_w : natural := func_fft_raw_dat_w(c_fft_complex); constant c_complex_subband_raw_fraction_w : natural := func_fft_raw_fraction_w(c_fft_complex); - constant c_dat_w_diff : integer := c_complex_subband_raw_dat_w - c_subband_raw_dat_w; -- = -1 which is used to shift 1 bit to the left. + constant c_dat_w_diff : integer := c_complex_subband_raw_dat_w - c_subband_raw_dat_w; -- = -1 + -- which is used to shift 1 bit to the left. constant c_nof_masters : positive := 2; @@ -190,17 +192,24 @@ architecture str of node_sdp_oversampled_filterbank is signal wpfb_complex_out_resized_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn - 1 downto 0) := (others => c_dp_sosi_rst); -- Interleave positive frequencies per factor Q_fft = 2, like with output of real input FFT - signal wpfb_complex_out_fifo_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn - 1 downto 0) := (others => c_dp_sosi_rst); - signal wpfb_complex_out_fifo_siso_arr : t_dp_siso_arr(c_sdp_S_pn - 1 downto 0) := (others => c_dp_siso_rst); - signal wpfb_complex_out_resized_sosi_2arr : t_dp_sosi_2arr_2(c_sdp_P_pfb - 1 downto 0) := (others => (others => c_dp_sosi_rst)); - signal wpfb_complex_out_resized_siso_2arr : t_dp_siso_2arr_2(c_sdp_P_pfb - 1 downto 0) := (others => (others => c_dp_siso_rst)); + signal wpfb_complex_out_fifo_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn - 1 downto 0) := (others => c_dp_sosi_rst); + signal wpfb_complex_out_fifo_siso_arr : t_dp_siso_arr(c_sdp_S_pn - 1 downto 0) := (others => c_dp_siso_rst); + signal wpfb_complex_out_resized_sosi_2arr : t_dp_sosi_2arr_2(c_sdp_P_pfb - 1 downto 0) := + (others => (others => c_dp_sosi_rst)); + signal wpfb_complex_out_resized_siso_2arr : t_dp_siso_2arr_2(c_sdp_P_pfb - 1 downto 0) := + (others => (others => c_dp_siso_rst)); signal wpfb_complex_out_interleaved_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); - signal subband_equalizer_in_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); - signal subband_equalizer_quant_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); - signal subband_equalizer_raw_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); - signal dp_selector_out_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); - signal dp_selector_pipe_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); + signal subband_equalizer_in_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); + signal subband_equalizer_quant_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); + signal subband_equalizer_raw_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); + signal dp_selector_out_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); + signal dp_selector_pipe_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); signal scope_equalizer_in_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn - 1 downto 0); signal scope_equalizer_out_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn - 1 downto 0); @@ -422,7 +431,8 @@ begin in_dat => dp_bsn_source_restart_pipe, out_dat => dp_bsn_source_restart_pipe_complex ); - process(mixer_complex_requantize_src_out_arr, si_sosi_0_piped) + + p_align : process(mixer_complex_requantize_src_out_arr, si_sosi_0_piped) begin for I in 0 to c_sdp_S_pn - 1 loop wpfb_unit_complex_in_sosi_arr(I) <= si_sosi_0_piped; @@ -525,10 +535,11 @@ begin p_add_bit : process(wpfb_complex_out_interleaved_sosi_arr) begin subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I) <= wpfb_complex_out_interleaved_sosi_arr(I); - subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).re <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).re, c_dat_w_diff); - subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).im <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).im, c_dat_w_diff); + subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).re <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).re, + c_dat_w_diff); + subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).im <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).im, + c_dat_w_diff); end process; - end generate; -- Pipeline to compensate for longer latency of the complex PFB. diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_adc_input_and_timing.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_adc_input_and_timing.vhd index 4e21a2d069b9ca0a7a0bfe74dbb4b4cad8ac6618..6c2d2b2a4886f7847598f54f1baa9baee4aafa8a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_adc_input_and_timing.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_adc_input_and_timing.vhd @@ -95,7 +95,8 @@ entity sdp_adc_input_and_timing is -- Streaming data output out_sosi_arr : out t_dp_sosi_arr(c_sdp_S_pn - 1 downto 0); rx_bsn_source_restart : out std_logic; -- for dp_sync_recover in WPFB - rx_bsn_source_new_interval : out std_logic; -- for SST and BST statistics offload, XST uses new_interval based on xst_processing_enable + rx_bsn_source_new_interval : out std_logic; -- for SST and BST statistics offload, XST uses new_interval + -- based on xst_processing_enable rx_bsn_source_nof_clk_per_sync : out std_logic_vector(c_word_w - 1 downto 0) -- for RSN source in transient buffer ); end sdp_adc_input_and_timing; @@ -224,7 +225,9 @@ begin ant_sosi_arr <= rx_sosi_arr; for I in 0 to c_sdp_S_pn - 1 loop -- ADC data is stored in the upper 14 bits of the jesd rx_sosi. - ant_sosi_arr(I).data <= RESIZE_DP_SDATA(rx_sosi_arr(I).data(c_sdp_W_adc_jesd - 1 downto (c_sdp_W_adc_jesd - c_sdp_W_adc) )); + ant_sosi_arr(I).data <= RESIZE_DP_SDATA( + rx_sosi_arr(I).data(c_sdp_W_adc_jesd - 1 downto (c_sdp_W_adc_jesd - c_sdp_W_adc)) + ); ant_sosi_arr(I).valid <= rx_sosi_arr(I).valid; -- connect, but not used end loop; end process; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd index 35d4a7135c9afaf6b2d618c5d91cfb62c7fa5c9d..d41ec0ccd241b57d9e2285b668175073e70ef9ad 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd @@ -69,7 +69,7 @@ entity sdp_bdo_destinations_reg is end sdp_bdo_destinations_reg; architecture str of sdp_bdo_destinations_reg is - constant c_field_arr : t_common_field_arr(c_sdp_bdo_destinations_info_nof_hdr_fields - 1 downto 0) := + constant c_fa : t_common_field_arr(c_sdp_bdo_destinations_info_nof_hdr_fields - 1 downto 0) := ( (field_name_pad("nof_blocks_per_packet"), "RO", 8, field_default(c_sdp_cep_nof_blocks_per_packet)), (field_name_pad("nof_destinations_max"), "RO", 8, field_default(g_nof_destinations_max)), (field_name_pad("nof_destinations_act"), "RO", 8, field_default(1)), @@ -174,8 +174,8 @@ architecture str of sdp_bdo_destinations_reg is (field_name_pad("eth_destination_mac_1"), "RW", 48, field_default(0)), (field_name_pad("eth_destination_mac_0"), "RW", 48, field_default(0)) ); - signal mm_fields_in : std_logic_vector(field_slv_in_len(c_field_arr) - 1 downto 0); - signal mm_fields_out : std_logic_vector(field_slv_out_len(c_field_arr) - 1 downto 0); + signal mm_fields_in : std_logic_vector(field_slv_in_len(c_fa) - 1 downto 0); + signal mm_fields_out : std_logic_vector(field_slv_out_len(c_fa) - 1 downto 0); signal destinations_info_rd : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst; signal destinations_info_wr : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst; @@ -216,7 +216,7 @@ begin -- stability will have settled long before that. g_cross_clock_domain => false, g_use_slv_in_val => false, -- use false to save logic when always slv_in_val='1' - g_field_arr => c_field_arr + g_field_arr => c_fa ) port map ( mm_clk => mm_clk, @@ -235,111 +235,211 @@ begin ); -- add "RO" fields to mm_fields - mm_fields_in(field_hi(c_field_arr, "nof_destinations_act") downto field_lo(c_field_arr, "nof_destinations_act")) <= to_uvec(destinations_info_rd.nof_destinations_act, 8); - mm_fields_in(field_hi(c_field_arr, "nof_destinations_max") downto field_lo(c_field_arr, "nof_destinations_max")) <= to_uvec(destinations_info_rd.nof_destinations_max, 8); - mm_fields_in(field_hi(c_field_arr, "nof_blocks_per_packet") downto field_lo(c_field_arr, "nof_blocks_per_packet")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet, 8); + mm_fields_in(field_hi(c_fa, "nof_destinations_act") downto + field_lo(c_fa, "nof_destinations_act")) <= to_uvec(destinations_info_rd.nof_destinations_act, 8); + mm_fields_in(field_hi(c_fa, "nof_destinations_max") downto + field_lo(c_fa, "nof_destinations_max")) <= to_uvec(destinations_info_rd.nof_destinations_max, 8); + mm_fields_in(field_hi(c_fa, "nof_blocks_per_packet") downto + field_lo(c_fa, "nof_blocks_per_packet")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet, 8); -- get "RW" fields from mm_fields - destinations_info_wr.eth_destination_mac_arr(0) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_0") downto field_lo(c_field_arr, "eth_destination_mac_0")); - destinations_info_wr.eth_destination_mac_arr(1) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_1") downto field_lo(c_field_arr, "eth_destination_mac_1")); - destinations_info_wr.eth_destination_mac_arr(2) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_2") downto field_lo(c_field_arr, "eth_destination_mac_2")); - destinations_info_wr.eth_destination_mac_arr(3) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_3") downto field_lo(c_field_arr, "eth_destination_mac_3")); - destinations_info_wr.eth_destination_mac_arr(4) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_4") downto field_lo(c_field_arr, "eth_destination_mac_4")); - destinations_info_wr.eth_destination_mac_arr(5) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_5") downto field_lo(c_field_arr, "eth_destination_mac_5")); - destinations_info_wr.eth_destination_mac_arr(6) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_6") downto field_lo(c_field_arr, "eth_destination_mac_6")); - destinations_info_wr.eth_destination_mac_arr(7) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_7") downto field_lo(c_field_arr, "eth_destination_mac_7")); - destinations_info_wr.eth_destination_mac_arr(8) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_8") downto field_lo(c_field_arr, "eth_destination_mac_8")); - destinations_info_wr.eth_destination_mac_arr(9) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_9") downto field_lo(c_field_arr, "eth_destination_mac_9")); - destinations_info_wr.eth_destination_mac_arr(10) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_10") downto field_lo(c_field_arr, "eth_destination_mac_10")); - destinations_info_wr.eth_destination_mac_arr(11) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_11") downto field_lo(c_field_arr, "eth_destination_mac_11")); - destinations_info_wr.eth_destination_mac_arr(12) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_12") downto field_lo(c_field_arr, "eth_destination_mac_12")); - destinations_info_wr.eth_destination_mac_arr(13) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_13") downto field_lo(c_field_arr, "eth_destination_mac_13")); - destinations_info_wr.eth_destination_mac_arr(14) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_14") downto field_lo(c_field_arr, "eth_destination_mac_14")); - destinations_info_wr.eth_destination_mac_arr(15) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_15") downto field_lo(c_field_arr, "eth_destination_mac_15")); - destinations_info_wr.eth_destination_mac_arr(16) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_16") downto field_lo(c_field_arr, "eth_destination_mac_16")); - destinations_info_wr.eth_destination_mac_arr(17) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_17") downto field_lo(c_field_arr, "eth_destination_mac_17")); - destinations_info_wr.eth_destination_mac_arr(18) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_18") downto field_lo(c_field_arr, "eth_destination_mac_18")); - destinations_info_wr.eth_destination_mac_arr(19) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_19") downto field_lo(c_field_arr, "eth_destination_mac_19")); - destinations_info_wr.eth_destination_mac_arr(20) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_20") downto field_lo(c_field_arr, "eth_destination_mac_20")); - destinations_info_wr.eth_destination_mac_arr(21) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_21") downto field_lo(c_field_arr, "eth_destination_mac_21")); - destinations_info_wr.eth_destination_mac_arr(22) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_22") downto field_lo(c_field_arr, "eth_destination_mac_22")); - destinations_info_wr.eth_destination_mac_arr(23) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_23") downto field_lo(c_field_arr, "eth_destination_mac_23")); - destinations_info_wr.eth_destination_mac_arr(24) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_24") downto field_lo(c_field_arr, "eth_destination_mac_24")); - destinations_info_wr.eth_destination_mac_arr(25) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_25") downto field_lo(c_field_arr, "eth_destination_mac_25")); - destinations_info_wr.eth_destination_mac_arr(26) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_26") downto field_lo(c_field_arr, "eth_destination_mac_26")); - destinations_info_wr.eth_destination_mac_arr(27) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_27") downto field_lo(c_field_arr, "eth_destination_mac_27")); - destinations_info_wr.eth_destination_mac_arr(28) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_28") downto field_lo(c_field_arr, "eth_destination_mac_28")); - destinations_info_wr.eth_destination_mac_arr(29) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_29") downto field_lo(c_field_arr, "eth_destination_mac_29")); - destinations_info_wr.eth_destination_mac_arr(30) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_30") downto field_lo(c_field_arr, "eth_destination_mac_30")); - destinations_info_wr.eth_destination_mac_arr(31) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_31") downto field_lo(c_field_arr, "eth_destination_mac_31")); + destinations_info_wr.eth_destination_mac_arr(0) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_0") downto + field_lo(c_fa, "eth_destination_mac_0")); + destinations_info_wr.eth_destination_mac_arr(1) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_1") downto + field_lo(c_fa, "eth_destination_mac_1")); + destinations_info_wr.eth_destination_mac_arr(2) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_2") downto + field_lo(c_fa, "eth_destination_mac_2")); + destinations_info_wr.eth_destination_mac_arr(3) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_3") downto + field_lo(c_fa, "eth_destination_mac_3")); + destinations_info_wr.eth_destination_mac_arr(4) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_4") downto + field_lo(c_fa, "eth_destination_mac_4")); + destinations_info_wr.eth_destination_mac_arr(5) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_5") downto + field_lo(c_fa, "eth_destination_mac_5")); + destinations_info_wr.eth_destination_mac_arr(6) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_6") downto + field_lo(c_fa, "eth_destination_mac_6")); + destinations_info_wr.eth_destination_mac_arr(7) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_7") downto + field_lo(c_fa, "eth_destination_mac_7")); + destinations_info_wr.eth_destination_mac_arr(8) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_8") downto + field_lo(c_fa, "eth_destination_mac_8")); + destinations_info_wr.eth_destination_mac_arr(9) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_9") downto + field_lo(c_fa, "eth_destination_mac_9")); + destinations_info_wr.eth_destination_mac_arr(10) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_10") downto + field_lo(c_fa, "eth_destination_mac_10")); + destinations_info_wr.eth_destination_mac_arr(11) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_11") downto + field_lo(c_fa, "eth_destination_mac_11")); + destinations_info_wr.eth_destination_mac_arr(12) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_12") downto + field_lo(c_fa, "eth_destination_mac_12")); + destinations_info_wr.eth_destination_mac_arr(13) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_13") downto + field_lo(c_fa, "eth_destination_mac_13")); + destinations_info_wr.eth_destination_mac_arr(14) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_14") downto + field_lo(c_fa, "eth_destination_mac_14")); + destinations_info_wr.eth_destination_mac_arr(15) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_15") downto + field_lo(c_fa, "eth_destination_mac_15")); + destinations_info_wr.eth_destination_mac_arr(16) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_16") downto + field_lo(c_fa, "eth_destination_mac_16")); + destinations_info_wr.eth_destination_mac_arr(17) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_17") downto + field_lo(c_fa, "eth_destination_mac_17")); + destinations_info_wr.eth_destination_mac_arr(18) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_18") downto + field_lo(c_fa, "eth_destination_mac_18")); + destinations_info_wr.eth_destination_mac_arr(19) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_19") downto + field_lo(c_fa, "eth_destination_mac_19")); + destinations_info_wr.eth_destination_mac_arr(20) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_20") downto + field_lo(c_fa, "eth_destination_mac_20")); + destinations_info_wr.eth_destination_mac_arr(21) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_21") downto + field_lo(c_fa, "eth_destination_mac_21")); + destinations_info_wr.eth_destination_mac_arr(22) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_22") downto + field_lo(c_fa, "eth_destination_mac_22")); + destinations_info_wr.eth_destination_mac_arr(23) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_23") downto + field_lo(c_fa, "eth_destination_mac_23")); + destinations_info_wr.eth_destination_mac_arr(24) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_24") downto + field_lo(c_fa, "eth_destination_mac_24")); + destinations_info_wr.eth_destination_mac_arr(25) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_25") downto + field_lo(c_fa, "eth_destination_mac_25")); + destinations_info_wr.eth_destination_mac_arr(26) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_26") downto + field_lo(c_fa, "eth_destination_mac_26")); + destinations_info_wr.eth_destination_mac_arr(27) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_27") downto + field_lo(c_fa, "eth_destination_mac_27")); + destinations_info_wr.eth_destination_mac_arr(28) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_28") downto + field_lo(c_fa, "eth_destination_mac_28")); + destinations_info_wr.eth_destination_mac_arr(29) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_29") downto + field_lo(c_fa, "eth_destination_mac_29")); + destinations_info_wr.eth_destination_mac_arr(30) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_30") downto + field_lo(c_fa, "eth_destination_mac_30")); + destinations_info_wr.eth_destination_mac_arr(31) <= mm_fields_out(field_hi(c_fa, "eth_destination_mac_31") downto + field_lo(c_fa, "eth_destination_mac_31")); - destinations_info_wr.ip_destination_address_arr(0) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_0") downto field_lo(c_field_arr, "ip_destination_address_0")); - destinations_info_wr.ip_destination_address_arr(1) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_1") downto field_lo(c_field_arr, "ip_destination_address_1")); - destinations_info_wr.ip_destination_address_arr(2) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_2") downto field_lo(c_field_arr, "ip_destination_address_2")); - destinations_info_wr.ip_destination_address_arr(3) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_3") downto field_lo(c_field_arr, "ip_destination_address_3")); - destinations_info_wr.ip_destination_address_arr(4) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_4") downto field_lo(c_field_arr, "ip_destination_address_4")); - destinations_info_wr.ip_destination_address_arr(5) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_5") downto field_lo(c_field_arr, "ip_destination_address_5")); - destinations_info_wr.ip_destination_address_arr(6) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_6") downto field_lo(c_field_arr, "ip_destination_address_6")); - destinations_info_wr.ip_destination_address_arr(7) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_7") downto field_lo(c_field_arr, "ip_destination_address_7")); - destinations_info_wr.ip_destination_address_arr(8) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_8") downto field_lo(c_field_arr, "ip_destination_address_8")); - destinations_info_wr.ip_destination_address_arr(9) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_9") downto field_lo(c_field_arr, "ip_destination_address_9")); - destinations_info_wr.ip_destination_address_arr(10) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_10") downto field_lo(c_field_arr, "ip_destination_address_10")); - destinations_info_wr.ip_destination_address_arr(11) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_11") downto field_lo(c_field_arr, "ip_destination_address_11")); - destinations_info_wr.ip_destination_address_arr(12) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_12") downto field_lo(c_field_arr, "ip_destination_address_12")); - destinations_info_wr.ip_destination_address_arr(13) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_13") downto field_lo(c_field_arr, "ip_destination_address_13")); - destinations_info_wr.ip_destination_address_arr(14) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_14") downto field_lo(c_field_arr, "ip_destination_address_14")); - destinations_info_wr.ip_destination_address_arr(15) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_15") downto field_lo(c_field_arr, "ip_destination_address_15")); - destinations_info_wr.ip_destination_address_arr(16) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_16") downto field_lo(c_field_arr, "ip_destination_address_16")); - destinations_info_wr.ip_destination_address_arr(17) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_17") downto field_lo(c_field_arr, "ip_destination_address_17")); - destinations_info_wr.ip_destination_address_arr(18) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_18") downto field_lo(c_field_arr, "ip_destination_address_18")); - destinations_info_wr.ip_destination_address_arr(19) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_19") downto field_lo(c_field_arr, "ip_destination_address_19")); - destinations_info_wr.ip_destination_address_arr(20) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_20") downto field_lo(c_field_arr, "ip_destination_address_20")); - destinations_info_wr.ip_destination_address_arr(21) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_21") downto field_lo(c_field_arr, "ip_destination_address_21")); - destinations_info_wr.ip_destination_address_arr(22) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_22") downto field_lo(c_field_arr, "ip_destination_address_22")); - destinations_info_wr.ip_destination_address_arr(23) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_23") downto field_lo(c_field_arr, "ip_destination_address_23")); - destinations_info_wr.ip_destination_address_arr(24) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_24") downto field_lo(c_field_arr, "ip_destination_address_24")); - destinations_info_wr.ip_destination_address_arr(25) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_25") downto field_lo(c_field_arr, "ip_destination_address_25")); - destinations_info_wr.ip_destination_address_arr(26) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_26") downto field_lo(c_field_arr, "ip_destination_address_26")); - destinations_info_wr.ip_destination_address_arr(27) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_27") downto field_lo(c_field_arr, "ip_destination_address_27")); - destinations_info_wr.ip_destination_address_arr(28) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_28") downto field_lo(c_field_arr, "ip_destination_address_28")); - destinations_info_wr.ip_destination_address_arr(29) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_29") downto field_lo(c_field_arr, "ip_destination_address_29")); - destinations_info_wr.ip_destination_address_arr(30) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_30") downto field_lo(c_field_arr, "ip_destination_address_30")); - destinations_info_wr.ip_destination_address_arr(31) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_31") downto field_lo(c_field_arr, "ip_destination_address_31")); + destinations_info_wr.ip_destination_address_arr(0) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_0") + downto field_lo(c_fa, "ip_destination_address_0")); + destinations_info_wr.ip_destination_address_arr(1) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_1") + downto field_lo(c_fa, "ip_destination_address_1")); + destinations_info_wr.ip_destination_address_arr(2) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_2") + downto field_lo(c_fa, "ip_destination_address_2")); + destinations_info_wr.ip_destination_address_arr(3) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_3") + downto field_lo(c_fa, "ip_destination_address_3")); + destinations_info_wr.ip_destination_address_arr(4) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_4") + downto field_lo(c_fa, "ip_destination_address_4")); + destinations_info_wr.ip_destination_address_arr(5) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_5") + downto field_lo(c_fa, "ip_destination_address_5")); + destinations_info_wr.ip_destination_address_arr(6) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_6") + downto field_lo(c_fa, "ip_destination_address_6")); + destinations_info_wr.ip_destination_address_arr(7) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_7") + downto field_lo(c_fa, "ip_destination_address_7")); + destinations_info_wr.ip_destination_address_arr(8) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_8") + downto field_lo(c_fa, "ip_destination_address_8")); + destinations_info_wr.ip_destination_address_arr(9) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_9") + downto field_lo(c_fa, "ip_destination_address_9")); + destinations_info_wr.ip_destination_address_arr(10) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_10") + downto field_lo(c_fa, "ip_destination_address_10")); + destinations_info_wr.ip_destination_address_arr(11) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_11") + downto field_lo(c_fa, "ip_destination_address_11")); + destinations_info_wr.ip_destination_address_arr(12) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_12") + downto field_lo(c_fa, "ip_destination_address_12")); + destinations_info_wr.ip_destination_address_arr(13) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_13") + downto field_lo(c_fa, "ip_destination_address_13")); + destinations_info_wr.ip_destination_address_arr(14) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_14") + downto field_lo(c_fa, "ip_destination_address_14")); + destinations_info_wr.ip_destination_address_arr(15) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_15") + downto field_lo(c_fa, "ip_destination_address_15")); + destinations_info_wr.ip_destination_address_arr(16) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_16") + downto field_lo(c_fa, "ip_destination_address_16")); + destinations_info_wr.ip_destination_address_arr(17) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_17") + downto field_lo(c_fa, "ip_destination_address_17")); + destinations_info_wr.ip_destination_address_arr(18) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_18") + downto field_lo(c_fa, "ip_destination_address_18")); + destinations_info_wr.ip_destination_address_arr(19) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_19") + downto field_lo(c_fa, "ip_destination_address_19")); + destinations_info_wr.ip_destination_address_arr(20) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_20") + downto field_lo(c_fa, "ip_destination_address_20")); + destinations_info_wr.ip_destination_address_arr(21) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_21") + downto field_lo(c_fa, "ip_destination_address_21")); + destinations_info_wr.ip_destination_address_arr(22) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_22") + downto field_lo(c_fa, "ip_destination_address_22")); + destinations_info_wr.ip_destination_address_arr(23) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_23") + downto field_lo(c_fa, "ip_destination_address_23")); + destinations_info_wr.ip_destination_address_arr(24) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_24") + downto field_lo(c_fa, "ip_destination_address_24")); + destinations_info_wr.ip_destination_address_arr(25) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_25") + downto field_lo(c_fa, "ip_destination_address_25")); + destinations_info_wr.ip_destination_address_arr(26) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_26") + downto field_lo(c_fa, "ip_destination_address_26")); + destinations_info_wr.ip_destination_address_arr(27) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_27") + downto field_lo(c_fa, "ip_destination_address_27")); + destinations_info_wr.ip_destination_address_arr(28) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_28") + downto field_lo(c_fa, "ip_destination_address_28")); + destinations_info_wr.ip_destination_address_arr(29) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_29") + downto field_lo(c_fa, "ip_destination_address_29")); + destinations_info_wr.ip_destination_address_arr(30) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_30") + downto field_lo(c_fa, "ip_destination_address_30")); + destinations_info_wr.ip_destination_address_arr(31) <= mm_fields_out(field_hi(c_fa, "ip_destination_address_31") + downto field_lo(c_fa, "ip_destination_address_31")); - destinations_info_wr.udp_destination_port_arr(0) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_0") downto field_lo(c_field_arr, "udp_destination_port_0")); - destinations_info_wr.udp_destination_port_arr(1) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_1") downto field_lo(c_field_arr, "udp_destination_port_1")); - destinations_info_wr.udp_destination_port_arr(2) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_2") downto field_lo(c_field_arr, "udp_destination_port_2")); - destinations_info_wr.udp_destination_port_arr(3) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_3") downto field_lo(c_field_arr, "udp_destination_port_3")); - destinations_info_wr.udp_destination_port_arr(4) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_4") downto field_lo(c_field_arr, "udp_destination_port_4")); - destinations_info_wr.udp_destination_port_arr(5) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_5") downto field_lo(c_field_arr, "udp_destination_port_5")); - destinations_info_wr.udp_destination_port_arr(6) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_6") downto field_lo(c_field_arr, "udp_destination_port_6")); - destinations_info_wr.udp_destination_port_arr(7) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_7") downto field_lo(c_field_arr, "udp_destination_port_7")); - destinations_info_wr.udp_destination_port_arr(8) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_8") downto field_lo(c_field_arr, "udp_destination_port_8")); - destinations_info_wr.udp_destination_port_arr(9) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_9") downto field_lo(c_field_arr, "udp_destination_port_9")); - destinations_info_wr.udp_destination_port_arr(10) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_10") downto field_lo(c_field_arr, "udp_destination_port_10")); - destinations_info_wr.udp_destination_port_arr(11) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_11") downto field_lo(c_field_arr, "udp_destination_port_11")); - destinations_info_wr.udp_destination_port_arr(12) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_12") downto field_lo(c_field_arr, "udp_destination_port_12")); - destinations_info_wr.udp_destination_port_arr(13) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_13") downto field_lo(c_field_arr, "udp_destination_port_13")); - destinations_info_wr.udp_destination_port_arr(14) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_14") downto field_lo(c_field_arr, "udp_destination_port_14")); - destinations_info_wr.udp_destination_port_arr(15) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_15") downto field_lo(c_field_arr, "udp_destination_port_15")); - destinations_info_wr.udp_destination_port_arr(16) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_16") downto field_lo(c_field_arr, "udp_destination_port_16")); - destinations_info_wr.udp_destination_port_arr(17) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_17") downto field_lo(c_field_arr, "udp_destination_port_17")); - destinations_info_wr.udp_destination_port_arr(18) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_18") downto field_lo(c_field_arr, "udp_destination_port_18")); - destinations_info_wr.udp_destination_port_arr(19) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_19") downto field_lo(c_field_arr, "udp_destination_port_19")); - destinations_info_wr.udp_destination_port_arr(20) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_20") downto field_lo(c_field_arr, "udp_destination_port_20")); - destinations_info_wr.udp_destination_port_arr(21) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_21") downto field_lo(c_field_arr, "udp_destination_port_21")); - destinations_info_wr.udp_destination_port_arr(22) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_22") downto field_lo(c_field_arr, "udp_destination_port_22")); - destinations_info_wr.udp_destination_port_arr(23) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_23") downto field_lo(c_field_arr, "udp_destination_port_23")); - destinations_info_wr.udp_destination_port_arr(24) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_24") downto field_lo(c_field_arr, "udp_destination_port_24")); - destinations_info_wr.udp_destination_port_arr(25) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_25") downto field_lo(c_field_arr, "udp_destination_port_25")); - destinations_info_wr.udp_destination_port_arr(26) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_26") downto field_lo(c_field_arr, "udp_destination_port_26")); - destinations_info_wr.udp_destination_port_arr(27) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_27") downto field_lo(c_field_arr, "udp_destination_port_27")); - destinations_info_wr.udp_destination_port_arr(28) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_28") downto field_lo(c_field_arr, "udp_destination_port_28")); - destinations_info_wr.udp_destination_port_arr(29) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_29") downto field_lo(c_field_arr, "udp_destination_port_29")); - destinations_info_wr.udp_destination_port_arr(30) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_30") downto field_lo(c_field_arr, "udp_destination_port_30")); - destinations_info_wr.udp_destination_port_arr(31) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_31") downto field_lo(c_field_arr, "udp_destination_port_31")); + destinations_info_wr.udp_destination_port_arr(0) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_0") downto + field_lo(c_fa, "udp_destination_port_0")); + destinations_info_wr.udp_destination_port_arr(1) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_1") downto + field_lo(c_fa, "udp_destination_port_1")); + destinations_info_wr.udp_destination_port_arr(2) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_2") downto + field_lo(c_fa, "udp_destination_port_2")); + destinations_info_wr.udp_destination_port_arr(3) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_3") downto + field_lo(c_fa, "udp_destination_port_3")); + destinations_info_wr.udp_destination_port_arr(4) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_4") downto + field_lo(c_fa, "udp_destination_port_4")); + destinations_info_wr.udp_destination_port_arr(5) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_5") downto + field_lo(c_fa, "udp_destination_port_5")); + destinations_info_wr.udp_destination_port_arr(6) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_6") downto + field_lo(c_fa, "udp_destination_port_6")); + destinations_info_wr.udp_destination_port_arr(7) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_7") downto + field_lo(c_fa, "udp_destination_port_7")); + destinations_info_wr.udp_destination_port_arr(8) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_8") downto + field_lo(c_fa, "udp_destination_port_8")); + destinations_info_wr.udp_destination_port_arr(9) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_9") downto + field_lo(c_fa, "udp_destination_port_9")); + destinations_info_wr.udp_destination_port_arr(10) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_10") downto + field_lo(c_fa, "udp_destination_port_10")); + destinations_info_wr.udp_destination_port_arr(11) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_11") downto + field_lo(c_fa, "udp_destination_port_11")); + destinations_info_wr.udp_destination_port_arr(12) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_12") downto + field_lo(c_fa, "udp_destination_port_12")); + destinations_info_wr.udp_destination_port_arr(13) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_13") downto + field_lo(c_fa, "udp_destination_port_13")); + destinations_info_wr.udp_destination_port_arr(14) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_14") downto + field_lo(c_fa, "udp_destination_port_14")); + destinations_info_wr.udp_destination_port_arr(15) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_15") downto + field_lo(c_fa, "udp_destination_port_15")); + destinations_info_wr.udp_destination_port_arr(16) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_16") downto + field_lo(c_fa, "udp_destination_port_16")); + destinations_info_wr.udp_destination_port_arr(17) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_17") downto + field_lo(c_fa, "udp_destination_port_17")); + destinations_info_wr.udp_destination_port_arr(18) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_18") downto + field_lo(c_fa, "udp_destination_port_18")); + destinations_info_wr.udp_destination_port_arr(19) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_19") downto + field_lo(c_fa, "udp_destination_port_19")); + destinations_info_wr.udp_destination_port_arr(20) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_20") downto + field_lo(c_fa, "udp_destination_port_20")); + destinations_info_wr.udp_destination_port_arr(21) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_21") downto + field_lo(c_fa, "udp_destination_port_21")); + destinations_info_wr.udp_destination_port_arr(22) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_22") downto + field_lo(c_fa, "udp_destination_port_22")); + destinations_info_wr.udp_destination_port_arr(23) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_23") downto + field_lo(c_fa, "udp_destination_port_23")); + destinations_info_wr.udp_destination_port_arr(24) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_24") downto + field_lo(c_fa, "udp_destination_port_24")); + destinations_info_wr.udp_destination_port_arr(25) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_25") downto + field_lo(c_fa, "udp_destination_port_25")); + destinations_info_wr.udp_destination_port_arr(26) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_26") downto + field_lo(c_fa, "udp_destination_port_26")); + destinations_info_wr.udp_destination_port_arr(27) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_27") downto + field_lo(c_fa, "udp_destination_port_27")); + destinations_info_wr.udp_destination_port_arr(28) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_28") downto + field_lo(c_fa, "udp_destination_port_28")); + destinations_info_wr.udp_destination_port_arr(29) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_29") downto + field_lo(c_fa, "udp_destination_port_29")); + destinations_info_wr.udp_destination_port_arr(30) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_30") downto + field_lo(c_fa, "udp_destination_port_30")); + destinations_info_wr.udp_destination_port_arr(31) <= mm_fields_out(field_hi(c_fa, "udp_destination_port_31") downto + field_lo(c_fa, "udp_destination_port_31")); - destinations_info_wr.nof_destinations <= to_uint(mm_fields_out(field_hi(c_field_arr, "nof_destinations") downto field_lo(c_field_arr, "nof_destinations"))); + destinations_info_wr.nof_destinations <= to_uint(mm_fields_out(field_hi(c_fa, "nof_destinations") downto + field_lo(c_fa, "nof_destinations"))); -- Register the read only actual values, to ease timing closure p_dp_clk : process(dp_clk) @@ -347,7 +447,8 @@ begin func_sdp_bdo_reorder_nof_blocks_look_up_table(g_nof_destinations_max); begin if rising_edge(dp_clk) then - nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations, g_nof_destinations_max); + nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations, + g_nof_destinations_max); nof_blocks_per_packet <= c_nof_blocks_per_packet_arr(nof_destinations_act); end if; end process; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_one_destination.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_one_destination.vhd index 4403f42f09f5178ce27b364f7df6218e73bd9adc..2714c98838e8a0832c8f7bbf16ca2c6a7d5e63e2 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_one_destination.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_one_destination.vhd @@ -62,7 +62,8 @@ architecture str of sdp_bdo_one_destination is constant c_nof_blocks_per_packet : natural := c_sdp_cep_nof_blocks_per_packet; -- = 4 constant c_nof_beamlets_per_block : natural := c_sdp_S_sub_bf; -- = 488 dual pol beamlets constant c_nof_words_per_beamlet : natural := 1; -- 1 dual pol beamlet data per 32b word - constant c_nof_ch : natural := c_nof_blocks_per_packet * c_nof_beamlets_per_block * c_nof_words_per_beamlet; -- = 1952 + constant c_nof_ch : natural := c_nof_blocks_per_packet * + c_nof_beamlets_per_block * c_nof_words_per_beamlet; -- = 1952 -- Use c_transpose_indices and c_transpose_indices_inv for debug view in Objects window. -- Use c_transpose_indices for func_reorder_transpose() in this sdp_bdo_one_destination, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd index 1dd450cdd7c02d44807aea9d90f63190ca31733f..ad2b13c4ee74484254e8fb74805c3547573459b4 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd @@ -28,9 +28,9 @@ -- . [1] https://support.astron.nl/confluence/display/L2M/L4+SDPFW+Decision%3A+Multiple+beamlet+output+destinations ------------------------------------------------------------------------------- library IEEE, common_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use work.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use work.sdp_pkg.all; package sdp_bdo_pkg is -- Beamlet data output (BDO) for multiple destinations @@ -103,15 +103,20 @@ package sdp_bdo_pkg is -- . Look up table arrays for: t_natural_arr(1 to c_nof_destinations_max) function func_sdp_bdo_reorder_nof_blocks_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; function func_sdp_bdo_reorder_nof_ch_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; - function func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; - function func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; - function func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; - function func_sdp_bdo_nof_ch_per_packet_last_destination_look_up_table(c_nof_destinations_max : natural) return t_natural_arr; + function func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr; + function func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr; + function func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr; + function func_sdp_bdo_nof_ch_per_packet_last_destination_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr; -- Look up table matrix for: -- t_natural_matrix(1 to c_nof_destinations_max, -- N_destinations -- 0 to c_nof_destinations_max - 1) -- destination index - function func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(c_nof_destinations_max : natural) return t_natural_matrix; + function func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(c_nof_destinations_max : natural) + return t_natural_matrix; end package sdp_bdo_pkg; package body sdp_bdo_pkg is @@ -177,7 +182,8 @@ package body sdp_bdo_pkg is return v_arr; end func_sdp_bdo_reorder_nof_ch_look_up_table; - function func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is + function func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr is variable v_first_arr : t_natural_arr(1 to c_nof_destinations_max); begin -- Determine nof_beamlets_per_block for the first 1:DN-1 destinations, as @@ -192,9 +198,10 @@ package body sdp_bdo_pkg is return v_first_arr; end func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table; - function func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is + function func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr is variable v_first_arr : t_natural_arr(1 to c_nof_destinations_max) := - func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); + func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); variable v_last_arr : t_natural_arr(1 to c_nof_destinations_max); variable v_last : integer; begin @@ -234,11 +241,12 @@ package body sdp_bdo_pkg is return v_last_arr; end func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table; - function func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is + function func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr is constant c_nof_blocks_arr : t_natural_arr(1 to c_nof_destinations_max) := func_sdp_bdo_reorder_nof_blocks_look_up_table(c_nof_destinations_max); constant c_nof_beamlets_arr : t_natural_arr(1 to c_nof_destinations_max) := - func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); + func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); variable v_len_arr : t_natural_arr(1 to c_nof_destinations_max); begin -- Determine nof_ch per packet for the first 1:DN-1 destinations, as @@ -261,11 +269,12 @@ package body sdp_bdo_pkg is return v_len_arr; end func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table; - function func_sdp_bdo_nof_ch_per_packet_last_destination_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is + function func_sdp_bdo_nof_ch_per_packet_last_destination_look_up_table(c_nof_destinations_max : natural) + return t_natural_arr is constant c_nof_blocks_arr : t_natural_arr(1 to c_nof_destinations_max) := func_sdp_bdo_reorder_nof_blocks_look_up_table(c_nof_destinations_max); constant c_nof_beamlets_arr : t_natural_arr(1 to c_nof_destinations_max) := - func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max); + func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max); variable v_len_arr : t_natural_arr(1 to c_nof_destinations_max); begin -- Determine nof_ch per packet for the first 1:DN-1 destinations, as @@ -281,9 +290,10 @@ package body sdp_bdo_pkg is return v_len_arr; end func_sdp_bdo_nof_ch_per_packet_last_destination_look_up_table; - function func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(c_nof_destinations_max : natural) return t_natural_matrix is + function func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(c_nof_destinations_max : natural) + return t_natural_matrix is constant c_len_arr : t_natural_arr(1 to c_nof_destinations_max) := - func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); + func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max); variable v_index_mat : t_natural_matrix(1 to c_nof_destinations_max, 0 to c_nof_destinations_max - 1); variable v_beamlet_index : natural; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd index 8281d80b1bd11b173bc637046d00f1ebb78177cc..8cec2791a851eca9cff43c06328a9848ee8ddf89 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd @@ -31,11 +31,11 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use dp_lib.dp_stream_pkg.all; -use work.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use dp_lib.dp_stream_pkg.all; + use work.sdp_pkg.all; entity sdp_beamformer_local is generic ( @@ -75,9 +75,11 @@ architecture str of sdp_beamformer_local is -- the sum. constant c_complex_adder_sum_w : natural := c_product_w + ceil_log2(c_sdp_S_pn); - signal sub_sosi_arr : t_dp_sosi_arr(c_sdp_N_pol_bf * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); + signal sub_sosi_arr : t_dp_sosi_arr(c_sdp_N_pol_bf * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); - signal bf_weights_out_sosi_arr : t_dp_sosi_arr(c_sdp_N_pol_bf * c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); + signal bf_weights_out_sosi_arr : t_dp_sosi_arr(c_sdp_N_pol_bf * c_sdp_P_pfb - 1 downto 0) := + (others => c_dp_sosi_rst); signal bf_weights_x_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); signal bf_weights_y_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb - 1 downto 0) := (others => c_dp_sosi_rst); diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd index 32cf827e7379b943f1094e86295de43e4c543b05..9efe31d8309af5868bb050f4781c2685bebd0ddf 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd @@ -33,16 +33,16 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, reorder_lib, tr_10GbE_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_field_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 reorder_lib.reorder_pkg.all; -use work.sdp_pkg.all; -use work.sdp_bdo_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_field_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 reorder_lib.reorder_pkg.all; + use work.sdp_pkg.all; + use work.sdp_bdo_pkg.all; entity sdp_beamformer_output is generic ( @@ -87,7 +87,8 @@ end sdp_beamformer_output; architecture str of sdp_beamformer_output is constant c_data_w : natural := c_nof_complex * c_sdp_W_beamlet; -- 16b - constant c_beamset_beamlet_index : natural := g_beamset_id * c_sdp_S_sub_bf; -- call beamset 'id' and beamlet 'index' + constant c_beamset_beamlet_index : natural := g_beamset_id * c_sdp_S_sub_bf; -- call beamset 'id' and + -- beamlet 'index' -- Use c_fifo_fill = c_fifo_size - margin so that FIFO does not get read out too soon. -- The dp_fifo_fill_eop takes care that the FIFO gets read out whenever there is an @@ -95,7 +96,8 @@ architecture str of sdp_beamformer_output is -- it possible to pass on blocks of variable length. -- Make c_fifo_size large enough for adding header, muxing c_sdp_N_beamsets beamsets and -- delaying output to be able to realign snk_in.err field from snk_in.eop to src_out.sop. - constant c_nof_words_multi : natural := largest(func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(g_nof_destinations_max)); + constant c_nof_words_multi : natural := largest( + func_sdp_bdo_nof_ch_per_packet_first_destinations_look_up_table(g_nof_destinations_max)); constant c_nof_longwords_one : natural := c_sdp_cep_payload_nof_longwords; -- = 976 constant c_nof_longwords_multi : natural := c_nof_words_multi / 2; constant c_fifo_size_one : natural := true_log_pow2(c_nof_longwords_one) * c_sdp_N_beamsets; -- = 2048 @@ -108,8 +110,9 @@ architecture str of sdp_beamformer_output is -- Multi destination info (mdi) constant c_nof_destinations_w : natural := ceil_log2(g_nof_destinations_max + 1); - constant c_beamlet_index_per_destination_mat : t_natural_matrix(1 to g_nof_destinations_max, 0 to g_nof_destinations_max - 1) := - func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(g_nof_destinations_max); + constant c_beamlet_index_per_destination_mat : t_natural_matrix(1 to g_nof_destinations_max, + 0 to g_nof_destinations_max - 1) := + func_sdp_bdo_beamlet_index_per_destination_look_up_matrix(g_nof_destinations_max); -- . field_sel = '0' for DP (dynamic), '1' for MM (fixed or programmable via MM of dp_offload_tx_v3) constant c_cep_hdr_field_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := @@ -338,7 +341,8 @@ begin mdi_udp_dst_port <= multi_destinations_info.udp_destination_port_arr(v_DI); -- . Account for beamset offset in beamlet index - mdi_beamlet_index_per_destination <= c_beamset_beamlet_index + c_beamlet_index_per_destination_mat(s_DN, v_DI); + mdi_beamlet_index_per_destination <= c_beamset_beamlet_index + + c_beamlet_index_per_destination_mat(s_DN, v_DI); -- . In total there are S_sub_bf = 488 beamlets for nof_destinations. -- The packet for last destination contains the same number of -- beamlets as the first destinations, or less beamlets. @@ -536,33 +540,60 @@ begin -- udp_src_port and ip_src_addr are ignored, because c_sdp_cep_hdr_field_sel -- selects MM control, but keep the code to be able to enable using them by -- just changing the selection bit. - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_src_mac" ) downto field_lo(c_sdp_cep_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_src_addr" ) downto field_lo(c_sdp_cep_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_src_port") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_src_port")) <= udp_src_port; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_src_mac") downto + field_lo(c_sdp_cep_hdr_field_arr, "eth_src_mac")) <= eth_src_mac; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_src_addr") downto + field_lo(c_sdp_cep_hdr_field_arr, "ip_src_addr")) <= ip_src_addr; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_src_port") downto + field_lo(c_sdp_cep_hdr_field_arr, "udp_src_port")) <= udp_src_port; -- Use MM programmable destination MAC/IP/UDP from dp_offload_tx_v3 for one destination -- Use DP programmable destination MAC/IP/UDP from sdp_bdo_destinations_reg for multiple destinations - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_dst_mac" ) downto field_lo(c_sdp_cep_hdr_field_arr, "eth_dst_mac" )) <= mdi_eth_dst_mac; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_dst_addr" ) downto field_lo(c_sdp_cep_hdr_field_arr, "ip_dst_addr" )) <= mdi_ip_dst_addr; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_dst_port") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_dst_port")) <= mdi_udp_dst_port; - - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_observation_id" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_station_info" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_station_info" )) <= station_info; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(sdp_info.fsub_type); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" )) <= payload_err; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag")) <= SLV(sdp_info.beam_repositioning_flag); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" )) <= gn_id; - - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" )) <= beamlet_scale; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index" )) <= TO_UVEC(beamlet_index, c_halfword_w); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet" )) <= TO_UVEC(nof_blocks_per_packet, c_octet_w); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block")) <= TO_UVEC(nof_beamlets_per_block, c_halfword_w); - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_block_period" ) downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; - - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "dp_bsn" ) downto field_lo(c_sdp_cep_hdr_field_arr, "dp_bsn" )) <= dp_pipeline_data_src_out.bsn(63 downto 0); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_dst_mac") downto + field_lo(c_sdp_cep_hdr_field_arr, "eth_dst_mac")) <= mdi_eth_dst_mac; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_dst_addr") downto + field_lo(c_sdp_cep_hdr_field_arr, "ip_dst_addr")) <= mdi_ip_dst_addr; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_dst_port") downto + field_lo(c_sdp_cep_hdr_field_arr, "udp_dst_port")) <= mdi_udp_dst_port; + + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_observation_id") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_observation_id")) <= sdp_info.observation_id; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_station_info") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_station_info")) <= station_info; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id")) <= + SLV(sdp_info.antenna_band_index); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id")) <= + sdp_info.nyquist_zone_index; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc")) <= SLV(sdp_info.f_adc); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type")) <= SLV(sdp_info.fsub_type); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error")) <= payload_err; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag")) <= + SLV(sdp_info.beam_repositioning_flag); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id")) <= gn_id; + + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale")) <= beamlet_scale; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index")) <= + TO_UVEC(beamlet_index, c_halfword_w); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet")) <= + TO_UVEC(nof_blocks_per_packet, c_octet_w); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block")) <= + TO_UVEC(nof_beamlets_per_block, c_halfword_w); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_block_period") downto + field_lo(c_sdp_cep_hdr_field_arr, "sdp_block_period")) <= sdp_info.block_period; + + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "dp_bsn" ) downto + field_lo(c_sdp_cep_hdr_field_arr, "dp_bsn" )) <= dp_pipeline_data_src_out.bsn(63 downto 0); -- For viewing the header fields in wave window dp_offload_tx_header <= func_sdp_map_cep_header(dp_offload_tx_hdr_fields); diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd index f27040a58b2711d051f7ed51dec6387155cf3db3..99ed71ba06d751bf559ea93f4171de595b84fe71 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd @@ -30,11 +30,11 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use dp_lib.dp_stream_pkg.all; -use work.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use dp_lib.dp_stream_pkg.all; + use work.sdp_pkg.all; entity sdp_beamformer_remote is generic ( @@ -199,10 +199,14 @@ begin begin beamlets_sosi_arr(0) <= beamlets_data_sosi_arr(0); beamlets_sosi_arr(1) <= beamlets_data_sosi_arr(1); - beamlets_sosi_arr(0).re <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0)); - beamlets_sosi_arr(0).im <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data( c_data_w - 1 downto c_sdp_W_beamlet_sum)); - beamlets_sosi_arr(1).re <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data(c_sdp_W_beamlet_sum - 1 downto 0)); - beamlets_sosi_arr(1).im <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data( c_data_w - 1 downto c_sdp_W_beamlet_sum)); + beamlets_sosi_arr(0).re <= + RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data(c_sdp_W_beamlet_sum - 1 downto 0)); + beamlets_sosi_arr(0).im <= + RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data( c_data_w - 1 downto c_sdp_W_beamlet_sum)); + beamlets_sosi_arr(1).re <= + RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data(c_sdp_W_beamlet_sum - 1 downto 0)); + beamlets_sosi_arr(1).im <= + RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data( c_data_w - 1 downto c_sdp_W_beamlet_sum)); end process; --------------------------------------------------------------- @@ -234,8 +238,10 @@ begin p_wire_bf_sum_sosi : process(i_bf_sum_sosi) begin bf_sum_data_sosi <= i_bf_sum_sosi; - bf_sum_data_sosi.data(c_sdp_W_beamlet_sum - 1 downto 0) <= i_bf_sum_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0); - bf_sum_data_sosi.data( c_data_w - 1 downto c_sdp_W_beamlet_sum) <= i_bf_sum_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0); + bf_sum_data_sosi.data(c_sdp_W_beamlet_sum - 1 downto 0) <= + i_bf_sum_sosi.re(c_sdp_W_beamlet_sum - 1 downto 0); + bf_sum_data_sosi.data( c_data_w - 1 downto c_sdp_W_beamlet_sum) <= + i_bf_sum_sosi.im(c_sdp_W_beamlet_sum - 1 downto 0); end process; u_dp_repack_data_sum : entity dp_lib.dp_repack_data diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_remote_v2.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_remote_v2.vhd index 2f283a380342a2fe65510774a4f33dcc95071cb0..b6460bc72b9cb1244a78d745c744d17a5964d71d 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_remote_v2.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_remote_v2.vhd @@ -35,13 +35,13 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, reorder_lib, st_lib, mm_lib, ring_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 ring_lib.ring_pkg.all; -use work.sdp_pkg.all; + 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 ring_lib.ring_pkg.all; + use work.sdp_pkg.all; entity sdp_crosslets_remote_v2 is generic ( @@ -113,8 +113,9 @@ begin p_wire_xsel_sosi : process(xsel_sosi) begin xsel_data_sosi <= xsel_sosi; - xsel_data_sosi.data( c_sdp_W_crosslet - 1 downto 0) <= xsel_sosi.re(c_sdp_W_crosslet - 1 downto 0); - xsel_data_sosi.data(c_nof_complex * c_sdp_W_crosslet - 1 downto c_sdp_W_crosslet) <= xsel_sosi.im(c_sdp_W_crosslet - 1 downto 0); + xsel_data_sosi.data( c_sdp_W_crosslet - 1 downto 0) <= xsel_sosi.re(c_sdp_W_crosslet - 1 downto 0); + xsel_data_sosi.data(c_nof_complex * c_sdp_W_crosslet - 1 downto c_sdp_W_crosslet) <= + xsel_sosi.im(c_sdp_W_crosslet - 1 downto 0); end process; u_dp_repack_data_local : entity dp_lib.dp_repack_data diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_subband_select.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_subband_select.vhd index bd28652ee0aa5a5c118cf55cdf1ccf6508742471..4f5fc4693bf78e954794ee1a3e31f9173e5a96a6 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_subband_select.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_crosslets_subband_select.vhd @@ -45,12 +45,12 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, reorder_lib, st_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; + 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 sdp_crosslets_subband_select is generic ( @@ -100,7 +100,8 @@ architecture str of sdp_crosslets_subband_select is sync_detected : std_logic; end record; - constant c_reg_rst : t_crosslets_control_reg := ( 0, 0, 0, 0, (others => 0), '0', (others => '0'), c_mem_mosi_rst, '0'); + constant c_reg_rst : t_crosslets_control_reg := + ( 0, 0, 0, 0, (others => 0), '0', (others => '0'), c_mem_mosi_rst, '0'); -- Define the local registers in t_crosslets_control_reg record signal r : t_crosslets_control_reg; @@ -181,7 +182,8 @@ begin crosslets_info_reg_in <= cur_crosslets_info; -- Always use crosslets info 6:0 + step(@ index 15) -- Set crosslets 14:7 to -1 for I in g_N_crosslets to c_sdp_mm_reg_crosslets_info.nof_dat - 2 loop - crosslets_info_reg_in((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w ) <= TO_SVEC(-1, c_sdp_crosslets_index_w); + crosslets_info_reg_in((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w ) <= + TO_SVEC(-1, c_sdp_crosslets_index_w); end loop; end process; @@ -197,10 +199,12 @@ begin end if; end process; - p_comb_crosslets_control : process(r, start_trigger, crosslets_info_reg, dp_bsn_sync_scheduler_src_out_arr, col_select_miso) + p_comb_crosslets_control : process(r, start_trigger, crosslets_info_reg, + dp_bsn_sync_scheduler_src_out_arr, col_select_miso) variable v : t_crosslets_control_reg; -- Use extra variable to simplify col_select_mosi address selection. - -- Also using v_offsets instead of v.offsets to clearly indicate we do not only use this variable on the left side but also on the right side of assignments. + -- Also using v_offsets instead of v.offsets to clearly indicate we do not only use this variable on the left side + -- but also on the right side of assignments. variable v_offsets : t_natural_arr(g_N_crosslets - 1 downto 0); begin v := r; @@ -209,17 +213,22 @@ begin -- start/restart if start_trigger = '1' then - v.started := '1'; -- Once started r.started remains active. This is to prevent read/write actions before the initial start_trigger. + v.started := '1'; -- Once started r.started remains active. This is to prevent read/write actions before + -- the initial start_trigger. v.offset_index := 0; v.row_index := 0; v.col_index := 0; - v.sync_detected := '0'; -- set sync_detected to 0 in the case that a sync has been detected before the initial start_trigger. - - -- start_trigger is active on the sync so we can immediatly reset the offsets/step such that they are used in the next packet. - -- It is up to the user to schedule the start trigger on a BSN that coincides with a sync interval if that is desired. - v.step := TO_UINT(crosslets_info_reg(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w)); + v.sync_detected := '0'; -- set sync_detected to 0 in the case that a sync has been detected before the initial + -- start_trigger. + + -- start_trigger is active on the sync so we can immediatly reset the offsets/step such that they are used in + -- the next packet. It is up to the user to schedule the start trigger on a BSN that coincides with a sync + -- interval if that is desired. + v.step := TO_UINT(crosslets_info_reg(c_sdp_crosslets_info_reg_w - 1 downto + c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w)); for I in 0 to g_N_crosslets - 1 loop - v_offsets(I) := TO_UINT(crosslets_info_reg((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w)); + v_offsets(I) := TO_UINT(crosslets_info_reg((I + 1) * c_sdp_crosslets_index_w - 1 downto + I * c_sdp_crosslets_index_w)); end loop; end if; @@ -231,7 +240,9 @@ begin if r.started = '1' then -- Once started r.started remains active. -- add step to offsets - if dp_bsn_sync_scheduler_src_out_arr(0).eop = '1' and r.sync_detected = '1' then -- using r.sync_detected to change offsets 1 packet after the sync due to the buffered packet in reorder_col_wide_select + -- . using r.sync_detected to change offsets 1 packet after the sync due to the buffered packet in + -- reorder_col_wide_select + if dp_bsn_sync_scheduler_src_out_arr(0).eop = '1' and r.sync_detected = '1' then v.sync_detected := '0'; for I in 0 to g_N_crosslets - 1 loop v_offsets(I) := r.offsets(I) + r.step; @@ -257,7 +268,8 @@ begin end if; v.col_select_mosi.rd := '1'; - v.col_select_mosi.address(c_col_select_addr_w - 1 downto 0) := TO_UVEC(c_sdp_Q_fft * v_offsets(r.offset_index) + r.col_index, c_col_select_addr_w); + v.col_select_mosi.address(c_col_select_addr_w - 1 downto 0) := + TO_UVEC(c_sdp_Q_fft * v_offsets(r.offset_index) + r.col_index, c_col_select_addr_w); v.row_select_slv := TO_UVEC(r.row_index, c_row_select_slv_w); end if; end if; @@ -328,10 +340,12 @@ begin --------------------------------------------------------------- -- Out Crosslet info pipeline --------------------------------------------------------------- - active_crosslets_info(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w) <= TO_UVEC(r.step, c_sdp_crosslets_index_w); + active_crosslets_info(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w) <= + TO_UVEC(r.step, c_sdp_crosslets_index_w); gen_crosslets_info : for I in 0 to g_N_crosslets - 1 generate - active_crosslets_info((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w) <= TO_UVEC(r.offsets(I), c_sdp_crosslets_index_w); + active_crosslets_info((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w) <= + TO_UVEC(r.offsets(I), c_sdp_crosslets_index_w); end generate; -- pipeline for alignment with sync diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_info_reg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_info_reg.vhd index 3feac6001af561964fa7328c52b3505040ee1f55..00c1c901362062d433e6b6c66658bf664315634d 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_info_reg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_info_reg.vhd @@ -110,15 +110,24 @@ begin ); -- add "RO" fields to mm_fields - mm_fields_in(field_hi(c_field_arr, "f_adc") downto field_lo(c_field_arr, "f_adc")) <= slv(sdp_info_rd.f_adc); - mm_fields_in(field_hi(c_field_arr, "fsub_type") downto field_lo(c_field_arr, "fsub_type")) <= slv(sdp_info_rd.fsub_type); - mm_fields_in(field_hi(c_field_arr, "block_period") downto field_lo(c_field_arr, "block_period")) <= sdp_info_rd.block_period; + mm_fields_in(field_hi(c_field_arr, "f_adc") downto + field_lo(c_field_arr, "f_adc")) <= slv(sdp_info_rd.f_adc); + mm_fields_in(field_hi(c_field_arr, "fsub_type") downto + field_lo(c_field_arr, "fsub_type")) <= slv(sdp_info_rd.fsub_type); + mm_fields_in(field_hi(c_field_arr, "block_period") downto + field_lo(c_field_arr, "block_period")) <= sdp_info_rd.block_period; -- get "RW" fields from mm_fields - sdp_info_wr.antenna_field_index <= mm_fields_out(field_hi(c_field_arr, "antenna_field_index") downto field_lo(c_field_arr, "antenna_field_index")); - sdp_info_wr.station_id <= mm_fields_out(field_hi(c_field_arr, "station_id") downto field_lo(c_field_arr, "station_id")); - sdp_info_wr.antenna_band_index <= sl(mm_fields_out(field_hi(c_field_arr, "antenna_band_index") downto field_lo(c_field_arr, "antenna_band_index"))); - sdp_info_wr.observation_id <= mm_fields_out(field_hi(c_field_arr, "observation_id") downto field_lo(c_field_arr, "observation_id")); - sdp_info_wr.nyquist_zone_index <= mm_fields_out(field_hi(c_field_arr, "nyquist_zone_index") downto field_lo(c_field_arr, "nyquist_zone_index")); - sdp_info_wr.beam_repositioning_flag <= sl(mm_fields_out(field_hi(c_field_arr, "beam_repositioning_flag") downto field_lo(c_field_arr, "beam_repositioning_flag"))); + sdp_info_wr.antenna_field_index <= mm_fields_out(field_hi(c_field_arr, "antenna_field_index") downto + field_lo(c_field_arr, "antenna_field_index")); + sdp_info_wr.station_id <= mm_fields_out(field_hi(c_field_arr, "station_id") downto + field_lo(c_field_arr, "station_id")); + sdp_info_wr.antenna_band_index <= sl(mm_fields_out(field_hi(c_field_arr, "antenna_band_index") downto + field_lo(c_field_arr, "antenna_band_index"))); + sdp_info_wr.observation_id <= mm_fields_out(field_hi(c_field_arr, "observation_id") downto + field_lo(c_field_arr, "observation_id")); + sdp_info_wr.nyquist_zone_index <= mm_fields_out(field_hi(c_field_arr, "nyquist_zone_index") downto + field_lo(c_field_arr, "nyquist_zone_index")); + sdp_info_wr.beam_repositioning_flag <= sl(mm_fields_out(field_hi(c_field_arr, "beam_repositioning_flag") downto + field_lo(c_field_arr, "beam_repositioning_flag"))); end str; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index fb42c311a0c57a2ae01469afbc05cb89dee15aeb..68bd999994459b6339d4c18df7797f499cb7cfaa 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -28,18 +28,18 @@ -- . [1] https://support.astron.nl/confluence/display/L2M/L3+SDP+Decision%3A+SDP+Parameter+definitions ------------------------------------------------------------------------------- library IEEE, common_lib, rTwoSDF_lib, fft_lib, filter_lib, wpfb_lib, diag_lib, tech_jesd204b_lib; -use IEEE.std_logic_1164.all; -use IEEE.math_real.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_field_pkg.all; -use common_lib.common_network_layers_pkg.all; -use diag_lib.diag_pkg.all; -use rTwoSDF_lib.rTwoSDFPkg.all; -use fft_lib.fft_pkg.all; -use filter_lib.fil_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use tech_jesd204b_lib.tech_jesd204b_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.math_real.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_field_pkg.all; + use common_lib.common_network_layers_pkg.all; + use diag_lib.diag_pkg.all; + use rTwoSDF_lib.rTwoSDFPkg.all; + use fft_lib.fft_pkg.all; + use filter_lib.fil_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use tech_jesd204b_lib.tech_jesd204b_pkg.all; package sdp_pkg is ------------------------------------------------- @@ -112,43 +112,63 @@ package sdp_pkg is constant c_sdp_W_bf_weight_magnitude : natural := c_sdp_W_bf_weight - c_sdp_W_bf_weight_fraction - 1; -- = 1 constant c_sdp_W_local_oscillator : natural := 16; -- = w in s(w, p), s = signed constant c_sdp_W_local_oscillator_fraction : natural := 15; -- = p in s(w, p) - constant c_sdp_W_local_oscillator_magnitude : natural := c_sdp_W_local_oscillator - c_sdp_W_local_oscillator_fraction - 1; -- = 0 + constant c_sdp_W_local_oscillator_magnitude : natural := c_sdp_W_local_oscillator - + c_sdp_W_local_oscillator_fraction - 1; -- = 0 constant c_sdp_N_ring_nof_mac10g : natural := 3; -- for sdp_station_xsub_ring design. -- Derived constants - constant c_sdp_FS_adc : natural := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude 1.0, will just cause clipping of +FS to +FS-1 - constant c_sdp_wg_ampl_lsb : real := c_diag_wg_ampl_unit / real(c_sdp_FS_adc); -- WG amplitude in number of LSbit resolution steps - constant c_sdp_wg_subband_freq_unit : real := c_diag_wg_freq_unit / real(c_sdp_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus + constant c_sdp_FS_adc : natural := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude + -- 1.0, will just cause clipping of +FS + -- to +FS-1 + constant c_sdp_wg_ampl_lsb : real := c_diag_wg_ampl_unit / real(c_sdp_FS_adc); -- WG amplitude in number + -- of LSbit resolution steps + constant c_sdp_wg_subband_freq_unit : real := c_diag_wg_freq_unit / real(c_sdp_N_fft); -- subband freq = Fs/1024 + -- = 200 MSps/1024 = 195312.5 Hz sinus constant c_sdp_N_clk_per_second : natural := c_sdp_f_adc_MHz * 10**6; -- Default 200M clock cycles per second - constant c_sdp_N_clk_per_sync : natural := c_sdp_N_clk_per_second; -- Default 200M clock cycles per sync interval of 1 second + constant c_sdp_N_clk_per_sync : natural := c_sdp_N_clk_per_second; -- Default 200M clock cycles per sync + -- interval of 1 second constant c_sdp_N_clk_per_sync_max : natural := c_sdp_N_clk_per_second * 10; -- 10 seconds constant c_sdp_N_clk_per_sync_min : natural := c_sdp_N_clk_per_second / 10; -- 0.1 second - constant c_sdp_N_clk_sync_timeout : natural := c_sdp_N_clk_per_second + c_sdp_N_clk_per_second / 10; -- 10% margin. - constant c_sdp_N_clk_sync_timeout_xsub : natural := 2147483647; -- = 2**31 - 1 = largest value for NATURAL for 10.7 seconds. Do not use 2*31 to avoid Modelsim NATURAL overflow warning. - constant c_sdp_N_sync_jesd : natural := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP sync outputs per PN + constant c_sdp_N_clk_sync_timeout : natural := c_sdp_N_clk_per_second + c_sdp_N_clk_per_second / 10; -- 10% + -- margin. + constant c_sdp_N_clk_sync_timeout_xsub : natural := 2147483647; -- = 2**31 - 1 = largest value for NATURAL for 10.7 + -- seconds. Do not use 2*31 to avoid Modelsim + -- natural overflow warning. + constant c_sdp_N_sync_jesd : natural := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP + -- sync outputs per PN constant c_sdp_f_sub_Hz : real := real(c_sdp_N_clk_per_second) / real(c_sdp_N_fft); -- = 195312.5 - constant c_sdp_N_int : natural := c_sdp_N_clk_per_second; -- nof ADC sample periods per 1 s integration interval - constant c_sdp_N_int_sub : real := c_sdp_f_sub_Hz; -- nof subband sample periods per 1 s integration interval + constant c_sdp_N_int : natural := c_sdp_N_clk_per_second; -- nof ADC sample periods per 1 s + -- integration interval + constant c_sdp_N_int_sub : real := c_sdp_f_sub_Hz; -- nof subband sample periods per 1 s integration + -- interval constant c_sdp_N_int_sub_lo : natural := natural(FLOOR(c_sdp_N_int_sub)); -- = 195312 constant c_sdp_N_int_sub_hi : natural := natural(CEIL(c_sdp_N_int_sub)); -- = 195313 - constant c_sdp_A_pn : natural := c_sdp_S_pn / c_sdp_N_pol; -- = 6 dual pol antenna per PN, is 6 signal input pairs - constant c_sdp_P_pfb : natural := c_sdp_S_pn / c_sdp_Q_fft; -- = 6 PFB units, for 6 signal input pairs + constant c_sdp_A_pn : natural := c_sdp_S_pn / c_sdp_N_pol; -- = 6 dual pol antenna per PN, is 6 + -- signal input pairs + constant c_sdp_P_pfb : natural := c_sdp_S_pn / c_sdp_Q_fft; -- = 6 PFB units, for 6 signal input + -- pairs constant c_sdp_T_adc : time := (10**6 / c_sdp_f_adc_MHz) * 1 ps; -- = 5 ns @ 200MHz constant c_sdp_T_sub : time := c_sdp_N_fft * c_sdp_T_adc; -- = 5.12 us @ 200MHz 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_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 + constant c_sdp_W_dual_pol_beamlet : natural := c_sdp_N_pol_bf * c_nof_complex * c_sdp_W_beamlet; -- 2 * 2 * 8 + -- = 32b - constant c_sdp_nof_words_per_beamlet : natural := 1; -- 1 dual pol, complex, 8bit beamlet (Xre, Xim, Yre, Yim) per 32b word - constant c_sdp_nof_beamlets_per_longword : natural := 2; -- 2 dual pol, complex, 8bit beamlets fit in 1 64bit longword + constant c_sdp_nof_words_per_beamlet : natural := 1; -- 1 dual pol, complex, 8bit beamlet (Xre, Xim, Yre, Yim) + -- per 32b word + constant c_sdp_nof_beamlets_per_longword : natural := 2; -- 2 dual pol, complex, 8bit beamlets fit in 1 64bit + -- longword constant c_sdp_nof_beamlets_per_block : natural := c_sdp_S_sub_bf; -- number of dual pol beamlets per block constant c_sdp_nof_beamlets_per_block_w : natural := ceil_log2(c_sdp_nof_beamlets_per_block + 1); -- . 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_bf_weight : natural := 2**c_sdp_W_bf_weight_fraction; -- 2**14, so range +-2.0 for 16 bit signed weight - constant c_sdp_unit_beamlet_scale : natural := 2**c_sdp_W_beamlet_scale_fraction; -- 2**15, so range +-1.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 + constant c_sdp_unit_bf_weight : natural := 2**c_sdp_W_bf_weight_fraction; -- 2**14, so range +-2.0 for 16 bit + -- signed weight + constant c_sdp_unit_beamlet_scale : natural := 2**c_sdp_W_beamlet_scale_fraction; -- 2**15, so range +-1.0 for 16 + -- bit signed weight -- One dual polarization beamlet fits in a 32b word: -- [0:3] = [Xre, Xim, Yre, Yim] parts of c_sdp_W_beamlet = 8 bit, so @@ -250,12 +270,15 @@ package sdp_pkg is c_sdp_W_stat_data, c_sdp_W_statistic_sz, c_sdp_N_int_sub_hi, c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_l2ts_18b - constant c_sdp_wpfb_complex_subbands : t_wpfb := func_wpfb_map_real_input_wpfb_parameters_to_complex_input(c_sdp_wpfb_subbands); + constant c_sdp_wpfb_complex_subbands : t_wpfb := + func_wpfb_map_real_input_wpfb_parameters_to_complex_input(c_sdp_wpfb_subbands); - -- DC gain of WPFB FIR filter obtained from applications/lofar2/model/run_pfir_coef.m using application = 'lofar_subband' - -- Not used in RTL, only used in test benches to verify expected suband levels - constant c_sdp_wpfb_fir_filter_dc_gain : real := c_fil_lofar1_fir_filter_dc_gain; -- = 0.994817, almost unit DC gain - constant c_sdp_wpfb_subband_sp_ampl_ratio : real := func_wpfb_subband_gain(c_sdp_wpfb_subbands, c_sdp_wpfb_fir_filter_dc_gain); + -- DC gain of WPFB FIR filter obtained from applications/lofar2/model/run_pfir_coef.m using application = + -- 'lofar_subband'. Not used in RTL, only used in test benches to verify expected suband levels + constant c_sdp_wpfb_fir_filter_dc_gain : real := c_fil_lofar1_fir_filter_dc_gain; -- = 0.994817, almost unit DC + -- gain + constant c_sdp_wpfb_subband_sp_ampl_ratio : real := + func_wpfb_subband_gain(c_sdp_wpfb_subbands, c_sdp_wpfb_fir_filter_dc_gain); ----------------------------------------------------------------------------- -- Subband Equalizer @@ -266,7 +289,8 @@ package sdp_pkg is -- Statistics offload ----------------------------------------------------------------------------- - -- The statistics offload uses the same 1GbE port as the NiosII for M&C. The 1GbE addresses defined in SW and here in FW. + -- The statistics offload uses the same 1GbE port as the NiosII for M&C. The 1GbE addresses defined in SW and here + -- in FW. -- See NiosII code: -- https://git.astron.nl/rtsd/hdl/-/blob/master/libraries/unb_osy/unbos_eth.h -- https://git.astron.nl/rtsd/hdl/-/blob/master/libraries/unb_osy/unbos_eth.c @@ -290,12 +314,17 @@ package sdp_pkg is constant c_sdp_stat_app_header_len : natural := 32; - constant c_sdp_stat_eth_dst_mac : std_logic_vector(47 downto 0) := x"001B217176B9"; -- 001B217176B9 = DOP36-enp2s0 - constant c_sdp_stat_eth_src_mac_47_16 : std_logic_vector(31 downto 0) := x"00228608"; -- 00:22:86:08:pp:qq = UNB_ETH_SRC_MAC_BASE in libraries/unb_osy/unbos_eth.h - constant c_sdp_stat_ip_dst_addr : std_logic_vector(31 downto 0) := x"0A6300FE"; -- 0A6300FE = '10.99.0.254' = DOP36-enp2s0 - constant c_sdp_stat_ip_src_addr_31_16 : std_logic_vector(15 downto 0) := x"0A63"; -- 10.99.xx.yy = g_base_ip in ctrl_unb2#_board.vhd used in libraries/unb_osy/unbos_eth.c + -- MAC : 001B217176B9 = DOP36-enp2s0 + -- MAC_47_16 : 00:22:86:08:pp:qq = UNB_ETH_SRC_MAC_BASE in libraries/unb_osy/unbos_eth.h + -- IP : 0A6300FE = '10.99.0.254' = DOP36-enp2s0 + -- IP_31_16: 10.99.xx.yy = g_base_ip in ctrl_unb2#_board.vhd used in libraries/unb_osy/unbos_eth.c + -- UDP_SRC_PORT[15:8] = gn_id (= ID[7:0] = backplane[5:0] & node[1:0]) + constant c_sdp_stat_eth_dst_mac : std_logic_vector(47 downto 0) := x"001B217176B9"; + constant c_sdp_stat_eth_src_mac_47_16 : std_logic_vector(31 downto 0) := x"00228608"; + constant c_sdp_stat_ip_dst_addr : std_logic_vector(31 downto 0) := x"0A6300FE"; + constant c_sdp_stat_ip_src_addr_31_16 : std_logic_vector(15 downto 0) := x"0A63"; constant c_sdp_stat_udp_dst_port : std_logic_vector(15 downto 0) := TO_UVEC(5001, 16); -- 0x1389 = 5001 - constant c_sdp_sst_udp_src_port_15_8 : std_logic_vector( 7 downto 0) := x"D0"; -- TBC, 7:0 = gn_id (= ID[7:0] = backplane[5:0] & node[1:0]) + constant c_sdp_sst_udp_src_port_15_8 : std_logic_vector( 7 downto 0) := x"D0"; -- TBC constant c_sdp_bst_udp_src_port_15_8 : std_logic_vector( 7 downto 0) := x"D1"; -- TBC constant c_sdp_xst_udp_src_port_15_8 : std_logic_vector( 7 downto 0) := x"D2"; -- TBC @@ -315,61 +344,68 @@ package sdp_pkg is -- on the state of the FW. -- . If a data path controlled field is not set in the FW, then it defaults to 0 by declaring -- hdr_fields_in_arr with all 0. Hence e.g. udp_checksum = 0 can be achieve via data path + -- -- and default hdr_fields_in_arr = 0 or via MM controlled and field_default(0). - -- eth ip udp app - constant c_sdp_stat_hdr_field_sel : std_logic_vector(c_sdp_stat_nof_hdr_fields - 1 downto 0) := "1" & "101" & "111011111001" & "0100" & "0100" & "00000000" & "1000000" & "0"; -- current ---CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111011111001"&"0101"&"0100"&"00000000"&"0000100"&"0"; -- previous 26 nov 2021 ---CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "0"&"100"&"000000010001"&"0100"&"0100"&"00000000"&"1000000"&"0"; -- initial + -- eth ip udp app + constant c_sdp_stat_hdr_field_sel : std_logic_vector(c_sdp_stat_nof_hdr_fields - 1 downto 0) := + "1" & "101" & "111011111001" & "0100" & "0100" & "00000000" & "1000000" & "0"; -- current +--constant c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := +-- "1" & "101" & "111011111001" & "0101" & "0100" & "00000000" & "0000100" & "0"; -- previous 26 nov 2021 +--constant c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := +-- "0" & "100" & "000000010001" & "0100" & "0100" & "00000000" & "1000000" & "0"; -- initial -- Default use destination MAC/IP/UDP = 0, so these have to be MM programmed before -- statistics offload packets can be send. constant c_sdp_stat_hdr_field_arr : t_common_field_arr(c_sdp_stat_nof_hdr_fields - 1 downto 0) := ( - ( field_name_pad("word_align" ), "RW", 16, field_default(0) ), -- Tx TSE IP will strip these 2 padding bytes - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), -- c_sdp_stat_eth_dst_mac - ( 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(0) ), -- differs for SST, BST, XST so set by data path - ( 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(0) ), -- c_sdp_stat_ip_dst_addr - - ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_sdp_stat_udp_dst_port - ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- differs for SST, BST, XST so set by data path - ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), - - ( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ), -- differs for SST, BST, XST so set by data path - ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(c_sdp_stat_version_id) ), - ( field_name_pad("sdp_observation_id" ), "RW", 32, field_default(0) ), - ( field_name_pad("sdp_station_info" ), "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_beam_repositioning_flag" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_weighted_subbands_flag" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_gn_id" ), "RW", 8, field_default(0) ), - - ( field_name_pad("sdp_reserved" ), "RW", 8, field_default(0) ), - ( field_name_pad("sdp_integration_interval" ), "RW", 24, field_default(0) ), - ( field_name_pad("sdp_data_id" ), "RW", 32, field_default(0) ), - ( field_name_pad("sdp_nof_signal_inputs" ), "RW", 8, field_default(0) ), - ( field_name_pad("sdp_nof_bytes_per_statistic" ), "RW", 8, field_default(c_sdp_nof_bytes_per_statistic) ), - ( field_name_pad("sdp_nof_statistics_per_packet" ), "RW", 16, field_default(0) ), - ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(c_sdp_block_period) ), - - ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) + ( field_name_pad("word_align" ), "RW", 16, field_default(0) ), -- Tx TSE IP will strip these 2 padding bytes + ( field_name_pad("eth_dst_mac"), "RW", 48, field_default(0) ), -- c_sdp_stat_eth_dst_mac + ( 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(0) ), -- differs for SST, BST, XST so set by + -- data path + ( 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(0) ), -- c_sdp_stat_ip_dst_addr + + ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_sdp_stat_udp_dst_port + ( field_name_pad("udp_total_length"), "RW", 16, field_default(0) ), -- differs for SST, BST, XST so set by + -- data path + ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), + + ( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ), -- differs for SST, BST, XST so set by + -- data path + ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(c_sdp_stat_version_id) ), + ( field_name_pad("sdp_observation_id"), "RW", 32, field_default(0) ), + ( field_name_pad("sdp_station_info" ), "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_beam_repositioning_flag"), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_weighted_subbands_flag" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_gn_id" ), "RW", 8, field_default(0) ), + + ( field_name_pad("sdp_reserved" ), "RW", 8, field_default(0) ), + ( field_name_pad("sdp_integration_interval" ), "RW", 24, field_default(0) ), + ( field_name_pad("sdp_data_id" ), "RW", 32, field_default(0) ), + ( field_name_pad("sdp_nof_signal_inputs" ), "RW", 8, field_default(0) ), + ( field_name_pad("sdp_nof_bytes_per_statistic" ), "RW", 8, field_default(c_sdp_nof_bytes_per_statistic) ), + ( field_name_pad("sdp_nof_statistics_per_packet"), "RW", 16, field_default(0) ), + ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(c_sdp_block_period) ), + + ( field_name_pad("dp_bsn"), "RW", 64, field_default(0) ) ); constant c_sdp_reg_stat_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_sdp_stat_hdr_field_arr, c_word_w)); @@ -426,22 +462,32 @@ package sdp_pkg is constant c_sdp_marker_beamlets : natural := 98; -- = x"62" = 'b' constant c_sdp_cep_eth_dst_mac : std_logic_vector(47 downto 0) := x"00074306C700"; -- 00074306C700 = DOP36-eth0 - 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_dst_addr : std_logic_vector(31 downto 0) := x"C0A80001"; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - 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_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_dst_addr : std_logic_vector(31 downto 0) := x"C0A80001"; -- C0A80001 = '192.168.0.1' = + -- DOP36-eth0 + 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_ip_total_length : std_logic_vector(15 downto 0) := TO_UVEC(7868, 16); -- see ICD STAT-CEP constant c_sdp_cep_udp_total_length : std_logic_vector(15 downto 0) := TO_UVEC(7848, 16); -- see ICD STAT-CEP constant c_sdp_cep_udp_dst_port : std_logic_vector(15 downto 0) := TO_UVEC(5000, 16); -- 0x1388 = 5000 - 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_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_app_header_len : natural := 32; -- octets, see ICD STAT-CEP - constant c_sdp_cep_header_len : natural := 14 + 20 + 8 + c_sdp_cep_app_header_len; -- = eth + ip + udp + app = 74 octets, see ICD STAT-CEP - - constant c_sdp_cep_nof_blocks_per_packet : natural := 4; -- number of time blocks of beamlets per output packet - constant c_sdp_cep_nof_beamlets_per_block : natural := c_sdp_nof_beamlets_per_block; -- number of dual pol beamlets (c_sdp_N_pol_bf = 2) - constant c_sdp_cep_nof_beamlets_per_packet : natural := c_sdp_cep_nof_blocks_per_packet * c_sdp_cep_nof_beamlets_per_block; - constant c_sdp_cep_payload_nof_longwords : natural := c_sdp_cep_nof_beamlets_per_packet / c_sdp_nof_beamlets_per_longword; -- = 976 - constant c_sdp_cep_packet_nof_longwords : natural := ceil_div(c_sdp_cep_header_len, c_longword_sz) + c_sdp_cep_payload_nof_longwords; -- without tail CRC, the CRC is applied by 10GbE MAC + constant c_sdp_cep_header_len : natural := 14 + 20 + 8 + c_sdp_cep_app_header_len; -- = eth + ip + udp + app + -- = 74 octets, see ICD STAT-CEP + + constant c_sdp_cep_nof_blocks_per_packet : natural := 4; -- number of time blocks of beamlets per output packet + constant c_sdp_cep_nof_beamlets_per_block : natural := c_sdp_nof_beamlets_per_block; -- number of dual pol + -- beamlets (c_sdp_N_pol_bf = 2) + constant c_sdp_cep_nof_beamlets_per_packet : natural := c_sdp_cep_nof_blocks_per_packet * + c_sdp_cep_nof_beamlets_per_block; + constant c_sdp_cep_payload_nof_longwords : natural := c_sdp_cep_nof_beamlets_per_packet / + c_sdp_nof_beamlets_per_longword; -- = 976 + constant c_sdp_cep_packet_nof_longwords : natural := ceil_div(c_sdp_cep_header_len, c_longword_sz) + + c_sdp_cep_payload_nof_longwords; -- without tail CRC, the + -- CRC is applied by 10GbE MAC -- CEP packet header constant c_sdp_cep_nof_hdr_fields : natural := 3 + 12 + 4 + 4 + 9 + 6 + 1; -- = 39 fields @@ -451,11 +497,15 @@ package sdp_pkg is -- . 1 = MM controlled, value is set via MM or by the field_default(), so any data path setting in -- sdp_beamformer_output.vhd is not used. -- Remarks: see remarks at c_sdp_stat_nof_hdr_fields. - -- eth ip udp app - constant c_sdp_cep_hdr_field_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := "111" & "111111111011" & "1110" & "1100" & "100000010" & "100000" & "0"; -- current ---constant c_sdp_cep_hdr_field_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := "111" & "111111111011" & "1110" & "1100" & "100000010" & "100110" & "0"; -- 18 sep 2023 ---constant c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 downto 0) := "101"&"111111111001"&"0111"&"1100"&"100000010"&"000110"&"0"; -- previous 27 sep 2022 ---constant c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 downto 0) := "100"&"000000010001"&"0100"&"0100"&"100000000"&"101000"&"0"; -- initial + -- eth ip udp app + constant c_sdp_cep_hdr_field_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := + "111" & "111111111011" & "1110" & "1100" & "100000010" & "100000" & "0"; -- current +--constant c_sdp_cep_hdr_field_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := +-- "111" & "111111111011" & "1110" & "1100" & "100000010" & "100110" & "0"; -- 18 sep 2023 +--constant c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 downto 0) := +-- "101" & "111111111001" & "0111" & "1100" & "100000010" & "000110" & "0"; -- previous 27 sep 2022 +--constant c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 downto 0) := +-- "100" & "000000010001" & "0100" & "0100" & "100000000" & "101000"&"0"; -- initial -- Default use source MAC/IP/UDP = 0 and destination MAC/IP/UDP = 0, so these have to be MM programmed -- before beamlet output packets can be send. @@ -497,14 +547,14 @@ package sdp_pkg is ( 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", 8, field_default(0) ), - ( field_name_pad("sdp_reserved" ), "RW", 32, field_default(0) ), - ( field_name_pad("sdp_beamlet_scale" ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ), - ( field_name_pad("sdp_beamlet_index" ), "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(c_sdp_block_period) ), + ( field_name_pad("sdp_reserved" ), "RW", 32, field_default(0) ), + ( field_name_pad("sdp_beamlet_scale" ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ), + ( field_name_pad("sdp_beamlet_index" ), "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(c_sdp_block_period) ), - ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) + ( field_name_pad("dp_bsn"), "RW", 64, field_default(0) ) ); constant c_sdp_reg_cep_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); @@ -562,7 +612,8 @@ package sdp_pkg is init_sl => '0'); -- PIO_JESD_CTRL -- AIT MM address widths - constant c_sdp_jesd204b_addr_w : natural := ceil_log2(c_sdp_S_pn) + tech_jesd204b_port_span_w; -- = 4 + 8 + constant c_sdp_jesd204b_addr_w : natural := ceil_log2(c_sdp_S_pn) + tech_jesd204b_port_span_w; + -- = 4 + 8 constant c_sdp_jesd_ctrl_addr_w : natural := c_sdp_mm_jesd_ctrl_reg.adr_w; -- = 1 constant c_sdp_jesd_ctrl_reset_bi : natural := 31; constant c_sdp_jesd_ctrl_enable_w : natural := 31; @@ -572,17 +623,21 @@ package sdp_pkg is constant c_sdp_reg_dp_shiftram_addr_w : natural := ceil_log2(c_sdp_S_pn) + 1; 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) + ceil_log2(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_ram_diag_data_buf_bsn_addr_w : natural := ceil_log2(c_sdp_S_pn) + ceil_log2(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 := ceil_log2(c_sdp_S_pn) + 1; constant c_sdp_ram_st_histogram_addr_w : natural := ceil_log2(c_sdp_S_pn) + ceil_log2(c_sdp_V_si_histogram); constant c_sdp_reg_aduh_monitor_addr_w : natural := ceil_log2(c_sdp_S_pn) + 2; -- FSUB MM address widths - constant c_sdp_ram_fil_coefs_addr_w : natural := ceil_log2(c_sdp_R_os) + ceil_log2(c_sdp_N_fft * c_sdp_N_taps); - constant c_sdp_ram_st_sst_addr_w : natural := ceil_log2(c_sdp_R_os * c_sdp_P_pfb) + ceil_log2(c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_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_R_os * c_sdp_P_pfb) + ceil_log2(c_sdp_N_sub * c_sdp_Q_fft); - constant c_sdp_reg_dp_selector_addr_w : natural := 1; -- Select input 0 or 1. + constant c_sdp_ram_fil_coefs_addr_w : natural := ceil_log2(c_sdp_R_os) + ceil_log2(c_sdp_N_fft * c_sdp_N_taps); + constant c_sdp_ram_st_sst_addr_w : natural := ceil_log2(c_sdp_R_os * c_sdp_P_pfb) + + ceil_log2(c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_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_R_os * c_sdp_P_pfb) + + ceil_log2(c_sdp_N_sub * c_sdp_Q_fft); + constant c_sdp_reg_dp_selector_addr_w : natural := 1; -- Select input 0 or 1. constant c_sdp_reg_bsn_monitor_v2_sst_offload_addr_w : natural := c_sdp_reg_bsn_monitor_v2_addr_w; -- STAT UDP offload MM address widths @@ -590,25 +645,43 @@ package sdp_pkg is -- 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_bf * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); + 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_bf * 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_bf * c_sdp_W_statistic_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; - constant c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_align_v2_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_P_sum) + c_sdp_reg_bsn_align_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_P_sum) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bsn_monitor_v2_addr_w; + 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_bf * + c_sdp_W_statistic_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; + constant c_sdp_reg_bsn_monitor_v2_bst_offload_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_beamlet_output_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_align_v2_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + ceil_log2(c_sdp_P_sum) + + c_sdp_reg_bsn_align_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_rx_align_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + ceil_log2(c_sdp_P_sum) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_aligned_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_ring_lane_info_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + 1; - constant c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_rx_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_tx_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_dp_block_validate_err_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + 4; constant c_sdp_reg_dp_block_validate_bsn_at_sync_bf_addr_w : natural := ceil_log2(c_sdp_N_beamsets) + 2; constant c_sdp_reg_bdo_destinations_info_w_one : natural := ceil_log2(256); - constant c_sdp_reg_bdo_destinations_info_w : natural := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_bdo_destinations_info_w_one; + constant c_sdp_reg_bdo_destinations_info_w : natural := ceil_log2(c_sdp_N_beamsets) + + c_sdp_reg_bdo_destinations_info_w_one; -- XSUB constant c_sdp_crosslets_index_w : natural := ceil_log2(c_sdp_N_sub); @@ -617,7 +690,8 @@ package sdp_pkg is 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_crosslets_info_reg_w : natural := c_sdp_mm_reg_crosslets_info.nof_dat * + c_sdp_mm_reg_crosslets_info.dat_w; constant c_sdp_crosslets_info_nof_offsets : natural := c_sdp_mm_reg_crosslets_info.nof_dat - 1; type t_sdp_crosslets_info is record @@ -632,27 +706,36 @@ package sdp_pkg is dat_w => ceil_log2(c_sdp_N_crosslets_max + 1), nof_dat => 1, init_sl => '0'); -- Default = 1 - constant c_sdp_nof_crosslets_reg_w : natural := c_sdp_mm_reg_nof_crosslets.nof_dat * c_sdp_mm_reg_nof_crosslets.dat_w; + constant c_sdp_nof_crosslets_reg_w : natural := c_sdp_mm_reg_nof_crosslets.nof_dat * + c_sdp_mm_reg_nof_crosslets.dat_w; -- XSUB MM address widths - constant c_sdp_reg_crosslets_info_addr_w : natural := c_sdp_mm_reg_crosslets_info.adr_w; - constant c_sdp_reg_nof_crosslets_addr_w : natural := c_sdp_mm_reg_nof_crosslets.adr_w; - constant c_sdp_reg_bsn_sync_scheduler_xsub_addr_w : natural := 4; - constant c_sdp_ram_st_xsq_addr_w : natural := ceil_log2(c_sdp_N_crosslets_max * c_sdp_X_sq * c_nof_complex * c_sdp_W_statistic_sz); - constant c_sdp_ram_st_xsq_arr_addr_w : natural := ceil_log2(c_sdp_P_sq) + c_sdp_ram_st_xsq_addr_w; - constant c_sdp_reg_bsn_align_v2_xsub_addr_w : natural := ceil_log2(c_sdp_P_sq) + c_sdp_reg_bsn_align_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w : natural := ceil_log2(c_sdp_P_sq) + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_crosslets_info_addr_w : natural := c_sdp_mm_reg_crosslets_info.adr_w; + constant c_sdp_reg_nof_crosslets_addr_w : natural := c_sdp_mm_reg_nof_crosslets.adr_w; + constant c_sdp_reg_bsn_sync_scheduler_xsub_addr_w : natural := 4; + constant c_sdp_ram_st_xsq_addr_w : natural := ceil_log2(c_sdp_N_crosslets_max * c_sdp_X_sq * + c_nof_complex * c_sdp_W_statistic_sz); + constant c_sdp_ram_st_xsq_arr_addr_w : natural := ceil_log2(c_sdp_P_sq) + c_sdp_ram_st_xsq_addr_w; + constant c_sdp_reg_bsn_align_v2_xsub_addr_w : natural := ceil_log2(c_sdp_P_sq) + c_sdp_reg_bsn_align_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_rx_align_xsub_addr_w : natural := ceil_log2(c_sdp_P_sq) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_bsn_monitor_v2_aligned_xsub_addr_w : natural := c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_bsn_monitor_v2_xst_offload_addr_w : natural := c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_ring_lane_info_xst_addr_w : natural := 1; - constant c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w : natural := ceil_log2(c_sdp_N_pn_max) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w : natural := ceil_log2(c_sdp_N_pn_max) + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_rx_xst_addr_w : natural := ceil_log2(c_sdp_N_pn_max) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_tx_xst_addr_w : natural := ceil_log2(c_sdp_N_pn_max) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_dp_block_validate_err_xst_addr_w : natural := 4; constant c_sdp_reg_dp_block_validate_bsn_at_sync_xst_addr_w : natural := 2; -- RING MM address widths - constant c_sdp_reg_bsn_monitor_v2_ring_rx_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + ceil_log2(c_sdp_N_pn_max) + c_sdp_reg_bsn_monitor_v2_addr_w; - constant c_sdp_reg_bsn_monitor_v2_ring_tx_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + ceil_log2(c_sdp_N_pn_max) + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_rx_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + + ceil_log2(c_sdp_N_pn_max) + + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_sdp_reg_bsn_monitor_v2_ring_tx_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + + ceil_log2(c_sdp_N_pn_max) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_sdp_reg_ring_lane_info_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + 1; constant c_sdp_reg_dp_xonoff_lane_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + 1; constant c_sdp_reg_dp_xonoff_local_addr_w : natural := ceil_log2(c_sdp_N_ring_lanes_max) + 1; @@ -702,7 +785,8 @@ package sdp_pkg is function func_sdp_get_stat_ip_total_length(g_statistics_type : string) return natural; function func_sdp_get_stat_udp_src_port(g_statistics_type : string; gn_index : natural) return std_logic_vector; function func_sdp_get_stat_nof_packets(g_statistics_type : string; S_pn, P_sq, N_crosslets : natural) return natural; - function func_sdp_get_stat_nof_packets(g_statistics_type : string) return natural; -- use c_sdp_S_pn, c_sdp_P_sq, c_sdp_N_crosslets_max + function func_sdp_get_stat_nof_packets(g_statistics_type : string) return natural; -- use c_sdp_S_pn, c_sdp_P_sq, + -- c_sdp_N_crosslets_max function func_sdp_map_stat_header(hdr_fields_raw : std_logic_vector) return t_sdp_stat_header; function func_sdp_map_cep_header(hdr_fields_raw : std_logic_vector) return t_sdp_cep_header; @@ -710,12 +794,17 @@ package sdp_pkg is -- Select header destination MAC, IP, UDP fields from DP (sl = 0) or from MM (sl = '1') in dp_offload_tx_v3 function func_sdp_cep_hdr_field_sel_dst(sl : std_logic) return std_logic_vector; - function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_slv : std_logic_vector) return t_sdp_stat_data_id; - function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_rec : t_sdp_stat_data_id) return std_logic_vector; - - function func_sdp_map_crosslets_info(info_slv : std_logic_vector) return t_sdp_crosslets_info; -- map all c_sdp_N_crosslets_max offsets - function func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) return std_logic_vector; -- map all c_sdp_N_crosslets_max offsets - function func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info) return t_sdp_crosslets_info; -- step all c_sdp_N_crosslets_max offsets + function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_slv : std_logic_vector) + return t_sdp_stat_data_id; + function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_rec : t_sdp_stat_data_id) + return std_logic_vector; + + function func_sdp_map_crosslets_info(info_slv : std_logic_vector) + return t_sdp_crosslets_info; -- map all c_sdp_N_crosslets_max offsets + function func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) + return std_logic_vector; -- map all c_sdp_N_crosslets_max offsets + function func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info) + return t_sdp_crosslets_info; -- step all c_sdp_N_crosslets_max offsets end package sdp_pkg; package body sdp_pkg is @@ -844,10 +933,12 @@ package body sdp_pkg is begin return sel_a_b(g_statistics_type = "BST", c_sdp_bst_udp_src_port_15_8 & c_gn_index, -- BST = 0xD1 & gn_index sel_a_b(g_statistics_type = "XST", c_sdp_xst_udp_src_port_15_8 & c_gn_index, -- XST = 0xD2 & gn_index - c_sdp_sst_udp_src_port_15_8 & c_gn_index)); -- SST = 0xD0 & gn_index, SST_OS + c_sdp_sst_udp_src_port_15_8 & c_gn_index)); -- SST = 0xD0 & gn_index, + -- SST_OS end func_sdp_get_stat_udp_src_port; - function func_sdp_get_stat_nof_packets(g_statistics_type : string; S_pn, P_sq, N_crosslets : natural) return natural is + function func_sdp_get_stat_nof_packets(g_statistics_type : string; S_pn, P_sq, N_crosslets : natural) + return natural is begin return sel_a_b(g_statistics_type = "BST", 1, sel_a_b(g_statistics_type = "XST", P_sq * N_crosslets, @@ -861,117 +952,206 @@ package body sdp_pkg is end func_sdp_get_stat_nof_packets; function func_sdp_map_stat_header(hdr_fields_raw : std_logic_vector) return t_sdp_stat_header is + constant c_stat_hfa : t_common_field_arr(c_sdp_stat_hdr_field_arr'range) := c_sdp_stat_hdr_field_arr; variable v : t_sdp_stat_header; begin -- eth header - v.eth.dst_mac := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") downto field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")); - v.eth.src_mac := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac") downto field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac")); - v.eth.eth_type := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") downto field_lo(c_sdp_stat_hdr_field_arr, "eth_type")); + v.eth.dst_mac := hdr_fields_raw(field_hi(c_stat_hfa, "eth_dst_mac") downto field_lo(c_stat_hfa, "eth_dst_mac")); + v.eth.src_mac := hdr_fields_raw(field_hi(c_stat_hfa, "eth_src_mac") downto field_lo(c_stat_hfa, "eth_src_mac")); + v.eth.eth_type := hdr_fields_raw(field_hi(c_stat_hfa, "eth_type") downto field_lo(c_stat_hfa, "eth_type")); -- ip header - v.ip.version := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_version") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_version")); - v.ip.header_length := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_length") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_header_length")); - v.ip.services := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_services")); - v.ip.total_length := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")); - v.ip.identification := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")); - v.ip.flags := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_flags") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_flags")); - v.ip.fragment_offset := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_fragment_offset") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_fragment_offset")); - v.ip.time_to_live := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_time_to_live") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_time_to_live")); - v.ip.protocol := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")); - v.ip.header_checksum := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_checksum") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_header_checksum")); - v.ip.src_ip_addr := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr")); - v.ip.dst_ip_addr := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") downto field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")); + v.ip.version := hdr_fields_raw(field_hi(c_stat_hfa, "ip_version") downto + field_lo(c_stat_hfa, "ip_version")); + v.ip.header_length := hdr_fields_raw(field_hi(c_stat_hfa, "ip_header_length") downto + field_lo(c_stat_hfa, "ip_header_length")); + v.ip.services := hdr_fields_raw(field_hi(c_stat_hfa, "ip_services") downto + field_lo(c_stat_hfa, "ip_services")); + v.ip.total_length := hdr_fields_raw(field_hi(c_stat_hfa, "ip_total_length") downto + field_lo(c_stat_hfa, "ip_total_length")); + v.ip.identification := hdr_fields_raw(field_hi(c_stat_hfa, "ip_identification") downto + field_lo(c_stat_hfa, "ip_identification")); + v.ip.flags := hdr_fields_raw(field_hi(c_stat_hfa, "ip_flags") downto + field_lo(c_stat_hfa, "ip_flags")); + v.ip.fragment_offset := hdr_fields_raw(field_hi(c_stat_hfa, "ip_fragment_offset") downto + field_lo(c_stat_hfa, "ip_fragment_offset")); + v.ip.time_to_live := hdr_fields_raw(field_hi(c_stat_hfa, "ip_time_to_live") downto + field_lo(c_stat_hfa, "ip_time_to_live")); + v.ip.protocol := hdr_fields_raw(field_hi(c_stat_hfa, "ip_protocol") downto + field_lo(c_stat_hfa, "ip_protocol")); + v.ip.header_checksum := hdr_fields_raw(field_hi(c_stat_hfa, "ip_header_checksum") downto + field_lo(c_stat_hfa, "ip_header_checksum")); + v.ip.src_ip_addr := hdr_fields_raw(field_hi(c_stat_hfa, "ip_src_addr") downto + field_lo(c_stat_hfa, "ip_src_addr")); + v.ip.dst_ip_addr := hdr_fields_raw(field_hi(c_stat_hfa, "ip_dst_addr") downto + field_lo(c_stat_hfa, "ip_dst_addr")); -- udp header - v.udp.src_port := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port") downto field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port")); - v.udp.dst_port := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") downto field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")); - v.udp.total_length := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") downto field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")); - v.udp.checksum := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_checksum") downto field_lo(c_sdp_stat_hdr_field_arr, "udp_checksum")); + v.udp.src_port := hdr_fields_raw(field_hi(c_stat_hfa, "udp_src_port") downto + field_lo(c_stat_hfa, "udp_src_port")); + v.udp.dst_port := hdr_fields_raw(field_hi(c_stat_hfa, "udp_dst_port") downto + field_lo(c_stat_hfa, "udp_dst_port")); + v.udp.total_length := hdr_fields_raw(field_hi(c_stat_hfa, "udp_total_length") downto + field_lo(c_stat_hfa, "udp_total_length")); + v.udp.checksum := hdr_fields_raw(field_hi(c_stat_hfa, "udp_checksum") downto + field_lo(c_stat_hfa, "udp_checksum")); -- app header - v.app.sdp_marker := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker")); - v.app.sdp_version_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")); - v.app.sdp_observation_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id")); - v.app.sdp_station_info := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_info") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_info")); - - v.app.sdp_source_info_antenna_band_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id")); - v.app.sdp_source_info_nyquist_zone_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id")); - v.app.sdp_source_info_f_adc := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc")); - v.app.sdp_source_info_fsub_type := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type")); - v.app.sdp_source_info_payload_error := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error")); - v.app.sdp_source_info_beam_repositioning_flag := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag")); - v.app.sdp_source_info_weighted_subbands_flag := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_weighted_subbands_flag") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_weighted_subbands_flag")); - v.app.sdp_source_info_gn_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id")); - - v.app.sdp_reserved := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_reserved") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_reserved")); - v.app.sdp_integration_interval := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_integration_interval") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_integration_interval")); - v.app.sdp_data_id := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")); + v.app.sdp_marker := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_marker") downto + field_lo(c_stat_hfa, "sdp_marker")); + v.app.sdp_version_id := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_version_id") downto + field_lo(c_stat_hfa, "sdp_version_id")); + v.app.sdp_observation_id := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_observation_id") downto + field_lo(c_stat_hfa, "sdp_observation_id")); + v.app.sdp_station_info := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_station_info") downto + field_lo(c_stat_hfa, "sdp_station_info")); + + v.app.sdp_source_info_antenna_band_id := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_antenna_band_id") + downto field_lo(c_stat_hfa, "sdp_source_info_antenna_band_id")); + v.app.sdp_source_info_nyquist_zone_id := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_nyquist_zone_id") + downto field_lo(c_stat_hfa, "sdp_source_info_nyquist_zone_id")); + v.app.sdp_source_info_f_adc := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_f_adc") + downto field_lo(c_stat_hfa, "sdp_source_info_f_adc")); + v.app.sdp_source_info_fsub_type := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_fsub_type") + downto field_lo(c_stat_hfa, "sdp_source_info_fsub_type")); + v.app.sdp_source_info_payload_error := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_payload_error") + downto field_lo(c_stat_hfa, "sdp_source_info_payload_error")); + v.app.sdp_source_info_beam_repositioning_flag := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_beam_repositioning_flag") + downto field_lo(c_stat_hfa, "sdp_source_info_beam_repositioning_flag")); + v.app.sdp_source_info_weighted_subbands_flag := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_weighted_subbands_flag") + downto field_lo(c_stat_hfa, "sdp_source_info_weighted_subbands_flag")); + v.app.sdp_source_info_gn_id := hdr_fields_raw( + field_hi(c_stat_hfa, "sdp_source_info_gn_id") + downto field_lo(c_stat_hfa, "sdp_source_info_gn_id")); + + v.app.sdp_reserved := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_reserved") + downto field_lo(c_stat_hfa, "sdp_reserved")); + v.app.sdp_integration_interval := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_integration_interval") + downto field_lo(c_stat_hfa, "sdp_integration_interval")); + v.app.sdp_data_id := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_data_id") + downto field_lo(c_stat_hfa, "sdp_data_id")); v.app.sdp_data_id_sst_signal_input_index := v.app.sdp_data_id( 7 downto 0); v.app.sdp_data_id_bst_beamlet_index := v.app.sdp_data_id(15 downto 0); v.app.sdp_data_id_xst_subband_index := v.app.sdp_data_id(24 downto 16); v.app.sdp_data_id_xst_signal_input_A_index := v.app.sdp_data_id(15 downto 8); v.app.sdp_data_id_xst_signal_input_B_index := v.app.sdp_data_id( 7 downto 0); - v.app.sdp_nof_signal_inputs := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs")); - v.app.sdp_nof_bytes_per_statistic := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic")); - v.app.sdp_nof_statistics_per_packet := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet")); - v.app.sdp_block_period := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")); - - v.app.dp_bsn := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn") downto field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn")); + v.app.sdp_nof_signal_inputs := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_nof_signal_inputs") + downto field_lo(c_stat_hfa, "sdp_nof_signal_inputs")); + v.app.sdp_nof_bytes_per_statistic := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_nof_bytes_per_statistic") + downto field_lo(c_stat_hfa, "sdp_nof_bytes_per_statistic")); + v.app.sdp_nof_statistics_per_packet := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_nof_statistics_per_packet") + downto field_lo(c_stat_hfa, "sdp_nof_statistics_per_packet")); + v.app.sdp_block_period := hdr_fields_raw(field_hi(c_stat_hfa, "sdp_block_period") + downto field_lo(c_stat_hfa, "sdp_block_period")); + + v.app.dp_bsn := hdr_fields_raw(field_hi(c_stat_hfa, "dp_bsn") downto field_lo(c_stat_hfa, "dp_bsn")); return v; end func_sdp_map_stat_header; function func_sdp_map_cep_header(hdr_fields_raw : std_logic_vector) return t_sdp_cep_header is + constant c_cep_hfa : t_common_field_arr(c_sdp_cep_hdr_field_arr'range) := c_sdp_cep_hdr_field_arr; variable v : t_sdp_cep_header; begin -- eth header - v.eth.dst_mac := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "eth_dst_mac") downto field_lo(c_sdp_cep_hdr_field_arr, "eth_dst_mac")); - v.eth.src_mac := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "eth_src_mac") downto field_lo(c_sdp_cep_hdr_field_arr, "eth_src_mac")); - v.eth.eth_type := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "eth_type") downto field_lo(c_sdp_cep_hdr_field_arr, "eth_type")); + v.eth.dst_mac := hdr_fields_raw(field_hi(c_cep_hfa, "eth_dst_mac") downto field_lo(c_cep_hfa, "eth_dst_mac")); + v.eth.src_mac := hdr_fields_raw(field_hi(c_cep_hfa, "eth_src_mac") downto field_lo(c_cep_hfa, "eth_src_mac")); + v.eth.eth_type := hdr_fields_raw(field_hi(c_cep_hfa, "eth_type") downto field_lo(c_cep_hfa, "eth_type")); -- ip header - v.ip.version := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_version") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_version")); - v.ip.header_length := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_header_length") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_header_length")); - v.ip.services := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_services") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_services")); - v.ip.total_length := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_total_length") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_total_length")); - v.ip.identification := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_identification") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_identification")); - v.ip.flags := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_flags") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_flags")); - v.ip.fragment_offset := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_fragment_offset") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_fragment_offset")); - v.ip.time_to_live := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_time_to_live") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_time_to_live")); - v.ip.protocol := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_protocol") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_protocol")); - v.ip.header_checksum := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_header_checksum") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_header_checksum")); - v.ip.src_ip_addr := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_src_addr") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_src_addr")); - v.ip.dst_ip_addr := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "ip_dst_addr") downto field_lo(c_sdp_cep_hdr_field_arr, "ip_dst_addr")); + v.ip.version := hdr_fields_raw(field_hi(c_cep_hfa, "ip_version") downto + field_lo(c_cep_hfa, "ip_version")); + v.ip.header_length := hdr_fields_raw(field_hi(c_cep_hfa, "ip_header_length") downto + field_lo(c_cep_hfa, "ip_header_length")); + v.ip.services := hdr_fields_raw(field_hi(c_cep_hfa, "ip_services") downto + field_lo(c_cep_hfa, "ip_services")); + v.ip.total_length := hdr_fields_raw(field_hi(c_cep_hfa, "ip_total_length") downto + field_lo(c_cep_hfa, "ip_total_length")); + v.ip.identification := hdr_fields_raw(field_hi(c_cep_hfa, "ip_identification") downto + field_lo(c_cep_hfa, "ip_identification")); + v.ip.flags := hdr_fields_raw(field_hi(c_cep_hfa, "ip_flags") downto + field_lo(c_cep_hfa, "ip_flags")); + v.ip.fragment_offset := hdr_fields_raw(field_hi(c_cep_hfa, "ip_fragment_offset") downto + field_lo(c_cep_hfa, "ip_fragment_offset")); + v.ip.time_to_live := hdr_fields_raw(field_hi(c_cep_hfa, "ip_time_to_live") downto + field_lo(c_cep_hfa, "ip_time_to_live")); + v.ip.protocol := hdr_fields_raw(field_hi(c_cep_hfa, "ip_protocol") downto + field_lo(c_cep_hfa, "ip_protocol")); + v.ip.header_checksum := hdr_fields_raw(field_hi(c_cep_hfa, "ip_header_checksum") downto + field_lo(c_cep_hfa, "ip_header_checksum")); + v.ip.src_ip_addr := hdr_fields_raw(field_hi(c_cep_hfa, "ip_src_addr") downto + field_lo(c_cep_hfa, "ip_src_addr")); + v.ip.dst_ip_addr := hdr_fields_raw(field_hi(c_cep_hfa, "ip_dst_addr") downto + field_lo(c_cep_hfa, "ip_dst_addr")); -- udp header - v.udp.src_port := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "udp_src_port") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_src_port")); - v.udp.dst_port := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "udp_dst_port") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_dst_port")); - v.udp.total_length := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "udp_total_length") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_total_length")); - v.udp.checksum := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "udp_checksum") downto field_lo(c_sdp_cep_hdr_field_arr, "udp_checksum")); + v.udp.src_port := hdr_fields_raw(field_hi(c_cep_hfa, "udp_src_port") downto + field_lo(c_cep_hfa, "udp_src_port")); + v.udp.dst_port := hdr_fields_raw(field_hi(c_cep_hfa, "udp_dst_port") downto + field_lo(c_cep_hfa, "udp_dst_port")); + v.udp.total_length := hdr_fields_raw(field_hi(c_cep_hfa, "udp_total_length") downto + field_lo(c_cep_hfa, "udp_total_length")); + v.udp.checksum := hdr_fields_raw(field_hi(c_cep_hfa, "udp_checksum") downto + field_lo(c_cep_hfa, "udp_checksum")); -- app header - v.app.sdp_marker := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_marker") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_marker")); - v.app.sdp_version_id := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_version_id") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_version_id")); - v.app.sdp_observation_id := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_observation_id") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_observation_id")); - v.app.sdp_station_info := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_station_info") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_station_info")); - - v.app.sdp_source_info_reserved := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_reserved") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_reserved")); - v.app.sdp_source_info_antenna_band_id := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id")); - v.app.sdp_source_info_nyquist_zone_id := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id")); - v.app.sdp_source_info_f_adc := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc")); - v.app.sdp_source_info_fsub_type := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type")); - v.app.sdp_source_info_payload_error := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error")); - v.app.sdp_source_info_beam_repositioning_flag := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_beam_repositioning_flag")); - v.app.sdp_source_info_beamlet_width := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_beamlet_width") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_beamlet_width")); - v.app.sdp_source_info_gn_id := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id")); - - v.app.sdp_reserved := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_reserved") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_reserved")); - v.app.sdp_beamlet_scale := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale")); - v.app.sdp_beamlet_index := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index")); - v.app.sdp_nof_blocks_per_packet := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_blocks_per_packet")); - v.app.sdp_nof_beamlets_per_block := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_nof_beamlets_per_block")); - v.app.sdp_block_period := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "sdp_block_period") downto field_lo(c_sdp_cep_hdr_field_arr, "sdp_block_period")); - - v.app.dp_bsn := hdr_fields_raw(field_hi(c_sdp_cep_hdr_field_arr, "dp_bsn") downto field_lo(c_sdp_cep_hdr_field_arr, "dp_bsn")); + v.app.sdp_marker := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_marker") downto + field_lo(c_cep_hfa, "sdp_marker")); + v.app.sdp_version_id := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_version_id") downto + field_lo(c_cep_hfa, "sdp_version_id")); + v.app.sdp_observation_id := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_observation_id") downto + field_lo(c_cep_hfa, "sdp_observation_id")); + v.app.sdp_station_info := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_station_info") downto + field_lo(c_cep_hfa, "sdp_station_info")); + + v.app.sdp_source_info_reserved := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_reserved") + downto field_lo(c_cep_hfa, "sdp_source_info_reserved")); + v.app.sdp_source_info_antenna_band_id := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_antenna_band_id") + downto field_lo(c_cep_hfa, "sdp_source_info_antenna_band_id")); + v.app.sdp_source_info_nyquist_zone_id := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_nyquist_zone_id") + downto field_lo(c_cep_hfa, "sdp_source_info_nyquist_zone_id")); + v.app.sdp_source_info_f_adc := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_f_adc") + downto field_lo(c_cep_hfa, "sdp_source_info_f_adc")); + v.app.sdp_source_info_fsub_type := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_fsub_type") + downto field_lo(c_cep_hfa, "sdp_source_info_fsub_type")); + v.app.sdp_source_info_payload_error := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_payload_error") + downto field_lo(c_cep_hfa, "sdp_source_info_payload_error")); + v.app.sdp_source_info_beam_repositioning_flag := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_beam_repositioning_flag") + downto field_lo(c_cep_hfa, "sdp_source_info_beam_repositioning_flag")); + v.app.sdp_source_info_beamlet_width := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_beamlet_width") + downto field_lo(c_cep_hfa, "sdp_source_info_beamlet_width")); + v.app.sdp_source_info_gn_id := hdr_fields_raw( + field_hi(c_cep_hfa, "sdp_source_info_gn_id") + downto field_lo(c_cep_hfa, "sdp_source_info_gn_id")); + + v.app.sdp_reserved := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_reserved") downto + field_lo(c_cep_hfa, "sdp_reserved")); + v.app.sdp_beamlet_scale := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_beamlet_scale") downto + field_lo(c_cep_hfa, "sdp_beamlet_scale")); + v.app.sdp_beamlet_index := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_beamlet_index") downto + field_lo(c_cep_hfa, "sdp_beamlet_index")); + v.app.sdp_nof_blocks_per_packet := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_nof_blocks_per_packet") downto + field_lo(c_cep_hfa, "sdp_nof_blocks_per_packet")); + v.app.sdp_nof_beamlets_per_block := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_nof_beamlets_per_block") downto + field_lo(c_cep_hfa, "sdp_nof_beamlets_per_block")); + v.app.sdp_block_period := hdr_fields_raw(field_hi(c_cep_hfa, "sdp_block_period") downto + field_lo(c_cep_hfa, "sdp_block_period")); + + v.app.dp_bsn := hdr_fields_raw(field_hi(c_cep_hfa, "dp_bsn") downto field_lo(c_cep_hfa, "dp_bsn")); return v; end func_sdp_map_cep_header; @@ -985,7 +1165,8 @@ package body sdp_pkg is return v_sel; end func_sdp_cep_hdr_field_sel_dst; - function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_slv : std_logic_vector) return t_sdp_stat_data_id is + function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_slv : std_logic_vector) + return t_sdp_stat_data_id is variable v_rec : t_sdp_stat_data_id; begin if g_statistics_type = "BST" then @@ -1000,7 +1181,8 @@ package body sdp_pkg is return v_rec; end func_sdp_map_stat_data_id; - function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_rec : t_sdp_stat_data_id) return std_logic_vector is + function func_sdp_map_stat_data_id(g_statistics_type : string; data_id_rec : t_sdp_stat_data_id) + return std_logic_vector is variable v_slv : std_logic_vector(31 downto 0) := x"00000000"; begin if g_statistics_type = "BST" then @@ -1019,9 +1201,11 @@ package body sdp_pkg is variable v_info : t_sdp_crosslets_info; begin for I in 0 to c_sdp_crosslets_info_nof_offsets - 1 loop -- map al offsets - v_info.offset_arr(I) := TO_UINT(info_slv((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w)); + v_info.offset_arr(I) := TO_UINT(info_slv((I + 1) * c_sdp_crosslets_index_w - 1 downto + I * c_sdp_crosslets_index_w)); end loop; - v_info.step := TO_UINT(info_slv(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w)); + v_info.step := TO_UINT(info_slv(c_sdp_crosslets_info_reg_w - 1 downto + c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w)); return v_info; end func_sdp_map_crosslets_info; @@ -1029,9 +1213,11 @@ package body sdp_pkg is variable v_info : std_logic_vector(c_sdp_crosslets_info_reg_w - 1 downto 0); begin for I in 0 to c_sdp_crosslets_info_nof_offsets - 1 loop -- map all offsets - v_info((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w) := TO_UVEC(info_rec.offset_arr(I), c_sdp_crosslets_index_w); + v_info((I + 1) * c_sdp_crosslets_index_w - 1 downto I * c_sdp_crosslets_index_w) := + TO_UVEC(info_rec.offset_arr(I), c_sdp_crosslets_index_w); end loop; - v_info(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w) := TO_UVEC(info_rec.step, c_sdp_crosslets_index_w); + v_info(c_sdp_crosslets_info_reg_w - 1 downto c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w) := + TO_UVEC(info_rec.step, c_sdp_crosslets_index_w); return v_info; end func_sdp_map_crosslets_info; @@ -1039,7 +1225,8 @@ package body sdp_pkg is variable v_info : t_sdp_crosslets_info := info_rec; begin for I in 0 to c_sdp_crosslets_info_nof_offsets - 1 loop -- step all offsets - -- c_sdp_N_sub = 512 is power of 2, so MOD should be fine in synthesis (simpel skips MSbits, no need for division). + -- c_sdp_N_sub = 512 is power of 2, so MOD should be fine in synthesis (simpel skips MSbits, no need for + -- division). v_info.offset_arr(I) := (v_info.offset_arr(I) + v_info.step) mod c_sdp_N_sub; end loop; return v_info; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_scope.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_scope.vhd index d6d46c4f058fdc98860dc875b0817a9e217fd04b..538ef8079cba59eb1463e5e7eefc9805301282e8 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_scope.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_scope.vhd @@ -63,7 +63,8 @@ architecture str of sdp_scope is signal cnt : natural; signal deinterleaved_sosi_2arr_n : t_dp_sosi_2arr_n(g_nof_input - 1 downto 0); signal deinterleaved_sosi_arr : t_dp_sosi_arr(g_nof_input * g_n_deinterleave-1 downto 0); - signal selected_sosi_arr : t_dp_sosi_arr(g_nof_input * g_n_deinterleave-1 downto 0) := (others => c_dp_sosi_rst); + signal selected_sosi_arr : t_dp_sosi_arr(g_nof_input * g_n_deinterleave-1 downto 0) := + (others => c_dp_sosi_rst); begin sim_only : if g_sim = true generate gen_deinterleave : for I in 0 to g_nof_input - 1 generate diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index 2d7cf4bcc55aa8cf1f5a6964d3d7911667439c9d..738fb5710cf5b651715861ef1baa5afd2f2c522a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -37,20 +37,23 @@ -- [3] SST, SST_OS packets: https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L2%20Interface%20Control%20Documents/SC%20to%20SDP%20ICD ------------------------------------------------------------------------------- -library IEEE, common_lib, diag_lib, dp_lib, tech_jesd204b_lib, fft_lib, wpfb_lib, tech_pll_lib, tr_10GbE_lib, nw_10GbE_lib, eth_lib, ring_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.common_field_pkg.all; -use diag_lib.diag_pkg.all; -use dp_lib.dp_stream_pkg.all; -use fft_lib.fft_pkg.all; -use wpfb_lib.wpfb_pkg.all; -use work.sdp_pkg.all; -use eth_lib.eth_pkg.all; -use ring_lib.ring_pkg.all; +library IEEE, common_lib, diag_lib, dp_lib; +library tech_pll_lib, tech_jesd204b_lib; +library fft_lib, wpfb_lib; +library tr_10GbE_lib, nw_10GbE_lib, eth_lib, ring_lib; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.common_field_pkg.all; + use diag_lib.diag_pkg.all; + use dp_lib.dp_stream_pkg.all; + use fft_lib.fft_pkg.all; + use wpfb_lib.wpfb_pkg.all; + use eth_lib.eth_pkg.all; + use ring_lib.ring_pkg.all; + use work.sdp_pkg.all; entity sdp_station is generic ( @@ -401,36 +404,47 @@ architecture str of sdp_station is constant c_subband_raw_fraction_w : natural := c_fft_raw_fraction_w; -- Make Tx FIFOs at least c_fifo_tx_fill_margin larger than needed to fit the largest Tx packet - constant c_fifo_tx_fill_margin : natural := 10; -- >= c_fifo_fill_margin = 6 that is used in dp_fifo_fill_eop + constant c_fifo_tx_fill_margin : natural := 10; -- >= c_fifo_fill_margin = 6 that is used in dp_fifo_fill_eop -- 10 GbE Interface for beamlet output - constant c_nof_10GbE_beamlet_output : natural := 1; + constant c_nof_10GbE_beamlet_output : natural := 1; -- The nw_10GbE/tr_10GbE uses dp_fifo_fill_eop, so rely on releasing packets (beamlets, arp and ping) at eop instead -- of at fill level. Make fifo size large enough to fit one packet and the c_fifo_tx_fill_margin. - constant c_fifo_tx_size_beamlet_output : natural := true_log_pow2(c_sdp_cep_packet_nof_longwords + c_fifo_tx_fill_margin); -- = 976 + 6 --> 1024 - constant c_fifo_tx_fill_beamlet_output : natural := c_fifo_tx_size_beamlet_output - c_fifo_tx_fill_margin; -- = maximum fill level, so rely on eop + constant c_fifo_tx_size_beamlet_output : natural := true_log_pow2(c_sdp_cep_packet_nof_longwords + + c_fifo_tx_fill_margin); -- = 976 + 6 --> 1024 + constant c_fifo_tx_fill_beamlet_output : natural := c_fifo_tx_size_beamlet_output - + c_fifo_tx_fill_margin; -- = maximum fill level, so rely on eop -- Address widths of a single MM instance constant c_addr_w_ram_ss_ss_wide : natural := ceil_log2(c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); - constant c_addr_w_ram_bf_weights : natural := ceil_log2(c_sdp_N_pol * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); + constant c_addr_w_ram_bf_weights : natural := ceil_log2(c_sdp_N_pol * + c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); constant c_addr_w_reg_bf_scale : natural := 1; - constant c_addr_w_reg_hdr_dat : natural := ceil_log2(field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); + constant c_addr_w_reg_hdr_dat : natural := ceil_log2( + field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); constant c_addr_w_reg_bdo_destinations : natural := c_sdp_reg_bdo_destinations_info_w_one; constant c_addr_w_reg_dp_xonoff : natural := 1; - constant c_addr_w_ram_st_bst : natural := ceil_log2(c_sdp_S_sub_bf * c_sdp_N_pol * (c_longword_sz / c_word_sz)); - constant c_addr_w_reg_bsn_align_v2_bf : natural := ceil_log2(c_sdp_P_sum) + c_sdp_reg_bsn_align_v2_addr_w; - constant c_addr_w_reg_bsn_monitor_v2_rx_align_bf : natural := ceil_log2(c_sdp_P_sum) + c_sdp_reg_bsn_monitor_v2_addr_w; + constant c_addr_w_ram_st_bst : natural := ceil_log2(c_sdp_S_sub_bf * + c_sdp_N_pol * (c_longword_sz / c_word_sz)); + constant c_addr_w_reg_bsn_align_v2_bf : natural := ceil_log2(c_sdp_P_sum) + + c_sdp_reg_bsn_align_v2_addr_w; + constant c_addr_w_reg_bsn_monitor_v2_rx_align_bf : natural := ceil_log2(c_sdp_P_sum) + + c_sdp_reg_bsn_monitor_v2_addr_w; constant c_addr_w_reg_ring_lane_info_bf : natural := 1; -- Read only sdp_info values constant c_f_adc : std_logic := '1'; -- '0' => 160M, '1' => 200M constant c_fsub_type : std_logic := '0'; -- '0' => critical sampled PFB, '1' => oversampled PFB - constant c_lane_payload_nof_longwords_xst : natural := c_sdp_N_crosslets_max * c_sdp_S_pn / 2; -- = crosslet subband select block size divided by 2 as it is repacked from 32b to 64b. = 42 longwords - constant c_lane_payload_nof_longwords_bf : natural := (c_sdp_S_sub_bf * c_sdp_N_pol_bf * 9) / 16; -- = beamlet block size repacked from 36b to 64b (9/16 = 36/64). = 549 longwords - constant c_lane_payload_nof_longwords_max : natural := largest(c_lane_payload_nof_longwords_xst, c_lane_payload_nof_longwords_bf); - constant c_lane_packet_nof_longwords_max : natural := c_lane_payload_nof_longwords_max + c_ring_dp_hdr_field_size; -- = 549 + 3 = 552 + constant c_lane_payload_nof_longwords_xst : natural := c_sdp_N_crosslets_max * c_sdp_S_pn / 2; -- = crosslet + -- subband select block size divided by 2 as it is repacked from 32b to 64b. = 42 longwords + constant c_lane_payload_nof_longwords_bf : natural := (c_sdp_S_sub_bf * c_sdp_N_pol_bf * 9) / 16; -- = beamlet + -- block size repacked from 36b to 64b (9/16 = 36/64). = 549 longwords + constant c_lane_payload_nof_longwords_max : natural := largest(c_lane_payload_nof_longwords_xst, + c_lane_payload_nof_longwords_bf); + constant c_lane_packet_nof_longwords_max : natural := c_lane_payload_nof_longwords_max + + c_ring_dp_hdr_field_size; -- = 549 + 3 = 552 -- Use large enough c_lane_total_nof_packets_w, so that lane total nof packets count will not overflow: -- . For low band XST crosslets on ring : L_packet = (P_sq - 1) * f_sub = 8 * 195312.5 = 1.5625 M packets/s, @@ -449,11 +463,14 @@ architecture str of sdp_station is -- Use same Tx FIFO size for all lanes in the ring to ease the code, no need to optimize Tx FIFO RAM usage per lane. -- The tr_10GbE uses dp_fifo_fill_eop, so rely on releasing packets (beamlets, crosslets) at eop instead -- of at fill level. Make fifo size large enough to fit one packet and the c_fifo_tx_fill_margin. - constant c_fifo_tx_size_ring : natural := true_log_pow2(c_lane_packet_nof_longwords_max + c_fifo_tx_fill_margin); -- = 552 + 6 --> 1024 - constant c_fifo_tx_fill_ring : natural := c_fifo_tx_size_ring - c_fifo_tx_fill_margin; -- = maximum fill level, so rely on eop + constant c_fifo_tx_size_ring : natural := true_log_pow2(c_lane_packet_nof_longwords_max + + c_fifo_tx_fill_margin); -- = 552 + 6 --> 1024 + constant c_fifo_tx_fill_ring : natural := c_fifo_tx_size_ring - + c_fifo_tx_fill_margin; -- = maximum fill level, so rely on eop constant c_nof_even_lanes : natural := 3; -- 0 = XST, 1 = BF_0, 2 = BF_1. - constant c_lane_nof_if : natural := 3; -- 3 different 10GbE interfaces per pair of lanes: QSFP cable, RING_0 pcb and RING_1 pcb + constant c_lane_nof_if : natural := 3; -- 3 different 10GbE interfaces per pair of lanes: QSFP cable, + -- RING_0 pcb and RING_1 pcb constant c_ring_qsfp_if_offset : natural := 0; -- QSFP cable signals are indexed at c_lane_nof_if * I. constant c_ring_0_if_offset : natural := 1; -- RING_0 pcb signals are indexed at c_lane_nof_if * I + 1. constant c_ring_1_if_offset : natural := 2; -- RING_1 pcb signals are indexed at c_lane_nof_if * I + 2. @@ -505,32 +522,44 @@ architecture str of sdp_station is signal reg_bsn_align_v2_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); -- BF bsn monitor v2 rx align - signal reg_bsn_monitor_v2_rx_align_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_rx_align_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_rx_align_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_rx_align_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); -- BF bsn monitor v2 aligned - signal reg_bsn_monitor_v2_aligned_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_aligned_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_aligned_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_aligned_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); -- BF ring lane info signal reg_ring_lane_info_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); signal reg_ring_lane_info_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); -- BF ring bsn monitor rx - signal reg_bsn_monitor_v2_ring_rx_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_ring_rx_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_ring_rx_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_ring_rx_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); -- BF ring bsn monitor tx - signal reg_bsn_monitor_v2_ring_tx_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_ring_tx_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_ring_tx_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_ring_tx_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); -- BF ring validate err - signal reg_dp_block_validate_err_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_dp_block_validate_err_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_dp_block_validate_err_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_dp_block_validate_err_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); -- BF ring bsn at sync - signal reg_dp_block_validate_bsn_at_sync_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_dp_block_validate_bsn_at_sync_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_dp_block_validate_bsn_at_sync_bf_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_dp_block_validate_bsn_at_sync_bf_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); ---------------------------------------------- -- BST @@ -543,11 +572,15 @@ architecture str of sdp_station is signal reg_stat_hdr_dat_bst_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); signal reg_stat_hdr_dat_bst_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); - signal reg_bsn_monitor_v2_bst_offload_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_bst_offload_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_bst_offload_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_bst_offload_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); - signal reg_bsn_monitor_v2_beamlet_output_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_copi_rst); - signal reg_bsn_monitor_v2_beamlet_output_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := (others => c_mem_cipo_rst); + signal reg_bsn_monitor_v2_beamlet_output_copi_arr : t_mem_copi_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_copi_rst); + signal reg_bsn_monitor_v2_beamlet_output_cipo_arr : t_mem_cipo_arr(c_sdp_N_beamsets - 1 downto 0) := + (others => c_mem_cipo_rst); ---------------------------------------------- @@ -590,10 +623,14 @@ architecture str of sdp_station is signal tr_10gbe_ring_src_in_arr : t_dp_siso_arr(c_ring_nof_mac_ip - 1 downto 0) := (others => c_dp_siso_rdy); -- 10GbE beamlet output - signal nw_10gbe_beamlet_output_snk_in_arr : t_dp_sosi_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := (others => c_dp_sosi_rst); - signal nw_10gbe_beamlet_output_snk_out_arr : t_dp_siso_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := (others => c_dp_siso_rdy); - signal nw_10gbe_beamlet_output_src_out_arr : t_dp_sosi_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := (others => c_dp_sosi_rst); - signal nw_10gbe_beamlet_output_src_in_arr : t_dp_siso_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := (others => c_dp_siso_rdy); + signal nw_10gbe_beamlet_output_snk_in_arr : t_dp_sosi_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := + (others => c_dp_sosi_rst); + signal nw_10gbe_beamlet_output_snk_out_arr : t_dp_siso_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := + (others => c_dp_siso_rdy); + signal nw_10gbe_beamlet_output_src_out_arr : t_dp_sosi_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := + (others => c_dp_sosi_rst); + signal nw_10gbe_beamlet_output_src_in_arr : t_dp_siso_arr(c_nof_10GbE_beamlet_output - 1 downto 0) := + (others => c_dp_siso_rdy); signal nw_10GbE_hdr_fields_in_arr : t_slv_1024_arr(c_nof_10GbE_beamlet_output - 1 downto 0); @@ -612,18 +649,31 @@ begin ----------------------------------------------------------------------------- -- SDP Info register ----------------------------------------------------------------------------- - -- . derive beamlet output MAC, IP and UDP Port as in https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L1%20Interface%20Control%20Documents/STAT%20to%20CEP%20ICD - -- . these FW default beamlet output source MAC, IP and UDP port for 10GbE are NOT used in sdp_beamformer_output, because - -- instead they are MM programmable as set by c_sdp_cep_hdr_field_sel - cep_eth_src_mac <= c_sdp_cep_eth_src_mac_47_16 & RESIZE_UVEC(this_bck_id, c_byte_w) & RESIZE_UVEC(this_chip_id, c_byte_w); -- Simply use chip_id since we only use 1 of the 6*4 = 24 10GbE port. - cep_ip_src_addr <= c_sdp_cep_ip_src_addr_31_16 & RESIZE_UVEC(this_bck_id, c_byte_w) & INCR_UVEC(RESIZE_UVEC(this_chip_id, c_byte_w), 1); -- +1 to avoid IP = *.*.*.0 + -- . derive beamlet output MAC, IP and UDP Port as in + -- https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L1%20Interface%20Control%20Documents/STAT%20to%20CEP%20ICD + -- . these FW default beamlet output source MAC, IP and UDP port for 10GbE are NOT used in sdp_beamformer_output, + -- because instead they are MM programmable as set by c_sdp_cep_hdr_field_sel + cep_eth_src_mac <= c_sdp_cep_eth_src_mac_47_16 & + RESIZE_UVEC(this_bck_id, c_byte_w) & + RESIZE_UVEC(this_chip_id, c_byte_w); -- Simply use chip_id since we only use 1 of the 6*4 = + -- 24 10GbE ports. + cep_ip_src_addr <= c_sdp_cep_ip_src_addr_31_16 & + RESIZE_UVEC(this_bck_id, c_byte_w) & + INCR_UVEC(RESIZE_UVEC(this_chip_id, c_byte_w), 1); -- +1 to avoid IP = *.*.*.0 cep_udp_src_port <= c_sdp_cep_udp_src_port_15_8 & gn_id; - -- . derive statistics offload source MAC/IP/UDP as in: https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L2%20Interface%20Control%20Documents/SC%20to%20SDP%20ICD - -- . these FW default statistics offload source MAC, IP and UDP port for 1GbE are used, as set by c_sdp_stat_hdr_field_sel. + -- . derive statistics offload source MAC/IP/UDP as in: + -- https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L2%20Interface%20Control%20Documents/SC%20to%20SDP%20ICD + -- . these FW default statistics offload source MAC, IP and UDP port for 1GbE are used, as set by + -- c_sdp_stat_hdr_field_sel. -- . the source MAC, IP are the same as for the M&C, because M&C and statistics offload share the same 1GbE - stat_eth_src_mac <= c_sdp_stat_eth_src_mac_47_16 & RESIZE_UVEC(this_bck_id, c_byte_w) & RESIZE_UVEC(this_chip_id, c_byte_w); -- Simply use chip_id since we only use 1 of the 6*4 = 24 10GbE port. - stat_ip_src_addr <= c_sdp_stat_ip_src_addr_31_16 & RESIZE_UVEC(this_bck_id, c_byte_w) & INCR_UVEC(RESIZE_UVEC(this_chip_id, c_byte_w), 1); -- +1 to avoid IP = *.*.*.0 + stat_eth_src_mac <= c_sdp_stat_eth_src_mac_47_16 & + RESIZE_UVEC(this_bck_id, c_byte_w) & + RESIZE_UVEC(this_chip_id, c_byte_w); -- Simply use chip_id since we only use 1 of the 6*4 = + -- 24 10GbE ports. + stat_ip_src_addr <= c_sdp_stat_ip_src_addr_31_16 & + RESIZE_UVEC(this_bck_id, c_byte_w) & + INCR_UVEC(RESIZE_UVEC(this_chip_id, c_byte_w), 1); -- +1 to avoid IP = *.*.*.0 sst_udp_src_port <= c_sdp_sst_udp_src_port_15_8 & gn_id; bst_udp_src_port <= c_sdp_bst_udp_src_port_15_8 & gn_id; xst_udp_src_port <= c_sdp_xst_udp_src_port_15_8 & gn_id; @@ -665,7 +715,8 @@ begin ring_info => ring_info ); - this_rn <= TO_UVEC(gn_index - TO_UINT(ring_info.O_rn), c_byte_w) when rising_edge(dp_clk); -- Using register to ease timing closure. + -- Using register to ease timing closure. + this_rn <= TO_UVEC(gn_index - TO_UINT(ring_info.O_rn), c_byte_w) when rising_edge(dp_clk); ----------------------------------------------------------------------------- -- node_adc_input_and_timing (AIT) @@ -1405,10 +1456,12 @@ begin ----------------------------------------------------------------------------- gen_lane_wires : for I in 0 to c_nof_even_lanes - 1 generate -- QSFP_RX, use_cable_to_previous_rn=1 -> even lanes receive from cable - lane_rx_cable_sosi_arr(I) <= tr_10gbe_ring_src_out_arr(c_lane_nof_if * I + c_ring_qsfp_if_offset) when ring_info.use_cable_to_previous_rn = '1' else c_dp_sosi_rst; + lane_rx_cable_sosi_arr(I) <= tr_10gbe_ring_src_out_arr(c_lane_nof_if * I + c_ring_qsfp_if_offset) when + ring_info.use_cable_to_previous_rn = '1' else c_dp_sosi_rst; -- QSFP_TX, use_cable_to_next_rn=1 -> even lanes transmit to cable - tr_10gbe_ring_snk_in_arr(c_lane_nof_if * I + c_ring_qsfp_if_offset) <= lane_tx_cable_sosi_arr(I) when ring_info.use_cable_to_next_rn = '1' else c_dp_sosi_rst; + tr_10gbe_ring_snk_in_arr(c_lane_nof_if * I + c_ring_qsfp_if_offset) <= lane_tx_cable_sosi_arr(I) when + ring_info.use_cable_to_next_rn = '1' else c_dp_sosi_rst; -- RING_0_RX even lanes receive from RING_0 (from the left) lane_rx_board_sosi_arr(I) <= tr_10gbe_ring_src_out_arr(c_lane_nof_if * I + c_ring_0_if_offset); @@ -1501,9 +1554,12 @@ begin -- LEDs ------------ -- QSFP 1 - Beamlets - unb2_board_qsfp_leds_tx_siso_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= nw_10gbe_beamlet_output_snk_out_arr; - unb2_board_qsfp_leds_tx_sosi_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= nw_10gbe_beamlet_output_snk_in_arr; - unb2_board_qsfp_leds_rx_sosi_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= nw_10gbe_beamlet_output_src_out_arr; + unb2_board_qsfp_leds_tx_siso_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= + nw_10gbe_beamlet_output_snk_out_arr; + unb2_board_qsfp_leds_tx_sosi_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= + nw_10gbe_beamlet_output_snk_in_arr; + unb2_board_qsfp_leds_rx_sosi_arr(c_nof_10GbE_beamlet_output + c_quad - 1 downto c_quad) <= + nw_10gbe_beamlet_output_src_out_arr; -- QSFP 0 - Ring unb2_board_qsfp_leds_tx_siso_arr(0 downto 0) <= tr_10gbe_ring_snk_out_arr(0 downto 0); diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd index 91ef17b9a47ba4e6741989a0cb89a02ef86adf7d..cc3ad48a56d9803d8b090df5bff9a7722a563203 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -116,8 +116,10 @@ entity sdp_statistics_offload is g_ctrl_interval_size_min : natural := 1; -- 1 = default g_beamset_id : natural := 0; g_P_sq : natural := c_sdp_P_sq; -- number of available correlator cells, - g_crosslets_direction : natural := 1; -- > 0 for crosslet transport in positive direction (incrementing RN), else 0 for negative direction - g_reverse_word_order : boolean := true; -- default word order is MSB after LSB, we need to stream LSB after MSB. + g_crosslets_direction : natural := 1; -- > 0 for crosslet transport in positive direction (incrementing RN), + -- else 0 for negative direction + g_reverse_word_order : boolean := true; -- default word order is MSB after LSB, we need to stream LSB + -- after MSB. g_bsn_monitor_sync_timeout : natural := c_sdp_N_clk_sync_timeout ); port ( @@ -162,7 +164,8 @@ entity sdp_statistics_offload is sdp_info : in t_sdp_info; weighted_subbands_flag : in std_logic := '0'; - nof_crosslets : in std_logic_vector(c_sdp_nof_crosslets_reg_w - 1 downto 0) := (others => '0'); -- from MM + nof_crosslets : in std_logic_vector(c_sdp_nof_crosslets_reg_w - 1 downto 0) := + (others => '0'); -- from MM prev_crosslets_info_rec : in t_sdp_crosslets_info := c_sdp_crosslets_info_rst ); end sdp_statistics_offload; @@ -180,12 +183,14 @@ architecture str of sdp_statistics_offload is -- +1 for margin and to ensure > 0 -- header fields + constant c_hfa : t_common_field_arr(c_sdp_stat_hdr_field_arr'range) := c_sdp_stat_hdr_field_arr; constant c_marker : natural := func_sdp_get_stat_marker(g_statistics_type); constant c_nof_signal_inputs : natural := func_sdp_get_stat_nof_signal_inputs(g_statistics_type); constant c_nof_statistics_per_packet : natural := func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type); constant c_udp_total_length : natural := func_sdp_get_stat_udp_total_length(g_statistics_type); constant c_ip_total_length : natural := func_sdp_get_stat_ip_total_length(g_statistics_type); - constant c_nof_packets_max : natural := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, g_P_sq, c_sdp_N_crosslets_max); + constant c_nof_packets_max : natural := func_sdp_get_stat_nof_packets(g_statistics_type, + c_sdp_S_pn, g_P_sq, c_sdp_N_crosslets_max); constant c_beamlet_id : natural := g_beamset_id * c_sdp_S_sub_bf; @@ -213,7 +218,8 @@ architecture str of sdp_statistics_offload is nof_cycles_dly : natural; -- trigger_offload delay for this node offset_rn : natural; -- = ring_info.O_rn, GN index of first ring node nof_rn : natural; -- = ring_info.N_rn, number of GN in the ring - nof_used_P_sq : natural; -- number of used correlator cells <= g_P_sq (is number of available correlator cells) + nof_used_P_sq : natural; -- number of used correlator cells <= g_P_sq (is number of available correlator + -- cells) end record; -- Input capture per sync interval @@ -227,7 +233,8 @@ architecture str of sdp_statistics_offload is payload_err : std_logic; end record; - constant c_input_rst : t_input := (0, 0, (others => '0'), 0, c_sdp_crosslets_info_rst, 0, '0'); -- to avoid initial 'X' in sim + constant c_input_rst : t_input := (0, 0, (others => '0'), 0, c_sdp_crosslets_info_rst, 0, '0'); -- to avoid initial + -- 'X' in sim -- Offload control type t_reg is record @@ -300,8 +307,8 @@ begin -- Assemble offload header info ------------------------------------------------------------------------------- -- Whether the dp_offload_tx_hdr_fields value is actually used in the Tx header depends on c_sdp_stat_hdr_field_sel - -- c_sdp_stat_hdr_field_sel = "1"&"101"&"111011111001"&"0100"&"0100"&"00000000"&"1000000"&"0" - -- eth ip udp app + -- c_sdp_stat_hdr_field_sel = "1" & "101" & "111011111001" & "0100" & "0100" & "00000000" & "1000000" & "0" + -- eth ip udp app -- where 0 = data path, 1 = MM controlled. The '0' fields are assigned here in dp_header_info -- in order: -- access field @@ -356,29 +363,52 @@ begin station_info <= sdp_info.antenna_field_index & sdp_info.station_id; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac" ) downto field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length" ) downto field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length" )) <= TO_UVEC(c_ip_total_length, 16); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr" ) downto field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port" ) downto field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port" )) <= udp_src_port; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length" ) downto field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length" )) <= TO_UVEC(c_udp_total_length, 16); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker" )) <= TO_UVEC(c_marker, 8); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_info" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_info" )) <= station_info; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(fsub_type); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error" )) <= SLV(hdr_input.payload_err); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_weighted_subbands_flag" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_weighted_subbands_flag" )) <= SLV(weighted_subbands_flag); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id" )) <= pp_gn_id; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" )) <= TO_UVEC(hdr_input.integration_interval, 24); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id" )) <= data_id_slv; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs" )) <= TO_UVEC(c_nof_signal_inputs, 8); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic" )) <= TO_UVEC(c_sdp_nof_bytes_per_statistic, 8); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet" )) <= TO_UVEC(c_nof_statistics_per_packet, 16); - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period" ) downto field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn" ) downto field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn" )) <= hdr_input.bsn_at_sync; + dp_header_info(field_hi(c_hfa, "eth_src_mac" ) downto + field_lo(c_hfa, "eth_src_mac" )) <= eth_src_mac; + dp_header_info(field_hi(c_hfa, "ip_total_length" ) downto + field_lo(c_hfa, "ip_total_length" )) <= TO_UVEC(c_ip_total_length, 16); + dp_header_info(field_hi(c_hfa, "ip_src_addr" ) downto + field_lo(c_hfa, "ip_src_addr" )) <= ip_src_addr; + dp_header_info(field_hi(c_hfa, "udp_src_port" ) downto + field_lo(c_hfa, "udp_src_port" )) <= udp_src_port; + dp_header_info(field_hi(c_hfa, "udp_total_length" ) downto + field_lo(c_hfa, "udp_total_length" )) <= TO_UVEC(c_udp_total_length, 16); + dp_header_info(field_hi(c_hfa, "sdp_marker" ) downto + field_lo(c_hfa, "sdp_marker" )) <= TO_UVEC(c_marker, 8); + dp_header_info(field_hi(c_hfa, "sdp_observation_id" ) downto + field_lo(c_hfa, "sdp_observation_id" )) <= sdp_info.observation_id; + dp_header_info(field_hi(c_hfa, "sdp_station_info" ) downto + field_lo(c_hfa, "sdp_station_info" )) <= station_info; + dp_header_info(field_hi(c_hfa, "sdp_source_info_antenna_band_id" ) downto + field_lo(c_hfa, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); + dp_header_info(field_hi(c_hfa, "sdp_source_info_nyquist_zone_id" ) downto + field_lo(c_hfa, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; + dp_header_info(field_hi(c_hfa, "sdp_source_info_f_adc" ) downto + field_lo(c_hfa, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); + dp_header_info(field_hi(c_hfa, "sdp_source_info_fsub_type" ) downto + field_lo(c_hfa, "sdp_source_info_fsub_type" )) <= SLV(fsub_type); + dp_header_info(field_hi(c_hfa, "sdp_source_info_payload_error" ) downto + field_lo(c_hfa, "sdp_source_info_payload_error" )) <= SLV(hdr_input.payload_err); + dp_header_info(field_hi(c_hfa, "sdp_source_info_beam_repositioning_flag") downto + field_lo(c_hfa, "sdp_source_info_beam_repositioning_flag")) <= SLV(sdp_info.beam_repositioning_flag); + dp_header_info(field_hi(c_hfa, "sdp_source_info_weighted_subbands_flag" ) downto + field_lo(c_hfa, "sdp_source_info_weighted_subbands_flag" )) <= SLV(weighted_subbands_flag); + dp_header_info(field_hi(c_hfa, "sdp_source_info_gn_id" ) downto + field_lo(c_hfa, "sdp_source_info_gn_id" )) <= pp_gn_id; + dp_header_info(field_hi(c_hfa, "sdp_integration_interval" ) downto + field_lo(c_hfa, "sdp_integration_interval" )) <= TO_UVEC(hdr_input.integration_interval, 24); + dp_header_info(field_hi(c_hfa, "sdp_data_id" ) downto + field_lo(c_hfa, "sdp_data_id" )) <= data_id_slv; + dp_header_info(field_hi(c_hfa, "sdp_nof_signal_inputs" ) downto + field_lo(c_hfa, "sdp_nof_signal_inputs" )) <= TO_UVEC(c_nof_signal_inputs, 8); + dp_header_info(field_hi(c_hfa, "sdp_nof_bytes_per_statistic" ) downto + field_lo(c_hfa, "sdp_nof_bytes_per_statistic" )) <= TO_UVEC(c_sdp_nof_bytes_per_statistic, 8); + dp_header_info(field_hi(c_hfa, "sdp_nof_statistics_per_packet") downto + field_lo(c_hfa, "sdp_nof_statistics_per_packet")) <= TO_UVEC(c_nof_statistics_per_packet, 16); + dp_header_info(field_hi(c_hfa, "sdp_block_period" ) downto + field_lo(c_hfa, "sdp_block_period" )) <= sdp_info.block_period; + dp_header_info(field_hi(c_hfa, "dp_bsn" ) downto + field_lo(c_hfa, "dp_bsn" )) <= hdr_input.bsn_at_sync; p_reg : process(dp_rst, dp_clk) begin @@ -456,7 +486,8 @@ begin -- hdr_input.integration_interval also on node 0 p.nof_rn <= TO_UINT(ring_info.N_rn); p.nof_used_P_sq <= smallest(p.nof_rn / 2 + 1, g_P_sq); - p.remote_rn <= func_ring_nof_hops_to_source_rn(r.instance_count, p.rn_index, p.nof_rn, g_crosslets_direction); + p.remote_rn <= func_ring_nof_hops_to_source_rn( + r.instance_count, p.rn_index, p.nof_rn, g_crosslets_direction); p.remote_gn <= p.offset_rn + p.remote_rn; p.remote_pn <= func_sdp_gn_index_to_pn_index(p.remote_gn); p.remote_si_offset <= p.remote_pn * c_sdp_S_pn; @@ -490,7 +521,8 @@ begin elsif in_sosi.eop = '1' then reg_input.payload_err <= reg_input.payload_err or in_sosi.err(0); end if; - reg_input.nof_packets <= func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, p.nof_used_P_sq, reg_input.nof_crosslets); + reg_input.nof_packets <= func_sdp_get_stat_nof_packets(g_statistics_type, + c_sdp_S_pn, p.nof_used_P_sq, reg_input.nof_crosslets); -- Determine previous sync interval info -- . just register when the value suits any sync interval @@ -524,11 +556,14 @@ begin gen_data_id_sst_os : if g_statistics_type = "SST_OS" generate -- Signal input index is repeated, first 0:11 (r.packet_count 0:11) with fsub_type = 0. -- Then for r.packet_count 12:23, signal input index is again 0:11 but with fsub_type = 1. - fsub_type <= '0' when r.packet_count < c_sdp_S_pn else '1'; -- Set fsub_type = 0 for unshifted bands, '1' for shifted bands - data_id_rec.sst_signal_input_index <= r.packet_count + p.local_si_offset when r.packet_count < c_sdp_S_pn else r.packet_count - c_sdp_S_pn + p.local_si_offset; + fsub_type <= '0' when r.packet_count < c_sdp_S_pn else '1'; -- Set fsub_type = 0 for unshifted bands, '1' + -- for shifted bands + data_id_rec.sst_signal_input_index <= r.packet_count + p.local_si_offset when + r.packet_count < c_sdp_S_pn else r.packet_count - c_sdp_S_pn + p.local_si_offset; end generate; - gen_no_os : if g_statistics_type /= "SST_OS" generate -- Set fsub_type to sdp_info.fsub_type when g_statistics_type is not SST_OS. + gen_no_os : if g_statistics_type /= "SST_OS" generate + -- Set fsub_type to sdp_info.fsub_type when g_statistics_type is not SST_OS. fsub_type <= sdp_info.fsub_type; end generate; @@ -594,7 +629,8 @@ begin v.interleave_count := r.interleave_count + 1; if r.interleave_count = c_sdp_Q_fft - 1 then -- jump to first packet for next step, - v.start_address := r.interleave_address + c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_sz; -- = + 512 * 2 * 2 = + 2048 + v.start_address := r.interleave_address + c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_sz; -- = + -- + 512 * 2 * 2 = + 2048 v.interleave_count := 0; v.interleave_address := v.start_address; end if; @@ -618,13 +654,16 @@ begin -- 6 24576, 25152, 25728, 26304, 26880, 27456, 28032 -- 7 28672, 29248, 29824, 30400, 30976, 31552, 32128 -- 8 32768, 33344, 33920, 34496, 35072, 35648, 36224 - v.start_address := r.start_address + c_sdp_X_sq * c_nof_complex * c_sdp_W_statistic_sz; -- continue with next packet in this instance + v.start_address := r.start_address + c_sdp_X_sq * c_nof_complex * c_sdp_W_statistic_sz; -- continue with + -- next packet in this instance v.crosslet_count := r.crosslet_count + 1; if r.crosslet_count = reg_input.nof_crosslets - 1 then - v.start_address := r.instance_address + 2**c_sdp_ram_st_xsq_addr_w; -- jump to first packet in next instance + v.start_address := r.instance_address + 2**c_sdp_ram_st_xsq_addr_w; -- jump to first packet in + -- next instance v.crosslet_count := 0; v.instance_count := r.instance_count + 1; - v.instance_address := v.start_address; -- use v.start_address to avoid multipier needed in (r.instance_count + 1) * 2**c_sdp_ram_st_xsq_addr_w + v.instance_address := v.start_address; -- use v.start_address to avoid multipier needed in + -- (r.instance_count + 1) * 2**c_sdp_ram_st_xsq_addr_w end if; v.start_timer := p.offload_packet_time; v.packet_count := r.packet_count + 1; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_pkg.vhd index 29bd7d5a7007231b14853d174614eb8991acdd7c..1019f6bd75d68346d32d8a266c58fa89f0011060 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_pkg.vhd @@ -34,7 +34,6 @@ use common_lib.common_field_pkg.all; use work.sdp_pkg.all; package sdp_tbuf_pkg is - ----------------------------------------------------------------------------- -- TBUF registers ----------------------------------------------------------------------------- @@ -81,8 +80,7 @@ package sdp_tbuf_pkg is dump_done : std_logic; -- 18 end record; - constant c_sdp_tbuf_registers_rst : t_sdp_tbuf_registers := + constant c_sdp_tbuf_registers_rst :t_sdp_tbuf_registers := (0, 0, '0', '0', 0, 0, 0, 0, (others => '0'), (others => '0'), 0, 0, 0, (others => '0'), (others => '0'), '0'); - end sdp_tbuf_pkg; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_registers.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_registers.vhd index 241c4ac6d6dafb4eb8cc847c3aa0eef2602b70a2..2c0aca854ceb81cc1e153f82a539881e254b645a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_registers.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_tbuf_registers.vhd @@ -70,7 +70,8 @@ entity sdp_tbuf_registers is end sdp_tbuf_registers; architecture str of sdp_tbuf_registers is - constant c_field_arr : t_common_field_arr(c_sdp_tbuf_registers_nof_hdr_fields - 1 downto 0) := c_sdp_tbuf_registers_field_arr; + constant c_field_arr : t_common_field_arr(c_sdp_tbuf_registers_nof_hdr_fields - 1 downto 0) := + c_sdp_tbuf_registers_field_arr; signal mm_fields_in : std_logic_vector(field_slv_in_len(c_field_arr) - 1 downto 0); signal mm_fields_out : std_logic_vector(field_slv_out_len(c_field_arr) - 1 downto 0); @@ -120,22 +121,38 @@ begin ); -- add "RO" fields to mm_fields - mm_fields_in(field_hi(c_field_arr, "dump_done") downto field_lo(c_field_arr, "dump_done")) <= slv(tbuf_registers_rd.dump_done); -- 1 - mm_fields_in(field_hi(c_field_arr, "recorded_last_rsn") downto field_lo(c_field_arr, "recorded_last_rsn")) <= tbuf_registers_rd.recorded_last_rsn; -- 64 - mm_fields_in(field_hi(c_field_arr, "recorded_first_rsn") downto field_lo(c_field_arr, "recorded_first_rsn")) <= tbuf_registers_rd.recorded_first_rsn; -- 64 - mm_fields_in(field_hi(c_field_arr, "recorded_nof_samples") downto field_lo(c_field_arr, "recorded_nof_samples")) <= to_uvec(tbuf_registers_rd.recorded_nof_samples, 32); - mm_fields_in(field_hi(c_field_arr, "recorded_last_page") downto field_lo(c_field_arr, "recorded_last_page")) <= to_uvec(tbuf_registers_rd.recorded_last_page, 32); - mm_fields_in(field_hi(c_field_arr, "recorded_first_page") downto field_lo(c_field_arr, "recorded_first_page")) <= to_uvec(tbuf_registers_rd.recorded_first_page, 32); - mm_fields_in(field_hi(c_field_arr, "recorded_nof_pages") downto field_lo(c_field_arr, "recorded_nof_pages")) <= to_uvec(tbuf_registers_rd.recorded_nof_pages, 32); - mm_fields_in(field_hi(c_field_arr, "nof_pages_in_buffer") downto field_lo(c_field_arr, "nof_pages_in_buffer")) <= to_uvec(tbuf_registers_rd.nof_pages_in_buffer, 32); - mm_fields_in(field_hi(c_field_arr, "nof_samples_per_block") downto field_lo(c_field_arr, "nof_samples_per_block")) <= to_uvec(tbuf_registers_rd.nof_samples_per_block, 32); + mm_fields_in(field_hi(c_field_arr, "dump_done") downto + field_lo(c_field_arr, "dump_done")) <= slv(tbuf_registers_rd.dump_done); -- 1 + mm_fields_in(field_hi(c_field_arr, "recorded_last_rsn") downto + field_lo(c_field_arr, "recorded_last_rsn")) <= tbuf_registers_rd.recorded_last_rsn; -- 64 + mm_fields_in(field_hi(c_field_arr, "recorded_first_rsn") downto + field_lo(c_field_arr, "recorded_first_rsn")) <= tbuf_registers_rd.recorded_first_rsn; -- 64 + mm_fields_in(field_hi(c_field_arr, "recorded_nof_samples") downto + field_lo(c_field_arr, "recorded_nof_samples")) <= to_uvec(tbuf_registers_rd.recorded_nof_samples, 32); + mm_fields_in(field_hi(c_field_arr, "recorded_last_page") downto + field_lo(c_field_arr, "recorded_last_page")) <= to_uvec(tbuf_registers_rd.recorded_last_page, 32); + mm_fields_in(field_hi(c_field_arr, "recorded_first_page") downto + field_lo(c_field_arr, "recorded_first_page")) <= to_uvec(tbuf_registers_rd.recorded_first_page, 32); + mm_fields_in(field_hi(c_field_arr, "recorded_nof_pages") downto + field_lo(c_field_arr, "recorded_nof_pages")) <= to_uvec(tbuf_registers_rd.recorded_nof_pages, 32); + mm_fields_in(field_hi(c_field_arr, "nof_pages_in_buffer") downto + field_lo(c_field_arr, "nof_pages_in_buffer")) <= to_uvec(tbuf_registers_rd.nof_pages_in_buffer, 32); + mm_fields_in(field_hi(c_field_arr, "nof_samples_per_block") downto + field_lo(c_field_arr, "nof_samples_per_block")) <= to_uvec(tbuf_registers_rd.nof_samples_per_block, 32); -- get "RW" fields from mm_fields - tbuf_registers_wr.dump_enables <= mm_fields_out(field_hi(c_field_arr, "dump_enables") downto field_lo(c_field_arr, "dump_enables")); - tbuf_registers_wr.dump_start_rsn <= mm_fields_out(field_hi(c_field_arr, "dump_start_rsn") downto field_lo(c_field_arr, "dump_start_rsn")); - tbuf_registers_wr.dump_nof_pages <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_nof_pages") downto field_lo(c_field_arr, "dump_nof_pages"))); - tbuf_registers_wr.dump_start_page <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_start_page") downto field_lo(c_field_arr, "dump_start_page"))); - tbuf_registers_wr.dump_interpacket_gap <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_interpacket_gap") downto field_lo(c_field_arr, "dump_interpacket_gap"))); - tbuf_registers_wr.record_enable <= sl(mm_fields_out(field_hi(c_field_arr, "record_enable") downto field_lo(c_field_arr, "record_enable"))); - tbuf_registers_wr.record_all <= sl(mm_fields_out(field_hi(c_field_arr, "record_all") downto field_lo(c_field_arr, "record_all"))); + tbuf_registers_wr.dump_enables <= mm_fields_out(field_hi(c_field_arr, "dump_enables") downto + field_lo(c_field_arr, "dump_enables")); + tbuf_registers_wr.dump_start_rsn <= mm_fields_out(field_hi(c_field_arr, "dump_start_rsn") downto + field_lo(c_field_arr, "dump_start_rsn")); + tbuf_registers_wr.dump_nof_pages <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_nof_pages") downto + field_lo(c_field_arr, "dump_nof_pages"))); + tbuf_registers_wr.dump_start_page <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_start_page") downto + field_lo(c_field_arr, "dump_start_page"))); + tbuf_registers_wr.dump_interpacket_gap <= to_uint(mm_fields_out(field_hi(c_field_arr, "dump_interpacket_gap") downto + field_lo(c_field_arr, "dump_interpacket_gap"))); + tbuf_registers_wr.record_enable <= sl(mm_fields_out(field_hi(c_field_arr, "record_enable") downto + field_lo(c_field_arr, "record_enable"))); + tbuf_registers_wr.record_all <= sl(mm_fields_out(field_hi(c_field_arr, "record_all") downto + field_lo(c_field_arr, "record_all"))); end str; diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd index 1e0530ee6ae3521798f9e250deab63c0cdd1af16..c676f3033a3ab30a24c1dc30c06b8b3794289a81 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd @@ -30,17 +30,17 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, reorder_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.tb_common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use dp_lib.dp_stream_pkg.all; -use reorder_lib.reorder_pkg.all; -use work.sdp_pkg.all; -use work.sdp_bdo_pkg.all; -use work.tb_sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.tb_common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use dp_lib.dp_stream_pkg.all; + use reorder_lib.reorder_pkg.all; + use work.sdp_pkg.all; + use work.sdp_bdo_pkg.all; + use work.tb_sdp_pkg.all; entity tb_sdp_beamformer_output is generic ( @@ -227,7 +227,8 @@ begin proc_mem_mm_bus_wr(v_offset + 0, g_nof_destinations, mm_clk, reg_destinations_cipo, reg_destinations_copi); -- . Read back nof_destinations - proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, c_common_cross_clock_domain_latency * 2); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, + c_common_cross_clock_domain_latency * 2); proc_mem_mm_bus_rd(v_offset + 0, mm_clk, reg_destinations_cipo, reg_destinations_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); rd_nof_destinations <= to_uint(reg_destinations_cipo.rddata(c_word_w - 1 downto 0)); @@ -238,7 +239,8 @@ begin -- . Read nof_destinations_act, to check that g_nof_destinations is -- forced to c_nof_destinations - proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, c_common_cross_clock_domain_latency * 2); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, + c_common_cross_clock_domain_latency * 2); proc_mem_mm_bus_rd(v_offset + 1, mm_clk, reg_destinations_cipo, reg_destinations_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); rd_nof_destinations_act <= to_uint(reg_destinations_cipo.rddata(c_word_w - 1 downto 0)); @@ -250,16 +252,20 @@ begin -- . Use same destination MAC/IP/UDP for all destinations, to ease rx_beamlet_header verification -- and to have same c_exp_ip_header_checksum value for all c_nof_destinations. for DI in 0 to c_nof_destinations - 1 loop - proc_mem_mm_bus_wr(DI * 2 + 1, to_uint(c_sdp_cep_eth_dst_mac(47 downto 32)), mm_clk, reg_destinations_cipo, reg_destinations_copi); - proc_mem_mm_bus_wr(DI * 2, to_sint(c_sdp_cep_eth_dst_mac(31 downto 0)), mm_clk, reg_destinations_cipo, reg_destinations_copi); + proc_mem_mm_bus_wr(DI * 2 + 1, to_uint(c_sdp_cep_eth_dst_mac(47 downto 32)), + mm_clk, reg_destinations_cipo, reg_destinations_copi); + proc_mem_mm_bus_wr(DI * 2, to_sint(c_sdp_cep_eth_dst_mac(31 downto 0)), + mm_clk, reg_destinations_cipo, reg_destinations_copi); end loop; v_offset := c_sdp_bdo_mm_nof_destinations_max * 2; for DI in 0 to c_nof_destinations - 1 loop - proc_mem_mm_bus_wr(v_offset + DI, to_sint(c_sdp_cep_ip_dst_addr), mm_clk, reg_destinations_cipo, reg_destinations_copi); + proc_mem_mm_bus_wr(v_offset + DI, to_sint(c_sdp_cep_ip_dst_addr), + mm_clk, reg_destinations_cipo, reg_destinations_copi); end loop; v_offset := c_sdp_bdo_mm_nof_destinations_max * 3; for DI in 0 to c_nof_destinations - 1 loop - proc_mem_mm_bus_wr(v_offset + DI, to_uint(c_sdp_cep_udp_dst_port), mm_clk, reg_destinations_cipo, reg_destinations_copi); + proc_mem_mm_bus_wr(v_offset + DI, to_uint(c_sdp_cep_udp_dst_port), + mm_clk, reg_destinations_cipo, reg_destinations_copi); end loop; end if; @@ -279,7 +285,8 @@ begin ---------------------------------------------------------------------------- proc_mem_mm_bus_wr(0, 1, mm_clk, reg_dp_xonoff_cipo, reg_dp_xonoff_copi); - proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, c_common_cross_clock_domain_latency * 2); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_dp_clk_period, + c_common_cross_clock_domain_latency * 2); mm_init <= '0'; wait; end process; diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd index 7e83acc6cbc36702e0479c2a0c32d8e9bb701ab2..7b063ecd8ebed7153acdbab54769d1e5ffe40188 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd @@ -301,17 +301,17 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, st_lib, ring_lib, tr_10GbE_lib, tech_pll_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.tb_common_mem_pkg.all; -use common_lib.common_str_pkg.all; -use dp_lib.dp_stream_pkg.all; -use ring_lib.ring_pkg.all; -use tech_pll_lib.tech_pll_component_pkg.all; -use work.sdp_pkg.all; -use work.tb_sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.tb_common_mem_pkg.all; + use common_lib.common_str_pkg.all; + use dp_lib.dp_stream_pkg.all; + use ring_lib.ring_pkg.all; + use tech_pll_lib.tech_pll_component_pkg.all; + use work.sdp_pkg.all; + use work.tb_sdp_pkg.all; entity tb_sdp_crosslets_remote_ring is generic ( @@ -564,9 +564,11 @@ begin for RN in 0 to c_last_rn loop for P in 0 to c_P_sq - 1 loop v_offset := 6 + RN * v_span_node + P * v_span; - proc_mem_mm_bus_rd(v_offset, mm_clk, reg_bsn_monitor_v2_xst_rx_align_cipo, reg_bsn_monitor_v2_xst_rx_align_copi); + proc_mem_mm_bus_rd(v_offset, + mm_clk, reg_bsn_monitor_v2_xst_rx_align_cipo, reg_bsn_monitor_v2_xst_rx_align_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - FPGA_xst_rx_align_latency_R(RN)(P) <= TO_SINT(reg_bsn_monitor_v2_xst_rx_align_cipo.rddata(c_word_w - 1 downto 0)); + FPGA_xst_rx_align_latency_R(RN)(P) <= + TO_SINT(reg_bsn_monitor_v2_xst_rx_align_cipo.rddata(c_word_w - 1 downto 0)); end loop; end loop; -- Read FPGA_xst_aligned_latency_R diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_subband_select.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_subband_select.vhd index 2aa8e4d7609b9e17eae9642736639630eb6bdf88..be1ea08147275bf8b212a217477f11d772db59d1 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_subband_select.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_subband_select.vhd @@ -182,11 +182,13 @@ begin -- Run some sync intervals with DSP counter data for the real and imag fields wait until rising_edge(clk); for I in 0 to c_nof_sync - 1 loop - proc_dp_gen_block_data(c_rl, false, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, c_nof_ch_in, 0, 0, '1', "0", clk, st_en, st_siso_arr(K), st_sosi_arr(K)); -- next sync + proc_dp_gen_block_data(c_rl, false, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, + c_nof_ch_in, 0, 0, '1', "0", clk, st_en, st_siso_arr(K), st_sosi_arr(K)); -- next sync v_re := v_re + c_nof_ch_in; v_im := v_im + c_nof_ch_in; for J in 0 to c_nof_block_per_sync - 2 loop -- provide sop and eop for block reference - proc_dp_gen_block_data(c_rl, false, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, c_nof_ch_in, 0, 0, '0', "0", clk, st_en, st_siso_arr(K), st_sosi_arr(K)); -- no sync + proc_dp_gen_block_data(c_rl, false, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, + c_nof_ch_in, 0, 0, '0', "0", clk, st_en, st_siso_arr(K), st_sosi_arr(K)); -- no sync v_re := v_re + c_nof_ch_in; v_im := v_im + c_nof_ch_in; end loop; @@ -257,8 +259,17 @@ begin exp_sosi.eop <= '1'; end if; - exp_sosi.re <= RESIZE_DP_DSP_DATA(TO_DP_DSP_DATA( (I + c_nof_block_dly) * c_nof_ch_in + v_k + c_nof_ch_sel_col * c_crosslet_offsets(v_offset) + v_col + v_row * 2**5)(c_sdp_W_crosslet - 1 downto 0)); - exp_sosi.im <= RESIZE_DP_DSP_DATA(TO_DP_DSP_DATA(1 + (I + c_nof_block_dly) * c_nof_ch_in + v_k + c_nof_ch_sel_col * c_crosslet_offsets(v_offset) + v_col + v_row * 2**5)(c_sdp_W_crosslet - 1 downto 0)); + exp_sosi.re <= RESIZE_DP_DSP_DATA(TO_DP_DSP_DATA((I + c_nof_block_dly) * c_nof_ch_in + + v_k + + c_nof_ch_sel_col * c_crosslet_offsets(v_offset) + + v_col + + v_row * 2**5)(c_sdp_W_crosslet - 1 downto 0)); + exp_sosi.im <= RESIZE_DP_DSP_DATA(TO_DP_DSP_DATA(1 + + (I + c_nof_block_dly) * c_nof_ch_in + + v_k + + c_nof_ch_sel_col * c_crosslet_offsets(v_offset) + + v_col + + v_row * 2**5)(c_sdp_W_crosslet - 1 downto 0)); proc_common_wait_some_cycles(clk, 1); end loop; diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_pkg.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_pkg.vhd index 69daed37a1142f63236af40da33598ddfaaf103c..5e0751e4efc515e539940f847d7c82ffc7984077 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_pkg.vhd @@ -26,13 +26,13 @@ -- Description: ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, reorder_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.tb_common_pkg.all; -use dp_lib.dp_stream_pkg.all; -use reorder_lib.reorder_pkg.all; -use work.sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.tb_common_pkg.all; + use dp_lib.dp_stream_pkg.all; + use reorder_lib.reorder_pkg.all; + use work.sdp_pkg.all; package tb_sdp_pkg is ----------------------------------------------------------------------------- @@ -148,8 +148,10 @@ package tb_sdp_pkg is -- . use separate list for re and for im subtype t_sdp_beamlet_block_list is t_slv_8_arr(0 to c_sdp_cep_nof_beamlets_per_block * c_sdp_N_pol_bf - 1); - function func_sdp_transpose_beamlet_packet( packet_list : t_sdp_beamlet_packet_list) return t_sdp_beamlet_packet_list; - function func_sdp_undo_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) return t_sdp_beamlet_packet_list; + function func_sdp_transpose_beamlet_packet( packet_list : t_sdp_beamlet_packet_list) + return t_sdp_beamlet_packet_list; + function func_sdp_undo_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) + return t_sdp_beamlet_packet_list; -- Read beamlet packet octets per re and im parts procedure proc_sdp_rx_beamlet_octets( @@ -186,7 +188,8 @@ package body tb_sdp_pkg is function func_sdp_gn_index_to_ip_15_0(gn_index : natural) return std_logic_vector is constant c_unb_nr : natural := gn_index / 4; -- 4 PN per Uniboard2 constant c_node_nr : natural := gn_index mod 4; - constant c_ip_15_0 : std_logic_vector(15 downto 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr + 1, 8); -- +1 to avoid IP = *.*.*.0 + constant c_ip_15_0 : std_logic_vector(15 downto 0) := + TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr + 1, 8); -- +1 to avoid IP = *.*.*.0 begin return c_ip_15_0; end func_sdp_gn_index_to_ip_15_0; @@ -265,7 +268,10 @@ package body tb_sdp_pkg is v_hdr.app.sdp_data_id := TO_UVEC(beamlet_index, 32); v_hdr.app.sdp_data_id_bst_beamlet_index := TO_UVEC(beamlet_index, 16); elsif g_statistics_type = "XST" then - v_hdr.app.sdp_data_id := TO_UVEC(0, 7) & TO_UVEC(subband_index, 9) & TO_UVEC(xst_signal_input_A, 8) & TO_UVEC(xst_signal_input_B, 8); + v_hdr.app.sdp_data_id := TO_UVEC(0, 7) & + TO_UVEC(subband_index, 9) & + TO_UVEC(xst_signal_input_A, 8) & + TO_UVEC(xst_signal_input_B, 8); v_hdr.app.sdp_data_id_xst_subband_index := TO_UVEC(subband_index, 9); v_hdr.app.sdp_data_id_xst_signal_input_A_index := TO_UVEC(xst_signal_input_A, 8); v_hdr.app.sdp_data_id_xst_signal_input_B_index := TO_UVEC(xst_signal_input_B, 8); @@ -279,7 +285,8 @@ package body tb_sdp_pkg is return v_hdr; end func_sdp_compose_stat_header; - function func_sdp_verify_stat_header(g_statistics_type : string; in_hdr, exp_hdr : t_sdp_stat_header) return boolean is + function func_sdp_verify_stat_header(g_statistics_type : string; in_hdr, exp_hdr : t_sdp_stat_header) + return boolean is begin -- eth header assert in_hdr.eth.dst_mac = exp_hdr.eth.dst_mac @@ -689,7 +696,8 @@ package body tb_sdp_pkg is severity ERROR; v_beamlet_index := TO_UINT(in_hdr.app.sdp_beamlet_index); if beamlet_index_mod then - -- Treat beamlet_index modulo c_sdp_S_sub_bf, because the beamlet packets from different beamsets may arrive in arbitrary order + -- Treat beamlet_index modulo c_sdp_S_sub_bf, because the beamlet packets from different beamsets may arrive + -- in arbitrary order v_beamlet_index := v_beamlet_index mod c_sdp_S_sub_bf; end if; assert v_beamlet_index = TO_UINT(exp_hdr.app.sdp_beamlet_index) @@ -789,7 +797,8 @@ package body tb_sdp_pkg is -- ..., ..., ..., ..., -- 972,973, 1948,1949, 2924,2925, 3900,3901, -- 974,775, 1950,1951, 2926,2927, 3902,3903, output list index - function func_sdp_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) return t_sdp_beamlet_packet_list is + function func_sdp_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) + return t_sdp_beamlet_packet_list is variable v_list : t_sdp_beamlet_packet_list; begin v_list := func_reorder_transpose_packet(c_sdp_cep_nof_blocks_per_packet, @@ -800,7 +809,8 @@ package body tb_sdp_pkg is end func_sdp_transpose_beamlet_packet; -- Reverse argument order nof_beamlets_per_block and nof_blocks_per_packet to undo transpose - function func_sdp_undo_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) return t_sdp_beamlet_packet_list is + function func_sdp_undo_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) + return t_sdp_beamlet_packet_list is variable v_list : t_sdp_beamlet_packet_list; begin v_list := func_reorder_transpose_packet(c_sdp_cep_nof_beamlets_per_block, diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd index f10e1a83b477577e362304edb7f287124dc87ac4..43d489eefd2dac074b9773726ec16d3752124628 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd @@ -37,18 +37,18 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib, ring_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.tb_common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.common_field_pkg.all; -use common_lib.common_str_pkg.all; -use dp_lib.dp_stream_pkg.all; -use ring_lib.ring_pkg.all; -use work.sdp_pkg.all; -use work.tb_sdp_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.tb_common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.common_field_pkg.all; + use common_lib.common_str_pkg.all; + use dp_lib.dp_stream_pkg.all; + use ring_lib.ring_pkg.all; + use work.sdp_pkg.all; + use work.tb_sdp_pkg.all; entity tb_sdp_statistics_offload is generic ( @@ -81,16 +81,20 @@ end tb_sdp_statistics_offload; architecture tb of tb_sdp_statistics_offload is constant c_dp_clk_period : time := 5 ns; -- 200 MHz constant c_mm_clk_period : time := sel_a_b(g_fast_mm_clk, 1, 10) * 1 ns; - constant c_mm_dp_clk_ratio : natural := sel_a_b(c_mm_clk_period > c_dp_clk_period, c_mm_clk_period / c_dp_clk_period, 1); + constant c_mm_dp_clk_ratio : natural := sel_a_b(c_mm_clk_period > c_dp_clk_period, + c_mm_clk_period / c_dp_clk_period, 1); constant c_cross_clock_domain_latency : natural := 20; - constant c_offload_node_time : natural := g_offload_node_time * g_gn_index; + constant c_offload_node_time : natural := g_offload_node_time * g_gn_index; -- Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on g_gn_index - constant c_node_eth_src_mac : std_logic_vector(47 downto 0) := c_sdp_stat_eth_src_mac_47_16 & func_sdp_gn_index_to_mac_15_0(g_gn_index); - constant c_node_ip_src_addr : std_logic_vector(31 downto 0) := c_sdp_stat_ip_src_addr_31_16 & func_sdp_gn_index_to_ip_15_0(g_gn_index); - constant c_node_udp_src_port : std_logic_vector(15 downto 0) := func_sdp_get_stat_udp_src_port(g_statistics_type, g_gn_index); + constant c_node_eth_src_mac : std_logic_vector(47 downto 0) := c_sdp_stat_eth_src_mac_47_16 & + func_sdp_gn_index_to_mac_15_0(g_gn_index); + constant c_node_ip_src_addr : std_logic_vector(31 downto 0) := c_sdp_stat_ip_src_addr_31_16 & + func_sdp_gn_index_to_ip_15_0(g_gn_index); + constant c_node_udp_src_port : std_logic_vector(15 downto 0) := func_sdp_get_stat_udp_src_port(g_statistics_type, + g_gn_index); -- Used mm_adresses on mm bus "enable_mosi/miso". constant c_reg_enable_mm_addr_enable : natural := 0; @@ -101,7 +105,8 @@ architecture tb of tb_sdp_statistics_offload is constant c_ip_total_length : natural := func_sdp_get_stat_ip_total_length(g_statistics_type); constant c_marker : natural := func_sdp_get_stat_marker(g_statistics_type); constant c_nof_signal_inputs : natural := func_sdp_get_stat_nof_signal_inputs(g_statistics_type); - constant c_nof_packets_max : natural := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, g_P_sq, c_sdp_N_crosslets_max); + constant c_nof_packets_max : natural := func_sdp_get_stat_nof_packets( + g_statistics_type, c_sdp_S_pn, g_P_sq, c_sdp_N_crosslets_max); constant c_exp_ip_header_checksum : natural := 0; -- 0 in this local tb, calculated by IO eth when used in design @@ -122,16 +127,24 @@ architecture tb of tb_sdp_statistics_offload is '0' -- use_cable_to_previous_rn ); - constant c_beamlet_index : natural := g_beamset_id * c_sdp_S_sub_bf; + constant c_beamlet_index : natural := g_beamset_id * c_sdp_S_sub_bf; - --CONSTANT c_crosslets_info_rec : t_sdp_crosslets_info := (offset_arr => (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), step => 16); - constant c_crosslets_info_rec : t_sdp_crosslets_info := (offset_arr => (0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17), step => 7); - constant c_crosslets_info_slv : std_logic_vector(c_sdp_crosslets_info_reg_w - 1 downto 0) := func_sdp_map_crosslets_info(c_crosslets_info_rec); + --CONSTANT c_crosslets_info_rec : t_sdp_crosslets_info := ( + -- offset_arr => (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), + -- step => 16); + constant c_crosslets_info_rec : t_sdp_crosslets_info := ( + offset_arr => (0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17), + step => 7); + constant c_crosslets_info_slv : std_logic_vector(c_sdp_crosslets_info_reg_w - 1 downto 0) := + func_sdp_map_crosslets_info(c_crosslets_info_rec); -- Crosslets settings - constant c_mm_nof_crosslets : std_logic_vector(c_sdp_nof_crosslets_reg_w - 1 downto 0) := TO_UVEC(g_nof_crosslets, c_sdp_nof_crosslets_reg_w); - constant c_nof_used_P_sq : natural := smallest(g_N_rn / 2 + 1, g_P_sq); -- number of used correlator cells <= g_P_sq - constant c_rx_nof_packets : natural := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, c_nof_used_P_sq, g_nof_crosslets); + constant c_mm_nof_crosslets : std_logic_vector(c_sdp_nof_crosslets_reg_w - 1 downto 0) := + TO_UVEC(g_nof_crosslets, c_sdp_nof_crosslets_reg_w); + constant c_nof_used_P_sq : natural := smallest(g_N_rn / 2 + 1, + g_P_sq); -- number of used correlator cells <= g_P_sq + constant c_rx_nof_packets : natural := func_sdp_get_stat_nof_packets(g_statistics_type, + c_sdp_S_pn, c_nof_used_P_sq, g_nof_crosslets); -- payload data constant c_packet_size : natural := c_nof_statistics_per_packet * c_sdp_W_statistic_sz; @@ -151,12 +164,15 @@ architecture tb of tb_sdp_statistics_offload is constant c_mm_ram_size : natural := c_mm_nof_data * c_mm_data_size * c_nof_packets_max; -- = c_ram_size constant c_mm_nof_step : natural := c_mm_step_size / c_mm_data_size; - constant c_mm_Xsq_span : natural := 2**ceil_log2(c_sdp_N_crosslets_max * c_packet_size); -- XST: 2**ceil_log2(7 * 576) = 4096 + constant c_mm_Xsq_span : natural := 2**ceil_log2(c_sdp_N_crosslets_max * c_packet_size); + -- XST: 2**ceil_log2(7 * 576) = 4096 -- Define block timing. constant c_bsn_init : natural := 0; -- Sufficient c_nof_block_per_sync to fit more than c_nof_packets_max offload packets per sync interval. - constant c_nof_block_per_sync : natural := 3 + c_mm_dp_clk_ratio * (ceil_div(c_offload_node_time, c_packet_size) + c_nof_packets_max); + constant c_nof_block_per_sync : natural := 3 + + c_mm_dp_clk_ratio * (ceil_div(c_offload_node_time, c_packet_size) + + c_nof_packets_max); constant c_nof_clk_per_block : natural := c_packet_size; constant c_nof_clk_per_sync : natural := c_nof_block_per_sync * c_nof_clk_per_block; @@ -250,11 +266,11 @@ architecture tb of tb_sdp_statistics_offload is signal dbg_c_mm_nof_step : natural := c_mm_nof_step; signal dbg_c_mm_Xsq_span : natural := c_mm_Xsq_span; signal dbg_c_ram_size : natural := c_ram_size; - signal dbg_c_crosslets_info_rec : t_sdp_crosslets_info := c_crosslets_info_rec; - signal dbg_c_crosslets_info_slv : std_logic_vector(c_sdp_crosslets_info_reg_w - 1 downto 0) := c_crosslets_info_slv; - signal dbg_c_nof_block_per_sync : natural := c_nof_block_per_sync; - signal dbg_c_nof_clk_per_block : natural := c_nof_clk_per_block; - signal dbg_c_nof_clk_per_sync : natural := c_nof_clk_per_sync; + signal dbg_c_crosslets_info_rec : t_sdp_crosslets_info := c_crosslets_info_rec; + signal dbg_c_crosslets_info_slv : std_logic_vector(c_sdp_crosslets_info_reg_w - 1 downto 0) := c_crosslets_info_slv; + signal dbg_c_nof_block_per_sync : natural := c_nof_block_per_sync; + signal dbg_c_nof_clk_per_block : natural := c_nof_clk_per_block; + signal dbg_c_nof_clk_per_sync : natural := c_nof_clk_per_sync; begin -- Check consistency of constant value dependencies assert c_ram_size = c_mm_ram_size @@ -341,10 +357,14 @@ begin proc_common_wait_some_cycles(mm_clk, 10); -- Write statistics offload destination MAC/IP/UDP -- . obtain relative MM word addresses e.g. from lofar2_unb2c_sdp_station.mmap or from sdp.peripheral.yaml - proc_mem_mm_bus_wr(16#17#, TO_UINT(c_sdp_stat_udp_dst_port), mm_clk, hdr_dat_miso, hdr_dat_mosi); - proc_mem_mm_bus_wr(16#19#, TO_SINT(c_sdp_stat_ip_dst_addr), mm_clk, hdr_dat_miso, hdr_dat_mosi); -- use signed to fit 32 b in INTEGER - proc_mem_mm_bus_wr(16#28#, TO_SINT(c_sdp_stat_eth_dst_mac(31 downto 0)), mm_clk, hdr_dat_miso, hdr_dat_mosi); -- use signed to fit 32 b in INTEGER - proc_mem_mm_bus_wr(16#29#, TO_UINT(c_sdp_stat_eth_dst_mac(47 downto 32)), mm_clk, hdr_dat_miso, hdr_dat_mosi); + proc_mem_mm_bus_wr(16#17#, TO_UINT(c_sdp_stat_udp_dst_port), + mm_clk, hdr_dat_miso, hdr_dat_mosi); + proc_mem_mm_bus_wr(16#19#, TO_SINT(c_sdp_stat_ip_dst_addr), + mm_clk, hdr_dat_miso, hdr_dat_mosi); -- use signed to fit 32 b in INTEGER + proc_mem_mm_bus_wr(16#28#, TO_SINT(c_sdp_stat_eth_dst_mac(31 downto 0)), + mm_clk, hdr_dat_miso, hdr_dat_mosi); -- use signed to fit 32 b in INTEGER + proc_mem_mm_bus_wr(16#29#, TO_UINT(c_sdp_stat_eth_dst_mac(47 downto 32)), + mm_clk, hdr_dat_miso, hdr_dat_mosi); -- Enable common variable delay. proc_mem_mm_bus_wr(c_reg_enable_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi); @@ -396,7 +416,8 @@ begin exp_bst_beamlet_index <= c_beamlet_index; -- XST -- . prepare expected XST subband_index - exp_subband_index <= (c_crosslets_info_rec.offset_arr(cur_crosslet) + rx_sync_cnt * c_crosslets_info_rec.step) mod c_sdp_N_sub; + exp_subband_index <= + (c_crosslets_info_rec.offset_arr(cur_crosslet) + rx_sync_cnt * c_crosslets_info_rec.step) mod c_sdp_N_sub; -- . prepare expected XST signal_input_A index exp_xst_signal_input_A <= (gn_index mod c_sdp_N_pn_max) * c_sdp_S_pn; @@ -515,8 +536,16 @@ begin v_exp_data := v_exp_data + 2; -- due to c_sdp_W_statistic_sz = 2 and c_mm_nof_step = 2 > 1 end if; v_exp_data := v_exp_data + (P / 2) * 2048; -- due to c_packet_size = 1024 and c_mm_nof_step = 2 > 1 - if g_statistics_type = "SST" then assert v_exp_data = v_rx_data report "Wrong SST payload data Rx" severity ERROR; end if; - if g_statistics_type = "SST_OS" then assert v_exp_data = v_rx_data report "Wrong SST_OS payload data Rx" severity ERROR; end if; + if g_statistics_type = "SST" then + assert v_exp_data = v_rx_data + report "Wrong SST payload data Rx" + severity ERROR; + end if; + if g_statistics_type = "SST_OS" then + assert v_exp_data = v_rx_data + report "Wrong SST_OS payload data Rx" + severity ERROR; + end if; elsif g_statistics_type = "BST" then -- Indices: @@ -576,10 +605,11 @@ begin W := rx_valid_cnt; -- range c_packet_size = 576 S := W / c_sdp_W_statistic_sz; -- range c_nof_statistics_per_packet = 288 Statistic values D := S / c_nof_complex; -- range c_mm_nof_data = 144 Data values, because - -- c_mm_data_size / c_sdp_W_statistic_sz = 2 = c_nof_complex + -- c_mm_data_size / c_sdp_W_statistic_sz = 2 = c_nof_complex X := D; -- range c_sdp_X_sq = 144 complex XST values I := W mod c_mm_user_size; -- range c_mm_user_size = c_sdp_W_statistic_sz = 2 words - P := rx_packet_cnt mod c_rx_nof_packets; -- range c_nof_packets_max = c_nof_used_P_sq * g_nof_crosslets packets + P := rx_packet_cnt mod c_rx_nof_packets; -- range c_nof_packets_max = c_nof_used_P_sq * + -- g_nof_crosslets packets J := P mod g_nof_crosslets; -- range g_nof_crosslets K := P / g_nof_crosslets; -- range c_nof_used_P_sq diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd index 9851c36b6fa80cc7818689151fc2f44d7ae1a959..da19c772e4c4dc734216bcc92442c3b4ff55fed5 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd @@ -59,24 +59,49 @@ begin -- g_nof_crosslets : NATURAL := 1; -- g_crosslets_direction : INTEGER := 1; -- +1 or -1 - u_sst : entity work.tb_sdp_statistics_offload generic map( true, "SST", 50, 5, 0, 1, 1, true, 3, 3); - u_sst_time : entity work.tb_sdp_statistics_offload generic map( true, "SST", 50, 8, 1, 6, 2, true, 3, 3); - u_sst_no_reverse : entity work.tb_sdp_statistics_offload generic map( true, "SST", 50, 5, 0, 1, 1, false, 3, 3); - u_sst_os : entity work.tb_sdp_statistics_offload generic map( true, "SST_OS", 50, 5, 0, 1, 1, true, 3, 3); - u_sst_os_no_reverse : entity work.tb_sdp_statistics_offload generic map( true, "SST_OS", 50, 5, 0, 1, 1, false, 3, 3); - u_bst_0 : entity work.tb_sdp_statistics_offload generic map( true, "BST", 50, 5, 0, 1, 1, true, 1, 3); - u_bst_0_no_reverse : entity work.tb_sdp_statistics_offload generic map( true, "BST", 50, 5, 0, 1, 1, false, 1, 3, 0); - u_bst_1 : entity work.tb_sdp_statistics_offload generic map( true, "BST", 50, 5, 0, 1, 1, true, 1, 3, 1); - u_xst_P1 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 1, 1, 1); - u_xst_P1_N3 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 1, 3, 1); - u_xst_P9 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 1, 1); - u_xst_P9_N3 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 3, 1); - u_xst_P9_N3_no_reverse : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, false, 1, 3, 0, 0, 16, 9, 3, 1); - u_xst_P9_N3_neg_dir : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 3, 0); - u_xst_P8_N7_RN1_15 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 1, 15, 8, 7, 0); - u_xst_P1_N7_RN0_7 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 1, 7, 1); -- P_sq = 1 < N_rn/2+1 = 5 - u_xst_P9_N7_RN0_7 : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 7, 1); -- P_sq = 9 > N_rn/2+1 = 5 - u_xst_P9_N7_RN0_7_time : entity work.tb_sdp_statistics_offload generic map( true, "XST", 50, 5, 1, 3, 2, true, 3, 3, 0, 0, 8, 9, 7, 1); -- P_sq = 9 > N_rn/2+1 = 5 - u_xst_P9_N4_RN0_7_slow_mm : entity work.tb_sdp_statistics_offload generic map(false, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 4, 1); -- P_sq = 9 > N_rn/2+1 = 5 - u_xst_P9_N7_RN0_7_slow_mm : entity work.tb_sdp_statistics_offload generic map(false, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 7, 1); -- P_sq = 9 > N_rn/2+1 = 5 + u_sst : entity work.tb_sdp_statistics_offload generic map( + true, "SST", 50, 5, 0, 1, 1, true, 3, 3); + u_sst_time : entity work.tb_sdp_statistics_offload generic map( + true, "SST", 50, 8, 1, 6, 2, true, 3, 3); + u_sst_no_reverse : entity work.tb_sdp_statistics_offload generic map( + true, "SST", 50, 5, 0, 1, 1, false, 3, 3); + u_sst_os : entity work.tb_sdp_statistics_offload generic map( + true, "SST_OS", 50, 5, 0, 1, 1, true, 3, 3); + u_sst_os_no_reverse : entity work.tb_sdp_statistics_offload generic map( + true, "SST_OS", 50, 5, 0, 1, 1, false, 3, 3); + u_bst_0 : entity work.tb_sdp_statistics_offload generic map( + true, "BST", 50, 5, 0, 1, 1, true, 1, 3); + u_bst_0_no_reverse : entity work.tb_sdp_statistics_offload generic map( + true, "BST", 50, 5, 0, 1, 1, false, 1, 3, 0); + u_bst_1 : entity work.tb_sdp_statistics_offload generic map( + true, "BST", 50, 5, 0, 1, 1, true, 1, 3, 1); + u_xst_P1 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 1, 1, 1); + u_xst_P1_N3 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 1, 3, 1); + u_xst_P9 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 1, 1); + u_xst_P9_N3 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 3, 1); + u_xst_P9_N3_no_reverse : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, false, 1, 3, 0, 0, 16, 9, 3, 1); + u_xst_P9_N3_neg_dir : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 0, 16, 9, 3, 0); + u_xst_P8_N7_RN1_15 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 1, 3, 0, 1, 15, 8, 7, 0); + -- P_sq = 1 < N_rn/2+1 = 5 + u_xst_P1_N7_RN0_7 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 1, 7, 1); + -- P_sq = 9 > N_rn/2+1 = 5 + u_xst_P9_N7_RN0_7 : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 7, 1); + -- P_sq = 9 > N_rn/2+1 = 5 + u_xst_P9_N7_RN0_7_time : entity work.tb_sdp_statistics_offload generic map( + true, "XST", 50, 5, 1, 3, 2, true, 3, 3, 0, 0, 8, 9, 7, 1); + -- P_sq = 9 > N_rn/2+1 = 5 + u_xst_P9_N4_RN0_7_slow_mm : entity work.tb_sdp_statistics_offload generic map( + false, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 4, 1); + -- P_sq = 9 > N_rn/2+1 = 5 + u_xst_P9_N7_RN0_7_slow_mm : entity work.tb_sdp_statistics_offload generic map( + false, "XST", 50, 5, 0, 1, 1, true, 3, 3, 0, 0, 8, 9, 7, 1); end tb;