<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Verification Martial Arts &#187; VMM 1.2</title>
	<atom:link href="http://www.vmmcentral.org/vmartialarts/category/vmm/vmm-1-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vmmcentral.org/vmartialarts</link>
	<description>A Blog on Verification Methodology</description>
	<lastBuildDate>Fri, 03 Feb 2012 03:34:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The right name at the right space: using &#8216;namespace&#8217; in VMM to set virtual interfaces</title>
		<link>http://www.vmmcentral.org/vmartialarts/2011/09/the-right-name-at-the-right-space-using-namespace-in-vmm-to-set-virtual-interfaces/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2011/09/the-right-name-at-the-right-space-using-namespace-in-vmm-to-set-virtual-interfaces/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 09:13:36 +0000</pubDate>
		<dc:creator>Amit Sharma</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Structural Components]]></category>
		<category><![CDATA[VMM 1.2]]></category>
		<category><![CDATA[VMM infrastructure]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=2754</guid>
		<description><![CDATA[Abhisek Verma, CAE, Synopsys A ‘namespace’ is an abstract container or environment created to hold a logical grouping of unique identifiers or names. Thus the same identifier can be independently defined in multiple namespaces and the the meaning associated with an identifier defined in one namespace may or may not have the same meaning as [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Abhisek Verma, CAE, Synopsys</strong></p>
<p><strong> </strong></p>
<p>A ‘namespace’ is an abstract container or environment created to hold a logical grouping of unique identifiers or names. Thus the same identifier can be independently defined in multiple namespaces and the the meaning associated with an identifier defined in one namespace may or may not have the same meaning as the same identifier defined in another namespace. ‘Namespace’ in VMM is used to group or tag different VMM objects, resources and transactions with a meaningful namespace for the different components across the testbench environment. This allows the user to identify them and access them efficiently. For example, a benefit of this approach is that it relieves the user from making cross module references to access the various resources. This can be seen in the context of accessing the interfaces associated with a driver or a monitor in the environment and goes a long way in making the code more scalable.</p>
<p>Accessing and assigning interface handles to a particular transactor can be done in various ways in VMM, as discussed in the following blogs: <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvMjAxMC8wMS90cmFuc2FjdG9ycy1hbmQtdmlydHVhbC1pbnRlcmZhY2Uv">Transactors and Virtual Interface</a> and <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvMjAxMS8wOS9leHRlbmRpbmctaGllcmFyY2hpY2FsLW9wdGlvbnMtaW4tdm1tLXRvLXdvcmstd2l0aC1hbGwtZGF0YS10eXBlcy8=">Extending Hierarchical Options in VMM to work with all data types</a>. In addition to these, one can leverage ‘namespaces’ in VMM to achieve this fairly elegantly. The idea here is to put the Virtual Interface instances in the appropriate namespace in the object hierarchy to be retrieved by the verification environment wherever required through simple APIs as shown in the following steps:</p>
<p><strong>STEP 1</strong>:: Define a parameterized class extending form <em>vmm_object</em> to act as a wrapper for the interface handle.</p>
<p><strong>STEP 2</strong>:: Instantiate the interface wrapper in the top-level MODULE and put in the &#8220;VIF&#8221; name space</p>
<p><strong>STEP 3</strong>:: In environment, access interface wrapper from the VIF name space by querying for the same in the ‘VIF” namespace and use the retrieved handle to set the interface in the transactor</p>
<p>The example below demonstrates the implementation of the above</p>
<p>The Interface and DUT templates..</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U2LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb6.png" border="0" alt="image" width="276" height="341" /></a></p>
<p><strong>Step1</strong>: Parameterized wrapper class for the interface-</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U3LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb7.png" border="0" alt="image" width="279" height="162" /></a></p>
<p>The Testbench Top:</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U4LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb8.png" border="0" alt="image" width="386" height="304" /></a></p>
<p>The Program Block:</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U5LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb9.png" border="0" alt="image" width="362" height="1235" /></a></p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=2754" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2011/09/the-right-name-at-the-right-space-using-namespace-in-vmm-to-set-virtual-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extending Hierarchical Options in VMM to work with all data types</title>
		<link>http://www.vmmcentral.org/vmartialarts/2011/09/extending-hierarchical-options-in-vmm-to-work-with-all-data-types/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2011/09/extending-hierarchical-options-in-vmm-to-work-with-all-data-types/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 11:38:01 +0000</pubDate>
		<dc:creator>Amit Sharma</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Organization]]></category>
		<category><![CDATA[VMM 1.2]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=2741</guid>
		<description><![CDATA[Abhisek Verma, CAE, Synopsys Tyler Bennet, Senior Application Consultant, Synopsys Traditionally, to pass a custom data type like a struct or a virtual interface using vmm_opts, it is recommended to wrap it in a class and then use the set/get_obj/get_object_obj on the same. This approach has been explained in another blog here.  But wouldn’t you [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Abhisek Verma, CAE, Synopsys</strong></p>
<p><strong>Tyler Bennet, Senior Application Consultant, Synopsys</strong></p>
<p>Traditionally, to pass a custom data type like a struct or a virtual interface using vmm_opts, it is recommended to wrap it in a class and then use the set/get_obj/get_object_obj on the same. This approach has been explained in another blog <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvMjAxMC8wMS90cmFuc2FjdG9ycy1hbmQtdmlydHVhbC1pbnRlcmZhY2Uv">here</a>.  But wouldn’t you prefer to have the same usage for these data types as the simple use model you have for integers, strings and objects?  This blog describes how to create a simple helper package around vmm_opts that uses parameterization to pass user-defined types. It will work with any user-defined type that can be assigned with a simple “=”, including virtual interfaces.</p>
<p>Such a package can be created as follows:-</p>
<p><strong>STEP1:: Create the parameterized wrapper class inside the package</strong></p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2UucG5n"><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb.png" border="0" alt="image" width="455" height="311" /></a></p>
<p>The above <em>vmm_opts_p</em> class is used to encapsulate any custom data type which it takes as a parameter “t”.</p>
<p><strong>STEP2:: Define the ‘get’ methods inside the package.</strong></p>
<p>Analogous to <em>vmm_opts::get_obj()/get_object_obj(),</em> we define <em><strong>get_type</strong></em> and <em><strong>get_object_type</strong></em>. These static functions allow the user to get an option of a non-standard type. The only restriction is that the datatype must work with the assignment operator. Also note that since this uses <em>vmm_opts::get_obj</em>, these options cannot be set via the command-line or options file.</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2UxLnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb1.png" border="0" alt="image" width="442" height="399" /></a></p>
<p><strong>STEP3:: Define the ‘set’ methods inside the package.</strong></p>
<p>Similarly, analogous to <em>vmm_opts::set_object()</em>, the custom package needs to declare set_type. This static function allows the user to set an option of a non-standard type. .</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2UyLnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb2.png" border="0" alt="image" width="434" height="264" /></a></p>
<p><strong>USE-MODEL</strong></p>
<p>The above package can be imported and used to set/get virtual interfaces as follows :-</p>
<p><em>vmm_opts_p#(virtual dut_if)::set_type(&#8220;@BAR&#8221;, top.intf, null);</em> //to set the virtual interface of type dut_if</p>
<p><em>tb_intf = vmm_opts_p#(virtual dut_if)::get_object_type(is_set, this, &#8220;BAR&#8221;, null, &#8220;SET testbench interface&#8221;, 0); </em>//to get the virtual interface of type dut_if, set by the above operation.</p>
<p>The following template example shows the usage of the package in complete detail in the context of passing virtual interfaces</p>
<p>1. Define the interface, Your DUT</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2UzLnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb3.png" border="0" alt="image" width="362" height="356" /></a></p>
<p>2. Instantiate the DUT, Interface and make the connections</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U0LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb4.png" border="0" alt="image" width="363" height="203" /></a></p>
<p>3.  Leverage the Hierarchical options and the package in your Testbench</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDkvaW1hZ2U1LnBuZw=="><img style="border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/09/image_thumb5.png" border="0" alt="image" width="455" height="1030" /></a></p>
<p>So, there you go.. Now , whether you are using your own user defined types, structs, queues , you can go ahead and use this package and thus have your TB components communicate and pass data structures  elegantly and efficiently..</p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=2741" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2011/09/extending-hierarchical-options-in-vmm-to-work-with-all-data-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building &amp; Configuring Coverage Model &#8211; VMM Style &#8211; Part-III</title>
		<link>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-iii/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-iii/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 08:48:46 +0000</pubDate>
		<dc:creator>paragg</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Coverage, Metrics]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[Structural Components]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VMM]]></category>
		<category><![CDATA[VMM 1.2]]></category>
		<category><![CDATA[VMM infrastructure]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=2552</guid>
		<description><![CDATA[Parag Goel, Senior Corporate Application Engineer, Synopsys In the final blog of this coverage modeling with VMM series, we focus on error coverage. Negative scenario testing is an integral part of verification. But again, we have this question &#8211; Whether I have covered all negative scenarios? So it is important to ensure that the generic [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Parag_Goel.jpg" alt="" width="130" height="141" align="left" /></p>
<p><strong>Parag Goel, Senior Corporate Application Engineer, Synopsys</strong></p>
<p>In the final blog of this coverage modeling with VMM series, we focus on <em>error coverage</em>. Negative scenario testing is an integral part of verification. But again, we have this question &#8211; <strong>Whether I have covered all negative scenarios?</strong></p>
<p>So it is important to ensure that the generic coverage model tracks all the error scenarios.</p>
<p>Let’s see, how a specific mechanism provided in VMM in the form of <em>vmm_report_catcher</em> helps to track <em>error coverage</em> efficiently and effectively. The VMM Log Catcher is able to identify/catch a specific string of any type any of the messages issue through the VMM reporting mechanism.</p>
<p>Typically, the Verification Environment issues messages to STDOUT when the DUT responds to an error scenario. These messages can be ‘caught’ by the Log Catcher to update the appropriate coverage groups. Let see how this is done in detail.</p>
<p>The Verification Environment would respond to each negative scenario by issuing a message with a unique text, specific to specific error messages.</p>
<p>In the context of the AXI in framework, we can introduce a wide-range of <em>error scenarios</em> and test if the DUT responds correctly or not. A few possible <em>error scenarios</em> in AXI are listed below<strong><em> </em></strong>for your reference.</p>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvY2xpcF9pbWFnZTAwMS5naWY="><img style="margin: 5px;padding-left: 0px;padding-right: 0px;padding-top: 0px;border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/clip_image001_thumb.gif" border="0" alt="clip_image001" width="521" height="206" /></a></p>
<p>However, all the scenarios may not be applicable always and hence configurability is required to enable only the required set of <em>coverpoints </em>tied to the relevant negative scenarios. Thus, we should have similar configurability for <em>error coverage </em>as I talked about in the earlier blogs.</p>
<p>Let’s see how we can catch the relevant responses and sample the appropriate <em>covergroups</em>.</p>
<p>As mentioned earlier, in the example below, we make use of the unique message issued as a result of a negative scenario.</p>
<p>This is how we use the VMM Log catcher.</p>
<p>1. The error coverage class is extended from <em>vmm_log_catcher</em> – VMM base class.</p>
<p>2. The <em>vmm_log::caught()</em> API is utilized as means to qualify the covergroup sampling.</p>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvY2xpcF9pbWFnZTAwMTExMi5naWY="><img style="margin: 5px;padding-left: 0px;padding-right: 0px;padding-top: 0px;border: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/clip_image00111_thumb2.gif" border="0" alt="clip_image001[11]" width="603" height="364" /></a></p>
<p>In the code above, whenever a message with the text “AXI_WRITE_RESPONSE_SLVERR “ is issued from anywhere in the verification environment, the ‘caught’ method is invoked which in turn samples the appropriate covergroup. Additionally, you an specify more parameters in the caught API, to restrict what ‘scenarios’ should be caught.</p>
<blockquote>
<pre><a name="1000832618"></a></pre>
</blockquote>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=L1VzZXJzL3BhcmFnZy9EZXNrdG9wLw==">vmm_log_catcher</a>::caught(</p>
<p>string name = &#8220;&#8221;,</p>
<p>string inst = &#8220;&#8221;,</p>
<p>bit recurse = 0,</p>
<p>int typs = ALL_TYPS,</p>
<p>int severity = ALL_SEVS,</p>
<p>string text = &#8220;&#8221;);</p>
<p><a name="1000832625"></a></p>
<p>The above API, installs the specified message handler to catch any message of the specified type and severity, issued by the specified message service interface instances specified by name and instance arguments, which contains the specified text. By default, this method catches all messages issued by this message service interface instance.</p>
<p>Hope these set of articles would be relevant and useful to you.. I have made an attempt to leverage some of the built-in capabilities of the SV languages and the VMM base classes to target some of the challenges in creating configurable coverage models.. These techniques can be improvised further to make them more efficient and scalable. I would be waiting to hear from you all any inputs that you, have in this area.</p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=2552" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building &amp; Configuring Coverage Model &#8211; VMM Style &#8211; Part-II</title>
		<link>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-ii/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-ii/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 08:38:03 +0000</pubDate>
		<dc:creator>paragg</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Coverage, Metrics]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[Structural Components]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VMM]]></category>
		<category><![CDATA[VMM 1.2]]></category>
		<category><![CDATA[VMM infrastructure]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=2545</guid>
		<description><![CDATA[Parag Goel, Senior Corporate Application Engineer, Synopsys In the previous post, we looked at how you can enable/disable different types of coverage encapsulated in the Coverage Model wrapper class. In this post, let’s look at how we can easily create an infrastructure to pass different inputs to the wrapper class so as to able to [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Cambria;font-size: small"><img class="alignleft" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Parag_Goel.jpg" alt="" width="130" height="150" /><strong>Parag Goel, Senior Corporate Application Engineer, Synopsys</strong></span></p>
<p><span style="font-family: Cambria;font-size: small">In the previous post, we looked at how you can enable/disable different types of coverage encapsulated in the Coverage Model wrapper class. In this post, let’s look at how we can easily create an infrastructure to pass different inputs to the wrapper class so as to able to configure the coverage collection based on user. The infrastructure ensure that these elements values percolate down to the to the sub-coverage model groups.</span></p>
<p><span style="font-family: Cambria;font-size: small">The following are some of the key inputs that needs to be passed to the difference coverage component classes</span></p>
<blockquote><p><span style="font-family: Cambria;font-size: small">1. SV Virtual Interfaces so that different signal activity can be accessed </span></p>
<p><span style="font-family: Cambria;font-size: small">2. The Transactions observed and collected by the physical level monitors</span></p>
<p><span style="font-family: Cambria;font-size: small">3. The ‘Configuration’ information</span></p></blockquote>
<p><span style="font-family: Cambria"><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTcucG5n"><img class="alignnone" style="padding-left: 0px;padding-right: 0px;padding-top: 0px;margin: 5px;border: 0px initial initial" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Picture7_thumb.png" border="0" alt="Picture7" width="615" height="249" /></a></span></p>
<p><span style="font-family: Cambria">Let’s look at how the we can easily pass the signal level information to the Coverage Model</span></p>
<p><span style="font-family: 'Arial Black'">Step I: Encapsulation of the interface in the class wrapper.</span></p>
<p><span style="font-family: 'Courier New';font-size: x-small">class intf_wrapper extends vmm_object;</span></p>
<p><span style="font-family: 'Courier New';font-size: x-small">virtual axi_if v_if ;</span></p>
<p><span style="font-family: 'Courier New';font-size: x-small">function new (string name, virtual axi_if mst_if);<br />
super.new(null, name);<br />
this.v_if = mst_if;<br />
endfunction</span></p>
<p><span style="font-family: 'Courier New';font-size: x-small">endclass: master_port</span></p>
<p><span style="font-family: 'Arial Black'">Step II: In the top class/environment- Set this object using vmm_opts API.</span></p>
<p><span style="font-family: 'Courier New'">class axi_env extends vmm_env;<br />
`vmm_typename(axi_env)<br />
intf_wrapper mc_intf;</span></p>
<p><span style="font-family: 'Courier New'">function void build_ph();<br />
mc_intf = new(“Master_Port”, tb_top.master_if_p0);<br />
// Set the master port interface<br />
<strong>vmm_opts::set_object(“VIP_MSTR:vip_mstr_port“, mc_intf, env);</strong><br />
endfunction:build_ph<br />
endclass: axi_env</span></p>
<p><span style="font-family: 'Arial Black'">Step III: Connecting in the coverage class.</span></p>
<blockquote><p><strong><em>A. </em></strong><em>Get the object containing interface in the coverage model class using vmm_opts.<strong> </strong></em></p>
<p><span style="font-family: 'Courier New'"> assert($cast(this.mst_port_obj, vmm_opts::get_object_obj(is_set, this, “vip_mstr_port“)));</span></p></blockquote>
<p><strong><em>B. </em></strong><em>Connecting local virtual interface to one contained in the object<strong>.</strong></em><em> </em></p>
<p><span style="font-family: 'Courier New'"> this.cov_vif = mstr_port_obj.v_if;</span></p>
<p><span style="font-family: Cambria">Now, we need to pass the collected transaction object from the monitor needs to the coverage collector. This can be conveniently done in <em>VMM </em>using TLM communication. This is achieved through the vmm<em>_tlm_analysis_port</em>, which establishes the communication between a subscriber &amp; an observer.</span></p>
<blockquote><p><span style="font-family: 'Courier New'">class axi_transfer extends vmm_data;</span></p>
<p><span style="font-family: 'Courier New'">. . .</span></p></blockquote>
<p><span style="font-family: 'Courier New'">class axi_bus_monitor  extends  vmm_xactor;</span></p>
<p><span style="font-family: 'Courier New'"><strong>vmm_tlm_analysis_port</strong>#(axi_bus_monitor, axi_transfer)  m_ap;<br />
task collect_trans();</span></p>
<p><span style="font-family: 'Courier New'">//Writing to the analysis port.</span></p>
<p><span style="font-family: 'Courier New'">m_ap.write(trans);<br />
endtask<br />
endclass</span></p>
<p><span style="font-family: 'Courier New'">class axi_coverage_model extends vmm_object;<br />
<strong>vmm_tlm_analysis_export</strong> #( axi_coverage_model, axi_transfer) m_export;</span></p>
<p><span style="font-family: 'Courier New'">function new (string inst, vmm_object parent = null);<br />
m_export = new(this, “m_export”);</span></p>
<p><span style="font-family: 'Courier New'">endfunction</span></p>
<p><span style="font-family: 'Courier New'">function void <strong>write</strong>(int id, axi_transfer trans);</span></p>
<p><span style="font-family: 'Courier New'">//Sample the appropriate covergroup, once the transaction is received</span></p>
<p><span style="font-family: 'Courier New'">in the write function.</span></p>
<p><span style="font-family: 'Courier New'">endfunction</span></p>
<p><span style="font-family: 'Courier New'">endclass</span></p>
<p><span style="font-family: Cambria">To set up the TLM Connections in the agent/environment, we need to do the following:</span></p>
<p><span style="font-family: 'Courier New'">class axi_subenv extends vmm_group;</span></p>
<p><span style="font-family: 'Courier New'">//Instantiate the model classes and creates them.</span></p>
<p><span style="font-family: 'Courier New'">axi_bus_monitor mon;</span></p>
<p><span style="font-family: 'Courier New'">axi_coverage_model cov;</span></p>
<p><span style="font-family: 'Courier New'">. . . </span></p>
<p><span style="font-family: 'Courier New'">virtual function void build_ph;<br />
mon = new( “mon”, this);<br />
cov = new( “cov”, this);<br />
endfunction<br />
virtual function void connect_ph;</span></p>
<p><span style="font-family: 'Courier New'">//Bind the TLM ports via VMM – tlm_bind</span></p>
<p><strong><span style="font-family: 'Courier New'">monitor.m_ap.tlm_bind( cov.m_export );</span></strong></p>
<p><span style="font-family: 'Courier New'">endfunction</span></p>
<p><span style="font-family: Cambria">To make the Coverage Model truly configurable, we need to look at some of the other key requirements as well at different level of granularity. This can be summarized as the ability to do the following.</span></p>
<p><span style="font-family: Cambria">1. <strong>Enable/Disable</strong> coverage collection for each <strong><em>covergroup</em></strong> defined . Every <em>covergroup</em> should be created only if a user wishes to do so. So there should be a configuration parameter which restricts the creation of the <em>covergroup</em> altogether. And this should also be used to control the sampling of a <em>covergroup</em>.</span></p>
<p><span style="font-family: Cambria">2. The user must be able to <strong>configure the limits</strong> on the <strong>individual values </strong>being covered in the coverage model within a <strong>legal </strong>set of <strong>values.</strong> Say for example, transaction field <em>BurstLength</em> &#8211; user should be able to guide the model what are the limits on this field that one wishes to get coverage on within a legal set of values ranging from ‘1’ to ‘16’ as per AXI spec. So providing lower and upper limits for transaction parameters like <em>burst size, burst length, address</em> etc. makes it re-usable. This limits should be modeled as variables which can be overwritten dynamically</span></p>
<p><span style="font-family: Cambria">3. The user should be able to control the <strong>number of <em>bins</em></strong> to be created. For example in fields like address. <em>auto_bin_max</em> option can be exploited to achieve this in case the user doesn’t have explicitly defined bins.. </span></p>
<p><span style="font-family: Cambria">4. The user must be able to control the <strong>number of hits</strong> for which a <strong><em>bin</em></strong> can be considered as covered. <em>option.atleast </em>can be used for this purpose and the input to this can be a user defined parameter.</span></p>
<p><span style="font-family: Cambria">5. The user should also have the control to specify his <strong>coverage goal</strong>, i.e. when the coverage collector should show the <em>covergroup</em> “<strong>covered</strong>” even though the <strong>coverage is not 100%</strong>. This can be achieved by using <em>option.goal</em>, where <em>goal</em> is again a user defined parameter. </span></p>
<p><span style="font-family: Cambria">All the parameters required to meet the above requirements can be encapsulated in the class (i.e. coverage configuration class) and this can be set and retrieved in a similar fashion described for setting &amp; getting the interface wrapper class using <em>vmm_opts</em> API’s.</span></p>
<pre><a name="1000823869"></a></pre>
<pre>class coverage_cfg extends vmm_object;</pre>
<pre><a name="1000823870"></a>  int disable_wr_burst_len;</pre>
<pre>   . . .</pre>
<pre><a name="1000823871"></a>  function new( vmm_object parent=null, string name);</pre>
<pre><a name="1000823872"></a>     super.new(parent, name);</pre>
<pre><a name="1000823873"></a>  endfunction</pre>
<pre><a name="1000823874"></a></pre>
<pre><a name="1000823875"></a></pre>
<pre><a name="1000823876"></a></pre>
<pre><a name="1000823877"></a>  coverage_cfg cfg;</pre>
<pre><a name="1000823878"></a>  function new(vmm_object parent=null, string name);</pre>
<pre><a name="1000823879"></a>     bit is_set;</pre>
<pre><a name="1000823880"></a>     super.new(parent, name);</pre>
<pre><a name="1000823884"></a>     $cast(cfg, vmm_opts::get_object_obj(is_set, this,</pre>
<pre>                                           "COV_CFG_OBJ”));</pre>
<pre><a name="1000823886"></a>  endfunction</pre>
<pre><a name="1000823887"></a></pre>
<blockquote><p>Wei Hua presents another cool mechanism of collecting this parameters using <em>vmm_notification</em> mechanism in this earlier blog  :</p>
<p><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvMjAwOS8wNi9hLWdlbmVyaWMtZnVuY3Rpb25hbC1jb3ZlcmFnZS1zb2x1dGlvbi1iYXNlZC1vbi12bW1fbm90aWZ5Lw==">A Generic Functional Coverage Solution Based On vmm_notify</a></p></blockquote>
<p>Hope you found this useful. I will be talking about how to track Error Coverage in my next blog, so stay tuned!</p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=2545" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building &amp; Configuring Coverage Model &#8211; VMM Style &#8211; Part-I</title>
		<link>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-i/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-i/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 07:21:59 +0000</pubDate>
		<dc:creator>paragg</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Coverage, Metrics]]></category>
		<category><![CDATA[Organization]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[SystemVerilog]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VMM]]></category>
		<category><![CDATA[VMM 1.2]]></category>
		<category><![CDATA[VMM infrastructure]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=2493</guid>
		<description><![CDATA[Parag Goel, Senior Corporate Application Engineer, Synopsys “To minimize wasted effort, coverage is used as a guide for directing verification resources by identifying tested and untested portions of the design.” - IEEE Standard for System Verilog (IEEE Std. 1800-2009) Configurability &#38; reusability are the buzz^^^ words in the verification of chips and this are enabled [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: x-small"><img style="margin: 5px;float: left" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Parag_Goel.jpg" alt="" width="130" height="141" align="left" /></span></p>
<p><span style="font-family: 'Century Schoolbook';font-size: x-small"><strong>Parag Goel, Senior Corporate Application Engineer, Synopsys</strong></span></p>
<p><span style="font-size: x-small"><span style="font-family: 'Century Schoolbook'"><em>“</em><em>To minimize wasted effort, coverage is used as a guide for directing verification resources by identifying tested and untested portions of the design.”</em></span></span></p>
<p><span style="font-family: 'Bookman Old Style'"><span style="font-size: x-small">- <em>IEEE Standard for System Verilog (IEEE Std. 1800-2009)</em></span></span></p>
<p><span style="font-size: x-small"><span style="font-family: Cambria">Configurability &amp; reusability are the</span> <span style="font-family: 'Lucida Handwriting'">buzz^^^</span> <span style="font-family: Cambria">words in the verification of chips and this are enabled to a big extent by the present day verification methodologies. Through a set of blogs, I plan to show how we can create configurable coverage models in VMM based environments. Given that, AMBA – AXI is one of the most commonly used protocols in industry for communication amongst the SOC peripherals, I chose protocol AXI based framework for my case study.</span></span></p>
<p><span style="font-family: Cambria;font-size: x-small">The idea here is to create a configurable coverage model leveraging some of the base classes provided in the methodology so that we can make it completely reusable as we move from the block to system level or as we move across projects. Once, we enable that, we can move the coverage model inside the Sub-environment modeled by <em>vmm_group </em>or <em>vmm_subenv</em> which are the units of reuse. </span></p>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTExMC5wbmc="><span style="font-size: x-small"> </span></a><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTExMS5wbmc="><img style="margin: 5px 0px;padding-left: 0px;padding-right: 0px;padding-top: 0px;border-width: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Picture1_thumb1.png" border="0" alt="Picture1" width="546" height="253" /></a></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small">Primary Requirements of Configuration Control:</span></span></strong></p>
<p><strong><span style="text-decoration: underline"><span style="font-family: Cambria;font-size: x-small"> </span></span></strong></p>
<p><span style="font-family: Cambria;font-size: x-small">Two important requirements that are needed to be met to ensure that the coverage model is made a part of reusable components are:</span></p>
<p><span style="font-family: Cambria;font-size: x-small">1. Ability to <strong>enable/disable</strong> the coverage model whenever required.</span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"><strong>2. </strong>Ability to<strong> Turn ON/OFF</strong> different subgroups at the desired granularity. For example, an user may not always want the Error Coverage to be enabled, unless under specific circumstances.<strong> </strong></span></span></p>
<p><strong><span style="font-family: Cambria;font-size: x-small"> </span></strong></p>
<p><span style="font-family: Cambria;font-size: x-small">To meet the above requirements, we make use of the VMM Global and Hierarchical Configurations </span></p>
<p><span style="font-family: Cambria;font-size: x-small">Through the <em>vmm_opts </em>base classes, VMM provides a mechanism to control the configuration parameters of a verification environment. This can be done in a hierarchical as well as in a global manner. These options are summarized below:</span></p>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTYxMi5wbmc="><span style="font-family: Cambria;font-size: x-small"> </span></a><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTYxMy5wbmc="><img style="margin: 5px 0px;padding-left: 0px;padding-right: 0px;float: right;padding-top: 0px;border-width: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Picture6_thumb.png" border="0" alt="Picture6" width="487" height="121" align="right" /></a></p>
<p><span style="font-family: Cambria;font-size: x-small">In the environment, the coverage_enable is by default set to 0, i.e. disabled. </span></p>
<p><span style="font-size: x-small"><strong><span style="font-family: Cambria">coverage_enable = vmm_opts::</span></strong><strong><span style="font-family: Cambria">get_int(“coverage_enable”, 0);</span></strong></span></p>
<p><span style="font-family: Cambria;font-size: x-small">Now, the user can enable the coverage via either of the two mechanisms.</span></p>
<p><span style="font-family: Cambria;font-size: x-small">1. From user code using vmm_opts.</span></p>
<p><span style="font-family: Cambria;font-size: x-small">The basic rule is that you need to ‘set’ it *before* the ’get’ is invoked and during the time where the construction of the components take place.  As a general recommendation, for the construction of structural configuration, the build phase is the most appropriate place.<br />
function axi_test::build_ph();<br />
// Enable Coverage.<br />
<strong>vmm_opts::set_int(“@%*:axi_subenv:enable_coverage”, 1);</strong><br />
endfunction</span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small">2. From command line or external option file. The option is specified using the command-line <strong><em>+vmm_name</em></strong> or <strong><em>+vmm_opts+name</em></strong>.<br />
<strong>./simv </strong></span></span><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=bWFpbHRvOi4vc2ltdkBheGlfZW52"><strong><span style="font-family: Cambria"><span style="color: #000000;font-size: x-small">+vmm_opts+enable_coverage=1@axi_env.axi_subenv</span></span></strong></a></p>
<p><span style="font-family: Cambria;font-size: x-small">The command line supersedes the option set within code as shown in 1.</span></p>
<p><span style="font-family: Cambria;font-size: x-small">User can also specify options for specific instances or hierarchically using regular expressions.</span></p>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvUGljdHVyZTMucG5n"><span style="font-family: Cambria;font-size: x-small"><img style="margin: 5px 0px;padding-left: 0px;padding-right: 0px;float: left;padding-top: 0px;border-width: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/Picture3_thumb.png" border="0" alt="Picture3" width="164" height="244" align="left" /></span></a></p>
<p><span style="text-decoration: underline"><strong><span style="font-family: Cambria;font-size: x-small"> </span></strong></span></p>
<p><span style="text-decoration: underline"><strong><span style="font-family: Cambria;font-size: x-small"> </span></strong></span></p>
<p><span style="text-decoration: underline"><strong><span style="font-family: Cambria;font-size: x-small"> </span></strong></span></p>
<p><span style="text-decoration: underline"><strong><span style="font-family: Cambria;font-size: x-small"> </span></strong></span></p>
<p><span style="text-decoration: underline"><strong><span style="font-family: Cambria;font-size: x-small">Now let’s look at the typical classification of a coverage model.</span></strong></span></p>
<p><span style="font-family: Cambria;font-size: x-small">From the perspective of AXI protocol, we can look at the 4 sub-sections.</span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"><strong><em>Transaction coverage:</em></strong> coverage definition on the user-controlled parameters usually defined in the transaction class &amp; controlled through sequences.</span></span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"><strong><em>Error coverage:</em></strong> coverage definition on the pre-defined error injection scenarios</span></span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"><strong><em>Protocol coverage:</em></strong> This is protocol specific ((AXI Handshake coverage)). In case of AXI, it is mainly for coverage on the handshake signals i.e. READY &amp; VALID on all the 5 channels. </span></span></p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"><strong><em>Flow coverage:</em></strong> This is again protocol specific and for AXI it covers various features like, outstanding, inter-leaving, write data before write address etc…</span></span><br />
<BR><br />
<BR><br />
<BR><br />
<BR> </p>
<p><span style="font-family: Cambria"><span style="font-size: x-small"> </span></span></p>
<div></div>
<p><a rel=\"lightbox\" href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMTEvMDYvY2xpcF9pbWFnZTAwMTExMS5naWY="><img style="margin: 5px;padding-left: 0px;padding-right: 0px;padding-top: 0px;border-width: 0px" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2011/06/clip_image00111_thumb1.gif" border="0" alt="clip_image001[11]" width="492" height="310" /></a><span style="font-family: Cambria;font-size: x-small"> </span></p>
<p><span style="font-family: Cambria;font-size: x-small"> </span></p>
<p><span style="font-family: Cambria;font-size: x-small"> </span></p>
<p><span style="font-family: Cambria;font-size: x-small"> </span></p>
<p><span style="font-family: Cambria;font-size: x-small">At this point, let’s look at how these different sub-groups with the complete coverage model can be enabled or disabled. Once the coverage configuration class is built and passed on to the main coverage model, we need a fine grain control to enable/disable individual coverage models. The code shows how the user can control all the coverage models in the build phase of the main coverage class. </span></p>
<p><span style="font-family: Cambria;font-size: x-small">Here too, we can see how we use <strong><em>vmm_opts</em></strong> comes to meet the requirements of controlling individual parameters.</span></p>
<p><span style="font-family: Cambria;font-size: x-small">vmm_opts::set_int(“@%*:disable_transaction_coverage”, 0);<br />
vmm_opts::set_int(“@%*:disable_error_coverage”, 0);<br />
vmm_opts::set_int(“@%*:disable_axi_handshake_coverage”, 0);</span></p>
<p><span style="font-family: Cambria;font-size: x-small">vmm_opts::set_int(“@%*:disable_flow_coverage”, 0);</span></p>
<p><span style="font-family: Cambria;font-size: x-small">In my next blog, I show how the hierarchical VMM Configurations is used to dynamically pass on signal level and other configuration related information to the coverage model. Also, we shall discuss the usage of VMM TLM feature, towards fulfilling the goal of configurable coverage model. Stay tuned!</span></p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=2493" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2011/06/building-configuring-coverage-model-vmm-style-part-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

