forked from M-Labs/nac3
pca006132
4457af7277
Fixes issue #42. Previously there was no fix for the variable alignment. We calculate the position of the variable based on the size of the previous variable, so we could break the alignment requirement for variables. For example, having a `i64` after `bool` could break the alignment required for `i64` and trigger DataAbort or data corruption. However, this requires the same data layout and LLVM type for the variables. If this cannot be maintained, this would break the alignment on the other side of the RPC, either from host to kernel or kernel to host. |
||
---|---|---|
examples | ||
openocd | ||
src | ||
.gitignore | ||
README.md | ||
channel-rust-nightly.toml | ||
default.nix | ||
local_run.sh | ||
mkbootimage.nix | ||
remote_run.sh | ||
rustPlatform.nix | ||
shell.nix |
README.md
ARTIQ on Zynq
How to use
- Install ARTIQ-6 or newer.
- Select the latest successful build on Hydra: https://nixbld.m-labs.hk/jobset/artiq/zynq
- Search for the job named
<board>-<variant>-sd
(for example:zc706-nist_clock-sd
orzc706-nist_qc2-sd
). - Download the
boot.bin
"binary distribution" and place it at the root of a FAT-formatted SD card. - Optionally, create a
config.txt
configuration file at the root of the SD card containingkey=value
pairs on each line. Use theip
,ip6
andmac
keys to respectively set the IPv4, IPv6 and MAC address of the board. Configuring an IPv6 address is entirely optional. If these keys are not found, the firmware will use default values that may or may not be compatible with your network. - Insert the SD card into the board and set up the board to boot from the SD card. For the ZC706, this is achieved by placing the large DIP switch SW11 in the 00110 position.
- Power up the board. After the firmware starts successfully, it should respond to ping at its IP addresses, and boot messages can be observed from its UART at 115200bps.
- Create and use an ARTIQ device database as usual, but set
"target": "cortexa9"
in the arguments of the core device.
Configuration
Configuring the device is done using the config.txt
text file at the root of the SD card, plus the contents of the 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 contains a list of key=value
pairs, one per line. The config
folder allows configuration values that consist in binary data, such as the startup kernel.
The following configuration keys are available:
mac
: Ethernet MAC address.ip
: IPv4 address.ip6
: IPv6 address.startup
: startup kernel in ELF format (as produced byartiq_compile
).rtioclk
: source of RTIO clock; valid values areexternal
andinternal
.
Development instructions
Configure Nix channels:
nix-channel --add https://nixbld.m-labs.hk/channel/custom/artiq/fast-beta/artiq-fast
nix-channel --update
Pure build with Nix and execution on a remote JTAG server:
nix-build -A zc706-simple-jtag # or zc706-nist_qc2-jtag or zc706-nist_clock-jtag
./remote_run.sh
Impure incremental build and execution on a remote JTAG server:
nix-shell
cd src
gateware/zc706.py -g ../build/gateware # build gateware
make # build firmware
cd ..
./remote_run.sh -i
Notes:
- This is known to work with Nixpkgs 20.03 and the
nixbld.m-labs.hk
binary substituter can also be used here (see the ARTIQ manual for the public key and instructions). - The impure build process is also compatible with non-Nix systems.
- If the board is connected to the local machine, use the
local_run.sh
script.