clean up docs

This commit is contained in:
Robert Jördens 2022-09-08 08:38:26 +02:00
parent 857fb4ecec
commit 4df880faf6
1 changed files with 17 additions and 38 deletions

View File

@ -1292,9 +1292,6 @@ class Miqro:
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
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.
@ -1324,9 +1321,10 @@ class Miqro:
phases, previous profiles, or oscillator history). It is "absolute" in the
sense that frequency f and phase p fully determine oscillator
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
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
for the NOP (no operation, identity) profile, usually with zero
amplitude.
@ -1344,51 +1342,38 @@ class Miqro:
triggerable shaper.
* Triggering the shaper corresponds to passing a pulse from all
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.
* The shaper reads (replays) window samples from a memory of size n_window = 1 << 10 starting
and stopping at memory locations specified.
* Each window memory segment starts with a header determining segment
length and interpolation parameters.
* The window samples are interpolated by a factor (rate change) r where log2(r) = 0..n_cic=12
selectable when triggering.
* The window samples are interpolated by a factor (rate change)
between 1 and r = 1 << 12.
* The interpolation order is constant, linear, quadratic, or cubic. This
corresponds to interpolation modes from rectangular window (1st order CIC)
or zero order hold) and to Parzen window (4th order CIC, cubic spline),
selectable when triggering.
or zero order hold) and to Parzen window (4th order CIC, cubic spline).
* 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
do not feed zero-amplitude samples into the shaper before and after
each window. This is used to implement pulses with arbitrary length or
CW output.
* The window memory can be segmented by choosing different start indices
to support different windows selectable when triggering.
### 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).
to support different windows.
### 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)
where p1 and p2 are constant but arbitrary and undetermined phase offsets of the
two (common) upconversion stages, s(t - t0) is the phase of the interpolated
where s(t - t0) is the phase of the interpolated
shaper output, and t0 is the trigger time (fiducial of the shaper).
Unsurprisingly the frequency is the derivative of the phase.
* 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):
@ -1396,12 +1381,6 @@ class Miqro:
self.base_addr = (self.channel.phaser.channel_base + 1 +
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
def reset(self):
for osc in range(16):