Tile Device
This module implements the MCCS Tile device.
- class MccsTile(*args, **kwargs)
An implementation of a Tile Tango device for MCCS.
- ApplyCalibration(switch_time)
Load the calibration coefficients at the specified time delay.
- Parameters:
switch_time (
str) – switch time, in ISO formatted time- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("ApplyCalibration", "")
- ApplyPointingDelays(start_time)
Apply the pointing delays at the specified time delay.
- Parameters:
start_time (
str) – time for applying the delays (default = 0)- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("ApplyPointingDelays", "")
- BeamformerRunningForChannels(channel_groups=None)
Check whether the beamformer is running for the given channel groups.
A json dictionary with optional keywords:
- Parameters:
channel_groups (
Optional[list[int]]) – (list) List of channel groups- Return type:
- Returns:
Whether the beamformer is running
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"channel_groups": [0,1,4,5]} >>> jstr = json.dumps(dict) >>> running = dp.command_inout("BeamformerRunningForChannels", jstr)
- ClearBroadbandRfi()
Clear all RFI counts registers.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
- Configure(antenna_ids=None, fixed_delays=None)
Configure the tile device attributes.
A json string with the keywords:
- Parameters:
- Return type:
- Configure40GCore(core_id=0, arp_table_entry=0, source_mac=None, source_ip=None, source_port=None, destination_ip=None, destination_port=None, rx_port_filter=None, netmask=None, gateway_ip=None)
Configure 40g core_id with specified parameters.
A json dictionary with only optional keywords:
- Parameters:
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"core_id":2, "arp_table_entry":0, "source_mac":0x62000a0a01c9, "source_ip":"10.0.99.3", "source_port":4000, "destination_ip":"10.0.99.3", "destination_port":5000} >>> jstr = json.dumps(dict) >>> dp.command_inout("Configure40GCore", jstr)
- ConfigureIntegratedBeamData(integration_time=0.5, first_channel=0, last_channel=191)
Configure the transmission of integrated beam data.
Using the provided integration time, the first channel and the last channel. The data are sent continuously until the StopIntegratedData command is run.
A json dictionary with optional keywords:
- Parameters:
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"integration_time": 0.2, "first_channel":0, "last_channel": 191} >>> jstr = json.dumps(dict) >>> dp.command_inout("ConfigureIntegratedBeamData", jstr)
- ConfigureIntegratedChannelData(integration_time=0.5, first_channel=0, last_channel=511)
Configure and start the transmission of integrated channel data.
Using the provided integration time, first channel and last channel. Data are sent continuously until the StopIntegratedData command is run.
A json dictionary with optional keywords:
- Parameters:
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"integration_time": 0.2, "first_channel":0, "last_channel": 191} >>> jstr = json.dumps(dict) >>> dp.command_inout("ConfigureIntegratedChannelData", jstr)
- ConfigurePatternGenerator(stage, pattern, adders, start=False, shift=0, zero=0, ramp1=None, ramp2=None)
Set the test pattern generator using the provided configuration.
A JSON dictionary with the following keywords:
- Parameters:
stage (
str) – The stage in the signal chain where the pattern is injected. Options are: ‘jesd’ (output of ADCs), ‘channel’ (output of the channelizer), or ‘beamf’ (output of the tile beamformer).pattern (
list[int]) – The data pattern in time order. Must be an array of length 1 to 1024. Represents values in time order, not for antennas or polarizations.adders (
list[int]) – A list of 32 integers that expands the pattern to cover 16 antennas and 2 polarizations. The adders map the pattern to hardware signals.start (
bool) – Boolean flag to indicate whether to start the pattern immediately. If False, the pattern can be started manually later.shift (
int) – Optional bit shift (divides by 2^shift). Must not be used in ‘beamf’ stage, where it is always overridden to 4.zero (
int) – Integer (0-65535) used as a mask to disable the pattern on specific antennas and polarizations. Applied to both FPGAs, supports up to 8 antennas and 2 polarizations.ramp1 (
Optional[dict[str,int]]) – An optional ramp1 applied after pattern. polarisation: The polarisation to apply the ramp for. This must be 0, 1 or -1 to use all stages.ramp2 (
Optional[dict[str,int]]) – An optional ramp2 applied after pattern. (note: ramp2 = ramp1 + 1234) polarisation: The polarisation to apply the ramp for. This must be 0, 1 or -1 to use all stages.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> test_pattern = list(range(1024)) >>> for n in range(1024): if n % 2 == 0: test_pattern[n] = n else: test_pattern[n] = random.randrange(0, 255, 1) >>> test_adders = list(range(32)) >>> config = {"stage": "jesd", "pattern": test_pattern, "adders": test_adders, "start": True} >>> jstr = json.dumps(config) >>> values = dp.command_inout("ConfigurePatternGenerator", jstr)
- ConfigureStationBeamformer(start_channel=192, n_channels=8, is_first=False, is_last=False)
Initialise and start the station beamformer.
Initial configuration of the tile-station beamformer. Optionally set the observed region, Default is 6.25 MHz starting at 150 MHz, and set whether the tile is the first or last in the beamformer chain.
A json dictionary with mandatory keywords:
- Parameters:
start_channel (
int) – (int) start channel of the observed region default = 192 (150 MHz)n_channels (
int) – (int) is the number of channels in the observed region default = 8 (6.25 MHz)is_first (
bool) – (bool) whether the tile is the first one in the station default Falseis_last (
bool) – (bool) whether the tile is the last one in the station default False
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – when the specified observed region is invalid
- Example:
>> dp = tango.DeviceProxy(“mccs/tile/01”) >> dict = {“start_channel”:64, “n_channels”:10, “is_first”:True, >> “is_last:True} >> jstr = json.dumps(dict) >> dp.command_inout(“ConfigureStationBeamformer”, jstr)
- ConfigureTestGenerator(set_time=None, tone_frequency=None, tone_amplitude=None, tone_2_frequency=None, tone_2_amplitude=None, noise_amplitude=None, pulse_frequency=None, pulse_amplitude=None, adc_channels=None, **kwargs)
Set the test signal generator.
A json dictionary with keywords:
- Parameters:
tone_frequency (
Optional[float]) – first tone frequency, in Hz. The frequency is rounded to the resolution of the generator. If this is not specified, the tone generator is disabled.tone_amplitude (
Optional[float]) – peak tone amplitude, normalized to 31.875 ADC units. The amplitude is rounded to 1/8 ADC unit. Default is 1.0. A value of -1.0 keeps the previously set value.tone_2_frequency (
Optional[float]) – frequency for the second tone. Same as ToneFrequency.tone_2_amplitude (
Optional[float]) – peak tone amplitude for the second tone. Same as ToneAmplitude.noise_amplitude (
Optional[float]) – RMS amplitude of the pseudorandom Gaussian white noise, normalized to 26.03 ADC units.pulse_frequency (
Optional[int]) – frequency of the periodic pulse. A code in the range 0 to 7, corresponding to (16, 12, 8, 6, 4, 3, 2) times the ADC frame frequency.pulse_amplitude (
Optional[float]) – peak amplitude of the periodic pulse, normalized to 127 ADC units. Default is 1.0. A value of -1.0 keeps the previously set value.set_time (
Optional[str]) – time at which the generator is set, for synchronization among different TPMs. In UTC ISO format (string)adc_channels (
Optional[list[int]]) – list of adc channels which will be substituted with the generated signal. It is a 32 integer, with each bit representing an input channel. Default: all if at least q source is specified, none otherwises.kwargs (
Optional[Any]) – optional keyword arguments: Currently supports: delays
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"tone_frequency": 150e6, "tone_amplitude": 0.1, "noise_amplitude": 0.9, "pulse_frequency": 7, "set_time": "2022-08-09T12:34:56.7Z"} >>> jstr = json.dumps(dict) >>> values = dp.command_inout("ConfigureTestGenerator", jstr)
- DisableBroadbandRfiBlanking(argin)
Disable broadband RFI blanking on specified antennas.
- DisableStationBeamFlagging()
Disable station beam flagging.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
TODO THORN-68: Currently we can’t verify if the flag has been set correctly, this functionality will get added later
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("DisableStationBeamFlagging")
- DownloadFirmware(argin)
Download the firmware contained in bitfile to all FPGAs on the board.
This should also update the internal register mapping, such that registers become available for use.
- Parameters:
argin (
str) – can either be the design name returned fromGetFirmwareAvailable()command, or a path to a file- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("DownloadFirmware", "/tmp/firmware/bitfile")
- EnableBroadbandRfiBlanking(argin)
Enable broadband RFI blanking on specified antennas.
- EnableStationBeamFlagging()
Enable station beam flagging.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
TODO THORN-68: Currently we can’t verify if the flag has been set correctly, this functionality will get added later
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("EnableStationBeamFlagging")
- EvaluateTileProgrammingState()
Re-evaluate the TileProgrammingState.
Evaluate and update the TileProgrammingState. Return True is the re-evaluation returned a different value to the value from automatic detection. (A value of True could signify a race condition, or that there is a bug in the automatic evaluation.)
- Return type:
- Returns:
True is the re-evaluation of TpmStatus returns a different value.
- Get40GCoreConfiguration(core_id=-1, arp_table_entry=0)
Get 40g core configuration for core_id.
This is required to chain up TPMs to form a station.
A json dictionary with optional keywords:
- Parameters:
- Return type:
- Returns:
the configuration is a json string describilg a list (possibly empty) Each list entry comprising: core_id, arp_table_entry, source_mac, source_ip, source_port, destination_ip, destination_port, netmask, gateway_ip
- Raises:
ValueError – if no configuration is found for the specified core_id and arp_table_entry
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> core_id = 2 >>> arp_table_entry = 0 >>> argout = dp.command_inout(Get40GCoreConfiguration, core_id, arp_table_entry) >>> params = json.loads(argout)
- GetArpTable()
Return a dictionary with populated ARP table for all used cores.
40G interfaces use cores 0 (fpga0) and 1(fpga1) and ARP ID 0 for beamformer, 1 for LMC. 10G interfaces use cores 0,1 (fpga0) and 4,5 (fpga1) for beamforming, and 2, 6 for LMC with only one ARP.
- Return type:
- Returns:
a JSON-encoded dictionary of coreId and populated arpID table
- Example:
>>> argout = dp.command_inout("GetArpTable") >>> dict = json.loads(argout) >>> { >>> "core_id0": [0, 1], >>> "core_id1": [0], >>> "core_id3": [], >>> }
- GetFirmwareAvailable()
Get available firmware.
Return a dictionary containing the following information for each firmware stored on the board (such as in Flash memory).
For each firmware, a dictionary containing the following keys with their respective values should be provided: ‘design’, which is a textual name for the firmware, ‘major’, which is the major version number, and ‘minor’.
- Return type:
- Returns:
a JSON-encoded dictionary of firmware details
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> jstr = dp.command_inout("GetFirmwareAvailable") >>> dict = json.load(jstr) { "firmware1": {"design": "model1", "major": 2, "minor": 3}, "firmware2": {"design": "model2", "major": 3, "minor": 7}, "firmware3": {"design": "model3", "major": 2, "minor": 6}, }
- GetRegisterList()
Return a list of descriptions of the exposed firmware (and CPLD) registers.
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> reglist = dp.command_inout("GetRegisterList")
- I2C_access_alm()
Return the I2C alarm reading.
0 -> OK 1 -> WARN 2 -> ALARM
- Initialise()
Perform all required initialisation.
(switches on on-board devices, locks PLL, performs synchronisation and other operations required to start configuring the signal processing functions of the firmware, such as channelisation and beamforming)
- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("Initialise")
- LoadCalibrationCoefficients(argin)
Load the calibration coefficients, but does not apply them.
This is performed by apply_calibration. The calibration coefficients may include any rotation matrix (e.g. the parallactic angle), but do not include the geometric delay.
antenna - (int) is the antenna to which the coefficients will be applied.
- calibration_coefficients - [array] a bidimensional complex array comprising
calibration_coefficients[channel, polarization], with each element representing a normalized coefficient, with (1.0, 0.0) being the normal, expected response for an ideal antenna.
- channel - (int) channel is the index specifying the channels at the
beamformer output, i.e. considering only those channels actually processed and beam assignments.
polarization index ranges from 0 to 3.
0: X polarization direct element
1: X->Y polarization cross element
2: Y->X polarization cross element
3: Y polarization direct element
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – when the inputs are invalid
- Example:
>>> antenna = 2 >>> complex_coefficients = [[complex(3.4, 1.2), complex(2.3, 4.1), >>> complex(4.6, 8.2), complex(6.8, 2.4)]]*5 >>> inp = list(itertools.chain.from_iterable(complex_coefficients)) >>> out = ([v.real, v.imag] for v in inp] >>> coefficients = list(itertools.chain.from_iterable(out)) >>> coefficients.insert(0, float(antenna)) >>> input = list(itertools.chain.from_iterable(coefficients)) >>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("LoadCalibrationCoefficients", input)
- LoadCalibrationCoefficientsForChannels(argin)
Load the calibration coefficients, but does not apply them.
This is performed by apply_calibration. The calibration coefficients may include any rotation matrix (e.g. the parallactic angle), but do not include the geometric delay.
- start_channel - (int) is the first channel to which the coefficients
will be applied.
- calibration_coefficients - [array] a tridimensional complex array comprising
calibration_coefficients[channel, antenna, polarization], with each element representing a normalized coefficient, with (1.0, 0.0) being the normal, expected response for an ideal antenna.
- channel - (int) channel is the index specifying the channels at the
beamformer output, i.e. considering only those channels actually processed and beam assignments.
antenna - index ranging 0 to 16, for the 16 antennas managed by the tile
polarization index ranges from 0 to 3.
0: X polarization direct element
1: X->Y polarization cross element
2: Y->X polarization cross element
3: Y polarization direct element
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – when the inputs are invalid
- Example:
>>> start_channel = 2 >>> complex_coefficients =[[[complex(3.4, 1.2), complex(2.3, 4.1), >>> complex(4.6, 8.2), complex(6.8, 2.4)]]*16]*4 >>> inp = list(itertools.chain.from_iterable(complex_coefficients)) >>> out = ([v.real, v.imag] for v in inp] >>> coefficients = list(itertools.chain.from_iterable(out)) >>> coefficients.insert(0, float(start_channel)) >>> input = list(itertools.chain.from_iterable(coefficients)) >>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("LoadCalibrationCoefficientsForChannels", input)
- LoadPointingDelays(argin)
Specify the delay in seconds and the delay rate in seconds/second.
The delay_array specifies the delay and delay rate for each antenna. beam_index specifies which beam is desired (range 0-7)
- Parameters:
argin (
list[float]) – An array containing: beam index, the delay in seconds and the delay rate in seconds/second, for each antenna.- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – If the number of parameters is insufficient or if the beam index is invalid.
- Example:
>>> # example delays: 16 values from -2 to +2 ns, rates = 0 >>> delays = [step * 0.25e-9 for step in list(range(-8, 8))] >>> rates = [0.0]*16 >>> beam = 0.0 >>> dp = tango.DeviceProxy("mccs/tile/01") >>> arg = [beam] >>> for i in range(16): >>> arg.append(delays[i]) >>> arg.append(rates[i]) >>> dp.command_inout("LoadPointingDelays", arg)
- MCU_wd()
Return the MCUwd alarm reading.
0 -> OK 1 -> WARN 2 -> ALARM
- MaxBroadbandRfi(argin)
Get max of RFI counts of specified antennas.
This returns the RFI count of the antenna with the maximum RFI count.
- Parameters:
argin (
list[int]) – list antennas whose RFI counters to read- Returns:
Maximum RFI counts
- Return type:
- Raises:
ValueError – if input arguments are invalid
- ReadAddress(argin)
Read n 32-bit values from address.
- Parameters:
argin (
list[int]) – [0] = address to read from [1] = number of values to read, default 1- Return type:
- Returns:
list of values
- Raises:
ValueError – if no address is provided, or if more than 2 parameters are provided
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> reglist = dp.command_inout("ReadAddress", [address, nvalues])
- ReadAntennaBuffer()
Read the data from the antenna buffer.
- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- ReadBroadbandRfi(argin)
Read out the broadband RFI counters for the specified antennas.
- Parameters:
argin (
list[int]) – list antennas of which RFI counters to read- Return type:
- Returns:
RFI counters per pol flattened as a 1D list
- Raises:
ValueError – if input arguments are invalid
- ReadRegister(register_name)
Return the value(s) of the specified register.
- Parameters:
register_name (
str) – full hyerarchic register name- Return type:
- Returns:
a list of register values
- Example:
>>> dp = tango.DeviceProxy("fpga1./tile/01") >>> values = dp.command_inout("ReadRegister", "test-reg1")
- SEM_wd()
Return the SEMwd alarm reading.
0 -> OK 1 -> WARN 2 -> ALARM
- SendDataSamples(**kwargs)
Transmit a snapshot containing raw antenna data.
- data_type - type of snapshot data (mandatory): “raw”, “channel”,
“channel_continuous”, “narrowband”, “beam”
start_time - Time (UTC string) to start sending data. Default immediately
seconds - (float) Delay if timestamp is not specified. Default 0.2 seconds
Depending on the data type: raw:
- sync: bool: send synchronised samples for all antennas, vs. round robin
larger snapshot from each antenna
channel:
n_samples: Number of samples per channel, default 1024
first_channel - (int) first channel to send, default 0
last_channel - (int) last channel to send, default 511
channel_continuous
channel_id - (int) channel_id (Mandatory)
n_samples - (int) number of samples to send per packet, default 128
narrowband:
frequency - (int) Sky frequency for band centre, in Hz (Mandatory)
round_bits - (int) Specify how many bits to round
n_samples - (int) number of spectra to send
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – if the provided arguments are invalid
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"data_type": "raw", "Sync":True, "Seconds": 0.2} >>> jstr = json.dumps(dict) >>> dp.command_inout("SendDataSamples", jstr)
- SetAttributeThresholds(argin)
Set the ALARM and WARNING thresholds on attributes.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing ResultCode and a message.
- Example:
>>> thresholds = {"boardTemperature" : { >>> "max_alarm": "79" >>> "min_alarm": "25" >>> "max_warning": "74" >>> "min_warning": "27" >>> }, >>> } >>> tile_proxy.SetAttributeThresholds(json.dumps(thresholds))
- Parameters:
argin (
str) – a serialised dictionary containing attribute names and threshold limits.
- SetBeamFormerRegions(argin)
Set the frequency regions which are going to be beamformed into each beam.
region_array is defined as a flattened 2D array, for a maximum of 48 regions. Total number of channels must be <= 384.
start_channel - (int) region starting channel, must be even in range 0 to 510
num_channels - (int) size of the region, must be a multiple of 8
beam_index - (int) beam used for this region with range 0 to 47
subarray_id - (int) Subarray
subarray_logical_channel - (int) logical channel # in the subarray
subarray_beam_id - (int) ID of the subarray beam
substation_id - (int) Substation
aperture_id: ID of the aperture (station*100+substation?)
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – when the inputs are invalid
- Example:
>>> regions = [[4, 24, 0, 0, 0, 3, 1, 101], [26, 40, 1, 0, 24, 4, 2, 102]] >>> input = list(itertools.chain.from_iterable(regions)) >>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("SetBeamFormerRegions", input)
- SetBroadbandRfiFactor(rfi_factor)
Set the RFI factor for broadband RFI detection.
The higher the RFI factor, the less RFI is detected/flagged. This is because data is flagged if the short term power is greater than the long term power * RFI factor * 32/27
- Parameters:
rfi_factor (
float) – the sensitivity value for the RFI detection- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- SetCspDownload(destination_ip_1, destination_ip_2, is_last, destination_port=None, source_port=None, netmask=None, gateway=None)
Set CSP Destination per tile.
A json dictionary with optional keywords:
- Parameters:
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"source_port": 4661, "destination_ip_1": "10.0.10.2", "destination_ip_2": "10.0.10.3", "destination_port": 4660, "is_last": False, "netmask": "255.255.255.0", "gateway": "10.0.10.1"} >>> jstr = json.dumps(dict) >>> dp.command_inout("SetCspDownload", jstr)
- SetLmcDownload(mode, payload_length=1024, destination_ip='10.0.10.1', source_port=61648, destination_port=4660, netmask_40g=None, gateway_40g=None)
Specify whether control data will be transmitted over 1G or 40G networks.
A json dictionary with optional keywords:
- Parameters:
mode (
str) – (string) ‘1G’ or ‘10G’ (Mandatory) (use ‘10G’ for 40G also)payload_length (
int) – (int) SPEAD payload length for channel datadestination_ip (
str) – (string) Destination IP.source_port (
Optional[int]) – (int) Source port for integrated data streamsdestination_port (
Optional[int]) – (int) Destination port for integrated data streamsnetmask_40g (
Optional[str]) – (string) 40g (science data) subnet maskgateway_40g (
Optional[str]) – (string) IP address of 40g (science) subnet gateway
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>> dp = tango.DeviceProxy(“mccs/tile/01”) >> dict = {“mode”: “1G”, “payload_length”: 4, “destination_ip”: “10.0.1.23”} >> jstr = json.dumps(dict) >> dp.command_inout(“SetLmcDownload”, jstr)
- SetLmcIntegratedDownload(mode, channel_payload_length=1024, beam_payload_length=1024, destination_ip='10.0.10.1', source_port=61648, destination_port=4660, netmask_40g=None, gateway_40g=None)
Configure link and size of control data.
A json dictionary with optional keywords:
- Parameters:
mode (
str) – (string) ‘1G’ or ‘10G’ (Mandatory)channel_payload_length (
int) – (int) SPEAD payload length for integrated channel databeam_payload_length (
int) – (int) SPEAD payload length for integrated beam datadestination_ip (
str) – (string) Destination IPsource_port (
int) – (int) Source port for integrated data streamsdestination_port (
int) – (int) Destination port for integrated data streamsnetmask_40g (
Optional[str]) – (string) 40g (science data) subnet maskgateway_40g (
Optional[str]) – (string) IP address of 40g (science) subnet gateway
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"mode": "1G", "channel_payload_length":4, "beam_payload_length": 1024, "destination_ip": "10.0.1.23"} >>> jstr = json.dumps(dict) >>> dp.command_inout("SetLmcIntegratedDownload", jstr)
- SetUpAntennaBuffer(mode='SDN', ddr_start_byte_address=536870912, max_ddr_byte_size=None)
Set up the antenna buffer.
A json serialised dictionary containing the following keys:
- Parameters:
mode (
str) – network to transmit antenna buffer data to. Options: ‘SDN’ (Science Data Network) and ‘NSDN’ (Non-Science Data Network)ddr_start_byte_address (
int) – first address in the DDR for antenna buffer data to be written in (in bytes).max_ddr_byte_size (
Optional[int]) – last address for writing antenna buffer data (in bytes). If ‘None’ is chosen, the method will assume the last address to be the final address of the DDR chip
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- StartADCs()
Start the ADCs.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("StartADCs")
- StartAcquisition(start_time=None, global_reference_time=None, delay=2)
Start data acquisition.
json dictionary with optional keywords:
- Parameters:
- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"start_time":"2021-11-22, "delay":20} >>> jstr = json.dumps(dict) >>> dp.command_inout("StartAcquisition", jstr)
- StartAntennaBuffer(antennas, start_time=-1, timestamp_capture_duration=75, continuous_mode=False)
Start recording to the antenna buffer.
- Parameters:
antennas (
list[int]) – a list of antenna IDs to be used by the buffer, from 0 to 15. One or two antennas can be used for each FPGA, or 1 to 4 per buffer.start_time (
int) – the first time stamp that will be written into the DDR. When set to -1, the buffer will begin writing as soon as possible.timestamp_capture_duration (
int) – the capture duration in timestamps. Timestamps are in units of 256 ADC samples (256*1.08us).continuous_mode (
bool) – “True” for continous capture. If enabled, time capture durations is ignored
- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- StartBeamformer(start_time=None, duration=-1, channel_groups=None, scan_id=0)
Start the beamformer at the specified time delay.
- Parameters:
start_time (
Optional[str]) – Start time as ISO formatted timeduration (
int) – Scan duration, in frames, default “forever”channel_groups (
Optional[list[int]]) – Channel groups to be started Command affects only beamformed channels for given groups Default: all channelsscan_id (
int) – ID of the scan to be started. Default 0
- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"StartTime":10, "Duration":20, "channel_groups": [0,1,4] } >>> jstr = json.dumps(dict) >>> dp.command_inout("StartBeamformer", jstr)
- StartPatternGenerator(stage)
Start the pattern generator at the specified stage.
The stage can be the output of the JESD, the channelizer, or the beamformer.
- Parameters:
stage (
str) – A positional string argument specifying the stage in the signal chain where the pattern was injected. Options are: ‘jesd’ (output of ADCs), ‘channel’ (output of channelizer), ‘beamf’ (output of tile beamformer), or ‘all’ for all stages.- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("StartPatternGenerator", "channel")
- StopADCs()
Stop the ADCs.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("StopADCs")
- StopAntennaBuffer()
Stop writting to the antenna buffer.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- StopBeamformer(channel_groups=None)
Stop the beamformer.
- Parameters:
channel_groups (
Optional[list[int]]) – list of channel groups to be stopped Command affects only beamformed channels for given groups Default: all channels- Return type:
TaskFunctionType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"channel_groups": [0,1,4] } >>> jstr = json.dumps(dict) >>> dp.command_inout("StopBeamformer", jstr)
- StopDataTransmission()
Stop data transmission from board.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("StopDataTransmission")
- StopIntegratedData()
Stop the integrated data.
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- StopPatternGenerator(stage)
Stop the pattern generator at the specified stage.
The stage can be the output of the JESD, the channelizer, or the beamformer.
- Parameters:
stage (
str) – A positional string argument specifying the stage in the signal chain where the pattern was injected. Options are: ‘jesd’ (output of ADCs), ‘channel’ (output of channelizer), ‘beamf’ (output of tile beamformer), or ‘all’ for all stages.- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purposes only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("StopPatternGenerator", "jesd")
- UpdateThresholdCache()
Re-sync the threshold caches.
Re-sync the db thresholds and the firmware thresholds and compare the two, transitioning to fault when they do not match.
NOTE: this command is deprecated, it has been put in to alleviate potential issues with ADR-115 firmware threshold work, in the case of bugs.
- Return type:
- Returns:
True if the database matches the firmware, False otherwise.
- WriteAddress(argin)
Write list of values at address.
- Parameters:
argin (
list[int]) – [0] = address to write to [1..n] = list of values to write- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Raises:
ValueError – if less than 2 parameters are provided
- Example:
>>> values = [.....] >>> address = 0xfff >>> dp = tango.DeviceProxy("mccs/tile/01") >>> dp.command_inout("WriteAddress", [address, values])
- WriteRegister(register_name, values)
Write values to the specified register.
A json dictionary with mandatory keywords:
- Parameters:
- Return type:
DevVarLongStringArrayType- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- Example:
>>> dp = tango.DeviceProxy("mccs/tile/01") >>> dict = {"register_name": "test-reg1", "values": values, "offset": 0} >>> jstr = json.dumps(dict) >>> dp.command_inout("WriteRegister", jstr)
- __init__(*args, **kwargs)
Initialise this device object.
- adcHealth()
Read the ADC Health State of the device.
This is an aggregated quantity representing if any of the ADC monitoring points are outside of their thresholds. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
ADC Health State of the device
- adcPower()
Return the RMS power of every ADC signal.
so a TPM processes 16 antennas, this should return 32 RMS value.
- adc_pll_lock_status()
Return the pll status of all 16 ADCs.
The first list represents the pll status of the ADCs in order. The second list represents the lock lost counter for ADCs in order.
- Expected: 1 if PLL locked and loss of lock flag is low
(lock has not fallen).
- Example:
>>> tile.adc_pll_lock_status [[1]*16,[1]*16]
- Return type:
- Returns:
the pll status of all ADCs
- adc_sysref_counter()
Return the sysref_counter of all ADCs.
Expected: 1 if SYSREF counter is incrementing (SYSREF is present), 0 if not present.
- Example:
>>> tile.adc_sysref_counter [1] * 16
- Return type:
- Returns:
the sysref_counter of all ADCs idx0->ADC0, idx1->ADC1, … idx15->ADC15
- adc_sysref_timing_requirements()
Return the sysref_timing_requirements of all ADCs.
Expected: 1 if setup and hold requirements for SYSREF are met, else return 0.
- Example:
>>> tile.adc_sysref_timing_requirements [1] * 16
- Return type:
- Returns:
the sysref_timing_requirements of all ADCs idx0->ADC0, idx1->ADC1, … idx15->ADC15
- alarmHealth()
Read the alarm Health State of the device.
This is an aggregated quantity representing if any of the alarm monitoring points are outside of their thresholds. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
alarm Health State of the device
- allLiveCal()
Read all live calibration coefficients.
- Return type:
- Returns:
JSON string of all live calibration coefficients.
- allStagedCal()
Read all staged calibration coefficients.
- Return type:
- Returns:
JSON string of all staged calibration coefficients.
- antennaBufferMode()
Return if antenna buffer is sending over SDN or NSDN.
- Return type:
- Returns:
string of SND or NSDN
- antennaIds(antenna_ids)
Set the antenna IDs.
- arp()
Return the arp status.
Expected: True if table entries are valid and resolved.
- Example:
>>> tile.arp True
- Return type:
- Returns:
the arp status.
- beamformerRegions()
Get beamformer region table.
Bidimensional array of one row for each 8 channels, with elements: 0. start physical channel 1. number of channels 2. beam index 3. subarray ID 4. subarray_logical_channel 5. subarray_beam_id 6. substation_id 8. aperture_id
Each row is a set of 8 consecutive elements in the list.
- beamformerTable()
Get beamformer region table.
Bidimensional array of one row for each 8 channels, with elements: 0. start physical channel 1. beam number 2. subarray ID 3. subarray_logical_channel 4. subarray_beam_id 5. substation_id 6. aperture_id
Each row is a set of 7 consecutive elements in the list.
- broadbandRfiFactor()
Get the RFI factor for broadband RFI detection.
- Note: Only the RFI factor of FPGA1 is read,
since the same value is loaded into all FPGAs.
- Returns:
rfi_factor: the sensitivity value for the RFI detection
- Return type:
- channeliserRounding(truncation)
Set channeliser rounding.
- clockPresent()
Report if 10 MHz clock signal is present at the TPM input.
- Raises:
NotImplementedError – not implemented in ska-low-sps-tpm-api.
- Return type:
- coreCommunicationStatus()
Return status of connection to TPM, CPLD and FPGAs.
Return True if communication is OK else False
- Example:
>>> core_communication_status = tile_proxy.coreCommunicationStatus >>> print(core_communication_status) >>> {'CPLD': True, 'FPGA0': True, 'FPGA1': True}
- create_component_manager()
Create and return a component manager for this device.
- Return type:
- Returns:
a component manager for this device.
- cspDestinationIp()
Return the cspDestinationIp attribute.
- Return type:
- Returns:
the IP address of the csp destination
- cspDestinationMac()
Return the cspDestinationMac attribute.
- Return type:
- Returns:
the MAC address of the csp destination
- cspDestinationPort()
Return the cspDestinationMac attribute.
- Return type:
- Returns:
the port of the csp destination
- cspRounding(rounding)
Set CSP formatter rounding.
- cspSpeadFormat(spead_format)
Set CSP SPEAD format.
CSP format is: AAVS for the format used in AAVS2-AAVS3 system, using a reference Unix time specified in the header. SKA for the format defined in SPS-CBF ICD, based on TAI2000 epoch.
- currentFE0()
Handle a Tango attribute read of the FE0 current.
- currentFE1()
Handle a Tango attribute read of the FE1 current.
- currentFrame()
Return current frame.
in units of 256 ADC frames (276,48 us) Currently this is required, not sure if it will remain so.
- Return type:
- Returns:
current frame
- currentHealth()
Read the current Health State of the device.
This is an aggregated quantity representing if any of the current monitoring points are outside of their thresholds. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
current Health State of the device
- currentTileBeamformerFrame()
Return current frame.
in units of 256 ADC frames (276,48 us) Currently this is required, not sure if it will remain so.
- Return type:
- Returns:
current frame
- dataTransmissionMode()
Return if we’re sending data through 1G or 10G port.
- Return type:
- Returns:
Either 1G or 10G string
- data_router_discarded_packets()
Return the number of discarded packets.
Expected: 0 if no packets are discarded.
- Example:
>>> tile.data_router_discarded_packets '{"FPGA0": [0, 0], "FPGA1": [0, 0]}'
- Return type:
- Returns:
the linkup loss count per FPGA.
- ddr_initialisation()
Return the ddr initialisation status.
Expected: True if DDR interface was successfully initialised.
- Example:
>>> tile.ddr_initialisation True
- Return type:
- Returns:
the ddr initialisation status.
- ddr_write_size()
Return the ddr write size obtained from running start_antenna_buffer.
- Example:
>>> tile.ddr_write_size
- Return type:
- Returns:
ddr write size of a frame
- delete_device()
Prepare to delete the device.
This method must be done explicitly, else polling threads are not cleaned up after init_device().
- Return type:
- dev_state()
Calculate this device state.
The base device offers some automatic state discovery. However we have some attributes that require explicit analysis as to whether they are in ALARM or not,
e.g. DevBoolean
- Return type:
- Returns:
the ‘tango.DevState’ calculated
- dsp()
Return the tile beamformer and station beamformer status.
- Return type:
- Returns:
the tile beamformer and station beamformer status
- dspHealth()
Read the dsp Health State of the device.
This is an aggregated quantity representing if any of the dsp monitoring points do not have a permitted value. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
dsp Health State of the device
- execute_Off()
Turn the device off.
To modify behaviour for this command, modify the do() method of the command class.
- Return type:
tuple[list[ResultCode],list[str]]- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- execute_On()
Turn device on.
To modify behaviour for this command, modify the do() method of the command class.
- Return type:
tuple[list[ResultCode],list[str]]- Returns:
A tuple containing a return code and a string message indicating status. The message is for information purpose only.
- f2f_hard_errors()
Return the f2f interface hard error count.
- Expected: 0 if no hard errors detected in FPGA-to-FPGA interface.
Hard errors require the interface to be reset. This likely means reinitialising the TPM entirely due to the impact on beamformers.
- Example:
>>> tile.f2f_hard_errors 0
- Return type:
- Returns:
the f2f interface hard error count.
- f2f_pll_counter()
Return the PLL lock loss counter.
Expected: 0 if no PLL lock loss events detected. Increments for each lock loss event.
- Example:
>>> tile.f2f_pll_counter '0'
- Return type:
- Returns:
the PLL lock loss counter.
- f2f_pll_lock_status()
Return the PLL lock status.
Expected: 1 if PLL locked, 0 otherwise.
- Example:
>>> tile.f2f_pll_lock_status '1'
- Return type:
- Returns:
the PLL lock status.
- f2f_soft_errors()
Return the f2f interface soft error count.
Expected: 0 if no soft errors detected in FPGA-to-FPGA interface.
- Example:
tile.f2f_soft_errors 0
- Return type:
- Returns:
the f2f interface soft error count.
- firmwareCurrentThresholds(value)
Set the Current thresholds in firmware.
- Parameters:
value (
str) – A json serialised string with the thresholds.- Raises:
ValueError – When only one threshold is defined, you must define min and max.
- Return type:
- firmwareName(value)
Set the firmware name.
- firmwareTemperatureThresholds(value)
Write the temperature thresholds in firmware.
- firmwareVersion(value)
Set the firmware version.
- firmwareVoltageThresholds(value)
Set the voltage thresholds in the firmware.
- Parameters:
value (
str) – A json serialised string with the thresholds.- Raises:
ValueError – When only one threshold is defined, you must define min and max.
- Return type:
- fortyGPacketCount()
Get 40G packet counts.
The return value depends on how many 40G cores are active. Typically, only one core is active.
Example:
# 0 cores active {} # 1 core active { 'FPGA0': { 'rx_received': 2921, 'rx_forwarded': 0, 'tx_transmitted': 6973024 } } # 2 cores active { 'FPGA0': { 'rx_received': 3881, 'rx_forwarded': 0, 'tx_transmitted': 7321460 }, 'FPGA1': { 'rx_received': 1, 'rx_forwarded': 0, 'tx_transmitted': 3122 } }
- Return type:
- Returns:
Packet counts per active 40G core. Returns an empty dictionary if no 40G cores are active.
- fortyGbDestinationIps()
Return the destination IPs for all 40Gb ports on the tile.
- fortyGbDestinationPorts()
Return the destination ports for all 40Gb ports on the tile.
- fpga0_bip_error_count()
Return the bip error count for FPGA0.
Expected: 0 if no bit-interleaved parity (BIP) errors detected.
- fpga0_clock_managers_count()
Return the PLL lock loss counter for C2C, JESD and DSP.
Expected: 0 per interface if no lock loss events.
- Example:
>>> tile.fpga0_clock_managers_count [0, 0, 0]
3 rows → one for each MMCM type: [“C2C_MMCM”, “JESD_MMCM”, “DSP_MMCM”]
- fpga0_clock_managers_status()
Return the PLL lock status C2C, JESD and DSP.
Expected: 1 if MMCM clock locked 0 otherwise
- Example:
>>> tile.fpga0_clock_managers_status [0, 0, 0]
3 rows → one for each MMCM type: [“C2C_MMCM”, “JESD_MMCM”, “DSP_MMCM”]
- fpga0_clocks()
Return the status of clocks for the interfaces of FPGA0.
Expected: 1 per interface if status is OK. 0 if not OK.
- fpga0_crc_error_count()
Return the crc error count for FPGA0.
Expected: 0 if no Cyclic Redundancy Check (CRC) errors detected.
- Example:
>>> tile.fpga0_crc_error_count 0
- Return type:
- Returns:
the crc error count for FPGA0.
- fpga0_data_router_status()
Return the status of the data router.
Expected: 0 if no status OK.
- Example:
>>> tile.fpga0_data_router_status 0
- Return type:
- Returns:
the linkup loss count per FPGA.
- fpga0_ddr_reset_counter()
Return the ddr reset count.
Expected: 0 if no reset events have occurred.
- Example:
>>> tile.fpga0_ddr_reset_counter 0
- Return type:
- Returns:
the ddr reset count.
- fpga0_decode_error_count()
Return the decode error count per FPGA.
- Expected: 0 if errors have not been detected.
Note: This counter increments when at least one error is detected in a clock cycle.
- fpga0_lane_error_count()
Return the error count per lane, per core.
Expected: 0 for all lanes.
- fpga0_linkup_loss_count()
Return the linkup loss count.
Expected: 0 if no link loss events are detected.
- Example:
>>> tile.fpga0_linkup_loss_count 0
- Return type:
- Returns:
the linkup loss count.
- fpga0_qpll_counter()
Return the QPLL lock loss counter.
Expected: 0 if no lock loss events detected. Increments for each lock loss event.
- Example:
>>> tile.fpga0_qpll_counter 0
- Return type:
- Returns:
the QPLL lock loss counter.
- fpga0_qpll_status()
Return the QPLL lock status.
Expected: 1 if QPLL locked.
- Example:
>>> tile.fpga0_qpll_status 1
- Return type:
- Returns:
the QPLL lock status and lock loss counter.
- fpga0_resync_count()
Return the resync count.
Expected: 0 if no resync events have ocurred.
- Example:
>>> tile.fpga0_resync_count 0
- Return type:
- Returns:
the resync count
- fpga0_station_beamformer_error_count()
Return the station beamformer error count for FPGA0.
Expected: 0 if no parity errors detected.
- Example:
>>> tile.fpga0_station_beamformer_error_count 0
- Return type:
- Returns:
the station beamformer error count for FPGA0.
- fpga0_station_beamformer_flagged_count()
Return the station beamformer error count for FPGA0.
Note: When station beam flagging is enabled, this returns a count of packets flagged, but when station beam flagging is disabled, this instead returns a count of packets discarded/dropped
Expected: 0 if no parity errors detected.
- Example:
>>> tile.fpga0_station_beamformer_flagged_count 0
- Return type:
- Returns:
the station beamformer error count for FPGA0.
- fpga1Temperature()
Return the temperature of FPGA 1.
- fpga1_bip_error_count()
Return the bip error count for FPGA1.
Expected: 0 if no bit-interleaved parity (BIP) errors detected.
- fpga1_clock_managers_count()
Return the PLL lock loss counter for C2C, JESD and DSP.
Expected: 0 per interface if no lock loss events.
- Example:
>>> tile.fpga1_clock_managers_count [0, 0, 0]
3 rows → one for each MMCM type: [“C2C_MMCM”, “JESD_MMCM”, “DSP_MMCM”]
- fpga1_clock_managers_status()
Return the PLL lock status for C2C, JESD and DSP.
Expected: 1 if MMCM clock locked 0 otherwise
- Example:
>>> tile.fpga1_clock_managers_status [0, 0, 0]
3 rows → one for each MMCM type: [“C2C_MMCM”, “JESD_MMCM”, “DSP_MMCM”]
- fpga1_clocks()
Return the status of clocks for the interfaces of FPGA1.
Expected: 1 per interface if status is OK. 0 if not OK.
- Example:
>>> tile.fpga1_clocks [1, 1, 1]
- Return type:
- Returns:
the status of clocks for the interfaces of FPGA1. [1, 1, 1] == [JESD, DDR, UDP]
- fpga1_crc_error_count()
Return the crc error count for FPGA1.
Expected: 0 if no Cyclic Redundancy Check (CRC) errors detected.
- Example:
>>> tile.fpga1_crc_error_count 0
- Return type:
- Returns:
the crc error count for FPGA0.
- fpga1_data_router_status()
Return the status of the data router.
Expected: 0 if no status OK.
- Example:
>>> tile.fpga1_data_router_status 0
- Return type:
- Returns:
the linkup loss count per FPGA.
- fpga1_ddr_reset_counter()
Return the ddr reset count.
Expected: 0 if no reset events have occurred.
- Example:
>>> tile.fpga1_ddr_reset_counter 0
- Return type:
- Returns:
the ddr reset count.
- fpga1_decode_error_count()
Return the decode error count per FPGA.
- Expected: 0 if errors have not been detected.
Note: This counter increments when at least one error is detected in a clock cycle.
- fpga1_lane_error_count()
Return the error count per lane, per core.
Expected: 0 for all lanes.
- fpga1_linkup_loss_count()
Return the linkup loss count.
Expected: 0 if no link loss events are detected.
- Example:
>>> tile.fpga1_linkup_loss_count 0
- Return type:
- Returns:
the linkup loss count.
- fpga1_qpll_counter()
Return the QPLL lock loss counter.
Expected: 0 if no lock loss events detected. Increments for each lock loss event.
- Example:
>>> tile.fpga1_qpll_counter 0
- Return type:
- Returns:
the QPLL lock loss counter.
- fpga1_qpll_status()
Return the QPLL lock status.
Expected: 1 if QPLL locked.
- Example:
>>> tile.fpga1_qpll_status '1'
- Return type:
- Returns:
the QPLL lock status.
- fpga1_resync_count()
Return the resync count.
Expected: 0 if no resync events have ocurred.
- Example:
>>> tile.fpga1_resync_count 0
- Return type:
- Returns:
the resync count
- fpga1_station_beamformer_error_count()
Return the station beamformer error count for FPGA1.
Expected: 0 if no parity errors detected.
- Example:
>>> tile.fpga1_station_beamformer_error_count 0
- Return type:
- Returns:
the station beamformer error count for FPGA1.
- fpga1_station_beamformer_flagged_count()
Return the station beamformer error count for FPGA1.
Note: When station beam flagging is enabled, this returns a count of packets flagged, but when station beam flagging is disabled, this instead returns a count of packets discarded/dropped
Expected: 0 if no parity errors detected.
- Example:
>>> tile.fpga1_station_beamformer_flagged_count 0
- Return type:
- Returns:
the station beamformer error count for FPGA1.
- fpga2Temperature()
Return the temperature of FPGA 2.
- fpgaFrameTime()
Return the FPGA synchronization timestamp.
- Return type:
- Returns:
the FPGA timestamp, in UTC format
- fpgaReferenceTime()
Return the FPGA synchronization timestamp.
- Return type:
- Returns:
the FPGA timestamp, in UTC format
- globalReferenceTime(reference_time)
Set the global global synchronization timestamp.
- healthModelParams(argin)
Set the params for health transition rules.
- Parameters:
argin (
str) – JSON-string of dictionary of health states- Raises:
NotImplementedError – If UseAttributesForHealth if True
- Return type:
- init_device()
Initialise the device.
- integratedDataTransmissionMode()
Return if we’re sending integrated data through 1G or 10G port.
- Return type:
- Returns:
Either 1G or 10G string
- io()
Return a dictionary of I/O interfaces status available.
- Return type:
- Returns:
I/O interfaces status
- ioHealth()
Read the io Health State of the device.
This is an aggregated quantity representing if any of the io monitoring points do not have a permitted value. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
io Health State of the device
- isBeamformerRunning()
Check if beamformer is running.
- isProgrammed()
Return a flag indicating whether of not the board is programmed.
- Return type:
- Returns:
whether of not the board is programmed
- is_ConfigureTestGenerator_allowed()
Check if command is allowed.
It is allowed only in engineering mode.
- Return type:
- Returns:
whether the command is allowed
- is_engineering()
Return a flag representing whether we are in Engineering mode.
- Return type:
- Returns:
True if Tile is in Engineering Mode.
- is_firmware_threshold_allowed(req_type)
Return a flag representing whether we are allowed to access the attribute.
- Parameters:
req_type (
AttReqType) – the request type- Return type:
- Returns:
True if access is allowed.
- lane_status()
Return the lane status.
Expected: True if no errors detected on any lane.
- Example:
>>> tile.lane_status True
- Return type:
- Returns:
the lane status.
- lastPointingDelays()
Return last pointing delays applied to the tile.
Values are initialised to 0.0 if they haven’t been set. These values are in channel order, with each pair corresponding to a delay and delay rate.
- link_status()
Return the jesd link status.
Expected: True if link up and synchronised.
- Example:
>>> tile.link_status True
- Return type:
- Returns:
the link status.
- logicalTileId(value)
Set the logicalTileId attribute.
The logical tile id is the id of the tile in the station.
- notify_emission(signal, value)
Handle signal emissions, pushing tango events and checking alarms.
Overrides the base class to trigger alarm checking for signal-based attributes after their tango events have been pushed.
- pendingDataRequests()
Check for pending data requests.
- pfbVersion()
Return the version of the polyphase filter firmware.
- Return type:
- Returns:
the version of the polyphase filter firmware
- phaseTerminalCount(value)
Set the phase terminal count.
- pllLocked()
Report if ADC clock PLL is in locked state.
- pointingDelays()
Get the pointing delays for beam 0.
- post_change_event(name, attr_value, attr_time, attr_quality)
Post a Archive and Change TANGO event.
- Parameters:
name (
str) – the name of the TANGO attribute to pushattr_value (
Any) – The value of the attribute.attr_time (
float) – A parameter specifying the time the attribute was updated.attr_quality (
AttrQuality) – A paramter specifying the quality factor of the attribute.
- Return type:
- ppsDelay()
Return the delay between PPS and 10 MHz clock.
- ppsDelayCorrection(pps_delay_correction)
Set a correction to make to the pps delay.
Note: will be applied during next initialisation.
- ppsDrift()
Return the observed drift in the ppsDelay of this Tile.
ppsDrift measures the difference between the TPM’s currently reported ppsDelay and the value it had when the Tile Tango device was initialised. This will initially be zero and then will increase as reported value of ppsDelay changes over time.
- Return type:
- Returns:
Return the pps delay drift in 1.25ns units or None if not initialised
- ppsPresent()
Report if PPS signal is present at the TPM input.
- Return type:
- Returns:
a tuple with attribute_value, time, quality
- preaduLevels(levels)
Set attenuator level of preADU channels, one per input channel.
- rfiBlankingEnabledAntennas()
Get the list of antennas for broadband RFI blanking is currently enabled.
- rfiCount()
Return the RFI count per antenna/pol.
- runningBeams()
List running status for each SubarrayBeam.
- shutdown_on_max_alarm(attr_name)
Turn off TPM when attribute in question is in max_alarm state.
- simulationMode(value)
Set the simulation mode.
Writing this attribute is deliberately unimplemented. The simulation mode should instead be set by setting the device’s SimulationConfig property at launch.
- Parameters:
value (
SimulationMode) – The simulation mode, as a SimulationMode value- Return type:
- srcip40gfpga1(argin)
Set source IP for FPGA1.
- srcip40gfpga2(argin)
Set source IP for FPGA2.
- staticTimeDelays(delays)
Set static time delay.
- stationBeamFlagEnabled()
Return True if station beam data flagging is enabled.
- stationId(value)
Set the id of the station to which this tile is assigned.
- station_beamformer_status()
Return the status of the station beamformer.
Expected: True if status OK.
- Example:
>>> tile.station_beamformer_status True
- Return type:
- Returns:
the status of the station beamformer.
- sysrefPresent()
Report if SYSREF signal is present at the FPGA.
- Raises:
NotImplementedError – not implemented in ska-low-sps-tpm-api.
- Return type:
- temperatureADC0()
Handle a Tango attribute read of the ADC 0 temperature.
- temperatureADC1()
Handle a Tango attribute read of the ADC 1 temperature.
- temperatureADC10()
Handle a Tango attribute read of the ADC 10 temperature.
- temperatureADC11()
Handle a Tango attribute read of the ADC 11 temperature.
- temperatureADC12()
Handle a Tango attribute read of the ADC 12 temperature.
- temperatureADC13()
Handle a Tango attribute read of the ADC 13 temperature.
- temperatureADC14()
Handle a Tango attribute read of the ADC 14 temperature.
- temperatureADC15()
Handle a Tango attribute read of the ADC 15 temperature.
- temperatureADC2()
Handle a Tango attribute read of the ADC 2 temperature.
- temperatureADC3()
Handle a Tango attribute read of the ADC 3 temperature.
- temperatureADC4()
Handle a Tango attribute read of the ADC 4 temperature.
- temperatureADC5()
Handle a Tango attribute read of the ADC 5 temperature.
- temperatureADC6()
Handle a Tango attribute read of the ADC 6 temperature.
- temperatureADC7()
Handle a Tango attribute read of the ADC 7 temperature.
- temperatureADC8()
Handle a Tango attribute read of the ADC 8 temperature.
- temperatureADC9()
Handle a Tango attribute read of the ADC 9 temperature.
- temperatureHealth()
Read the temperature Health State of the device.
This is an aggregated quantity representing if any of the temperature monitoring points are outside of their thresholds. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
temperature Health State of the device
- temperature_alm()
Return the Temperature alarm reading.
0 -> OK 1 -> WARN 2 -> ALARM
- temperatures()
Return all the temperatures values available.
- Return type:
- Returns:
temperatures available
- testGeneratorActive()
Report if the test generator is used for some channels.
- Return type:
- Returns:
test generator status
- testMode(value)
Set the test mode.
Writing this attribute is deliberately unimplemented. The test mode should instead be set by setting the device’s TestConfig property at launch.
- tileProgrammingState()
Get the tile programming state.
- tile_beamformer_status()
Return the status of the tile beamformer.
Expected: True if status OK.
- Example:
>>> tile.tile_beamformer_status True
- Return type:
- Returns:
the status of the tile beamformer.
- tile_info()
Return all the tile info available.
- Example:
>>> tile.tile_info '{"hardware": {"ip_address_eep": "10.0.10.2", "netmask_eep": "255.255.255.0", "gateway_eep": "255.255.255.255", "SN": "0850423050008", "PN": "iTPM_ADU_2.0", "bios": "v0.6.0 (CPLD_0x23092511-MCU_0xb000011a_0x20230209_0x0)", "BOARD_MODE": "NO-ADA", "EXT_LABEL": "00291;163-010013;2.0;36240080", "HARDWARE_REV": "v2.0.1a", "DDR_SIZE_GB": "4"}, "fpga_firmware": {"design": "tpm_test", "build": "2004", "compile_time": "2024-05-29 02:00:36.158315", "compile_user": "gitlab-runner (created by john holden)", "compile_host": "te7nelson linux-4.18.0-553.44.1.el8_10.x86_64-x86_64-with-glibc2.28", "git_branch": "detached head", "git_commit": "a22da05fe4cc7078c966 merge branch 'rel-2069-release-v-6-3-0' into 'main'", "version": "6.3.0"}, "network": {"1g_ip_address": "10.132.0.46", "1g_mac_address": "fc:0f:e7:e6:43:6c", "1g_netmask": "255.255.255.0", "1g_gateway": "10.132.0.254", "40g_ip_address_p1": "10.130.0.108", "40g_mac_address_p1": "62:00:0A:82:00:6C", "40g_gateway_p1": "10.130.0.126", "40g_netmask_p1": "255.255.255.128", "40g_ip_address_p2": "0.0.0.0", "40g_mac_address_p2": "02:00:00:00:00:00", "40g_gateway_p2": "10.130.0.126", "40g_netmask_p2": "255.255.255.128"}}'
- Return type:
- Returns:
info available
- timing()
Return a dictionary of the timing signals status.
- Return type:
- Returns:
timing signals status
- timingHealth()
Read the timing Health State of the device.
This is an aggregated quantity representing if any of the timing monitoring points do not have a permitted value. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
timing Health State of the device
- timing_pll_40g_count()
Return the PLL 40G lock loss counter.
Expected: 0 if PLL 40G has no lock loss events detected. Increments for each lock loss event. These are combined readings for both PLLs within the AD9528.
- Example:
>>> tile.timing_pll_40g_count '0'
- Return type:
- Returns:
the PLL lock loss counter.
- timing_pll_40g_lock_status()
Return the PLL 40G lock status.
Expected: 1 if PLL 40G locked.
- Example:
>>> tile.timing_pll_40g_lock_status '1`
- Return type:
- Returns:
the PLL lock status and lock loss counter.
- timing_pll_count()
Return the PLL lock loss counter.
Expected: 0 if no lock loss events detected. Increments for each lock loss event. These are combined readings for both PLLs within the AD9528.
- Example:
>>> tile.timing_pll_count '0'
- Return type:
- Returns:
the lock loss counter.
- timing_pll_lock_status()
Return the PLL lock status and lock loss counter.
Expected: 1 if PLL locked, 0 otherwise.
- Example:
>>> tile.timing_pll_lock_status 1
- Return type:
- Returns:
the PLL lock status.
- udp_status()
Return the UDP status.
Expected: True if virtual lanes aligned and no BIP or CRC errors.
- Example:
>>> tile.udp_status False
- Return type:
- Returns:
the UDP status.
- unpack_alarms(alarms, mark_invalid=False)
Unpack a dictionary of alarms.
- update_tile_health_attributes(mark_invalid=False)
Update TANGO attributes from the tile health structure dictionary.
- useAttributesForHealth()
Return if adr115 is in use.
- Return type:
- Returns:
True if attributes quality is being evaluated in health.
- voltageAVDD3()
Handle a Tango attribute read of the Analog 2.5 V voltage.
- voltageHealth()
Read the voltage Health State of the device.
This is an aggregated quantity representing if any of the voltage monitoring points are outside of their thresholds. This is used to compute the overall healthState of the tile.
- Return type:
- Returns:
voltage Health State of the device
- voltageMGT_AVCC()
Handle a Tango attribute read of the FPGA MGT AV voltage.
- voltageMGT_AVTT()
Handle a Tango attribute read of the FPGA MGT AVTT voltage.
- voltageMan1V2()
Handle a Tango attribute read of the Management 1.2V voltage.
- voltageMon1V8()
Return the Management 1.8 V supply of the TPM.
Note: sensor values have a measurement bias.
- voltageMon3V3()
Return the Management 3.3 V supply of the TPM.
Note: sensor values have a measurement bias.
- voltageMon5V0()
Return the Management 5V supply of the TPM.
- voltageSW_AVDD1()
Handle a Tango attribute read of the SW Analog 1.1 V voltage.
- voltageSW_AVDD2()
Handle a Tango attribute read of the SW Analog 2.3 V voltage.
- voltageVIN()
Handle a Tango attribute read of the input supply voltage.
- voltageVM_AGP0()
Handle a Tango attribute read of the AD AGP group 0 Voltage Monitor.
- voltageVM_AGP1()
Handle a Tango attribute read of the AD AGP group 1 Voltage Monitor.
- voltageVM_AGP2()
Handle a Tango attribute read of the AD AGP group 2 Voltage Monitor.
- voltageVM_AGP3()
Handle a Tango attribute read of the AD AGP group 3 Voltage Monitor.
- voltageVM_AGP4()
Handle a Tango attribute read of the AD AGP group 4 Voltage Monitor.
- voltageVM_AGP5()
Handle a Tango attribute read of the AD AGP group 5 Voltage Monitor.
- voltageVM_AGP6()
Handle a Tango attribute read of the AD AGP group 6 Voltage Monitor.
- voltageVM_AGP7()
Handle a Tango attribute read of the AD AGP group 7 Voltage Monitor.
- voltageVM_CLK0B()
Handle a Tango attribute read of Clock Buffer0 3.3V Voltage Monitor.
- voltageVM_CLK1B()
Handle a Tango attribute read of Clock Buffer1 3.3V Voltage Monitor.
- voltageVM_DDR0_VTT()
Handle a Tango attribute read of DDR FPGA0 Vtt Voltage Monitor.
- voltageVM_DDR1_VDD()
Handle a Tango attribute read of DDR4 Voltage Monitor.
- voltageVM_DDR1_VTT()
Handle a Tango attribute read of DDR FPGA1 Vtt Voltage Monitor.
- voltageVM_DRVDD()
Handle a Tango attribute read of the SW DRVDD 1.8V voltage.
- voltageVM_DVDD()
Handle a Tango attribute read of AD DVDD Voltage Monitor.
- voltageVM_FE0()
Handle a Tango attribute read of FE0 Voltage Monitor.
Note: PreADU must be on.
- voltageVM_FE1()
Handle a Tango attribute read of FE1 Voltage Monitor.
Note: PreADU must be on.
- voltageVM_MGT0_AUX()
Handle a Tango attribute read of FPGA MGT0 AUX Voltage Monitor.
- voltageVM_MGT1_AUX()
Handle a Tango attribute read of FPGA MGT1 AUX Voltage Monitor.
- voltageVM_PLL()
Handle a Tango attribute read of the ANALOG PLL Voltage Monitor.
- voltageVM_SW_AMP()
Handle a Tango attribute read of VGA DC-DC Voltage Monitor.
- voltageVrefDDR0()
Handle a Tango attribute read of the Vref voltage for DDR0.
- voltageVrefDDR1()
Handle a Tango attribute read of the Vref voltage for DDR1.
- voltage_alm()
Return the Voltage alarm reading.
0 -> OK 1 -> WARN 2 -> ALARM