While the move from 1.0 to 1.1 and its later flavors did not involve a major paradigm shift, VMM1.2 (beta) introduces several fundamentally new concepts that you should be aware of. Some of the new concepts are the natural result of an evolving methodology, and others are probably features requested by VMM users who might have seen cool features in other languages and methodologies that had been missing in earlier versions of VMM.
The main new features are these:
· SystemC/SystemVerilog TLM 2.0 Support
o VMM Channel to TLM 2.0 interface
o Robust completion model
· Enhanced Block-to-Top Reuse
o Hierarchical phasing
o Class factory
o Hierarchical, structural, RTL configuration
· Enhanced Ease of Use
o Built-in phasing
o Serial-test phasing
o Parameterized channels and generators
o Common object and hierarchical name matching
One of the most interesting (and important) features that VMM1.2 gives you now is the built-in phasing. Let's try to explain this in simple words. A typical simulation should normally have several phases such as construct the objects, make inter-connections, start the DUT simulation, configure registers, drive transactions, finalize simulation, etc. Moreover, verification environments today usually consist of multiple components that should all be aware of that overall timeline unless you want chaos in your simulation (e.g. your CPU tries to write a register during initial reset phase and the packets scoreboard tries to wrap things up, report the number of mismatches and then go to sleep “ all occur at the same time).
Until now it was the sole responsibility of the top level class to orchestrate all this by explicitly activating the relevant functionality at the relevant phase for each of the sub elements. If you have some 20 sub environments in your top environment this translates into a lot of code and annoying oops I forgot to activate my xactor kind of bugs. VMM1.2 now allows you to implicitly activate the relevant functionality simply by extending a pre-defined method for each phase and thus avoid large portions of redundant code. What’s more, you can mix and match sub environments and components, each with its own so-called timeline mode (explicit or implicit).
Another cool feature of VMM1.2 would be the option to replace factory classes. You can read this for a complete explanation, but in simple words, it allows you to easily manipulate pre-defined classes from your test program. Being an Object Oriented language, the level of class manipulation that SystemVerilog allows is somewhat limited. The typical way to manipulate classes in SV is to define a new class that inherits from the original class, create an instance of the inherited class and then find all the places in your environment where the original is used and implant the new one at the right spot, in a procedural manner (rather than declaratively, which is easier). With a little bit of code overhead VMM1.2 now gives you a powerful way to simply replace the original factory class with a class of your own. Less effort, less code, less maintenance “ exactly what we like.
So VMM1.2 seems like a big step forward for SystemVerilog and we’ve only gone through 2 of the main new features. Be sure to check out the posts on VMMCentral and Verification Martial Arts to get more technical details so you don’t stay in the dark in this ever-changing world of verification methodology. But if you can''t wait to get your hands on it go here to sign up for the beta program
Editor's note: VMM1.2 is no longer "beta" (December 2009)