Tile Device

@startuml

class TilePowerManager {
  -_callback
  -_logger
  -_power_mode
  -_subrack
  -_subrack_bay
  -_subrack_fqdn
  +power_mode
  +subrack_event_handler
  +__init__()
  -_read_power_mode()
  -_subrack_power_changed()
  -_update_power_mode()
  +connect()
  +off()
  +on()
}

class MccsTile {
  +AntennasPerTile
  +SubrackBay
  +SubrackFQDN
  +TestGeneratorActive
  +TileId
  +TpmCpldPort
  +TpmIp
  +TpmVersion
  -_antenna_ids
  -_command_sequence
  -_csp_destination_ip
  -_csp_destination_mac
  -_csp_destination_port
  -_health_state
  +hardware_manager
  +queue_debug
  +CalculateDelay()
  +ComputeCalibrationCoefficients()
  +Configure40GCore()
  +ConfigureIntegratedBeamData()
  +ConfigureIntegratedChannelData()
  +ConfigureStationBeamformer()
  +ConfigureTestGenerator()
  +DownloadFirmware()
  +Get40GCoreConfiguration()
  +GetArpTable()
  +GetFirmwareAvailable()
  +GetRegisterList()
  +Initialise()
  +LoadAntennaTapering()
  +LoadBeamAngle()
  +LoadCalibrationCoefficients()
  +LoadCalibrationCurve()
  +LoadPointingDelay()
  +Off()
  +On()
  +PostSynchronisation()
  +ProgramCPLD()
  +ReadAddress()
  +ReadRegister()
  +SendBeamData()
  +SendChannelisedData()
  +SendChannelisedDataContinuous()
  +SendChannelisedDataNarrowband()
  +SendRawData()
  +SendRawDataSynchronised()
  +SetBeamFormerRegions()
  +SetChanneliserTruncation()
  +SetCspRounding()
  +SetLmcDownload()
  +SetLmcIntegratedDownload()
  +SetPointingDelay()
  +SetTimeDelays()
  +StartAcquisition()
  +StartBeamformer()
  +StopBeamformer()
  +StopDataTransmission()
  +StopIntegratedData()
  +SwitchCalibrationBank()
  +SyncFpgas()
  +TestGeneratorActive()
  +TweakTransceivers()
  +WriteAddress()
  +WriteRegister()
  -_send_message()
  -_update_admin_mode()
  +aHeartBeat()
  +aQueueDebug()
  +adcPower()
  +always_executed_hook()
  +antennaIds()
  +boardTemperature()
  +checkPendingDataRequests()
  +cspDestinationIp()
  +cspDestinationMac()
  +cspDestinationPort()
  +current()
  +currentTileBeamformerFrame()
  +delete_device()
  +firmwareName()
  +firmwareVersion()
  +fortyGbDestinationIps()
  +fortyGbDestinationPorts()
  +fpga1Temperature()
  +fpga2Temperature()
  +fpgasTime()
  +health_changed()
  +init_command_objects()
  +init_device()
  +isBeamformerRunning()
  +isProgrammed()
  +logicalTileId()
  +phaseTerminalCount()
  +power_changed()
  +ppsDelay()
  +simulationMode()
  +stationId()
  +testMode()
  +voltage()
}

class SKABaseDevice {
}

 SKABaseDevice <|-- MccsTile

@enduml

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:

bool

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:
  • antenna_ids (Optional[list[int]]) – list of antenna ids to configure, indexed from 1. If not provided, all antennas will be configured.

  • fixed_delays (Optional[list[float]]) – list of fixed delay values to apply to each channel If not provided, no static delays will be applied.

Return type:

None

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:
  • core_id (int) – (int) core id

  • arp_table_entry (int) – (int) ARP table entry ID

  • source_mac (Optional[int]) – (int) mac address

  • source_ip (Optional[str]) – (string) IP dot notation.

  • source_port (Optional[int]) – (int) source port

  • destination_ip (Optional[str]) – (string) IP dot notation

  • destination_port (Optional[int]) – (int) destination port

  • rx_port_filter (Optional[int]) – (int) Filter for incoming packets

  • netmask (Optional[str]) – (string) 40g (science data) subnet mask

  • gateway_ip (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 = {"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:
  • integration_time (float) – (float) in seconds (default = 0.5)

  • first_channel (int) – (int) default 0

  • last_channel (int) – (int) default 191

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:
  • integration_time (float) – (float) in seconds (default = 0.5)

  • first_channel (int) – (int) default 0

  • last_channel (int) – (int) default 511

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 False

  • is_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.

Parameters:

argin (list[int]) – List of antenna IDs to disable blanking on (0-15).

Return type:

DevVarLongStringArrayType

Returns:

A tuple containing a return code and a string message indicating status. The message is for information purposes only.

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 from GetFirmwareAvailable() 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.

Parameters:

argin (list[int]) – List of antenna IDs to enable blanking on (0-15).

Return type:

DevVarLongStringArrayType

Returns:

A tuple containing a return code and a string message indicating status. The message is for information purposes only.

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:

bool

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:
  • core_id (int) – (int) core id

  • arp_table_entry (int) – (int) ARP table entry ID to use

Return type:

str

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:

str

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:

str

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.

Return type:

list[str]

Returns:

a list of register names

Example:

>>> 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

Return type:

Optional[int]

Returns:

The alarm state for I2C.

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.

Parameters:

argin (list[float]) – list comprises:

  • 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.

Parameters:

argin (list[float]) – list comprises:

  • 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

Return type:

Optional[int]

Returns:

The alarm state for MCUwd.

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:

int

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:

list[int]

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:

list[int]

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:

list[int]

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

Return type:

Optional[int]

Returns:

The alarm state for SEMwd.

SendDataSamples(**kwargs)

Transmit a snapshot containing raw antenna data.

Parameters:

kwargs (Optional[Any]) – json dictionary with optional keywords:

  • 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.

Parameters:

argin (list[int]) – list of regions. Each region comprises:

  • 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:
  • source_port (Optional[int]) – Source port

  • destination_ip_1 (str) – Destination IP FPGA1

  • destination_ip_2 (str) – Destination IP FPGA2

  • destination_port (Optional[int]) – Destination port

  • is_last (bool) – True for last tile in beamforming chain

  • netmask (Optional[str]) – Netmask

  • gateway (Optional[str]) – Gateway IP

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 data

  • destination_ip (str) – (string) Destination IP.

  • source_port (Optional[int]) – (int) Source port for integrated data streams

  • destination_port (Optional[int]) – (int) Destination port for integrated data streams

  • netmask_40g (Optional[str]) – (string) 40g (science data) subnet mask

  • gateway_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 data

  • beam_payload_length (int) – (int) SPEAD payload length for integrated beam data

  • destination_ip (str) – (string) Destination IP

  • source_port (int) – (int) Source port for integrated data streams

  • destination_port (int) – (int) Destination port for integrated data streams

  • netmask_40g (Optional[str]) – (string) 40g (science data) subnet mask

  • gateway_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:
  • start_time (Optional[str]) – the acquisition start time

  • delay (Optional[int]) – a delay to the acquisition start (default 2s)

  • global_reference_time (Optional[str]) – the start time assumed for starting the timestamp

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 time

  • duration (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 channels

  • scan_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:

bool

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:
  • register_name (str) – (string) register fully qualified string representation

  • values (list[int]) – (list) is a list containing the 32-bit 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.

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.

Parameters:
  • args (Any) – positional args to the init

  • kwargs (Any) – keyword args to the init

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:

HealthState

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.

Return type:

Optional[list[float]]

Returns:

RMP power of ADC signals

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:

ndarray

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:

str

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:

str

Returns:

the sysref_timing_requirements of all ADCs idx0->ADC0, idx1->ADC1, … idx15->ADC15

adcs()

Return the ADC status.

Return type:

str

Returns:

the ADC status

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:

HealthState

Returns:

alarm Health State of the device

allLiveCal()

Read all live calibration coefficients.

Return type:

str

Returns:

JSON string of all live calibration coefficients.

allStagedCal()

Read all staged calibration coefficients.

Return type:

str

Returns:

JSON string of all staged calibration coefficients.

antennaBufferMode()

Return if antenna buffer is sending over SDN or NSDN.

Return type:

str

Returns:

string of SND or NSDN

antennaIds(antenna_ids)

Set the antenna IDs.

Parameters:

antenna_ids (list[int]) – the antenna IDs

Return type:

None

arp()

Return the arp status.

Expected: True if table entries are valid and resolved.

Example:
>>> tile.arp
True
Return type:

bool

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.

Return type:

Optional[list[int]]

Returns:

list of up to 8*48 values

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.

Return type:

Optional[list[int]]

Returns:

list of up to 7*48 values

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:

float

channeliserRounding(truncation)

Set channeliser rounding.

Parameters:

truncation (list[int]) – List with either a single value (applies to all channels) or a list of 512 values. Range 0 (no truncation) to 7

Return type:

None

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:

NoReturn

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}
Return type:

Optional[str]

Returns:

dictionary containing if the CPLD and FPGAs are connectable or None if not yet polled.

create_component_manager()

Create and return a component manager for this device.

Return type:

TileComponentManager

Returns:

a component manager for this device.

cspDestinationIp()

Return the cspDestinationIp attribute.

Return type:

str

Returns:

the IP address of the csp destination

cspDestinationMac()

Return the cspDestinationMac attribute.

Return type:

str

Returns:

the MAC address of the csp destination

cspDestinationPort()

Return the cspDestinationMac attribute.

Return type:

int

Returns:

the port of the csp destination

cspRounding(rounding)

Set CSP formatter rounding.

Parameters:

rounding (ndarray) – list of up to 384 values in the range 0-7. Current hardware supports only a single value, thus oly 1st value is used

Return type:

None

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.

Parameters:

spead_format (str) – format used in CBF SPEAD header: “AAVS” or “SKA”

Return type:

None

currentFE0()

Handle a Tango attribute read of the FE0 current.

Return type:

Optional[float]

Returns:

FE0 current

currentFE1()

Handle a Tango attribute read of the FE1 current.

Return type:

Optional[float]

Returns:

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:

int

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:

HealthState

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:

int

Returns:

current frame

currents()

Return all the currents values available.

Return type:

str

Returns:

currents available

dataTransmissionMode()

Return if we’re sending data through 1G or 10G port.

Return type:

str

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:

str

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:

bool

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:

int

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:

None

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:

DevState

Returns:

the ‘tango.DevState’ calculated

dsp()

Return the tile beamformer and station beamformer status.

Return type:

str

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:

HealthState

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:

int

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:

int

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:

int

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:

int

Returns:

the f2f interface soft error count.

faultReport()

Get the fault report.

Return type:

str

Returns:

the fault report.

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:

None

firmwareName(value)

Set the firmware name.

Parameters:

value (str) – firmware name

Return type:

None

firmwareTemperatureThresholds(value)

Write the temperature thresholds in firmware.

Parameters:

value (str) – A json serialised string with the thresholds.

Return type:

None

firmwareVersion(value)

Set the firmware version.

Parameters:

value (str) – firmware version

Return type:

None

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:

None

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:

str

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.

Return type:

list[str]

Returns:

IP addresses

fortyGbDestinationPorts()

Return the destination ports for all 40Gb ports on the tile.

Return type:

list[int]

Returns:

ports

fpga0_bip_error_count()

Return the bip error count for FPGA0.

Expected: 0 if no bit-interleaved parity (BIP) errors detected.

Example:
>>> tile.fpga0_bip_error_count
[0, 0, 0, 0]
Return type:

list[int]

Returns:

the bip error count for FPGA0.

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”]

Return type:

list[int]

Returns:

the lock loss counter for [“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”]

Return type:

list[int]

Returns:

the clock status for [“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.

Example:
>>> tile.fpga0_clocks
[1, 1, 1]
Return type:

list[int]

Returns:

the status of clocks for the interfaces of FPGA0. [1, 1, 1] == [JESD, DDR, UDP]

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:

int

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:

int

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:

int

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.

Example:
>>> tile.fpga0_decode_error_count
[0, 0, 0, 0]
Return type:

list[int]

Returns:

the decode error count per FPGA.

fpga0_lane_error_count()

Return the error count per lane, per core.

Expected: 0 for all lanes.

Example:
>>> tile.fpga0_lane_error_count
[ [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0] ]
Return type:

list[int]

Returns:

the error count per lane, per core [[Core0lanes],[Core1lanes]]

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:

int

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:

int

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:

int

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:

int

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:

int

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:

int

Returns:

the station beamformer error count for FPGA0.

fpga1Temperature()

Return the temperature of FPGA 1.

Return type:

Optional[tuple[Optional[float], float, AttrQuality]]

Returns:

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.

Example:
>>> tile.fpga1_bip_error_count
[0, 0, 0, 0]
Return type:

list[int]

Returns:

the bip error count for FPGA1.

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”]

Return type:

list[int]

Returns:

the lock loss counter for [“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”]

Return type:

list[int]

Returns:

the clock status for [“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:

str

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:

int

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:

int

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:

int

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.

Example:
>>> tile.fpga1_decode_error_count
[0, 0, 0, 0]
Return type:

list[int]

Returns:

the decode error count per FPGA.

fpga1_lane_error_count()

Return the error count per lane, per core.

Expected: 0 for all lanes.

Example:
>>> tile.fpga1_lane_error_count
[ [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0] ]
Return type:

list[int]

Returns:

the error count per lane, per core [[Core0],[Core1]]

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:

int

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:

int

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:

int

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:

int

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:

int

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:

int

Returns:

the station beamformer error count for FPGA1.

fpga2Temperature()

Return the temperature of FPGA 2.

Return type:

Optional[tuple[Optional[float], float, AttrQuality]]

Returns:

the temperature of FPGA 2

fpgaFrameTime()

Return the FPGA synchronization timestamp.

Return type:

str

Returns:

the FPGA timestamp, in UTC format

fpgaReferenceTime()

Return the FPGA synchronization timestamp.

Return type:

str

Returns:

the FPGA timestamp, in UTC format

fpgaTime()

Return the FPGA internal time.

Return type:

str

Returns:

the FPGA time, in UTC format

fpgasUnixTime()

Return the time for FPGAs.

Return type:

list[int]

Returns:

the time for FPGAs

globalReferenceTime(reference_time)

Set the global global synchronization timestamp.

Parameters:

reference_time (str) – the synchronization time, in ISO9660 format, or “”

Return type:

None

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:

None

healthReport()

Get the health report.

Return type:

str

Returns:

the health report.

init_device()

Initialise the device.

Raises:

TypeError – when attributes have a converter that is not callable.

Return type:

None

integratedDataTransmissionMode()

Return if we’re sending integrated data through 1G or 10G port.

Return type:

str

Returns:

Either 1G or 10G string

io()

Return a dictionary of I/O interfaces status available.

Return type:

str

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:

HealthState

Returns:

io Health State of the device

isBeamformerRunning()

Check if beamformer is running.

Return type:

Optional[bool]

Returns:

whether the beamformer is running

isProgrammed()

Return a flag indicating whether of not the board is programmed.

Return type:

bool

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:

bool

Returns:

whether the command is allowed

is_engineering()

Return a flag representing whether we are in Engineering mode.

Return type:

bool

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:

bool

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:

bool

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.

Return type:

list[list]

Returns:

last pointing delays applied to the tile.

Return the jesd link status.

Expected: True if link up and synchronised.

Example:
>>> tile.link_status
True
Return type:

bool

Returns:

the link status.

logicalTileId(value)

Set the logicalTileId attribute.

The logical tile id is the id of the tile in the station.

Parameters:

value (int) – the new logical tile id

Return type:

None

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.

Parameters:
  • signal (str) – the absolute name of the signal that was emitted

  • value (Any) – the emitted value

Return type:

None

pendingDataRequests()

Check for pending data requests.

Return type:

Optional[bool]

Returns:

whether there are data requests pending

pfbVersion()

Return the version of the polyphase filter firmware.

Return type:

str

Returns:

the version of the polyphase filter firmware

phaseTerminalCount(value)

Set the phase terminal count.

Parameters:

value (int) – the phase terminal count

Return type:

None

pllLocked()

Report if ADC clock PLL is in locked state.

Return type:

Optional[bool]

Returns:

PLL lock state

pointingDelays()

Get the pointing delays for beam 0.

Return type:

list[float]

Returns:

list of 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 push

  • attr_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:

None

ppsDelay()

Return the delay between PPS and 10 MHz clock.

Return type:

Optional[int]

Returns:

Return the PPS delay in 1.25ns units.

ppsDelayCorrection(pps_delay_correction)

Set a correction to make to the pps delay.

Note: will be applied during next initialisation.

Parameters:

pps_delay_correction (int) – a correction to apply to the pps_delay.

Return type:

None

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:

int

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:

tuple[Optional[bool], float, AttrQuality]

Returns:

a tuple with attribute_value, time, quality

preaduLevels(levels)

Set attenuator level of preADU channels, one per input channel.

Parameters:

levels (ndarray) – ttenuator level of preADU channels, one per input channel, in dB

Return type:

None

rfiBlankingEnabledAntennas()

Get the list of antennas for broadband RFI blanking is currently enabled.

Returns:

list of antennas with RFI blanking enabled

Return type:

list(int)

rfiCount()

Return the RFI count per antenna/pol.

Return type:

list[list]

Returns:

the RFI count per antenna/pol.

runningBeams()

List running status for each SubarrayBeam.

Return type:

list[bool]

Returns:

list of hardware beam running states

shutdown_on_max_alarm(attr_name)

Turn off TPM when attribute in question is in max_alarm state.

Parameters:

attr_name (str) – the name of the attribute causing the shutdown.

Return type:

None

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:

None

srcip40gfpga1(argin)

Set source IP for FPGA1.

Parameters:

argin (str) – source IP for FPGA1

Return type:

None

srcip40gfpga2(argin)

Set source IP for FPGA2.

Parameters:

argin (str) – source IP for FPGA2

Return type:

None

staticTimeDelays(delays)

Set static time delay.

Parameters:

delays (list[float]) – Delay in nanoseconds (positive = increase the signal delay) to correct for static delay mismathces, e.g. cable length.

Return type:

None

stationBeamFlagEnabled()

Return True if station beam data flagging is enabled.

Return type:

list[bool]

Returns:

a list of bool values corresponding to the fpgas

stationId(value)

Set the id of the station to which this tile is assigned.

Parameters:

value (int) – the station id

Return type:

None

station_beamformer_status()

Return the status of the station beamformer.

Expected: True if status OK.

Example:
>>> tile.station_beamformer_status
True
Return type:

bool

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:

NoReturn

temperatureADC0()

Handle a Tango attribute read of the ADC 0 temperature.

Return type:

Optional[float]

Returns:

ADC 0 temperature

temperatureADC1()

Handle a Tango attribute read of the ADC 1 temperature.

Return type:

Optional[float]

Returns:

ADC 1 temperature

temperatureADC10()

Handle a Tango attribute read of the ADC 10 temperature.

Return type:

Optional[float]

Returns:

ADC 10 temperature

temperatureADC11()

Handle a Tango attribute read of the ADC 11 temperature.

Return type:

Optional[float]

Returns:

ADC 11 temperature

temperatureADC12()

Handle a Tango attribute read of the ADC 12 temperature.

Return type:

Optional[float]

Returns:

ADC 12 temperature

temperatureADC13()

Handle a Tango attribute read of the ADC 13 temperature.

Return type:

Optional[float]

Returns:

ADC 13 temperature

temperatureADC14()

Handle a Tango attribute read of the ADC 14 temperature.

Return type:

Optional[float]

Returns:

ADC 14 temperature

temperatureADC15()

Handle a Tango attribute read of the ADC 15 temperature.

Return type:

Optional[float]

Returns:

ADC 15 temperature

temperatureADC2()

Handle a Tango attribute read of the ADC 2 temperature.

Return type:

Optional[float]

Returns:

ADC 2 temperature

temperatureADC3()

Handle a Tango attribute read of the ADC 3 temperature.

Return type:

Optional[float]

Returns:

ADC 3 temperature

temperatureADC4()

Handle a Tango attribute read of the ADC 4 temperature.

Return type:

Optional[float]

Returns:

ADC 4 temperature

temperatureADC5()

Handle a Tango attribute read of the ADC 5 temperature.

Return type:

Optional[float]

Returns:

ADC 5 temperature

temperatureADC6()

Handle a Tango attribute read of the ADC 6 temperature.

Return type:

Optional[float]

Returns:

ADC 6 temperature

temperatureADC7()

Handle a Tango attribute read of the ADC 7 temperature.

Return type:

Optional[float]

Returns:

ADC 7 temperature

temperatureADC8()

Handle a Tango attribute read of the ADC 8 temperature.

Return type:

Optional[float]

Returns:

ADC 8 temperature

temperatureADC9()

Handle a Tango attribute read of the ADC 9 temperature.

Return type:

Optional[float]

Returns:

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:

HealthState

Returns:

temperature Health State of the device

temperature_alm()

Return the Temperature alarm reading.

0 -> OK 1 -> WARN 2 -> ALARM

Return type:

Optional[int]

Returns:

The alarm state for temperature.

temperatures()

Return all the temperatures values available.

Return type:

str

Returns:

temperatures available

testGeneratorActive()

Report if the test generator is used for some channels.

Return type:

bool

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.

Parameters:

value (int) – The test mode, as a TestMode value

Return type:

None

tileProgrammingState()

Get the tile programming state.

Return type:

Optional[str]

Returns:

a string describing the programming state of the tile

tile_beamformer_status()

Return the status of the tile beamformer.

Expected: True if status OK.

Example:
>>> tile.tile_beamformer_status
True
Return type:

bool

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:

str

Returns:

info available

timing()

Return a dictionary of the timing signals status.

Return type:

str

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:

HealthState

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:

int

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:

int

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:

int

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:

int

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:

bool

Returns:

the UDP status.

unpack_alarms(alarms, mark_invalid=False)

Unpack a dictionary of alarms.

Parameters:
  • alarms (dict[str, int]) – The alarms we want to unpack.

  • mark_invalid (bool) – mark attribute as invalid.

Return type:

None

update_tile_health_attributes(mark_invalid=False)

Update TANGO attributes from the tile health structure dictionary.

Parameters:

mark_invalid (bool) – True when values being reported are not valid.

Return type:

None

useAttributesForHealth()

Return if adr115 is in use.

Return type:

bool

Returns:

True if attributes quality is being evaluated in health.

voltageAVDD3()

Handle a Tango attribute read of the Analog 2.5 V voltage.

Return type:

Optional[float]

Returns:

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:

HealthState

Returns:

voltage Health State of the device

voltageMGT_AVCC()

Handle a Tango attribute read of the FPGA MGT AV voltage.

Return type:

Optional[float]

Returns:

FPGA MGT AV voltage

voltageMGT_AVTT()

Handle a Tango attribute read of the FPGA MGT AVTT voltage.

Return type:

Optional[float]

Returns:

FPGA MGT AVTT voltage

voltageMan1V2()

Handle a Tango attribute read of the Management 1.2V voltage.

Return type:

Optional[float]

Returns:

Management 1.2V voltage

voltageMon1V8()

Return the Management 1.8 V supply of the TPM.

Note: sensor values have a measurement bias.

Return type:

Optional[float]

Returns:

Management supply of the TPM

voltageMon3V3()

Return the Management 3.3 V supply of the TPM.

Note: sensor values have a measurement bias.

Return type:

Optional[float]

Returns:

Management supply of the TPM

voltageMon5V0()

Return the Management 5V supply of the TPM.

Return type:

Optional[float]

Returns:

Management supply of the TPM

voltageSW_AVDD1()

Handle a Tango attribute read of the SW Analog 1.1 V voltage.

Return type:

Optional[float]

Returns:

SW Analog 1.1 V voltage

voltageSW_AVDD2()

Handle a Tango attribute read of the SW Analog 2.3 V voltage.

Return type:

Optional[float]

Returns:

SW Analog 2.3 V voltage

voltageVIN()

Handle a Tango attribute read of the input supply voltage.

Return type:

Optional[float]

Returns:

input supply voltage

voltageVM_AGP0()

Handle a Tango attribute read of the AD AGP group 0 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 0 voltage

voltageVM_AGP1()

Handle a Tango attribute read of the AD AGP group 1 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 1 voltage

voltageVM_AGP2()

Handle a Tango attribute read of the AD AGP group 2 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 2 voltage

voltageVM_AGP3()

Handle a Tango attribute read of the AD AGP group 3 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 3 voltage

voltageVM_AGP4()

Handle a Tango attribute read of the AD AGP group 4 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 4 voltage

voltageVM_AGP5()

Handle a Tango attribute read of the AD AGP group 5 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 5 voltage

voltageVM_AGP6()

Handle a Tango attribute read of the AD AGP group 6 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 6 voltage

voltageVM_AGP7()

Handle a Tango attribute read of the AD AGP group 7 Voltage Monitor.

Return type:

Optional[float]

Returns:

AD AGP group 7 voltage

voltageVM_CLK0B()

Handle a Tango attribute read of Clock Buffer0 3.3V Voltage Monitor.

Return type:

Optional[float]

Returns:

Clock Buffer0 3.3V voltage

voltageVM_CLK1B()

Handle a Tango attribute read of Clock Buffer1 3.3V Voltage Monitor.

Return type:

Optional[float]

Returns:

Clock Buffer1 3.3V voltage

voltageVM_DDR0_VTT()

Handle a Tango attribute read of DDR FPGA0 Vtt Voltage Monitor.

Return type:

Optional[float]

Returns:

DDR FPGA0 Vtt voltage

voltageVM_DDR1_VDD()

Handle a Tango attribute read of DDR4 Voltage Monitor.

Return type:

Optional[float]

Returns:

DDR4 voltage

voltageVM_DDR1_VTT()

Handle a Tango attribute read of DDR FPGA1 Vtt Voltage Monitor.

Return type:

Optional[float]

Returns:

DDR FPGA1 Vtt voltage

voltageVM_DRVDD()

Handle a Tango attribute read of the SW DRVDD 1.8V voltage.

Return type:

Optional[float]

Returns:

SW DRVDD 1.8V voltage

voltageVM_DVDD()

Handle a Tango attribute read of AD DVDD Voltage Monitor.

Return type:

Optional[float]

Returns:

AD DVDD voltage

voltageVM_FE0()

Handle a Tango attribute read of FE0 Voltage Monitor.

Note: PreADU must be on.

Return type:

Optional[float]

Returns:

FE0 voltage

voltageVM_FE1()

Handle a Tango attribute read of FE1 Voltage Monitor.

Note: PreADU must be on.

Return type:

Optional[float]

Returns:

FE1 voltage

voltageVM_MGT0_AUX()

Handle a Tango attribute read of FPGA MGT0 AUX Voltage Monitor.

Return type:

Optional[float]

Returns:

FPGA MGT0 AUX voltage

voltageVM_MGT1_AUX()

Handle a Tango attribute read of FPGA MGT1 AUX Voltage Monitor.

Return type:

Optional[float]

Returns:

FPGA MGT1 AUX voltage

voltageVM_PLL()

Handle a Tango attribute read of the ANALOG PLL Voltage Monitor.

Return type:

Optional[float]

Returns:

ANALOG PLL voltage

voltageVM_SW_AMP()

Handle a Tango attribute read of VGA DC-DC Voltage Monitor.

Return type:

Optional[float]

Returns:

VGA DC-DC voltage

voltageVrefDDR0()

Handle a Tango attribute read of the Vref voltage for DDR0.

Return type:

Optional[float]

Returns:

Vref voltage for DDR0

voltageVrefDDR1()

Handle a Tango attribute read of the Vref voltage for DDR1.

Return type:

Optional[float]

Returns:

Vref voltage for DDR1

voltage_alm()

Return the Voltage alarm reading.

0 -> OK 1 -> WARN 2 -> ALARM

Return type:

Optional[int]

Returns:

The alarm state for voltage.

voltages()

Return all the voltage values available.

Return type:

str

Returns:

voltages available

main(*args, **kwargs)

Entry point for module.

Parameters:
  • args (str) – positional arguments

  • kwargs (str) – named arguments

Return type:

int

Returns:

exit code