Bare-metal Rust on Zynq-7000
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sebastien Bourdeauducq a53ed8acc8 add remote run script 3 years ago
.cargo update rust + smoltcp 3 years ago
experiments core1: support redirecting vectors to sdram 3 years ago
libasync libasync: add mod delay 3 years ago
libboard_zynq Merge pull request 'sdio-registers' (#29) 3 years ago
libcortex_a9 libcortex_a9: allow access for full 1GB of DDR 3 years ago
libregister finished register definitions 3 years ago
libsupport_zynq core1: support redirecting vectors to sdram 3 years ago
openocd openocd: fix cora z7-10 PL_TAPID 3 years ago
.gitignore remove zc706.elf from gitignore 3 years ago
Cargo.lock Cargo.lock: cargo update 3 years ago
Cargo.toml Cargo.toml: flip LTO back on to fit OCM 3 years ago default.nix: fix 3 years ago
armv7-none-eabihf.json define custom target, use with cargo-xbuild 4 years ago improved the development process 3 years ago
channel-rust-nightly.toml Cargo.lock: fix 3 years ago
default.nix update cargoSha256 3 years ago
qemu.gdb PoC: boot, uart output in qemu 4 years ago add remote run script 3 years ago PoC: boot, uart output in qemu 4 years ago
shell.nix default.nix: build zc706 3 years ago add support for cora z7 in tmux script 3 years ago


nix-shell --command "cargo xbuild --release"

Currently the ELF output is placed at target/armv7-none-eabihf/release/experiments


Using the Xilinx toolchain

Tested with the ZC706 board.

Run the Xilinx Microprocessor Debugger:


Connect to target (given it is connected and you have permissions):

connect arm hw

Leave xmd running.

Start the Xilinx version of the GNU debugger with your latest build:

/opt/Xilinx/14.7/ISE_DS/EDK/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-gdb zc706

Connect the debugger to xmd over TCP on localhost:

target remote :1234

Proceed using gdb with load, c

Using OpenOCD

Running on the ZC706

nix-shell --command "cargo xbuild --release"
cd openocd
openocd -f zc706.cfg

Running on the Cora Z7-10

nix-shell --command "cd experiments && cargo xbuild --release --no-default-features --features=target_cora_z7_10"
cd openocd
openocd -f cora-z7-10.cfg

Loading a bitstream into volatile memory

  openocd -f zc706.cfg -c "pld load 0 blinker_migen.bit; exit"

Development Process

Clone this repo onto your development/build machine and the raspberry pi that controls the Xilinx 7000 board

On the dev machine, the below script builds zc706 and secure copies it to the target pi (in your pi $HOME directory)

cd ~/zc706
./ $your_user/ssh_id

On the pi, we need an information rich environment that includes a relatively reliable gdb experience (that includes ctrl-p and ctrl-n command history that persists across cgdb executions), run:

ssh pi4
cd zc706

Time to run your code with:


or, for a more succinct experience, (identical to above)


After every build on your dev machine, simply run:


Sometimes you might need to type load after dr.