<?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/"
	>

<channel>
	<title>Verification is No Simulation</title>
	<atom:link href="http://www10.edacafe.com/blogs/daverich/feed/" rel="self" type="application/rss+xml" />
	<link>http://www10.edacafe.com/blogs/daverich</link>
	<description>Just another EDA Blogs weblog</description>
	<pubDate>Fri, 26 Mar 2010 20:59:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Art of Deprecation</title>
		<link>http://www10.edacafe.com/blogs/daverich/2010/03/23/the-art-of-deprecation/</link>
		<comments>http://www10.edacafe.com/blogs/daverich/2010/03/23/the-art-of-deprecation/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 18:52:11 +0000</pubDate>
		<dc:creator>Dave Rich</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[SystemVerilog]]></category>

		<guid isPermaLink="false">http://www10.edacafe.com/blogs/daverich/?p=22</guid>
		<description><![CDATA[
At a recent SystemVerilog requirements gathering meeting,I was quite amused to see “deprecating features” come out as one of the top 10 user requested priorities for the next revision of the IEEE 1800 standard. Even more amazing was that this request came out without listing which features were to be considered for deprecation.
I’m sure most [...]]]></description>
			<content:encoded><![CDATA[
<p>At a recent SystemVerilog requirements gathering meeting,I was quite amused to see “deprecating features” come out as one of the <a href="http://www.eda.org/sv-ieee1800/Meetings/2010/February/Presentations/26-February-2010-Req-Gather-Mtg-Notes.pdf">top 10 user requested priorities</a> for the next revision of the IEEE 1800 standard. Even more amazing was that this request came out without listing which features were to be considered for deprecation.</p>
<div class="wp-caption alignnone" style="width: 316px"><img class="  " src="http://s3.amazonaws.com/twitpic/photos/full/69650000.jpg?AWSAccessKeyId=0ZRYP5X5F6FSMBCCSE82&amp;Expires=1269306035&amp;Signature=%2BtPIBUz6JZcqlFLGiCGoIokjZ5Y%3D" alt="P1800 Requirements gathering meeting" width="306" height="229" /><p class="wp-caption-text">P1800 Requirements gathering meeting 2/27/2010</p></div>
<p>I’m sure most people don’t understand the meaning of the word <em>deprecate</em>. I thought I understood until I looked it up in a dictionary. According to Merriam-Webster:</p>
<p>Deprecate:</p>
<p><strong>1 a</strong> <em>archaic</em> <strong>:</strong> to pray against (as an evil) <strong>b</strong> <strong>:</strong> to seek to avert &lt;deprecate the wrath…of the Roman people — Tobias Smollett&gt;<br />
<strong>2</strong> <strong>:</strong> to express disapproval of<br />
<strong>3 a</strong> <strong>:</strong> <a href="http://www.merriam-webster.com/dictionary/play+down">play down</a> <strong>:</strong> make little of &lt;speaks five <a href="http://www.merriam-webster.com/dictionary/deprecation" target="_blank">languages</a>…but deprecate<em>s</em>this facility — <em>Time</em>&gt; <strong>b</strong> <strong>:</strong> <a href="http://www.merriam-webster.com/dictionary/belittle">belittle</a>, <a href="http://www.merriam-webster.com/dictionary/disparage">disparage</a>&lt;the most reluctantly admired and least easily <em>deprecated</em><span class="vi"> of…novelists — <em>New Yorker</em>&gt;</span></p>
<p>In computer science standards and documentation, <a href="http://en.wikipedia.org/wiki/Deprecation">deprecation</a> has come to mean to supersede or discourage use of a feature. It does not mean a feature has to be removed to be compliant with the standard. You can’t remove a feature from an existing standard; you can only remove a feature from being documented in a future standard. No vendor is going to immediately remove a feature from a tool that it has already implemented and in widespread use without ample warning and without providing a practical alternative to the user. Typically, a deprecated feature is never removed from support in a tool unless in the rare case it’s needed to allow for a future enhancement.</p>
<p>The current standard lists in Annex C.4 the defparam and the procedural continuous assignment statements as candidates for deprecation. Listing candidates for deprecation seems to be almost the same as actually deprecating them without removing the LRM. No tool will remove support for these statements regardless of whether they are candidates or actually removed from the LRM.</p>
<p>Q: So why go though the trouble of deprecating a feature in a standard?<br />
A: Well, to discourage use of that feature.</p>
<p>Q: And why is that a good thing to do?<br />
A: It makes learning the language and maintaining existing code much easier.</p>
<p>Take an example from the current Verilog and SystemVerilog LRMs. The <strong>logic</strong> data type was added to supersede the <strong><span>reg</span></strong> data types; they both have the same semantics. Anyone with a history of Verilog will understand the change in keywords, but someone new to SystemVerilog will be left wondering why there are two keywords for the same thing. And then there is the issue of trying to maintain the LRM so that all references to <strong><span>reg</span></strong> also include <strong><span>logic</span></strong> and the other way around. If someone misses that in one place, people will begin to think the two keywords have different behaviors.</p>
<p class="MsoNormal">
<p class="MsoNormal">It seems it’s always easier to add new features than to remove them. There are many places to create lists of your favorite enhancements. At the same time, people complain about the size of the Language Reference Manual – it’s over 1200 pages. Doug Smith of Doulos writes “<a href="http://www.dvclub.org/blog/2010/03/highlights-of-dvcon-2010/">Will this language ever stop exploding?</a>”</p>
<p class="MsoNormal">
<p class="MsoNormal">So here is my list for deprecation, as well as a place for other to add their list by commenting here.</p>
<p class="MsoNormal">
<ol style="margin-top: 0in" type="1">
<li class="MsoNormal"><a href="../blog/2009/05/07/programblocks/">Program      blocks</a></li>
<li class="MsoNormal">Reg data type – see above</li>
<li class="MsoNormal"><a href="http://www.ovmworld.org/forums/showthread.php?p=5502#post5502">Wildcard      associative array index types</a></li>
<li class="MsoNormal"><a href="http://www.verificationguild.com/modules.php?name=Forums&amp;file=viewtopic&amp;t=1930">Un-typed      mailboxes</a></li>
<li class="MsoNormal">Dynamic array copy<span> </span>A = new[]B redundant with A = B</li>
<li class="MsoNormal">always @(*) – superseded by      always_comb</li>
</ol>
<p>From <a href="http://go.mentor.com/the-art-of-deprecation">http://go.mentor.com/the-art-of-deprecation</a></p>
<h2></h2>

]]></content:encoded>
			<wfw:commentRss>http://www10.edacafe.com/blogs/daverich/2010/03/23/the-art-of-deprecation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SystemVerilog: The finer details of $root versus $unit</title>
		<link>http://www10.edacafe.com/blogs/daverich/2009/09/25/systemverilog-the-finer-details-of-root-versus-unit/</link>
		<comments>http://www10.edacafe.com/blogs/daverich/2009/09/25/systemverilog-the-finer-details-of-root-versus-unit/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 19:47:51 +0000</pubDate>
		<dc:creator>Dave Rich</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[SystemVerilog]]></category>

		<guid isPermaLink="false">http://www10.edacafe.com/blogs/daverich/?p=18</guid>
		<description><![CDATA[
Another installment of “Longwinded Answers to Frequent SystemVerilog Questions: $unit versus $root”
Believe me – I tried to make this shorter. It’s difficult for me to explain things without a historical perspective.
Verilog was invented to be an interpreted language. Verilog-XL was (and still is) an interpretive engine with single compilation unit use model. In an interpreted [...]]]></description>
			<content:encoded><![CDATA[
<p>Another installment of “Longwinded Answers to Frequent SystemVerilog Questions: $unit versus $root”</p>
<p>Believe me – I tried to make this shorter. It’s difficult for me to explain things without a historical perspective.</p>
<p>Verilog was invented to be an <a href="http://en.wikipedia.org/wiki/Interpreted_language">interpreted language</a>. Verilog-XL was (and still is) an interpretive engine with single compilation unit use model. In an interpreted engine, all of the source code is parsed and loaded into memory. This means you have to specify all the source files of a design, including the source files of any required libraries, within a single command line before simulating.</p>
<p>VCS (Verilog Compiled Simulator) continued this single compilation use model even though it compiled the code into a machine object saved on disk. Later, it introduced an incremental compile feature that only compiled certain files that needed it, but you still had to specify all the source files on the command line. This is not the same as separate compilation available in most software programming languages where source code can be converted into machine code independently.</p>
<p>Tools such as NCsim and Modelsim introduced the concept of separate compilation, loosely based on the work library concept from VHDL. This is relatively easy to do in Verilog because module definitions are self contained. However, parameter overrides and hierarchical references limit the amount of machine code you can generate. The elaboration step does a lot of this work. It turns out that module instantiation syntax is easy to recognize, so the compiler does not need to see the definition of module that is being instantiating beforehand.</p>
<p>Superlog, the predecessor to SystemVerilog, was also invented as an interpreted language. It introduced the concept of $root as a global scope that allowed any kind of declaration (data types classes, variables) along with module definitions nested in that global scope. Any uninstantiated module becomes implicitly instantiated in $root. That’s fine for a single compilation unit, but you can no longer separately compile modules because they now may have dependencies on declarations outside their scope. For example</p>
<p><code>class C;<br />
endclass<br />
module top;<br />
C c_h;<br />
endmodule</code></p>
<p>There’s no problem if this is compiled as a single file, but if module top were to be compiled separately from the class C definition, it wouldn’t know what the identifier C was supposed to represent, and wouldn’t be able to parse the file.</p>
<p>So the IEEE committee borrowed the concept of packages from VHDL and standardized the concept of a compilation unit. A package allows you to compile definitions in a separate step and import those definitions into another compilation step. Packages create separate namespaces for those definitions as wall as imposing compilation order dependencies.</p>
<p>A compilation unit formalizes a scope that represents what is visible in a compilation step – called $unit in SystemVerilog. If you have a design that is compiled as a single compilation unit, there is really no conceptual difference between $unit and $root. However, once you have a design with multiple compilation units, then $unit represents the top level of each compilation unit, and there is nothing in $root except for the implicitly instantiated module instances. The only time you need to use $root or $unit is when a local name in the current scope hides a name in a higher level scope. For example</p>
<h4>Compilation unit 1</h4>
<pre><code>function void print;
  $display("comp1");
endfunction
module mod1;</code></pre>
<pre>  mod2 m2();

 function void print;
   $display("mod1");
 endfunction</pre>
<pre>  initial $unit::print(); // prints “comp1”
          //print() would print “mod1”)
endmodule</pre>
<h4>Compilation unit 2</h4>
<pre><code>function void print;
 $display("comp2");
endfunction
module mod2;</code></pre>
<pre>  mod3 mod1(); // same name as top-level module
  function void print;
    $display("mod2");
  endfunction</pre>
<pre>  initial $root.mod1.print(); // print “mod1”
          // mod1.print() would print “mod3”
endmodule</pre>
<pre>module mod3;
 function void print;
   $display("mod3");
 endfunction
endmodule</pre>
<p>This example prints “comp1” and “mod1” in either order. Note that there is no way for compilation unit 1 to directly refer to anything in compilation unit 2, or the other way around.</p>
<p>I hope this clears up some of the confusion between $root and $unit in SystemVerilog.</p>
<p>Dave Rich</p>
<p><a href="http://blogs.mentor.com/nosimulation/blog/2009/09/25/unit-vs-root/">http://blogs.mentor.com/nosimulation/blog/2009/09/25/unit-vs-root/</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www10.edacafe.com/blogs/daverich/2009/09/25/systemverilog-the-finer-details-of-root-versus-unit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SystemVerilog Coding Guidelines</title>
		<link>http://www10.edacafe.com/blogs/daverich/2009/09/11/sv-coding-guidelines/</link>
		<comments>http://www10.edacafe.com/blogs/daverich/2009/09/11/sv-coding-guidelines/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 06:12:30 +0000</pubDate>
		<dc:creator>Dave Rich</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[SystemVerilog]]></category>

		<category><![CDATA[Verification]]></category>

		<guid isPermaLink="false">http://www10.edacafe.com/blogs/daverich/?p=13</guid>
		<description><![CDATA[
I have lots of blog entries about 95% ready to publish. This entry is from an e-mail I wrote a few months ago when somebody asked about SystemVerilog coding guidelines. I thought it would make a good article. It’s been sitting as a draft because I always have trouble finding the right title or opening [...]]]></description>
			<content:encoded><![CDATA[
<p>I have lots of blog entries about 95% ready to publish. This entry is from an e-mail I wrote a few months ago when somebody asked about SystemVerilog coding guidelines. I thought it would make a good article. It’s been sitting as a draft because I always have trouble finding the right title or opening words to catch people&#8217;s attention. I couldn’t come up with anything better, so here it is: <em>SystemVerilog Coding Guidelines</em></p>
<p>My official position about this is that you pick a style and stick to it.</p>
<p>Which style you pick is far less important than developing the required culture that will follow it. People can spend hours arguing over the merits of camelCaps versus under_score, but once the decision is made, people on the project need to document it, adhere to it, and police it. Otherwise you’re just wasting everyone’s time.</p>
<p>Why are coding guidelines so important? So someone else can read your code, or maybe you can read your own code six months after you wrote it. Good comments and documentation are an import part, but you still need to be able to <strong>read the code</strong>.</p>
<p>This concept of reading someone else’s code without understanding the underlying conventions reminds me of the classic short article &#8220;<a href="http://www.ecphorizer.com/EPS/site_page.php?issue=7&amp;page=29">Meihem In Ce Klasrum</a>” by Dolton Edwards. The article was written as a satirical response to George Bernhard Shaw&#8217;s final wishes to simplify the English language. See how easy the last paragraph is to read once you understand the new writing conventions. Reading your code should be just like that (although not as cryptic).</p>
<p>My advice would be to pick a style from industry and adapt it to fit SystemVerilog. For example, from Google: <a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml</a> or from the Free Software Foundation: <a href="http://www.gnu.org/prep/standards/">http://www.gnu.org/prep/standards/</a></p>
<p>All of these rules for naming conventions, indentation, and file organization still apply to SystemVerilog. Additional rules would be for unsupported constructs, which should be in the release notes for the tool(s) you are using. Finally, there are a few constructs to avoid, like <a href="http://blogs.mentor.com/nosimulation/blog/2009/05/07/programblocks/">program blocks</a> and <a href="http://www.verificationguild.com/modules.php?name=Forums&amp;file=viewtopic&amp;p=9547#9547">wildcard indexes for associative arrays</a>, most of which might be worth hours of debate, each.</p>
<p>Dave Rich</p>
<p><a href="http://blogs.mentor.com/nosimulation/blog/2009/09/11/sv-coding-guidelines/">http://blogs.mentor.com/nosimulation/blog/2009/09/11/sv-coding-guidelines/</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www10.edacafe.com/blogs/daverich/2009/09/11/sv-coding-guidelines/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Language versus the Methodology</title>
		<link>http://www10.edacafe.com/blogs/daverich/2009/07/07/the-language-versus-the-methodology/</link>
		<comments>http://www10.edacafe.com/blogs/daverich/2009/07/07/the-language-versus-the-methodology/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 19:37:15 +0000</pubDate>
		<dc:creator>Dave Rich</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[SystemVerilog]]></category>

		<category><![CDATA[Verification]]></category>

		<guid isPermaLink="false">http://www10.edacafe.com/blogs/daverich/?p=9</guid>
		<description><![CDATA[
I&#8217;ve been around simulation and synthesis languages for a while; back when you needed an NDA to see the Verilog LRM, and again with SUPERLOG, the predecessor to SystemVerilog.  It&#8217;s easy for those like me to get caught up in the features of the language and forget that any programming language is just a tool. [...]]]></description>
			<content:encoded><![CDATA[
<p class="MsoNormal">I&#8217;ve been around simulation and synthesis languages for a while; back when you needed an NDA to see the <a title="History of Verilog" href="http://www.asic-world.com/verilog/history.html" target="_blank">Verilog LRM</a>, and again with <a title="Demo eases Superlog into the public eye" href="http://www.eetimes.com/showArticle.jhtml?articleID=17407055" target="_blank">SUPERLOG</a>, the predecessor to SystemVerilog.  It&#8217;s easy for those like me to get caught up in the features of the language and forget that any programming language is just a tool. With any technology, people pick the tools they think will get the job finished most effectively. Tools evolve to meet the challenges and requirements of their users. Verilog and VHDL have clearly evolved to become the prevailing languages for hardware design.</p>
<p class="MsoNormal">But before the language wars came the methodology wars. At the time when Verilog and VHDL were being introduced in the late 1980s, most hardware design was by schematic gale-level entry. We would come to our clients with our simulators and synthesis tools and try to change their design methodology by writing RTL. They would bring their best engineers to compete with our tools – and the engineer would always win by producing a design with better area and timing! However, once the productivity of synthesizing large designs with practical quality of results prevailed over the manual effort, the methodology shift was an easier sell.</p>
<p class="MsoNormal">Fast forward a decade – although designs have increased exponentially as predicted by <a title="Moore's Law" href="http://www.intel.com/technology/mooreslaw/index.htm">Moore’s Law</a>, RTL design has not changed in any significant way during that time. Why? Because it takes the same number of lines of RTL code to write an 8-bit adder as it does a 64-bit adder. <img src='http://www10.edacafe.com/blogs/daverich/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> OK, so that’s an over-simplification, but number of lines of RTL code written by a single design engineer has remained manageable. However, for every registered bit added to the design, the state space doubles, and the transition space for testing all permutations of the state space quadruples. Again that’s a simplification, but the correct order of magnitude.</p>
<p class="MsoNormal">During that period, <a title=" 	THE HITCHHIKER'S GUIDE TO VERIFICATION" href="http://www.demosondemand.com/dod/feat_cont/seminars/mentor_hgv.aspx" target="_blank">a number of technologies</a> have addressed the increasing complexities of verification, such as constrained random generation, coverage driven verification, and object-oriented programming. These technologies require a change in verification methodology from writing a linear set of test patterns.</p>
<p class="MsoNormal">Success in captivating verification engineers to these new methodologies is taking the same path of those earlier design engineers. A single verification engineer may find a single test to exercise a specific piece of functionally much quicker than it takes a constrained random test to reach that same function. But eventually, a constrained random test will exercise more functionality faster than an engineer can write individual tests. Functional Coverage fits into Constrained Random generation to help measure the quality of your tests by telling you if your constraints are working to exercise the functionality you are required to hit.  It takes the randomness out of Constrained Random generation.</p>
<p class="MsoNormal">Since the verification environment is more software design than hardware, Object-Oriented Programming is a technology that helps you write re-usable code, which in turn keeps your verification code manageable.</p>
<p class="MsoNormal">SystemVerilog has become the prevailing language that incorporates all these technologies. But does that mean the need for writing directed tests goes away. No.<span> </span>Designers still layout transistors or gates by hand where it’s critical to their project. Verification engineers should use the technology that is best suited to verify their design.</p>
<p class="MsoNormal">Firmware tests will continue to be written in C/C++ and <a title="DPI" href="http://verificationguild.com/modules.php?name=Forums&amp;file=viewtopic&amp;t=2241" target="_blank">SystemVerilog’s DPI</a> can help link C based tests to the RTL. SystemC has become the prevailing modeling language for DSP and algorithmic based design. Most simulation tools can seamlessly link those models to RTL to either drive the test or compare results.</p>
<p class="MsoNormal">So next time you&#8217;re thinking about which language to choose to verify your design, step back and think about the methodology first.</p>
<p class="MsoNormal">
<p class="MsoNormal">Dave Rich</p>
<p class="MsoNormal">http://blogs.mentor.com/nosimulation/</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">

]]></content:encoded>
			<wfw:commentRss>http://www10.edacafe.com/blogs/daverich/2009/07/07/the-language-versus-the-methodology/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Are SystemVerilog Program Blocks Needed?</title>
		<link>http://www10.edacafe.com/blogs/daverich/2009/06/04/hello-world/</link>
		<comments>http://www10.edacafe.com/blogs/daverich/2009/06/04/hello-world/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 23:46:28 +0000</pubDate>
		<dc:creator>Dave Rich</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[SystemVerilog]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
That’s a frequent SystemVerilog question I’m asked. Program blocks came directly from donation of the Vera language to SystemVerilog by Synopsys , and try to mimic the scheduling semantics that a PLI application has interacting with a Verilog simulator.  So coming from a Vera background, program blocks make perfect sense and do help people transitioning [...]]]></description>
			<content:encoded><![CDATA[
<p>That’s a frequent SystemVerilog question I’m asked. Program blocks came directly from <a title=" Synopsys Donates Key Verification Technologies to Accellera's SystemVerilog 3.1 Standard " href="http://www.design-reuse.com/news/?id=3383&amp;print=yes">donation of the Vera language to SystemVerilog by Synopsys</a> , and try to mimic the scheduling semantics that a PLI application has interacting with a Verilog simulator.  So coming from a Vera background, program blocks make perfect sense and do help people transitioning from Vera to SV. But looking at SV from scratch, they are just extra language baggage.</p>
<p><span>Who would have ever thought we’d be having language wars within the same language!<br />
</span></p>
<p>As far as I can tell, a program block by itself only addresses two race conditions between the testbench and DUT, both of which are covered by using a clocking block by itself.</p>
<ol type="1">
<li>Erroneous use of blocking assignments for sequential logic. You have a race within your DUT regardless of the race between your testbench and DUT.</li>
<li>Erroneous use of non-blocking assignments in combinational gated clock logic. You may have a race within your DUT regardless of the race between your testbench and DUT.</li>
</ol>
<p>As a user, if you don’t understand why these create races within your DUT, you’re going to have the same races within your testbench, and there’s nothing a program block does that prevent races within your testbench. There lays the false sense of security of having a race-free testbench.</p>
<p>Using a clocking block by itself takes care of the same testbench to DUT races that a program block addresses, plus it takes care of the races caused by non-zero delay skews introduced by gate-level propagation. It does this by the use of the input skews for sampling and output skews for driving.</p>
<p>Now, in addition to the false sense of security, and the redundancy with clocking blocks, here are some additional reasons why I don’t recommend using program blocks</p>
<ol type="1">
<li>If you have legacy Verilog testbench code, sometimes you want to share legacy BFM tasks by having your “class” based testbench call those BFM tasks. You’re going to run into nasty timing problems if that task was designed to be scheduled in the active region, and now is scheduled in the re-active. Sampling will be off by a clock cycle. You’ll have even nastier problems if some tasks are called from a program block, and other are still called from a module.</li>
<li>One person’s Design IP is another person’s Verification IP. At the system level (ESL), there is less of a distinction between models written to represent higher level abstractions of the design, versus part of a testbench. You can’t have differences in scheduling just because one time it’s called from a program, and another time it’s called from a module. Same problem with C code called from a program block or module.</li>
<li>Unless you’re an experienced Vera user, there is the unexpected surprise that your simulation exits immediately after the thread in your program block ends. Again this is an issue with mixing legacy testbenches, or mixed-language testbenches.</li>
<li>Most advanced users can barely understand the scheduling semantics of SystemVerilog even without using program blocks. Why introduce unnecessary complexity. Many other enviroments, like SystemC and VHDL have been in production for years without needing the kind of scheduling semantics the program block introduces. Quick quiz: How can you get an assertion pass and fail in the same time slot?</li>
</ol>
<p>The SystemVerilog language has had many hands involved with its development, including yours and mine. I’m not dismissing anyone efforts, but sometimes you have to take a step back and realize how bloated the language has become. Just because some feature exists in the LRM doesn’t justify that it needs to be used. Let me tell you about virtual interfaces…</p>
<p>Dave Rich</p>
<p><a href="http://blogs.mentor.com/nosimulation/">http://blogs.mentor.com/nosimulation/</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www10.edacafe.com/blogs/daverich/2009/06/04/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
