top of page

MicroZed Chronicles: Design Reuse

Writer: Adam TaylorAdam Taylor

Recently, I was asked to present to a group of engineers about design reuse with respect to FPGA design. This is something which, as a small company, is very close to my heart, as reusing components allows us to reduce design risk, be more agile, and of course, cost-effective in delivering the solution.


As I sat down to think about design reuse and the key concepts involved, I realised that there are eight key tenets centred around one objective.


Objective – Develop, over time, an IP library which contains several IP cores which can be redeployed across a number of projects.


Modularity – This is perhaps the most obvious of the tenets, however, if we want to create a library of components which we can reuse across several applications, we need to ensure we create modules which are not only self-contained but also have clearly defined interfaces. The benefits of achieving a modular design and hence an IP library are several. Not only is design time reduced, but also technical risk is reduced. However, there are also additional benefits, such as aiding development time estimation. For example, estimation becomes identifying which of the existing IP blocks are to be used, along with identifying new modules which need developing.

When it comes to developing new modules, design reuse should be the key priority of the design activity. At Adiuvo, we have two types of IP. The first are common elements; these are small design units which do not form full IP on their own. Typical examples include counters, edge detectors, RAMs, and FIFOs, etc. This library also includes bus functional modules and AXI infrastructure. The second type are the major design units which perform a significant function and often use features from the common library.


Standardisation – One of the key principles of reuse is creating IP cores which have been standardised as much as possible. The most important factor for standardisation is with regards to interfacing, outside of the clocks and resets, etc. The main rule for reuse is to use standard interfaces, e.g. AXI or Wishbone. This makes the module not only easier to test using standard design patterns, but also makes the IP core easy to integrate with other IPs within the design. If, for some reason, you think you need to define your own custom standard, have a long think and then realise it is a bad idea. Standardising on interfaces ensures that we can easily integrate bus functional models provided by verification frameworks such as UVM, UVVM, OSVVM, and COCOTB. It also has another added advantage in that new engineers to the team already understand the protocols used, as you are using industry standard interfaces.


Parameterization – We often want a similar function, but with a slightly different configuration. For example, an image processing filter which, in one implementation, needs to support 720P, while another requires 1080P, and the final implementation requires 4K. Parameterization using either generics (VHDL) or parameters (Verilog) enables us to define the IP core once and configure its implementation and therefore resource utilisation, performance, and power depending upon its defined parameters.

One thing to ensure when we use parameters is that the verification approach needs to take into account the different configurations to ensure it functions as expected across the defined configurations or corner cases.


Documentation – When we studied for our engineering degrees, none of the lecturers ever told us that a large proportion of our time would be spent writing documents. However, documentation is one of the key aspects of engineering, and when done correctly, can enable reuse and allow future support and modification if necessary.

When it comes to reuse, at Adiuvo, we have a document template which must be completed by IP developers. This includes the IP Overview, Specification with timing diagrams and register maps, architecture, error handling, interface definition, customisation requirements, and how to work with the core, along with any known limitations or issues.



Verification & Validation – Each IP Core developed should come with a self-checking test bench which verifies the performance of the IP core against its requirements documentation and any error-handling responses as defined in the documentation.

Another benefit of using standard interfaces is that we can leverage verification frameworks such as UVVM, OSVVM, UVM, etc. to stimulate and interact with the unit under test. Typically, when we develop new test benches, we use UVVM for verification.


Maintainability – When we develop an IP Core, we should ensure that we have a focus on future scalability and maintaining backwards compatibility whenever possible. Following many of the other guidelines here will help provide a solution which is maintainable. To ensure other engineers are able to quickly and easily understand the IP Core and modify / extend it if necessary, we need to define a comprehensive coding standard. This coding standard will cover such aspects as naming styles, methodology approaches, and of course specific rules such as control signals, allowed types, etc.


Management – Management is similar to maintainability, however, it defines the policies about how we manage the life cycle of the IP core. This includes how the IP is maintained, ensuring the documentation meets the minimum standards, and defining how we manage any bugs or issues and the prioritisation of effort to address those issues. We also have policies for IP cores which will only be developed internally and those which are used externally.


Automation – Whenever possible, we want to automate the simulation and building of the IP cores into the final project. Here, we can leverage TCL and Python scripts, along with source control like Git and continuous integration using GitHub Actions, etc. We also often leverage FuseSoC to automate the build process.


Of course, over the years, I have created a number of Hackster projects which help on this journey, including:


I would be interested to know what lessons or points you have to share about FPGA design IP reuse.


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



Boards


Get an Adiuvo development board



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.


bottom of page