AXI interfaces, Hardware-software data sharing, Petalinux and Linux kernel level driver development (with in person training)


This Practical Educational Package is a complete course on AXI interfaces and using them in designs. Its main focus is on ZYNQ and ZYQN ultrascale+ devices, the concepts however can be used for any device with AXI interfaces.

The course is available in two forms:


  • With in person training, recorded videos, example designs, and support

  • With recorded videos, example designs and support


During the in person training, the focus can be on the contents of the course directly, or it can be more on any topic that you find more useful for your project.

The course comes with 100+ recorded videos covering the following areas:


  • AXI stream interfaces

  • AXI memory mapped interfaces

  • Designing with Vivado

  • Using visit environment

  • Zynq and Zynq Ultrascale+ PS AXI interfaces, Cache-coherent interface

  • Using Petalinux

  • Driver development under Linux

Details for each part comes in the following.


Session 1: AXI stream interfaces

  • Importance of interfaces and their role in creating designs

  • More about ARM AXI Interfaces

  • Running vivado in Linux and Windows

  • Vivado design example: Data sharing between Microblaze CPU and XDMA PCIe IP

  • Further description of Microblaze and XDMA data sharing example: Address ranges and interrupts

  • Vivado design example: ADC interface and signal processing using FFT and FIR filter IPs plus storage of results in PL side DRAM

  • Creating Vivado tcl scripts to automate design creation and to improve design version management

  • Vivado design example: ADC data capture and transferring data over the network using UDP packets (pure FPGA based solution).

  • Vivado design example: Using Xilinx deep learning unit IP (brief)

  • Other types of interfaces than AXI

  • Creating a simple AXI stream interface

  • RTL coding of simple AXI stream slave and master interfaces

  • Packaging an IP in Vivado

  • Vivado design example: Using Virtual IO (VIO), System ILA and Clocking Wizard in designs, dealing with differential clock inputs

  • Brief overview of Pin Assignment process in Vivado

  • When to use our RTL as a packaged IP in Vivado block design, when to instantiate it as a module

  • Example AXI stream design, evaluation on ZCU106 board

  • Further description of System ILA and using it

  • The role of TREADY, TLAST, TUSER AXI stream signals

  • Using AXI stream FIFOs in designs, using Asynchronous AXI stream FIFOs

  • Example AXI stream master module with TREADY and TUSER present

  • Example AXI stream master module which acts as a Video Frames generator

  • Example Vivado design with AXI Video DMA

  • Debugging our AXI Video Frames generator IP using System ILA

  • Differences between AXI DMA and AXI VDMA IPs

  • Further description of System ILA operation and the role of trigger position


Session 2: AXI memory mapped interfaces

  • Description of AXI memory mapped Lite interface and read transaction on this interface

  • Describing AXI write transactions in an AXI Lite interface

  • Further clarification of AXI Bus

  • Read FSM in an AXI Lite interface

  • AXI Lite vs. AXI Full memory mapped interfaces

  • RTL coding of an AXI Lite master

  • Packaging AXI master Lite IP

  • An example Vivado project using AXI Master Lite IP

  • Assigning addresses to AXI slaves, further description of addresses in a block design

  • Further describing register space of an IP with AXI MM lite interface

  • More about addresses in block design

  • Using Vivado connection automation

  • On-board test of our example Vivado design

  • Vivado example design: using PL side DRAM memory

  • Describing read and write response channels in AXI memory mapped interfaces

  • PS DRAM vs. PL DRAM

  • Using PS side and PL side DRAMs concurrently

  • Adding Microblaze CPU to our Vivado design

  • More about XSA files

  • Vitis environment, creating a project in Vitis

  • Developing software for Microblaze

  • Further description of UART interfaces and Vitis software libraries

  • More about ELF files

  • On-board test of example design: Sharing data between Microblaze and AXI Lite master over PL side DRAM memory

  • Design example: Performing DMA from PL to PS DRAM using AXI DMA IP

  • Description of PS components, address ranges, Real-time processing unit, Application processing unit and PS interfaces

  • Further details on PS AXI interfaces

  • Further description of PS AXI coherent interfaces

  • Creating and using IPs with AXI Lite slave interface

  • Example software (C code) for accessing AXI lite slave (from Microblaze)

  • On-board test of example design


Session 3: Petalinux

  • Initial steps for setting up a Petalinux project

  • Folder structure and compoents of a Petalinux project

  • Discussion on Linux bringup process and steps happening during booting

  • Dealing with Petalinux build failures

  • Using board support packages for Petalinux projects

  • Discussion on advantages and disadvantages of using BSPs in Petalinux projects

  • Petalinux build process outputs

  • Exploring the device tree, device tree structure, device tree blobs

  • Device tree aliases, device tree kernel parameters

  • Creating boot images (in Petalinux)

  • Creating boot images using Vitis

  • First Petalinux on-board bringup

  • More talks abour UART connection from FPGA board to PC

  • Comparing device trees between projects

  • Customizing a device tree

  • Using SSH in Petalinux

  • Further discussion of ssh and scp commands

  • RAMDISK vs. permanent root file systems

  • Customizing root file system in Petalinux: adding HTTP server and I2C tools

  • On-board test of Petalinux based HTTP server

  • Customizing the Linux kernel

  • User level applications vs. kernel level drivers

  • Using devmem for direct access to IO and memory space

  • First Petalinux example user level app, using mmap to access hardware registers of FPGA modules

  • Physical addresses vs. virtual addresses, more description of MMU operation

  • More about devmem

  • More about PL only designs in ZYNQ

  • Programming QSPI flash


Session 4: Linux kernel level driver development

  • Creating a simple Linux kernel level driver (in Petalinux)

  • Further description about our simple Linux kernel level driver

  • Driver: registering a platform device, device match structure and role of compatible string

  • Driver probe and remove subroutines

  • Answering questions on device tree customization and driver's platform device structure

  • On-board test of our first driver, using lsmod, insmod, modprobe and further discussion

  • Implementation of driver's probe subroutine: getting platform resources, requesting memory, performing IO remapping

  • Using FPGA manager, PL configuration after Linux bringup

  • FPGA manager and device tree overlays

  • PL reconfiguration with different bitstreams and different devicetrees

  • Petalinux is for Microblaze too

  • On-board test: PL reconfiguration

  • Registering a character device in a Linux kernel level driver

  • Defining file operations in a Linux kernel level driver

  • Implementation of IO controls in a Linux kernel level driver

  • Looking at AXI DMA in register mode vs. AXI DMA in scatter-gather mode

  • Further discussion on implementation of IO controls in a Linux kernel level driver

  • Implementation of mmap in a Linux kernel level driver

  • Interrupt service routines in a Linux kernel level driver

  • Further discussion on Alveo cards and ASIC emulation

 

Pricing

Complete package (all 4 sessions) is available at 490 euros.

Individual sessions can be purchased too.

 

Licensing

The provided content in the package shall be used for educational use of the purchasing person/entity (company or research lab) only.