MicroZed Chronicles : Zephyr and MicroBlaze V
- Adam Taylor
- 3 days ago
- 5 min read
One of the most popular real time operating systems at the moment is Zephyr. Zephyr has a long history which stretches back to Virtuoso and involves familiar names in the embedded OS sphere such as Wind River Systems. Since 2016 Zephyr has been a hosted as a collaborative project with the Linux foundation.
With the recently release of the MicroBlaze V which is based on RISC V ISA, AMD have been working on a port of Zephyr.
Recently I came across some high level instructions on the AMD Confluence page, on deploying Zephyr on the MicroBlaze V.
The process is straight forward though it does involve several stages and tools. Zephyr uses KConfig and Device Trees to configure the system, which would be expected as it is part of the Linux foundation. To get started we first need to understand some of the key elements
Kernel – This is the heart of Zephyr and provides a single address space, a range of scheduling algorithms, modular approach to resources at compile time (device tree), memory protection unit and support for AMP and SMP.
West – Is a general purpose tool for performing builds, downloading to hardware, and as we will see has some extensions to support the custom configurations of processors within the AMD ecosystem.
To get started first we need to install Zephyr and the necessary dependencies, we can install it on Ubuntu and Windows if we want to develop for the MicroBlaze V.
The instructions for downloading Zephyr and the Zephyr SDK can be found here.
Once we have installed Zephyr, we need to replace the Zephyr repo with an AMD clone. To do which we need to perform the following commands in a command / terminal window.




cd <local path>/zephyrproject/
mv zephyr zephyr.upstream
git clone https://github.com/Xilinx/zephyr-amd.git -b xlnx_rel_v2024.2 zephyr
mv zephyr-amd zephyr
west update
west lopper-install
This will update Zephyr, and install lopper in west which will allow us to update the device trees for the custom hardware we attach to the MicroBlaze processor.
With Zephyr correctly installed the next step is build the current AMD board target, by default on first installation it is configured for the KCU105.
cd zephyr
west build -p -b mbv32 tests/misc/test_build/
The mbv32 indicates the target board its KConfig and Device Tree Source are located under the /boards/amd folder.
It is this board definition we will be updating as we create our target design on the Arty S7-50 running the MicroBlaze V.
When it is compiled correctly you will see the output below, not the memory size which is 2GB and corresponds to the KCU105 DDR4 memory range. We will not be using the ELF created here as the address map and resources are different to our intended target. However, this step allows us to pipe clean the process and make sure we have the tool chain installed correctly before we progress.

The next step is to create our design in Vivado, we will be targeting the Arty s7-50 board

Within the IP integrator design we are going to add in the following
MicroBlaze V – Configured for the real time template.
MIG DDR3 controller – Dragged and dropped from the boards tab in Vivado.
AXI UART Lite – Dragged and dropped from the boards tab in Vivado
AXI Interrupt Controller – Connected to the UART and Timer interrupt outputs using a concat block.
Clock Wizard – With a 100 MHz and 200 MHz outputs, the 100 MHz output is used to clock the MicroBlaze V, and all peripherals, the 200 MHz output clocks the MIG DDR3.
AXI Interconnect – This connects the MicroBlaze V to the UART, Timer, Interrupt and MIG.
I have uploaded the complete project to my GitHub for download. The completed block diagram looks as below.

With the design complete the next step is the build the bit stream and export the XSA.
Here is where it gets a little different as unlike when developing other embedded software applications for the MicroBlaze we are not going to be using Vitis Unified. Although to ensure there are no issues with the hardware design I would recommend creating a simple bare metal hello world application in Vitis and ensuring it runs correctly.
The next step is to parse the XSA and generate the system device tree, this normally happens when we create the platform in Vitis. However, to generate one stand alone we will use XSCT from the command line, we will of course need to make sure Vivado and Vitis are on the system path to do this. Which in Linux we can do by running the command below.
. /tools/Xilinx/Vivado/2024.2/settings64.sh
To run xsct we enter the command xsct in the command / terminal window followed by the command
eval sdtgen set_dt_param -dir zephyr -xsa zephyr_wrapper.xsa ; sdtgen generate_sdt
In the command above you will need to change the name of the XSA to the name you used for the export. The directory is the name of where the output will be stored this will include the device trees, and bit file.


Now we have the system device tree what we need to do is run the lopper program to regenerate the information on board architecture or the mbv32 board we saw earlier.
To do this in the command below from within the Zephyrproject/Zephyr directory.
LOPPER_DTC_FLAGS="-b 0 -@" west lopper-command -p microblaze_riscv_0 -s /media/data_hdd/Adam_Projects/zephyr/zephyr/system-top.dts -w .
This command will take the system dts just created in the output directory by XSCT and convert it into the correct format for Zephyr. The update will occur under the boards/amd folder in the Zephyr project.


Opening the mbv32.dts will show the file has been updated to reflect the Arty S7-50.

The penultimate stage is then to build the application again we can use the same command as before.
west build -p -b mbv32 tests/misc/test_build/

This time we will see the application size is slightly different and the memory region size has been reduced to the 256 MB provided on the Arty S7-50.
With the Arty S7-50 connected to the development machine we are then able to download the application to the board and see the results output in a serial terminal window.
Again we can use west to download the application to the target board with the command
west flash --runner xsdb --elf-file mbv32/zephyr/zephyr.elf --bitstream <path>/system.bit
Making sure we have the locations of the software executable and FPGA bit stream correct.

I am looking forward to learning more about Zephyr and creating some interesting applications using it.
UK FPGA Conference
FPGA Horizons - October 7th 2025 - THE FPGA Conference, find out more here
Workshops and Webinars
If you enjoyed the blog why not take a look at the free webinars, workshops and training courses we have created over the years. Highlights include
Upcoming Webinars Timing, RTL Creation, FPGA Math and Mixed Signal
Professional PYNQ Learn how to use PYNQ in your developments
Introduction to Vivado learn how to use AMD Vivado
Ultra96, MiniZed & ZU1 three day course looking at HW, SW and PetaLinux
Arty Z7-20 Class looking at HW, SW and PetaLinux
Mastering MicroBlaze learn how to create MicroBlaze solutions
HLS Hero Workshop learn how to create High Level Synthesis based solutions
Perfecting Petalinux learn how to create and work with PetaLinux OS
Boards
Get an Adiuvo development board
Adiuvo Spartan 7 / RPi 2040 Embedded System Development Board
Adiuvo Spartan 7 Tile - Low Risk way to add a FPGA to your design.
Embedded System Book
Do you want to know more about designing embedded systems from scratch? Check out our book on creating embedded systems. This book will walk you through all the stages of requirements, architecture, component selection, schematics, layout, and FPGA / software design. We designed and manufactured the board at the heart of the book! The schematics and layout are available in Altium here Learn more about the board (see previous blogs on Bring up, DDR validation, USB, Sensors) and view the schematics here.