forked from M-Labs/artiq
clean up docs
This commit is contained in:
parent
857fb4ecec
commit
4df880faf6
|
@ -1292,9 +1292,6 @@ class Miqro:
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
* The `_mu` suffix in method names refers to parameters and data in "machine units",
|
|
||||||
i.e. integers. Conversion methods and wrappers to convert from SI units (Hz frequency,
|
|
||||||
full scale amplitude, turns phase, seconds time) are provided.
|
|
||||||
* The annotation that some operation is "expensive" does not mean it is impossible, just
|
* The annotation that some operation is "expensive" does not mean it is impossible, just
|
||||||
that it may take a significant amount of time and resources to execute such that
|
that it may take a significant amount of time and resources to execute such that
|
||||||
it may be impractical when used often or during fast pulse sequences.
|
it may be impractical when used often or during fast pulse sequences.
|
||||||
|
@ -1324,9 +1321,10 @@ class Miqro:
|
||||||
phases, previous profiles, or oscillator history). It is "absolute" in the
|
phases, previous profiles, or oscillator history). It is "absolute" in the
|
||||||
sense that frequency f and phase p fully determine oscillator
|
sense that frequency f and phase p fully determine oscillator
|
||||||
output phase p' at time t. This is unlike typical DDS behavior.
|
output phase p' at time t. This is unlike typical DDS behavior.
|
||||||
* Frequency, phase and amplitude of each oscillator are configurable by selecting one of
|
* Frequency, phase, and amplitude of each oscillator are configurable by selecting one of
|
||||||
n_profile = 32 profiles 0..n_profile-1. This selection is fast and can be done for
|
n_profile = 32 profiles 0..n_profile-1. This selection is fast and can be done for
|
||||||
each pulse.
|
each pulse. The phase coherence defined above is guaranteed for each
|
||||||
|
profile individually.
|
||||||
* Note: one profile per oscillator (usually profile index 0) should be reserved
|
* Note: one profile per oscillator (usually profile index 0) should be reserved
|
||||||
for the NOP (no operation, identity) profile, usually with zero
|
for the NOP (no operation, identity) profile, usually with zero
|
||||||
amplitude.
|
amplitude.
|
||||||
|
@ -1344,51 +1342,38 @@ class Miqro:
|
||||||
triggerable shaper.
|
triggerable shaper.
|
||||||
* Triggering the shaper corresponds to passing a pulse from all
|
* Triggering the shaper corresponds to passing a pulse from all
|
||||||
oscillators to the RF output.
|
oscillators to the RF output.
|
||||||
* Any previously staged profiles and phase offsets become active simultaneously
|
* Selected profiles become active simultaneously
|
||||||
(on the same output sample) when triggering the shaper.
|
(on the same output sample) when triggering the shaper.
|
||||||
* The shaper reads (replays) window samples from a memory of size n_window = 1 << 10 starting
|
* The shaper reads (replays) window samples from a memory of size n_window = 1 << 10 starting
|
||||||
and stopping at memory locations specified.
|
and stopping at memory locations specified.
|
||||||
* Each window memory segment starts with a header determining segment
|
* Each window memory segment starts with a header determining segment
|
||||||
length and interpolation parameters.
|
length and interpolation parameters.
|
||||||
* The window samples are interpolated by a factor (rate change) r where log2(r) = 0..n_cic=12
|
* The window samples are interpolated by a factor (rate change)
|
||||||
selectable when triggering.
|
between 1 and r = 1 << 12.
|
||||||
* The interpolation order is constant, linear, quadratic, or cubic. This
|
* The interpolation order is constant, linear, quadratic, or cubic. This
|
||||||
corresponds to interpolation modes from rectangular window (1st order CIC)
|
corresponds to interpolation modes from rectangular window (1st order CIC)
|
||||||
or zero order hold) and to Parzen window (4th order CIC, cubic spline),
|
or zero order hold) and to Parzen window (4th order CIC, cubic spline).
|
||||||
selectable when triggering.
|
|
||||||
* This results in support for pulse lengths of between tau and a bit more than
|
* This results in support for pulse lengths of between tau and a bit more than
|
||||||
(1 << 12 + 10) tau ~ 17 ms.
|
r * n_window * tau = (1 << 12 + 10) tau ~ 17 ms.
|
||||||
* Windows can be configured to be head-less and/or tail-less, meaning, they
|
* Windows can be configured to be head-less and/or tail-less, meaning, they
|
||||||
do not feed zero-amplitude samples into the shaper before and after
|
do not feed zero-amplitude samples into the shaper before and after
|
||||||
each window. This is used to implement pulses with arbitrary length or
|
each window. This is used to implement pulses with arbitrary length or
|
||||||
CW output.
|
CW output.
|
||||||
* The window memory can be segmented by choosing different start indices
|
* The window memory can be segmented by choosing different start indices
|
||||||
to support different windows selectable when triggering.
|
to support different windows.
|
||||||
|
|
||||||
### DAC
|
|
||||||
* This section of the data flow is analogous to the `base` Phaser mode.
|
|
||||||
* The DAC receives the 250 MS/s I/Q data stream and interpolates it to 1 GS/s I/Q
|
|
||||||
(with a bandwidth 200 MHz).
|
|
||||||
* It then applies a (expensive to change) frequency offset of
|
|
||||||
f1 = -400 MHz..400 MHz.
|
|
||||||
* Then the DAC converts the data stream to 2 analog outputs I and Q.
|
|
||||||
* The signals go through two anti-aliasing filters with 340 MHz 3dB bandwidth.
|
|
||||||
|
|
||||||
### IQ Mixer and PLL (Upconverter variant)
|
|
||||||
* The analog I and Q signals after the filter are upconverted in a single-sideband IQ
|
|
||||||
mixer with a f2 = 0.3 GHz..4.8 GHz LO (the "carrier").
|
|
||||||
* The output goes through a digitally switchable attenuator (0..31.5 dB attenuation) and
|
|
||||||
is available at an SMA output with a typical max signal level of 0 to -10 dBm (TBC).
|
|
||||||
|
|
||||||
### Overall properties
|
### Overall properties
|
||||||
* The resulting phase of that signal is
|
* The DAC may upconvert the signal by applying a frequency offset f1 with
|
||||||
|
phase p1.
|
||||||
|
* In the Upconverter Phaser variant, the analog quadrature upconverter
|
||||||
|
applies another frequency of f2 and phase p2.
|
||||||
|
* The resulting phase of the signal at the SMA output is
|
||||||
(f + f1 + f2)*t + p + s(t - t0) + p1 + p2 (mod 1 turn)
|
(f + f1 + f2)*t + p + s(t - t0) + p1 + p2 (mod 1 turn)
|
||||||
where p1 and p2 are constant but arbitrary and undetermined phase offsets of the
|
where s(t - t0) is the phase of the interpolated
|
||||||
two (common) upconversion stages, s(t - t0) is the phase of the interpolated
|
|
||||||
shaper output, and t0 is the trigger time (fiducial of the shaper).
|
shaper output, and t0 is the trigger time (fiducial of the shaper).
|
||||||
Unsurprisingly the frequency is the derivative of the phase.
|
Unsurprisingly the frequency is the derivative of the phase.
|
||||||
* The minimum time to change profiles and phase offsets is ~128 ns (estimate, TBC).
|
* The minimum time to change profiles and phase offsets is ~128 ns (estimate, TBC).
|
||||||
This is the minimum practical pulse interval.
|
This is the minimum pulse interval.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, channel):
|
def __init__(self, channel):
|
||||||
|
@ -1396,12 +1381,6 @@ class Miqro:
|
||||||
self.base_addr = (self.channel.phaser.channel_base + 1 +
|
self.base_addr = (self.channel.phaser.channel_base + 1 +
|
||||||
self.channel.index) << 8
|
self.channel.index) << 8
|
||||||
|
|
||||||
@kernel
|
|
||||||
def write32(self, addr, data):
|
|
||||||
self.channel.phaser.write16(PHASER_ADDR_MIQRO_MEM_ADDR,
|
|
||||||
(self.channel.index << 15) | addr)
|
|
||||||
self.channel.phaser.write32(PHASER_ADDR_MIQRO_MEM_DATA, data)
|
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def reset(self):
|
def reset(self):
|
||||||
for osc in range(16):
|
for osc in range(16):
|
||||||
|
|
Loading…
Reference in New Issue