Utilities

Local running tool

Static compiler

This tool compiles an experiment into a ELF file. It is primarily used to prepare binaries for the default experiment loaded in non-volatile storage of the core device. Experiments compiled with this tool are not allowed to use RPCs, and their run entry point must be a kernel.

Flash storage image generator

This tool compiles key/value pairs into a binary image suitable for flashing into the flash storage space of the core device.

ARTIQ flash storage image generator

usage: artiq_mkfs [-h] [-s KEY STRING] [-f KEY FILENAME] output

Positional Arguments

output output file

Named Arguments

-s

add string

Default: []

-f

add file contents

Default: []

Flashing/Loading tool

ARTIQ flashing/deployment tool

usage: artiq_flash [-h] [--version] [-n] [-H HOSTNAME] [-J JUMP] [-t TARGET]
                   [-V VARIANT] [-I PREINIT_COMMAND] [-f STORAGE] [-d DIR]
                   [--srcbuild] [--force-rtm]
                   [ACTION [ACTION ...]]

Positional Arguments

ACTION

actions to perform, default: [‘gateware’, ‘rtm_gateware’, ‘bootloader’, ‘firmware’, ‘start’]

Default: [‘gateware’, ‘rtm_gateware’, ‘bootloader’, ‘firmware’, ‘start’]

Named Arguments

--version print the ARTIQ version number
-n, --dry-run

only show the openocd script that would be run

Default: False

-H, --host SSH host where the board is located
-J, --jump SSH host to jump through
-t, --target

target board, default: “kasli”, one of: kasli sayma metlino kc705

Default: “kasli”

-V, --variant board variant. Autodetected if only one is installed.
-I, --preinit-command
 

add a pre-initialization OpenOCD command. Useful for selecting a board when several are connected.

Default: []

-f, --storage write file to storage area
-d, --dir look for board binaries in this directory
--srcbuild

board binaries directory is laid out as a source build tree

Default: False

--force-rtm

force RTM actions on boards/variants that normally do not have a RTM

Default: False

Valid actions:

  • gateware: write main gateware bitstream to flash
  • rtm_gateware: write RTM gateware bitstream to flash
  • bootloader: write bootloader to flash
  • storage: write storage image to flash
  • firmware: write firmware to flash
  • load: load main gateware bitstream into device (volatile but fast)
  • rtm_load: load RTM gateware bitstream into device
  • erase: erase flash memory
  • start: trigger the target to (re)load its gateware bitstream from flash

Prerequisites:

  • Connect the board through its/a JTAG adapter.
  • Have OpenOCD installed and in your $PATH.
  • Have access to the JTAG adapter’s devices. Udev rules from OpenOCD: ‘sudo cp openocd/contrib/99-openocd.rules /etc/udev/rules.d’ and replug the device. Ensure you are member of the plugdev group: ‘sudo adduser $USER plugdev’ and re-login.

Core device management tool

The artiq_coremgmt utility gives remote access to the core device logs, the Flash storage, and other management functions.

To use this tool, you need to specify a device_db.py device database file which contains a comm device (an example is provided in examples/master/device_db.py). This tells the tool how to connect to the core device and with which parameters (e.g. IP address, TCP port). When not specified, the artiq_coremgmt utility will assume that there is a file named device_db.py in the current directory.

To read core device logs:

$ artiq_coremgmt log

To set core device log level and UART log level (possible levels are TRACE, DEBUG, INFO, WARN and ERROR):

$ artiq_coremgmt log set_level LEVEL
$ artiq_coremgmt log set_uart_level LEVEL

Note that enabling the TRACE log level results in small core device slowdown, and printing large amounts of log messages to the UART results in significant core device slowdown.

To read the record whose key is mac:

$ artiq_coremgmt config read mac

To write the value test_value in the key my_key:

$ artiq_coremgmt config write -s my_key test_value
$ artiq_coremgmt config read my_key
b'test_value'

You can also write entire files in a record using the -f parameter. This is useful for instance to write the startup and idle kernels in the flash storage:

$ artiq_coremgmt config write -f idle_kernel idle.elf
$ artiq_coremgmt config read idle_kernel | head -c9
b'\x7fELF

You can write several records at once:

$ artiq_coremgmt config write -s key1 value1 -f key2 filename -s key3 value3

To remove the previously written key my_key:

$ artiq_coremgmt config delete my_key

You can remove several keys at once:

$ artiq_coremgmt config delete key1 key2

To erase the entire flash storage area:

$ artiq_coremgmt config erase

You do not need to remove a record in order to change its value, just overwrite it:

$ artiq_coremgmt config write -s my_key some_value
$ artiq_coremgmt config write -s my_key some_other_value
$ artiq_coremgmt config read my_key
b'some_other_value'

Core device logging controller

Core device RTIO analyzer tool

artiq_coreanalyzer is a tool to convert core device RTIO logs to VCD waveform files that are readable by third-party tools such as GtkWave. This tool extracts pre-recorded data from an ARTIQ core device buffer (or from a file with the -r option), and converts it to a standard VCD file format. See RTIO analyzer for an example, or artiq.test.coredevice.test_analyzer for a relevant unit test.

Note

The RTIO analyzer does not support SAWG.

DRTIO routing table manipulation tool

ARTIQ DRTIO routing table manipulation tool

usage: artiq_route [-h] FILE {init,show,set} ...

Positional Arguments

FILE target file
action Possible choices: init, show, set

Sub-commands:

init

create a new empty routing table

artiq_route init [-h]

show

show contents of routing table

artiq_route show [-h]

set

set routing table entry

artiq_route set [-h] DESTINATION [HOP [HOP ...]]
Positional Arguments
DESTINATION destination to operate on
HOP hop(s) to the destination