Sebastien Bourdeauducq 4e4b0c9e94
All checks were successful
Hydra kasli_soc-demo-sd Hydra build #197482 of artiq:zynq-legacy:kasli_soc-demo-sd
Hydra zc706-acpki_nist_clock-firmware Hydra build #197491 of artiq:zynq-legacy:zc706-acpki_nist_clock-firmware
Hydra zc706-acpki_nist_clock_master-firmware Hydra build #197496 of artiq:zynq-legacy:zc706-acpki_nist_clock_master-firmware
Hydra zc706-acpki_nist_clock_master_100mhz-firmware Hydra build #197501 of artiq:zynq-legacy:zc706-acpki_nist_clock_master_100mhz-firmware
Hydra zc706-acpki_nist_clock_satellite-firmware Hydra build #197506 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite-firmware
Hydra zc706-acpki_nist_clock_satellite_100mhz-firmware Hydra build #197511 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite_100mhz-firmware
Hydra zc706-acpki_nist_qc2-firmware Hydra build #197516 of artiq:zynq-legacy:zc706-acpki_nist_qc2-firmware
Hydra zc706-acpki_nist_qc2_master-firmware Hydra build #197521 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master-firmware
Hydra zc706-acpki_nist_qc2_master_100mhz-firmware Hydra build #197526 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master_100mhz-firmware
Hydra zc706-acpki_nist_clock-gateware Hydra build #197493 of artiq:zynq-legacy:zc706-acpki_nist_clock-gateware
Hydra zc706-acpki_nist_clock_satellite_100mhz-gateware Hydra build #197513 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite_100mhz-gateware
Hydra zc706-acpki_nist_clock_master_100mhz-gateware Hydra build #197503 of artiq:zynq-legacy:zc706-acpki_nist_clock_master_100mhz-gateware
Hydra zc706-acpki_nist_qc2_satellite-firmware Hydra build #197531 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite-firmware
Hydra zc706-acpki_nist_qc2_satellite_100mhz-firmware Hydra build #197536 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite_100mhz-firmware
Hydra zc706-nist_qc2-firmware Hydra build #197567 of artiq:zynq-legacy:zc706-nist_qc2-firmware
Hydra zc706-nist_clock-firmware Hydra build #197542 of artiq:zynq-legacy:zc706-nist_clock-firmware
Hydra zc706-acpki_nist_clock_master-gateware Hydra build #197498 of artiq:zynq-legacy:zc706-acpki_nist_clock_master-gateware
Hydra zc706-acpki_nist_clock_satellite-gateware Hydra build #197508 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite-gateware
Hydra zc706-acpki_nist_qc2-gateware Hydra build #197518 of artiq:zynq-legacy:zc706-acpki_nist_qc2-gateware
Hydra zc706-nist_clock_master-firmware Hydra build #197547 of artiq:zynq-legacy:zc706-nist_clock_master-firmware
Hydra zc706-nist_clock_master_100mhz-firmware Hydra build #197552 of artiq:zynq-legacy:zc706-nist_clock_master_100mhz-firmware
Hydra zc706-acpki_nist_qc2_master-gateware Hydra build #197523 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master-gateware
Hydra zc706-acpki_nist_qc2_master_100mhz-gateware Hydra build #197528 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master_100mhz-gateware
Hydra zc706-nist_clock-gateware Hydra build #197544 of artiq:zynq-legacy:zc706-nist_clock-gateware
Hydra zc706-acpki_nist_qc2_satellite-gateware Hydra build #197533 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite-gateware
Hydra zc706-acpki_nist_qc2_satellite_100mhz-gateware Hydra build #197538 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite_100mhz-gateware
Hydra zc706-nist_qc2-gateware Hydra build #197569 of artiq:zynq-legacy:zc706-nist_qc2-gateware
Hydra zc706-nist_clock_master_100mhz-gateware Hydra build #197554 of artiq:zynq-legacy:zc706-nist_clock_master_100mhz-gateware
Hydra zc706-nist_clock_master-gateware Hydra build #197549 of artiq:zynq-legacy:zc706-nist_clock_master-gateware
Hydra zc706-nist_clock_satellite-firmware Hydra build #197557 of artiq:zynq-legacy:zc706-nist_clock_satellite-firmware
Hydra zc706-nist_clock_satellite_100mhz-firmware Hydra build #197562 of artiq:zynq-legacy:zc706-nist_clock_satellite_100mhz-firmware
Hydra zc706-nist_qc2_master-firmware Hydra build #197572 of artiq:zynq-legacy:zc706-nist_qc2_master-firmware
Hydra zc706-nist_qc2_master_100mhz-firmware Hydra build #197577 of artiq:zynq-legacy:zc706-nist_qc2_master_100mhz-firmware
Hydra zc706-nist_qc2_satellite-firmware Hydra build #197582 of artiq:zynq-legacy:zc706-nist_qc2_satellite-firmware
Hydra kasli_soc-demo-firmware Hydra build #197479 of artiq:zynq-legacy:kasli_soc-demo-firmware
Hydra zc706-nist_clock_satellite_100mhz-gateware Hydra build #197564 of artiq:zynq-legacy:zc706-nist_clock_satellite_100mhz-gateware
Hydra zc706-nist_qc2-jtag Hydra build #197570 of artiq:zynq-legacy:zc706-nist_qc2-jtag
Hydra fmt-check Hydra build #197477 of artiq:zynq-legacy:fmt-check
Hydra gateware-sim Hydra build #197478 of artiq:zynq-legacy:gateware-sim
Hydra zc706-nist_clock_satellite-gateware Hydra build #197559 of artiq:zynq-legacy:zc706-nist_clock_satellite-gateware
Hydra zc706-acpki_nist_clock-fsbl-sd Hydra build #197492 of artiq:zynq-legacy:zc706-acpki_nist_clock-fsbl-sd
Hydra zc706-nist_qc2_satellite_100mhz-firmware Hydra build #197587 of artiq:zynq-legacy:zc706-nist_qc2_satellite_100mhz-firmware
Hydra kasli_soc-master-firmware Hydra build #197483 of artiq:zynq-legacy:kasli_soc-master-firmware
Hydra kasli_soc-satellite-firmware Hydra build #197487 of artiq:zynq-legacy:kasli_soc-satellite-firmware
Hydra zc706-acpki_nist_clock_master-sd Hydra build #197500 of artiq:zynq-legacy:zc706-acpki_nist_clock_master-sd
Hydra zc706-acpki_nist_clock_master_100mhz-fsbl-sd Hydra build #197502 of artiq:zynq-legacy:zc706-acpki_nist_clock_master_100mhz-fsbl-sd
Hydra zc706-acpki_nist_clock_master_100mhz-jtag Hydra build #197504 of artiq:zynq-legacy:zc706-acpki_nist_clock_master_100mhz-jtag
Hydra zc706-acpki_nist_clock_master_100mhz-sd Hydra build #197505 of artiq:zynq-legacy:zc706-acpki_nist_clock_master_100mhz-sd
Hydra zc706-acpki_nist_clock_satellite-fsbl-sd Hydra build #197507 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite-fsbl-sd
Hydra zc706-acpki_nist_clock_satellite-jtag Hydra build #197509 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite-jtag
Hydra zc706-acpki_nist_clock_satellite_100mhz-fsbl-sd Hydra build #197512 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite_100mhz-fsbl-sd
Hydra zc706-acpki_nist_clock_satellite-sd Hydra build #197510 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite-sd
Hydra zc706-acpki_nist_clock_satellite_100mhz-jtag Hydra build #197514 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite_100mhz-jtag
Hydra zc706-acpki_nist_clock_satellite_100mhz-sd Hydra build #197515 of artiq:zynq-legacy:zc706-acpki_nist_clock_satellite_100mhz-sd
Hydra zc706-acpki_nist_qc2-fsbl-sd Hydra build #197517 of artiq:zynq-legacy:zc706-acpki_nist_qc2-fsbl-sd
Hydra zc706-acpki_nist_qc2-jtag Hydra build #197519 of artiq:zynq-legacy:zc706-acpki_nist_qc2-jtag
Hydra zc706-acpki_nist_clock-jtag Hydra build #197494 of artiq:zynq-legacy:zc706-acpki_nist_clock-jtag
Hydra zc706-acpki_nist_clock-sd Hydra build #197495 of artiq:zynq-legacy:zc706-acpki_nist_clock-sd
Hydra zc706-acpki_nist_clock_master-jtag Hydra build #197499 of artiq:zynq-legacy:zc706-acpki_nist_clock_master-jtag
Hydra zc706-acpki_nist_clock_master-fsbl-sd Hydra build #197497 of artiq:zynq-legacy:zc706-acpki_nist_clock_master-fsbl-sd
Hydra zc706-acpki_nist_qc2_master_100mhz-jtag Hydra build #197529 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master_100mhz-jtag
Hydra zc706-acpki_nist_qc2_master_100mhz-fsbl-sd Hydra build #197527 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master_100mhz-fsbl-sd
Hydra zc706-acpki_nist_qc2_satellite-fsbl-sd Hydra build #197532 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite-fsbl-sd
Hydra zc706-acpki_nist_qc2_master_100mhz-sd Hydra build #197530 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master_100mhz-sd
Hydra zc706-acpki_nist_qc2_satellite-sd Hydra build #197535 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite-sd
Hydra zc706-acpki_nist_qc2_satellite-jtag Hydra build #197534 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite-jtag
Hydra zc706-acpki_nist_qc2_satellite_100mhz-fsbl-sd Hydra build #197537 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite_100mhz-fsbl-sd
Hydra zc706-acpki_nist_qc2_satellite_100mhz-jtag Hydra build #197539 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite_100mhz-jtag
Hydra zc706-acpki_nist_qc2_satellite_100mhz-sd Hydra build #197540 of artiq:zynq-legacy:zc706-acpki_nist_qc2_satellite_100mhz-sd
Hydra zc706-nist_clock-fsbl-sd Hydra build #197543 of artiq:zynq-legacy:zc706-nist_clock-fsbl-sd
Hydra zc706-nist_clock-jtag Hydra build #197545 of artiq:zynq-legacy:zc706-nist_clock-jtag
Hydra zc706-nist_clock-sd Hydra build #197546 of artiq:zynq-legacy:zc706-nist_clock-sd
Hydra zc706-acpki_nist_qc2-sd Hydra build #197520 of artiq:zynq-legacy:zc706-acpki_nist_qc2-sd
Hydra zc706-acpki_nist_qc2_master-fsbl-sd Hydra build #197522 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master-fsbl-sd
Hydra zc706-acpki_nist_qc2_master-jtag Hydra build #197524 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master-jtag
Hydra zc706-acpki_nist_qc2_master-sd Hydra build #197525 of artiq:zynq-legacy:zc706-acpki_nist_qc2_master-sd
Hydra zc706-nist_clock_master-sd Hydra build #197551 of artiq:zynq-legacy:zc706-nist_clock_master-sd
Hydra zc706-nist_clock_satellite-sd Hydra build #197561 of artiq:zynq-legacy:zc706-nist_clock_satellite-sd
Hydra zc706-nist_clock_satellite_100mhz-fsbl-sd Hydra build #197563 of artiq:zynq-legacy:zc706-nist_clock_satellite_100mhz-fsbl-sd
Hydra zc706-nist_clock_satellite_100mhz-jtag Hydra build #197565 of artiq:zynq-legacy:zc706-nist_clock_satellite_100mhz-jtag
Hydra zc706-nist_clock_satellite_100mhz-sd Hydra build #197566 of artiq:zynq-legacy:zc706-nist_clock_satellite_100mhz-sd
Hydra zc706-nist_clock_master-fsbl-sd Hydra build #197548 of artiq:zynq-legacy:zc706-nist_clock_master-fsbl-sd
Hydra zc706-nist_clock_master-jtag Hydra build #197550 of artiq:zynq-legacy:zc706-nist_clock_master-jtag
Hydra zc706-nist_clock_master_100mhz-fsbl-sd Hydra build #197553 of artiq:zynq-legacy:zc706-nist_clock_master_100mhz-fsbl-sd
Hydra zc706-nist_clock_master_100mhz-jtag Hydra build #197555 of artiq:zynq-legacy:zc706-nist_clock_master_100mhz-jtag
Hydra zc706-nist_clock_master_100mhz-sd Hydra build #197556 of artiq:zynq-legacy:zc706-nist_clock_master_100mhz-sd
Hydra zc706-nist_clock_satellite-fsbl-sd Hydra build #197558 of artiq:zynq-legacy:zc706-nist_clock_satellite-fsbl-sd
Hydra zc706-nist_clock_satellite-jtag Hydra build #197560 of artiq:zynq-legacy:zc706-nist_clock_satellite-jtag
Hydra zc706-nist_qc2-fsbl-sd Hydra build #197568 of artiq:zynq-legacy:zc706-nist_qc2-fsbl-sd
Hydra zc706-nist_qc2-sd Hydra build #197571 of artiq:zynq-legacy:zc706-nist_qc2-sd
Hydra zc706-hitl-tests Hydra build #197541 of artiq:zynq-legacy:zc706-hitl-tests
Hydra zc706-nist_qc2_satellite_100mhz-gateware Hydra build #197589 of artiq:zynq-legacy:zc706-nist_qc2_satellite_100mhz-gateware
Hydra zc706-nist_qc2_satellite-gateware Hydra build #197584 of artiq:zynq-legacy:zc706-nist_qc2_satellite-gateware
Hydra zc706-nist_qc2_satellite_100mhz-fsbl-sd Hydra build #197588 of artiq:zynq-legacy:zc706-nist_qc2_satellite_100mhz-fsbl-sd
Hydra zc706-nist_qc2_satellite-fsbl-sd Hydra build #197583 of artiq:zynq-legacy:zc706-nist_qc2_satellite-fsbl-sd
Hydra zc706-nist_qc2_satellite-jtag Hydra build #197585 of artiq:zynq-legacy:zc706-nist_qc2_satellite-jtag
Hydra zc706-nist_qc2_satellite-sd Hydra build #197586 of artiq:zynq-legacy:zc706-nist_qc2_satellite-sd
Hydra zc706-nist_qc2_satellite_100mhz-jtag Hydra build #197590 of artiq:zynq-legacy:zc706-nist_qc2_satellite_100mhz-jtag
Hydra zc706-nist_qc2_satellite_100mhz-sd Hydra build #197591 of artiq:zynq-legacy:zc706-nist_qc2_satellite_100mhz-sd
Hydra zc706-nist_qc2_master-gateware Hydra build #197574 of artiq:zynq-legacy:zc706-nist_qc2_master-gateware
Hydra kasli_soc-demo-gateware Hydra build #197480 of artiq:zynq-legacy:kasli_soc-demo-gateware
Hydra zc706-nist_qc2_master-fsbl-sd Hydra build #197573 of artiq:zynq-legacy:zc706-nist_qc2_master-fsbl-sd
Hydra kasli_soc-demo-jtag Hydra build #197481 of artiq:zynq-legacy:kasli_soc-demo-jtag
Hydra zc706-nist_qc2_master-jtag Hydra build #197575 of artiq:zynq-legacy:zc706-nist_qc2_master-jtag
Hydra zc706-nist_qc2_master-sd Hydra build #197576 of artiq:zynq-legacy:zc706-nist_qc2_master-sd
Hydra zc706-nist_qc2_master_100mhz-fsbl-sd Hydra build #197578 of artiq:zynq-legacy:zc706-nist_qc2_master_100mhz-fsbl-sd
Hydra zc706-nist_qc2_master_100mhz-jtag Hydra build #197580 of artiq:zynq-legacy:zc706-nist_qc2_master_100mhz-jtag
Hydra zc706-nist_qc2_master_100mhz-sd Hydra build #197581 of artiq:zynq-legacy:zc706-nist_qc2_master_100mhz-sd
Hydra kasli_soc-master-gateware Hydra build #197484 of artiq:zynq-legacy:kasli_soc-master-gateware
Hydra zc706-nist_qc2_master_100mhz-gateware Hydra build #197579 of artiq:zynq-legacy:zc706-nist_qc2_master_100mhz-gateware
Hydra kasli_soc-master-jtag Hydra build #197485 of artiq:zynq-legacy:kasli_soc-master-jtag
Hydra kasli_soc-master-sd Hydra build #197486 of artiq:zynq-legacy:kasli_soc-master-sd
Hydra kasli_soc-satellite-gateware Hydra build #197488 of artiq:zynq-legacy:kasli_soc-satellite-gateware
Hydra kasli_soc-satellite-jtag Hydra build #197489 of artiq:zynq-legacy:kasli_soc-satellite-jtag
Hydra kasli_soc-satellite-sd Hydra build #197490 of artiq:zynq-legacy:kasli_soc-satellite-sd
firmware: export sincos
2026-04-02 09:23:53 +08:00
2026-04-02 09:23:53 +08:00
2021-02-15 19:51:46 +08:00
2020-07-20 19:44:45 +08:00
2024-11-08 16:54:46 +08:00
2021-10-08 16:25:13 +08:00

ARTIQ on Zynq

How to use

  1. Install ARTIQ. Get the corresponding version to the artiq-zynq version you are targeting.
  2. To obtain firmware binaries, use AFWS or build your own; see the ARTIQ manual for detailed instructions or skip to "Development" below. ZC706 variants only can also be downloaded from latest successful build on Hydra.
  3. Place boot.bin file at the root / of a FAT-formatted SD card.
  4. Optionally, create a config.txt configuration file containing key=value pairs on each line and place it at the root of the SD card. See below for valid keys. The ip, ip6 and mac keys can be used to set networking information. If these keys are not found, the firmware will use default values which may or may not be compatible with your network.
  5. Insert the SD card into the board and set the board to boot from the SD card. For ZC706, this is achieved by placing the large DIP switch SW11 into the 00110 position. On Kasli-SoC, place the BOOT MODE switches to SD.
  6. Power up the board. After successful boot the firmware should respond to ping at its IP addresses. Boot output can be observed from UART at 115200bps 8-N-1.
  7. Create and use an ARTIQ device database as usual.

Configuration

Configuring the device is done using the config.txt text file at the root of the SD card plus optionally a config folder. When searching for a configuration key, the firmware first looks for a file named /config/[key].bin and, if it exists, returns the contents of that file. If not, it looks into /config.txt, which should contain a list of key=value pairs, one per line. config.txt should be used for most keys but the config folder allows for setting configuration values which consist of binary data, such as the startup kernel.

The following configuration keys are available among others:

  • mac: Ethernet MAC address.
  • ip: IPv4 address.
  • ip6: IPv6 address.
  • idle_kernel: idle kernel in ELF format (as produced by artiq_compile).
  • startup_kernel: startup kernel in ELF format (as produced by artiq_compile).
  • rtio_clock: source of RTIO clock; valid values are ext0_bypass and int_125.

See ARTIQ manual for full list. Configurations can be read/written/removed with artiq_coremgmt. Config erase is not implemented, as it isn't particularly useful.

For convenience, the boot key can be used with artiq_coremgmt and a boot.bin file to replace firmware/gateware in a running system. This key is read-only. When loading boot.bin onto the SD card directly, place it at the root and not in the config folder.

Development instructions

ARTIQ on Zynq is packaged using Nix Flakes. Install Nix 2.8+ and enable flakes by adding experimental-features = nix-command flakes to nix.conf (e.g. ~/.config/nix/nix.conf).

Pure build with Nix:

nix build .#zc706-nist_clock-jtag  # or zc706-nist_qc2-jtag or zc706-nist_clock-sd or etc

Run nix flake show to see all valid build targets. Targets suffixed with -jtag produce separate firmware and gateware files, intended for use in booting via JTAG server/Ethernet, e.g. ./remote_run.sh -i with a remote JTAG server. Targets suffixed with -sd will produce boot.bin file suitable for SD card boot. -firmware and -gateware respectively build firmware and gateware only.

The Kasli-SoC target requires a system description file as input. See ARTIQ manual for exact instructions or use incremental build.

Impure incremental build:

For boards with fixed variants, i.e. ZC706, etc. :

nix develop
cd src
gateware/<board>.py -g ../build/gateware -V <variant> # gateware
make GWARGS="-V <variant>" <runtime/satman>    # firmware

For boards with system descriptions, i.e. Kasli-SoC, etc. :

nix develop
cd src
gateware/<board>.py -g ../build/gateware <description.json> # gateware
make TARGET=<board> GWARGS="path/to/description.json" <runtime/satman> # firmware

szl.elf can be obtained with:

nix build git+https://git.m-labs.hk/m-labs/zynq-rs#<board>-szl

To generate boot.bin use mkbootimage, e.g.:

echo "the_ROM_image:
    {
        [bootloader]result/szl.elf
        gateware/top.bit
        firmware/armv7-none-eabihf/release/<runtime/satman>
    }
    EOF" >> boot.bif
mkbootimage boot.bif boot.bin

Notes:

  • The impure build process is also compatible with non-Nix systems.
  • Firmware type must be either runtime for DRTIO-less or DRTIO master variants, or satman for DRTIO satellite.
  • If the board is connected to the local machine by JTAG, use the local_run.sh script.
  • A known Xilinx hardware bug prevents repeatedly loading the bootloader over JTAG without a POR reset. If booting over JTAG, install a jumper on PS_POR_B and use the POR reset script here.

License

Copyright (C) 2019-2024 M-Labs Limited.

ARTIQ is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

ARTIQ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with ARTIQ. If not, see http://www.gnu.org/licenses/.

Description
ARTIQ Zynq-based core device support
Readme 10 MiB
Languages
Rust 44.7%
C++ 20.9%
C 20.6%
Python 7.5%
Assembly 2.7%
Other 3.5%