Posted by Amit Sharma on 25th October 2010
Amit Sharma, Synopsys
‘vmmgen’, the template generator for creating robust, extensible VMM compliant environments, has been available for a long time with VMM and it was upgraded significantly with VMM1.2. Though the primary functionality of ‘vmmgen’ is to help minimize VIP and environment development cycle by providing detailed templates for developing VMM Compliant verification environments, a lot of folks also use it to quickly understand how different VMM base classes can be used in different contexts. This is done as the templates uses a rich set of the latest VMM features to ensure the appropriate base classes and their features are picked up optimally.
Given that it has a wide user interaction mechanism which provides available features and options to the user, the user can pick up the modes which are most relevant to his or her requirement. It also provides them the option to provide their own templates thus providing a rich layer of customization. Based on the need, one can generate individual templates of different verification components or they can generate a complete verification environment which comes with a ’Makefile’ and an intuitive directory structure, thus propelling them on their way to catch the first set of bugs in their DUTs. I am sure all of you know where to pick up ‘vmmgen’ form. It available in the <VMM_HOME>/Shared/bin area or in $VCS_HOME/bin
Some of the rich set of features available now includes:
• Template Options:
– Complete environment generation
– Individual templates generation
• Options to create Explicitly phased environments or Implicitly phased environment or to mix Implicitly phased components and Explicitly phased components
• Usage of VMM Shorthand macros
• Creating RAL based environment, and providing Multiplexed domain support if required
• Hooking up VMM Performance Analyzer at the appropriate interfaces
• Hooking up the DS Scoreboard at the relevant interfaces (with options to chose from a range of integration options, e.g. : through callbacks, through TLM2.0 analysis ports, connect directly through to transactors, channels or notifications)
• Ability to hook up different generators (atomic, scenario, Multistream generators) at different interfaces
• Creating a scenario library and Multistream scenario creation
• Multi-driver generator support for different kinds of transactions in the same environment
• Factory support for transactions, scenarios and multi stream scenarios. Sample factory testcase which can explain the usage of transaction override from a testcase.
• ‘RTL config’ support for drivers and receivers.
• Various types of unidirectional and bi-directional TLM connections between generator and driver.
• Analysis ports/exports OR parameterized notify observers to broadcast the information from monitor to scoreboard and coverage collectors.
• Multi test concatenation support and management to run the tests
• Creating portable Interface wrapper object, and setting up interface connections to the testbench components using vmm_opts::set_object/get_object_obj
• Creating a Generic slave component
• Option to use default names or user provided names for different components
As you can see the above list itself is quite comprehensive and let me tell you that that it is not exhaustive as there are many more features in vmmgen.
With respect to the usage as well, there are multiple flavors. In the default mode, the user is taken through multiple detailed choices/options as he is creating/connecting different components in his verification environment. However, some folks might want to use ‘vmmgen’ within their own wrapper script/environment and for them there are options to generate the environments by providing all required options in the command line or through a configuration file… Some of these switches include
-SE [y/n] : Generates a complete environment with sub-environments
-RAL [y/n] : Create RAL based verification environments
-RTL [y/n] : Generates RTL configuration for the environment
-ENV <name>, -TR <name> : Provide the name for the environment class and transaction classes. names for multiple transaction class names can be provide as well:
vmmgen –l sv –TR tr1+tr2
-cfg_file <file_name> : Option to provide a configuration file for the options
There is an option to generate an environment quickly by taking the user through the minimum number of questions (-q).
Additionally, the user can provide his or her own templates through the –L <template directory> option.
As far as individual template generation goes, you have the complete list. Here, I am outlining this down for reference:
I am sure a lot of you have already been using ‘vmmgen’. For those, who haven’t, I encourage you to try out the different options with it. I am sure you will find this immensely useful and it will not only help you create verification components and environments quickly but will also make sure they are optimal and appropriate based on your requirements.