diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_sdp_station/hdllib.cfg index 1ad8c0ef3061ad9ea5983c4c3b9ceae73e703ff2..06ef74274b9d1dea1c90fc2eb73d8d9bf0ff6499 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/hdllib.cfg @@ -7,10 +7,10 @@ hdl_lib_include_ip = ip_arria10_e1sg_mac_10g ip_arria10_e1sg_pll_xgmii_mac_clocks ip_arria10_e1sg_transceiver_pll_10g - ip_arria10_e1sg_phy_10gbase_r - + ip_arria10_e1sg_phy_10gbase_r_3 ip_arria10_e1sg_transceiver_reset_controller_1 + ip_arria10_e1sg_transceiver_reset_controller_3 synth_files = src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/lofar2_unb2b_sdp_station.fpga.yaml b/applications/lofar2/designs/lofar2_unb2b_sdp_station/lofar2_unb2b_sdp_station.fpga.yaml index 930b1b6496ac4f82ceba721970d004df804014e2..03dbe0e4275428f130989cd2766888fee4706020 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/lofar2_unb2b_sdp_station.fpga.yaml +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/lofar2_unb2b_sdp_station.fpga.yaml @@ -234,7 +234,7 @@ peripherals: ############################################################################# # Xsub = Subband Correlator (from node_sdp_correlator.vhd) ############################################################################# - + - peripheral_name: dp/dp_bsn_sync_scheduler peripheral_group: xsub mm_port_names: @@ -267,6 +267,8 @@ peripherals: - peripheral_name: dp/dp_bsn_align_v2 peripheral_group: xsub + parameter_overrides: + - { name: g_nof_streams, value: c_P_sq } mm_port_names: - REG_BSN_ALIGN @@ -314,7 +316,7 @@ peripherals: parameter_overrides: - { name: g_nof_err_counts, value: c_lane_nof_err_counts } mm_port_names: - - REG_DP_BLOCK_VALIDATE_ERR__XST + - REG_DP_BLOCK_VALIDATE_ERR_XST - peripheral_name: dp/dp_block_validate_bsn_at_sync mm_port_names: diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys index ae0888536aeedbec63c93cb0f41f88047f2254bb..d9ec6d491a768558510f923304dbc447798c4309 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys @@ -2008,6 +2008,76 @@ internal="reg_bsn_monitor_input.writedata" type="conduit" dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_address" + internal="reg_bsn_monitor_v2_bsn_align_input.address" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_clk" + internal="reg_bsn_monitor_v2_bsn_align_input.clk" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_read" + internal="reg_bsn_monitor_v2_bsn_align_input.read" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_readdata" + internal="reg_bsn_monitor_v2_bsn_align_input.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_reset" + internal="reg_bsn_monitor_v2_bsn_align_input.reset" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_write" + internal="reg_bsn_monitor_v2_bsn_align_input.write" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_writedata" + internal="reg_bsn_monitor_v2_bsn_align_input.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_address" + internal="reg_bsn_monitor_v2_bsn_align_output.address" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_clk" + internal="reg_bsn_monitor_v2_bsn_align_output.clk" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_read" + internal="reg_bsn_monitor_v2_bsn_align_output.read" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_readdata" + internal="reg_bsn_monitor_v2_bsn_align_output.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_reset" + internal="reg_bsn_monitor_v2_bsn_align_output.reset" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_write" + internal="reg_bsn_monitor_v2_bsn_align_output.write" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_writedata" + internal="reg_bsn_monitor_v2_bsn_align_output.writedata" + type="conduit" + dir="end" /> <interface name="reg_bsn_monitor_v2_ring_rx_xst_address" internal="reg_bsn_monitor_v2_ring_rx_xst.address" @@ -2634,41 +2704,6 @@ internal="reg_hdr_dat.writedata" type="conduit" dir="end" /> - <interface - name="reg_input_monitor_address" - internal="reg_bsn_monitor_v2_bsn_align_input.address" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_clk" - internal="reg_bsn_monitor_v2_bsn_align_input.clk" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_read" - internal="reg_bsn_monitor_v2_bsn_align_input.read" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_readdata" - internal="reg_bsn_monitor_v2_bsn_align_input.readdata" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_reset" - internal="reg_bsn_monitor_v2_bsn_align_input.reset" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_write" - internal="reg_bsn_monitor_v2_bsn_align_input.write" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_writedata" - internal="reg_bsn_monitor_v2_bsn_align_input.writedata" - type="conduit" - dir="end" /> <interface name="reg_mmdp_ctrl_address" internal="reg_mmdp_ctrl.address" @@ -2844,41 +2879,6 @@ internal="reg_nw_10gbe_mac.writedata" type="conduit" dir="end" /> - <interface - name="reg_output_monitor_address" - internal="reg_bsn_monitor_v2_bsn_align_output.address" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_clk" - internal="reg_bsn_monitor_v2_bsn_align_output.clk" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_read" - internal="reg_bsn_monitor_v2_bsn_align_output.read" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_readdata" - internal="reg_bsn_monitor_v2_bsn_align_output.readdata" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_reset" - internal="reg_bsn_monitor_v2_bsn_align_output.reset" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_write" - internal="reg_bsn_monitor_v2_bsn_align_output.write" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_writedata" - internal="reg_bsn_monitor_v2_bsn_align_output.writedata" - type="conduit" - dir="end" /> <interface name="reg_remu_address" internal="reg_remu.address" @@ -20804,7 +20804,7 @@ </fileSets> </generationInfoDefinition>]]></parameter> <parameter name="hlsFile" value="" /> - <parameter name="logicalView">/home/walle/git-lofar/hdl/build/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip</parameter> + <parameter name="logicalView">../lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip</parameter> <parameter name="moduleAssignmentDefinition"><![CDATA[<assignmentDefinition> <assignmentValueMap/> </assignmentDefinition>]]></parameter> @@ -21420,7 +21420,7 @@ </fileSets> </generationInfoDefinition>]]></parameter> <parameter name="hlsFile" value="" /> - <parameter name="logicalView">/home/walle/git-lofar/hdl/build/unb2b/quartus/lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip</parameter> + <parameter name="logicalView">../lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip</parameter> <parameter name="moduleAssignmentDefinition"><![CDATA[<assignmentDefinition> <assignmentValueMap/> </assignmentDefinition>]]></parameter> diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/hdllib.cfg index a794505be0ddfe6ad85c2d1eba571ece74bc2348..8057d50655a1a0ccd51c795fd4669846d07fe783 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/hdllib.cfg @@ -8,6 +8,7 @@ hdl_lib_technology = ip_arria10_e1sg lofar2_unb2b_sdp_station_xsub_ring.vhd test_bench_files = + tb_lofar2_unb2b_sdp_station_xsub_ring.vhd regression_test_vhdl = diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd new file mode 100644 index 0000000000000000000000000000000000000000..9ae1074186aa6132c583d7fde0ca595bfd437d4e --- /dev/null +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd @@ -0,0 +1,487 @@ +------------------------------------------------------------------------------- +-- +-- 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 lofar2_unb2b_sdp_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, lofar2_sdp_lib, wpfb_lib, tech_pll_lib, lofar2_unb2b_sdp_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 lofar2_sdp_lib.sdp_pkg.ALL; + +ENTITY tb_lofar2_unb2b_sdp_station_xsub_ring IS +END tb_lofar2_unb2b_sdp_station_xsub_ring; + +ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_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_sdp_N_fft; + CONSTANT c_pps_period : NATURAL := c_nof_clk_per_sync; + CONSTANT c_wpfb_sim : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync); + CONSTANT c_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_sdp_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_sdp_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_sdp_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_sdp_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_sdp_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_sdp_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_sdp_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_sdp_station_xsub_ring : ENTITY lofar2_unb2b_sdp_station_lib.lofar2_unb2b_sdp_station + GENERIC MAP ( + g_design_name => "lofar2_unb2b_sdp_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_sdp_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", 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_sdp_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_sdp_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_lofar2_unb2b_sdp_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_sdp_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_sdp_N_crosslets_max * c_nof_complex * c_sdp_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_sdp_X_sq -1 LOOP + v_C := I MOD 2; + v_X := I /c_nof_complex; + v_A := v_X MOD c_sdp_S_pn; + v_B := v_X / c_sdp_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_sdp_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_sdp_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_BSN_ALIGN_INPUT", 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_bsn_align_input 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_BSN_ALIGN_INPUT", 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_bsn_align_input 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_BSN_ALIGN_INPUT", J * 8+3, rd_data, tb_clk); --nof_sop + REPORT "nof_sop = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_input 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_BSN_ALIGN_INPUT", J * 8+4, rd_data, tb_clk); --nof_valid + REPORT "nof_valid = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_input 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_BSN_ALIGN_INPUT", J * 8+5, rd_data, tb_clk); --nof_err + REPORT "nof_err = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_input 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_BSN_ALIGN_OUTPUT", 0, rd_data, tb_clk); --status bits + REPORT "sync_timeout = " & INTEGER'IMAGE(TO_UINT(rd_data(2 DOWNTO 2))) & " from reg_bsn_monitor_v2_bsn_align_output 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_BSN_ALIGN_OUTPUT", 1, rd_data, tb_clk); --bsn at sync + REPORT "bsn_at_sync = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_output 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_BSN_ALIGN_OUTPUT", 3, rd_data, tb_clk); --nof_sop + REPORT "nof_sop = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_output 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_BSN_ALIGN_OUTPUT", 4, rd_data, tb_clk); --nof_valid + REPORT "nof_valid = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_output 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_BSN_ALIGN_OUTPUT", 5, rd_data, tb_clk); --nof_err + REPORT "nof_err = " & INTEGER'IMAGE(TO_UINT(rd_data)) & " from reg_bsn_monitor_v2_bsn_align_output 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; diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd index 268c6556e12e77d2f213f9c46cf4878bfa480601..f4ed10f55222415fad473a503c8d649965e0bd58 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd @@ -26,7 +26,6 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS ----------------------------------------------------------------------------- -- this component declaration is copy-pasted from Quartus platform designer: ----------------------------------------------------------------------------- - component qsys_lofar2_unb2b_sdp_station is port ( avs_eth_0_clk_export : out std_logic; -- export @@ -183,6 +182,20 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_bsn_monitor_input_reset_export : out std_logic; -- export reg_bsn_monitor_input_write_export : out std_logic; -- export reg_bsn_monitor_input_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_bsn_monitor_v2_bsn_align_input_address_export : out std_logic_vector(6 downto 0); -- export + reg_bsn_monitor_v2_bsn_align_input_clk_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_input_read_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_input_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_bsn_monitor_v2_bsn_align_input_reset_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_input_write_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_input_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_bsn_monitor_v2_bsn_align_output_address_export : out std_logic_vector(2 downto 0); -- export + reg_bsn_monitor_v2_bsn_align_output_clk_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_output_read_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_output_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_bsn_monitor_v2_bsn_align_output_reset_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_output_write_export : out std_logic; -- export + reg_bsn_monitor_v2_bsn_align_output_writedata_export : out std_logic_vector(31 downto 0); -- export reg_bsn_monitor_v2_ring_rx_xst_address_export : out std_logic_vector(6 downto 0); -- export reg_bsn_monitor_v2_ring_rx_xst_clk_export : out std_logic; -- export reg_bsn_monitor_v2_ring_rx_xst_read_export : out std_logic; -- export @@ -309,13 +322,6 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_hdr_dat_reset_export : out std_logic; -- export reg_hdr_dat_write_export : out std_logic; -- export reg_hdr_dat_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_bsn_monitor_v2_bsn_align_input_address_export : out std_logic_vector(6 downto 0); -- export - reg_bsn_monitor_v2_bsn_align_input_clk_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_input_read_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_input_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_bsn_monitor_v2_bsn_align_input_reset_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_input_write_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_input_writedata_export : out std_logic_vector(31 downto 0); -- export reg_mmdp_ctrl_address_export : out std_logic_vector(0 downto 0); -- export reg_mmdp_ctrl_clk_export : out std_logic; -- export reg_mmdp_ctrl_read_export : out std_logic; -- export @@ -351,27 +357,6 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_nw_10gbe_mac_reset_export : out std_logic; -- export reg_nw_10gbe_mac_write_export : out std_logic; -- export reg_nw_10gbe_mac_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_tr_10gbe_eth10g_address_export : out std_logic_vector(0 downto 0); -- export - reg_tr_10gbe_eth10g_clk_export : out std_logic; -- export - reg_tr_10gbe_eth10g_read_export : out std_logic; -- export - reg_tr_10gbe_eth10g_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_tr_10gbe_eth10g_reset_export : out std_logic; -- export - reg_tr_10gbe_eth10g_write_export : out std_logic; -- export - reg_tr_10gbe_eth10g_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_tr_10gbe_mac_address_export : out std_logic_vector(12 downto 0); -- export - reg_tr_10gbe_mac_clk_export : out std_logic; -- export - reg_tr_10gbe_mac_read_export : out std_logic; -- export - reg_tr_10gbe_mac_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_tr_10gbe_mac_reset_export : out std_logic; -- export - reg_tr_10gbe_mac_write_export : out std_logic; -- export - reg_tr_10gbe_mac_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_bsn_monitor_v2_bsn_align_output_address_export : out std_logic_vector(2 downto 0); -- export - reg_bsn_monitor_v2_bsn_align_output_clk_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_output_read_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_output_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_bsn_monitor_v2_bsn_align_output_reset_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_output_write_export : out std_logic; -- export - reg_bsn_monitor_v2_bsn_align_output_writedata_export : out std_logic_vector(31 downto 0); -- export reg_remu_address_export : out std_logic_vector(2 downto 0); -- export reg_remu_clk_export : out std_logic; -- export reg_remu_read_export : out std_logic; -- export @@ -379,6 +364,13 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_remu_reset_export : out std_logic; -- export reg_remu_write_export : out std_logic; -- export reg_remu_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_ring_info_address_export : out std_logic_vector(1 downto 0); -- export + reg_ring_info_clk_export : out std_logic; -- export + reg_ring_info_read_export : out std_logic; -- export + reg_ring_info_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_ring_info_reset_export : out std_logic; -- export + reg_ring_info_write_export : out std_logic; -- export + reg_ring_info_writedata_export : out std_logic_vector(31 downto 0); -- export reg_ring_lane_info_xst_address_export : out std_logic_vector(0 downto 0); -- export reg_ring_lane_info_xst_clk_export : out std_logic; -- export reg_ring_lane_info_xst_read_export : out std_logic; -- export @@ -393,13 +385,6 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_sdp_info_reset_export : out std_logic; -- export reg_sdp_info_write_export : out std_logic; -- export reg_sdp_info_writedata_export : out std_logic_vector(31 downto 0); -- export - reg_ring_info_address_export : out std_logic_vector(1 downto 0); -- export - reg_ring_info_clk_export : out std_logic; -- export - reg_ring_info_read_export : out std_logic; -- export - reg_ring_info_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export - reg_ring_info_reset_export : out std_logic; -- export - reg_ring_info_write_export : out std_logic; -- export - reg_ring_info_writedata_export : out std_logic_vector(31 downto 0); -- export reg_si_address_export : out std_logic_vector(0 downto 0); -- export reg_si_clk_export : out std_logic; -- export reg_si_read_export : out std_logic; -- export @@ -449,6 +434,20 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS reg_stat_hdr_dat_xst_reset_export : out std_logic; -- export reg_stat_hdr_dat_xst_write_export : out std_logic; -- export reg_stat_hdr_dat_xst_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_tr_10gbe_eth10g_address_export : out std_logic_vector(0 downto 0); -- export + reg_tr_10gbe_eth10g_clk_export : out std_logic; -- export + reg_tr_10gbe_eth10g_read_export : out std_logic; -- export + reg_tr_10gbe_eth10g_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_tr_10gbe_eth10g_reset_export : out std_logic; -- export + reg_tr_10gbe_eth10g_write_export : out std_logic; -- export + reg_tr_10gbe_eth10g_writedata_export : out std_logic_vector(31 downto 0); -- export + reg_tr_10gbe_mac_address_export : out std_logic_vector(12 downto 0); -- export + reg_tr_10gbe_mac_clk_export : out std_logic; -- export + reg_tr_10gbe_mac_read_export : out std_logic; -- export + reg_tr_10gbe_mac_readdata_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + reg_tr_10gbe_mac_reset_export : out std_logic; -- export + reg_tr_10gbe_mac_write_export : out std_logic; -- export + reg_tr_10gbe_mac_writedata_export : out std_logic_vector(31 downto 0); -- export reg_unb_pmbus_address_export : out std_logic_vector(5 downto 0); -- export reg_unb_pmbus_clk_export : out std_logic; -- export reg_unb_pmbus_read_export : out std_logic; -- export @@ -494,5 +493,6 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS rom_system_info_writedata_export : out std_logic_vector(31 downto 0) -- export ); end component qsys_lofar2_unb2b_sdp_station; + END qsys_lofar2_unb2b_sdp_station_pkg; diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/hdllib.cfg index b095e8303dfc581d6f2993898cafa8e65e51103d..08c7824c437d1fcae6c1d3f7907c0545572638fe 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/hdllib.cfg @@ -7,10 +7,10 @@ hdl_lib_include_ip = ip_arria10_e2sg_mac_10g ip_arria10_e2sg_pll_xgmii_mac_clocks ip_arria10_e2sg_transceiver_pll_10g - ip_arria10_e2sg_phy_10gbase_r - + ip_arria10_e2sg_phy_10gbase_r_3 ip_arria10_e2sg_transceiver_reset_controller_1 + ip_arria10_e2sg_transceiver_reset_controller_3 synth_files = src/vhdl/qsys_lofar2_unb2c_sdp_station_pkg.vhd diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/lofar2_unb2c_sdp_station.fpga.yaml b/applications/lofar2/designs/lofar2_unb2c_sdp_station/lofar2_unb2c_sdp_station.fpga.yaml index ec5d65eba9465d904dcb0458a376e63c1fbc79c6..a0a5c66397695c54b418046bfa02e5971d70db8e 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/lofar2_unb2c_sdp_station.fpga.yaml +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/lofar2_unb2c_sdp_station.fpga.yaml @@ -267,6 +267,8 @@ peripherals: - peripheral_name: dp/dp_bsn_align_v2 peripheral_group: xsub + parameter_overrides: + - { name: g_nof_streams, value: c_P_sq } mm_port_names: - REG_BSN_ALIGN @@ -314,7 +316,7 @@ peripherals: parameter_overrides: - { name: g_nof_err_counts, value: c_lane_nof_err_counts } mm_port_names: - - REG_DP_BLOCK_VALIDATE_ERR__XST + - REG_DP_BLOCK_VALIDATE_ERR_XST - peripheral_name: dp/dp_block_validate_bsn_at_sync mm_port_names: diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/qsys_lofar2_unb2c_sdp_station.qsys b/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/qsys_lofar2_unb2c_sdp_station.qsys index 7016252ff08451875beee19a353f70e245db59d9..d9a3aae9d961559f03fb666fa2ae7a64627c9a9e 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/qsys_lofar2_unb2c_sdp_station.qsys +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/qsys_lofar2_unb2c_sdp_station.qsys @@ -1962,6 +1962,76 @@ internal="reg_bsn_monitor_input.writedata" type="conduit" dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_address" + internal="reg_bsn_monitor_v2_bsn_align_input.address" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_clk" + internal="reg_bsn_monitor_v2_bsn_align_input.clk" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_read" + internal="reg_bsn_monitor_v2_bsn_align_input.read" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_readdata" + internal="reg_bsn_monitor_v2_bsn_align_input.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_reset" + internal="reg_bsn_monitor_v2_bsn_align_input.reset" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_write" + internal="reg_bsn_monitor_v2_bsn_align_input.write" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_input_writedata" + internal="reg_bsn_monitor_v2_bsn_align_input.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_address" + internal="reg_bsn_monitor_v2_bsn_align_output.address" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_clk" + internal="reg_bsn_monitor_v2_bsn_align_output.clk" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_read" + internal="reg_bsn_monitor_v2_bsn_align_output.read" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_readdata" + internal="reg_bsn_monitor_v2_bsn_align_output.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_reset" + internal="reg_bsn_monitor_v2_bsn_align_output.reset" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_write" + internal="reg_bsn_monitor_v2_bsn_align_output.write" + type="conduit" + dir="end" /> + <interface + name="reg_bsn_monitor_v2_bsn_align_output_writedata" + internal="reg_bsn_monitor_v2_bsn_align_output.writedata" + type="conduit" + dir="end" /> <interface name="reg_bsn_monitor_v2_ring_rx_xst_address" internal="reg_bsn_monitor_v2_ring_rx_xst.address" @@ -2588,41 +2658,6 @@ internal="reg_hdr_dat.writedata" type="conduit" dir="end" /> - <interface - name="reg_input_monitor_address" - internal="reg_bsn_monitor_v2_bsn_align_input.address" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_clk" - internal="reg_bsn_monitor_v2_bsn_align_input.clk" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_read" - internal="reg_bsn_monitor_v2_bsn_align_input.read" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_readdata" - internal="reg_bsn_monitor_v2_bsn_align_input.readdata" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_reset" - internal="reg_bsn_monitor_v2_bsn_align_input.reset" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_write" - internal="reg_bsn_monitor_v2_bsn_align_input.write" - type="conduit" - dir="end" /> - <interface - name="reg_input_monitor_writedata" - internal="reg_bsn_monitor_v2_bsn_align_input.writedata" - type="conduit" - dir="end" /> <interface name="reg_mmdp_ctrl_address" internal="reg_mmdp_ctrl.address" @@ -2798,41 +2833,6 @@ internal="reg_nw_10gbe_mac.writedata" type="conduit" dir="end" /> - <interface - name="reg_output_monitor_address" - internal="reg_bsn_monitor_v2_bsn_align_output.address" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_clk" - internal="reg_bsn_monitor_v2_bsn_align_output.clk" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_read" - internal="reg_bsn_monitor_v2_bsn_align_output.read" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_readdata" - internal="reg_bsn_monitor_v2_bsn_align_output.readdata" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_reset" - internal="reg_bsn_monitor_v2_bsn_align_output.reset" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_write" - internal="reg_bsn_monitor_v2_bsn_align_output.write" - type="conduit" - dir="end" /> - <interface - name="reg_output_monitor_writedata" - internal="reg_bsn_monitor_v2_bsn_align_output.writedata" - type="conduit" - dir="end" /> <interface name="reg_remu_address" internal="reg_remu.address" @@ -84010,26 +84010,6 @@ <parameter name="qsys_mm.syncResets" value="FALSE" /> <parameter name="qsys_mm.widthAdapterImplementation" value="GENERIC_CONVERTER" /> </connection> - <connection - kind="avalon" - version="19.4" - start="cpu_0.data_master" - end="reg_bsn_monitor_v2_bsn_align_input.mem"> - <parameter name="arbitrationPriority" value="1" /> - <parameter name="baseAddress" value="0x3400" /> - <parameter name="defaultConnection" value="false" /> - <parameter name="domainAlias" value="" /> - <parameter name="qsys_mm.burstAdapterImplementation" value="GENERIC_CONVERTER" /> - <parameter name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" /> - <parameter name="qsys_mm.enableEccProtection" value="FALSE" /> - <parameter name="qsys_mm.enableInstrumentation" value="FALSE" /> - <parameter name="qsys_mm.insertDefaultSlave" value="FALSE" /> - <parameter name="qsys_mm.interconnectResetSource" value="DEFAULT" /> - <parameter name="qsys_mm.interconnectType" value="STANDARD" /> - <parameter name="qsys_mm.maxAdditionalLatency" value="0" /> - <parameter name="qsys_mm.syncResets" value="FALSE" /> - <parameter name="qsys_mm.widthAdapterImplementation" value="GENERIC_CONVERTER" /> - </connection> <connection kind="avalon" version="19.4" @@ -84230,6 +84210,26 @@ <parameter name="qsys_mm.syncResets" value="FALSE" /> <parameter name="qsys_mm.widthAdapterImplementation" value="GENERIC_CONVERTER" /> </connection> + <connection + kind="avalon" + version="19.4" + start="cpu_0.data_master" + end="reg_bsn_monitor_v2_bsn_align_input.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x3400" /> + <parameter name="defaultConnection" value="false" /> + <parameter name="domainAlias" value="" /> + <parameter name="qsys_mm.burstAdapterImplementation" value="GENERIC_CONVERTER" /> + <parameter name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" /> + <parameter name="qsys_mm.enableEccProtection" value="FALSE" /> + <parameter name="qsys_mm.enableInstrumentation" value="FALSE" /> + <parameter name="qsys_mm.insertDefaultSlave" value="FALSE" /> + <parameter name="qsys_mm.interconnectResetSource" value="DEFAULT" /> + <parameter name="qsys_mm.interconnectType" value="STANDARD" /> + <parameter name="qsys_mm.maxAdditionalLatency" value="0" /> + <parameter name="qsys_mm.syncResets" value="FALSE" /> + <parameter name="qsys_mm.widthAdapterImplementation" value="GENERIC_CONVERTER" /> + </connection> <connection kind="avalon" version="19.4" @@ -84602,11 +84602,6 @@ version="19.4" start="clk_0.clk" end="reg_bsn_align.system" /> - <connection - kind="clock" - version="19.4" - start="clk_0.clk" - end="reg_bsn_monitor_v2_bsn_align_input.system" /> <connection kind="clock" version="19.4" @@ -84657,6 +84652,11 @@ version="19.4" start="clk_0.clk" end="reg_tr_10gbe_mac.system" /> + <connection + kind="clock" + version="19.4" + start="clk_0.clk" + end="reg_bsn_monitor_v2_bsn_align_input.system" /> <connection kind="interrupt" version="19.4" @@ -84950,11 +84950,6 @@ version="19.4" start="clk_0.clk_reset" end="reg_bsn_align.system_reset" /> - <connection - kind="reset" - version="19.4" - start="clk_0.clk_reset" - end="reg_bsn_monitor_v2_bsn_align_input.system_reset" /> <connection kind="reset" version="19.4" @@ -85005,6 +85000,11 @@ version="19.4" start="clk_0.clk_reset" end="reg_tr_10gbe_mac.system_reset" /> + <connection + kind="reset" + version="19.4" + start="clk_0.clk_reset" + end="reg_bsn_monitor_v2_bsn_align_input.system_reset" /> <connection kind="reset" version="19.4" diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/hdllib.cfg index dbf68d2cc0e74ba4c6526f668d8eba760de7d2e4..c7155b30c3787996f91e3793c5029e15d2805ccb 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/hdllib.cfg @@ -67,6 +67,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -85,13 +87,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/hdllib.cfg index 845272d5b0b1aa1daec3001ce24cd415d03fbf04..83a37e5186b0dd68b82312c8658604e384af128c 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/hdllib.cfg @@ -75,6 +75,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -93,13 +95,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/hdllib.cfg index b8bcfa75fac41c4646fadd575f4b09aff4ce6a98..0870c853d90ff5b9de135cc31dfceebd5617ebef 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/hdllib.cfg @@ -74,6 +74,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -92,13 +94,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/hdllib.cfg index 04aa0d9e93571ce483849a705a0880019731bca7..afdba82f37fe3088050e343b0d4207ef55365188 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_full/hdllib.cfg @@ -71,6 +71,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -89,13 +91,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/hdllib.cfg index ba5fa68dac73cfb066f0248dc67b302ace59c18e..fa2e4069a35b7668c5aa238fa177916f2cce25b1 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/hdllib.cfg @@ -74,6 +74,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -92,13 +94,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_ring/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_ring/hdllib.cfg index 3be51c67651ea845fc41708964b42191060a7387..9acb80183e38aae03dab40827f444e16a3a606b3 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_ring/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_ring/hdllib.cfg @@ -71,6 +71,8 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bf_scale.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_align.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_input.ip + $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_bsn_align_output.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_rx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_monitor_v2_ring_tx_xst.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_bsn_scheduler.ip @@ -89,13 +91,11 @@ quartus_ip_files = $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_temp_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_fpga_voltage_sens.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_hdr_dat.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_input_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_ctrl.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_mmdp_data.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nof_crosslets.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_eth10g.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_nw_10gbe_mac.ip - $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_output_monitor.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_remu.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_info.ip $RADIOHDL_BUILD_DIR/unb2c/quartus/lofar2_unb2c_sdp_station/ip/qsys_lofar2_unb2c_sdp_station/qsys_lofar2_unb2c_sdp_station_reg_ring_lane_info_xst.ip diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd index 4c28ed7ae94f201f4d55ee208c2ef84f83251ef8..d2e63d498c47ca03f3ce41709381e690b4e6a21b 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd @@ -720,6 +720,7 @@ BEGIN g_use_fsub => c_revision_select.use_fsub, g_use_xsub => c_revision_select.use_xsub, g_use_bf => c_revision_select.use_bf, + g_use_ring => c_revision_select.use_ring, g_P_sq => c_revision_select.P_sq ) PORT MAP ( diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/qsys_lofar2_unb2c_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/qsys_lofar2_unb2c_sdp_station_pkg.vhd index 90c717b14129275297f07bb519cccd1eb5628bbd..2c1fb0955b996d43260b2881e05e073de22aa31d 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/qsys_lofar2_unb2c_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/qsys_lofar2_unb2c_sdp_station_pkg.vhd @@ -479,5 +479,6 @@ PACKAGE qsys_lofar2_unb2c_sdp_station_pkg IS rom_system_info_writedata_export : out std_logic_vector(31 downto 0) -- export ); end component qsys_lofar2_unb2c_sdp_station; + END qsys_lofar2_unb2c_sdp_station_pkg; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd index acf78513cfbfc511eed89265f978d49568bd9d06..65ff3452ccc80afb6827e6aea81dbaed81cab3ef 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd @@ -52,6 +52,7 @@ ENTITY node_sdp_correlator IS xst_udp_siso : IN t_dp_siso; from_ri_sosi : IN t_dp_sosi := c_dp_sosi_rst; to_ri_sosi : OUT t_dp_sosi; + bs_sosi : OUT t_dp_sosi; mm_rst : IN STD_LOGIC; mm_clk : IN STD_LOGIC; @@ -106,7 +107,9 @@ ARCHITECTURE str OF node_sdp_correlator IS SIGNAL local_sosi : t_dp_sosi := c_dp_sosi_rst; SIGNAL ring_mux_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL ring_mux_siso : t_dp_siso := c_dp_siso_rdy; SIGNAL rx_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL dispatch_invert_sosi_arr : t_dp_sosi_arr(0 TO g_P_sq-1) := (OTHERS => c_dp_sosi_rst); SIGNAL dispatch_sosi_arr : t_dp_sosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); SIGNAL crosslets_sosi : t_dp_sosi := c_dp_sosi_rst; @@ -169,6 +172,10 @@ BEGIN out_crosslets_info => crosslets_info ); + + -- Use xsel_sosi as local bsn and sync reference since the sync + -- is generated by the bsn_sync_scheduler in sdp_crosslets_subband_select. + bs_sosi <= xsel_sosi; --------------------------------------------------------------- -- Repack 32b to 64b @@ -183,10 +190,11 @@ BEGIN u_dp_repack_data_local : ENTITY dp_lib.dp_repack_data GENERIC MAP ( - g_in_dat_w => c_data_w, - g_in_nof_words => c_longword_w/c_data_w, - g_out_dat_w => c_longword_w, - g_out_nof_words => 1 + g_in_dat_w => c_data_w, + g_in_nof_words => c_longword_w/c_data_w, + g_out_dat_w => c_longword_w, + g_out_nof_words => 1, + g_pipeline_ready => TRUE -- Needed for src_in.ready to snk_out.ready. ) PORT MAP ( rst => dp_rst, @@ -213,7 +221,8 @@ BEGIN remote_sosi => from_ri_sosi, local_sosi => local_sosi, - mux_sosi => ring_mux_sosi + mux_sosi => ring_mux_sosi, + mux_siso => ring_mux_siso ); to_ri_sosi <= ring_mux_sosi; @@ -223,16 +232,18 @@ BEGIN --------------------------------------------------------------- u_dp_repack_data_rx : ENTITY dp_lib.dp_repack_data GENERIC MAP ( - g_in_dat_w => c_longword_w, - g_in_nof_words => 1, - g_out_dat_w => c_data_w, - g_out_nof_words => c_longword_w/c_data_w + g_in_dat_w => c_longword_w, + g_in_nof_words => 1, + g_out_dat_w => c_data_w, + g_out_nof_words => c_longword_w/c_data_w, + g_pipeline_ready => TRUE -- Needed for src_in.ready to snk_out.ready. ) PORT MAP ( rst => dp_rst, clk => dp_clk, snk_in => ring_mux_sosi, + snk_out => ring_mux_siso, src_out => rx_sosi ); @@ -243,15 +254,17 @@ BEGIN GENERIC MAP ( g_mode => 0, g_nof_output => g_P_sq, - g_remove_channel_lo => FALSE + g_remove_channel_lo => FALSE, + g_sel_ctrl_invert => TRUE --TRUE when indexed (g_nof_input-1 DOWNTO 0) ) PORT MAP ( rst => dp_rst, clk => dp_clk, snk_in => rx_sosi, - src_out_arr => dispatch_sosi_arr + src_out_arr => dispatch_invert_sosi_arr ); + dispatch_sosi_arr <= func_dp_stream_arr_reverse_range(dispatch_invert_sosi_arr); --------------------------------------------------------------- -- dp_bsn_aligner_v2 diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index 71f21d3af762da9c2cb40f337554d1f3000899e5..1494eb112642c4e85e5401299cdf9c7dd2d97299 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -345,7 +345,7 @@ ARCHITECTURE str OF sdp_station IS CONSTANT c_fsub_type : STD_LOGIC := '0'; -- '0' => critical sampled PFB, '1' => oversampled PFB CONSTANT c_use_dp_layer : BOOLEAN := TRUE; - CONSTANT c_lane_packet_length : NATURAL := c_sdp_V_ring_pkt_len_max - c_ring_dp_hdr_field_size; -- = 48 longwords per packet, so the maximum data rate with a packetrate of 195312.5 and all 16 nodes combined = 16 * 48 / 1024 * 64 * 200M = 9.6 Gb/s + CONSTANT c_lane_packet_length : NATURAL := c_sdp_N_crosslets_max * c_sdp_S_pn / 2; -- = crosslet subband select block size devided by 2 as it is repacked from 32b to 64b. CONSTANT c_err_bi : NATURAL := 0; CONSTANT c_nof_err_counts : NATURAL := 8; CONSTANT c_bsn_at_sync_check_channel : NATURAL := 1; @@ -359,7 +359,7 @@ ARCHITECTURE str OF sdp_station IS CONSTANT c_qsfp_if_offset : NATURAL := 0; -- QSFP signals are indexed at c_nof_if * I. CONSTANT c_ring_0_if_offset : NATURAL := 1; -- RING_0 signals are indexed at c_nof_if * I + 1. CONSTANT c_ring_1_if_offset : NATURAL := 2; -- RING_1 signals are indexed at c_nof_if * I + 2. - CONSTANT c_nof_mac : NATURAL := 3; -- must match one of the MAC IP variations, e.g. 3, 12, 24, 48 + CONSTANT c_nof_mac : NATURAL := 3; -- must match one of the MAC IP variations, e.g. 1, 3, 4, 12, 24, 48 SIGNAL gn_index : NATURAL := 0; SIGNAL this_rn : STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0); @@ -405,6 +405,7 @@ ARCHITECTURE str OF sdp_station IS SIGNAL ait_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); SIGNAL pfb_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); SIGNAL fsub_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); + SIGNAL bs_sosi : t_dp_sosi; SIGNAL xst_from_ri_sosi : t_dp_sosi; SIGNAL xst_to_ri_sosi : t_dp_sosi; @@ -635,6 +636,8 @@ BEGIN from_ri_sosi => xst_from_ri_sosi, to_ri_sosi => xst_to_ri_sosi, + + bs_sosi => bs_sosi, mm_rst => mm_rst, mm_clk => mm_clk, @@ -697,7 +700,7 @@ BEGIN lane_rx_board_sosi => lane_rx_board_sosi_arr(0), lane_tx_cable_sosi => lane_tx_cable_sosi_arr(0), lane_tx_board_sosi => lane_tx_board_sosi_arr(0), - bs_sosi => fsub_sosi_arr(0), -- used for bsn and sync + bs_sosi => bs_sosi, reg_ring_lane_info_copi => reg_ring_lane_info_xst_copi, reg_ring_lane_info_cipo => reg_ring_lane_info_xst_cipo, diff --git a/libraries/base/dp/dp.peripheral.yaml b/libraries/base/dp/dp.peripheral.yaml index 2313b1f23bf3155653da5728c03d0de13e930238..bb68ec65424a5349d2a0a45874e7ce327c0f40c2 100644 --- a/libraries/base/dp/dp.peripheral.yaml +++ b/libraries/base/dp/dp.peripheral.yaml @@ -106,6 +106,26 @@ peripherals: access_mode: RW + - peripheral_name: dp_bsn_align_v2 # pi_dp_bsn_align_v2.py + peripheral_description: "Align frames from multiple input streams." + parameters: + # Parameters of dp_bsn_align_v2.vhd + - { name: g_nof_streams, value: 2 } + mm_ports: + # MM port for dp_bsn_align_v2.vhd + - mm_port_name: REG_DP_BSN_ALIGN_V2 + mm_port_type: REG + mm_port_span: 1 * MM_BUS_SIZE + mm_port_description: "" + number_of_mm_ports: g_nof_streams + fields: + - - field_name: enable + field_description: "Stream enable per stream via bits g_nof_streams-1 : 0. Bit value 0 disables the stream, 1 enables the stream. Disabled streams are not aligned." + address_offset: 0x0 + mm_width: 1 + access_mode: RW + + - peripheral_name: dp_bsn_source # pi_dp_bsn_source.py peripheral_description: "Block Sequence Number (BSN) source for timestamping blocks of data samples." parameters: diff --git a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd index 7de022f5ddf319ca778a479bd3eef82fe24e54fc..42e3ae8e6b817d4346abe9a6b7b565882ccb334e 100644 --- a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd +++ b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd @@ -170,6 +170,12 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS (OTHERS=>'0'), (OTHERS=>(OTHERS=>'0'))); + CONSTANT c_comb_rst : t_comb := (c_dp_sosi_rst, + (OTHERS=>'0'), + (OTHERS=>'0'), + (OTHERS=>'0'), + (OTHERS=>c_dp_sosi_rst)); + -- State registers for p_comb SIGNAL r : t_reg; SIGNAL nxt_r : t_reg; @@ -219,10 +225,11 @@ BEGIN END IF; END PROCESS; - p_comb : PROCESS(r, in_sosi_arr_p, mm_copi, dp_copi, rd_cipo_arr, rd_sosi_arr) + p_comb : PROCESS(r, in_sosi_arr_p, mm_copi, dp_copi, rd_cipo_arr, rd_sosi_arr, stream_en_arr, node_index) VARIABLE v : t_reg; -- State variable VARIABLE w : t_comb; -- Local wires = memoryless auxiliary variables BEGIN + w := c_comb_rst; v := r; -- state signals v.mm_sosi := func_dp_stream_reset_control(r.mm_sosi); v.wr_copi_arr := RESET_MEM_COPI_CTRL(r.wr_copi_arr); diff --git a/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd b/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd index cd8c20ec66c1124a89b45a2f99b40819aabf776b..567febceb63d61ae93d9c3849dda19bab16a1cc6 100644 --- a/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd +++ b/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd @@ -251,6 +251,7 @@ BEGIN -- No need to transfer eop counter across clock domains for single clock ELSE + wr_eop_busy <= '0'; -- To prevent inferred latch. IF snk_in.eop = '1' THEN wr_eop_cnt <= 1; -- wr_eop_cnt can simply be set to 1 instead of counting as it is immidiatly processed due to having a single clock. ELSE diff --git a/libraries/base/dp/src/vhdl/dp_repack_data.vhd b/libraries/base/dp/src/vhdl/dp_repack_data.vhd index 7d777a1eb84ae0581610d88a00bccaaa188151b6..d1c86bf258f14795eaa5ea49ddc9007a12fe1dc3 100644 --- a/libraries/base/dp/src/vhdl/dp_repack_data.vhd +++ b/libraries/base/dp/src/vhdl/dp_repack_data.vhd @@ -650,7 +650,7 @@ ENTITY dp_repack_data IS g_out_dat_w : NATURAL; g_out_nof_words : NATURAL; g_out_symbol_w : NATURAL := 1; -- default 1 for src_out.empty in nof bits, else use power of 2 - g_pipeline_ready : BOOLEAN := FALSE + g_pipeline_ready : BOOLEAN := FALSE -- TRUE to pipeline ready from src_in to snk_out. ); PORT ( rst : IN STD_LOGIC; diff --git a/libraries/base/ring/src/vhdl/ring_tx.vhd b/libraries/base/ring/src/vhdl/ring_tx.vhd index dc59d98b3b0d7aa5131f473d88180689ac28584a..742d0718311ea66c1282e681453b28cda147324a 100644 --- a/libraries/base/ring/src/vhdl/ring_tx.vhd +++ b/libraries/base/ring/src/vhdl/ring_tx.vhd @@ -116,7 +116,7 @@ BEGIN END GENERATE; -- increase channel by 1, e.g. add 1 hop. - p_hop: PROCESS(validated_sosi) + p_hop: PROCESS(validated_sosi, N_rn) BEGIN tx_sosi <= validated_sosi; IF TO_UINT(validated_sosi.channel) >= TO_UINT(N_rn)-1 THEN