Bare-metal Rust on the Xilinx Zynq ZC706 devkit
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.
Stewart Mackenzie 01e9f2031a remove picocom from tmux.sh allowing easy exit of processes instead 3 days ago
.cargo update rust + smoltcp 2 months ago
experiments libboard_zc706::boot: don't leave core1 stopped 1 week ago
libboard_zc706 libboard_zc706::boot: don't leave core1 stopped 1 week ago
libboard_zynq libboard_zynq::flash: use only 32-bit spi words in program() 3 weeks ago
libcortex_a9 split into lib{register, cortex_a9, board_zynq, board_zc706} crates 1 month ago
libregister split into lib{register, cortex_a9, board_zynq, board_zc706} crates 1 month ago
openocd document bitstream loading in readme and remove from zc706.cfg 3 days ago
.gitignore remove zc706.elf from gitignore 3 days ago
Cargo.lock libboard_zc706: move main.rs into experiments bin crate 1 month ago
Cargo.toml libboard_zc706: move main.rs into experiments bin crate 1 month ago
README.md document bitstream loading in readme and remove from zc706.cfg 3 days ago
armv7-none-eabihf.json define custom target, use with cargo-xbuild 5 months ago
build.rs PoC: boot, uart output in qemu 8 months ago
build.sh improved the development process 3 days ago
channel-rust-nightly.toml update rust + smoltcp 2 months ago
default.nix split into lib{register, cortex_a9, board_zynq, board_zc706} crates 1 month ago
link.x link.x: fix __stack_start 3 months ago
qemu.gdb PoC: boot, uart output in qemu 8 months ago
runner.sh PoC: boot, uart output in qemu 8 months ago
shell.nix default.nix: build zc706 3 months ago
tmux.sh remove picocom from tmux.sh allowing easy exit of processes instead 3 days ago

README.md

Build

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

Debug

Using the Xilinx toolchain

Tested with the ZC706 board.

Run the Xilinx Microprocessor Debugger:

/opt/Xilinx/14.7/ISE_DS/EDK/bin/lin64/xmd

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 "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
./build.sh $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
./tmux.sh

Time to run your code with:

zynq-connect
zynq-restart
c

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

dc
dr
c

After every build on your dev machine, simply run:

dr
c

Sometimes you might need to type load after dr.