Readers of the blog will know I am a huge advocate of System on Modules (SoM) like the K26, MicroZed, PicoZed, UltraZed and of course the new(ish) K24.
In this blog, I am going to look at getting a simple design up and running on the K24 SoM. Since a carrier card is needed, I am going to use the KD240 carrier card to provide the power, JTAG and interfaces etc. for the SoM. This will act as a custom carrier card of sorts.
My goal over a couple of blogs is to show how to bring up your own SoM on a custom carrier card. There are several things that need to be considered, especially when designing the hardware for the custom carrier card (see my more detailed Hackster Project).
Of course, the first is the application. But before we can verify the application, we need to be able to have several test programs which enable the verification of the hardware interfaces on the carrier board (e.g., GPIO, Ethernet, USB, PL connections etc.).
While our final application may be deployed using embedded Linux etc., these verification applications might choose to use bare metal or PetaLinux downloaded and accessed over JTAG.
This is one of the reasons why I am big fan of enabling the boot mode to be set to JTAG on the carrier card. The KD240 carrier card allows us to fit a jumper and short it out to set the boot mode to JTAG.
Like traditional Zynq MPSoC devices, the devices fitted to the K24 and K26 are capable of booting from QSPI, SD or eMMC. Typically for SoM-based applications, we want to initially boot from QPSI and then load a Linux kernel and mount the file system from either SD or eMMC. The K24 and K26 are designed to enable this. In addition, the software stack for booting from QSPI has been updated so that the SoM can provide A/B selection and image recovery, not just fall back. We will look at this in additional detail in a later blog.
To get started with this project, we are going to create a very simple design which connects to the PL Pmod, BRAM in the PL and the PL LED.
The first thing we need to do is to create a new project in Vivado and target the K24 SoM. Once the project is created, we are able to create a new block diagram and add on the Zynq MPSoC processing system and run the block automation to configure the processing system for the KD24.
We will add the following onto the block diagram:
1. AXI BRAM controller configured for one BRAM
2. AXI IIC
3. AXI GPIO connected to the PL user LED
As we will eventually be using embedded Linux, we need to ensure the hardware design is suitable for it. As such, we need to connect the IP blocks interrupts in the PL to the processing system interrupt input. To do this we can use a concatenate block which concatenates the interrupts into a vector.
With the block diagram created, we can then build the project and define the constraints for the interfaces we have used in our design.
The constraints can be a little tricky because we are going via the SoM connector. We can use the schematics of the board to see what signals are connected to the SoM connector and then use the XDC file to determine what connector pins are connected to the FPGA IO.
In this case because we are connecting to a Pmod I2C, we have the following on the KD240 board:
Pmod Pin | SoM Connector Pin | FPGA Pin |
3 (SCL) | HDA13 (D21) | E12 |
4 (SDA) | HDA14 (D22) | D10 |
set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_sda_io]
set_property PACKAGE_PIN E12 [get_ports iic_rtl_scl_io]
set_property PACKAGE_PIN D10 [get_ports iic_rtl_sda_io]
Having built the Vivado design, we are then able to create a simple Vitis bare metal project which enables us to check that we can download the application over JTAG and execute it on the K24.
With this completed, we are then able to start looking at creating the PetaLinux application and then boot system.
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
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
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.
Sponsored by AMD
Comments