Skip to content
Snippets Groups Projects
Commit bce684ca authored by Reinier van der Walle's avatar Reinier van der Walle
Browse files

initial commit of oversampled filterbank

parent 70b28ffc
No related branches found
No related tags found
2 merge requests!277Resolve DIST2-2,!276Resolve DISTURB-2
Pipeline #31910 failed
Showing
with 17497 additions and 0 deletions
-------------------------------------------------------------------------------
--
-- 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, 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 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;
###############################################################################
#
# 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
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
-------------------------------------------------------------------------------
--
-- 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 := 160; -- 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_V_oversample * 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;
......@@ -18,6 +18,7 @@ synth_files =
src/vhdl/disturb_crosslets_subband_select.vhd
src/vhdl/node_disturb_adc_input_and_timing.vhd
src/vhdl/node_disturb_filterbank.vhd
src/vhdl/node_disturb_oversampled_filterbank.vhd
src/vhdl/node_disturb_beamformer.vhd
src/vhdl/node_disturb_correlator.vhd
src/vhdl/disturb_station.vhd
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment