Skip to content
Snippets Groups Projects
Commit 919fa311 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Added fpga.yaml for lofar2_unb2b_filterbank and peripheral.yaml for...

Added fpga.yaml for lofar2_unb2b_filterbank and peripheral.yaml for peripherals that are new in node_sdp_filterbank.vhd.
parent fbc4830d
No related branches found
No related tags found
2 merge requests!100Removed text for XSub that is now written in Confluence Subband correlator...,!73Resolve L2SDP-240
schema_name : args
schema_version: 1.0
schema_type : fpga
hdl_library_name: lofar2_unb2b_filterbank
fpga_name : lofar2_unb2b_filterbank
fpga_description: "FPGA design lofar2_unb2b_filterbank"
peripherals:
#############################################################################
# Factory / minimal (see ctrl_unb2b_board.vhd)
#############################################################################
- peripheral_name: unb2b_board/system_info
slave_port_names:
- ROM_SYSTEM_INFO
- PIO_SYSTEM_INFO
lock_base_address: 0x10000
- peripheral_name: unb2b_board/wdi
slave_port_names:
- PIO_WDI
- peripheral_name: unb2b_board/unb2_fpga_sens
slave_port_names:
- REG_FPGA_TEMP_SENS
- REG_FPGA_VOLTAGE_SENS
- peripheral_name: unb2b_board/ram_scrap
slave_port_names:
- RAM_SCRAP
- peripheral_name: eth/eth
slave_port_names:
- AVS_ETH_0_TSE
- AVS_ETH_0_REG
- AVS_ETH_0_RAM
- peripheral_name: ppsh/ppsh
slave_port_names:
- PIO_PPS
- peripheral_name: epcs/epcs
slave_port_names:
- REG_EPCS
- peripheral_name: dp/dpmm
slave_port_names:
- REG_DPMM_CTRL
- REG_DPMM_DATA
- peripheral_name: dp/mmdp
slave_port_names:
- REG_MMDP_CTRL
- REG_MMDP_DATA
- peripheral_name: remu/remu
slave_port_names:
- REG_REMU
#############################################################################
# AIT = ADC Input and Timing (see node_adc_input_and_timing.vhd)
#############################################################################
- peripheral_name: tech_jesd204b/jesd_ctrl
slave_port_names:
- PIO_JESD_CTRL
- peripheral_name: tech_jesd204b/jesd204b_arria10
slave_port_names:
- JESD204B
- peripheral_name: dp/dp_shiftram
parameter_overrides:
- { name: g_nof_streams, value: 12 } # = S_pn
- { name: g_nof_words, value: 4096 }
- { name: g_data_w, value: 16 }
slave_port_names:
- REG_DP_SHIFTRAM
- peripheral_name: dp/dp_bsn_source
parameter_overrides:
- { name: g_nof_block_per_sync, value: 195313 } # 390625 = 2 * 195312, to have integer number of blocks in 2 s sync interval
slave_port_names:
- REG_BSN_SOURCE
# TODO: Use REG_BSN_SOURCE_V2 instead of REG_BSN_SOURCE
#peripheral_name: dp/dp_bsn_source_v2
#parameter_overrides:
# - { name: g_nof_clk_per_sync, value: 200000000 } # = f_adc
# - { name: g_block_size, value: 1024 } # = N_fft
# - { name: g_bsn_time_offset_w, value: 10 } # note: g_bsn_time_offset_w = ceil_log2(g_block_size)
#slave_port_names:
# - REG_BSN_SOURCE_V2
- peripheral_name: dp/dp_bsn_scheduler
slave_port_names:
- REG_BSN_SCHEDULER
- peripheral_name: dp/dp_bsn_monitor
peripheral_group: input
slave_port_names:
- REG_BSN_MONITOR_INPUT
- peripheral_name: diag/diag_wg_wideband
parameter_overrides:
- { name: g_nof_streams, value: 12 } # = S_pn
slave_port_names:
- REG_DIAG_WG
- RAM_DIAG_WG
- peripheral_name: aduh/aduh_mon_dc_power
parameter_overrides:
- { name: g_nof_streams, value: 12 } # = S_pn
slave_port_names:
- REG_ADUH_MON
# Commented RAM_ADUH_MON, because use RAM_DIAG_DATA_BUF_BSN instead
#- peripheral_name: aduh/aduh_mon_data_buffer
# parameter_overrides:
# - { name: g_nof_streams, value: 12 } # = S_pn
# - { name: g_symbol_w, value: 16 }
# - { name: g_nof_symbols_per_data, value: 1 }
# - { name: g_buffer_nof_symbols, value: 512 }
# - { name: g_buffer_use_sync, value: true }
# slave_port_names:
# - RAM_ADUH_MON
- peripheral_name: diag/diag_data_buffer
peripheral_group: bsn
parameter_overrides:
- { name: g_nof_streams, value: 12 } # = S_pn
- { name: g_data_w, value: 16 }
- { name: g_nof_data, value: 1024 }
slave_port_names:
- REG_DIAG_DATA_BUF_BSN
- RAM_DIAG_DATA_BUF_BSN
#############################################################################
# Fsub = Subband Filterbank (from node_sdp_filterbank.vhd)
#############################################################################
- peripheral_name: si/si
slave_port_names:
- REG_SI
- peripheral_name: filter/fil_ppf_w
parameter_overrides:
- { name: g_wb_factor, value: 1 }
- { name: g_nof_taps, value: 16 } # = N_taps
- { name: g_nof_bands, value: 1024 } # = N_fft
- { name: g_coef_dat_w, value: 16 } # = W_fir_coef
slave_port_names:
- RAM_FIL_COEFS
- peripheral_name: sdp/sdp_subband_equalizer
slave_port_names:
- RAM_EQUALIZER_GAINS
- peripheral_name: dp/dp_selector
slave_port_names:
- REG_DP_SELECTOR # input_select = 0 for weighted subbands, input_select = 1 for raw subbands
- peripheral_name: st/st_sst_for_sdp
slave_port_names:
- RAM_ST_SST
schema_name: args
schema_version: 1.0
schema_type: peripheral
hdl_library_name: sdp
hdl_library_description: "Station Digital Processor (SDP) for LOFAR2.0"
peripherals:
- peripheral_name: sdp_subband_equalizer # pi_sdp_subband_equalizer.py
peripheral_description: "Subband equalizer coefficients."
parameters:
# Parameters of pi_sdp_subband_equalizer.py, fixed in sdp_subband_equalizer.vhd / sdp_pkg.vhd
- { name: g_nof_instances, value: 6 } # P_pfb = S_pn / Q_fft = 12 / 2 = 6
slave_ports:
# MM port for sdp_subband_equalizer.vhd
- slave_name: RAM_EQUALIZER_GAINS
slave_description: |
"The subband weigths per PN are stored in g_nof_instances = P_pfb = S_pn / Q_fft = 6 blocks of
Q_fft * N_sub = 2 * 512 = 1024 complex coefficients as:
(cint16)subband_weights[S_pn/Q_fft]_[Q_fft][N_sub]
where S_pn = 12, Q_fft = 2 and N_sub = 512 are defined in sdp_pkg.vhd."
slave_type: RAM
number_of_slaves: g_nof_instances
fields:
- - field_name: coef
field_description: |
"Complex coefficient to calibrate the gain and phase per subband. Packed as imaginary in high part,
real in low part of width = N_complex * W_sub_weight = 2 * 16 = 32 bit."
width: 32 # = N_complex * W_sub_weight
address_offset: 0x0
number_of_fields: 1024 # = Q_fft * N_sub = 2 signal inputs * 512 subbands
radix: complx
schema_name: args
schema_version: 1.0
schema_type: peripheral
hdl_library_name: filter
hdl_library_description: "Poly-phase filter (PPF) for a Wideband Poly-phase filterbank (WPFB)"
peripherals:
- peripheral_name: fil_ppf_w # pi_fil_ppf_w.py
peripheral_description: |
"PPF FIR filter for wideband data streams, all data streams use the same FIR coefficients.
The PPF has g_nof_bands phases, where g_nof_bands is equal to the size of the FFT in the
PFB. The PPF has g_nof_taps FIR taps per phase. Hence the total number of FIR coefficients
is g_nof_taps * g_nof_bands.
The PPF can process a data stream that is clocked at a wideband factor g_wb_factor higher
data rate, by running g_wb_factor parts in parallel.
The FIR coefficients are real values."
parameters:
# Parameters of fil_ppf_wide.vhd
- { name: g_wb_factor, value: 1 }
- { name: g_nof_taps, value: 8 }
- { name: g_nof_bands, value: 256 }
- { name: g_coef_dat_w, value: 16 }
slave_ports:
# MM port for fil_ppf_wide.vhd / fil_ppf_single.vhd
- slave_name: RAM_FIL_COEFS
slave_description: |
"The FIR filter coefficients are stored in blocks of g_nof_bands/g_wb_factor real
coefficients:
(int16)coefs[g_wb_factor][g_nof_taps][g_nof_bands/g_wb_factor]
For g_wb_factor = 1 this reduces to g_nof_taps blocks of g_nof_bands/g_wb_factor
coefficients:
(int16)coefs[g_nof_taps][g_nof_bands]"
slave_type: RAM
number_of_slaves: g_wb_factor * g_nof_taps
fields:
- - field_name: coef
field_description: "Real FIR filter coefficient"
width: g_coef_dat_w
address_offset: 0x0
number_of_fields: g_nof_bands / g_wb_factor
schema_name: args
schema_version: 1.0
schema_type: peripheral
hdl_library_name: si
hdl_library_description: "Spectral Inversion (SI)"
peripherals:
- peripheral_name: si # pi_si.py
peripheral_description: "Spectral Inversion control."
slave_ports:
# MM port for si_arr.vhd
- slave_name: REG_SI
slave_description: "In the even Nyquist zones the sampled spectrum gets flipped in frequency. This flip can be compensated for by enabling spectral inversion (SI)."
slave_type: REG
fields:
- - field_name: enable
field_description: "When 0 then pass on the array of input signals, when 1 then enable spectral inversion for all the input signals."
width: 1
address_offset: 0x0
schema_name: args
schema_version: 1.0
schema_type: peripheral
hdl_library_name: st
hdl_library_description: "Statistics (ST)"
peripherals:
- peripheral_name: st_sst # pi_st_sst.py
peripheral_description: |
"Accumulate the signal power values during a sync interval:
. g_xst_enable = false : Auto power statistics for subbands (SST), beamlets (BST)
. g_xst_enable = true : Cross power statistics for subbands = crosslets (XST)."
parameters:
# Parameters of pi_st_sst.py
- { name: g_nof_instances, value: 1 }
# Parameters of st_sst.vhd
- { name: g_nof_stat, value: 512 } # nof accumulators
- { name: g_xst_enable, value: false } # false for auto powers, true for cross powers
- { name: g_stat_data_w, value: 64 } # statistics accumulator width in bits
- { name: g_stat_data_sz, value: 2 } # statistics accumulator width in 32b MM words
slave_ports:
# MM port for st_sst.vhd
- slave_name: RAM_ST_SST
slave_description: |
"The statistics are calculated for blocks of g_nof_stat time multiplexed data streams.
There are g_nof_instances parallel time multiplexed data streams.
The statistic power values have g_stat_data_w bits. The memory format is:
. g_xst_enable = false, for real powers : (uint32 * g_stat_data_sz)st[g_nof_instances]_[g_nof_stat]
. g_xst_enable = true, for complex powers : (cuint32 * g_stat_data_sz)st[g_nof_instances]_[g_nof_stat]"
slave_type: RAM
number_of_slaves: g_nof_instances
fields:
- - field_name: power
field_description: ""
width: g_stat_data_w
address_offset: 0x0
number_of_fields: g_nof_stat * g_stat_data_sz
- peripheral_name: st_sst_for_sdp # pi_st_sst.py
peripheral_description: |
"Accumulate the subband auto power values during a sync interval for the subband statistics (SST) in LOFAR2.0 SDP"
parameters:
# Parameters of pi_st_sst.py, fixed in node_sdp_filterbank.vhd / sdp_pkg.vhd
- { name: g_nof_instances, value: 6 }
# Parameters of st_sst.vhd, fixed in node_sdp_filterbank.vhd / sdp_pkg.vhd
- { name: g_nof_stat, value: 1024 } # nof accumulators: N_sub * Q_fft = 512 * 2 = 1024
- { name: g_stat_data_w, value: 54 } # statistics accumulator width in bits: W_statistic = 64
- { name: g_stat_data_sz, value: 2 } # statistics accumulator width in 32b MM words: W_statistic_sz = 2
slave_ports:
# MM port for st_sst.vhd
- slave_name: RAM_ST_SST
slave_description: |
"The subband statistics per PN are stored in g_nof_instances = P_pfb = S_pn / Q_fft = 6 blocks of
N_sub * Q_fft = 512 * 2 = 1024 real values as:
(uint64)SST[g_nof_instances]_[g_nof_stat] = (uint64)SST[S_pn/Q_fft]_[N_sub][Q_fft]
where S_pn = 12, Q_fft = 2 and N_sub = 512 are defined in sdp_pkg.vhd."
slave_type: RAM
number_of_slaves: g_nof_instances
fields:
- - field_name: power
field_description: ""
width: 32
address_offset: 0x0
number_of_fields: g_nof_stat * g_stat_data_sz
radix_width: g_stat_data_w
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment