UVVM (Universal VHDL Verification Methodology) has over the years established itself as a practical and scalable verification methodology for VHDL-based FPGA designs. It combines well-known verification concepts with a lightweight structure that fits naturally into typical FPGA development flows.
However, in recent years, increasing design complexity and higher demands on verification quality have exposed some recurring challenges in traditional testbenches. These include inconsistent use of assertions, limited visibility of unintended behavior, uncertainty around when verification is actually complete, and the complexity of testbenches themselves.
Over the past two years, UVVM has therefore been extended with several new capabilities aimed at improving robustness, predictability, and structure in larger verification environments. These additions focus on assertions, the detection of unexpected activity, completion detection, and simplified testbench setup through new context files.
Ensuring assertions don’t become afterthoughts
Assertions are a well-established verification mechanism in VHDL and are commonly used to express assumptions, constraints, and expected behavior directly in code. A traditional assertion checks that a condition holds at a given point in time and reports a message if it does not. While powerful, such assertions are typically isolated: they report directly to the simulator and are not naturally connected to the rest of the verification environment. In larger testbenches this often leads to inconsistent behavior. Some checks stop simulation, others do not, some produce large amounts of log output and others are easy to miss. As a consequence, handling assertion results consistently across simulations and regression runs becomes difficult, and errors creep in. UVVM Assertions address this by integrating assertions directly into the UVVM logging and alert handling infrastructure. Instead of producing standalone simulator messages, UVVM Assertions report through the same alert system as the rest of UVVM. Assertion violations are treated like any other verification alert and contribute to the same alert counters and summaries. This gives the testbench full control over how assertion violations are handled, and users can decide whether an assertion should stop simulation, how many times it should be reported, and at what severity level. Logging behavior can be configured to report every occurrence or only the first, making it easy to confirm that an assertion is active without flooding the log. UVVM Assertions cover the most common assertion use cases seen in real FPGA designs. These include value-based checks, such as range checks and encoding checks, sequence and pattern checks for signal relationships over time, and window-based assertions that verify behavior within defined timing boundaries. Window-based assertions make it possible to express requirements such as response deadlines, stability during transactions, and timeouts in a clear and readable way. Assertions can be used both in testbench code and in synthesizable RTL. When used in design code, they can be enclosed in standard translate_off / translate_on pragmas, ensuring that they are active during simulation but excluded from synthesis. The main benefit of UVVM Assertions is not that they replace traditional assertions, but that they make assertions a natural and fully integrated part of the verification environment. This leads to cleaner logs, clearer summaries, and results that are easier to interpret and trust.
Finding the ghosts in the machine
Most testbenches focus on verifying what happens when a stimulus is applied to the Device Under Test (DUT). What is often left unchecked is what happens when no stimulus is applied. In many FPGA designs, interfaces are expected to remain idle for long periods of time, and unexpected activity during these periods can indicate design errors. Traditional Bus Functional Models (BFMs) and VHDL Verification Components (VVCs) are very effective at verifying transactions initiated by the testbench, but they do not detect cases where the DUT generates interface activity on its own. As a result, unintended reads, writes, or signal transitions may go unnoticed, as shown in figure 2:
Establishing the finish line
Stopping stimuli in a structured verification environment is usually straightforward, but determining when the verification is actually finished is often less clear. In testbenches with multiple VVCs and scoreboards, a simulation may appear to be complete even though there are still pending commands or unchecked expected values.
Cleaning house
As UVVM has grown, the number of commonly used libraries and packages has increased, resulting in longer include sections, inconsistent imports between testbenches, and a higher risk of missing or outdated dependencies. To simplify modern testbench setups and reduce errors yet further, UVVM now has a new set of context files. These collect those libraries and packages into a small number of contexts that can be included with fewer lines of code. This makes testbenches easier to read and maintain, and lowers the entry barrier for new users.








