<?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; MODs</title>
	<atom:link href="http://www.vmmcentral.org/vmartialarts/category/vmm/mods/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>VMM VIP’s on multiple buses</title>
		<link>http://www.vmmcentral.org/vmartialarts/2009/05/vmm-vip%e2%80%99s-on-multiple-buses/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2009/05/vmm-vip%e2%80%99s-on-multiple-buses/#comments</comments>
		<pubDate>Wed, 27 May 2009 14:09:00 +0000</pubDate>
		<dc:creator>Adiel Khan</dc:creator>
				<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[MODs]]></category>
		<category><![CDATA[Register Abstraction Model with RAL]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[Structural Components]]></category>
		<category><![CDATA[VMM]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=119</guid>
		<description><![CDATA[Favouritism for constructs can influence coding styles that can influence reuse methodology ease of use. ]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvd3AtY29udGVudC91cGxvYWRzLzIwMDkvMDUvaW1hZ2UucG5n"><img style="display: inline; border-width: 0px;" src="http://www.vmmcentral.org/vmartialarts/wp-content/uploads/2009/05/image-thumb.png" border="0" alt="image" width="154" height="104" /></a></h1>
<h3>Adiel Khan, Synopsys CAE</h3>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">Increasingly, more design-oriented engineers are writing VMM code. Some are trying to map typically good design architecture practices to verification development. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">A dangerous mapping is parameterization, from modules to classes. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">In my old Verilog testbenches I would develop reusable modules and use #parameters extensively to control the settings of the modules I was instantiating. (It was a sad day when I heard IEEE was deprecating my friend the defparam). </span></p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">module </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vip #(</span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">parameter int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">data_width = </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">,</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; text-align: left;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">2.</span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> parameter int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">addr_width = </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">)</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">3</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> (addr, data);</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">4.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> output </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[addr_width-</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] addr;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">5</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> inout<span style="mso-spacerun: yes;"> </span></span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[data_width-</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] data;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">6</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> &#8230;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">7</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">endmodule</span></strong></p>
</blockquote>
<p class="Code-numbered" style="text-indent: 0in; mso-list: none;">
<p class="Code-numbered" style="text-indent: 0in; mso-list: none;"><span lang="EN-GB">This would allow me to instantiate this VIP for many bus variants.</span><span style="font-size: 10pt; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">8.<span style="mso-spacerun: yes;"> </span> </span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vip</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> #(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">)<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vip_inst1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(&#8230;); </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">9</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span>vip #(</span><span style="font-size: 10pt; color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">128</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">) </span><span style="font-size: 10pt; color: #ff6600; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vip_inst2</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(&#8230;); </span></p>
</blockquote>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">Mapping the approach from modules to classes, I could end up with: </span></p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_c #( </span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">parameter int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">data_size=</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">2</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span><span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> parameter int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">addr_size=</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">)</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">3</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span><span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> extends </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_data;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">4</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> rand bit </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[addr_size-</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] addr;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">5</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span><span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> rand bit </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[data_size-</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] data;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">6</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span> &#8230;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">7</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">endclass</span></strong><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">8</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//specialized</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">with</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">&amp;</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">sizes</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">9</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span>pkt_c #(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">) pkt1=</span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">new</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">();</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">10</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//specialized</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">with</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">&amp;</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">128</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">sizes</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">11</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-tab-count: 1;"> </span>pkt_c #(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">128</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">) pkt2=</span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">new</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(); </span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;">
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;">
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;"><span style="mso-ansi-language: en-us; mso-bidi-font-family: 'Courier New';">Be warned, in the SystemVeril<span style="mso-bidi-font-style: italic;">og testbench </span>c<span style="mso-bidi-font-style: italic;">entri</span>c<span style="mso-bidi-font-style: italic;"> vie</span>w<span style="mso-bidi-font-style: italic;"> o</span>f<span style="mso-bidi-font-style: italic;"> </span>V<span style="mso-bidi-font-style: italic;">IP </span>r<span style="mso-bidi-font-style: italic;">eusability</span></span><span lang="EN-GB">, parameterization of classes leads to a dead-end path. Moving one layer of abstraction up, I really don’t care if it is a 32/64/128 bits wide interfaces. What I want to do is use pkt_c around the verification environment. </span><span lang="EN-GB">The simplest case is creating a reusable driver using pkt_c to drive any bus-width interface. </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;"><span lang="EN-GB">However, if I try to use a generic class instantiation, I will get a specialization with parameters = 16&amp;16. I cannot perform the $cast() to put the right pkt_c type onto the bus. </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;"><span lang="EN-GB"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;">
<blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_driver_c </span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">extends </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_xactor;</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">2</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> virtual protected task </span></strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">main</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">();</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">3</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> forever begin </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">: GET_OBJ_TO_SEND</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">4</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> pkt_c pkt_to_send; </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//default</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">instance</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">5</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> pkt_c #(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">) pkt_created; </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">6</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> randomize</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(pkt_created);</span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">generator</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">code</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">7</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> $cast</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(pkt_to_send, pkt_created); </span><strong><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//FAILS</span></em></strong><strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></strong><strong><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">!!!!!</span></em></strong><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></em></p>
</blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><em> </em></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">If you are using VMM channels, they must similarly be specialized and cannot carry generic parameterized classes: </span></p>
<blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">8</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: #a014f0; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">`vmm_channel</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(pkt_c)</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">9</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_driver_c </span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">extends </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_xactor;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">10</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> pkt_c_channel in_chan;<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//Can</span></em><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">only</span></em><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">carry</span></em><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_c#(16,16)!!! </span></em></p>
</blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><em> </em></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">Or you must upfront select which specialization you want for use with a parameterized channel. </span></p>
<blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">8</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_driver_c </span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">extends </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_xactor;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">9</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> vmm_channel_typed #(</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_c#(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">)) </span><span style="color: black; mso-bidi-font-family: 'Courier New';"> </span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">in_chan</span><span style="color: black; mso-bidi-font-family: 'Courier New';">; </span></p>
</blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="color: black; mso-bidi-font-family: 'Courier New';"><br />
</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;">
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;"><span lang="EN-GB">Hence, for the driver to operate on the correct object type, I need to instantiate the exact specialization throughout my entire environment and make the driver itself parameterized. Now you can clearly see instantiating a specific specialization in the driver (or monitor, scoreboard etc) stops the code from being really reusable for other bus_widths. </span></p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;"><span lang="EN-GB"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;">
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span>pkt_c<span style="mso-spacerun: yes;"> </span>#(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">)<span style="mso-spacerun: yes;"> </span>pkt_to_send;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">2</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span>pkt_driver_c #(</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">64</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">32</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">) driver; </span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; text-indent: 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><br />
</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; text-align: justify; mso-layout-grid-align: none;">
<p><span lang="EN-GB">A better approach is one that was described by Janick in the <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvP3A9MTM=">“Size Does Matter”</a> blog of using `define. Let’s expand on this and see how it works for reusable VIPs. Well, the first thing that comes to my mind is that a `define is a global namespace macro with a single value, whereas I am using my VIP with 2 different bus architectures. Therefore, the `define alone is not enough: you also need a local constant to be able to exclude unwanted bits when you have a VIP instantiated for various bus widths. </span></p>
<blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">1</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">//default</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">define</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">values</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">2</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span><strong>`define</strong> MAX_DATA_SIZE </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">3</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span><strong>`define</strong> MAX_ADDR_SIZE </span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">4</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">class </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkt_c </span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">extends </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_data;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">5</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> static </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">vmm_log log = </span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">new</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(</span><span style="font-size: 10pt; color: #cc00cc; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">&#8220;Pkt&#8221;</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, </span><span style="font-size: 10pt; color: #cc00cc; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">&#8220;class&#8221;</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">);</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">6</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> //instance</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">constant</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">to</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">control</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">actual</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">bus</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">sizes</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">7</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> const int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">addr_size;</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">8</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> logic </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[<strong>`MAX_ADDR_SIZE</strong>:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] addr;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">9</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> logic </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">[<strong>`MAX_DATA_SIZE</strong>:</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">] data;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">10</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> //</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pass</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">a_size</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">as</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">arg</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">to</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">coverage</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">11</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> //</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">ensuring</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">valid</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">coverage</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">ranges.</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">12</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> covergroup </span></strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">cg </span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(</span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">a_size);</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">13</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> coverpoint </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">addr</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">14</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> {</span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">bins </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">ad_bin[] = {[</span><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">0</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">:a_size]};}</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">15</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> endgroup</span></strong><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">16</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> //</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">sizes</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">specialized</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">at</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">construction</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">for</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">pkts</span></em></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">17</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> //</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">on</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">buses</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">less</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">than</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">MAX</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">bus</span></em><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span><em><span style="font-size: 10pt; color: gray; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">widths</span></em><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">18</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> function </span></strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">new</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(</span><strong><span style="font-size: 10pt; color: darkred; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">int </span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">a_s=<strong>`MAX_ADDR_SIZE</strong>);</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">19</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> addr_size = a_s;</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">20</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span> cg = </span><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">new</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(addr_size);</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">21</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: #a014f0; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> `vmm_note</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(log, </span><strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">$psprintf</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(</span><span style="font-size: 10pt; color: #cc00cc; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">&#8220;\nADDR_TYPE: &#8220;</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">,</span><strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">$typename</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(addr), </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">22</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: #cc00cc; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> &#8220;\nDATA_TYPE: &#8220;</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">,</span><strong><span style="font-size: 10pt; color: #ff6600; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">$typename</span></strong><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">(data),</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">23</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"><span style="mso-spacerun: yes;"> </span></span><span style="font-size: 10pt; color: #cc00cc; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> &#8220;\nMAX_BUS_SIZE: &#8220;</span><span style="font-size: 10pt; color: black; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">, addr_size));</span><span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">24</span><span style="font-size: 10pt; color: black; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;">.<span style="mso-spacerun: yes;"> </span></span><strong><span style="font-size: 10pt; color: darkred; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us;"> endfunction<span style="mso-spacerun: yes;"> </span></span></strong></p>
</blockquote>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; line-height: normal; mso-layout-grid-align: none;"><strong> </strong></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="mso-ansi-language: en-us; mso-bidi-font-family: 'Courier New';">The<span style="mso-bidi-font-weight: bold;"> code above </span><span style="mso-bidi-font-style: italic;">al</span>l<span style="mso-bidi-font-style: italic;">ows</span> for</span><span lang="EN-GB"> a default implementation and all the user needs to do is set the `MAX_ADDR_SIZE and `MAX_DATA_SIZE symbols and all the code will be fully reusable across drivers, monitors, subenv, SoC etc. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">For situations where two VIP’s of differing bus architectures are used, the compiler symbols need to be set to the biggest bus architecture in the system; smaller bus-widths are set using addr_size. It is not necessary for addr_size variable to be an instance constant or set during construction. By using instance constants, this ensures the bus-widths are not changed at runtime by users. Having the value of addr_size set during construction gives the users the flexibility to setup the object as they want. For pseudo-static objects such as drivers, monitors, subenvs, masters, slaves, scoreboards etc you should check the construction of verification modules for your particular design architecture during the vmm_env::start phase. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">N.B not shown above, but assumed, is that the addr_size variable would be used to ensure correct masking occurs when performing do_pack(), do_unpack() compare() etc. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">Just to wrap up some loose ends&#8230; </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">I’m not totally discounting the merits of parameterized classes just insuring people look at all the options. For instance you could parameterize everything and then set the SIZE at the vmm_subenv level and map the SIZE parameters to all other objects. At some point you will want to monitor or scoreboard across different bus-widths and then the parameterized class casting will bite you, reducing you to manually mapping the members within the comparison objects. There is a time and place for everything, so probably need another blog showing merits and where to use parameterized classes. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">The vmm_data class is not the only place you might need to know the size of the bus, the same `define &amp; instance constant technique can be used throughout your VIP classes. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">This blog does not discuss the pros and cons of putting coverage groups in your data object class. I merely used the covergroup in the data-object as a vehicle to demonstrate how you can make your classes more reusable. I think a separate blog about where best to put coverage will clarify the usage models. </span></p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-GB">All the code snippets can be run with VCS-2009.06 &amp; VMM1.1. Contact me for more complete code examples and bugs or issues you find. </span></p>
<p class="MsoNormal" style="text-align: justify;">
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=119" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2009/05/vmm-vip%e2%80%99s-on-multiple-buses/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Be careful what you wish for!</title>
		<link>http://www.vmmcentral.org/vmartialarts/2008/06/be-careful-what-you-wish-for/</link>
		<comments>http://www.vmmcentral.org/vmartialarts/2008/06/be-careful-what-you-wish-for/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 16:45:55 +0000</pubDate>
		<dc:creator>Janick Bergeron</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[MODs]]></category>
		<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.vmmcentral.org/vmartialarts/?p=9</guid>
		<description><![CDATA[Now that VMM is available under an Open Source license, how is it going to be supported? First of all, any further bug fixes and enhancements we will be making to VMM (such as the newly announced VMM-for-Low-Power functionality) will be added to the Open Source distribution once the usage model and basic functionality will [...]]]></description>
			<content:encoded><![CDATA[<p>Now that VMM is available under an Open Source license, how is it going to be supported?</p>
<p>First of all, any further bug fixes and enhancements we will be making to VMM (such as the <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3N5bm9wc3lzLm1lZGlhcm9vbS5jb20vaW5kZXgucGhwP3M9NDMmYW1wO2l0ZW09NTgy">newly announced VMM-for-Low-Power</a> functionality) will be added to the Open Source distribution once the usage model and basic functionality will have been proven with one or two lead customers who work with us in specifying and developing the enhancements.</p>
<p>The Apache licensing means that you are free to modify the VMM code in any way you wish. But should you? If you make a modification, that modification exists only in your version of the VMM code.</p>
<p>For bug fixes, that is obviously not a problem (and I&#8217;d <strong>really</strong> like to know about those so I can have them fixed in our distribution (such as the <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy9mb3J1bXMvdmlld3RvcGljLnBocD9mPTImYW1wO3Q9OQ==">recent non-compliance issues</a>)).</p>
<p>But what about functional changes? If you add functionality that you rely on for implementing your verification IP, those will no longer be portable to other VMM environments.</p>
<p>If you require some new capability or have an idea for some cool new functionality, I suggest talking with Synopsys first about it. If we can implement that new functionality for you, it will automatically be included in the next VMM release and everyone else will get it, ensuring portability once more. It will also ensure that the new functionality is implemented while taking into account other developments concurrently happening or planned. And we will be responsible for its on-going support.</p>
<p>But should you decide to go ahead on your own (for whatever reason), I&#8217;m still OK with it.</p>
<p>If you want to share your modifications with the VMM community, you can publish your <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy52bW1jZW50cmFsLm9yZy92bWFydGlhbGFydHMvP3A9Nw==">patch</a> in the VMM MODS forums. Such user-contributed modifications will use the same support model as the one used by <a href="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5waHBiYi5jb20vY29tbXVuaXR5L3ZpZXdmb3J1bS5waHA/Zj03OA==">phpbb</a>. As the MOD author, you are responsible for all support. The VMM MODS forums on VMM Central can be used as a support and distribution meeting point. Simply request that a MOD-specific forum be created in the VMM MODS forum group. You can then announce new versions and users can request support on that forum.</p>
<p>We only ask (but cannot require) that you publish your MOD under the same Apacahe 2.0 license that VMM is published under. MODs that prove to be popular and stable (and backward compatible!) will eventually be merged into the Synopsys VMM Open Source distribution (with proper credit given to the original author(s) of course).</p>
 <img src="http://www.vmmcentral.org/vmartialarts/wp-content/plugins/feed-statistics.php?view=1&post_id=9" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.vmmcentral.org/vmartialarts/2008/06/be-careful-what-you-wish-for/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

