SDP
The sdp == DeviceProxy("STAT/SDP/1")`
device controls the digital signal processing in SDP, performed by the firmware on the FPGAs on the Uniboards.
See the following links for a full description of the SDP monitoring and control points:
Basic configuration
The following points are significant for the operations of this device:
- FPGA_processing_enable_R:
Whether the FPGA is processing its input.
- type:
bool[N_fpgas]
Frequency management
To setup the input and output frequencies, the following attributes are offered:
- antenna_RW:
The type of antenna connected to each input, as provided by the user (HBA or LBA).
- type:
str[N_fpgas][N_ants_per_fpga]
- clock_RW:
The FPGA clock, in Hz (200_000_000 or 160_000_000). NB: This informs the calculations which clock should be assumed. The clock is not actually toggled.
- type:
uint32
- nyquist_zone_RW:
The NyQuist zone of the input, per input (0, 1, or 2).
- type:
uint32[N_fpgas][N_ants_per_fpga]
- FPGA_spectral_inversion_RW:
Whether to invert the spectrum, both within and across all subbands. This is required in odd-numbered NyQuist zones to have the signal increase in frequency over the subbands. This setting is automatically configured by setting nyquist_zone_RW but can be overwritten explicitly as well.
- type:
bool[N_fpgas][N_ants_per_fpga]
All of these are required to compute the actual frequencies of the subbands constructed by the PPF inside the FPGA. For convenience, the device explicitly exposes these:
- subband_frequency_R:
The central frequency of each subband for each input, in Hz.
- type:
float64[N_fpgas][N_ants_per_fpga][N_subbands]
Data-quality information
The following fields describe the data quality (see also Signal Chain):
- FPGA_signal_input_mean_R:
Mean value of the last second of input (in ADC quantisation units). Should be close to 0.
- type:
double[N_fpgas][N_ants_per_fpga]
- FPGA_signal_input_rms_R:
Root means square value of the last second of input (in ADC quantisation units).
rms^2 = mean^2 + std^2
. Values above 2048 indicate strong RFI. Values of 0 indicate a lack of signal input.- type:
double[N_fpgas][N_ants_per_fpga]
Error information
These attributes summarise the basic state of the device. Any elements which are not present in FPGA_mask_RW
will be ignored and thus not report errors:
- FPGA_procesing_error_R:
Whether the FPGAs are processing their input from the RCUs. NB: This will also raise an error if the Waveform Generator is enabled.
- type:
bool[N_fpgas]
Version Information
The following fields provide version information:
- FPGA_firmware_version_R:
The active firmware images.
- type:
str[N_fpgas]
- FPGA_hardware_version_R:
The versions of the boards hosting the FPGAs.
- type:
str[N_fpgas]
- TR_software_version_R:
The version of the server providing the OPC-UA interface.
- type:
str[N_fpgas]
Waveform Generator
The antenna input of SDP can be replaced by an internal waveform generator for debugging and testing purposes. The generator is configured per antenna per FPGA:
Note
The Waveform Generator needs to be toggled off and on using FPGA_wg_enable_RW
for new settings to become active on the station.
- FPGA_wg_enable_RW:
Whether the waveform generator is enabled for each input.
- type:
bool[N_fpgas][N_ants_per_fpga]
- FPGA_wg_phase_RW:
The phases of the generated waves (in degrees). The generator needs to be turned off and on if this is changed, in order to bring the generators in sync.
- type:
float32[N_fpgas][N_ants_per_fpga]
- FPGA_wg_frequency_RW:
The frequencies of the generated waves (in Hz). The frequency of a subband
s
is LBA:s * 200e6/1024
, HBA low band:(512 + s) * 200e6/1024
, HBA high band:(1024 + s) * 200e6/1024
.- type:
float32[N_fpgas][N_ants_per_fpga]
- FPGA_wg_amplitude_RW:
The amplitudes of the generated waves. Useful is a value of
0.1
, as higher risks clipping.- type:
float32[N_fpgas][N_ants_per_fpga]
Usage example
For example, the following code inserts a wave on LBA subband 102 on FPGAs 8 - 11:
# configure FPGAs to control
sdpfirmware.TR_fpga_mask_RW = [False] * 8 + [True] * 4 + [False] * 4
# configure waveform generator
sdp.FPGA_wg_phase_RW = [[0] * 12] * 16
sdp.FPGA_wg_amplitude_RW = [[0.1] * 12] * 16
sdp.FPGA_wg_frequency_RW = [[102 * 200e6/1024] * 12] * 16
# toggle and enable waveform generator
sdp.FPGA_wg_enable_RW = [[False] * 12] * 16
sdp.FPGA_wg_enable_RW = [[True] * 12] * 16