qick.drivers.generator

Drivers for signal generators: FPGA blocks that send data to DACs.

Classes

AbsArbSignalGen(*args, **kwargs)

A signal generator with a memory for envelope waveforms.

AbsMuxSignalGen(*args, **kwargs)

Generic class for multiplexed generators.

AbsPulsedSignalGen(*args, **kwargs)

A signal generator controlled by the TProcessor.

AbsSignalGen(*args, **kwargs)

Abstract class which defines methods that are common to different signal generators.

AxisConstantIQ(*args, **kwargs)

Plays a constant IQ value, which gets mixed with the DAC's built-in oscillator.

AxisSgInt4V1(*args, **kwargs)

The default max amplitude for this generator is 0.9 times the maximum of int16.

AxisSgMux4V1(*args, **kwargs)

AXIS Signal Generator with 4 muxed outputs.

AxisSgMux4V2(*args, **kwargs)

AXIS Signal Generator with 4 muxed outputs.

AxisSgMux4V3(*args, **kwargs)

AxisSgMux4V3: no digital mixer, but otherwise behaves identically to AxisSgMux4V2.

AxisSgMux8V1(*args, **kwargs)

AXIS Signal Generator with 8 muxed outputs.

AxisSignalGen(*args, **kwargs)

AxisSignalGen class Supports AxisSignalGen V4+V5+V6, since they have the same software interface (ignoring registers that are not used)

class qick.drivers.generator.AbsSignalGen(*args: Any, **kwargs: Any)[source]

Bases: SocIp

Abstract class which defines methods that are common to different signal generators.

set_nyquist(nqz)[source]

Set the Nyquist zone mode for the DAC linked to this generator. For tProc-controlled generators, this method is called automatically during program config. You should normally only call this method directly for a constant-IQ output.

Parameters:

nqz (int) – Nyquist zone (must be 1 or 2). Setting the NQZ to 2 increases output power in the 2nd/3rd Nyquist zones.

set_mixer_freq(f, ro_ch=None, phase_reset=True)[source]

Set the mixer frequency for the DAC linked to this generator. For tProc-controlled generators, this method is called automatically during program config. You should normally only call this method directly for a constant-IQ output.

Parameters:
  • mixer_freq (float) – Mixer frequency (in MHz)

  • ro_ch (int) – readout channel for frequency matching (use None if you don’t want mixer freq to be rounded to a valid readout frequency)

  • phase_reset (bool) – if this changes the frequency, also reset the phase (so if we go to freq=0, we end up on the real axis)

class qick.drivers.generator.AbsArbSignalGen(*args: Any, **kwargs: Any)[source]

Bases: AbsSignalGen

A signal generator with a memory for envelope waveforms.

load(xin, addr=0)[source]

Load waveform into I,Q envelope

Parameters:
  • xin (int16 array) – array of (I, Q) values for pulse envelope

  • addr (int) – starting address

class qick.drivers.generator.AbsPulsedSignalGen(*args: Any, **kwargs: Any)[source]

Bases: AbsSignalGen

A signal generator controlled by the TProcessor.

class qick.drivers.generator.AxisSignalGen(*args: Any, **kwargs: Any)[source]

Bases: AbsArbSignalGen, AbsPulsedSignalGen

AxisSignalGen class Supports AxisSignalGen V4+V5+V6, since they have the same software interface (ignoring registers that are not used)

AXIS Signal Generator Registers. START_ADDR_REG

WE_REG * 0 : disable writes. * 1 : enable writes.

rndq(sel_)[source]

TODO: remove this function. This functionality was removed from IP block.

class qick.drivers.generator.AxisSgInt4V1(*args: Any, **kwargs: Any)[source]

Bases: AbsArbSignalGen, AbsPulsedSignalGen

The default max amplitude for this generator is 0.9 times the maximum of int16. This is necessary to prevent interpolation overshoot: the output of the interpolation filter may exceed the max value of the input points. (https://blogs.keysight.com/blogs/tech/rfmw.entry.html/2019/05/07/confronting_measurem-IBRp.html) The result of overshoot is integer overflow in the filter output and big negative spikes. If the input to the filter is a square pulse, the rising edge of the output overshoots by 10%. Therefore, scaling envelopes by 90% seems safe.

AXIS Signal Generator with envelope x4 interpolation V1 Registers. START_ADDR_REG

WE_REG * 0 : disable writes. * 1 : enable writes.

class qick.drivers.generator.AbsMuxSignalGen(*args: Any, **kwargs: Any)[source]

Bases: AbsPulsedSignalGen

Generic class for multiplexed generators.

Registers: PINCx_REG : frequency of tone x. POFFx_REG : phase of tone x. GAINx_REG : gain of tone x.

WE_REG * 0 : disable writes. * 1 : enable writes.

HAS_MIXER = None
update()[source]

Update register values

set_tones_int(tones)[source]

Set up a list of tones all at once, using raw (integer) units. If the supplied list of tones is shorter than the number supported, the extra tones will have their gains set to 0.

This method isn’t meant to be called directly. It is called by set_tones() or QickProgram.config_gens().

Parameters:

tones (list of dict) – Tones to configure. The tone parameters are defined with keys freq_int, gain_int, phase_int. Omit parameters not supported by this version of the generator. All supported parameters must be defined.

set_tones(freqs, gains=None, phases=None, ro_ch=None)[source]

Set up a list of tones.

This method is not normally used, it’s only for debugging and testing. Normally the generator is configured based on parameters supplied in QickProgram.declare_gen().

Parameters:
  • freqs (list of float) – Tone frequencies for the muxed generator (in MHz). Positive and negative values are allowed.

  • gains (list of float, optional) – Tone amplitudes for the muxed generator (in range -1 to 1).

  • phases (list of float, optional) – Phases for the muxed generator (in degrees).

  • ro_ch (int, optional) – readout channel for frequency-matching

class qick.drivers.generator.AxisSgMux4V1(*args: Any, **kwargs: Any)[source]

Bases: AbsPulsedSignalGen

AXIS Signal Generator with 4 muxed outputs.

class qick.drivers.generator.AxisSgMux4V2(*args: Any, **kwargs: Any)[source]

Bases: AbsMuxSignalGen

AXIS Signal Generator with 4 muxed outputs.

class qick.drivers.generator.AxisSgMux4V3(*args: Any, **kwargs: Any)[source]

Bases: AxisSgMux4V2

AxisSgMux4V3: no digital mixer, but otherwise behaves identically to AxisSgMux4V2.

class qick.drivers.generator.AxisSgMux8V1(*args: Any, **kwargs: Any)[source]

Bases: AbsMuxSignalGen

AXIS Signal Generator with 8 muxed outputs.

class qick.drivers.generator.AxisConstantIQ(*args: Any, **kwargs: Any)[source]

Bases: AbsSignalGen

Plays a constant IQ value, which gets mixed with the DAC’s built-in oscillator.

set_iq(i=1, q=1)[source]

Set gain.

Parameters:
  • i (float) – signed gain, I component (in range -1 to 1)

  • q (float) – signed gain, Q component (in range -1 to 1)