From 666817965ba2fdcb31f7925c8a1955b6ef8ea28a Mon Sep 17 00:00:00 2001 From: Reinier van der Walle <walle@astron.nl> Date: Thu, 12 May 2022 14:33:56 +0200 Subject: [PATCH] removed unused disturb designs --- .../disturb2_unb2b_station_adc.vhd | 163 --- .../disturb2_unb2b_station_adc_pins.tcl | 24 - .../disturb2_unb2b_station_adc/hdllib.cfg | 127 -- .../tb_disturb2_unb2b_station_adc.vhd | 303 ----- .../disturb2_unb2b_station_bf.vhd | 177 --- .../disturb2_unb2b_station_bf_pins.tcl | 25 - .../disturb2_unb2b_station_bf/hdllib.cfg | 135 -- .../tb_disturb2_unb2b_station_bf.vhd | 1136 ----------------- ..._disturb2_unb2b_station_bf_bst_offload.vhd | 250 ---- .../disturb2_unb2b_station_fsub.vhd | 162 --- .../disturb2_unb2b_station_fsub_pins.tcl | 24 - .../disturb2_unb2b_station_fsub/hdllib.cfg | 134 -- .../tb_disturb2_unb2b_station_fsub.vhd | 535 -------- ...isturb2_unb2b_station_fsub_sst_offload.vhd | 249 ---- .../disturb2_unb2b_station_xsub_one.vhd | 162 --- .../disturb2_unb2b_station_xsub_one_pins.tcl | 24 - .../hdllib.cfg | 134 -- .../tb_disturb2_unb2b_station_xsub_one.vhd | 374 ------ ...rb2_unb2b_station_xsub_one_xst_offload.vhd | 264 ---- .../disturb2_unb2b_station_xsub_ring.vhd | 195 --- .../disturb2_unb2b_station_xsub_ring_pins.tcl | 25 - .../hdllib.cfg | 132 -- .../tb_disturb2_unb2b_station_xsub_ring.vhd | 491 ------- 23 files changed, 5245 deletions(-) delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd deleted file mode 100644 index 62b9e62420..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd +++ /dev/null @@ -1,163 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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 : J Hargreaves, R vd Walle --- Purpose: --- Wrapper for Lofar2 SDP Station adc design --- Description: --- Unb2b version for lab testing --- Contains complete AIT input stage with 12 ADC streams - - -LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_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 disturb2_unb2b_station_adc IS - GENERIC ( - g_design_name : STRING := "disturb2_unb2b_station_adc"; - g_design_note : STRING := "Lofar2 SDP station adc 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); - - -- 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); -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12 - 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) -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4 - ); -END disturb2_unb2b_station_adc; - -ARCHITECTURE str OF disturb2_unb2b_station_adc 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 disturb2_unb2b_station_lib.disturb2_unb2b_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, - - -- 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/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl deleted file mode 100644 index af0a453b32..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl +++ /dev/null @@ -1,24 +0,0 @@ -############################################################################### -# -# Copyright (C) 2022 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl - - diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg deleted file mode 100644 index 126f05643a..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg +++ /dev/null @@ -1,127 +0,0 @@ -hdl_lib_name = disturb2_unb2b_station_adc -hdl_library_clause_name = disturb2_unb2b_station_adc_lib -hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station -hdl_lib_uses_sim = -hdl_lib_technology = ip_arria10_e1sg - - synth_files = - disturb2_unb2b_station_adc.vhd - -test_bench_files = - tb_disturb2_unb2b_station_adc.vhd - -regression_test_vhdl = - tb_disturb2_unb2b_station_adc.vhd - - -[modelsim_project_file] -modelsim_copy_files = - ../../src/data data - -[quartus_project_file] -synth_top_level_entity = - -quartus_copy_files = - ../../quartus . - ../../src/data data - -quartus_qsf_files = - $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf - -quartus_sdc_files = - ../../quartus/disturb2_unb2b_station.sdc - -quartus_tcl_files = - disturb2_unb2b_station_adc_pins.tcl - -quartus_vhdl_files = - -quartus_qip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_adc/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip - -quartus_ip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip - -nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd deleted file mode 100644 index a55244db5f..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd +++ /dev/null @@ -1,303 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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: Self-checking testbench for simulating disturb2_unb2b_station_adc using WG data. --- --- Description: --- MM control actions: --- --- 1) Enable calc mode for WG via reg_diag_wg with: --- freq = 19.921875MHz --- ampl = 0.5 * 2**13 --- --- 2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg --- to trigger start of WG at BSN. --- --- 3) Read ADUH monitor power sum for via reg_aduh_mon and verify with --- c_exp_wg_power_sp_0. --- View sp_power_sum in Wave window --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_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 disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_adc IS -END tb_disturb2_unb2b_station_adc; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_adc IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 16; - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; - CONSTANT c_pps_period : NATURAL := c_nof_clk_per_sync; - - CONSTANT c_percentage : REAL := 0.05; -- percentage that actual value may differ from expected value - CONSTANT c_lo_factor : REAL := 1.0 - c_percentage; -- lower boundary - CONSTANT c_hi_factor : REAL := 1.0 + c_percentage; -- higher boundary - - -- WG - CONSTANT c_full_scale_ampl : REAL := REAL(2**(14-1)-1); -- = full scale of 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_ampl_sp_0 : NATURAL := 2**(c_disturb_W_adc-1)/2; -- in number of lsb - CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - CONSTANT c_wg_freq_offset : REAL := 0.0/11.0; -- in freq_unit - CONSTANT c_subband_sp_0 : REAL := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz - CONSTANT c_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl; -- amplitude in number of LSbit resolution steps - CONSTANT c_exp_wg_power_sp_0 : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync); - - -- ADUH - CONSTANT c_mon_buffer_nof_samples : NATURAL := 512; --samples per stream - - -- MM - CONSTANT c_mm_file_reg_ppsh : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "PIO_PPS"; - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER"; - CONSTANT c_mm_file_reg_diag_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG"; - CONSTANT c_mm_file_reg_aduh_mon : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_ADUH_MONITOR"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0); - - -- WG - SIGNAL dbg_c_exp_wg_power_sp_0 : REAL := c_exp_wg_power_sp_0; - SIGNAL sp_samples : t_integer_arr(0 TO c_mon_buffer_nof_samples-1) := (OTHERS=>0); - SIGNAL sp_sample : INTEGER := 0; - SIGNAL sp_power_sum : STD_LOGIC_VECTOR(63 DOWNTO 0); - SIGNAL current_bsn_wg : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(10, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_adc : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_adc", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync, - g_scope_selected_subband => NATURAL(c_subband_sp_0) - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - VARIABLE v_bsn : NATURAL; - VARIABLE v_sp_power_sum_0 : REAL; - VARIABLE v_sp_subband_power : REAL; - VARIABLE v_W, v_T, v_U, v_S, v_B : NATURAL; -- array indicies - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - proc_common_wait_until_hi_lo(ext_clk, ext_pps); - - ---------------------------------------------------------------------------- - -- Enable BS - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000003#, tb_clk); -- Enable BS at PPS - - ---------------------------------------------------------------------------- - -- Enable WG - ---------------------------------------------------------------------------- - -- 0 : mode[7:0] --> off=0, calc=1, repeat=2, single=3) - -- nof_samples[31:16] --> <= c_ram_wg_size=1024 - -- 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, 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_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_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); - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - - -- Write scheduler BSN to trigger start of WG at next block - v_bsn := TO_UINT(current_bsn_wg) + 2; - ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR; - v_bsn := c_bsn_start_wg; - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, v_bsn, tb_clk); -- first write low then high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1, 0, tb_clk); -- assume v_bsn < 2**31-1 - - -- Wait for enough WG data and start of sync interval - mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0, -- read BSN low - "UNSIGNED", rd_data, ">=", c_nof_block_per_sync*3, -- this is the wait until condition - c_disturb_T_sub, tb_clk); - - --------------------------------------------------------------------------- - -- Read ADUH monitor power sum - --------------------------------------------------------------------------- - mmf_mm_bus_rd(c_mm_file_reg_aduh_mon, 2, rd_data, tb_clk); -- read low part - sp_power_sum(31 DOWNTO 0) <= rd_data; - mmf_mm_bus_rd(c_mm_file_reg_aduh_mon, 3, rd_data, tb_clk); -- read high part - sp_power_sum(63 DOWNTO 32) <= rd_data; - proc_common_wait_some_cycles(tb_clk, 1); - - --------------------------------------------------------------------------- - -- Verify sp_power_sum - --------------------------------------------------------------------------- - -- Convert STD_LOGIC_VECTOR sp_power_sum to REAL - v_sp_power_sum_0 := REAL(REAL(TO_UINT(sp_power_sum(61 DOWNTO 30)))*REAL(2**30) + REAL(TO_UINT(sp_power_sum(29 DOWNTO 0)))); - - ASSERT v_sp_power_sum_0 > c_lo_factor * c_exp_wg_power_sp_0 REPORT "Wrong SP power for SP 0" SEVERITY ERROR; - ASSERT v_sp_power_sum_0 < c_hi_factor * c_exp_wg_power_sp_0 REPORT "Wrong SP power for SP 0" SEVERITY ERROR; - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd deleted file mode 100644 index 8f1f543551..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd +++ /dev/null @@ -1,177 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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 beamformer design --- Description: --- Unb2b version for lab testing --- Contains complete AIT input stage with 12 ADC streams, FSUB and BF - - -LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_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 disturb2_unb2b_station_bf IS - GENERIC ( - g_design_name : STRING := "disturb2_unb2b_station_bf"; - g_design_note : STRING := "Lofar2 SDP station beamformer 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); -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12 - 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) -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4 - ); -END disturb2_unb2b_station_bf; - -ARCHITECTURE str OF disturb2_unb2b_station_bf 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 disturb2_unb2b_station_lib.disturb2_unb2b_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/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl deleted file mode 100644 index 68401a0dbe..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################### -# -# Copyright (C) 2022 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_beamlets_pins.tcl - - diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg deleted file mode 100644 index c57ed9da09..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg +++ /dev/null @@ -1,135 +0,0 @@ -hdl_lib_name = disturb2_unb2b_station_bf -hdl_library_clause_name = disturb2_unb2b_station_bf_lib -hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station -hdl_lib_uses_sim = eth -hdl_lib_technology = ip_arria10_e1sg - - synth_files = - disturb2_unb2b_station_bf.vhd - -test_bench_files = - tb_disturb2_unb2b_station_bf.vhd - tb_disturb2_unb2b_station_bf_bst_offload.vhd - -regression_test_vhdl = - tb_disturb2_unb2b_station_bf.vhd - tb_disturb2_unb2b_station_bf_bst_offload.vhd - -[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 disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz. -quartus_sdc_files = - ../../quartus/disturb2_unb2b_station.sdc - #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc - -quartus_tcl_files = - disturb2_unb2b_station_bf_pins.tcl - -quartus_vhdl_files = - -quartus_qip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_bf/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip - -quartus_ip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip - -nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd deleted file mode 100644 index ec54e77326..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd +++ /dev/null @@ -1,1136 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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 (original), E. Kooistra (updates) --- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_bf using WG data. --- --- Description: --- MM control actions: --- --- 1) Enable calc mode for WG on signal input g_sp via reg_diag_wg with: --- g_subband = 102 --> WG freq = 19.921875MHz --- g_ampl = 1.0 --> WG ampl = 2**13 --- --- 2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg --- to trigger start of WG at BSN. --- --- 3) Read and verify subband statistics (SST) --- --- 4) Select subband g_subband for beamlet g_beamlet --- --- 5) Apply BF weight (g_bf_gain, g_bf_phase) to g_beamlet X beam and Y beam --- --- 6) Read and verify beamlet statistics (BST) --- View sp_subband_sst in Wave window --- View pol_beamlet_bst in Wave window --- --- 7) Verify 10GbE output header and output payload for g_beamlet. --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- # Manually add missing signal --- > add wave -position insertpoint \ --- sim:/tb_disturb2_unb2b_station_bf/sp_subband_ssts_arr2 \ --- sim:/tb_disturb2_unb2b_station_bf/pol_beamlet_bsts_arr2 --- > run -a --- Takes about 40 m when g_read_all_* = FALSE --- Takes about 1h 5 m when g_read_all_* = TRUE --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, tech_pll_lib, tr_10GbE_lib, disturb2_unb2b_station_lib; -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.common_mem_pkg.ALL; -USE common_lib.common_field_pkg.ALL; -USE common_lib.common_network_layers_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 unb2b_board_lib.unb2b_board_pkg.ALL; -USE disturb_lib.disturb_pkg.ALL; -USE disturb_lib.tb_disturb_pkg.ALL; -USE tech_pll_lib.tech_pll_component_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_bf IS - GENERIC ( - g_sp : NATURAL := 0; -- WG signal path index in range(S_pn = 12) - g_wg_ampl : REAL := 1.0; -- WG normalized amplitude - g_subband : NATURAL := 102; -- select g_subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz - g_beamlet : NATURAL := 10; -- map g_subband to g_beamlet index in beamset in range(c_disturb_S_sub_bf = 488) - g_beamlet_scale : REAL := 1.0 / 2.0**9; -- g_beamlet output scale factor - g_bf_gain : REAL := 1.0; -- g_beamlet BF weight normalized gain - g_bf_phase : REAL := 30.0; -- g_beamlet BF weight phase rotation in degrees - g_read_all_SST : BOOLEAN := FALSE; -- when FALSE only read SST for g_subband, to save sim time - g_read_all_BST : BOOLEAN := FALSE -- when FALSE only read BST for g_beamlet, to save sim time - ); -END tb_disturb2_unb2b_station_bf; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_bf IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_gn_index : NATURAL := c_unb_nr * 4 + c_node_nr; -- this node GN - CONSTANT c_init_bsn : NATURAL := 17; -- some recognizable value >= 0 - - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_gn_index, 8); - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_mac_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr, 8); - 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_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_mm_clk_period : TIME := 10 ns; -- 100 MHz internal mm_clk - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - CONSTANT c_sa_clk_period : TIME := tech_pll_clk_644_period; -- 644MHz - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 16; - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync * c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - CONSTANT c_stat_data_sz : NATURAL := c_wpfb_sim.stat_data_sz; -- = 2 - - CONSTANT c_stat_percentage : REAL := 0.05; -- +-percentage margin that actual value may differ from expected value - CONSTANT c_stat_lo_factor : REAL := 1.0 - c_stat_percentage; -- lower boundary - CONSTANT c_stat_hi_factor : REAL := 1.0 + c_stat_percentage; -- higher boundary - - CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin - - -- header fields - CONSTANT c_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_disturb_cep_eth_dst_mac; -- 00074306C700 = DOP36-eth0 - CONSTANT c_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_disturb_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_disturb_cep_udp_dst_port; -- 5000 - - CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_disturb_cep_eth_src_mac_47_16 & c_mac_15_0; -- x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node - CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_disturb_cep_ip_src_addr_31_16 & c_ip_15_0; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_disturb_cep_udp_src_port_15_8 & c_id; -- D0 & c_id - - CONSTANT c_exp_ip_header_checksum : NATURAL := 16#5BDE#; -- value obtained from rx_disturb_cep_header.ip.header_checksum in wave window - - CONSTANT c_exp_beamlet_scale : NATURAL := NATURAL(g_beamlet_scale * REAL(c_disturb_unit_beamlet_scale)); -- c_disturb_unit_beamlet_scale = 2**15; - - CONSTANT c_exp_disturb_info : t_disturb_info := ( - TO_UVEC(601, 16), -- station_id - '0', -- antenna_band_index - x"7FFFFFFF", -- observation_id, use > 0 to avoid Warning: (vsim-151) NUMERIC_STD.TO_INTEGER: Value -2 is not in bounds of subtype NATURAL. - b"01", -- nyquist_zone_index, 0 = first, 1 = second, 2 = third - '1', -- f_adc, 0 = 160 MHz, 1 = 200 MHz - '0', -- fsub_type, 0 = critically sampled, 1 = oversampled - '0', -- beam_repositioning_flag - x"1400" -- block_period = 5120 - ); - - -- WG - CONSTANT c_bsn_start_wg : NATURAL := c_init_bsn + 2; -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values - -- .ampl - CONSTANT c_wg_ampl_full_scale : NATURAL := 2**(c_disturb_W_adc-1); -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1 - CONSTANT c_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale); -- amplitude in number of LSbit resolution steps - CONSTANT c_wg_ampl : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale)); -- in number of lsb - CONSTANT c_exp_sp_power : REAL := REAL(c_wg_ampl**2) / 2.0; - CONSTANT c_exp_sp_ast : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync); - -- . phase - CONSTANT c_subband_phase : REAL := 0.0; -- wanted subband phase in degrees = WG phase at sop - CONSTANT c_subband_freq : REAL := REAL(g_subband) / REAL(c_disturb_N_fft); -- normalized by fs = f_adc = 200 MHz = dp_clk rate - CONSTANT c_wg_latency : INTEGER := c_diag_wg_latency - 0; -- -0 to account for BSN scheduler start trigger latency - CONSTANT c_wg_phase_offset : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq; -- c_diag_wg_latency is in dp_clk cycles - CONSTANT c_wg_phase : REAL := c_subband_phase + c_wg_phase_offset; -- WG phase in degrees - -- . freq - CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - - -- WPFB - CONSTANT c_pol_index : NATURAL := g_sp MOD c_disturb_Q_fft; - CONSTANT c_pfb_index : NATURAL := g_sp / c_disturb_Q_fft; -- only read used WPFB unit out of range(c_disturb_P_pfb = 6) - CONSTANT c_subband_phase_offset : REAL := -90.0; -- WG with zero phase sinues yields subband with -90 degrees phase (negative Im, zero Re) - CONSTANT c_subband_weight_gain : REAL := 1.0; -- use default unit subband weights - CONSTANT c_subband_weight_phase : REAL := 0.0; -- use default unit subband weights - CONSTANT c_exp_subband_sp_ampl_ratio : REAL := 7.96; -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients - CONSTANT c_exp_subband_ampl : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio * c_subband_weight_gain; - CONSTANT c_exp_subband_power : REAL := c_exp_subband_ampl**2.0; -- complex, so no divide by 2 - CONSTANT c_exp_subband_sst : REAL := c_exp_subband_power * REAL(c_nof_block_per_sync); - - TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; - TYPE t_slv_64_subbands_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_sub-1); -- 512 - TYPE t_slv_64_beamlets_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_beamlets_disturb-1); -- 2*488 = 976 - - -- BF - -- . select - CONSTANT c_exp_beamlet_index : NATURAL := g_beamlet * c_disturb_N_pol_bf; -- in beamset 0 - -- . Beamlet weights for selected g_sp - CONSTANT c_bf_weight_re : INTEGER := INTEGER(g_bf_gain * REAL(c_disturb_unit_bf_weight) * COS(g_bf_phase * MATH_2_PI / 360.0)); - CONSTANT c_bf_weight_im : INTEGER := INTEGER(g_bf_gain * REAL(c_disturb_unit_bf_weight) * SIN(g_bf_phase * MATH_2_PI / 360.0)); - -- . Beamlet internal - CONSTANT c_exp_beamlet_ampl : REAL := c_exp_subband_ampl * g_bf_gain; - CONSTANT c_exp_beamlet_phase : REAL := c_subband_phase_offset + c_subband_weight_phase + g_bf_phase; - CONSTANT c_exp_beamlet_re : REAL := c_exp_beamlet_ampl * COS(c_exp_beamlet_phase * MATH_2_PI / 360.0); - CONSTANT c_exp_beamlet_im : REAL := c_exp_beamlet_ampl * SIN(c_exp_beamlet_phase * MATH_2_PI / 360.0); - -- . BST - CONSTANT c_exp_beamlet_power : REAL := c_exp_beamlet_ampl**2.0; -- complex, so no divide by 2 - CONSTANT c_exp_beamlet_bst : REAL := c_exp_subband_sst * g_bf_gain**2.0; -- = c_exp_beamlet_power * REAL(c_nof_block_per_sync) - -- . Beamlet output - CONSTANT c_exp_beamlet_output_ampl : REAL := c_exp_beamlet_ampl * g_beamlet_scale; - CONSTANT c_exp_beamlet_output_phase : REAL := c_exp_beamlet_phase; - CONSTANT c_exp_beamlet_output_re : REAL := c_exp_beamlet_re * g_beamlet_scale; - CONSTANT c_exp_beamlet_output_im : REAL := c_exp_beamlet_im * g_beamlet_scale; - - -- MM - -- . Address widths of a single MM instance - -- . c_disturb_S_pn = 12 instances - CONSTANT c_addr_w_reg_diag_wg : NATURAL := 2; - -- . c_disturb_N_beamsets = 2 instances - CONSTANT c_addr_w_ram_ss_ss_wide : NATURAL := ceil_log2( c_disturb_P_pfb * c_disturb_S_sub_bf * c_disturb_Q_fft); - CONSTANT c_addr_w_ram_bf_weights : NATURAL := ceil_log2(c_disturb_N_pol_bf * c_disturb_P_pfb * c_disturb_S_sub_bf * c_disturb_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_disturb_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_disturb_S_sub_bf*c_disturb_N_pol_bf*c_stat_data_sz); - -- . Address spans of a single MM instance - -- . c_disturb_S_pn = 12 instances - CONSTANT c_mm_span_reg_diag_wg : NATURAL := 2**c_addr_w_reg_diag_wg; - -- . c_disturb_N_beamsets = 2 instances - CONSTANT c_mm_span_ram_ss_ss_wide : NATURAL := 2**c_addr_w_ram_ss_ss_wide; - CONSTANT c_mm_span_ram_bf_weights : NATURAL := 2**c_addr_w_ram_bf_weights; - CONSTANT c_mm_span_reg_bf_scale : NATURAL := 2**c_addr_w_reg_bf_scale; - CONSTANT c_mm_span_reg_hdr_dat : NATURAL := 2**c_addr_w_reg_hdr_dat; - CONSTANT c_mm_span_reg_dp_xonoff : NATURAL := 2**c_addr_w_reg_dp_xonoff; - CONSTANT c_mm_span_ram_st_bst : NATURAL := 2**c_addr_w_ram_st_bst; - - CONSTANT c_mm_file_reg_ppsh : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "PIO_PPS"; - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER"; - CONSTANT c_mm_file_reg_diag_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG"; - CONSTANT c_mm_file_ram_equalizer_gains : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_EQUALIZER_GAINS"; - CONSTANT c_mm_file_reg_dp_selector : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_SELECTOR"; - CONSTANT c_mm_file_ram_st_sst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST"; - CONSTANT c_mm_file_ram_st_bst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_BST"; - CONSTANT c_mm_file_reg_dp_xonoff : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_XONOFF"; - CONSTANT c_mm_file_ram_ss_ss_wide : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_SS_SS_WIDE"; - CONSTANT c_mm_file_ram_bf_weights : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_BF_WEIGHTS"; - CONSTANT c_mm_file_reg_bf_scale : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BF_SCALE"; - CONSTANT c_mm_file_reg_disturb_info : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_SDP_INFO"; - CONSTANT c_mm_file_reg_hdr_dat : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_HDR_DAT"; -- c_disturb_N_beamsets = 2 beamsets - - -- Tb - SIGNAL stimuli_done : STD_LOGIC := '0'; - SIGNAL tb_almost_end : STD_LOGIC := '0'; - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0); - - SIGNAL dest_rst : STD_LOGIC := '1'; -- use separate destination rst for Rx 10GbE in tb - SIGNAL pps_rst : STD_LOGIC := '1'; -- use separate reset to release the PPS generator - SIGNAL gen_pps : STD_LOGIC := '0'; - - SIGNAL in_sync : STD_LOGIC := '0'; - SIGNAL in_sync_cnt : NATURAL := 0; - SIGNAL test_sync_cnt : INTEGER := 0; - - -- MM - SIGNAL rd_disturb_info : t_disturb_info := c_disturb_info_rst; - SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); - SIGNAL rd_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); - SIGNAL rd_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); - SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0); - - -- WG - SIGNAL current_bsn_wg : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - - -- FSUB - -- . Read sp_subband_ssts_arr2 = SST for one WPFB unit that processes g_sp - SIGNAL sp_subband_ssts_arr2 : t_slv_64_subbands_arr(c_disturb_N_pol-1 DOWNTO 0); -- [pol][sub], for X,Y pair of A, B - SIGNAL sp_subband_sst : REAL := 0.0; - SIGNAL stat_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); - - -- . Selector - SIGNAL sst_offload_weighted_subbands : STD_LOGIC; - - -- . Subband equalizer - SIGNAL sp_subband_weight_re : INTEGER := 0; - SIGNAL sp_subband_weight_im : INTEGER := 0; - SIGNAL sp_subband_weight_gain : REAL := 0.0; - SIGNAL sp_subband_weight_phase : REAL := 0.0; - - -- BF - SIGNAL sp_subband_select : NATURAL := 0; - SIGNAL sp_subband_select_arr : t_natural_arr(0 TO c_disturb_S_sub_bf * c_disturb_N_pol-1) := (OTHERS => 0); -- Q_fft = N_pol = 2 - SIGNAL sp_bf_weights_re_arr : t_integer_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0); - SIGNAL sp_bf_weights_im_arr : t_integer_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0); - SIGNAL sp_bf_weights_gain_arr : t_real_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0.0); - SIGNAL sp_bf_weights_phase_arr : t_real_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0.0); - - SIGNAL pol_beamlet_bsts_arr2 : t_slv_64_beamlets_arr(c_disturb_N_pol_bf-1 DOWNTO 0); -- [pol_bf][blet] - SIGNAL pol_beamlet_bst_X_arr : t_real_arr(0 TO c_disturb_N_beamsets-1) := (OTHERS => 0.0); -- [bset] - SIGNAL pol_beamlet_bst_Y_arr : t_real_arr(0 TO c_disturb_N_beamsets-1) := (OTHERS => 0.0); -- [bset] - - -- 10GbE - SIGNAL rx_beamlet_arr_re : t_slv_8_arr(c_disturb_cep_nof_blocks_per_packet-1 DOWNTO 0); -- [3:0] - SIGNAL rx_beamlet_arr_im : t_slv_8_arr(c_disturb_cep_nof_blocks_per_packet-1 DOWNTO 0); -- [3:0] - SIGNAL rx_beamlet_cnt : NATURAL; - SIGNAL rx_beamlet_valid : STD_LOGIC; - - SIGNAL rx_beamlet_list_re : t_slv_8_arr(c_disturb_cep_nof_beamlets_per_block * c_disturb_N_pol_bf-1 DOWNTO 0); -- [488 * 2-1:0] = [975:0] - SIGNAL rx_beamlet_list_im : t_slv_8_arr(c_disturb_cep_nof_beamlets_per_block * c_disturb_N_pol_bf-1 DOWNTO 0); -- [488 * 2-1:0] = [975:0] - - SIGNAL tr_10GbE_src_out : t_dp_sosi; - SIGNAL tr_10GbE_src_in : t_dp_siso; - SIGNAL tr_ref_clk_312 : STD_LOGIC := '0'; - SIGNAL tr_ref_clk_156 : STD_LOGIC := '0'; - SIGNAL tr_ref_rst_156 : STD_LOGIC := '0'; - - -- dp_offload_rx - SIGNAL offload_rx_hdr_dat_mosi : t_mem_mosi := c_mem_mosi_rst; - SIGNAL offload_rx_hdr_dat_miso : t_mem_miso; - - SIGNAL test_offload_en : STD_LOGIC := '0'; - SIGNAL test_offload_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); -- 64 bit - SIGNAL test_offload_sosi : t_dp_sosi := c_dp_sosi_rst; - SIGNAL test_offload_sop_cnt : NATURAL := 0; - SIGNAL test_offload_eop_cnt : NATURAL := 0; - - SIGNAL rx_hdr_fields_out : STD_LOGIC_VECTOR(1023 DOWNTO 0); - SIGNAL rx_hdr_fields_raw : STD_LOGIC_VECTOR(1023 DOWNTO 0) := (OTHERS => '0'); - SIGNAL rx_disturb_cep_header : t_disturb_cep_header; - SIGNAL exp_disturb_cep_header : t_disturb_cep_header; - SIGNAL exp_dp_bsn : NATURAL; - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - SIGNAL SA_CLK : STD_LOGIC := '1'; - SIGNAL si_lpbk_0 : STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0); - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - SA_CLK <= NOT SA_CLK AFTER c_sa_clk_period/2; -- Serial Gigabit IO sa clock (644 MHz) - dest_rst <= '0' AFTER c_ext_clk_period * 10; - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, gen_pps); - jesd204b_sysref <= gen_pps; - ext_pps <= gen_pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_bf : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_bf", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync, - g_scope_selected_subband => g_subband - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => ext_pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- Transceiver clocks - SA_CLK => SA_CLK, - -- front transceivers - QSFP_1_RX => si_lpbk_0, - QSFP_1_TX => si_lpbk_0, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - u_unb2_board_clk644_pll : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks - PORT MAP ( - refclk_644 => SA_CLK, - rst_in => dest_rst, - clk_156 => tr_ref_clk_156, - clk_312 => tr_ref_clk_312, - rst_156 => tr_ref_rst_156, - rst_312 => OPEN - ); - - u_tr_10GbE: ENTITY tr_10GbE_lib.tr_10GbE - GENERIC MAP ( - g_sim => TRUE, - g_sim_level => 1, - g_nof_macs => 1, - g_use_mdio => FALSE - ) - PORT MAP ( - -- Transceiver PLL reference clock - tr_ref_clk_644 => SA_CLK, - tr_ref_clk_312 => tr_ref_clk_312, -- 312.5 MHz for 10GBASE-R - tr_ref_clk_156 => tr_ref_clk_156, -- 156.25 MHz for 10GBASE-R or for XAUI - tr_ref_rst_156 => tr_ref_rst_156, -- for 10GBASE-R or for XAUI - - -- MM interface - mm_rst => dest_rst, - mm_clk => tb_clk, - - -- DP interface - dp_rst => dest_rst, - dp_clk => ext_clk, - - serial_rx_arr(0) => si_lpbk_0(0), - - src_out_arr(0) => tr_10GbE_src_out, - src_in_arr(0) => tr_10GbE_src_in - ); - - - u_rx : ENTITY dp_lib.dp_offload_rx - GENERIC MAP ( - g_nof_streams => 1, - g_data_w => c_longword_w, - g_symbol_w => c_octet_w, - g_hdr_field_arr => c_disturb_cep_hdr_field_arr, - g_remove_crc => FALSE, - g_crc_nof_words => 0 - ) - PORT MAP ( - mm_rst => dest_rst, - mm_clk => tb_clk, - - dp_rst => dest_rst, - dp_clk => ext_clk, - - reg_hdr_dat_mosi => offload_rx_hdr_dat_mosi, - reg_hdr_dat_miso => offload_rx_hdr_dat_miso, - - snk_in_arr(0) => tr_10GbE_src_out, - snk_out_arr(0) => tr_10GbE_src_in, - - src_out_arr(0) => test_offload_sosi, - - hdr_fields_out_arr(0) => rx_hdr_fields_out, - hdr_fields_raw_arr(0) => rx_hdr_fields_raw - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - VARIABLE v_bsn : NATURAL; - VARIABLE v_sp_subband_sst : REAL := 0.0; - VARIABLE v_pol_beamlet_bst : REAL := 0.0; - VARIABLE v_data_lo, v_data_hi : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); - VARIABLE v_stat_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); - VARIABLE v_len, v_span, v_offset, v_addr, v_sel : NATURAL; -- address ranges, indices - VARIABLE v_W, v_P, v_S, v_A, v_B, v_G : NATURAL; -- array indicies - VARIABLE v_re, v_im, v_weight : INTEGER; - VARIABLE v_re_exp, v_im_exp : REAL := 0.0; - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Set and check SDP info - ---------------------------------------------------------------------------- - -- TYPE t_disturb_info IS RECORD - -- 7 station_id : STD_LOGIC_VECTOR(15 DOWNTO 0); - -- 6 antenna_band_index : STD_LOGIC; - -- 5 observation_id : STD_LOGIC_VECTOR(31 DOWNTO 0); - -- 4 nyquist_zone_index : STD_LOGIC_VECTOR(1 DOWNTO 0); - -- 3 f_adc : STD_LOGIC; - -- 2 fsub_type : STD_LOGIC; - -- 1 beam_repositioning_flag : STD_LOGIC; - -- 0 block_period : STD_LOGIC_VECTOR(15 DOWNTO 0); - -- END RECORD; - -- . Write - mmf_mm_bus_wr(c_mm_file_reg_disturb_info, 7, TO_UINT(c_exp_disturb_info.station_id), tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_disturb_info, 6, TO_UINT(slv(c_exp_disturb_info.antenna_band_index)), tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_disturb_info, 5, TO_UINT(c_exp_disturb_info.observation_id), tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_disturb_info, 4, TO_UINT(c_exp_disturb_info.nyquist_zone_index), tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_disturb_info, 1, TO_UINT(slv(c_exp_disturb_info.beam_repositioning_flag)), tb_clk); - -- . Read - mmf_mm_bus_rd(c_mm_file_reg_disturb_info, 3, rd_data, tb_clk); rd_disturb_info.f_adc <= rd_data(0); - mmf_mm_bus_rd(c_mm_file_reg_disturb_info, 2, rd_data, tb_clk); rd_disturb_info.fsub_type <= rd_data(0); - mmf_mm_bus_rd(c_mm_file_reg_disturb_info, 0, rd_data, tb_clk); rd_disturb_info.block_period <= rd_data(15 DOWNTO 0); - proc_common_wait_some_cycles(tb_clk, 1); - -- . Verify read - ASSERT c_exp_disturb_info.f_adc = rd_disturb_info.f_adc REPORT "Wrong MM read SDP info f_adc" SEVERITY ERROR; - ASSERT c_exp_disturb_info.fsub_type = rd_disturb_info.fsub_type REPORT "Wrong MM read SDP info fsub_type" SEVERITY ERROR; - ASSERT c_exp_disturb_info.block_period = rd_disturb_info.block_period REPORT "Wrong MM read SDP info block_period" SEVERITY ERROR; - - ------------------------------------------------------------------------------ - ---- Set and check BF per beamset - ------------------------------------------------------------------------------ - FOR bset IN 0 TO c_disturb_N_beamsets-1 LOOP - -- MM beamlet_scale - -- . write - v_offset := bset * c_mm_span_reg_bf_scale; - mmf_mm_bus_wr(c_mm_file_reg_bf_scale, v_offset + 0, c_exp_beamlet_scale, tb_clk); - proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period); - - -- . readback - mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk); - rd_beamlet_scale <= rd_data(15 DOWNTO 0); - proc_common_wait_some_cycles(tb_clk, 1); - ASSERT TO_UINT(rd_beamlet_scale) = c_exp_beamlet_scale REPORT "Wrong MM read beamlet_scale for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; - - -- CEP beamlet output header - -- c_disturb_cep_hdr_field_arr : t_common_field_arr(c_disturb_cep_nof_hdr_fields-1 DOWNTO 0) := ( - -- 40 "eth_dst_mac" ), "RW", 48, field_default(c_disturb_cep_eth_dst_mac) ), - -- 38 "eth_src_mac" ), "RW", 48, field_default(0) ), - -- 37 "eth_type" ), "RW", 16, field_default(x"0800") ), - -- - -- 36 "ip_version" ), "RW", 4, field_default(4) ), - -- 35 "ip_header_length" ), "RW", 4, field_default(5) ), - -- 34 "ip_services" ), "RW", 8, field_default(0) ), - -- 33 "ip_total_length" ), "RW", 16, field_default(c_disturb_cep_ip_total_length) ), - -- 32 "ip_identification" ), "RW", 16, field_default(0) ), - -- 31 "ip_flags" ), "RW", 3, field_default(2) ), - -- 30 "ip_fragment_offset" ), "RW", 13, field_default(0) ), - -- 29 "ip_time_to_live" ), "RW", 8, field_default(127) ), - -- 28 "ip_protocol" ), "RW", 8, field_default(17) ), - -- 27 "ip_header_checksum" ), "RW", 16, field_default(0) ), - -- 26 "ip_src_addr" ), "RW", 32, field_default(0) ), - -- 25 "ip_dst_addr" ), "RW", 32, field_default(c_disturb_cep_ip_dst_addr) ), - -- - -- 24 "udp_src_port" ), "RW", 16, field_default(0) ), - -- 23 "udp_dst_port" ), "RW", 16, field_default(c_disturb_cep_udp_dst_port) ), - -- 22 "udp_total_length" ), "RW", 16, field_default(c_disturb_cep_udp_total_length) ), - -- 21 "udp_checksum" ), "RW", 16, field_default(0) ), - -- - -- 20 "disturb_marker" ), "RW", 8, field_default(c_disturb_marker_beamlets) ), - -- 19 "disturb_version_id" ), "RW", 8, field_default(c_disturb_cep_version_id) ), - -- 18 "disturb_observation_id" ), "RW", 32, field_default(0) ), - -- 17 "disturb_station_id" ), "RW", 16, field_default(0) ), - -- - -- 16 "disturb_source_info_antenna_band_id" ), "RW", 1, field_default(0) ), - -- 15 "disturb_source_info_nyquist_zone_id" ), "RW", 2, field_default(0) ), - -- 14 "disturb_source_info_f_adc" ), "RW", 1, field_default(0) ), - -- 13 "disturb_source_info_fsub_type" ), "RW", 1, field_default(0) ), - -- 12 "disturb_source_info_payload_error" ), "RW", 1, field_default(0) ), - -- 11 "disturb_source_info_repositioning_flag" ), "RW", 1, field_default(0) ), - -- 10 "disturb_source_info_beamlet_width" ), "RW", 4, field_default(c_disturb_W_beamlet) ), - -- 9 "disturb_source_info_gn_id" ), "RW", 5, field_default(0) ), - -- - -- 7 "disturb_reserved" ), "RW", 40, field_default(0) ), - -- 6 "disturb_beamlet_scale" ), "RW", 16, field_default(c_disturb_beamlet_scale_default) ), - -- 5 "disturb_beamlet_index" ), "RW", 16, field_default(0) ), - -- 4 "disturb_nof_blocks_per_packet" ), "RW", 8, field_default(c_disturb_cep_nof_blocks_per_packet) ), - -- 3 "disturb_nof_beamlets_per_block" ), "RW", 16, field_default(c_disturb_cep_nof_beamlets_per_block) ), - -- 2 "disturb_block_period" ), "RW", 16, field_default(c_disturb_block_period) ), - -- - -- 0 "dp_bsn" ), "RW", 64, field_default(0) ) - -- ); - - v_offset := bset * c_mm_span_reg_hdr_dat; - -- . Use defaults, so no need to write - -- . Read - mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); - mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; - mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; - mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); - proc_common_wait_some_cycles(tb_clk, 1); - -- verify read - ASSERT rd_cep_eth_dst_mac = c_disturb_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 00074306C700 = DOP36-eth0 - ASSERT rd_cep_ip_dst_addr = c_disturb_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - ASSERT rd_cep_udp_dst_port = c_disturb_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 5000 - - ---------------------------------------------------------------------------- - -- Enable beamlet UDP offload (dp_xonoff) - ---------------------------------------------------------------------------- - v_offset := bset * c_mm_span_reg_dp_xonoff; - mmf_mm_bus_wr(c_mm_file_reg_dp_xonoff, v_offset + 0, 1, tb_clk); - END LOOP; - - ---------------------------------------------------------------------------- - -- Enable BS - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, c_init_bsn, tb_clk); -- Init BSN - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); -- Write high part activates the init BSN - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000003#, tb_clk); -- Enable BS at PPS - - -- Release PPS pulser, to get first PPS now and to start BSN source - WAIT FOR 1 us; - pps_rst <= '0'; - - ---------------------------------------------------------------------------- - -- Enable and start WG - ---------------------------------------------------------------------------- - -- 0 : mode[7:0] --> off=0, calc=1, repeat=2, single=3) - -- nof_samples[31:16] --> <= c_ram_wg_size=1024 - -- 1 : phase[15:0] - -- 2 : freq[30:0] - -- 3 : ampl[16:0] - -- . Put wanted signal on g_sp input - v_offset := g_sp * c_mm_span_reg_diag_wg; - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_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); - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - - -- Write scheduler BSN to trigger start of WG at next block - v_bsn := TO_UINT(current_bsn_wg) + 2; - ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR; - v_bsn := c_bsn_start_wg; - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, v_bsn, tb_clk); -- first write low then high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1, 0, tb_clk); -- assume v_bsn < 2**31-1 - - ---------------------------------------------------------------------------- - -- Read weighted subband selector - ---------------------------------------------------------------------------- - mmf_mm_bus_rd(c_mm_file_reg_dp_selector, 0, rd_data, tb_clk); - sst_offload_weighted_subbands <= NOT rd_data(0); - proc_common_wait_some_cycles(tb_clk, 1); - - ---------------------------------------------------------------------------- - -- Subband weight - ---------------------------------------------------------------------------- - - -- . MM format: (cint16)RAM_EQUALIZER_GAINS[S_pn/Q_fft]_[Q_fft][N_sub] = [S_pn][N_sub] - v_addr := g_sp * c_disturb_N_sub + g_subband; - -- . read - mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk); - v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight); - v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight); - sp_subband_weight_re <= v_re; - sp_subband_weight_im <= v_im; - sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight); - sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI; - - -- No need to write subband weight, because default it is unit weight - - ---------------------------------------------------------------------------- - -- Subband select to map subband to beamlet - ---------------------------------------------------------------------------- - -- . MM format: (uint16)RAM_SS_SS_WIDE[N_beamsets][A_pn]_[S_sub_bf][Q_fft], Q_fft = N_pol = 2 - - -- . write selection, only for g_beamlet to save sim time - v_span := true_log_pow2(c_disturb_N_pol * c_disturb_S_sub_bf); -- = 1024 - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - -- Same selection for both beamsets - -- Select beamlet g_beamlet to subband g_subband - FOR A IN 0 TO c_disturb_A_pn-1 LOOP - -- Same selection to all SP - FOR P IN 0 TO c_disturb_N_pol-1 LOOP - v_addr := P + g_beamlet * c_disturb_N_pol + A * v_span + U * c_mm_span_ram_ss_ss_wide; - v_sel := P + g_subband * c_disturb_N_pol; - mmf_mm_bus_wr(c_mm_file_ram_ss_ss_wide, v_addr, v_sel, tb_clk); - END LOOP; - END LOOP; - END LOOP; - - -- . read back selection for g_sp = c_pfb_index * c_disturb_N_pol + c_pol_index - v_P := c_pol_index; - v_A := c_pfb_index; - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - -- Same selection for both beamsets, so fine to use only one sp_subband_select_arr() - FOR B IN 0 TO c_disturb_S_sub_bf-1 LOOP - -- Same selection for all SP, so fine to only read subband selection for g_sp - v_addr := v_P + B * c_disturb_N_pol + v_A * v_span + U * c_mm_span_ram_ss_ss_wide; - mmf_mm_bus_rd(c_mm_file_ram_ss_ss_wide, v_addr, rd_data, tb_clk); - v_sel := (TO_UINT(rd_data) - v_P) / c_disturb_N_pol; - sp_subband_select_arr(B) <= v_sel; - sp_subband_select <= v_sel; -- for time series view in Wave window - END LOOP; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window - - ---------------------------------------------------------------------------- - -- Write beamlet weight for g_beamlet - ---------------------------------------------------------------------------- - -- . MM format: (cint16)RAM_BF_WEIGHTS[N_beamsets][N_pol_bf][A_pn]_[N_pol][S_sub_bf] - - -- . write BF weights, only for g_beamlet to save sim time - v_span := true_log_pow2(c_disturb_N_pol * c_disturb_S_sub_bf); -- = 1024 - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - -- Same BF weights for both beamsets - FOR A IN 0 TO c_disturb_A_pn-1 LOOP - FOR P IN 0 TO c_disturb_N_pol-1 LOOP - v_S := A * c_disturb_N_pol + P; - IF v_S = g_sp THEN - -- use generic BF weight for g_sp in g_beamlet - v_weight := pack_complex(re => c_bf_weight_re, im => c_bf_weight_im, w => c_disturb_W_bf_weight); - ELSE - -- default set all weights to zero - v_weight := 0; - END IF; - v_addr := g_beamlet + A * v_span + U * c_mm_span_ram_bf_weights; - v_addr := v_addr + P * c_disturb_S_sub_bf; - mmf_mm_bus_wr(c_mm_file_ram_bf_weights, v_addr, v_weight, tb_clk); - END LOOP; - END LOOP; - END LOOP; - - -- . read back BF weights for g_beamlet - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - FOR A IN 0 TO c_disturb_A_pn-1 LOOP - FOR P IN 0 TO c_disturb_N_pol-1 LOOP - v_addr := g_beamlet + A * v_span + U * c_mm_span_ram_bf_weights; - v_addr := v_addr + P * c_disturb_S_sub_bf; - mmf_mm_bus_rd(c_mm_file_ram_bf_weights, v_addr, rd_data, tb_clk); - v_re := unpack_complex_re(rd_data, c_disturb_W_bf_weight); - v_im := unpack_complex_im(rd_data, c_disturb_W_bf_weight); - -- same BF weights for both beamsets, so fine to use only one sp_bf_weights_*_arr() - v_S := A * c_disturb_N_pol + P; - sp_bf_weights_re_arr(v_S) <= v_re; - sp_bf_weights_im_arr(v_S) <= v_im; - sp_bf_weights_gain_arr(v_S) <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_bf_weight); - sp_bf_weights_phase_arr(v_S) <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI; - END LOOP; - END LOOP; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window - - ---------------------------------------------------------------------------- - -- Wait for enough WG data and start of sync interval - ---------------------------------------------------------------------------- - mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0, -- read BSN low - "UNSIGNED", rd_data, ">=", c_init_bsn + c_nof_block_per_sync*3, -- this is the wait until condition - c_disturb_T_sub, tb_clk); - - -- Stimuli done, now verify results at end of test - stimuli_done <= '1'; - - --------------------------------------------------------------------------- - -- Read subband statistics - --------------------------------------------------------------------------- - -- . the subband statistics are c_stat_data_sz = 2 word power values. - -- . there are c_disturb_S_pn = 12 signal inputs A, B, C, D, E, F, G, H, I, J, K, L - -- . there are c_disturb_N_sub = 512 subbands per signal input (SI, = signal path, SP) - -- . one complex WPFB can process two real inputs A, B, so there are c_disturb_P_pfb = 6 WPFB units, - -- but only read for the 1 WPFB unit of the selected g_sp, to save sim time - -- . the outputs for A, B are time multiplexed, c_disturb_Q_fft = 2, assume that they - -- correspond to the c_disturb_N_pol = 2 signal polarizations - -- . the subbands are output alternately so A0 B0 A1 B1 ... A511 B511 for input A, B - -- . the subband statistics multiple WPFB units appear in order in the ram_st_sst address map - -- . the subband statistics are stored first lo word 0 then hi word 1 - v_len := c_disturb_N_sub * c_disturb_N_pol * c_stat_data_sz; -- 2048 = 512 * 2 * 64/32 - v_span := true_log_pow2(v_len); -- = 2048 - FOR I IN 0 TO v_len-1 LOOP - v_W := I MOD c_stat_data_sz; -- 0, 1 per statistics word, word index - v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol; -- 0, 1 per SP pol, polarization index - v_B := I / (c_disturb_N_pol * c_stat_data_sz); -- subband index, range(N_sub = 512) per dual pol - v_addr := I + c_pfb_index * v_span; -- MM address - -- Only read SST for g_subband for dual pol SP, to save sim time - IF g_read_all_SST = TRUE OR v_B = g_subband THEN - IF v_W = 0 THEN - -- low part - mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk); - v_data_lo := rd_data; - ELSE - -- high part - mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk); - v_data_hi := rd_data; - v_stat_data := v_data_hi & v_data_lo; - - sp_subband_ssts_arr2(v_P)(v_B) <= v_stat_data; - stat_data <= v_stat_data; -- for time series view in Wave window - END IF; - END IF; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - - -- Subband power of g_subband in g_sp - -- . For the selected g_subband in g_sp the sp_subband_sst will be close - -- to sp_subband_sst_sum_arr(c_pol_index), because the input is a - -- sinus, so most power will be in 1 subband. - sp_subband_sst <= TO_UREAL(sp_subband_ssts_arr2(c_pol_index)(g_subband)); - proc_common_wait_some_cycles(tb_clk, 1); - proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window - - --------------------------------------------------------------------------- - -- Read beamlet statistics - --------------------------------------------------------------------------- - -- . the beamlet statistics are c_stat_data_sz = 2 word power values. - -- . there are c_disturb_S_sub_bf = 488 dual pol beamlets per beamset - -- . the beamlets are output alternately so X0 Y0 X1 Y1 ... X487 Y487 for polarizations X, Y - -- . the beamlet statistics for multiple beamsets appear in order in the ram_st_bst address map - -- . the beamlet statistics are stored first lo word 0 then hi word 1 - v_len := c_disturb_S_sub_bf * c_disturb_N_pol_bf * c_stat_data_sz; -- = 1952 = 488 * 2 * 64/32 - v_span := true_log_pow2(v_len); -- = 2048 - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - FOR I IN 0 TO v_len-1 LOOP - v_W := I MOD c_stat_data_sz; -- 0, 1 per statistics word, word index - v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol_bf; -- 0, 1 per BF pol, polarization index - v_B := I / (c_disturb_N_pol_bf * c_stat_data_sz); -- beamlet index in beamset, range(S_sub_bf = 488) per dual pol - v_G := v_B + U * c_disturb_S_sub_bf; -- global beamlet index, range(c_disturb_N_beamlets_disturb) - v_addr := I + U * v_span; -- MM address - --Only read BST for g_beamlet and dual pol_bf 0 and 1 and for both beamsets, to save sim time - IF g_read_all_BST = TRUE OR v_B = g_beamlet THEN - IF v_W = 0 THEN - -- low part - mmf_mm_bus_rd(c_mm_file_ram_st_bst, v_addr, rd_data, tb_clk); - v_data_lo := rd_data; - ELSE - -- high part - mmf_mm_bus_rd(c_mm_file_ram_st_bst, v_addr, rd_data, tb_clk); - v_data_hi := rd_data; - v_stat_data := v_data_hi & v_data_lo; - - pol_beamlet_bsts_arr2(v_P)(v_G) <= v_stat_data; - stat_data <= v_stat_data; -- for time series view in Wave window - END IF; - END IF; - END LOOP; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - - -- Beamlet power of g_beamlet X and Y, same for both beamsets - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - v_G := g_beamlet + U * c_disturb_S_sub_bf; -- global beamlet index, range(c_disturb_N_beamlets_disturb) - pol_beamlet_bst_X_arr(U) <= TO_UREAL(pol_beamlet_bsts_arr2(0)(v_G)); -- X pol beamlet - pol_beamlet_bst_Y_arr(U) <= TO_UREAL(pol_beamlet_bsts_arr2(1)(v_G)); -- Y pol beamlet - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window - - --------------------------------------------------------------------------- - -- Log WG, subband and beamlet statistics - --------------------------------------------------------------------------- - - print_str(""); - print_str("WG:"); - print_str(". c_wg_ampl = " & int_to_str(c_wg_ampl)); - print_str(". c_exp_sp_power = " & real_to_str(c_exp_sp_power, 20, 1)); - print_str(". c_exp_sp_ast = " & real_to_str(c_exp_sp_ast, 20, 1)); - - print_str(""); - print_str("Subband selector:"); - print_str(". sst_offload_weighted_subbands = " & sl_to_str(sst_offload_weighted_subbands)); - - print_str(""); - print_str("Subband weight:"); - print_str(". sp_subband_weight_gain = " & real_to_str(sp_subband_weight_gain, 20, 6)); - print_str(". sp_subband_weight_phase = " & real_to_str(sp_subband_weight_phase, 20, 6)); - - print_str(""); - print_str("SST results:"); - print_str(". c_exp_subband_ampl = " & int_to_str(NATURAL(c_exp_subband_ampl))); - print_str(". c_exp_subband_power = " & real_to_str(c_exp_subband_power, 20, 1)); - print_str(". c_exp_subband_sst = " & real_to_str(c_exp_subband_sst, 20, 1)); - print_str(""); - print_str(". sp_subband_sst = " & real_to_str(sp_subband_sst, 20, 1)); - print_str(". sp_subband_sst / c_exp_subband_sst = " & real_to_str(sp_subband_sst / c_exp_subband_sst, 20, 6)); - - print_str(""); - print_str("BST results:"); - print_str(". c_exp_beamlet_ampl = " & int_to_str(NATURAL(c_exp_beamlet_ampl))); - print_str(". c_exp_beamlet_power = " & real_to_str(c_exp_beamlet_power, 20, 1)); - print_str(". c_exp_beamlet_bst = " & real_to_str(c_exp_beamlet_bst, 20, 1)); - print_str(""); - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - v_G := g_beamlet + U * c_disturb_S_sub_bf; -- global beamlet index, range(c_disturb_N_beamlets_disturb) - print_str(". pol_beamlet_bst_X beamlet(" & INTEGER'IMAGE(v_G) & ") = " & real_to_str(pol_beamlet_bst_X_arr(U), 20, 1)); - print_str(". pol_beamlet_bst_Y beamlet(" & INTEGER'IMAGE(v_G) & ") = " & real_to_str(pol_beamlet_bst_Y_arr(U), 20, 1)); - END LOOP; - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - v_G := g_beamlet + U * c_disturb_S_sub_bf; -- global beamlet index, range(c_disturb_N_beamlets_disturb) - print_str(". pol_beamlet_bst_X beamlet(" & INTEGER'IMAGE(v_G) & ") / c_exp_beamlet_bst = " & real_to_str(pol_beamlet_bst_X_arr(U) / c_exp_beamlet_bst, 20, 6)); - print_str(". pol_beamlet_bst_Y beamlet(" & INTEGER'IMAGE(v_G) & ") / c_exp_beamlet_bst = " & real_to_str(pol_beamlet_bst_Y_arr(U) / c_exp_beamlet_bst, 20, 6)); - END LOOP; - - print_str(""); - print_str("Beamlet output:"); - print_str(". rd_beamlet_scale = " & int_to_str(TO_UINT(rd_beamlet_scale))); - print_str(". c_exp_beamlet_output_ampl = " & int_to_str(NATURAL(c_exp_beamlet_output_ampl))); - - --------------------------------------------------------------------------- - -- Verify SST and BST - --------------------------------------------------------------------------- - - -- verify expected subband power based on WG power - ASSERT sp_subband_sst > c_stat_lo_factor * c_exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - ASSERT sp_subband_sst < c_stat_hi_factor * c_exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - - -- verify expected beamlet power based on WG power and BF weigths - -- - -- All co and cross polarization weights are equal: w = w_xx = w_xy = w_yx = w_yy - -- With one g_sp either SP X or SP Y is used, so the other antenna polarization is 0 - -- Hence the c_exp_beamlet_bst will be the same for beamlet X and Y independent of whether g_sp is an X or Y signal input: - -- g_sp = X --> w_xx --> beamlet X = c_exp_beamlet_bst - -- g_sp = Y --> w_xy --> beamlet X = c_exp_beamlet_bst - -- g_sp = X --> w_yx --> beamlet Y = c_exp_beamlet_bst - -- g_sp = Y --> w_yy --> beamlet Y = c_exp_beamlet_bst - -- - FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP - ASSERT pol_beamlet_bst_X_arr(U) > c_stat_lo_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for X in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR; - ASSERT pol_beamlet_bst_X_arr(U) < c_stat_hi_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for X in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR; - ASSERT pol_beamlet_bst_Y_arr(U) > c_stat_lo_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for Y in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR; - ASSERT pol_beamlet_bst_Y_arr(U) < c_stat_hi_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for Y in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR; - END LOOP; - - --------------------------------------------------------------------------- - -- Verify beamlet output in 10GbE UDP offload - --------------------------------------------------------------------------- - v_re := TO_SINT(rx_beamlet_list_re(c_exp_beamlet_index)); v_re_exp := c_exp_beamlet_output_re; - v_im := TO_SINT(rx_beamlet_list_im(c_exp_beamlet_index)); v_im_exp := c_exp_beamlet_output_im; - ASSERT v_re > INTEGER(v_re_exp) - c_beamlet_output_delta REPORT "Wrong 10GbE output (re) " & INTEGER'IMAGE(v_re) & " != " & REAL'IMAGE(v_re_exp) SEVERITY ERROR; - ASSERT v_re < INTEGER(v_re_exp) + c_beamlet_output_delta REPORT "Wrong 10GbE output (re) " & INTEGER'IMAGE(v_re) & " != " & REAL'IMAGE(v_re_exp) SEVERITY ERROR; - ASSERT v_im > INTEGER(v_im_exp) - c_beamlet_output_delta REPORT "Wrong 10GbE output (im) " & INTEGER'IMAGE(v_im) & " != " & REAL'IMAGE(v_im_exp) SEVERITY ERROR; - ASSERT v_im < INTEGER(v_im_exp) + c_beamlet_output_delta REPORT "Wrong 10GbE output (im) " & INTEGER'IMAGE(v_im) & " != " & REAL'IMAGE(v_im_exp) SEVERITY ERROR; - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - tb_almost_end <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window - proc_common_stop_simulation(TRUE, ext_clk, tb_almost_end, tb_end); - WAIT; - END PROCESS; - - ----------------------------------------------------------------------------- - -- Verify beamlet offload packet header - ----------------------------------------------------------------------------- - - -- Counters to time expected exp_disturb_cep_header fields per offload packet - p_test_counters : PROCESS(ext_clk) - BEGIN - IF rising_edge(ext_clk) THEN - -- Count test_offload_sosi packets - IF test_offload_sosi.sop = '1' THEN - test_offload_sop_cnt <= test_offload_sop_cnt + 1; -- early count - END IF; - IF test_offload_sosi.eop = '1' THEN - test_offload_eop_cnt <= test_offload_eop_cnt + 1; -- after count - END IF; - END IF; - END PROCESS; - - -- Count sync intervals using in_sosi.sync, because there is no test_offload_sosi.sync - in_sync_cnt <= in_sync_cnt + 1 WHEN rising_edge(ext_clk) AND in_sync = '1'; - test_sync_cnt <= in_sync_cnt - 1; -- optionally adjust to fit test_offload_sosi - - -- Prepare exp_disturb_cep_header before test_offload_sosi.eop, so that - -- p_exp_disturb_cep_header can verify it at test_offload_sosi.eop. - - p_exp_disturb_cep_header : PROCESS(exp_dp_bsn) - BEGIN - -- eth header - exp_disturb_cep_header.eth.dst_mac <= c_cep_eth_dst_mac; - exp_disturb_cep_header.eth.src_mac <= c_cep_eth_src_mac; - exp_disturb_cep_header.eth.eth_type <= x"0800"; - - -- ip header - exp_disturb_cep_header.ip.version <= TO_UVEC( 4, c_network_ip_version_w); - exp_disturb_cep_header.ip.header_length <= TO_UVEC( 5, c_network_ip_header_length_w); - exp_disturb_cep_header.ip.services <= TO_UVEC( 0, c_network_ip_services_w); - exp_disturb_cep_header.ip.total_length <= c_disturb_cep_ip_total_length; -- 7868, see ICD STAT-CEP - exp_disturb_cep_header.ip.identification <= TO_UVEC( 0, c_network_ip_identification_w); - exp_disturb_cep_header.ip.flags <= TO_UVEC( 2, c_network_ip_flags_w); - exp_disturb_cep_header.ip.fragment_offset <= TO_UVEC( 0, c_network_ip_fragment_offset_w); - exp_disturb_cep_header.ip.time_to_live <= TO_UVEC( 127, c_network_ip_time_to_live_w); - exp_disturb_cep_header.ip.protocol <= TO_UVEC( 17, c_network_ip_protocol_w); - exp_disturb_cep_header.ip.header_checksum <= TO_UVEC( c_exp_ip_header_checksum, c_network_ip_header_checksum_w); - exp_disturb_cep_header.ip.src_ip_addr <= c_cep_ip_src_addr; -- c_network_ip_addr_w - exp_disturb_cep_header.ip.dst_ip_addr <= c_cep_ip_dst_addr; -- c_network_ip_addr_w - - -- udp header - exp_disturb_cep_header.udp.src_port <= c_cep_udp_src_port; - exp_disturb_cep_header.udp.dst_port <= c_cep_udp_dst_port; - exp_disturb_cep_header.udp.total_length <= c_disturb_cep_udp_total_length; -- 7848, see ICD STAT-CEP - exp_disturb_cep_header.udp.checksum <= TO_UVEC( 0, c_network_udp_checksum_w); - - -- app header - exp_disturb_cep_header.app.disturb_marker <= TO_UVEC(c_disturb_marker_beamlets, 8); -- 98 = x"62" = 'b' - exp_disturb_cep_header.app.disturb_version_id <= TO_UVEC(c_disturb_cep_version_id, 8); -- 5 - exp_disturb_cep_header.app.disturb_observation_id <= c_exp_disturb_info.observation_id; - exp_disturb_cep_header.app.disturb_station_id <= c_exp_disturb_info.station_id; - - exp_disturb_cep_header.app.disturb_source_info_antenna_band_id <= slv(c_exp_disturb_info.antenna_band_index); - exp_disturb_cep_header.app.disturb_source_info_nyquist_zone_id <= c_exp_disturb_info.nyquist_zone_index; - exp_disturb_cep_header.app.disturb_source_info_f_adc <= slv(c_exp_disturb_info.f_adc); - exp_disturb_cep_header.app.disturb_source_info_fsub_type <= slv(c_exp_disturb_info.fsub_type); - exp_disturb_cep_header.app.disturb_source_info_payload_error <= TO_UVEC(0, 1); - exp_disturb_cep_header.app.disturb_source_info_repositioning_flag <= slv(c_exp_disturb_info.beam_repositioning_flag); - exp_disturb_cep_header.app.disturb_source_info_beamlet_width <= TO_UVEC(c_disturb_W_beamlet, 4); - exp_disturb_cep_header.app.disturb_source_info_gn_id <= TO_UVEC(c_gn_index, 5); - - exp_disturb_cep_header.app.disturb_reserved <= TO_UVEC( 0, 40); - exp_disturb_cep_header.app.disturb_beamlet_scale <= TO_UVEC( c_exp_beamlet_scale, 16); - exp_disturb_cep_header.app.disturb_beamlet_index <= TO_UVEC( 0, 16); -- depends on bset - exp_disturb_cep_header.app.disturb_nof_blocks_per_packet <= TO_UVEC( c_disturb_cep_nof_blocks_per_packet, 8); - exp_disturb_cep_header.app.disturb_nof_beamlets_per_block <= TO_UVEC(c_disturb_cep_nof_beamlets_per_block, 16); - exp_disturb_cep_header.app.disturb_block_period <= c_exp_disturb_info.block_period; - - exp_disturb_cep_header.app.dp_bsn <= TO_UVEC(exp_dp_bsn, 64); -- depends on bset and time - END PROCESS; - - rx_disturb_cep_header <= func_disturb_map_cep_header(rx_hdr_fields_raw); - - p_verify_cep_header : PROCESS - VARIABLE v_bool : BOOLEAN; - BEGIN - WAIT UNTIL rising_edge(ext_clk); - - -- Prepare exp_disturb_cep_header at sop, so that it can be verified at eop - IF test_offload_sosi.sop = '1' THEN - -- Expected BSN increments by c_disturb_cep_nof_blocks_per_packet = 4 blocks per packet - IF test_offload_sop_cnt MOD c_disturb_N_beamsets = 0 THEN - exp_dp_bsn <= c_init_bsn + (test_offload_sop_cnt / c_disturb_N_beamsets) * c_disturb_cep_nof_blocks_per_packet; - END IF; - END IF; - - -- Verify header at eop - -- . The expected beamlet_index 0 or S_sub_bf = 488 depends on beamset 0 - -- or 1, but the order in which the packets arrive is undetermined. - -- Therefore accept any beamlet_index MOD c_disturb_S_sub_bf = 0 as correct - -- in func_disturb_verify_cep_header(). - IF test_offload_sosi.eop = '1' THEN - v_bool := func_disturb_verify_cep_header(rx_disturb_cep_header, exp_disturb_cep_header); - END IF; - END PROCESS; - - ----------------------------------------------------------------------------- - -- CEP Read Rx 10GbE Stream - ----------------------------------------------------------------------------- - -- Show received beamlets from 10GbE stream in Wave Window - -- . The packet header is 9.25 longwords wide. The dp_offload_rx has stripped - -- the header and has realigned the payload at a longword boundary. - -- . expect c_nof_block_per_sync / c_disturb_cep_nof_blocks_per_packet * - -- c_disturb_N_beamsets = 16 / 4 * 2 = 4 * 2 = 8 packets per sync interval - -- . expect c_disturb_cep_nof_beamlets_per_block = c_disturb_S_sub_bf = 488 dual pol - -- and complex beamlets per packet, so 2 dual pol beamlets/64b data word. - -- . Beamlets array is stored big endian in the data, so X index 0 first in - -- MSByte of test_offload_sosi.data. - p_rx_cep_beamlets : PROCESS - BEGIN - rx_beamlet_cnt <= 0; - rx_beamlet_valid <= '0'; - -- Wait until start of a beamlet packet, capture only first block in packet - proc_common_wait_until_high(ext_clk, test_offload_sosi.sop); - -- 2 dual pol beamlets (= XY, XY) per 64b data word - FOR I IN 0 TO (c_disturb_cep_nof_blocks_per_packet * c_disturb_cep_nof_beamlets_per_block/2)-1 LOOP - proc_common_wait_until_high(ext_clk, test_offload_sosi.valid); - rx_beamlet_valid <= '1'; - -- Capture rx beamlets per longword in rx_beamlet_arr, for time series view in Wave window - rx_beamlet_arr_re(0) <= test_offload_sosi.data(55 DOWNTO 48); -- X - rx_beamlet_arr_im(0) <= test_offload_sosi.data(63 DOWNTO 56); - rx_beamlet_arr_re(1) <= test_offload_sosi.data(39 DOWNTO 32); -- Y - rx_beamlet_arr_im(1) <= test_offload_sosi.data(47 DOWNTO 40); - rx_beamlet_arr_re(2) <= test_offload_sosi.data(23 DOWNTO 16); -- X - rx_beamlet_arr_im(2) <= test_offload_sosi.data(31 DOWNTO 24); - rx_beamlet_arr_re(3) <= test_offload_sosi.data( 7 DOWNTO 0); -- Y - rx_beamlet_arr_im(3) <= test_offload_sosi.data(15 DOWNTO 8); - IF I < c_disturb_cep_nof_beamlets_per_block/2 THEN - -- Only capture the first beamlets block of each packet in rx_beamlet_list - rx_beamlet_list_re(I*4 + 0) <= test_offload_sosi.data(55 DOWNTO 48); -- X - rx_beamlet_list_im(I*4 + 0) <= test_offload_sosi.data(63 DOWNTO 56); - rx_beamlet_list_re(I*4 + 1) <= test_offload_sosi.data(39 DOWNTO 32); -- Y - rx_beamlet_list_im(I*4 + 1) <= test_offload_sosi.data(47 DOWNTO 40); - rx_beamlet_list_re(I*4 + 2) <= test_offload_sosi.data(23 DOWNTO 16); -- X - rx_beamlet_list_im(I*4 + 2) <= test_offload_sosi.data(31 DOWNTO 24); - rx_beamlet_list_re(I*4 + 3) <= test_offload_sosi.data( 7 DOWNTO 0); -- Y - rx_beamlet_list_im(I*4 + 3) <= test_offload_sosi.data(15 DOWNTO 8); - END IF; - proc_common_wait_until_high(ext_clk, test_offload_sosi.valid); - -- Use at least one WAIT instead of proc_common_wait_some_cycles() to - -- avoid Modelsim warning: (vcom-1090) Possible infinite loop: Process - -- contains no WAIT statement. - WAIT UNTIL rising_edge(ext_clk); - rx_beamlet_valid <= '0'; - rx_beamlet_cnt <= (rx_beamlet_cnt + 4) MOD c_disturb_cep_nof_beamlets_per_block; -- 4 blocks/packet - END LOOP; - END PROCESS; - - -- To view the 64 bit 10GbE offload data more easily in the Wave window - test_offload_data <= test_offload_sosi.data(c_longword_w-1 DOWNTO 0); -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd deleted file mode 100644 index 7aeac51d37..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd +++ /dev/null @@ -1,250 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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: Self-checking testbench for simulating disturb2_unb2b_station_bf capturing BST UDP offload packets. --- --- Description: --- MM control actions: --- --- 1) Enable BSN source and enable BST offload --- --- 2) Verify ethernet statistics using eth_statistics, it checks the number of --- received packets and the total number of valid data. The content of the packets is not verified. --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- Takes about 10 m --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_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 disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_bf_bst_offload IS -END tb_disturb2_unb2b_station_bf_bst_offload; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_bf_bst_offload IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 16; -- long enough to stream out udp data - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - - -- MM - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_stat_enable_bst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_BST"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - SIGNAL eth_done : STD_LOGIC := '0'; - - -- . 1GbE output - CONSTANT c_eth_check_nof_packets : NATURAL := 1; -- received packets in 1 sync period - CONSTANT c_eth_header_size : NATURAL := 19; -- words - CONSTANT c_eth_crc_size : NATURAL := 1; -- word - CONSTANT c_eth_packet_size : NATURAL := c_eth_header_size + c_eth_crc_size + (c_disturb_W_statistic / c_word_w) * c_disturb_S_sub_bf * c_disturb_N_pol; -- 20 + 2 * 488 * 2 = 1972 - CONSTANT c_eth_check_nof_valid : NATURAL := c_eth_check_nof_packets * c_eth_packet_size; - CONSTANT c_eth_runtime_timeout : TIME := 2 * c_nof_clk_per_sync * c_ext_clk_period; -- eth statistics should be done at the second sync interval - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_bf : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_bf", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000001#, tb_clk); -- Enable BSN immediately - - ---------------------------------------------------------------------------- - -- Offload enable - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_stat_enable_bst, 0, 1, tb_clk); - - -- wait for udp offload is done - proc_common_wait_until_high(ext_clk, eth_done); - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - - ------------------------------------------------------------------------- - -- Verify proper DUT 1GbE offload output using Ethernet packet statistics - ------------------------------------------------------------------------- - u_eth_statistics : ENTITY eth_lib.eth_statistics - GENERIC MAP ( - g_runtime_nof_packets => c_eth_check_nof_packets, - g_runtime_timeout => c_eth_runtime_timeout, - g_check_nof_valid => TRUE, - g_check_nof_valid_ref => c_eth_check_nof_valid - ) - PORT MAP ( - eth_serial_in => eth_txp(0), - tb_end => eth_done - ); - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd deleted file mode 100644 index 9bd8e7b1b8..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd +++ /dev/null @@ -1,162 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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 filterbank design --- Description: --- Unb2b version for lab testing --- Contains complete AIT input stage with 12 ADC streams and FSUB - - -LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_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 disturb2_unb2b_station_fsub IS - GENERIC ( - g_design_name : STRING := "disturb2_unb2b_station_fsub"; - g_design_note : STRING := "Lofar2 SDP station filterbank 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); - - -- 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); -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12 - 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) -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4 - ); -END disturb2_unb2b_station_fsub; - -ARCHITECTURE str OF disturb2_unb2b_station_fsub 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 disturb2_unb2b_station_lib.disturb2_unb2b_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, - - -- 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/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl deleted file mode 100644 index af0a453b32..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl +++ /dev/null @@ -1,24 +0,0 @@ -############################################################################### -# -# Copyright (C) 2022 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl - - diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg deleted file mode 100644 index 1d4fb559e5..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg +++ /dev/null @@ -1,134 +0,0 @@ -hdl_lib_name = disturb2_unb2b_station_fsub -hdl_library_clause_name = disturb2_unb2b_station_fsub_lib -hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station -hdl_lib_uses_sim = eth -hdl_lib_technology = ip_arria10_e1sg - - synth_files = - disturb2_unb2b_station_fsub.vhd - -test_bench_files = - tb_disturb2_unb2b_station_fsub.vhd - tb_disturb2_unb2b_station_fsub_sst_offload.vhd - -regression_test_vhdl = - tb_disturb2_unb2b_station_fsub.vhd - tb_disturb2_unb2b_station_fsub_sst_offload.vhd - - -[modelsim_project_file] -modelsim_copy_files = - ../../src/data data - $RADIOHDL_WORK/libraries/dsp/filter/src/hex data # FIR filter coefficients - -[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 disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz. -quartus_sdc_files = - ../../quartus/disturb2_unb2b_station.sdc - #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc - -quartus_tcl_files = - disturb2_unb2b_station_fsub_pins.tcl - -quartus_vhdl_files = - -quartus_qip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_fsub/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip - -quartus_ip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip - -nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd deleted file mode 100644 index 52e5db9b6c..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd +++ /dev/null @@ -1,535 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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 (original), E. Kooistra (updates) --- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_fsub using WG data. --- --- Description: --- MM control actions: --- --- 1) Enable calc mode for WG via reg_diag_wg with: --- freq = 19.921875MHz --- ampl = 0.5 * 2**13 --- --- 2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg --- to trigger start of WG at BSN. --- --- 3) Read subband statistics (SST) via MM and verify with exp_subband_sst at g_subband. --- . use weighted subbands (default selected by MM) --- --- 4) View in wave window --- . in_sosi.sop and in_data in u_si_arr(g_sp) to check that: --- - WG starts with zero phase sine when c_subband_phase = 0.0 degrees --- - WG amplitude = 8191 (is full scale - 1) when wg_ampl = 1.0 --- . pfb_sosi_arr(c_pfb_index).im/re and fsub_sosi_arr(c_pfb_index).im/re --- in u_fsub in decimal radix and analog format to check that subband --- phase is g_subband_weight_phase phase as set by the subband weight. --- - Raw: pfb_sosi_arr = atan2(-65195 / 0) = -90 degrees --- - Weighted: fsub_sosi_arr = atan2(-56457 / 32598) = -60 degrees --- --> rotated expected g_subband_weight_phase = -60 - -90 = +30 degrees. --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- # Manually add missing signal --- > add wave -position insertpoint \ --- sim:/tb_disturb2_unb2b_station_fsub/sp_subband_ssts_arr2 --- > run -a --- # Takes about 30 m when g_read_all_SST = FALSE --- # Takes about 40 m when g_read_all_SST = TRUE --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib; -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 mm_lib.mm_file_pkg.ALL; -USE mm_lib.mm_file_unb_pkg.ALL; -USE dp_lib.dp_stream_pkg.ALL; -USE diag_lib.diag_pkg.ALL; -USE wpfb_lib.wpfb_pkg.ALL; -USE disturb_lib.disturb_pkg.ALL; -USE unb2b_board_lib.unb2b_board_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_fsub IS - GENERIC ( - g_sp : NATURAL := 3; -- signal path index in range(S_pn = 12) - g_wg_ampl : REAL := 1.0; -- WG normalized amplitude - g_subband : NATURAL := 102; -- select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz - g_subband_weight_gain : REAL := 1.0; -- subband weight normalized gain - g_subband_weight_phase : REAL := 30.0; -- subband weight phase rotation in degrees - g_read_all_SST : BOOLEAN := TRUE -- when FALSE only read SST for g_subband, to save sim time - ); -END tb_disturb2_unb2b_station_fsub; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_fsub IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_init_bsn : NATURAL := 17; -- some recognizable value >= 0 - - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 16; - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync * c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - CONSTANT c_stat_data_sz : NATURAL := c_wpfb_sim.stat_data_sz; -- = 2 - - CONSTANT c_percentage : REAL := 0.05; -- percentage that actual value may differ from expected value - CONSTANT c_lo_factor : REAL := 1.0 - c_percentage; -- lower boundary - CONSTANT c_hi_factor : REAL := 1.0 + c_percentage; -- higher boundary - - -- WG - CONSTANT c_bsn_start_wg : NATURAL := c_init_bsn + 2; -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values - -- .ampl - CONSTANT c_wg_ampl_full_scale : NATURAL := 2**(c_disturb_W_adc-1); -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1 - CONSTANT c_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale); -- amplitude in number of LSbit resolution steps - CONSTANT c_wg_ampl : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale)); -- in number of lsb - CONSTANT c_exp_sp_power : REAL := REAL(c_wg_ampl**2) / 2.0; - CONSTANT c_exp_sp_ast : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync); - -- . phase - CONSTANT c_subband_phase : REAL := 0.0; -- wanted subband phase in degrees = WG phase at sop - CONSTANT c_subband_freq : REAL := REAL(g_subband) / REAL(c_disturb_N_fft); -- normalized by fs = f_adc = 200 MHz is dp_clk - CONSTANT c_wg_latency : INTEGER := c_diag_wg_latency - 0; -- -0 to account for BSN scheduler start trigger latency - CONSTANT c_wg_phase_offset : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq; -- c_diag_wg_latency is in dp_clk cycles - CONSTANT c_wg_phase : REAL := c_subband_phase + c_wg_phase_offset; -- WG phase in degrees - -- . freq - CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - - -- FSUB - -- . WPFB - CONSTANT c_pol_index : NATURAL := g_sp MOD c_disturb_Q_fft; - CONSTANT c_pfb_index : NATURAL := g_sp / c_disturb_Q_fft; -- only read used WPFB unit out of range(c_disturb_P_pfb = 6) - CONSTANT c_exp_subband_sp_ampl_ratio : REAL := 7.96; -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients - CONSTANT c_exp_subband_ampl_raw : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio; - CONSTANT c_exp_subband_ampl_weighted : REAL := c_exp_subband_ampl_raw * g_subband_weight_gain; - CONSTANT c_exp_subband_power_raw : REAL := c_exp_subband_ampl_raw**2.0; -- complex, so no divide by 2 - CONSTANT c_exp_subband_power_weighted : REAL := c_exp_subband_ampl_weighted**2.0; -- complex, so no divide by 2 - CONSTANT c_exp_subband_sst_raw : REAL := c_exp_subband_power_raw * REAL(c_nof_block_per_sync); - CONSTANT c_exp_subband_sst_weighted : REAL := c_exp_subband_power_weighted * REAL(c_nof_block_per_sync); - - -- . expected limit values, obtained with print_str() for g_subband = 102, - -- g_wg_ampl = 1.0, g_subband_weight_gain = 1.0, g_subband_weight_phase = 30.0 - CONSTANT c_exp_subband_sst_leakage_snr_dB : REAL := 70.0; -- < 74.913 - CONSTANT c_exp_subband_sst_crosstalk_snr_dB : REAL := 90.0; -- < 96.284 - - TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; - TyPE t_slv_64_subbands_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_sub-1); - - -- . Subband weights for selected g_sp - CONSTANT c_subband_weight_re : INTEGER := INTEGER(g_subband_weight_gain * REAL(c_disturb_unit_sub_weight) * COS(g_subband_weight_phase * MATH_2_PI / 360.0)); - CONSTANT c_subband_weight_im : INTEGER := INTEGER(g_subband_weight_gain * REAL(c_disturb_unit_sub_weight) * SIN(g_subband_weight_phase * MATH_2_PI / 360.0)); - - -- MM - -- . Address widths of a single MM instance - CONSTANT c_addr_w_reg_diag_wg : NATURAL := 2; - -- . Address spans of a single MM instance - CONSTANT c_mm_span_reg_diag_wg : NATURAL := 2**c_addr_w_reg_diag_wg; - - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER"; - CONSTANT c_mm_file_reg_diag_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG"; - CONSTANT c_mm_file_ram_equalizer_gains : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_EQUALIZER_GAINS"; - CONSTANT c_mm_file_reg_dp_selector : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_SELECTOR"; - CONSTANT c_mm_file_ram_st_sst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - - SIGNAL pps_rst : STD_LOGIC := '1'; - SIGNAL gen_pps : STD_LOGIC := '0'; - - -- WG - SIGNAL current_bsn_wg : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - - -- FSUB - -- . WPFB - SIGNAL sp_subband_ssts_arr2 : t_slv_64_subbands_arr(c_disturb_N_pol-1 DOWNTO 0); -- [pol][sub] - SIGNAL sp_subband_sst_sum_arr : t_real_arr(c_disturb_N_pol-1 DOWNTO 0) := (OTHERS => 0.0); - SIGNAL sp_subband_sst : REAL := 0.0; - SIGNAL sp_subband_sst_leakage : REAL := 0.0; - SIGNAL sp_subband_sst_leakage_snr_dB : REAL := 0.0; -- signal to noise (leakage) ratio - SIGNAL sp_subband_sst_crosstalk : REAL := 0.0; - SIGNAL sp_subband_sst_crosstalk_snr_dB : REAL := 0.0; -- signal to noise (crosstalk) ration - - SIGNAL exp_subband_ampl : REAL := 0.0; - SIGNAL exp_subband_power : REAL := 0.0; - SIGNAL exp_subband_sst : REAL := 0.0; - SIGNAL stat_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); - - -- . Selector - SIGNAL sst_offload_weighted_subbands : STD_LOGIC; - - -- . Subband equalizer - SIGNAL sp_subband_weight_re : INTEGER := 0; - SIGNAL sp_subband_weight_im : INTEGER := 0; - SIGNAL sp_subband_weight_gain : REAL := 0.0; - SIGNAL sp_subband_weight_phase : REAL := 0.0; - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, gen_pps); - jesd204b_sysref <= gen_pps; - ext_pps <= gen_pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_fsub : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_fsub", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync, - g_scope_selected_subband => g_subband - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => ext_pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - -- Raw or weighted subbands - exp_subband_ampl <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_ampl_raw, c_exp_subband_ampl_weighted); - exp_subband_power <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_power_raw, c_exp_subband_power_weighted); - exp_subband_sst <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_sst_raw, c_exp_subband_sst_weighted); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - VARIABLE v_bsn : NATURAL; - VARIABLE v_data_lo, v_data_hi : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); - VARIABLE v_stat_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); - VARIABLE v_len, v_span, v_offset, v_addr : NATURAL; -- address ranges, indices - VARIABLE v_W, v_P, v_U, v_S, v_B : NATURAL; -- array indicies - VARIABLE v_re, v_im, v_weight : INTEGER; - VARIABLE v_power : REAL; - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, c_init_bsn, tb_clk); -- Init BSN - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); -- Write high part activates the init BSN - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000003#, tb_clk); -- Enable BSN at PPS - - -- Release PPS pulser, to get first PPS now and to start BSN source - WAIT FOR 1 us; - pps_rst <= '0'; - - ---------------------------------------------------------------------------- - -- Read weighted subband selector - ---------------------------------------------------------------------------- - mmf_mm_bus_rd(c_mm_file_reg_dp_selector, 0, rd_data, tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - sst_offload_weighted_subbands <= NOT rd_data(0); - - ---------------------------------------------------------------------------- - -- Enable and start WG - ---------------------------------------------------------------------------- - -- 0 : mode[7:0] --> off=0, calc=1, repeat=2, single=3) - -- nof_samples[31:16] --> <= c_ram_wg_size=1024 - -- 1 : phase[15:0] - -- 2 : freq[30:0] - -- 3 : ampl[16:0] - v_offset := g_sp * c_mm_span_reg_diag_wg; - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_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); - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - - -- Write scheduler BSN to trigger start of WG at next block - v_bsn := TO_UINT(current_bsn_wg) + 2; - ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR; - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, c_bsn_start_wg, tb_clk); -- first write low then high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1, 0, tb_clk); -- assume v_bsn < 2**31-1 - - ---------------------------------------------------------------------------- - -- Write subband weight for selected g_sp and g_subband - ---------------------------------------------------------------------------- - -- . MM format: (cint16)RAM_EQUALIZER_GAINS[S_pn/Q_fft]_[Q_fft][N_sub] = [S_pn][N_sub] - v_addr := g_sp * c_disturb_N_sub + g_subband; - -- . read - mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk); - v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight); - v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight); - sp_subband_weight_re <= v_re; - sp_subband_weight_im <= v_im; - sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight); - sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI; - -- . write - v_weight := pack_complex(re => c_subband_weight_re, im => c_subband_weight_im, w => c_disturb_W_sub_weight); -- c_disturb_W_sub_weight = 16 bit - mmf_mm_bus_wr(c_mm_file_ram_equalizer_gains, v_addr, v_weight, tb_clk); - -- . read back - mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk); - v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight); - v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight); - sp_subband_weight_re <= v_re; - sp_subband_weight_im <= v_im; - sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight); - sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI; - - ---------------------------------------------------------------------------- - -- Wait for enough WG data and start of sync interval - ---------------------------------------------------------------------------- - mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0, -- read BSN low - "UNSIGNED", rd_data, ">=", c_init_bsn + c_nof_block_per_sync * 3, -- this is the wait until condition - c_disturb_T_sub, tb_clk); - - --------------------------------------------------------------------------- - -- Read subband statistics - --------------------------------------------------------------------------- - -- . the subband statistics are c_stat_data_sz = 2 word power values. - -- . there are c_disturb_S_pn = 12 signal inputs A, B, C, D, E, F, G, H, I, J, K, L - -- . there are c_disturb_N_sub = 512 subbands per signal input (SI, = signal path, SP) - -- . one complex WPFB can process two real inputs A, B, so there are c_disturb_P_pfb = 6 WPFB units, - -- but only read for the 1 WPFB unit of the selected g_sp, to save sim time - -- . the outputs for A, B are time multiplexed, c_disturb_Q_fft = 2, assume that they - -- correspond to the c_disturb_N_pol = 2 signal polarizations - -- . the subbands are output alternately so A0 B0 A1 B1 ... A511 B511 for input A, B - -- . the subband statistics multiple WPFB units appear in order in the ram_st_sst address map - -- . the subband statistics are stored first lo word 0 then hi word 1 - v_len := c_disturb_N_sub * c_disturb_N_pol * c_stat_data_sz; -- 2048 = 512 * 2 * 64/32 - v_span := true_log_pow2(v_len); -- = 2048 - FOR I IN 0 TO v_len-1 LOOP - v_W := I MOD c_stat_data_sz; -- 0, 1 per statistics word, word index - v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol; -- 0, 1 per SP pol, polarization index - v_B := I / (c_disturb_N_pol * c_stat_data_sz); -- subband index, range(N_sub = 512) per dual pol - v_addr := I + c_pfb_index * v_span; -- MM address for WPFB unit of selected g_sp - -- Only read SST for g_subband for dual pol SP, to save sim time - IF g_read_all_SST = TRUE OR v_B = g_subband THEN - IF v_W = 0 THEN - -- low part - mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk); - v_data_lo := rd_data; - ELSE - -- high part - mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk); - v_data_hi := rd_data; - v_stat_data := v_data_hi & v_data_lo; - - sp_subband_ssts_arr2(v_P)(v_B) <= v_stat_data; - stat_data <= v_stat_data; -- for time series view in Wave window - - -- sum of all subband powers per pol - sp_subband_sst_sum_arr(v_P) <= sp_subband_sst_sum_arr(v_P) + TO_UREAL(v_stat_data); - END IF; - END IF; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - - -- Subband power of g_subband in g_sp - -- . For the selected g_subband in g_sp the sp_subband_sst will be close - -- to sp_subband_sst_sum_arr(c_pol_index), because the input is a - -- sinus, so most power will be in 1 subband. - sp_subband_sst <= TO_UREAL(sp_subband_ssts_arr2(c_pol_index)(g_subband)); - proc_common_wait_some_cycles(tb_clk, 1); - - -- The sp_subband_sst_leakage shows how much power from the input sinus at a specific - -- subband has leaked into the N_sub-1 = 511 other subbands. The power ratio yields an - -- indication of the SNR, although that also depends on the SNR of the WG sinus. - v_power := sp_subband_sst_sum_arr(c_pol_index) - sp_subband_sst; - sp_subband_sst_leakage <= v_power; - IF sp_subband_sst > c_eps AND v_power > c_eps THEN - sp_subband_sst_leakage_snr_dB <= 10.0 * LOG10(sp_subband_sst / v_power); - ELSIF g_read_all_SST THEN - REPORT "Wrong, zero leakage is unexpected for SP-" & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - END IF; - - -- The sp_subband_sst_crosstalk shows how much power from one WPFB input cross talks - -- into the other output, due to quantization cross talk in the complex FFT. The power - -- ration indicates the suppression, provided that the other input was zero. - v_power := sp_subband_sst_sum_arr(not_int(c_pol_index)); - sp_subband_sst_crosstalk <= v_power; - IF sp_subband_sst > c_eps AND v_power > c_eps THEN - sp_subband_sst_crosstalk_snr_dB <= 10.0 * LOG10(sp_subband_sst / v_power); - ELSIF g_read_all_SST THEN - REPORT "Wrong, zero crosstalk is unexpected for SP-" & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - END IF; - - proc_common_wait_some_cycles(tb_clk, 10); - - --------------------------------------------------------------------------- - -- Log WG, subband statistics - --------------------------------------------------------------------------- - print_str(""); - print_str("WG:"); - print_str(". c_wg_ampl = " & int_to_str(c_wg_ampl)); - print_str(". c_exp_sp_power = " & real_to_str(c_exp_sp_power, 20, 1)); - print_str(". c_exp_sp_ast = " & real_to_str(c_exp_sp_ast, 20, 1)); - - print_str(""); - print_str("Subband selector:"); - print_str(". sst_offload_weighted_subbands = " & sl_to_str(sst_offload_weighted_subbands)); - - print_str(""); - print_str("Subband weight:"); - print_str(". sp_subband_weight_gain = " & real_to_str(sp_subband_weight_gain, 20, 6)); - print_str(". sp_subband_weight_phase = " & real_to_str(sp_subband_weight_phase, 20, 6)); - - print_str(""); - print_str("SST results:"); - print_str(". exp_subband_ampl = " & int_to_str(NATURAL(exp_subband_ampl))); - print_str(". exp_subband_power = " & real_to_str(exp_subband_power, 20, 1)); - print_str(". exp_subband_sst = " & real_to_str(exp_subband_sst, 20, 1)); - print_str(""); - print_str(". sp_subband_sst = " & real_to_str(sp_subband_sst, 20, 1)); - print_str(". sp_subband_sst / exp_subband_sst = " & real_to_str(sp_subband_sst / exp_subband_sst, 20, 6)); - - IF g_read_all_SST THEN - -- Log WPFB details, these are allready verified in tb of wpfb_unit_dev.vhd, so here - -- quality indicators like leakage and crosstalk are also reported out of interest. - print_str(""); - print_str("SST quality indicators"); - print_str(". sp_subband_sst_leakage = " & real_to_str(sp_subband_sst_leakage, 20, 0)); - print_str(". sp_subband_sst_leakage_snr_dB = " & real_to_str(sp_subband_sst_leakage_snr_dB, 20, 3)); - print_str(". sp_subband_sst_crosstalk = " & real_to_str(sp_subband_sst_crosstalk, 20, 0)); - print_str(". sp_subband_sst_crosstalk_snr_db = " & real_to_str(sp_subband_sst_crosstalk_snr_db, 20, 3)); - END IF; - - --------------------------------------------------------------------------- - -- Verify SST - --------------------------------------------------------------------------- - -- verify expected subband power based on WG power - ASSERT sp_subband_sst > c_lo_factor * exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - ASSERT sp_subband_sst < c_hi_factor * exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - - IF g_read_all_SST THEN - -- Verify expected SNR quality measures - ASSERT sp_subband_sst_leakage_snr_dB > c_exp_subband_sst_leakage_snr_dB REPORT "Wrong to much leakage for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - ASSERT sp_subband_sst_crosstalk_snr_dB > c_exp_subband_sst_crosstalk_snr_dB REPORT "Wrong to much crosstalk for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR; - END IF; - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd deleted file mode 100644 index 54490ceb63..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd +++ /dev/null @@ -1,249 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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: Self-checking testbench for simulating disturb2_unb2b_station_fsub capturing SST UDP offload packets. --- --- Description: --- MM control actions: --- --- 1) Enable BSN source and enable UDP offload --- --- 2) Verify ethernet statistics using eth_statistics, it checks the number of --- received packets and the total number of valid data. The content of the packets is not verified. --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_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 disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_fsub_sst_offload IS -END tb_disturb2_unb2b_station_fsub_sst_offload; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_fsub_sst_offload IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 2; - CONSTANT c_node_nr : NATURAL := 1; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb_nr * 4 + c_node_nr, 8); -- c_unb2b_board_nof_node = 4, c_unb2b_board_aux.id_w = 8 - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 80; -- long enough to stream out udp data - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - - -- MM - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_stat_enable_sst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_SST"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - SIGNAL eth_done : STD_LOGIC := '0'; - - -- . 1GbE output - CONSTANT c_eth_check_nof_packets : NATURAL := c_disturb_S_pn; -- received packets in 1 sync period - CONSTANT c_eth_header_size : NATURAL := 19; -- words - CONSTANT c_eth_crc_size : NATURAL := 1; -- word - CONSTANT c_eth_packet_size : NATURAL := c_eth_header_size + c_eth_crc_size + c_disturb_N_sub * (c_disturb_W_statistic / c_word_w); -- 20 + 512 * 2 = 1044 - CONSTANT c_eth_check_nof_valid : NATURAL := c_eth_check_nof_packets * c_eth_packet_size; - CONSTANT c_eth_runtime_timeout : TIME := 2 * c_nof_clk_per_sync * c_ext_clk_period; -- eth statistics should be done at the second sync interval - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_fsub : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_fsub", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000001#, tb_clk); -- Enable BSN immediately - - ---------------------------------------------------------------------------- - -- Offload enable - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_stat_enable_sst, 0, 1, tb_clk); - - -- wait for udp offload is done - proc_common_wait_until_high(ext_clk, eth_done); - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - - ------------------------------------------------------------------------- - -- Verify proper DUT 1GbE offload output using Ethernet packet statistics - ------------------------------------------------------------------------- - u_eth_statistics : ENTITY eth_lib.eth_statistics - GENERIC MAP ( - g_runtime_nof_packets => c_eth_check_nof_packets, - g_runtime_timeout => c_eth_runtime_timeout, - g_check_nof_valid => TRUE, - g_check_nof_valid_ref => c_eth_check_nof_valid - ) - PORT MAP ( - eth_serial_in => eth_txp(0), - tb_end => eth_done - ); - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd deleted file mode 100644 index 6637e3d666..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd +++ /dev/null @@ -1,162 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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 subband correlator design --- Description: --- Unb2b version for lab testing --- Contains complete AIT input stage with 12 ADC streams, FSUB and XSUB for XST from one node. - - -LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_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 disturb2_unb2b_station_xsub_one IS - GENERIC ( - g_design_name : STRING := "disturb2_unb2b_station_xsub_one"; - g_design_note : STRING := "Lofar2 SDP station subband correlator 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); - - -- 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); -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12 - 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) -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4 - ); -END disturb2_unb2b_station_xsub_one; - -ARCHITECTURE str OF disturb2_unb2b_station_xsub_one 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 disturb2_unb2b_station_lib.disturb2_unb2b_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, - - -- 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/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl deleted file mode 100644 index af0a453b32..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl +++ /dev/null @@ -1,24 +0,0 @@ -############################################################################### -# -# Copyright (C) 2022 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl - - diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg deleted file mode 100644 index a47af0eda8..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg +++ /dev/null @@ -1,134 +0,0 @@ -hdl_lib_name = disturb2_unb2b_station_xsub_one -hdl_library_clause_name = disturb2_unb2b_station_xsub_one_lib -hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station -hdl_lib_uses_sim = eth -hdl_lib_technology = ip_arria10_e1sg - - synth_files = - disturb2_unb2b_station_xsub_one.vhd - -test_bench_files = - tb_disturb2_unb2b_station_xsub_one.vhd - tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd - -regression_test_vhdl = - tb_disturb2_unb2b_station_xsub_one.vhd - tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd - - -[modelsim_project_file] -modelsim_copy_files = - ../../src/data data - $RADIOHDL_WORK/libraries/dsp/filter/src/hex data # FIR filter coefficients - -[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 disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz. -quartus_sdc_files = - ../../quartus/disturb2_unb2b_station.sdc - #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc - -quartus_tcl_files = - disturb2_unb2b_station_xsub_one_pins.tcl - -quartus_vhdl_files = - -quartus_qip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_xsub_one/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip - -quartus_ip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip - -nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd deleted file mode 100644 index 97b3ab1629..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd +++ /dev/null @@ -1,374 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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: Self-checking testbench for simulating disturb2_unb2b_station_xsub_one using WG data. --- --- Description: --- MM control actions: --- --- 1) Enable calc mode for WG via reg_diag_wg with: --- freq = 19.921875MHz = subband index 102 --- ampl = 0.5 * 2**13, full scale amplitude is 2**13 --- --- 2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg --- to trigger start of WG at BSN. --- --- 3) Read crosslets statistics (XST) via ram_st_xsq and verify that the values --- are as expected. This is done by comparing the values in the outgoing square --- correlation matrix. --- --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- Takes about 40 m --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_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 disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_xsub_one IS -END tb_disturb2_unb2b_station_xsub_one; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_one IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 24; - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - CONSTANT c_ctrl_interval_size : NATURAL := c_nof_clk_per_sync; - - CONSTANT c_percentage : REAL := 0.05; -- percentage that actual value may differ from expected value - CONSTANT c_lo_factor : REAL := 1.0 - c_percentage; -- lower boundary - CONSTANT c_hi_factor : REAL := 1.0 + c_percentage; -- higher boundary - - -- WG - CONSTANT c_FS_adc : REAL := REAL(c_disturb_FS_adc); -- = full scale of 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_ampl_sp_0 : NATURAL := c_disturb_FS_adc/2; -- = 0.5 * FS, so in number of lsb - CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - CONSTANT c_wg_freq_offset : REAL := 0.0/11.0; -- in freq_unit - CONSTANT c_subband_sp_0 : REAL := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz - CONSTANT c_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / c_FS_adc; -- amplitude in number of LSbit resolution steps - CONSTANT c_exp_wg_power_sp_0 : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync); - - -- WPFB - CONSTANT c_nof_pfb : NATURAL := 1; -- Verifying 1 of c_disturb_P_pfb = 6 pfb to speed up simulation. - CONSTANT c_wb_leakage_bin : NATURAL := c_wpfb_sim.nof_points / c_wpfb_sim.wb_factor; -- = 256, leakage will occur in this bin if FIR wb_factor is reversed - CONSTANT c_exp_sp_subband_power_ratio : REAL := 1.0/8.0; -- depends on internal WPFB quantization and FIR coefficients - CONSTANT c_exp_sp_subband_power_sum_ratio : REAL := c_exp_sp_subband_power_ratio; -- because all sinus power is expected in one subband - CONSTANT c_exp_subband_power_sp_0 : REAL := c_exp_wg_power_sp_0 * c_exp_sp_subband_power_ratio; - - TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; - - -- MM - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER"; - CONSTANT c_mm_file_reg_diag_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG"; - CONSTANT c_mm_file_ram_st_sst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST"; - CONSTANT c_mm_file_reg_crosslets_info : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_CROSSLETS_INFO"; - CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB"; - CONSTANT c_mm_file_ram_st_xsq : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_XSQ"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - - -- WG - SIGNAL current_bsn_wg : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - - -- WPFB - SIGNAL xsub_stats_arr : t_slv_64_arr(0 TO c_nof_complex * c_disturb_X_sq -1); - - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '1'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_xsub_one : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_xsub_one", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync, - g_scope_selected_subband => NATURAL(c_subband_sp_0) - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - VARIABLE v_bsn : NATURAL; - VARIABLE v_sp_subband_power : REAL; - VARIABLE v_W, v_C, v_A, v_X, v_B, v_A_even, v_B_even : NATURAL; -- array indicies - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000003#, tb_clk); -- Enable BSN at PPS - - -- Release PPS pulser, to get first PPS now and to start BSN source - WAIT FOR 1 us; - pps_rst <= '0'; - - ---------------------------------------------------------------------------- - -- Crosslets Info - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 0, INTEGER(c_subband_sp_0), tb_clk); -- offset - mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 15, 0 , tb_clk); -- stepsize - - ---------------------------------------------------------------------------- - -- Enable WG - ---------------------------------------------------------------------------- - -- 0 : mode[7:0] --> off=0, calc=1, repeat=2, single=3) - -- nof_samples[31:16] --> <= c_ram_wg_size=1024 - -- 1 : phase[15:0] - -- 2 : freq[30:0] - -- 3 : ampl[16:0] - FOR I IN 0 TO c_disturb_S_pn-1 LOOP - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 0, 1024*2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 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, I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk); -- ampl - END LOOP; - - -- Read current BSN - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO 0), tb_clk); - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - - -- Write scheduler BSN to trigger start of WG at next block - v_bsn := TO_UINT(current_bsn_wg) + 2; - ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR; - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, c_bsn_start_wg, tb_clk); -- first write low then high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1, 0, tb_clk); -- assume v_bsn < 2**31-1 - - -- bsn_scheduler_xsub - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 1, c_ctrl_interval_size, tb_clk); -- Interval size - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 2, c_bsn_start_wg, tb_clk); -- first write low then high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 3, 0, tb_clk); -- assume v_bsn < 2**31-1 - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 0, 1, tb_clk); -- enable - - -- Wait for enough WG data and start of sync interval - mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0, -- read BSN low - "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 2, -- this is the wait until condition - c_disturb_T_sub, tb_clk); - - --------------------------------------------------------------------------- - -- Read crosslet statistics - --------------------------------------------------------------------------- - FOR I IN 0 TO c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz) -1 LOOP - v_W := I MOD 2; - v_B := I / 2; - IF v_W=0 THEN - -- low part - mmf_mm_bus_rd(c_mm_file_ram_st_xsq, I, rd_data, tb_clk); - xsub_stats_arr(v_B)(31 DOWNTO 0) <= rd_data; - ELSE - -- high part - mmf_mm_bus_rd(c_mm_file_ram_st_xsq, I, rd_data, tb_clk); - xsub_stats_arr(v_B)(63 DOWNTO 32) <= rd_data; - END IF; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - - --------------------------------------------------------------------------- - -- Verify crosslet statistics - --------------------------------------------------------------------------- - -- With all WGs having the same input all crosslets should be identical. Due to quantization cross talk - -- between the two real inputs of the filterbank the two signals in the output pairs per P_pfb differ - -- slightly, therefore 3 slightly different correlation values are expected. 1 for each correlation - -- between even indexed signals, 1 for odd indexed signals and 1 for correlations between even and odd - -- indexed signals. This is verified by checking if these values are the same. - FOR I IN 0 TO c_nof_complex * c_disturb_X_sq -1 LOOP - v_C := I MOD 2; - v_X := I /c_nof_complex; - v_A := v_X MOD c_disturb_S_pn; - v_B := v_X / c_disturb_S_pn; - v_A_even := v_A MOD 2; - v_B_even := v_B MOD 2; - - -- Check real values of even indices - IF v_C=0 AND v_A_even=0 AND v_B_even=0 THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(0)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check real values of odd indices - IF v_C=0 AND v_A_even=1 AND v_B_even=1 THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex)) REPORT "correlation between odd indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check real values of even correlated with odd indices - IF v_C=0 AND (v_A_even=0 XOR v_B_even=0) THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(1 * c_nof_complex)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Using absolute value of the imaginary part (force positive) as the sign can be opposite when comparing A to B vs B to A. - -- Check im values of even indices - IF v_C=1 AND v_A_even=0 AND v_B_even=0 THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1))) REPORT "correlation between even indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check im values of odd indices - IF v_C=1 AND v_A_even=1 AND v_B_even=1 THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex + 1))) REPORT "correlation between odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check im values of even correlated with odd indices - IF v_C=1 AND (v_A_even=0 XOR v_B_even=0) THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1 * c_nof_complex + 1))) REPORT "correlation between even/odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check if values are > 0 - IF v_C=0 THEN ASSERT (SIGNED(xsub_stats_arr(I)) > TO_SIGNED(0, c_longword_w)) REPORT "correlation is 0 which is unexpected! at I = " & int_to_str(I) SEVERITY ERROR; END IF; - END LOOP; - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd deleted file mode 100644 index 78df44f1ac..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd +++ /dev/null @@ -1,264 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2020 --- 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: Self-checking testbench for simulating disturb2_unb2b_station_xsub_one capturing BST UDP offload packets. --- --- Description: --- MM control actions: --- --- 1) Enable BSN source and enable BST offload --- --- 2) Verify ethernet statistics using eth_statistics, it checks the number of --- received packets and the total number of valid data. The content of the packets is not verified. --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- Takes about 10 m --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_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 disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_xsub_one_xst_offload IS -END tb_disturb2_unb2b_station_xsub_one_xst_offload; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_one_xst_offload IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 2; - CONSTANT c_node_nr : NATURAL := 1; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb_nr * 4 + c_node_nr, 8); -- c_unb2b_board_nof_node = 4, c_unb2b_board_aux.id_w = 8 - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 16; -- long enough to stream out udp data - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - CONSTANT c_ctrl_interval_size : NATURAL := c_nof_clk_per_sync; - - -- MM - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_stat_enable_xst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_XST"; - CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - SIGNAL eth_done : STD_LOGIC := '0'; - - -- . 1GbE output - CONSTANT c_eth_check_nof_packets : NATURAL := 1; -- received packets in 1 sync period - CONSTANT c_eth_header_size : NATURAL := 19; -- words - CONSTANT c_eth_crc_size : NATURAL := 1; -- word - CONSTANT c_eth_packet_size : NATURAL := c_eth_header_size + c_eth_crc_size + (c_disturb_W_statistic / c_word_w) * c_disturb_S_pn * c_disturb_S_pn * c_nof_complex; -- 20 + 2 * 12 * 12 * 2 = 596 - CONSTANT c_eth_check_nof_valid : NATURAL := c_eth_check_nof_packets * c_eth_packet_size; - CONSTANT c_eth_runtime_timeout : TIME := 3 * c_nof_clk_per_sync * c_ext_clk_period; -- eth statistics should be done at the third sync interval - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '1'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - u_lofar_unb2b_disturb_station_xsub_one : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_xsub_one", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr, - g_sim_node_nr => c_node_nr, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => c_id, - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3, 0, tb_clk); - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0, 16#00000001#, tb_clk); -- Enable BSN immediately - - -- Release PPS pulser, to get first PPS now and to start BSN source - WAIT FOR 1 us; - pps_rst <= '0'; - - ---------------------------------------------------------------------------- - -- Enable xsub - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 1, c_ctrl_interval_size, tb_clk); -- Interval size - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 2, c_nof_block_per_sync, tb_clk); -- first write bsn low then bsn high part - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 3, 0, tb_clk); -- bsn high, assume v_bsn < 2**31-1 - mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 0, 1, tb_clk); -- enable - - ---------------------------------------------------------------------------- - -- Offload enable - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(c_mm_file_reg_stat_enable_xst, 0, 1, tb_clk); - - -- wait for udp offload is done - proc_common_wait_until_high(ext_clk, eth_done); - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - - ------------------------------------------------------------------------- - -- Verify proper DUT 1GbE offload output using Ethernet packet statistics - ------------------------------------------------------------------------- - u_eth_statistics : ENTITY eth_lib.eth_statistics - GENERIC MAP ( - g_runtime_nof_packets => c_eth_check_nof_packets, - g_runtime_timeout => c_eth_runtime_timeout, - g_check_nof_valid => TRUE, - g_check_nof_valid_ref => c_eth_check_nof_valid - ) - PORT MAP ( - eth_serial_in => eth_txp(0), - tb_end => eth_done - ); - -END tb; diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd deleted file mode 100644 index ff25b18ed0..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd +++ /dev/null @@ -1,195 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2022 --- 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 xsub_ring design --- Description: --- Unb2b version for lab testing --- Contains complete SDP station design with AIT input stage with 12 ADC streams, FSUB, XSUB with ring - - -LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_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 disturb2_unb2b_station_xsub_ring IS - GENERIC ( - g_design_name : STRING := "disturb2_unb2b_station_xsub_ring"; - g_design_note : STRING := "Lofar2 SDP station xsub_ring 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 QSFP0 for Ring. - QSFP_0_RX : IN STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0) := (OTHERS=>'0'); - QSFP_0_TX : OUT STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0); - - -- front transceivers QSFP1 for 10GbE output to CEP. - 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); - - -- 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 - 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 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); -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12 - 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) -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4 - ); -END disturb2_unb2b_station_xsub_ring; - -ARCHITECTURE str OF disturb2_unb2b_station_xsub_ring 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_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(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 disturb2_unb2b_station_lib.disturb2_unb2b_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 QSFP0 for Ring. - QSFP_0_RX => QSFP_0_RX, - QSFP_0_TX => QSFP_0_TX, - - -- front transceivers QSFP1 for 10GbE output to CEP. - QSFP_1_RX => QSFP_1_RX, - QSFP_1_TX => QSFP_1_TX, - -- LEDs - QSFP_LED => QSFP_LED, - - -- ring transceivers - RING_0_RX => RING_0_RX, - RING_0_TX => RING_0_TX, - RING_1_RX => RING_1_RX, - RING_1_TX => RING_1_TX, - - -- 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/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl deleted file mode 100644 index f9917ffc36..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################### -# -# Copyright (C) 2022 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl -source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_ring_pins.tcl - - diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg deleted file mode 100644 index 53de362dd0..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg +++ /dev/null @@ -1,132 +0,0 @@ -hdl_lib_name = disturb2_unb2b_station_xsub_ring -hdl_library_clause_name = disturb2_unb2b_station_xsub_ring_lib -hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station -hdl_lib_uses_sim = eth -hdl_lib_technology = ip_arria10_e1sg - - synth_files = - disturb2_unb2b_station_xsub_ring.vhd - -test_bench_files = - tb_disturb2_unb2b_station_xsub_ring.vhd - -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 disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz. -quartus_sdc_files = - ../../quartus/disturb2_unb2b_station.sdc - #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc - -quartus_tcl_files = - disturb2_unb2b_station_xsub_ring_pins.tcl - -quartus_vhdl_files = - -quartus_qip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_xsub_ring/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip - -quartus_ip_files = - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip - $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip - -nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2 diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd deleted file mode 100644 index 217705f07a..0000000000 --- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd +++ /dev/null @@ -1,491 +0,0 @@ -------------------------------------------------------------------------------- --- --- 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: Self-checking testbench for simulating disturb2_unb2b_station_xsub_ring using WG data. --- --- Description: --- MM control actions: --- --- 1) Enable calc mode for WG via reg_diag_wg with: --- freq = 19.921875MHz = subband index 102 --- ampl = 0.5 * 2**13, full scale amplitude is 2**13 --- --- 2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg --- to trigger start of WG at BSN. --- --- 3) Read crosslets statistics (XST) via ram_st_xsq and verify that the values --- are as expected. This is done by comparing the values in the outgoing square --- correlation matrix. --- --- --- Usage: --- > as 7 # default --- > as 12 # for detailed debugging --- > run -a --- Takes about 40 m --- -------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, tech_pll_lib, disturb2_unb2b_station_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 tech_pll_lib.tech_pll_component_pkg.ALL; -USE disturb_lib.disturb_pkg.ALL; - -ENTITY tb_disturb2_unb2b_station_xsub_ring IS -END tb_disturb2_unb2b_station_xsub_ring; - -ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_ring IS - - CONSTANT c_sim : BOOLEAN := TRUE; - CONSTANT c_unb_nr : NATURAL := 0; -- UniBoard 0 - CONSTANT c_node_nr : NATURAL := 0; - CONSTANT c_nof_rn : NATURAL := 2; - CONSTANT c_P_sq : NATURAL := (c_nof_rn / 2) + 1; - CONSTANT c_id : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; - CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; - CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 0); - - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard - CONSTANT c_ext_clk_period : TIME := 5 ns; - CONSTANT c_bck_ref_clk_period : TIME := 5 ns; - CONSTANT c_sa_clk_period : TIME := tech_pll_clk_644_period; -- 644MHz - - CONSTANT c_tb_clk_period : TIME := 100 ps; -- use fast tb_clk to speed up M&C - - CONSTANT c_nof_block_per_sync : NATURAL := 24; - CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync*c_disturb_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_disturb_wpfb_subbands, c_nof_block_per_sync); - CONSTANT c_ctrl_interval_size : NATURAL := c_nof_clk_per_sync; - - CONSTANT c_percentage : REAL := 0.05; -- percentage that actual value may differ from expected value - CONSTANT c_lo_factor : REAL := 1.0 - c_percentage; -- lower boundary - CONSTANT c_hi_factor : REAL := 1.0 + c_percentage; -- higher boundary - CONSTANT c_nof_lanes : NATURAL := 1; - - -- WG - CONSTANT c_FS_adc : REAL := REAL(c_disturb_FS_adc); -- = full scale of 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_ampl_sp_0 : NATURAL := c_disturb_FS_adc/2; -- = 0.5 * FS, so in number of lsb - CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - CONSTANT c_wg_freq_offset : REAL := 0.0/11.0; -- in freq_unit - CONSTANT c_subband_sp_0 : REAL := 102.0; -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz - CONSTANT c_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / c_FS_adc; -- amplitude in number of LSbit resolution steps - CONSTANT c_exp_wg_power_sp_0 : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync); - - -- WPFB - CONSTANT c_nof_pfb : NATURAL := 1; -- Verifying 1 of c_disturb_P_pfb = 6 pfb to speed up simulation. - CONSTANT c_wb_leakage_bin : NATURAL := c_wpfb_sim.nof_points / c_wpfb_sim.wb_factor; -- = 256, leakage will occur in this bin if FIR wb_factor is reversed - CONSTANT c_exp_sp_subband_power_ratio : REAL := 1.0/8.0; -- depends on internal WPFB quantization and FIR coefficients - CONSTANT c_exp_sp_subband_power_sum_ratio : REAL := c_exp_sp_subband_power_ratio; -- because all sinus power is expected in one subband - CONSTANT c_exp_subband_power_sp_0 : REAL := c_exp_wg_power_sp_0 * c_exp_sp_subband_power_ratio; - - TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; - - -- MM - CONSTANT c_mm_file_reg_bsn_source_v2 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; - CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER"; - CONSTANT c_mm_file_reg_diag_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG"; - CONSTANT c_mm_file_ram_st_sst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST"; - CONSTANT c_mm_file_reg_crosslets_info : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_CROSSLETS_INFO"; - CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB"; - CONSTANT c_mm_file_ram_st_xsq : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_XSQ"; - - -- Tb - SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL sim_done : STD_LOGIC := '0'; - SIGNAL tb_clk : STD_LOGIC := '0'; - SIGNAL rd_data : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0'); - - SIGNAL i_QSFP_0_TX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - SIGNAL i_QSFP_0_RX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - SIGNAL i_RING_0_TX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - SIGNAL i_RING_0_RX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - SIGNAL i_RING_1_TX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - SIGNAL i_RING_1_RX : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0')); - - -- WG - SIGNAL current_bsn_wg : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); - - -- WPFB - SIGNAL xsub_stats_arr : t_slv_64_arr(0 TO c_P_sq * c_nof_complex * c_disturb_X_sq -1); - - - -- DUT - SIGNAL ext_clk : STD_LOGIC := '0'; - SIGNAL pps : STD_LOGIC := '0'; - SIGNAL ext_pps : STD_LOGIC := '0'; - SIGNAL pps_rst : STD_LOGIC := '1'; - SIGNAL SA_CLK : STD_LOGIC := '0'; - - SIGNAL WDI : STD_LOGIC; - SIGNAL INTA : STD_LOGIC; - SIGNAL INTB : STD_LOGIC; - - SIGNAL eth_clk : STD_LOGIC := '0'; - SIGNAL eth_txp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - SIGNAL eth_rxp : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0'); - - SIGNAL sens_scl : STD_LOGIC; - SIGNAL sens_sda : STD_LOGIC; - SIGNAL pmbus_scl : STD_LOGIC; - SIGNAL pmbus_sda : STD_LOGIC; - - -- back transceivers - SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0); - SIGNAL JESD204B_REFCLK : STD_LOGIC := '1'; - - -- jesd204b syncronization signals - SIGNAL jesd204b_sysref : STD_LOGIC; - SIGNAL jesd204b_sync_n : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0); - -BEGIN - - ---------------------------------------------------------------------------- - -- System setup - ---------------------------------------------------------------------------- - ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2; -- External clock (200 MHz) - JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2; -- JESD sample clock (200MHz) - eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; -- Ethernet ref clock (125 MHz) - SA_CLK <= NOT SA_CLK AFTER c_sa_clk_period/2; -- Serial Gigabit IO sa clock (644 MHz) - - INTA <= 'H'; -- pull up - INTB <= 'H'; -- pull up - - sens_scl <= 'H'; -- pull up - sens_sda <= 'H'; -- pull up - pmbus_scl <= 'H'; -- pull up - pmbus_sda <= 'H'; -- pull up - - ------------------------------------------------------------------------------ - -- External PPS - ------------------------------------------------------------------------------ - proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps); - jesd204b_sysref <= pps; - ext_pps <= pps; - - ------------------------------------------------------------------------------ - -- DUT - ------------------------------------------------------------------------------ - gen_dut : FOR RN IN 0 TO c_nof_rn -1 GENERATE - u_lofar_unb2b_disturb_station_xsub_ring : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station - GENERIC MAP ( - g_design_name => "disturb2_unb2b_station_xsub_ring", - g_design_note => "", - g_sim => c_sim, - g_sim_unb_nr => c_unb_nr + (RN / c_quad), - g_sim_node_nr => RN MOD c_quad, - g_wpfb => c_wpfb_sim, - g_bsn_nof_clk_per_sync => c_nof_clk_per_sync, - g_scope_selected_subband => NATURAL(c_subband_sp_0) - ) - PORT MAP ( - -- GENERAL - CLK => ext_clk, - PPS => pps, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => c_version, - ID => ( TO_UVEC(RN / c_quad, c_unb2b_board_nof_uniboard_w) & TO_UVEC(RN MOD c_quad, c_unb2b_board_nof_chip_w) ), - TESTIO => open, - - -- I2C Interface to Sensors - SENS_SC => sens_scl, - SENS_SD => sens_sda, - - PMBUS_SC => pmbus_scl, - PMBUS_SD => pmbus_sda, - PMBUS_ALERT => open, - - -- 1GbE Control Interface - ETH_CLK => eth_clk, - ETH_SGIN => eth_rxp, - ETH_SGOUT => eth_txp, - - -- Transceiver clocks - SA_CLK => SA_CLK, - -- front transceivers - QSFP_0_RX => i_QSFP_0_RX(RN), - QSFP_0_TX => i_QSFP_0_TX(RN), - - -- ring transceivers - RING_0_RX => i_RING_0_RX(RN), - RING_0_TX => i_RING_0_TX(RN), - RING_1_RX => i_RING_1_RX(RN), - RING_1_TX => i_RING_1_TX(RN), - - -- LEDs - QSFP_LED => open, - - -- 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 - ); - END GENERATE; - - -- Ring connections - gen_ring : FOR I IN 0 TO c_nof_rn -2 GENERATE - -- Connect consecutive nodes with RING interfaces (PCB) - i_RING_0_RX(I+1) <= i_RING_1_TX(I); - i_RING_1_RX(I) <= i_RING_0_TX(I+1); - END GENERATE; - -- Connect first and last nodes with QSFP interface. - i_QSFP_0_RX(0) <= i_QSFP_0_TX(c_nof_rn-1); - i_QSFP_0_RX(c_nof_rn-1) <= i_QSFP_0_TX(0); - - - ------------------------------------------------------------------------------ - -- MM slave accesses via file IO - ------------------------------------------------------------------------------ - tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2; -- Testbench MM clock - - p_mm_stimuli : PROCESS - VARIABLE v_bsn : NATURAL; - VARIABLE v_sp_subband_power : REAL; - VARIABLE v_W, v_C, v_A, v_X, v_B, v_A_even, v_B_even, v_SQ_offset: NATURAL; -- array indicies - BEGIN - -- Wait for DUT power up after reset - WAIT FOR 1 us; - - ---------------------------------------------------------------------------- - -- Enable BSN - ---------------------------------------------------------------------------- - FOR RN IN 0 TO c_nof_rn-1 LOOP - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 3, 0, tb_clk); - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 2, 0, tb_clk); -- Init BSN = 0 - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 1, c_nof_clk_per_sync, tb_clk); -- nof_block_per_sync - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 0, 16#00000003#, tb_clk); -- Enable BSN at PPS - END LOOP; - - -- Release PPS pulser, to get first PPS now and to start BSN source - WAIT FOR 1 us; - pps_rst <= '0'; - proc_common_wait_until_hi_lo(ext_clk, ext_pps); - - ---------------------------------------------------------------------------- - -- Ring config - ---------------------------------------------------------------------------- - -- Write ring configuration to all nodes. - FOR RN IN 0 TO c_nof_rn-1 LOOP - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_INFO", 2, c_nof_rn, tb_clk); -- N_rn - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_INFO", 3, 0, tb_clk); -- O_rn - END LOOP; - - -- Start node specific settings - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr, 0) & "REG_RING_INFO", 0, 1, tb_clk); -- use_ring_to_previous_rn = 1 - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr, 0) & "REG_RING_INFO", 1, 0, tb_clk); -- use_ring_to_next_rn = 0 - - -- End node specific settings - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + ((c_nof_rn-1) / c_quad), (c_nof_rn-1) MOD c_quad) & "REG_RING_INFO", 0, 0, tb_clk); -- use_ring_to_previous_rn = 0 - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + ((c_nof_rn-1) / c_quad), (c_nof_rn-1) MOD c_quad) & "REG_RING_INFO", 1, 1, tb_clk); -- use_ring_to_next_rn = 1 - - -- Access scheme 3. Each RN creates packets and sends them along the ring. - FOR RN IN 0 TO c_nof_rn-1 LOOP - FOR I IN 0 TO c_nof_lanes-1 LOOP - -- Set transport_nof_hops to N_rn-1 on all nodes. - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_LANE_INFO_XST", I*2+1, c_nof_rn-1, tb_clk); - END LOOP; - - ---------------------------------------------------------------------------- - -- Disable unused streams in dp_bsn_align_v2 - ---------------------------------------------------------------------------- - FOR I IN 0 TO c_disturb_P_sq-1 LOOP - IF I >= c_P_sq THEN - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_ALIGN_V2_XSUB", I, 0, tb_clk); - END IF; - END LOOP; - - ---------------------------------------------------------------------------- - -- Crosslets Info - ---------------------------------------------------------------------------- - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_CROSSLETS_INFO", 0, INTEGER(c_subband_sp_0), tb_clk); -- offset - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_CROSSLETS_INFO", 15, 0 , tb_clk); -- stepsize - END LOOP; - ---------------------------------------------------------------------------- - -- Enable WG - ---------------------------------------------------------------------------- - -- 0 : mode[7:0] --> off=0, calc=1, repeat=2, single=3) - -- nof_samples[31:16] --> <= c_ram_wg_size=1024 - -- 1 : phase[15:0] - -- 2 : freq[30:0] - -- 3 : ampl[16:0] - FOR RN IN 0 TO c_nof_rn-1 LOOP - FOR I IN 0 TO c_disturb_S_pn-1 LOOP - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 0, 1024*2**16 + 1, tb_clk); -- nof_samples, mode calc - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 1, INTEGER( 0.0 * c_diag_wg_phase_unit), tb_clk); -- phase offset in degrees - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk); -- freq - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk); -- ampl - END LOOP; - END LOOP; - - -- Read current BSN - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO 0), tb_clk); - mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk); - proc_common_wait_some_cycles(tb_clk, 1); - - -- Write scheduler BSN to trigger start of WG at next block - v_bsn := TO_UINT(current_bsn_wg) + 2; - ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR; - - - FOR RN IN 0 TO c_nof_rn-1 LOOP - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SCHEDULER", 0, c_bsn_start_wg, tb_clk); -- first write low then high part - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SCHEDULER", 1, 0, tb_clk); -- assume v_bsn < 2**31-1 - - -- bsn_scheduler_xsub - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 1, c_ctrl_interval_size, tb_clk); -- Interval size - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 2, c_bsn_start_wg, tb_clk); -- first write low then high part - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 3, 0, tb_clk); -- assume v_bsn < 2**31-1 - mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 0, 1, tb_clk); -- enable - END LOOP; - - -- Wait for enough WG data and start of sync interval - mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0, -- read BSN low - "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 2, -- this is the wait until condition - c_disturb_T_sub, tb_clk); - - --------------------------------------------------------------------------- - -- Read crosslet statistics - --------------------------------------------------------------------------- - -- Only checking P_sq index = 1 (correlating singnals from node 0 and 1) as P_sq index = 0 is verified in tb_disturb2_unb2b_station_xsub_one. - -- Also in simulation, the MM file IO is too slow to read and verify more than 1 P_sq during 1 sync interval. Also, this way the simulation duration is shorter. - FOR I IN 0 TO c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz) -1 LOOP - v_W := I MOD 2; - v_B := I / 2; - v_SQ_offset := 2**ceil_log2(c_disturb_N_crosslets_max * c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz)); -- Address offset for next P_sq. - IF v_W=0 THEN - -- low part - mmf_mm_bus_rd(c_mm_file_ram_st_xsq, v_SQ_offset + I, rd_data, tb_clk); - xsub_stats_arr(v_B)(31 DOWNTO 0) <= rd_data; - ELSE - -- high part - mmf_mm_bus_rd(c_mm_file_ram_st_xsq, v_SQ_offset + I, rd_data, tb_clk); - xsub_stats_arr(v_B)(63 DOWNTO 32) <= rd_data; - END IF; - END LOOP; - proc_common_wait_some_cycles(tb_clk, 1); - - --------------------------------------------------------------------------- - -- Verify crosslet statistics - --------------------------------------------------------------------------- - -- With all WGs having the same input all crosslets should be identical. Due to quantization cross talk - -- between the two real inputs of the filterbank the two signals in the output pairs per P_pfb differ - -- slightly, therefore 3 slightly different correlation values are expected. 1 for each correlation - -- between even indexed signals, 1 for odd indexed signals and 1 for correlations between even and odd - -- indexed signals. This is verified by checking if these values are the same. - FOR I IN 0 TO c_nof_complex * c_disturb_X_sq -1 LOOP - v_C := I MOD 2; - v_X := I /c_nof_complex; - v_A := v_X MOD c_disturb_S_pn; - v_B := v_X / c_disturb_S_pn; - v_A_even := v_A MOD 2; - v_B_even := v_B MOD 2; - - -- Check real values of even indices - IF v_C=0 AND v_A_even=0 AND v_B_even=0 THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(0)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check real values of odd indices - IF v_C=0 AND v_A_even=1 AND v_B_even=1 THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex)) REPORT "correlation between odd indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check real values of even correlated with odd indices - IF v_C=0 AND (v_A_even=0 XOR v_B_even=0) THEN - ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(1 * c_nof_complex)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Using absolute value of the imaginary part (force positive) as the sign can be opposite when comparing A to B vs B to A. - -- Check im values of even indices - IF v_C=1 AND v_A_even=0 AND v_B_even=0 THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1))) REPORT "correlation between even indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check im values of odd indices - IF v_C=1 AND v_A_even=1 AND v_B_even=1 THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex + 1))) REPORT "correlation between odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check im values of even correlated with odd indices - IF v_C=1 AND (v_A_even=0 XOR v_B_even=0) THEN - ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1 * c_nof_complex + 1))) REPORT "correlation between even/odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF; - - -- Check if values are > 0 - IF v_C=0 THEN ASSERT (SIGNED(xsub_stats_arr(I)) > TO_SIGNED(0, c_longword_w)) REPORT "correlation is 0 which is unexpected! at I = " & int_to_str(I) SEVERITY ERROR; END IF; - END LOOP; - - ---------------------------------------------------------------------------- - -- Reporting BSN monitors of the bsn_align_v2 - ---------------------------------------------------------------------------- - FOR RN IN 0 TO c_nof_rn-1 LOOP - FOR J IN 0 TO c_P_sq-1 LOOP -- bsn_monitor index - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+0, rd_data, tb_clk); --status bits - REPORT "sync_timeout = " & INTEGER'IMAGE(TO_UINT(rd_data(2 DOWNTO 2))) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+1, rd_data, tb_clk); --bsn at sync - REPORT "bsn_at_sync = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+3, rd_data, tb_clk); --nof_sop - REPORT "nof_sop = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+4, rd_data, tb_clk); --nof_valid - REPORT "nof_valid = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+5, rd_data, tb_clk); --nof_err - REPORT "nof_err = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+6, rd_data, tb_clk); --latency - REPORT "latency = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE; - END LOOP; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 0, rd_data, tb_clk); --status bits - REPORT "sync_timeout = " & INTEGER'IMAGE(TO_UINT(rd_data(2 DOWNTO 2))) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 1, rd_data, tb_clk); --bsn at sync - REPORT "bsn_at_sync = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 3, rd_data, tb_clk); --nof_sop - REPORT "nof_sop = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 4, rd_data, tb_clk); --nof_valid - REPORT "nof_valid = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 5, rd_data, tb_clk); --nof_err - REPORT "nof_err = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 6, rd_data, tb_clk); --latency - REPORT "latency = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; - END LOOP; - - --------------------------------------------------------------------------- - -- End Simulation - --------------------------------------------------------------------------- - sim_done <= '1'; - proc_common_wait_some_cycles(ext_clk, 100); - proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end); - WAIT; - END PROCESS; - -END tb; -- GitLab