How would you assure safe and efficient reuse of an FPGA design module for some stand-alone functionality?
Let's consider this for a simple example like a UART. Now what would you do ?
You could of course just make lots of functions, procedures, processes and concurrent statements, - and then include all of this into your FPGA top-le vel whenever you need a UART... But no serious FPGA designer would ever d o this.
Why? Because we all know it is much better to put all of this into a comp onent (a VHDL entity), as this has the following benefits:
- Everything is encapsulated in an entity containing all needed elements
- No risk of forgetting parts or functionality
- No need to understand the implementation
- A simple port interface for integration into the FPGA top level
- A simple generic interface for parameterisation of the module
- Internal modifications may be done locally - invisible at the FPGA top le vel
- New functionality may be added inside the encapsulation
- Reuse is safe and efficient
Now - give me one reason why all of this does not apply to verification exa ctly the same way. Yes - we could still just use lots of processes, sub-programs, etc, but as for design that would be very inefficient and risky.
What we need is of course a VHDL entity - a VHDL Verification Component (VV C) - encapsulating the complete verification functionality for a given desi gn interface, where the VVC should be characterized by:
- An easy to understand component interface (ports and generics)
- A clearly defined internal functionality, where the internal implementati on is of no interest when integrating the VVC
- An easy to understand command interface to control and monitor the behavi our of the VVC
This is exactly how the VVCs of UVVM (Universal VHDL Verification Methodolo gy, free and Open source) are made.
(For a figure of the UART VVC please see
A major additional benefit of the UVVM VVCs is the ease of integration, the very structured internal architecture and the extreme reuse friendliness.
UVVM is free and open source, and may be downloaded from Github: https://gi thub.com/UVVM/UVVM_All
For a simple and fast introduction to UVVM and VHDL Verification Components see: