atomiq.components.sinara.dac

Classes

Zotino

This class represents the Sinara Zotino 32 Channel DAC.

ZotinoChannel

Voltage Source

Fastino

The Sinara Fast ADC called Fastino

FastinoChannel

Voltage Source

Module Contents

class atomiq.components.sinara.dac.Zotino(zotino_device, *args, max_parallel_arbs=5, max_arb_samples=128, **kwargs)[source]

Bases: atomiq.components.electronics.voltagesource.DAC

This class represents the Sinara Zotino 32 Channel DAC.

Hint

The Zotino provides the Zotino.parallel_arb context manager which allows to play arbitrary waveforms and ramps on multiple channels in parallel. Example code using this functionallity can be found here

Parameters:
  • zotino_device (artiq.language.types.TStr) -- The ARTIQ zotino device to use from the device db, e.g. @zotino_0

  • max_parallel_arbs (artiq.language.types.TInt32) -- Number of channels that can be ramped or played an arbitrary waveform on in parallel. Keep this as low as possible as higher numbers increase the prerun phase length.

  • max_arb_samples (artiq.language.types.TInt32) -- Number of samples a arbitrary waveform/ramp can maximally have. Keep this as low as possible as higher numbers increase the prerun phase length.

kernel_invariants
hold_arbs = False
_last_update
_last_dac_write
_presched_dac_counter = 0
_zotino_device
parallel_arb
current_parallel_arb
update_i = 0
update_times
_prerun()[source]

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

update()[source]

Applys the voltages in the DAC register to the outputs.

Hint

If an update is already scheduled at the current time, this command does nothing. This allows for setting multiple DAC channels in a parallel statement without multiple slow updates.

write_dac(channel, voltage)[source]

Writes the voltage value voltage to the DAC channel channel. This method schedules the operation in the past and does not advance the time cursor.

Parameters:
  • channel (artiq.language.types.TInt32) -- Channel number

  • voltage (artiq.language.types.TFloat) -- Voltage in V

Hint

This command uses a scheduler which takes care that no write operations occure at the same time to prevent undefined behavior which often do not result in a noticable error.

class _SingleChannelArb(zotino_instance, max_samples)[source]

Represents an arbitrary voltage signal on a single Zotino channel.

Parameters:
  • zotino_instance (Zotino)

  • max_samples (artiq.language.types.TInt32)

active = False
channel = 0
len = 0
step_offset
i_step = 0
zotino
values
activate(channel, step_offset, values)[source]
Parameters:
  • channel (artiq.language.types.TInt32)

  • step_offset (artiq.language.types.TInt64)

step()[source]
class _ParallelArb(zotino_instance, max_parallel, max_samples)[source]

Represents a voltage arbitrary signal on multiple channels in parallel

Parameters:
  • zotino_instance (Zotino)

  • max_parallel (artiq.language.types.TInt32)

  • max_samples (artiq.language.types.TInt32)

zotino
arbs
start_mu
timestep_mu
n_arbs = 0
start_record()[source]

Defines the starting point of the parallel arbitrary waveform at the current time cursor position and resets previously scheduled arbs

register_arb(channel, arb_values, timestep_mu, start_mu)[source]

Add a single channel arbitrary waveform to the parallel arb scheduler

Parameters:
  • channel (artiq.language.types.TInt32) -- Zotino channel

  • arb_values -- List of values which are played sequentially in machine units

  • timestep_mu (artiq.language.types.TInt64) -- Time between arb samples. Must be equal for all arbs which are scheduled in parallel

  • start_mu (artiq.language.types.TInt64) -- Time offset of the arb in reference to the point where start_record was called. Can be negative but must be a multiple of timestep_mu.

start()[source]

Start the playback of all arbitrary volage signals merged by the register_arb method

class _ParallelArbsContext(zotino_instance)[source]

Context manager which makes all arbitrary waveforms defined within played in parallel. For an usage example, see here.

Parameters:

zotino_instance (Zotino)

zotino
__enter__()[source]
__exit__(exc_type, exc_value, exc_traceback)[source]
class atomiq.components.sinara.dac.ZotinoChannel(dac_device, channel, *args, **kwargs)[source]

Bases: atomiq.components.electronics.voltagesource.DACChannel

Voltage Source

This abstract class represents any device that can output a defined, controllable voltage.

Parameters:
  • min_voltage -- The minimum voltage the device can output [V]

  • max_voltage -- The maximum voltage the device can output [V]

  • default_ramp_steps -- The default number of steps that this device should use if the voltage is ramped. This value is only used if no ramp_steps are given in the ramp_voltage() method.

  • dac_device (DAC)

  • channel (artiq.language.types.TInt32)

_set_voltage(voltage, update_dac=True)[source]
Parameters:
  • voltage (artiq.language.types.TFloat)

  • update_dac (artiq.language.types.TBool)

_ramp_voltage(duration, voltage_start, voltage_end, ramp_timestep=0.0002)[source]

This method implements a stupid ramp on an abstract level. This will most likely work but be slow. If your hardware has native support for ramping, please override this function when you inherit from VoltageSource

Parameters:
  • duration (artiq.language.types.TFloat)

  • voltage_start (artiq.language.types.TFloat)

  • voltage_end (artiq.language.types.TFloat)

  • ramp_timestep (artiq.language.types.TFloat)

class atomiq.components.sinara.dac.Fastino(fastino_device, parallel_event_delay=1e-08, *args, **kwargs)[source]

Bases: atomiq.components.electronics.voltagesource.DAC

The Sinara Fast ADC called Fastino

Parameters:
  • fastino_device (artiq.language.types.TStr) -- The ARTIQ fastino device from the device_db

  • parallel_event_delay (artiq.language.types.TBool) -- Time by which occuring parallel events in ramps are moved [s] (default: 10ns)

kernel_invariants
_fastino_device
event_slots
event_slots_max_idx = -1
parallel_event_delay = 1e-08
_prerun()[source]

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

update()[source]
register_event(time)[source]
Parameters:

time (artiq.language.types.TInt64)

Return type:

artiq.language.types.TFloat

class atomiq.components.sinara.dac.FastinoChannel(dac_device, channel, *args, **kwargs)[source]

Bases: atomiq.components.electronics.voltagesource.DACChannel

Voltage Source

This abstract class represents any device that can output a defined, controllable voltage.

Parameters:
  • min_voltage -- The minimum voltage the device can output [V]

  • max_voltage -- The maximum voltage the device can output [V]

  • default_ramp_steps -- The default number of steps that this device should use if the voltage is ramped. This value is only used if no ramp_steps are given in the ramp_voltage() method.

  • dac_device (DAC)

  • channel (artiq.language.types.TInt32)

_ramp_voltage(duration, voltage_start, voltage_end, ramp_timestep=0.0002, relocate_parallel=True)[source]

This method implements a stupid ramp on an abstract level. This will most likely work but be slow. If your hardware has native support for ramping, please override this function when you inherit from VoltageSource

Parameters:
  • duration (artiq.language.types.TFloat)

  • voltage_start (artiq.language.types.TFloat)

  • voltage_end (artiq.language.types.TFloat)

  • ramp_timestep (artiq.language.types.TFloat)

  • relocate_parallel (artiq.language.types.TBool)

_set_voltage(voltage, zero_time=False)[source]
Parameters:
  • voltage (artiq.language.types.TFloat)

  • zero_time (artiq.language.types.TBool)