Modern RTL design verification (DV) environments are both very powerful and very complex. They include advanced simulation testbenches plus support for formal verification, virtual prototypes, and emulation technology. Even within just the testbench, there is a great deal of highly sophisticated code to be written. Part of the power and complexity comes from the capabilities of the testbench. At the core is constrained-random stimulus generation, automated tests that exercise many parts of the design while staying within the rules for input sequences. Important testbench components include interfaces, register models, bus agents, reused verification IP (VIP), results checkers, and coverage monitors. Clearly, a lot of effort is needed to create and maintain this infrastructure. A typical infrastructure is shown in the following diagram:
Although other languages are sometimes used for specific tasks or for legacy reasons, SystemVerilog is the dominant choice for writing the testbench. SystemVerilog is itself a powerful and complex language, as is the Universal Verification Methodology (UVM) standard that guides the testbench structure. Between SystemVerilog and UVM, there are literally thousands of syntactic and semantic details. DV engineers cannot be expected to memorize all these and create a full-featured testbench from a blank screen in a simple text editor. They need a SystemVerilog- and UVM-aware tool that can provide guidance and checks at every step to yield a correct-by-construction testbench.