Harry Ho 3807e2e149 | ||
---|---|---|
.cargo | ||
experiments | ||
libasync | ||
libboard_zynq | ||
libcortex_a9 | ||
libregister | ||
libsupport_zynq | ||
openocd | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
README.md | ||
armv7-none-eabihf.json | ||
build.sh | ||
channel-rust-nightly.toml | ||
default.nix | ||
qemu.gdb | ||
remote_run.sh | ||
runner.sh | ||
shell.nix | ||
tmux.sh |
README.md
Build
nix-shell --command "cargo xbuild --release -p experiments"
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 -p experiments"
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 nixbuild.m-labs.hk server:
cd ~/zynq-rs
./build.sh $your_user_or_ssh_id
Alternatively, you may copy the zc706 build to the target pi (in your pi $HOME directory, for example) using:
cd ~/zynq-rs
scp -C target/armv7-none-eabihf/release/experiments your_user_or_ssh_id@pi_hostname:/home/your_user_or_ssh_id/zynq-rs/zc706.elf
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 zynq-rs
# For ZC706, run:
./tmux.sh 0
# For Cora Z7, run:
./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
.