diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/hdllib.cfg new file mode 100644 index 0000000000000000000000000000000000000000..55e0af625cc4394681a6002faa68592fc2d60209 --- /dev/null +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/hdllib.cfg @@ -0,0 +1,107 @@ +hdl_lib_name = lofar2_unb2b_sdp_station_full +hdl_library_clause_name = lofar2_unb2b_sdp_station_full_lib +hdl_lib_uses_synth = common mm technology unb2b_board lofar2_unb2b_sdp_station +hdl_lib_uses_sim = eth +hdl_lib_technology = ip_arria10_e1sg + + synth_files = + lofar2_unb2b_sdp_station_full.vhd + +test_bench_files = + +regression_test_vhdl = + +[modelsim_project_file] +modelsim_copy_files = + ../../src/data data + $RADIOHDL_WORK/libraries/dsp/filter/src/hex data # FIR filter coefficients + # Overwrite bf weights with sim data + ../../tb/data data + +[quartus_project_file] +synth_top_level_entity = + +quartus_copy_files = + # Note: path $RADIOHDL_WORK is equivalent to relative path ../../../../../../ + ../../quartus . + ../../src/data data + $RADIOHDL_WORK/libraries/dsp/filter/src/hex data # FIR filter coefficients + +quartus_qsf_files = + $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf + +# use lofar2_unb2b_sdp_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz. +quartus_sdc_files = + ../../quartus/lofar2_unb2b_sdp_station.sdc + #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc + +quartus_tcl_files = + ../../quartus/lofar2_unb2b_sdp_station_pins.tcl + +quartus_vhdl_files = + +quartus_qip_files = + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station_full/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station.qip + +quartus_ip_files = + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_avs_common_mm_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_avs_common_mm_1.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_avs_eth_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_clk_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_cpu_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_jesd204b.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_jtag_uart_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_onchip_memory2_0.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_pio_jesd_ctrl.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_pio_pps.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_pio_system_info.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_pio_wdi.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_bf_weights.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_diag_data_buffer_bsn.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_equalizer_gains.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_fil_coefs.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_scrap.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_ss_ss_wide.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_st_bst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_st_sst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_st_xsq.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_wg.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_aduh_monitor.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bf_scale.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_scheduler.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_scheduler_xsub.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_source_v2.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_crosslets_info.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_diag_data_buffer_bsn.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dpmm_ctrl.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dpmm_data.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dp_selector.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dp_shiftram.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dp_sync_insert_v2.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_dp_xonoff.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_epcs.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_fpga_temp_sens.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_fpga_voltage_sens.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_hdr_dat.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_mmdp_ctrl.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_mmdp_data.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_nw_10gbe_eth10g.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_nw_10gbe_mac.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_remu.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_sdp_info.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_si.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_enable_bst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_enable_sst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_enable_xst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_hdr_dat_bst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_hdr_dat_sst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_stat_hdr_dat_xst.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_unb_pmbus.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_unb_sens.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_wdi.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_wg.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_rom_system_info.ip + $RADIOHDL_BUILD_DIR/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_timer_0.ip + +nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/lofar2_unb2b_sdp_station_full.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/lofar2_unb2b_sdp_station_full.vhd new file mode 100644 index 0000000000000000000000000000000000000000..9c68eacf0efe37d9d6c49d1945b839a57d940487 --- /dev/null +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_full/lofar2_unb2b_sdp_station_full.vhd @@ -0,0 +1,177 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2021 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- + +-- Author : R. van der Walle +-- Purpose: +-- Wrapper for Lofar2 SDP Station full design +-- Description: +-- Unb2b version for lab testing +-- Contains complete SDP station design with AIT input stage with 12 ADC streams, FSUB, XSUB and BF + + +LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, lofar2_unb2b_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 technology_lib.technology_pkg.ALL; +USE unb2b_board_lib.unb2b_board_pkg.ALL; +USE diag_lib.diag_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; + +ENTITY lofar2_unb2b_sdp_station_full IS + GENERIC ( + g_design_name : STRING := "lofar2_unb2b_sdp_station_full"; + g_design_note : STRING := "Lofar2 SDP station full design"; + g_sim : BOOLEAN := FALSE; --Overridden by TB + g_sim_unb_nr : NATURAL := 0; + g_sim_node_nr : NATURAL := 0; + g_stamp_date : NATURAL := 0; -- Date (YYYYMMDD) -- set by QSF + g_stamp_time : NATURAL := 0; -- Time (HHMMSS) -- set by QSF + g_revision_id : STRING := "" -- revision ID -- set by QSF + ); + PORT ( + -- GENERAL + CLK : IN STD_LOGIC; -- System Clock + PPS : IN STD_LOGIC; -- System Sync + WDI : OUT STD_LOGIC; -- Watchdog Clear + INTA : INOUT STD_LOGIC; -- FPGA interconnect line + INTB : INOUT STD_LOGIC; -- FPGA interconnect line + + -- Others + VERSION : IN STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0); + ID : IN STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0); + TESTIO : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0); + + -- I2C Interface to Sensors + SENS_SC : INOUT STD_LOGIC; + SENS_SD : INOUT STD_LOGIC; + + PMBUS_SC : INOUT STD_LOGIC; + PMBUS_SD : INOUT STD_LOGIC; + PMBUS_ALERT : IN STD_LOGIC := '0'; + + -- 1GbE Control Interface + ETH_CLK : IN STD_LOGIC; + ETH_SGIN : IN STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0); + ETH_SGOUT : OUT STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0); + + -- Transceiver clocks + SA_CLK : IN STD_LOGIC := '0'; -- Clock 10GbE front (qsfp) and ring lines + + -- front transceivers + QSFP_1_RX : IN STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0) := (OTHERS=>'0'); + QSFP_1_TX : OUT STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0); + + -- LEDs + QSFP_LED : OUT STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0); + + -- back transceivers (note only 6 are used in unb2b) + BCK_RX : IN STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b); + BCK_REF_CLK : IN STD_LOGIC; -- Use as JESD204B_REFCLK + + -- jesd204b syncronization signals (2 syncs) + JESD204B_SYSREF : IN STD_LOGIC; + JESD204B_SYNC_N : OUT STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) + ); +END lofar2_unb2b_sdp_station_full; + +ARCHITECTURE str OF lofar2_unb2b_sdp_station_full IS + + SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1 downto 0); + SIGNAL jesd204b_sync_n_arr : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-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(0) <= BCK_RX(42); + JESD204B_SERIAL_DATA(1) <= BCK_RX(43); + JESD204B_SERIAL_DATA(2) <= BCK_RX(44); + JESD204B_SERIAL_DATA(3) <= BCK_RX(45); + JESD204B_SERIAL_DATA(4) <= BCK_RX(46); + JESD204B_SERIAL_DATA(5) <= BCK_RX(47); + JESD204B_SERIAL_DATA(6) <= '0'; + JESD204B_SERIAL_DATA(7) <= '0'; + JESD204B_SERIAL_DATA(8) <= '0'; + JESD204B_SERIAL_DATA(9) <= '0'; + JESD204B_SERIAL_DATA(10) <= '0'; + JESD204B_SERIAL_DATA(11) <= '0'; + JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0); + + + u_revision : ENTITY lofar2_unb2b_sdp_station_lib.lofar2_unb2b_sdp_station + GENERIC MAP ( + g_design_name => g_design_name, + g_design_note => g_design_note, + g_sim => g_sim, + g_sim_unb_nr => g_sim_unb_nr, + g_sim_node_nr => g_sim_node_nr, + g_stamp_date => g_stamp_date, + g_stamp_time => g_stamp_time, + g_revision_id => g_revision_id + ) + PORT MAP ( + -- GENERAL + CLK => CLK, + PPS => PPS, + WDI => WDI, + INTA => INTA, + INTB => INTB, + + -- Others + VERSION => VERSION, + ID => ID, + TESTIO => TESTIO, + + -- I2C Interface to Sensors + SENS_SC => SENS_SC, + SENS_SD => SENS_SD, + + PMBUS_SC => PMBUS_SC, + PMBUS_SD => PMBUS_SD, + PMBUS_ALERT => PMBUS_ALERT, + + -- 1GbE Control Interface + ETH_clk => ETH_clk, + ETH_SGIN => ETH_SGIN, + ETH_SGOUT => ETH_SGOUT, + + -- Transceiver clocks + SA_CLK => SA_CLK, + + -- front transceivers + QSFP_1_RX => QSFP_1_RX, + QSFP_1_TX => QSFP_1_TX, + + -- LEDs + QSFP_LED => QSFP_LED, + + -- back transceivers + JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA, + JESD204B_REFCLK => JESD204B_REFCLK, + + -- jesd204b syncronization signals + JESD204B_SYSREF => JESD204B_SYSREF, + JESD204B_SYNC_N => jesd204b_sync_n_arr + ); +END str; 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 9f8ecfbddf90215cb723d7c0cb500d708250ddba..29c92527389b90f758c4c2a15dbcb167e52cd2e5 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 @@ -1,6 +1,6 @@ ------------------------------------------------------------------------------- -- --- Copyright 2020 +-- Copyright 2021 -- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -- @@ -118,32 +118,9 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS CONSTANT c_lofar2_sample_clk_freq : NATURAL := c_sdp_f_adc_MHz * 10**6; -- fixed 200 MHz for LOFAR2.0 stage 1 -- 10 GbE Interface - CONSTANT c_nof_streams_qsfp : NATURAL := c_unb2b_board_tr_qsfp.nof_bus * c_quad; - CONSTANT c_nof_qsfp_bus : NATURAL := 1; - CONSTANT c_nof_10GbE_offload_streams : NATURAL := 1; - CONSTANT c_nof_blocks_per_packet : NATURAL := 4; - CONSTANT c_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; - CONSTANT c_10GbE_block_size : NATURAL := c_nof_blocks_per_packet * c_nof_beamlets_per_block / 4; -- 4 beamlets fit in 1 64bit longword - CONSTANT c_fifo_tx_fill : NATURAL := c_10GbE_block_size; - CONSTANT c_fifo_tx_size : NATURAL := c_fifo_tx_fill + 11; -- Make fifo size large enough for adding header. + CONSTANT c_nof_streams_qsfp : NATURAL := c_unb2b_board_tr_qsfp.nof_bus * c_quad; - -- 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_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_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_udp_offload_nof_streams : NATURAL := c_eth_nof_udp_ports; - - -- 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 - SIGNAL gn_id : STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0); - SIGNAL gn_index : NATURAL := 0; -- System SIGNAL cs_sim : STD_LOGIC; @@ -319,38 +296,26 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS -- Beamlet Subband Select SIGNAL ram_ss_ss_wide_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL ram_ss_ss_wide_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL ram_ss_ss_wide_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL ram_ss_ss_wide_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- Local BF bf weights SIGNAL ram_bf_weights_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL ram_bf_weights_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL ram_bf_weights_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL ram_bf_weights_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- mms_dp_scale Scale Beamlets SIGNAL reg_bf_scale_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_bf_scale_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL reg_bf_scale_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL reg_bf_scale_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- Beamlet Data Output header fields SIGNAL reg_hdr_dat_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_hdr_dat_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL reg_hdr_dat_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL reg_hdr_dat_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- Beamlet Data Output xonoff SIGNAL reg_dp_xonoff_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_dp_xonoff_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL reg_dp_xonoff_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL reg_dp_xonoff_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- Beamlet Statistics (BST) SIGNAL ram_st_bst_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL ram_st_bst_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL ram_st_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL ram_st_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); ---------------------------------------------- -- SST @@ -380,20 +345,16 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS -- Statistics Enable SIGNAL reg_stat_enable_bst_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_stat_enable_bst_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL reg_stat_enable_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL reg_stat_enable_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); -- Statistics header info SIGNAL reg_stat_hdr_dat_bst_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_stat_hdr_dat_bst_miso : t_mem_miso := c_mem_miso_rst; - SIGNAL reg_stat_hdr_dat_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL reg_stat_hdr_dat_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); ---------------------------------------------- -- UDP Offload ---------------------------------------------- - SIGNAL udp_tx_sosi_arr : t_dp_sosi_arr(c_udp_offload_nof_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL udp_tx_siso_arr : t_dp_siso_arr(c_udp_offload_nof_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + SIGNAL udp_tx_sosi_arr : t_dp_sosi_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL udp_tx_siso_arr : t_dp_siso_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); ---------------------------------------------- -- 10 GbE @@ -404,57 +365,23 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS SIGNAL reg_nw_10GbE_eth10g_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_nw_10GbE_eth10g_miso : t_mem_miso := c_mem_miso_rst; - ---------------------------------------------- - - SIGNAL ait_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); - SIGNAL pfb_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); - SIGNAL fsub_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); - - SIGNAL dp_bsn_source_restart : STD_LOGIC; - - SIGNAL bf_udp_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0); - SIGNAL bf_udp_siso_arr : t_dp_siso_arr(c_sdp_N_beamsets-1 DOWNTO 0); - SIGNAL bf_10GbE_hdr_fields_out_arr : t_slv_1024_arr(c_sdp_N_beamsets-1 DOWNTO 0); - -- 10GbE - SIGNAL tr_ref_clk_312 : STD_LOGIC; - SIGNAL tr_ref_clk_156 : STD_LOGIC; - SIGNAL tr_ref_rst_156 : STD_LOGIC; - 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'); - SIGNAL nw_10gbe_snk_in_arr : t_dp_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL nw_10gbe_snk_out_arr : t_dp_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); - SIGNAL nw_10gbe_src_out_arr : t_dp_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL nw_10gbe_src_in_arr : t_dp_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); - - SIGNAL nw_10GbE_hdr_fields_in_arr : t_slv_1024_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0); - SIGNAL this_bck_id : STD_LOGIC_VECTOR(c_unb2b_board_nof_uniboard_w-1 DOWNTO 0); SIGNAL this_chip_id : STD_LOGIC_VECTOR(c_unb2b_board_nof_chip_w-1 DOWNTO 0); - SIGNAL cep_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); - SIGNAL cep_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); - SIGNAL cep_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); - SIGNAL stat_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); - SIGNAL stat_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); - SIGNAL sst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); - SIGNAL bst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); - SIGNAL xst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); - - SIGNAL sdp_info : t_sdp_info := c_sdp_info_rst; - -- QSFP LEDS SIGNAL qsfp_green_led_arr : STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.nof_bus-1 DOWNTO 0); SIGNAL qsfp_red_led_arr : STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.nof_bus-1 DOWNTO 0); - SIGNAL unb2b_board_qsfp_leds_tx_sosi_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL unb2b_board_qsfp_leds_tx_siso_arr : t_dp_siso_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); - SIGNAL unb2b_board_qsfp_leds_rx_sosi_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL unb2_board_qsfp_leds_tx_sosi_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL unb2_board_qsfp_leds_tx_siso_arr : t_dp_siso_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); + SIGNAL unb2_board_qsfp_leds_rx_sosi_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); BEGIN @@ -723,65 +650,59 @@ BEGIN ram_st_xsq_miso => ram_st_xsq_miso ); - ----------------------------------------------------------------------------- - -- SDP Info register - ----------------------------------------------------------------------------- - gn_id <= ID(c_sdp_W_gn_id-1 DOWNTO 0); - gn_index <= TO_UINT(gn_id); - -- derive MAC, IP and UDP Port - 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 - cep_udp_src_port <= c_sdp_cep_udp_src_port_15_8 & ID; - - 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 - sst_udp_src_port <= c_sdp_sst_udp_src_port_15_8 & ID; - bst_udp_src_port <= c_sdp_bst_udp_src_port_15_8 & ID; - xst_udp_src_port <= c_sdp_xst_udp_src_port_15_8 & ID; - - u_sdp_info : ENTITY lofar2_sdp_lib.sdp_info - PORT MAP( - -- Clocks and reset - mm_rst => mm_rst, -- reset synchronous with mm_clk - mm_clk => mm_clk, -- memory-mapped bus clock - - dp_clk => dp_clk, - dp_rst => dp_rst, - - reg_mosi => reg_sdp_info_mosi, - reg_miso => reg_sdp_info_miso, - - -- inputs from other blocks - gn_index => gn_index, - f_adc => c_f_adc, - fsub_type => c_fsub_type, - - -- sdp info - sdp_info => sdp_info - ); + gn_id <= ID(c_sdp_W_gn_id-1 DOWNTO 0); ----------------------------------------------------------------------------- - -- node_adc_input_and_timing (AIT) - -- .Contains JESD receiver, bsn source and associated data buffers, diagnostics and statistics + -- sdp nodes ----------------------------------------------------------------------------- - u_ait: ENTITY lofar2_sdp_lib.node_sdp_adc_input_and_timing - GENERIC MAP( - g_technology => g_technology, - g_sim => g_sim, - g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync + u_sdp_station : ENTITY lofar2_sdp_lib.sdp_station + GENERIC MAP ( + g_technology => c_tech_arria10_e1sg, + g_sim => g_sim, + g_wpfb => g_wpfb, + g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync, + g_scope_selected_subband => g_scope_selected_subband, + g_use_fsub => c_revision_select.use_fsub, + g_use_xsub => c_revision_select.use_xsub, + g_use_bf => c_revision_select.use_bf, + g_P_sq => c_revision_select.P_sq ) - PORT MAP( - -- clocks and resets - mm_clk => mm_clk, - mm_rst => mm_rst, - dp_clk => dp_clk, - dp_rst => dp_rst, - - -- mm control buses - jesd_ctrl_mosi => jesd_ctrl_mosi, - jesd_ctrl_miso => jesd_ctrl_miso, - jesd204b_mosi => jesd204b_mosi, - jesd204b_miso => jesd204b_miso, + PORT MAP ( + + mm_clk => mm_clk, + mm_rst => mm_rst, + + dp_pps => dp_pps, + dp_rst => dp_rst, + dp_clk => dp_clk, + + gn_id => gn_id, + this_bck_id => this_bck_id, + this_chip_id => this_chip_id, + + SA_CLK => SA_CLK, + + -- jesd204b + JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA, + JESD204B_REFCLK => JESD204B_REFCLK, + JESD204B_SYSREF => JESD204B_SYSREF, + JESD204B_SYNC_N => JESD204B_SYNC_N, + + -- UDP Offload + udp_tx_sosi_arr => udp_tx_sosi_arr, + udp_tx_siso_arr => udp_tx_siso_arr, + + -- 10 GbE + reg_nw_10GbE_mac_mosi => reg_nw_10GbE_mac_mosi, + reg_nw_10GbE_mac_miso => reg_nw_10GbE_mac_miso, + reg_nw_10GbE_eth10g_mosi => reg_nw_10GbE_eth10g_mosi, + reg_nw_10GbE_eth10g_miso => reg_nw_10GbE_eth10g_miso, + + -- AIT + jesd204b_mosi => jesd204b_mosi, + jesd204b_miso => jesd204b_miso, + jesd_ctrl_mosi => jesd_ctrl_mosi, + jesd_ctrl_miso => jesd_ctrl_miso, reg_dp_shiftram_mosi => reg_dp_shiftram_mosi, reg_dp_shiftram_miso => reg_dp_shiftram_miso, reg_bsn_source_v2_mosi => reg_bsn_source_v2_mosi, @@ -800,341 +721,75 @@ BEGIN reg_diag_data_buf_bsn_miso => reg_diag_data_buf_bsn_miso, reg_aduh_monitor_mosi => reg_aduh_monitor_mosi, reg_aduh_monitor_miso => reg_aduh_monitor_miso, - - -- Jesd external IOs - jesd204b_serial_data => JESD204B_SERIAL_DATA, - jesd204b_refclk => JESD204B_REFCLK, - jesd204b_sysref => JESD204B_SYSREF, - jesd204b_sync_n => JESD204B_SYNC_N, - - -- Streaming data output - out_sosi_arr => ait_sosi_arr, - dp_bsn_source_restart => dp_bsn_source_restart + + -- FSUB + ram_st_sst_mosi => ram_st_sst_mosi, + ram_st_sst_miso => ram_st_sst_miso, + reg_si_mosi => reg_si_mosi, + reg_si_miso => reg_si_miso, + ram_fil_coefs_mosi => ram_fil_coefs_mosi, + ram_fil_coefs_miso => ram_fil_coefs_miso, + ram_equalizer_gains_mosi => ram_equalizer_gains_mosi, + ram_equalizer_gains_miso => ram_equalizer_gains_miso, + reg_dp_selector_mosi => reg_dp_selector_mosi, + reg_dp_selector_miso => reg_dp_selector_miso, + + -- SDP Info + reg_sdp_info_mosi => reg_sdp_info_mosi, + reg_sdp_info_miso => reg_sdp_info_miso, + + -- XSUB + reg_dp_sync_insert_v2_mosi => reg_dp_sync_insert_v2_mosi, + reg_dp_sync_insert_v2_miso => reg_dp_sync_insert_v2_miso, + reg_crosslets_info_mosi => reg_crosslets_info_mosi, + reg_crosslets_info_miso => reg_crosslets_info_miso, + reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi, + reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso, + ram_st_xsq_mosi => ram_st_xsq_mosi, + ram_st_xsq_miso => ram_st_xsq_miso, + + -- BF + ram_ss_ss_wide_mosi => ram_ss_ss_wide_mosi, + ram_ss_ss_wide_miso => ram_ss_ss_wide_miso, + ram_bf_weights_mosi => ram_bf_weights_mosi, + ram_bf_weights_miso => ram_bf_weights_miso, + reg_bf_scale_mosi => reg_bf_scale_mosi, + reg_bf_scale_miso => reg_bf_scale_miso, + reg_hdr_dat_mosi => reg_hdr_dat_mosi, + reg_hdr_dat_miso => reg_hdr_dat_miso, + reg_dp_xonoff_mosi => reg_dp_xonoff_mosi, + reg_dp_xonoff_miso => reg_dp_xonoff_miso, + ram_st_bst_mosi => ram_st_bst_mosi, + ram_st_bst_miso => ram_st_bst_miso, + + -- SST + reg_stat_enable_sst_mosi => reg_stat_enable_sst_mosi, + reg_stat_enable_sst_miso => reg_stat_enable_sst_miso, + reg_stat_hdr_dat_sst_mosi => reg_stat_hdr_dat_sst_mosi, + reg_stat_hdr_dat_sst_miso => reg_stat_hdr_dat_sst_miso, + + -- XST + reg_stat_enable_xst_mosi => reg_stat_enable_xst_mosi, + reg_stat_enable_xst_miso => reg_stat_enable_xst_miso, + reg_stat_hdr_dat_xst_mosi => reg_stat_hdr_dat_xst_mosi, + reg_stat_hdr_dat_xst_miso => reg_stat_hdr_dat_xst_miso, + + -- BST + reg_stat_enable_bst_mosi => reg_stat_enable_bst_mosi, + reg_stat_enable_bst_miso => reg_stat_enable_bst_miso, + reg_stat_hdr_dat_bst_mosi => reg_stat_hdr_dat_bst_mosi, + reg_stat_hdr_dat_bst_miso => reg_stat_hdr_dat_bst_miso, + + -- QSFP serial + unb2_board_front_io_serial_tx_arr => unb2_board_front_io_serial_tx_arr, + unb2_board_front_io_serial_rx_arr => unb2_board_front_io_serial_rx_arr, + + -- QSFP LEDS + unb2_board_qsfp_leds_tx_sosi_arr => unb2_board_qsfp_leds_tx_sosi_arr, + unb2_board_qsfp_leds_tx_siso_arr => unb2_board_qsfp_leds_tx_siso_arr, + unb2_board_qsfp_leds_rx_sosi_arr => unb2_board_qsfp_leds_rx_sosi_arr ); - ----------------------------------------------------------------------------- - -- node_sdp_filterbank (FSUB) - ----------------------------------------------------------------------------- - gen_use_fsub : IF c_revision_select.use_fsub GENERATE - u_fsub : ENTITY lofar2_sdp_lib.node_sdp_filterbank - GENERIC MAP( - g_sim => g_sim, - g_wpfb => g_wpfb, - g_scope_selected_subband => g_scope_selected_subband - ) - PORT MAP( - dp_clk => dp_clk, - dp_rst => dp_rst, - - in_sosi_arr => ait_sosi_arr, - pfb_sosi_arr => pfb_sosi_arr, - fsub_sosi_arr => fsub_sosi_arr, - dp_bsn_source_restart => dp_bsn_source_restart, - - sst_udp_sosi => udp_tx_sosi_arr(0), - sst_udp_siso => udp_tx_siso_arr(0), - - mm_rst => mm_rst, - mm_clk => mm_clk, - - reg_si_mosi => reg_si_mosi, - reg_si_miso => reg_si_miso, - ram_st_sst_mosi => ram_st_sst_mosi, - ram_st_sst_miso => ram_st_sst_miso, - ram_fil_coefs_mosi => ram_fil_coefs_mosi, - ram_fil_coefs_miso => ram_fil_coefs_miso, - ram_gains_mosi => ram_equalizer_gains_mosi, - ram_gains_miso => ram_equalizer_gains_miso, - reg_selector_mosi => reg_dp_selector_mosi, - reg_selector_miso => reg_dp_selector_miso, - - reg_enable_mosi => reg_stat_enable_sst_mosi, - reg_enable_miso => reg_stat_enable_sst_miso, - reg_hdr_dat_mosi => reg_stat_hdr_dat_sst_mosi, - reg_hdr_dat_miso => reg_stat_hdr_dat_sst_miso, - - sdp_info => sdp_info, - gn_id => gn_id, - eth_src_mac => stat_eth_src_mac, - ip_src_addr => stat_ip_src_addr, - udp_src_port => sst_udp_src_port - ); - END GENERATE; - - - ----------------------------------------------------------------------------- - -- node_sdp_correlator (XSUB) - ----------------------------------------------------------------------------- - gen_use_xsub : IF c_revision_select.use_xsub GENERATE - u_xsub : ENTITY lofar2_sdp_lib.node_sdp_correlator - GENERIC MAP( - g_sim => g_sim, - g_P_sq => c_revision_select.P_sq - ) - PORT MAP( - dp_clk => dp_clk, - dp_rst => dp_rst, - - in_sosi_arr => fsub_sosi_arr, - - xst_udp_sosi => udp_tx_sosi_arr(1), - xst_udp_siso => udp_tx_siso_arr(1), - - mm_rst => mm_rst, - mm_clk => mm_clk, - - reg_dp_sync_insert_v2_mosi => reg_dp_sync_insert_v2_mosi, - reg_dp_sync_insert_v2_miso => reg_dp_sync_insert_v2_miso, - reg_crosslets_info_mosi => reg_crosslets_info_mosi, - reg_crosslets_info_miso => reg_crosslets_info_miso, - reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi, - reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso, - ram_st_xsq_mosi => ram_st_xsq_mosi, - ram_st_xsq_miso => ram_st_xsq_miso, - - reg_stat_enable_mosi => reg_stat_enable_xst_mosi, - reg_stat_enable_miso => reg_stat_enable_xst_miso, - reg_stat_hdr_dat_mosi => reg_stat_hdr_dat_xst_mosi, - reg_stat_hdr_dat_miso => reg_stat_hdr_dat_xst_miso, - - sdp_info => sdp_info, - gn_id => gn_id, - stat_eth_src_mac => stat_eth_src_mac, - stat_ip_src_addr => stat_ip_src_addr, - stat_udp_src_port => xst_udp_src_port - ); - END GENERATE; - - ----------------------------------------------------------------------------- - -- nof beamsets node_sdp_beamformers (BF) - ----------------------------------------------------------------------------- - gen_use_bf : IF c_revision_select.use_bf GENERATE - -- Beamformers - gen_bf : FOR beamset_id IN 0 TO c_sdp_N_beamsets-1 GENERATE - u_bf : ENTITY lofar2_sdp_lib.node_sdp_beamformer - GENERIC MAP( - g_sim => g_sim, - g_beamset_id => beamset_id, - g_scope_selected_beamlet => g_scope_selected_subband - ) - PORT MAP( - dp_clk => dp_clk, - dp_rst => dp_rst, - - in_sosi_arr => fsub_sosi_arr, - bf_udp_sosi => bf_udp_sosi_arr(beamset_id), - bf_udp_siso => bf_udp_siso_arr(beamset_id), - bst_udp_sosi => udp_tx_sosi_arr(2+ beamset_id), - bst_udp_siso => udp_tx_siso_arr(2+ beamset_id), - - mm_rst => mm_rst, - mm_clk => mm_clk, - - ram_ss_ss_wide_mosi => ram_ss_ss_wide_mosi_arr(beamset_id), - ram_ss_ss_wide_miso => ram_ss_ss_wide_miso_arr(beamset_id), - ram_bf_weights_mosi => ram_bf_weights_mosi_arr(beamset_id), - ram_bf_weights_miso => ram_bf_weights_miso_arr(beamset_id), - reg_bf_scale_mosi => reg_bf_scale_mosi_arr(beamset_id), - reg_bf_scale_miso => reg_bf_scale_miso_arr(beamset_id), - reg_hdr_dat_mosi => reg_hdr_dat_mosi_arr(beamset_id), - reg_hdr_dat_miso => reg_hdr_dat_miso_arr(beamset_id), - reg_dp_xonoff_mosi => reg_dp_xonoff_mosi_arr(beamset_id), - reg_dp_xonoff_miso => reg_dp_xonoff_miso_arr(beamset_id), - ram_st_bst_mosi => ram_st_bst_mosi_arr(beamset_id), - ram_st_bst_miso => ram_st_bst_miso_arr(beamset_id), - reg_stat_enable_mosi => reg_stat_enable_bst_mosi_arr(beamset_id), - reg_stat_enable_miso => reg_stat_enable_bst_miso_arr(beamset_id), - reg_stat_hdr_dat_mosi => reg_stat_hdr_dat_bst_mosi_arr(beamset_id), - reg_stat_hdr_dat_miso => reg_stat_hdr_dat_bst_miso_arr(beamset_id), - - sdp_info => sdp_info, - gn_id => gn_id, - eth_src_mac => cep_eth_src_mac, - ip_src_addr => cep_ip_src_addr, - udp_src_port => cep_udp_src_port, - stat_eth_src_mac => stat_eth_src_mac, - stat_ip_src_addr => stat_ip_src_addr, - stat_udp_src_port => bst_udp_src_port, - - hdr_fields_out => bf_10GbE_hdr_fields_out_arr(beamset_id) - ); - - END GENERATE; - - -- MM multiplexing - u_mem_mux_ram_ss_ss_wide : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_ram_ss_ss_wide - ) - PORT MAP ( - mosi => ram_ss_ss_wide_mosi, - miso => ram_ss_ss_wide_miso, - mosi_arr => ram_ss_ss_wide_mosi_arr, - miso_arr => ram_ss_ss_wide_miso_arr - ); - - u_mem_mux_ram_bf_weights : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_ram_bf_weights - ) - PORT MAP ( - mosi => ram_bf_weights_mosi, - miso => ram_bf_weights_miso, - mosi_arr => ram_bf_weights_mosi_arr, - miso_arr => ram_bf_weights_miso_arr - ); - - u_mem_mux_reg_bf_scale : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_reg_bf_scale - ) - PORT MAP ( - mosi => reg_bf_scale_mosi, - miso => reg_bf_scale_miso, - mosi_arr => reg_bf_scale_mosi_arr, - miso_arr => reg_bf_scale_miso_arr - ); - - u_mem_mux_reg_hdr_dat : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_reg_hdr_dat - ) - PORT MAP ( - mosi => reg_hdr_dat_mosi, - miso => reg_hdr_dat_miso, - mosi_arr => reg_hdr_dat_mosi_arr, - miso_arr => reg_hdr_dat_miso_arr - ); - - u_mem_mux_reg_dp_xonoff : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_reg_dp_xonoff - ) - PORT MAP ( - mosi => reg_dp_xonoff_mosi, - miso => reg_dp_xonoff_miso, - mosi_arr => reg_dp_xonoff_mosi_arr, - miso_arr => reg_dp_xonoff_miso_arr - ); - - u_mem_mux_ram_st_bst : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_addr_w_ram_st_bst - ) - PORT MAP ( - mosi => ram_st_bst_mosi, - miso => ram_st_bst_miso, - mosi_arr => ram_st_bst_mosi_arr, - miso_arr => ram_st_bst_miso_arr - ); - - u_mem_mux_reg_stat_enable_bst : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_sdp_reg_stat_enable_addr_w - ) - PORT MAP ( - mosi => reg_stat_enable_bst_mosi, - miso => reg_stat_enable_bst_miso, - mosi_arr => reg_stat_enable_bst_mosi_arr, - miso_arr => reg_stat_enable_bst_miso_arr - ); - - u_mem_mux_reg_stat_hdr_dat_bst : ENTITY common_lib.common_mem_mux - GENERIC MAP ( - g_nof_mosi => c_sdp_N_beamsets, - g_mult_addr_w => c_sdp_reg_stat_hdr_dat_addr_w - ) - PORT MAP ( - mosi => reg_stat_hdr_dat_bst_mosi, - miso => reg_stat_hdr_dat_bst_miso, - mosi_arr => reg_stat_hdr_dat_bst_mosi_arr, - miso_arr => reg_stat_hdr_dat_bst_miso_arr - ); - - ----------------------------------------------------------------------------- - -- DP MUX - ----------------------------------------------------------------------------- - -- Assign hdr_fields to nw_10GbE for ARP/PING functionality. Only the fields: - -- eth_src_mac, ip_src_addr and ip_dst_addr are used. Which are identical for - -- both beamsets. - nw_10GbE_hdr_fields_in_arr(0) <= bf_10GbE_hdr_fields_out_arr(0); - - u_dp_mux : ENTITY dp_lib.dp_mux - GENERIC MAP ( - g_nof_input => c_sdp_N_beamsets, - g_sel_ctrl_invert => TRUE, - g_fifo_size => array_init(0,c_sdp_N_beamsets), --no FIFO used but must match g_nof_input - g_fifo_fill => array_init(0,c_sdp_N_beamsets) --no FIFO used but must match g_nof_input - ) - PORT MAP ( - clk => dp_clk, - rst => dp_rst, - - snk_in_arr => bf_udp_sosi_arr, - snk_out_arr => bf_udp_siso_arr, - - src_out => nw_10gbe_snk_in_arr(0), - src_in => nw_10gbe_snk_out_arr(0) - ); - - --------------- - -- nw_10GbE - --------------- - u_nw_10GbE: ENTITY nw_10GbE_lib.nw_10GbE - GENERIC MAP ( - g_technology => g_technology, - g_sim => g_sim, - g_sim_level => 1, - g_nof_macs => c_nof_10GbE_offload_streams, - g_direction => "TX_RX", - g_tx_fifo_fill => c_fifo_tx_fill, - g_tx_fifo_size => c_fifo_tx_size, - g_ip_hdr_field_arr => c_sdp_cep_hdr_field_arr - - ) - PORT MAP ( - -- Transceiver PLL reference clock - tr_ref_clk_644 => SA_CLK, - tr_ref_clk_312 => tr_ref_clk_312, - tr_ref_clk_156 => tr_ref_clk_156, - tr_ref_rst_156 => tr_ref_rst_156, - - -- MM interface - mm_rst => mm_rst, - mm_clk => mm_clk, - - reg_mac_mosi => reg_nw_10GbE_mac_mosi, - reg_mac_miso => reg_nw_10GbE_mac_miso, - - reg_eth10g_mosi => reg_nw_10GbE_eth10g_mosi, - reg_eth10g_miso => reg_nw_10GbE_eth10g_miso, - - -- DP interface - dp_rst => dp_rst, - dp_clk => dp_clk, - dp_pps => dp_pps, - - src_out_arr => nw_10gbe_src_out_arr, - src_in_arr => nw_10gbe_src_in_arr, - - snk_out_arr => nw_10gbe_snk_out_arr, - snk_in_arr => nw_10gbe_snk_in_arr, - - -- Serial IO - serial_tx_arr => unb2_board_front_io_serial_tx_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0), - serial_rx_arr => unb2_board_front_io_serial_rx_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0), - - hdr_fields_in_arr => nw_10GbE_hdr_fields_in_arr - ); - END GENERATE; - ----------------------------------------------------------------------------- -- Interface : 10GbE ----------------------------------------------------------------------------- @@ -1161,29 +816,9 @@ BEGIN QSFP_LED => QSFP_LED ); - --------- - -- PLL - --------- - u_tech_pll_xgmii_mac_clocks : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks - GENERIC MAP ( - g_technology => g_technology - ) - PORT MAP ( - refclk_644 => SA_CLK, - rst_in => mm_rst, - clk_156 => tr_ref_clk_156, - clk_312 => tr_ref_clk_312, - rst_156 => tr_ref_rst_156, - rst_312 => OPEN - ); - ------------ -- LEDs ------------ - unb2b_board_qsfp_leds_tx_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_snk_out_arr; - unb2b_board_qsfp_leds_tx_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_snk_in_arr; - unb2b_board_qsfp_leds_rx_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_src_out_arr; - u_front_led : ENTITY unb2b_board_lib.unb2b_board_qsfp_leds GENERIC MAP ( g_sim => g_sim, @@ -1197,11 +832,9 @@ BEGIN green_led_arr => qsfp_green_led_arr, red_led_arr => qsfp_red_led_arr, - tx_siso_arr => unb2b_board_qsfp_leds_tx_siso_arr, - tx_sosi_arr => unb2b_board_qsfp_leds_tx_sosi_arr, - rx_sosi_arr => unb2b_board_qsfp_leds_rx_sosi_arr + tx_siso_arr => unb2_board_qsfp_leds_tx_siso_arr, + tx_sosi_arr => unb2_board_qsfp_leds_tx_sosi_arr, + rx_sosi_arr => unb2_board_qsfp_leds_rx_sosi_arr ); - - END str; diff --git a/applications/lofar2/libraries/sdp/hdllib.cfg b/applications/lofar2/libraries/sdp/hdllib.cfg index c4922d48959a7f833f7a037362781c0d9727b380..3ffb4a50f6bc0119df4d202cf2ebfe4c5fd688b4 100644 --- a/applications/lofar2/libraries/sdp/hdllib.cfg +++ b/applications/lofar2/libraries/sdp/hdllib.cfg @@ -1,6 +1,6 @@ hdl_lib_name = lofar2_sdp hdl_library_clause_name = lofar2_sdp_lib -hdl_lib_uses_synth = common dp wpfb rTwoSDF filter si st reorder technology mm dp diag aduh tech_jesd204b tr_10GbE +hdl_lib_uses_synth = common dp wpfb rTwoSDF filter si st reorder technology tech_pll mm dp diag aduh tech_jesd204b nw_10GbE eth hdl_lib_uses_sim = hdl_lib_technology = @@ -19,6 +19,7 @@ synth_files = src/vhdl/node_sdp_filterbank.vhd src/vhdl/node_sdp_beamformer.vhd src/vhdl/node_sdp_correlator.vhd + src/vhdl/sdp_station.vhd test_bench_files = tb/vhdl/tb_sdp_info.vhd diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 2e91a934c938690dde3903307c6b116a6be76d3d..2230fc9de38c167edaad6b14bfd35c27a28f4560 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -114,7 +114,7 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_marker_xst : NATURAL := 88; -- = 0x58 = 'X' --CONSTANT c_sdp_offload_time : NATURAL := 13000; -- from wave window 62855nS / 5nS = 12571 cycles. - CONSTANT c_sdp_offload_time : NATURAL := 600000; . + CONSTANT c_sdp_offload_time : NATURAL := 600000; -- In SDP c_nof_channels = 2**nof_chan = 1 and wb_factor = 1, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd new file mode 100644 index 0000000000000000000000000000000000000000..7c32b4775b7cd35ca1e2db4ed53382f9fe5472e6 --- /dev/null +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -0,0 +1,796 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2021 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- Author : R vd Walle +-- Purpose: +-- Core design for Lofar2 SDP station +-- Description: +-- Combines sdp nodes. +------------------------------------------------------------------------------- + +LIBRARY IEEE, common_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, wpfb_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 technology_lib.technology_pkg.ALL; +USE diag_lib.diag_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; +USE wpfb_lib.wpfb_pkg.ALL; +USE work.sdp_pkg.ALL; +USE eth_lib.eth_pkg.ALL; + + +ENTITY sdp_station IS + GENERIC ( + g_technology : NATURAL := c_tech_arria10_e1sg; + g_sim : BOOLEAN := FALSE; --Overridden by TB + g_wpfb : t_wpfb := c_sdp_wpfb_subbands; + g_bsn_nof_clk_per_sync : NATURAL := c_sdp_f_adc_MHz*10**6; -- Default 200M, overide for short simulation + g_scope_selected_subband : NATURAL := 0; + g_use_fsub : BOOLEAN := TRUE; + g_use_xsub : BOOLEAN := TRUE; + g_use_bf : BOOLEAN := TRUE; + g_P_sq : NATURAL := 1 + ); + PORT ( + -- System + mm_clk : IN STD_LOGIC; + mm_rst : IN STD_LOGIC := '0'; + + dp_pps : IN STD_LOGIC; + dp_rst : IN STD_LOGIC; + dp_clk : IN STD_LOGIC; + + -- ID + gn_id : IN STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0); + this_bck_id : IN STD_LOGIC_VECTOR(6-1 DOWNTO 0); + this_chip_id : IN STD_LOGIC_VECTOR(2-1 DOWNTO 0); + + -- Transceiver clocks + SA_CLK : IN STD_LOGIC := '0'; -- Clock 10GbE front (qsfp) and ring lines + + -- back transceivers (Note: numbered from 0) + JESD204B_SERIAL_DATA : IN STD_LOGIC_VECTOR(c_sdp_S_pn-1 downto 0); + -- Connect to the BCK_RX pins in the top wrapper + JESD204B_REFCLK : IN STD_LOGIC; -- Connect to BCK_REF_CLK pin in the top level wrapper + + -- jesd204b syncronization signals + JESD204B_SYSREF : IN STD_LOGIC; + JESD204B_SYNC_N : OUT STD_LOGIC_VECTOR(c_sdp_S_pn-1 DOWNTO 0); + + + ---------------------------------------------- + -- UDP Offload + ---------------------------------------------- + udp_tx_sosi_arr : OUT t_dp_sosi_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + udp_tx_siso_arr : IN t_dp_siso_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + + ---------------------------------------------- + -- 10 GbE + ---------------------------------------------- + reg_nw_10GbE_mac_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_nw_10GbE_mac_miso : OUT t_mem_miso := c_mem_miso_rst; + + reg_nw_10GbE_eth10g_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_nw_10GbE_eth10g_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- AIT + ---------------------------------------------- + -- JESD + jesd204b_mosi : IN t_mem_mosi := c_mem_mosi_rst; + jesd204b_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- JESD control + jesd_ctrl_mosi : IN t_mem_mosi := c_mem_mosi_rst; + jesd_ctrl_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Shiftram (applies per-antenna delay) + reg_dp_shiftram_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_dp_shiftram_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- bsn source + reg_bsn_source_v2_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bsn_source_v2_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- bsn scheduler + reg_bsn_scheduler_wg_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bsn_scheduler_wg_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- WG + reg_wg_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_wg_miso : OUT t_mem_miso := c_mem_miso_rst; + ram_wg_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_wg_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- BSN MONITOR + reg_bsn_monitor_input_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bsn_monitor_input_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Data buffer bsn + ram_diag_data_buf_bsn_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_diag_data_buf_bsn_miso : OUT t_mem_miso := c_mem_miso_rst; + reg_diag_data_buf_bsn_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_diag_data_buf_bsn_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Aduh statistics monitor + reg_aduh_monitor_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_aduh_monitor_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- FSUB + ---------------------------------------------- + -- Subband statistics + ram_st_sst_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_st_sst_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Spectral Inversion + reg_si_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_si_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Filter coefficients + ram_fil_coefs_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_fil_coefs_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Equalizer gains + ram_equalizer_gains_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_equalizer_gains_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- DP Selector + reg_dp_selector_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_dp_selector_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- SDP Info + ---------------------------------------------- + reg_sdp_info_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_sdp_info_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- XSUB + ---------------------------------------------- + -- dp_sync_insert_v2 + reg_dp_sync_insert_v2_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_dp_sync_insert_v2_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- crosslets_info + reg_crosslets_info_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_crosslets_info_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- bsn_scheduler_xsub + reg_bsn_scheduler_xsub_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bsn_scheduler_xsub_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- st_xsq + ram_st_xsq_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_st_xsq_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- BF + ---------------------------------------------- + -- Beamlet Subband Select + ram_ss_ss_wide_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_ss_ss_wide_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Local BF bf weights + ram_bf_weights_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_bf_weights_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- mms_dp_scale Scale Beamlets + reg_bf_scale_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bf_scale_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Beamlet Data Output header fields + reg_hdr_dat_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_hdr_dat_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Beamlet Data Output xonoff + reg_dp_xonoff_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_dp_xonoff_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Beamlet Statistics (BST) + ram_st_bst_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_st_bst_miso : OUT t_mem_miso := c_mem_miso_rst; + + ---------------------------------------------- + -- SST + ---------------------------------------------- + -- Statistics Enable + reg_stat_enable_sst_mosi : IN t_mem_mosi; + reg_stat_enable_sst_miso : OUT t_mem_miso; + + -- Statistics header info + reg_stat_hdr_dat_sst_mosi : IN t_mem_mosi; + reg_stat_hdr_dat_sst_miso : OUT t_mem_miso; + + ---------------------------------------------- + -- XST + ---------------------------------------------- + -- Statistics Enable + reg_stat_enable_xst_mosi : IN t_mem_mosi; + reg_stat_enable_xst_miso : OUT t_mem_miso; + + -- Statistics header info + reg_stat_hdr_dat_xst_mosi : IN t_mem_mosi; + reg_stat_hdr_dat_xst_miso : OUT t_mem_miso; + + ---------------------------------------------- + -- BST + ---------------------------------------------- + -- Statistics Enable + reg_stat_enable_bst_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_stat_enable_bst_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- Statistics header info + reg_stat_hdr_dat_bst_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_stat_hdr_dat_bst_miso : OUT t_mem_miso := c_mem_miso_rst; + + -- QSFP serial + unb2_board_front_io_serial_tx_arr : OUT STD_LOGIC_VECTOR(6 * c_quad-1 DOWNTO 0) := (OTHERS => '0'); + unb2_board_front_io_serial_rx_arr : IN STD_LOGIC_VECTOR(6 * c_quad-1 DOWNTO 0) := (OTHERS => '0'); + + -- QSFP LEDS + unb2_board_qsfp_leds_tx_sosi_arr : OUT t_dp_sosi_arr(6 * c_quad-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + unb2_board_qsfp_leds_tx_siso_arr : OUT t_dp_siso_arr(6 * c_quad-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); + unb2_board_qsfp_leds_rx_sosi_arr : OUT t_dp_sosi_arr(6 * c_quad-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst) + ); +END sdp_station; + + +ARCHITECTURE str OF sdp_station IS + + -- 10 GbE Interface + CONSTANT c_nof_10GbE_offload_streams : NATURAL := 1; + CONSTANT c_nof_blocks_per_packet : NATURAL := 4; + CONSTANT c_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; + CONSTANT c_10GbE_block_size : NATURAL := c_nof_blocks_per_packet * c_nof_beamlets_per_block / 4; -- 4 beamlets fit in 1 64bit longword + CONSTANT c_fifo_tx_fill : NATURAL := c_10GbE_block_size; + CONSTANT c_fifo_tx_size : NATURAL := c_fifo_tx_fill + 11; -- Make fifo size large enough for adding header. + + -- 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_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_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)); + + -- 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 + + SIGNAL gn_index : NATURAL := 0; + + ---------------------------------------------- + -- BF + ---------------------------------------------- + -- Beamlet Subband Select + SIGNAL ram_ss_ss_wide_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL ram_ss_ss_wide_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- Local BF bf weights + SIGNAL ram_bf_weights_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL ram_bf_weights_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- mms_dp_scale Scale Beamlets + SIGNAL reg_bf_scale_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL reg_bf_scale_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- Beamlet Data Output header fields + SIGNAL reg_hdr_dat_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL reg_hdr_dat_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- Beamlet Data Output xonoff + SIGNAL reg_dp_xonoff_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL reg_dp_xonoff_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- Beamlet Statistics (BST) + SIGNAL ram_st_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL ram_st_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + ---------------------------------------------- + -- BST + ---------------------------------------------- + -- Statistics Enable + SIGNAL reg_stat_enable_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL reg_stat_enable_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + + -- Statistics header info + SIGNAL reg_stat_hdr_dat_bst_mosi_arr : t_mem_mosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL reg_stat_hdr_dat_bst_miso_arr : t_mem_miso_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + ---------------------------------------------- + + SIGNAL ait_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); + SIGNAL pfb_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); + SIGNAL fsub_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); + + SIGNAL dp_bsn_source_restart : STD_LOGIC; + + SIGNAL bf_udp_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0); + SIGNAL bf_udp_siso_arr : t_dp_siso_arr(c_sdp_N_beamsets-1 DOWNTO 0); + SIGNAL bf_10GbE_hdr_fields_out_arr : t_slv_1024_arr(c_sdp_N_beamsets-1 DOWNTO 0); + + -- 10GbE + SIGNAL tr_ref_clk_312 : STD_LOGIC; + SIGNAL tr_ref_clk_156 : STD_LOGIC; + SIGNAL tr_ref_rst_156 : STD_LOGIC; + + + SIGNAL nw_10gbe_snk_in_arr : t_dp_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL nw_10gbe_snk_out_arr : t_dp_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + SIGNAL nw_10gbe_src_out_arr : t_dp_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL nw_10gbe_src_in_arr : t_dp_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + + SIGNAL nw_10GbE_hdr_fields_in_arr : t_slv_1024_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0); + + + SIGNAL cep_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); + SIGNAL cep_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); + SIGNAL cep_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); + SIGNAL stat_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); + SIGNAL stat_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); + SIGNAL sst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); + SIGNAL bst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); + SIGNAL xst_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); + + SIGNAL sdp_info : t_sdp_info := c_sdp_info_rst; + +BEGIN + + ----------------------------------------------------------------------------- + -- SDP Info register + ----------------------------------------------------------------------------- + gn_index <= TO_UINT(gn_id); + -- derive MAC, IP and UDP Port + 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 + cep_udp_src_port <= c_sdp_cep_udp_src_port_15_8 & RESIZE_UVEC(gn_id, c_byte_w); + + 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 + sst_udp_src_port <= c_sdp_sst_udp_src_port_15_8 & RESIZE_UVEC(gn_id, c_byte_w); + bst_udp_src_port <= c_sdp_bst_udp_src_port_15_8 & RESIZE_UVEC(gn_id, c_byte_w); + xst_udp_src_port <= c_sdp_xst_udp_src_port_15_8 & RESIZE_UVEC(gn_id, c_byte_w); + + u_sdp_info : ENTITY work.sdp_info + PORT MAP( + -- Clocks and reset + mm_rst => mm_rst, -- reset synchronous with mm_clk + mm_clk => mm_clk, -- memory-mapped bus clock + + dp_clk => dp_clk, + dp_rst => dp_rst, + + reg_mosi => reg_sdp_info_mosi, + reg_miso => reg_sdp_info_miso, + + -- inputs from other blocks + gn_index => gn_index, + f_adc => c_f_adc, + fsub_type => c_fsub_type, + + -- sdp info + sdp_info => sdp_info + ); + + ----------------------------------------------------------------------------- + -- node_adc_input_and_timing (AIT) + -- .Contains JESD receiver, bsn source and associated data buffers, diagnostics and statistics + ----------------------------------------------------------------------------- + u_ait: ENTITY work.node_sdp_adc_input_and_timing + GENERIC MAP( + g_technology => g_technology, + g_sim => g_sim, + g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync + ) + PORT MAP( + -- clocks and resets + mm_clk => mm_clk, + mm_rst => mm_rst, + dp_clk => dp_clk, + dp_rst => dp_rst, + + -- mm control buses + jesd_ctrl_mosi => jesd_ctrl_mosi, + jesd_ctrl_miso => jesd_ctrl_miso, + jesd204b_mosi => jesd204b_mosi, + jesd204b_miso => jesd204b_miso, + reg_dp_shiftram_mosi => reg_dp_shiftram_mosi, + reg_dp_shiftram_miso => reg_dp_shiftram_miso, + reg_bsn_source_v2_mosi => reg_bsn_source_v2_mosi, + reg_bsn_source_v2_miso => reg_bsn_source_v2_miso, + reg_bsn_scheduler_wg_mosi => reg_bsn_scheduler_wg_mosi, + reg_bsn_scheduler_wg_miso => reg_bsn_scheduler_wg_miso, + reg_wg_mosi => reg_wg_mosi, + reg_wg_miso => reg_wg_miso, + ram_wg_mosi => ram_wg_mosi, + ram_wg_miso => ram_wg_miso, + reg_bsn_monitor_input_mosi => reg_bsn_monitor_input_mosi, + reg_bsn_monitor_input_miso => reg_bsn_monitor_input_miso, + ram_diag_data_buf_bsn_mosi => ram_diag_data_buf_bsn_mosi, + ram_diag_data_buf_bsn_miso => ram_diag_data_buf_bsn_miso, + reg_diag_data_buf_bsn_mosi => reg_diag_data_buf_bsn_mosi, + reg_diag_data_buf_bsn_miso => reg_diag_data_buf_bsn_miso, + reg_aduh_monitor_mosi => reg_aduh_monitor_mosi, + reg_aduh_monitor_miso => reg_aduh_monitor_miso, + + -- Jesd external IOs + jesd204b_serial_data => JESD204B_SERIAL_DATA, + jesd204b_refclk => JESD204B_REFCLK, + jesd204b_sysref => JESD204B_SYSREF, + jesd204b_sync_n => JESD204B_SYNC_N, + + -- Streaming data output + out_sosi_arr => ait_sosi_arr, + dp_bsn_source_restart => dp_bsn_source_restart + ); + + ----------------------------------------------------------------------------- + -- node_sdp_filterbank (FSUB) + ----------------------------------------------------------------------------- + gen_use_fsub : IF g_use_fsub GENERATE + u_fsub : ENTITY work.node_sdp_filterbank + GENERIC MAP( + g_sim => g_sim, + g_wpfb => g_wpfb, + g_scope_selected_subband => g_scope_selected_subband + ) + PORT MAP( + dp_clk => dp_clk, + dp_rst => dp_rst, + + in_sosi_arr => ait_sosi_arr, + pfb_sosi_arr => pfb_sosi_arr, + fsub_sosi_arr => fsub_sosi_arr, + dp_bsn_source_restart => dp_bsn_source_restart, + + sst_udp_sosi => udp_tx_sosi_arr(0), + sst_udp_siso => udp_tx_siso_arr(0), + + mm_rst => mm_rst, + mm_clk => mm_clk, + + reg_si_mosi => reg_si_mosi, + reg_si_miso => reg_si_miso, + ram_st_sst_mosi => ram_st_sst_mosi, + ram_st_sst_miso => ram_st_sst_miso, + ram_fil_coefs_mosi => ram_fil_coefs_mosi, + ram_fil_coefs_miso => ram_fil_coefs_miso, + ram_gains_mosi => ram_equalizer_gains_mosi, + ram_gains_miso => ram_equalizer_gains_miso, + reg_selector_mosi => reg_dp_selector_mosi, + reg_selector_miso => reg_dp_selector_miso, + + reg_enable_mosi => reg_stat_enable_sst_mosi, + reg_enable_miso => reg_stat_enable_sst_miso, + reg_hdr_dat_mosi => reg_stat_hdr_dat_sst_mosi, + reg_hdr_dat_miso => reg_stat_hdr_dat_sst_miso, + + sdp_info => sdp_info, + gn_id => gn_id, + eth_src_mac => stat_eth_src_mac, + ip_src_addr => stat_ip_src_addr, + udp_src_port => sst_udp_src_port + ); + END GENERATE; + + + ----------------------------------------------------------------------------- + -- node_sdp_correlator (XSUB) + ----------------------------------------------------------------------------- + gen_use_xsub : IF g_use_xsub GENERATE + u_xsub : ENTITY work.node_sdp_correlator + GENERIC MAP( + g_sim => g_sim, + g_P_sq => g_P_sq + ) + PORT MAP( + dp_clk => dp_clk, + dp_rst => dp_rst, + + in_sosi_arr => fsub_sosi_arr, + + xst_udp_sosi => udp_tx_sosi_arr(1), + xst_udp_siso => udp_tx_siso_arr(1), + + mm_rst => mm_rst, + mm_clk => mm_clk, + + reg_dp_sync_insert_v2_mosi => reg_dp_sync_insert_v2_mosi, + reg_dp_sync_insert_v2_miso => reg_dp_sync_insert_v2_miso, + reg_crosslets_info_mosi => reg_crosslets_info_mosi, + reg_crosslets_info_miso => reg_crosslets_info_miso, + reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi, + reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso, + ram_st_xsq_mosi => ram_st_xsq_mosi, + ram_st_xsq_miso => ram_st_xsq_miso, + + reg_stat_enable_mosi => reg_stat_enable_xst_mosi, + reg_stat_enable_miso => reg_stat_enable_xst_miso, + reg_stat_hdr_dat_mosi => reg_stat_hdr_dat_xst_mosi, + reg_stat_hdr_dat_miso => reg_stat_hdr_dat_xst_miso, + + sdp_info => sdp_info, + gn_id => gn_id, + stat_eth_src_mac => stat_eth_src_mac, + stat_ip_src_addr => stat_ip_src_addr, + stat_udp_src_port => xst_udp_src_port + ); + END GENERATE; + + ----------------------------------------------------------------------------- + -- nof beamsets node_sdp_beamformers (BF) + ----------------------------------------------------------------------------- + gen_use_bf : IF g_use_bf GENERATE + -- Beamformers + gen_bf : FOR beamset_id IN 0 TO c_sdp_N_beamsets-1 GENERATE + u_bf : ENTITY work.node_sdp_beamformer + GENERIC MAP( + g_sim => g_sim, + g_beamset_id => beamset_id, + g_scope_selected_beamlet => g_scope_selected_subband + ) + PORT MAP( + dp_clk => dp_clk, + dp_rst => dp_rst, + + in_sosi_arr => fsub_sosi_arr, + bf_udp_sosi => bf_udp_sosi_arr(beamset_id), + bf_udp_siso => bf_udp_siso_arr(beamset_id), + bst_udp_sosi => udp_tx_sosi_arr(2+ beamset_id), + bst_udp_siso => udp_tx_siso_arr(2+ beamset_id), + + mm_rst => mm_rst, + mm_clk => mm_clk, + + ram_ss_ss_wide_mosi => ram_ss_ss_wide_mosi_arr(beamset_id), + ram_ss_ss_wide_miso => ram_ss_ss_wide_miso_arr(beamset_id), + ram_bf_weights_mosi => ram_bf_weights_mosi_arr(beamset_id), + ram_bf_weights_miso => ram_bf_weights_miso_arr(beamset_id), + reg_bf_scale_mosi => reg_bf_scale_mosi_arr(beamset_id), + reg_bf_scale_miso => reg_bf_scale_miso_arr(beamset_id), + reg_hdr_dat_mosi => reg_hdr_dat_mosi_arr(beamset_id), + reg_hdr_dat_miso => reg_hdr_dat_miso_arr(beamset_id), + reg_dp_xonoff_mosi => reg_dp_xonoff_mosi_arr(beamset_id), + reg_dp_xonoff_miso => reg_dp_xonoff_miso_arr(beamset_id), + ram_st_bst_mosi => ram_st_bst_mosi_arr(beamset_id), + ram_st_bst_miso => ram_st_bst_miso_arr(beamset_id), + reg_stat_enable_mosi => reg_stat_enable_bst_mosi_arr(beamset_id), + reg_stat_enable_miso => reg_stat_enable_bst_miso_arr(beamset_id), + reg_stat_hdr_dat_mosi => reg_stat_hdr_dat_bst_mosi_arr(beamset_id), + reg_stat_hdr_dat_miso => reg_stat_hdr_dat_bst_miso_arr(beamset_id), + + sdp_info => sdp_info, + gn_id => gn_id, + eth_src_mac => cep_eth_src_mac, + ip_src_addr => cep_ip_src_addr, + udp_src_port => cep_udp_src_port, + stat_eth_src_mac => stat_eth_src_mac, + stat_ip_src_addr => stat_ip_src_addr, + stat_udp_src_port => bst_udp_src_port, + + hdr_fields_out => bf_10GbE_hdr_fields_out_arr(beamset_id) + ); + + END GENERATE; + + -- MM multiplexing + u_mem_mux_ram_ss_ss_wide : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_ram_ss_ss_wide + ) + PORT MAP ( + mosi => ram_ss_ss_wide_mosi, + miso => ram_ss_ss_wide_miso, + mosi_arr => ram_ss_ss_wide_mosi_arr, + miso_arr => ram_ss_ss_wide_miso_arr + ); + + u_mem_mux_ram_bf_weights : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_ram_bf_weights + ) + PORT MAP ( + mosi => ram_bf_weights_mosi, + miso => ram_bf_weights_miso, + mosi_arr => ram_bf_weights_mosi_arr, + miso_arr => ram_bf_weights_miso_arr + ); + + u_mem_mux_reg_bf_scale : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_reg_bf_scale + ) + PORT MAP ( + mosi => reg_bf_scale_mosi, + miso => reg_bf_scale_miso, + mosi_arr => reg_bf_scale_mosi_arr, + miso_arr => reg_bf_scale_miso_arr + ); + + u_mem_mux_reg_hdr_dat : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_reg_hdr_dat + ) + PORT MAP ( + mosi => reg_hdr_dat_mosi, + miso => reg_hdr_dat_miso, + mosi_arr => reg_hdr_dat_mosi_arr, + miso_arr => reg_hdr_dat_miso_arr + ); + + u_mem_mux_reg_dp_xonoff : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_reg_dp_xonoff + ) + PORT MAP ( + mosi => reg_dp_xonoff_mosi, + miso => reg_dp_xonoff_miso, + mosi_arr => reg_dp_xonoff_mosi_arr, + miso_arr => reg_dp_xonoff_miso_arr + ); + + u_mem_mux_ram_st_bst : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_addr_w_ram_st_bst + ) + PORT MAP ( + mosi => ram_st_bst_mosi, + miso => ram_st_bst_miso, + mosi_arr => ram_st_bst_mosi_arr, + miso_arr => ram_st_bst_miso_arr + ); + + u_mem_mux_reg_stat_enable_bst : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_sdp_reg_stat_enable_addr_w + ) + PORT MAP ( + mosi => reg_stat_enable_bst_mosi, + miso => reg_stat_enable_bst_miso, + mosi_arr => reg_stat_enable_bst_mosi_arr, + miso_arr => reg_stat_enable_bst_miso_arr + ); + + u_mem_mux_reg_stat_hdr_dat_bst : ENTITY common_lib.common_mem_mux + GENERIC MAP ( + g_nof_mosi => c_sdp_N_beamsets, + g_mult_addr_w => c_sdp_reg_stat_hdr_dat_addr_w + ) + PORT MAP ( + mosi => reg_stat_hdr_dat_bst_mosi, + miso => reg_stat_hdr_dat_bst_miso, + mosi_arr => reg_stat_hdr_dat_bst_mosi_arr, + miso_arr => reg_stat_hdr_dat_bst_miso_arr + ); + + ----------------------------------------------------------------------------- + -- DP MUX + ----------------------------------------------------------------------------- + -- Assign hdr_fields to nw_10GbE for ARP/PING functionality. Only the fields: + -- eth_src_mac, ip_src_addr and ip_dst_addr are used. Which are identical for + -- both beamsets. + nw_10GbE_hdr_fields_in_arr(0) <= bf_10GbE_hdr_fields_out_arr(0); + + u_dp_mux : ENTITY dp_lib.dp_mux + GENERIC MAP ( + g_nof_input => c_sdp_N_beamsets, + g_sel_ctrl_invert => TRUE, + g_fifo_size => array_init(0,c_sdp_N_beamsets), --no FIFO used but must match g_nof_input + g_fifo_fill => array_init(0,c_sdp_N_beamsets) --no FIFO used but must match g_nof_input + ) + PORT MAP ( + clk => dp_clk, + rst => dp_rst, + + snk_in_arr => bf_udp_sosi_arr, + snk_out_arr => bf_udp_siso_arr, + + src_out => nw_10gbe_snk_in_arr(0), + src_in => nw_10gbe_snk_out_arr(0) + ); + + --------------- + -- nw_10GbE + --------------- + u_nw_10GbE: ENTITY nw_10GbE_lib.nw_10GbE + GENERIC MAP ( + g_technology => g_technology, + g_sim => g_sim, + g_sim_level => 1, + g_nof_macs => c_nof_10GbE_offload_streams, + g_direction => "TX_RX", + g_tx_fifo_fill => c_fifo_tx_fill, + g_tx_fifo_size => c_fifo_tx_size, + g_ip_hdr_field_arr => c_sdp_cep_hdr_field_arr + + ) + PORT MAP ( + -- Transceiver PLL reference clock + tr_ref_clk_644 => SA_CLK, + tr_ref_clk_312 => tr_ref_clk_312, + tr_ref_clk_156 => tr_ref_clk_156, + tr_ref_rst_156 => tr_ref_rst_156, + + -- MM interface + mm_rst => mm_rst, + mm_clk => mm_clk, + + reg_mac_mosi => reg_nw_10GbE_mac_mosi, + reg_mac_miso => reg_nw_10GbE_mac_miso, + + reg_eth10g_mosi => reg_nw_10GbE_eth10g_mosi, + reg_eth10g_miso => reg_nw_10GbE_eth10g_miso, + + -- DP interface + dp_rst => dp_rst, + dp_clk => dp_clk, + dp_pps => dp_pps, + + src_out_arr => nw_10gbe_src_out_arr, + src_in_arr => nw_10gbe_src_in_arr, + + snk_out_arr => nw_10gbe_snk_out_arr, + snk_in_arr => nw_10gbe_snk_in_arr, + + -- Serial IO + serial_tx_arr => unb2_board_front_io_serial_tx_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0), + serial_rx_arr => unb2_board_front_io_serial_rx_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0), + + hdr_fields_in_arr => nw_10GbE_hdr_fields_in_arr + ); + END GENERATE; + + --------- + -- PLL + --------- + u_tech_pll_xgmii_mac_clocks : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + refclk_644 => SA_CLK, + rst_in => mm_rst, + clk_156 => tr_ref_clk_156, + clk_312 => tr_ref_clk_312, + rst_156 => tr_ref_rst_156, + rst_312 => OPEN + ); + + ------------ + -- LEDs + ------------ + unb2_board_qsfp_leds_tx_siso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_snk_out_arr; + unb2_board_qsfp_leds_tx_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_snk_in_arr; + unb2_board_qsfp_leds_rx_sosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0) <= nw_10gbe_src_out_arr; + + +END str;