Highlights:
- New hardware support:
- Phaser, a quad channel 1GS/s RF generator card with dual IQ upconverter and dual 5MS/s ADC and FPGA.
- Zynq SoC core devices, enabling kernels to run on 1 GHz CPU core with a floating-point unit for faster computations. This currently requires an external repository (https://git.m-labs.hk/m-labs/artiq-zynq).
- Mirny 4-channel wide-band PLL/VCO-based microwave frequency synthesiser
- Fastino 32-channel, 3MS/s per channel, 16-bit DAC EEM
- Kasli 2.0, an improved core device with 12 built-in EEM slots, faster FPGA, 4 SFPs, and high-precision clock recovery circuitry for DRTIO (to be supported in ARTIQ-7).
- ARTIQ Python (core device kernels):
- Multidimensional arrays are now available on the core device, using NumPy syntax.
Elementwise operations (e.g.
+
,/
), matrix multiplication (@
) and multidimensional indexing are supported; slices and views are not yet. - Trigonometric and other common math functions from NumPy are now available on the
core device (e.g.
numpy.sin
), both for scalar arguments and implicitly broadcast across multidimensional arrays. - Failed assertions now raise
AssertionError
s instead of aborting kernel execution.
- Multidimensional arrays are now available on the core device, using NumPy syntax.
Elementwise operations (e.g.
- Performance improvements:
- SERDES TTL inputs can now detect edges on pulses that are shorter than the RTIO period (m-labs#1432)
- Improved performance for kernel RPC involving list and array.
- Coredevice SI to mu conversions now always return valid codes, or raise a
ValueError
. - Zotino now exposes
voltage_to_mu()
ad9910
: The maximum amplitude scale factor is now0x3fff
(was0x3ffe
before).- Mirny now supports HW revision independent, human readable
clk_sel
parameters: "XO", "SMA", and "MMCX". Passing an integer is backwards compatible. - Dashboard:
- Applets now restart if they are running and a ccb call changes their spec
- A "Quick Open" dialog to open experiments by typing part of their name can be brought up Ctrl-P (Ctrl+Return to immediately submit the selected entry with the default arguments).
- The Applets dock now has a context menu command to quickly close all open applets (shortcut: Ctrl-Alt-W).
- Experiment results are now always saved to HDF5, even if
run()
fails. - Core device:
panic_reset 1
now correctly resets the kernel CPU as well if communication CPU panic occurs. - NumberValue accepts a
type
parameter specifying the output asint
orfloat
- A parameter
--identifier-str
has been added to many targets to aid with reproducible builds. - Python 3.7 support in Conda packages.
- kasli_generic JSON descriptions are now validated against a schema. Description defaults have moved from Python to the schema. Warns if ARTIQ version is too old.
Breaking changes:
artiq_netboot
has been moved to its own repository at https://git.m-labs.hk/m-labs/artiq-netboot- Core device watchdogs have been removed.
- The ARTIQ compiler now implements arrays following NumPy semantics, rather than as a thin veneer around lists. Most prior use cases of NumPy arrays in kernels should work unchanged with the new implementation, but the behavior might differ slightly in some cases (for instance, non-rectangular arrays are not currently supported).
quamash
has been replaced withqasync
.- Protocols are updated to use device endian.
- Analyzer dump format includes a byte for device endianness.
- Experiment classes with underscore-prefixed names are now ignored when
artiq_client
determines which experiment to submit (consistent withartiq_run
).
Highlights:
- Performance improvements:
- Faster RTIO event submission (1.5x improvement in pulse rate test) See: m-labs#636
- Faster compilation times (3 seconds saved on kernel compilation time on a typical medium-size experiment) See: https://github.com/m-labs/artiq/commit/611bcc4db4ed604a32d9678623617cd50e968cbf
- Improved packaging and build system:
- new continuous integration/delivery infrastructure based on Nix and Hydra, providing reproducibility, speed and independence.
- rolling release process (m-labs#1326).
- firmware, gateware and device database templates are automatically built for all supported Kasli variants.
- new JSON description format for generic Kasli systems.
- Nix packages are now supported.
- many Conda problems worked around.
- controllers are now out-of-tree.
- split packages that enable lightweight applications that communicate with ARTIQ, e.g. controllers running on non-x86 single-board computers.
- Improved Urukul support:
- AD9910 RAM mode.
- Configurable refclk divider and PLL bypass.
- More reliable phase synchronization at high sample rates.
- Synchronization calibration data can be read from EEPROM.
- A gateware-level input edge counter has been added, which offers higher
throughput and increased flexibility over the usual TTL input PHYs where
edge timestamps are not required. See
artiq.coredevice.edge_counter
for the core device driver andartiq.gateware.rtio.phy.edge_counter
/artiq.gateware.eem.DIO.add_std
for the gateware components. - With DRTIO, Siphaser uses a better calibration mechanism. See: https://github.com/m-labs/artiq/commit/cc58318500ecfa537abf24127f2c22e8fe66e0f8
- Schedule updates can be sent to influxdb (artiq_influxdb_schedule).
- Experiments can now programatically set their default pipeline, priority, and flush flag.
- List datasets can now be efficiently appended to from experiments using
artiq.language.environment.HasEnvironment.append_to_dataset
. - The core device now supports IPv6.
- To make development easier, the bootloader can receive firmware and secondary FPGA gateware from the network.
- Python 3.7 compatibility (Nix and source builds only, no Conda).
- Various other bugs from 4.0 fixed.
- Preliminary Sayma v2 and Metlino hardware support.
Breaking changes:
- The
artiq.coredevice.ad9910.AD9910
andartiq.coredevice.ad9914.AD9914
phase reference timestamp parameters have been renamed toref_time_mu
for consistency, as they are in machine units. - The controller manager now ignores device database entries without the
command
key set to facilitate sharing of devices between multiple masters. - The meaning of the
-d/--dir
and--srcbuild
options ofartiq_flash
has changed. - Controllers for third-party devices are now out-of-tree.
aqctl_corelog
now filters log messages below theWARNING
level by default. This behavior can be changed using the-v
and-q
options like the other programs.- On Kasli the firmware now starts with a unique default MAC address from EEPROM if mac is absent from the flash config.
- The
-e/--experiment
switch ofartiq_run
andartiq_compile
has been renamed-c/--class-name
. artiq_devtool
has been removed.- Much of
artiq.protocols
has been moved to a separate packagesipyco
.artiq_rpctool
has been renamed tosipyco_rpctool
.
The
artiq.coredevice.ttl
drivers no longer track the timestamps of submitted events in software, requiring the user to explicitly specify the timeout forcount()
/timestamp_mu()
. Support forsync()
has been dropped.Now that RTIO has gained DMA support, there is no longer a reliable way for the kernel CPU to track the individual events submitted on any one channel. Requiring the timeouts to be specified explicitly ensures consistent API behavior. To make this more convenient, the
TTLInOut.gate_*()
functions now return the cursor position at the end of the gate, e.g.:ttl_input.count(ttl_input.gate_rising(100 * us))
In most situations – that is, unless the timeline cursor is rewound after the respective
gate_*()
call – simply passingnow_mu()
is also a valid upgrade path:ttl_input.count(now_mu())
The latter might use up more timeline slack than necessary, though.
In place of
TTL(In)Out.sync
, the newCore.wait_until_mu()
method can be used, which blocks execution until the hardware RTIO cursor reaches the given timestamp:ttl_output.pulse(10 * us) self.core.wait_until_mu(now_mu())
RTIO outputs use a new architecture called Scalable Event Dispatcher (SED), which allows building systems with large number of RTIO channels more efficiently. From the user perspective, collision errors become asynchronous, and non- monotonic timestamps on any combination of channels are generally allowed (instead of producing sequence errors). RTIO inputs are not affected.
The DDS channel number for the NIST CLOCK target has changed.
The dashboard configuration files are now stored one-per-master, keyed by the server address argument and the notify port.
The master now has a
--name
argument. If given, the dashboard is labelled with this name rather than the server address.artiq_flash
targets Kasli by default. Use-t kc705
to flash a KC705 instead.artiq_flash -m/--adapter
has been changed toartiq_flash -V/--variant
.The
proxy
action ofartiq_flash
is determined automatically and should not be specified manually anymore.kc705_dds
has been renamedkc705
.The
-H/--hw-adapter
option ofkc705
has been renamed-V/--variant
.SPI masters have been switched from misoc-spi to misoc-spi2. This affects all out-of-tree RTIO core device drivers using those buses. See the various commits on e.g. the
ad53xx
driver for an example how to port from the old to the new bus.The
ad5360
coredevice driver has been renamed toad53xx
and the API has changed to better support Zotino.artiq.coredevice.dds
has been renamed toartiq.coredevice.ad9914
and simplified. DDS batch mode is no longer supported. Thecore_dds
device is no longer necessary.The configuration entry
startup_clock
is renamedrtio_clock
. Switching clocks dynamically (i.e. without device restart) is no longer supported.set_dataset(..., save=True)
has been renamedset_dataset(..., archive=True)
.On the AD9914 DDS, when switching to
PHASE_MODE_CONTINUOUS
from another mode, use the returned value of the lastset_mu
call as the phase offset forPHASE_MODE_CONTINUOUS
to avoid a phase discontinuity. This is no longer done automatically. If one phase glitch when enteringPHASE_MODE_CONTINUOUS
is not an issue, this recommendation can be ignored.
No further notes.
No further notes.
No further notes.
No further notes.
No further notes.
- To accommodate larger runtimes, the flash layout as changed. As a result, the contents of the flash storage will be lost when upgrading. Set the values back (IP, MAC address, startup kernel, etc.) after the upgrade.
No further notes.
- The
--embed
option of applets is replaced with the environment variableARTIQ_APPLET_EMBED
. The GUI sets this enviroment variable itself and the user simply needs to remove the--embed
argument. EnvExperiment
'sprepare
callsprepare
for all its children.- Dynamic
__getattr__
's returning RPC target methods are not supported anymore. Controller driver classes must define all their methods intended for RPC as members. - Datasets requested by experiments are by default archived into their HDF5
output. If this behavior is undesirable, turn it off by passing
archive=False
toget_dataset
. seconds_to_mu
andmu_to_seconds
have become methods of the core device driver (use e.g.self.core.seconds_to_mu()
).- AD9858 DDSes and NIST QC1 hardware are no longer supported.
- The DDS class names and setup options have changed, this requires an update of the device database.
int(a, width=b)
has been removed. Useint32(a)
andint64(a)
.- The KC705 gateware target has been renamed
kc705_dds
. artiq.coredevice.comm_tcp
has been renamedartiq.coredevice.comm_kernel
, andComm
has been renamedCommKernel
.- The "collision" and "busy" RTIO errors are reported through the log instead of raising exceptions.
- Results are still saved when
analyze
raises an exception. LinearScan
andRandomScan
have been consolidated into RangeScan.- The Pipistrello is no longer supported. For a low-cost ARTIQ setup, use either ARTIQ 2.x with Pipistrello, or the future ARTIQ 4.x with Kasli. Note that the Pipistrello board has also been discontinued by the manufacturer but its design files are freely available.
- The device database is now generated by an executable Python script. To migrate
an existing database, add
device_db = `` at the beginning, and replace any PYON identifiers (``true
,null
, ...) with their Python equivalents (True
,None
...). - Controllers are now named
aqctl_XXX
instead ofXXX_controller
. - In the device database, the
comm
device has been folded into thecore
device. Move the "host" argument into thecore
device, and remove thecomm
device. - The core device log now contains important information about events such as
RTIO collisions. A new controller
aqctl_corelog
must be running to forward those logs to the master. See the example device databases to see how to instantiate this controller. Usingartiq_session
ensures that a controller manager is running simultaneously with the master. - Experiments scheduled with the "flush pipeline" option now proceed when there are lower-priority experiments in the pipeline. Only experiments at the current (or higher) priority level are flushed.
- The PDQ(2/3) driver has been removed and is now being maintained out-of tree at https://github.com/m-labs/pdq. All SPI/USB driver layers, Mediator, CompoundPDQ and examples/documentation has been moved.
- The master now rotates log files at midnight, rather than based on log size.
- The results keys
start_time
andrun_time
are now stored as doubles of UNIX time, rather than ints. The file names are still based on local time. - Packages are no longer available for 32-bit Windows.
No further notes.
No further notes.
- When using conda, add the conda-forge channel before installing ARTIQ.
No further notes.
No further notes.
No further notes.
No further notes.
The format of the influxdb pattern file is simplified. The procedure to edit patterns is also changed to modifying the pattern file and calling:
artiq_rpctool.py ::1 3248 call scan_patterns
(or restarting the bridge) The patterns can be converted to the new format using this code snippet:from artiq.protocols import pyon patterns = pyon.load_file("influxdb_patterns.pyon") for p in patterns: print(p)
The "GUI" has been renamed the "dashboard".
When flashing NIST boards, use "-m nist_qcX" or "-m nist_clock" instead of just "-m qcX" or "-m clock" (#290).
Applet command lines now use templates (e.g. $python) instead of formats (e.g. {python}).
On Windows, GUI applications no longer open a console. For debugging purposes, the console messages can still be displayed by running the GUI applications this way:
python3.5 -m artiq.frontend.artiq_browser python3.5 -m artiq.frontend.artiq_dashboard
(you may need to replace python3.5 with python) Please always include the console output when reporting a GUI crash.
The result folders are formatted "%Y-%m-%d/%H instead of "%Y-%m-%d/%H-%M". (i.e. grouping by day and then by hour, instead of by day and then by minute)
The
parent
keyword argument ofHasEnvironment
(andEnvExperiment
) has been replaced. Pass the parent as first argument instead.During experiment examination (and a fortiori repository scan), the values of all arguments are set to
None
regardless of any default values supplied.In the dashboard's experiment windows, partial or full argument recomputation takes into account the repository revision field.
By default,
NumberValue
andScannable
infer the scale from the unit for common units.By default, artiq_client keeps the current persist flag on the master.
GUI state files for the browser and the dashboard are stores in "standard" locations for each operating system. Those are
~/.config/artiq/2/artiq_*.pyon
on Linux andC:\Users\<username>\AppData\Local\m-labs\artiq\2\artiq_*.pyon
on Windows 7.The position of the time cursor is kept across experiments and RTIO resets are manual and explicit (inter-experiment seamless handover).
All integers manipulated by kernels are numpy integers (numpy.int32, numpy.int64). If you pass an integer as a RPC argument, the target function receives a numpy type.
No further notes.
No further notes.
- TCA6424A.set converts the "outputs" value to little-endian before programming it into the registers.
No further notes.
- setattr_argument and setattr_device add their key to kernel_invariants.
- The HDF5 format has changed.
- The datasets are located in the HDF5 subgroup
datasets
. - Datasets are now stored without additional type conversions and annotations from ARTIQ, trusting that h5py maps and converts types between HDF5 and python/numpy "as expected".
- The datasets are located in the HDF5 subgroup
- NumberValue now returns an integer if
ndecimals
= 0,scale
= 1 andstep
is integer.
- The CPU speed in the pipistrello gateware has been reduced from 83 1/3 MHz to 75 MHz. This will reduce the achievable sustained pulse rate and latency accordingly. ISE was intermittently failing to meet timing (#341).
- set_dataset in broadcast mode no longer returns a Notifier. Mutating datasets should be done with mutate_dataset instead (#345).
Experiments (your code) should use
from artiq.experiment import *
(and notfrom artiq import *
as previously)Core device flash storage has moved due to increased runtime size. This requires reflashing the runtime and the flash storage filesystem image or erase and rewrite its entries.
RTIOCollisionError
has been renamed toRTIOCollision
the new API for DDS batches is:
with self.core_dds.batch: ...
with
core_dds
a device of typeartiq.coredevice.dds.CoreDDS
. The dds_bus device should not be used anymore.LinearScan now supports scanning from high to low. Accordingly, its arguments
min/max
have been renamed tostart/stop
respectively. Same for RandomScan (even though there direction matters little).