March 4, 2022
Editor’s Note: This content is republished from the MicroZed Chronicles, with permission from the author.
Getting the most efficient utilization of our FPGA does not mean that we need to have the logic resources dedicated to all use cases. We could, for example, have several different FPGA designs which are loaded in as required with one FPGA implementing several different functionalities. This could be the case in image processing or signal processing pipelines for example. Often when we examine the contents of these FPGA designs, however, only a small element of the FPGA design is different. Take for example an image processing algorithm or signal processing filter. In these cases, it is much faster to simply reconfigure the element of the FPGA design that needs to be changed.
This is where partial reconfiguration comes in handy because it allows us to reconfigure a small element of the FPGA design at run time, while the rest of the FPGA keeps operating.
Partial reconfiguration allows designers to move to fewer or smaller devices, reduce power, and improve system upgradability. Only the necessary functionality is loaded in at any point in time so there is more efficient use of the silicon.
In our Xilinx FPGA designs, partial reconfiguration is called DFX or Dynamic Function eXchange (DFX). We can do DFX using simple RTL designs and block designs. While Xilinx provides the IP to manage DFX, there are several terms we first need to understand.
To ease implementation of DFX in our FPGA and SoC designs, Xilinx provides several IP blocks.
Most importantly, we can implement DFX in any version of Vivado. No special license is required. We can target any device, though DFX is not supported in some of the smaller Artix and all Spartan-7 devices.
To help get started, I have created a step-by-step lab which looks at a simple application that can change the speed LED flash on the KCU105 board. The same approach can be undertaken for any supported device / boards and will demonstrate the basic flow and technique.
The instructions are available here in a high-level overview of the steps involved.
Create an RTL project targeting the board. Add in the RTL files for the base design including the nominal element for the reconfigurable partition.
I observed the video below when I ran this on my KCU105 board.
Now we know the basic flow of DFX, the available IP, and the terminology. In the next blog, we will look at how we can do DFX using a more commonly used block design.