Bare-metal Rust on Zynq-7000
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Sebastien Bourdeauducq 67dbb5932f flake: update mkbootimage 1 year ago
.cargo cargo: remove unmaintained runner 3 years ago
experiments experiments: add error led test for kasli_soc 1 year ago
libasync libasync: provide get/set ack_delay (new in smoltcp 0.7.0) 3 years ago
libboard_zynq Fix soft_rst bit, add reboot function 1 year ago
libconfig config: add "fat_lfn" feature 2 years ago
libcortex_a9 mutex: add async version of lock 2 years ago
libregister libregister: allow rustdoc for register! macro 3 years ago
libsupport_zynq panic: turn on error_led for kasli_soc 1 year ago
openocd openocd: moved common code from target files 2 years ago
szl szl: change CPU frequency of Kasli-SoC to 1 GHz 1 year ago
.gitignore nix flakes support (#85) 2 years ago
Cargo.lock update dependencies 2 years ago
Cargo.toml Kasli-SoC: Get MAC address from EEPROM (#90) 2 years ago
LICENSE LGPLv3 3 years ago update copyright year 2 years ago
armv7-none-eabihf.json define custom target, use with cargo-xbuild 4 years ago
flake.lock flake: NixOS 22.11, update dependencies 1 year ago
flake.nix flake: update mkbootimage 1 year ago
fsbl.patch nix flakes support (#85) 2 years ago add Kasli-SoC POR control program 3 years ago clean up getopts 3 years ago

Bare-metal Rust on Zynq-7000

Supported features:

  • Clocking setup
  • UART
  • SDRAM setup
  • Ethernet with smoltcp and async-await on TCP sockets
  • SD card
  • PL programming and startup
  • Pure Rust SZL first-stage bootloader, with SD boot and netboot
  • Control of second CPU core and message passing, with async-await support

Supported boards:

  • Kasli-SoC
  • ZC706
  • Red Pitaya
  • Cora Z7-10 (seems to also run on Cora Z7-07S, including dual-core support)


Zynq-rs is packaged using the Nix Flakes system. Install Nix 2.4+ and enable flakes by adding experimental-features = nix-command flakes to nix.conf (e.g. ~/.config/nix/nix.conf).

You can build SZL or experiments crate for the platform of your choice by using nix build command, e.g.

nix build .#coraz7-experiments

Alternatively, you can still use cargo xbuild within nix develop shell.

nix develop
cargo xbuild --release -p experiments

Currently the ELF output is placed at target/armv7-none-eabihf/release/experiments, or result/experiments.elf for Nix Flakes build.


Running on the ZC706

nix develop
cargo xbuild --release -p experiments
cd openocd
openocd -f zc706.cfg

Running on the Cora Z7-10

nix develop
cargo xbuild --release -p experiments --no-default-features --features=target_coraz7
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"


Copyright (C) 2019-2022 M-Labs Limited. Released under the GNU LGPL v3. See the LICENSE file for details.