Bare-metal Rust on the Xilinx Zynq ZC706 devkit
Go to file
Sebastien Bourdeauducq 1ac10ba0d4 Revert "libasync: don't let TcpStream::read() call back for empty buffers"
Usually easy to handle in user code and avoids duplicating logic.

This reverts commit e3a6a6e1f8.
2020-04-14 09:03:48 +08:00
.cargo update rust + smoltcp 2019-11-11 00:28:46 +01:00
experiments libasync: add async_send/async_recv methods 2020-04-13 01:24:37 +02:00
libasync Revert "libasync: don't let TcpStream::read() call back for empty buffers" 2020-04-14 09:03:48 +08:00
libboard_zynq libboard_zynq: fix flash manual_mode chip_index 2020-04-10 20:41:16 +02:00
libcortex_a9 typo 2020-04-13 10:39:38 +08:00
libregister regs: add more #[inline] annotations 2020-02-03 00:50:13 +01:00
libsupport_zynq libsupport_zynq: fix a cast 2020-04-10 20:41:16 +02:00
openocd add support for cora z7 in tmux script 2020-01-24 07:51:29 +08:00
.gitignore remove zc706.elf from gitignore 2020-01-16 02:13:11 +08:00
Cargo.lock update cargo lockfile 2020-04-10 17:46:32 +08:00
Cargo.toml Cargo.toml: flip LTO back on to fit OCM 2020-04-10 20:41:16 +02:00
README.md default.nix: fix 2020-01-26 01:45:49 +01:00
armv7-none-eabihf.json define custom target, use with cargo-xbuild 2019-08-06 22:03:04 +02:00
build.rs PoC: boot, uart output in qemu 2019-05-05 14:56:23 +02:00
build.sh improved the development process 2020-01-15 05:22:35 +08:00
channel-rust-nightly.toml update rust-nightly 2020-04-10 20:57:10 +02:00
default.nix update rust-nightly 2020-04-10 20:57:10 +02:00
link.x link.x: simplify while used with jtag only 2020-02-02 23:37:18 +01:00
qemu.gdb PoC: boot, uart output in qemu 2019-05-05 14:56:23 +02:00
runner.sh PoC: boot, uart output in qemu 2019-05-05 14:56:23 +02:00
shell.nix default.nix: build zc706 2019-09-26 17:54:37 +02:00
tmux.sh add support for cora z7 in tmux script 2020-01-24 07:51:29 +08:00

README.md

Build

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

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

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 "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
./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.