<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.cadence.com/Community/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Functional Verification</title><link>http://www.cadence.com/Community/blogs/fv/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Get Started on UVM-e with Free Introductory Video Tutorials</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/24/get-started-on-uvm-e-with-free-introductory-video-tutorials.aspx</link><pubDate>Thu, 24 May 2012 17:03:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1311351</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1311351</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/24/get-started-on-uvm-e-with-free-introductory-video-tutorials.aspx#comments</comments><description>&lt;p&gt;One of the many requests that we get from Specman/&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; customers is that they would like some basic &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; tutorials. So, as a first step, Axel Scherer has recently posted 24, very short, byte sized &lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2012/05/21/uvm-e-ieee-1647-video-series-features-the-return-of-the-cowbell.aspx"&gt;UVM-&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; basic tutorials&lt;/a&gt;. Check them out. &lt;/p&gt;&lt;p&gt;These &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;-based videos are targeted for design and verification engineers who are interested in learning about the basic concepts of UVM-&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; and the benefits that the &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; language provides. &lt;/p&gt;&lt;p&gt;As you may know, &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; is an IEEE 1647 standard hardware verification language (HVL) that is tailored to implementing highly flexible and reusable verification testbenches, leading to a significant productivity improvement. &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; is one of the most mature verification languages, used by specialists for advanced verification. It is, therefore, the most mature in its coupling to overall verification methodology, technology, and verification IP (VIP), and it can scale to the most complex block/unit, chip, system, and project levels.&lt;/p&gt;&lt;p&gt;These videos provide the basics of Aspect Orient Programming (AOP) capabilities, constrained randomization, scoreboarding, etc....&lt;/p&gt;&lt;p&gt;So, relax, make yourself comfortable and enjoy these videos. Hopefully, these videos will excite you enough to try out the &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; language on your new or existing verification project and join the elite team of Specmaniacs.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s a list of You Tube &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; videos for your enjoyment!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://youtu.be/gQ5ozp5NuO8"&gt;Introducing UVM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/O2nG1PGsuXk"&gt;Example DUT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/oxQvFl9pdDQ"&gt;UVM Environment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/L0QE2o3tGHw"&gt;Interface UVC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/lLPXZNuSud4"&gt;Collector&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Mh38ppf0ruA"&gt;Monitor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/BBGt1gu6zg4"&gt;Sequence Item&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/tuViUSg3ChE"&gt;Sequence&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/sWcijQZDq1U"&gt;BFM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/0T4PgevaJwE"&gt;Sequence Driver&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/gXE3K_mMCUg"&gt;Agent&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/zfT6X-BE9z4"&gt;Agent types&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/baOwcpkLsYA"&gt;Interface UVC environment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/qvBMJZvtdcA"&gt;Virtual Sequence Driver - Sequence&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/nHx28jBB-YY"&gt;Module UVC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/GPHsGa3e-Q4"&gt;Scoreboard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/5_5tBC_COHw"&gt;DUT Functional Coverage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/f-LTyYuS414"&gt;Testbench&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Asm54Kf6KhM"&gt;Test&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/3ICwWkLIV0U"&gt;Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/npKcG3Q-5RQ"&gt;AOP - Aspect Oriented Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/bGEKfZ4-pTY"&gt;Phases&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/MEdbupmPYow"&gt;Objections&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Lw4pQUV7ej0"&gt;Signal Maps&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;TeamSpecman&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1311351" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Testbench+simulation/default.aspx">Testbench simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Verification+methodology+/default.aspx">Verification methodology </category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/OVM/default.aspx">OVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SoC/default.aspx">SoC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/eRM/default.aspx">eRM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/CDV/default.aspx">CDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemVerilog/default.aspx">SystemVerilog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IES/default.aspx">IES</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e/default.aspx">e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IEEE+1647/default.aspx">IEEE 1647</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/hvl/default.aspx">hvl</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/MDV/default.aspx">MDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VMM/default.aspx">VMM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Vera/default.aspx">Vera</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvm/default.aspx">uvm</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/testbench/default.aspx">testbench</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/coverage/default.aspx">coverage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/videos/default.aspx">videos</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/universal+verification+methodology/default.aspx">universal verification methodology</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvmworld.org/default.aspx">uvmworld.org</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive+Enterprise+Simulator/default.aspx">Incisive Enterprise Simulator</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video/default.aspx">video</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Axel+Scherer/default.aspx">Axel Scherer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+training/default.aspx">UVM training</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/test+generation/default.aspx">test generation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVC/default.aspx">UVC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Questa/default.aspx">Questa</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VCS/default.aspx">VCS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IUS/default.aspx">IUS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+tutorial/default.aspx">UVM tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+tutorial/default.aspx">verification tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AVM/default.aspx">AVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video+tutorial/default.aspx">video tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/URM/default.aspx">URM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/cowbell/default.aspx">cowbell</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM-e/default.aspx">UVM-e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVMe/default.aspx">UVMe</category></item><item><title>Tips on Writing Macros in Specman e Language </title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/22/tips-on-writing-macros-in-e.aspx</link><pubDate>Tue, 22 May 2012 09:43:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1311270</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1311270</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/22/tips-on-writing-macros-in-e.aspx#comments</comments><description>&lt;p&gt;In this blog, I will present some tips that can be very useful when you write &lt;i&gt;&lt;strong&gt;e&lt;/strong&gt;&lt;/i&gt; macros. We will see which kind of macro we should use for our purposes, and what options we can use to better define our macro.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s begin by looking at the following simple example. Assume that you want to define a method that computes an expression of any type and assigns its value to two variables. Because the expression type is unknown, you cannot use a real method; instead, you can define a pseudo-method, presumably using a macro. &lt;/p&gt;&lt;p&gt;At the first glance, it seems that you can easily accomplish your goal by means of the following &lt;b&gt;define-as&lt;/b&gt; macro:&lt;/p&gt;&lt;p&gt;&lt;b&gt;define&lt;/b&gt; &amp;lt;double_assign&amp;#39;action&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;double_assign\(&amp;lt;lsh1&amp;#39;exp&amp;gt;,&amp;lt;lsh2&amp;#39;exp&amp;gt;,&amp;lt;rhs&amp;#39;exp&amp;gt;\)&amp;quot; &lt;b&gt;as&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;lsh1&amp;#39;exp&amp;gt; = &amp;lt;rsh&amp;#39;exp&amp;gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;lsh2&amp;#39;exp&amp;gt; = &amp;lt;lsh1&amp;#39;exp&amp;gt;;&lt;/p&gt;&lt;p&gt;}; &lt;/p&gt;&lt;p&gt;However, it is not so simple after all. When you try to load the above code, you get the following load error:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; *** Error: Between &amp;#39;\(&amp;#39; and &amp;#39;\)&amp;#39; in the match expression, there should only be a syntactic argument (with or without repetition) &lt;/p&gt;&lt;p&gt;Indeed, as you probably know, there are certain limitations on the syntax of macro match expressions. In particular, within parentheses or brackets you can only use either of the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A single syntactic argument; for example, &amp;lt;lsh1&amp;#39;exp&amp;gt; - which denotes an expression (the prefix lsh1 is a unique tag given to this syntactic argument).&lt;/li&gt;&lt;li&gt;A syntactic argument repetition, denoted by a separator character followed by an ellipsis; for example, \(&amp;lt;exp&amp;gt;,...\) - which denotes any number of expressions separated by a comma.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;However, in the above example, the parentheses contain three syntactic arguments and two commas.&lt;/p&gt;&lt;p&gt;So, how can we define a macro that will match the desired syntax? The solution is to use a more general match expression, and check the specific syntax procedurally inside the macro body. Also, a &lt;b&gt;define-as&lt;/b&gt; macro only allows you to specify a fixed template for the replacement code; it does not allow applying conditions on the original code. So, you need to use a &lt;b&gt;define-as-computed&lt;/b&gt; macro.&lt;/p&gt;&lt;p&gt;In our example, as now modified (below), the match expression will match any sequence of &amp;lt;exp&amp;gt;s, and it will procedurally check that their number is exactly 3. Notice that when a repetition is used in a &lt;b&gt;define-as-computed&lt;/b&gt; macro (&amp;lt;exp&amp;gt;,... in this example), it is treated as a list of strings, where each repetition element is represented as a separate string. Notice also that the repetition is referenced inside the macro body in the plural form (&amp;lt;exps&amp;gt; in this example).&lt;/p&gt;&lt;p&gt;&lt;b&gt;define&lt;/b&gt; &amp;lt;double_assign&amp;#39;action&amp;gt; &amp;quot;double_assign[ ]\(&amp;lt;exp&amp;gt;,...\)&amp;quot; &lt;b&gt;as computed &lt;/b&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; &amp;lt;exps&amp;gt;.&lt;b&gt;size&lt;/b&gt;() != 3 &lt;b&gt;then&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;error&lt;/b&gt;(&amp;quot;double_assign() must get exactly 3 parameters&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; lsh1: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[0];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; lsh2: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[1];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; rsh: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[2];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;return&lt;/b&gt; &lt;b&gt;append&lt;/b&gt;(lsh1, &amp;quot;=&amp;quot;, rsh, &amp;quot;;&amp;quot;, lsh2, &amp;quot;=&amp;quot;, lsh1);&lt;/p&gt;&lt;p&gt;}; &lt;/p&gt;&lt;p&gt;If double_assign()is called with a number of parameters other than 3, an error message will appear at the time of load or compilation.&lt;/p&gt;&lt;p&gt;So far, so good. But what happens if there also exists a real method called double_assign(), and this method gets a different number of parameters? Now we have a problem. Any call to this method will now be matched by the macro we just introduced, and result in the error message. &lt;/p&gt;&lt;p&gt;So now the question is: Can we have both the method and the macro work without interfering each other? The answer is yes, provided that we use the predefined routine, reject_match(). When this routine is called from within a &lt;b&gt;define-as-computed&lt;/b&gt; macro, its effect is the same as if the macro match expression did not match the code in the first place. The parser will then make other attempts to match the code, and eventually it will recognize it as a real method call. &lt;/p&gt;&lt;p&gt;To achieve this solution, the above macro should be rewritten as follows:&lt;/p&gt;&lt;p&gt;&lt;b&gt;define&lt;/b&gt; &amp;lt;double_assign&amp;#39;action&amp;gt; &amp;quot;double_assign[ ]\(&amp;lt;exp&amp;gt;,...\)&amp;quot; &lt;b&gt;as computed &lt;/b&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; &amp;lt;exps&amp;gt;.&lt;b&gt;size&lt;/b&gt;() != 3 &lt;b&gt;then&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reject_match();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; lsh1: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[0];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; lsh2: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[1];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;var&lt;/b&gt; rsh: &lt;b&gt;string&lt;/b&gt; = &amp;lt;exps&amp;gt;[2];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;return&lt;/b&gt; &lt;b&gt;append&lt;/b&gt;(lsh1, &amp;quot;=&amp;quot;, rsh, &amp;quot;;&amp;quot;, lsh2, &amp;quot;=&amp;quot;, lsh1);&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;Before concluding our blog tips, let&amp;#39;s examine another case where using reject_match() can be useful. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Assume that you want to introduce the following syntax to declare several cover items at once:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; item a, b;&lt;/p&gt;&lt;p&gt;This seems to be easily done with the following macro:&lt;/p&gt;&lt;p&gt;&lt;b&gt;define&lt;/b&gt; &amp;lt;multi&amp;#39;cover_item&amp;gt; &amp;quot;item &amp;lt;name&amp;gt;,...&amp;quot; &lt;b&gt;as computed&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;for each in&lt;/b&gt; &amp;lt;names&amp;gt; &lt;b&gt;do&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = &lt;b&gt;append&lt;/b&gt;(result, &amp;quot;item &amp;quot;, &lt;b&gt;it&lt;/b&gt;, &amp;quot;;&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;However, after this macro is loaded, any cover item declaration causes a load time error message that suggests an infinite recursion in macro expansion. The reason is that in addition to matching the above syntax, the macro also matches the original cover item declaration syntax with a single item. The result is that its expansion code is exactly the same, and the macro continues matching the same code infinitely.&lt;/p&gt;&lt;p&gt;This problem can be easily solved by using reject_match() to reject cases with one item only:&lt;/p&gt;&lt;p&gt;&lt;b&gt;define&lt;/b&gt; &amp;lt;multi&amp;#39;cover_item&amp;gt; &amp;quot;item &amp;lt;name&amp;gt;,...&amp;quot; &lt;b&gt;as computed&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; (&amp;lt;names&amp;gt;).&lt;b&gt;size&lt;/b&gt;() == 1 &lt;b&gt;then&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reject_match();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;for each in&lt;/b&gt; &amp;lt;names&amp;gt; &lt;b&gt;do&lt;/b&gt; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = &lt;b&gt;append&lt;/b&gt;(result, &amp;quot;item &amp;quot;, &lt;b&gt;it&lt;/b&gt;, &amp;quot;;&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;To summarize, when writing &lt;i&gt;e&lt;/i&gt; macros where the basic match expression syntax is not sufficient, the following tips can be very useful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Write a more general match expression, and perform additional checks procedurally.&lt;/li&gt;&lt;li&gt;Wherever useful, use reject_match(), especially if there is a possibility that another macro or built-in construct will match.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Yuri Tsoglin&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;b&gt;e&lt;/b&gt; Language team, Specman R&amp;amp;D&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1311270" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/macros/default.aspx">macros</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/testbench/default.aspx">testbench</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/define-as/default.aspx">define-as</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/writing+macros/default.aspx">writing macros</category></item><item><title>UVM e (IEEE 1647) Video Series Features the Return of the Cowbell!</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/21/uvm-e-ieee-1647-video-series-features-the-return-of-the-cowbell.aspx</link><pubDate>Tue, 22 May 2012 01:15:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1311124</guid><dc:creator>Axel Scherer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1311124</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/21/uvm-e-ieee-1647-video-series-features-the-return-of-the-cowbell.aspx#comments</comments><description>&lt;p&gt;A significant number of readers of &lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2012/05/03/the-world-needs-quot-more-cowbell-quot-ahem-uvm-videos.aspx"&gt; my previous post&lt;/a&gt; on this topic were not aware of the &lt;a href="http://en.wikipedia.org/wiki/Snl"&gt;Saturday Night Live&lt;/a&gt; cowbell skit. This took me quite by surprise! The only prescription for this problem is that I pledge to continue to play the cultural ambassador and will introduce more vital trivia!&lt;/p&gt;&lt;p&gt;However, before we expand the scope, let&amp;#39;s continue to honor the will of Bruce Dickinson and give you more cowbell! After all, the sound of his original cowbell &amp;quot;ding&amp;quot; traveled all the way from &lt;a href="http://www.eetimes.com/electronics-blogs/other/4372839/Best-of-the-web---May-11"&gt;Oregon&lt;/a&gt; to &lt;a href="http://blogs.yahoo.co.jp/verification_engineer/66450912.html"&gt;Japan&lt;/a&gt;. So we must have done something right. &lt;/p&gt;&lt;p&gt;This time around, we have tuned our cowbell to the frequency &lt;a href="http://www.cadence.com/solutions/ev/pages/e_overview.aspx"&gt;164.814 Hz or &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;&lt;/a&gt; (&lt;a href="http://www.eda.org/twiki/bin/view.cgi/P1647/WebHome"&gt;IEEE 1647&lt;/a&gt;). In other words, we are releasing the basics for UVM-e with another two dozen short videos as a &lt;a href="http://www.youtube.com/playlist?list=PL69F243C52B24EF60"&gt;YouTube playlist &lt;/a&gt;   [direct access links below]. &lt;/p&gt;
&lt;br /&gt;

&lt;p&gt;



&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://youtu.be/gQ5ozp5NuO8"&gt;Introducing UVM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/O2nG1PGsuXk"&gt;Example DUT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/oxQvFl9pdDQ"&gt;UVM Environment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/L0QE2o3tGHw"&gt;Interface UVC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/lLPXZNuSud4"&gt;Collector&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Mh38ppf0ruA"&gt;Monitor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/BBGt1gu6zg4"&gt;Sequence Item&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/tuViUSg3ChE"&gt;Sequence&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/sWcijQZDq1U"&gt;BFM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/0T4PgevaJwE"&gt;Sequence Driver&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/gXE3K_mMCUg"&gt;Agent&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/zfT6X-BE9z4"&gt;Agent types&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/baOwcpkLsYA"&gt;Interface UVC environment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/qvBMJZvtdcA"&gt;Virtual Sequence Driver - Sequence&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/nHx28jBB-YY"&gt;Module UVC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/GPHsGa3e-Q4"&gt;Scoreboard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/5_5tBC_COHw"&gt;DUT Functional Coverage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/f-LTyYuS414"&gt;Testbench&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Asm54Kf6KhM"&gt;Test&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/3ICwWkLIV0U"&gt;Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/npKcG3Q-5RQ"&gt;AOP - Aspect Oriented Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/bGEKfZ4-pTY"&gt;Phases&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/MEdbupmPYow"&gt;Objections&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://youtu.be/Lw4pQUV7ej0"&gt;Signal Maps&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Keep on dinging! &lt;/p&gt;&lt;p&gt;Axel Scherer&lt;br /&gt;Incisive Product Expert Team&lt;br /&gt;&lt;a href="http://twitter.com/axelscherer"&gt;Twitter&lt;/a&gt;, @axelscherer &lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1311124" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Testbench+simulation/default.aspx">Testbench simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Verification+methodology+/default.aspx">Verification methodology </category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/OVM/default.aspx">OVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SoC/default.aspx">SoC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/eRM/default.aspx">eRM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/CDV/default.aspx">CDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemVerilog/default.aspx">SystemVerilog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IES/default.aspx">IES</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e/default.aspx">e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IEEE+1647/default.aspx">IEEE 1647</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/hvl/default.aspx">hvl</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/MDV/default.aspx">MDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VMM/default.aspx">VMM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Vera/default.aspx">Vera</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvm/default.aspx">uvm</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/testbench/default.aspx">testbench</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/coverage/default.aspx">coverage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/videos/default.aspx">videos</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/universal+verification+methodology/default.aspx">universal verification methodology</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvmworld.org/default.aspx">uvmworld.org</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive+Enterprise+Simulator/default.aspx">Incisive Enterprise Simulator</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video/default.aspx">video</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Axel+Scherer/default.aspx">Axel Scherer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+training/default.aspx">UVM training</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/test+generation/default.aspx">test generation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVC/default.aspx">UVC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Questa/default.aspx">Questa</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VCS/default.aspx">VCS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IUS/default.aspx">IUS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+tutorial/default.aspx">UVM tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+tutorial/default.aspx">verification tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AVM/default.aspx">AVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video+tutorial/default.aspx">video tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/URM/default.aspx">URM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/cowbell/default.aspx">cowbell</category></item><item><title>The Facts: Why Accelerated VIP Is Needed for SoC Verification</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/15/the-facts-why-accelerated-vip-is-needed-for-soc-verification.aspx</link><pubDate>Tue, 15 May 2012 13:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1311102</guid><dc:creator>PeteHeller</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1311102</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/15/the-facts-why-accelerated-vip-is-needed-for-soc-verification.aspx#comments</comments><description>&lt;p&gt;On Tuesday May 15&lt;sup&gt;th&lt;/sup&gt; Cadence &lt;a href="http://www.cadence.com/cadence/newsroom/press_releases/Pages/pr.aspx?xml=051512_systemverification&amp;amp;CMP=home"&gt;announced&lt;/a&gt; the expansion of our VIP Catalog&amp;nbsp;to include &lt;a href="http://www.cadence.com/products/sd/Pages/accvip.aspx"&gt;accelerated VIP&lt;/a&gt; (AVIP).&amp;nbsp; You may be wondering why Cadence is investing in accelerated VIP (which runs on an accelerated platform such as the Palladium XP) when we already have the market leading simulation VIP.&amp;nbsp; Good question.&amp;nbsp; This blog will answer that and explain the rationale behind Cadence&amp;#39;s AVIP and more about our products and plans going forward.&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;A key driving factor impacting verification approach is the size of the design.&amp;nbsp; Today designs commonly are in the 10&amp;#39;s and even 100&amp;#39;s of millions of gates.&amp;nbsp; And software size is growing at an even faster pace.&amp;nbsp; There&amp;#39;s no respite in sight for these torrid growth rates.&amp;nbsp; So even if you don&amp;#39;t face such verification challenges immediately, read on, because they&amp;#39;re coming.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Verification teams have taken notice of these facts and are adapting their approaches.&amp;nbsp; It&amp;#39;s become a necessity to expand the set of functional verification tools employed beyond just simulation.&amp;nbsp; That&amp;#39;s because simulation times have become excessive for SoCs, and even for many subystems.&amp;nbsp; Consequently, leading companies have adopted accelerated platforms and accelerated verification IP (AVIP) for their hardware verification.&amp;nbsp; &lt;/p&gt;&lt;p&gt;In addition, to tackle the expanding firmware/software development challenge, acceleration is frequently being used in tandem with a virtual prototype such as Cadence&amp;#39;s Virtual System Platform.&amp;nbsp; This enables the CPU cycles to be run separately from the rest of the logic to maximize software execution speed.&amp;nbsp; These verification techniques are enabling leading verification teams to meet their design goals such as shortening overall product development cycle, increasing design functionality, reducing power consumption, and/or improving quality.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Such leading companies have adopted a tiered approach to system integration and verification.&amp;nbsp; Their best practices include setting verification goals for each integration tier and selecting the verification methods and metrics to maximize those specific goals.&amp;nbsp; These include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hardware IP Development and Verification&lt;/li&gt;&lt;li&gt;Hardware Subsystem/SoC verification&lt;/li&gt;&lt;li&gt;Hardware/Software Integration and Validation&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;For a more detailed discussion regarding the verification approaches being employed, please see Cadence&amp;#39;s just published &lt;a href="http://cadence.com/products/fv/Pages/vip_reg.aspx?file=SoC_Verification_AVIP_wp"&gt;Comprehensive Acceleration White Paper&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;That begs the question: &lt;b&gt;is simulation and simulation VIP a dead end?&amp;nbsp; &lt;/b&gt;Absolutely not.&amp;nbsp; Simulation has an important place in the verification continuum, but as Clint Eastwood so famously said in his Dirty Harry role &amp;quot;a man&amp;#39;s got to know his limitations.&amp;quot;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Simulation&amp;#39;s role is increasingly limited to IP/block verification.&amp;nbsp; That&amp;#39;s a critical role and a key reason that Cadence continues to invest heavily in simulation VIP in addition to accelerated VIP.&amp;nbsp; But when it comes to SoC verification, the need for speed is crucial.&amp;nbsp; We&amp;#39;ve seen from customers that SoC verification requires performance gains of at least 20X over simulation.&amp;nbsp; And very commonly performance gains must be in the 100X-1000X over simulation when the full SoC is being validated and/or software is being developed.&amp;nbsp; Meeting these needs is exactly why Cadence has brought acceleration and AVIP to market.&amp;nbsp; &lt;/p&gt;&lt;p&gt;But be wary!&amp;nbsp;&amp;nbsp; Other VIP suppliers have posited that a 4X gain in simulation VIP speed will enable its use in SoC verification.&amp;nbsp; First of all, Even if you take such speedup claim at face value, a 4X gain in VIP performance only translates to a 13% gain in overall performance.&amp;nbsp; That&amp;#39;s why Cadence takes a very different perspective.&amp;nbsp; For more information my colleague Tom Hackett just wrote an excellent &lt;a href="http://www.chipestimate.com/tech-talks/2012/05/08/Cadence-SoC-Verification-Requires-100x-Performance-Boost:-Accelerated-verification-IP-needed-to-enable-simulation-acceleration-"&gt;article&lt;/a&gt; about how testbenches and testbench languages must be properly applied and used on the right verification platform for SoC level verification.&amp;nbsp; And, unlike&amp;nbsp;other&amp;nbsp;unsubstantiated claims, Tom&amp;#39;s article includes hard data and simple math to back up our positions.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Like other accelerated VIP, Cadence AVIP uses a &lt;a href="http://www.accellera.org/downloads/standards/sce-mi"&gt;SCE-MI interface&lt;/a&gt; to connect to a host workstation.&amp;nbsp; However, that&amp;#39;s pretty much where the similarities end.&amp;nbsp; Cadence AVIP is uniquely architected to deliver a range of performance and verification tradeoffs, all under user control.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Pete_Heller/Knobs%20control%20performance.jpg"&gt;&lt;img height="184" width="566" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Pete_Heller/Knobs%20control%20performance.jpg" border="0" style="width:354px;height:134px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;OK, so you&amp;#39;re sold on the need for accelerated VIP, why should you select accelerated VIP from Cadence?&lt;/b&gt;&amp;nbsp; Cadence AVIP has several advantages.&amp;nbsp; A partial list includes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Cadence AVIP delivers high performance. All customer engagements have demonstrated the AVIP meets or exceeds its performance targets. To achieve the high performance, the AVIP employs another unique architectural advantage: the Acceleration Optimized Core.&lt;/li&gt;&lt;li&gt;Cadence AVIP provides multiple user interfaces to enable you to use just one single AVIP for all your verification tasks. These interfaces and their uses are briefly described below:&lt;/li&gt;&lt;li&gt;Cadence AVIP supports a UVM interface for easy UVM testbench reuse in acceleration, with the same consistent user interface as&amp;nbsp;the Cadence simulation VIP. This also enables the AVIP to support testbenches written in verification languages such as SystemVerilog and&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;e&lt;/strong&gt;.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;For testbenches written in C or C++, the C/C++ interface is used to deliver a higher level of performance than with the UVM interface, typically hundreds of times greater than with simulation&lt;/li&gt;&lt;li&gt;It is also possible to eliminate the testbench completely using the embedded interface. With the entire design running on the Palladium platform users get the maximum validation performance. (This can also be referred to as emulation.)&lt;/li&gt;&lt;li&gt;The TLM 2 interface is used for software development and/or hardware/software co-development.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;i&gt;Figure 1. Cadence AVIP provides multiple user interfaces so you can use a single AVIP for all your verification needs&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Pete_Heller/AVIP_interfaces2.jpg"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Pete_Heller/AVIP_interfaces2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Pete_Heller/AVIP%20User%20interfaces.PNG"&gt;&lt;/a&gt;&lt;/p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Cadence AVIP provides &amp;quot;knobs&amp;quot; enabling you to make tradeoffs between performance and verification functionality. For example, streamlined stimulus generation, checking, and coverage for UVM environments are all under user control.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Thanks for reading this far!&amp;nbsp; I suspect you&amp;#39;re now wondering &lt;b&gt;what protocols does Cadence provide AVIP for?&lt;/b&gt;&amp;nbsp; Great question.&amp;nbsp; Today Cadence provides AVIP for AMBA AXI 3/4, AMBA 4 ACE (including ACE Lite), PCI Express 2/3, USB 3.0, HDMI 1.4, SATA, and Ethernet 10G.&amp;nbsp; We have plans for more protocols including MIPI and DisplayPort. I encourage you to get in touch with your Cadence AE or salesperson to discuss your needs with us.&amp;nbsp;&lt;/p&gt;&lt;p&gt;For more information on AVIP, click &lt;a href="http://www.cadence.com/products/sd/Pages/accvip.aspx"&gt;here.&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Pete Heller&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1311102" width="1" height="1"&gt;</description><enclosure url="http://www.cadence.com/Community/blogs/fv/attachment/1311102.ashx" length="27870" type="image/jpeg" /><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemVerilog/default.aspx">SystemVerilog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemC/default.aspx">SystemC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VIP/default.aspx">VIP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvm/default.aspx">uvm</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Palladium+XP/default.aspx">Palladium XP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Palladium/default.aspx">Palladium</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+IP/default.aspx">verification IP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/ACE+verification/default.aspx">ACE verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AVIP/default.aspx">AVIP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/acceleration/default.aspx">acceleration</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation+VIP/default.aspx">simulation VIP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SCE-MI/default.aspx">SCE-MI</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VIP+Catalog/default.aspx">VIP Catalog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Accelerated+VIP/default.aspx">Accelerated VIP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/emulation/default.aspx">emulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/protocol+verification/default.aspx">protocol verification</category></item><item><title>DAC 2012 Preview: Focus on Formal and ABV Events and Papers</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/14/dac-2012-preview-focus-on-formal-amp-abv-events-and-papers.aspx</link><pubDate>Mon, 14 May 2012 13:01:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1311041</guid><dc:creator>TeamVerify</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1311041</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/14/dac-2012-preview-focus-on-formal-amp-abv-events-and-papers.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/Joe_Hupcey_III/JH3_robot.jpg"&gt;&lt;/a&gt;In a few short weeks DAC 2012 will be upon us &lt;a href="http://www.cadence.com/dac2012/Pages/exhibits.aspx"&gt;(June 3-7, 2012 in San Francisco, CA)&lt;/a&gt;, and Team Verify and our colleagues on the Incisive Verification team will be there in force with detailed briefings, panels, papers, posters, and of course live demos in the Cadence booth.&amp;nbsp; Here are the formal&amp;nbsp;and assertion-based verification (ABV) specific highlights:&lt;/p&gt;&lt;p&gt;* On the show floor Monday June 4 through Wednesday June 6, our main booth demo includes the hit formal app &lt;a href="http://www.cadence.com/cadence/events/Pages/event.aspx?eventid=562"&gt;&amp;quot;Coverage Unreachability&amp;quot;&lt;/a&gt; with &lt;a href="http://www.cadence.com/products/fv/enterprise_verifier/pages/default.aspx"&gt;Incisive Enterprise Verifier (IEV)&lt;/a&gt;.&amp;nbsp; Since this app&amp;#39;s release last year, its power mix of formal, simulation, and metric-driven verification (MDV) capabilities has enabled customers around the world to identify state spaces that are mathematically impossible to reach, saving a ton of time and confusion in the process.&amp;nbsp; Technology Experts Bin Ju, Darrow Chu, Chris Komar, and Axel Scherer will be on-hand to give you an update, as well as field any questions you may have about other formal and multi-engine apps, and ABV technologies and methodologies in general.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/Joe_Hupcey_III/JH3_robot.jpg"&gt;&lt;img height="321" width="200" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/Joe_Hupcey_III/JH3_robot.jpg" align="right" hspace="10" border="0" alt="" /&gt;&lt;/a&gt;* This year the DAC &amp;quot;User Track&amp;quot; features &lt;a href="http://www.dac.com/conference+program+user+track.aspx?event=335&amp;amp;topic=8"&gt;a whole session devoted to &amp;quot;Practical Formal Methods&amp;quot; (yeah!) - it&amp;#39;s Session 8U on Wednesday June 6, 4pm-6pm in Room 106&lt;/a&gt;.&amp;nbsp; Even better: &lt;a href="http://www.cadence.com/products/fv/formal_verifier/pages/default.aspx"&gt;Incisive Formal Verifier (IFV)&lt;/a&gt; plays a role in two papers in this track: paper 8U.2 &amp;quot;Deploying Model Checking for Bypass Verification&amp;quot; and paper 8U.5 &amp;quot;How we Verified 5000 Lines of a Complex Multiplexing Code with Three Assertions&amp;quot;.&amp;nbsp; Without giving too much away in advance, these papers will show very clever - yet widely applicable - abstraction techniques that enable formal to provide results in hours vs. weeks for a simulation-only flow.&lt;/p&gt;&lt;p&gt;* Last but not least, back by popular demand you will see the most amusing formal app of them all - Rubik&amp;#39;s Cube solving with a Lego Mindstorms robot driven by IFV (right). If you are a &amp;quot;Speed Cuber&amp;quot; by all means we welcome you to test your skills against the machine like &lt;a href="http://youtu.be/0zre6zstaG0"&gt;at DVCon&lt;/a&gt; and &lt;a href="http://youtu.be/APd2PNf1rT0"&gt;CDNLive San Jose&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Hope to see you soon!&lt;/p&gt;&lt;p&gt;Joe Hupcey III&lt;br /&gt;for Team Verify&lt;br /&gt;&lt;br /&gt;On Twitter:&amp;nbsp;&lt;a href="http://twitter.com/teamverify"&gt;http://twitter.com/teamverify&lt;/a&gt;, @teamverify&lt;/p&gt;&lt;p&gt;And now you can &amp;quot;Like&amp;quot; us on Facebook too:&lt;br /&gt;&lt;a href="http://www.facebook.com/pages/Team-Verify/298008410248534"&gt;http://www.facebook.com/pages/Team-Verify/298008410248534&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Reference Links:&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;Comprehensive DAC preview by Richard Goering: &lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2012/04/25/see-cadence-at-dac-2012-panels-tutorials-i-love-dac-and-the-denali-party.aspx"&gt;&amp;quot;See Cadence at DAC 2012 - Panels, Tutorials, &amp;quot;I Love DAC,&amp;quot; and the Denali Party&amp;quot;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://goo.gl/YVaes"&gt;DVCon 2012 Video: Product Engineer Chris Komar Reviews the Tutorial on Formal Apps&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;February 2012: Richard Goering,&amp;nbsp;&lt;a href="http://is.gd/1CgIOB"&gt;&amp;quot;How Formal Analysis &amp;lsquo;Apps&amp;#39; Provide New Verification Solutions&amp;quot;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;February 2, 2012, Daniel Payne of SemiWiki.com, &lt;a href="http://goo.gl/O2d7z"&gt;&amp;quot;Using &amp;quot;Apps&amp;quot; to Take Formal Analysis Mainstream&amp;quot;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1311041" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Formal+Analysis/default.aspx">Formal Analysis</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/DAC/default.aspx">DAC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/ABV/default.aspx">ABV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IEV/default.aspx">IEV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/formal/default.aspx">formal</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IFV/default.aspx">IFV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/assertions/default.aspx">assertions</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/assertion-based+verification/default.aspx">assertion-based verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Lego/default.aspx">Lego</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/robot/default.aspx">robot</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Rubik_2700_s+Cube/default.aspx">Rubik's Cube</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Design+Automation+Conference/default.aspx">Design Automation Conference</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/apps/default.aspx">apps</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/formal+apps/default.aspx">formal apps</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/_2600_quot_3B00_Coverage+Unreachability_2600_quot_3B00_/default.aspx">&amp;quot;Coverage Unreachability&amp;quot;</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/User+Track/default.aspx">User Track</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/papers/default.aspx">papers</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/coverage+unreachability/default.aspx">coverage unreachability</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/bypass+verification/default.aspx">bypass verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/DAC+2012/default.aspx">DAC 2012</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/model+checking/default.aspx">model checking</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive+Formal+Verifier/default.aspx">Incisive Formal Verifier</category></item><item><title>Specman’s Memory Management Orientation Guide (or “Honey – Please Take out the Garbage”)</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/11/specman-s-memory-management-orientation-guide-or-honey-please-take-out-the-garbage.aspx</link><pubDate>Fri, 11 May 2012 13:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1310586</guid><dc:creator>teamspecman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1310586</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/11/specman-s-memory-management-orientation-guide-or-honey-please-take-out-the-garbage.aspx#comments</comments><description>Memory management is not something the Specman user is supposed to worry about. Nobody likes to make notes about allocations and freeing up memory segments when he&amp;#39;s programming, and Specman supplies a mechanism that allows the programmer to have some extra time for a cup of coffee. &lt;p&gt;Unfortunately, in some occasions, this cup of coffee will be very much needed in order to debug why &amp;nbsp;Specman managed the memory this way, and why all of a sudden I can&amp;#39;t run my simulation since it is consuming too much memory, or just failing for other various reasons that are related to memory.&lt;/p&gt;&lt;p&gt;The key to resolving these kind of issues (or better yet - not to reach these kinds of situations all together) is to understand how Specman decides which mechanism to use each time and how to influence those decisions. This paper will hopefully help you understand these points. &lt;/p&gt;&lt;p&gt;Let&amp;#39;s start with a quote from documentation (Incisive Enterprise Specman Elite Testbench Specman Performance Handbook, chapter 5 - Managing Specman Memory):&lt;/p&gt;&lt;p&gt;&lt;i&gt;The Specman memory manager periodically frees up space in memory by automatically recycling unusable data. Any object (struct, list, string, or long integer) that is not used by the Specman scheduler or is not connected to sys is considered unusable and defined by Specman as garbage. The recycling process is called &amp;quot;garbage collection&amp;quot; or &amp;quot;GC&amp;quot;.&lt;/i&gt; &lt;/p&gt;&lt;p&gt;OK -- so garbage would be any unused data that Specman had allocated memory for. In order to identify what is garbage and what is not, Specman determines a very simple thing: whatever is reachable from sys struct (which is the root of anything a user would use) or the scheduler, is NOT garbage. All the rest IS garbage. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Types of Garbage Collection&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;p&gt;Now Specman has to get rid of that garbage. Performing the common and most efficient process to do so, which is called &lt;b&gt;Copy Garbage Collection&lt;/b&gt;, Specman would simply copy everything that is reachable to a different place in memory, and then free up the entire &amp;quot;old&amp;quot; memory. That would leave us &amp;quot;garbage free.&amp;quot;&lt;/p&gt;&lt;p&gt;The main problem with this method is that it might consume a lot of extra memory from the OS just to accomplish this procedure. In worst case (that would be when we have no garbage), the entire memory image would be copied, and in the peak time of that procedure, Specman will consume double the memory than it actually needs.&lt;/p&gt;&lt;p&gt;If there is enough free space on the machine, this is not an issue. The problem starts when the machine can&amp;#39;t allocate that much memory for the Specman process. In this case doing&lt;b&gt; Copy GC&lt;/b&gt; will be not useful.&lt;/p&gt;&lt;p&gt;This is when the other type of GC is introduced - the &lt;b&gt;Disc-Based GC&lt;/b&gt;. This GC comes to tackle the memory prodigal nature of &lt;b&gt;Copy GC&lt;/b&gt;, and it does that by doing the exact same procedure as described above, but instead of copying the entire memory image into a different location in memory It copies it to a disc. This mechanism will be automatically used by Specman when it gets an &amp;quot;out of memory&amp;quot; indication from the OS, &lt;i&gt;during&lt;/i&gt; the time of &lt;b&gt;Copy GC&lt;/b&gt;. &lt;/p&gt;&lt;p&gt;Obviously, the &lt;b&gt;Disc-Based GC&lt;/b&gt; will consume more CPU cycles, since it uses an external disc which has a (sometimes major) performance hit.&lt;/p&gt;&lt;p&gt;So what if I don&amp;#39;t have enough memory to waste on a &lt;b&gt;Copy GC&lt;/b&gt;, nor enough time to waste on &lt;b&gt;Disc-Based GC&lt;/b&gt;? This is when the third type of GC gets into the picture - The &lt;b&gt;On-The-fly GC&lt;/b&gt;. &lt;b&gt;OTF GC&lt;/b&gt; is great from that perspective. It&amp;#39;s a lot quicker than &lt;b&gt;Disc-Based GC&lt;/b&gt;, and uses less memory by far than the &lt;b&gt;Copy GC&lt;/b&gt;. It can also operate on demand by a method call (&lt;i&gt;do_otf_gc()&lt;/i&gt;) and will kick in during a Specman tick - a thing that will not happen with the other two GC mechanisms that require a tick (you can think of it as a similar thing to a simulation delta cycle) in order to operate.&lt;/p&gt;&lt;p&gt;However, nobody&amp;#39;s perfect. &lt;b&gt;OTF GC&lt;/b&gt; does not use the copy principle, but the &amp;quot;mark and sweep&amp;quot; principle, which performs the cleaning job a lot less efficiently.&lt;/p&gt;&lt;p&gt;So as you can see, those three mechanisms complete each other, and each mechanism will be better used in different scenarios. So... who is in charge of when to use each?&lt;/p&gt;&lt;p&gt;&lt;b&gt;GCs Triggers and Settings&lt;/b&gt; &lt;/p&gt;&lt;p&gt;It depends... You can ask Specman to do it by using the &lt;i&gt;Automatic Garbage Collection Configuration&lt;/i&gt; &lt;i&gt;mechanism&lt;/i&gt; (by setting &lt;i&gt;configure memory -automatic_gc_settings=STANDARD&lt;/i&gt; - this is actually the default), or keep the decision making to yourself. If you do decide to maintain the memory management by yourself there are few configuration flags you should know and handle:&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;gc_threshold&lt;/u&gt;&lt;/b&gt;: The amount of memory that Specman can consume before &lt;b&gt;copy GC&lt;/b&gt; kicks in.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;max_size&lt;/u&gt;&lt;/b&gt; : Maximum amount of memory that Specman should use. This is the threshold for &lt;b&gt;OTF GC&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;absolute_max_size&lt;/u&gt;&lt;/b&gt;: Maximum amount of memory that Specman can use before fatally terminating execution.&lt;/p&gt;&lt;p&gt;&lt;b&gt;disable_disc_based_gc&lt;/b&gt;: Don&amp;#39;t use &lt;b&gt;Disc-Based GC&lt;/b&gt; when Specman is &amp;quot;Out Of Memory&amp;quot; during GC (I probably don&amp;#39;t have enough disc space, or can&amp;#39;t wait for the slower &lt;b&gt;Disc-based GC&lt;/b&gt;). Specman will use &lt;b&gt;OTF GC&lt;/b&gt; instead.&lt;/p&gt;&lt;p&gt;On the other hand, in case you want Specman to manage those configurations, all you should specify is the &lt;b&gt;optimal_process_size&lt;/b&gt; that you would want for this process, and Specman will determine the values above automatically. You should be aware that manually changing any of the above values will cancel the Automatic GC Configuration mechanism.&lt;/p&gt;&lt;p&gt;If you just asked yourself: which one should I use? You probably better off trying the automatic mechanism first. This mechanism can handle most traditional mainstream environments. Nevertheless, if yours isn&amp;#39;t such, or you find yourself suffering from memory issues, then switching to the manual mechanism will give you a lot more flexibility to tackle these issues.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Types of Failures&lt;/u&gt;&lt;/b&gt; &lt;/p&gt;&lt;p&gt;So, what are these memory issues mentioned above?&lt;/p&gt;&lt;p&gt;Let&amp;#39;s differentiate between two types of issue:&lt;/p&gt;&lt;p&gt;1. Specman Memory Management errors / warnings&lt;/p&gt;&lt;p&gt;2. OS errors&lt;/p&gt;&lt;p&gt;The first one is easier and usually can be solved by changing the Memory Management parameters. It also deals only with Specman memory consumption and not the entire process that Specman is a part of. The first and more common error you might get from Specman&amp;#39;s memory management is the following error:&lt;/p&gt;&lt;p&gt;&lt;i&gt;*** Error: Total memory requested from operating system exceeds get_config(memory,max_size) (419430400). Will exit at get_config(memory,absolute_max_size) (471859200).&lt;/i&gt; &lt;/p&gt;&lt;p&gt;So this error tells us that we had hit some pre-defined values (max_size, absolute_max_size) that are supposed to limit Specman&amp;#39;s memory consumption. These values are described above, and will be set either automatically by the automatic mechanism (which means in this case that the automatic mechanism was not very successful...) or by the user himself. There is another option in which the user does not use the automatic mechanism, but still did not specify those values. In this case, default values would be assigned to them (the numbers in the specific message above).&lt;/p&gt;&lt;p&gt;Another issue you might have -- one that is related to Specman Memory Management -- is getting too many consecutive GCs. This will slow down simulation tremendously, and will keep on printing GC messages to the screen. This will happen when the gc_threshold or max_size parameters are not tuned up correctly. This means that the &amp;quot;steady&amp;quot; memory Specman needs is actually higher than those thresholds, sending Specman to do GC all the time, but it will probably never get to equilibrium.&lt;/p&gt;&lt;p&gt;These are the easy errors to handle -- and you probably wish to be left dealing with them, as both of the problem&amp;#39;s solutions are pretty easy.&lt;/p&gt;&lt;p&gt;On the other hand, the second type of errors -- OS errors -- is a bit more tricky to deal with. Let&amp;#39;s first look at what we mean by a process:&lt;/p&gt;&lt;p align="center" class="MsoNormal" style="text-align:center;margin:0in 0in 10pt;"&gt;&lt;b&gt;&lt;u&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;&lt;font face="Calibri"&gt;PID #123456&lt;/font&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;u&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;&lt;font face="Calibri"&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/mm1.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/mm1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;As you can see from the diagram, the process with PID #123456 (just an example) can contain several applications running together, and sharing a specific allocated segment of memory on the machine.&lt;/p&gt;&lt;p&gt;If we are dealing with 32 bit applications, the maximum size of this process could not go over 4GB (if you run the 32 bit process on 32 bit machine - the OS allows just about 3G of user data to the process, and the rest is allocated to the kernel, so the quota is even less).&lt;/p&gt;&lt;p&gt;With 64 bit applications, the size is not limited by a specific number, but by other specific OS considerations. However, there might be several other processes on that machine that need some memory as well. For this the OS uses what&amp;#39;s called &amp;quot;virtual memory&amp;quot; which fragments some of the process memory and puts it on disc instead of the RAM. We will not go into details of this mechanism now, but in general the entire process size (In RAM + disc) is called VSIZE, and this size is limited by the OS. &lt;/p&gt;&lt;p&gt;You can now understand, that when this VSIZE goes over what is given by the OS to this process, it doesn&amp;#39;t really matter (to the OS) which of these applications is responsible for this amount of memory requested. But when it decides to &amp;quot;cut off&amp;quot; the supply (i.e. a memory allocation request will return NULL) the application that was doing the malloc in that time frame would have to deal with it, but the entire process is thrown out. Every application can deal with it differently. Specman will issue an &amp;quot;Out Of Memory&amp;quot; error in the best case, or crash with an OS11 signal in the worst case (usually when some memory corruption was caused by this excessive usage of memory). &lt;/p&gt;&lt;p&gt;When dealing with these kind of situations, we need to first identify which of these applications is the one taking most memory, and moreover, which is the one that can go on a diet for the sake of &amp;nbsp;this process.&lt;/p&gt;&lt;p&gt;For this analysis, there are several tools and utilities we can use for every application. For Specman we have the memory debug flags, and the memory profiler. These will not be discussed in this paper, as debugging techniques are a broad issue which requires an entire paper to go over.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/b&gt; &lt;/p&gt;&lt;p&gt;If we understand the basic behavior of Specman&amp;#39;s Memory Management mechanism , we will be able to identify most of the memory problems that pop up during our work. It is very important to identify whether it&amp;#39;s a Specman error that is complaining we have a setting that is responsible for this error, or an OS error that is complaining about the process that Specman is a member of.&lt;/p&gt;&lt;p&gt;The most important thing is to identify when Specman is not behaving as we think it should be. If we will identify this point, and the reason for this &amp;quot;misbehavior,&amp;quot; we will be half way towards the resolution of the problem (or the identification of a Specman bug...).&lt;/p&gt;&lt;p&gt;The below flow chart is very useful to use when you want to analyze Specman actions and reactions, and the relations between all types of GCs and what will kick in each one of them. It will also show the paths to errors that could help identify what you need to focus on in order to make them go away.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/mm2.png"&gt;&lt;img height="656" width="595" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/mm2.png" border="0" style="width:571px;height:631px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Avi Farjoun, Cadence Design Systems&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1310586" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/testbench/default.aspx">testbench</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman+garbage+collection/default.aspx">Specman garbage collection</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/memory/default.aspx">memory</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman+data/default.aspx">Specman data</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/memory+management/default.aspx">memory management</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/memory+errors/default.aspx">memory errors</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/garbage/default.aspx">garbage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/garbage+collection/default.aspx">garbage collection</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/managing+memory/default.aspx">managing memory</category></item><item><title>Video Tech Tip: Data Path Verification Using a Formal Scoreboard with Incisive Formal Verifier</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/08/video-tech-tip-data-path-verification-using-a-formal-scoreboard-with-incisive-formal-verifier.aspx</link><pubDate>Wed, 09 May 2012 00:18:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1310915</guid><dc:creator>TeamVerify</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1310915</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/08/video-tech-tip-data-path-verification-using-a-formal-scoreboard-with-incisive-formal-verifier.aspx#comments</comments><description>&lt;p&gt;This 6 minute video is a quick overview of our formal scoreboard app.&amp;nbsp; Specifically, the video references the same AXI bridge example included with &lt;a href="http://www.cadence.com/products/fv/formal_verifier/pages/default.aspx"&gt;Incisive Formal Verifier (IFV)&lt;/a&gt; and &lt;a href="http://www.cadence.com/products/fv/enterprise_verifier/pages/default.aspx"&gt;Incisive Enterprise Verifier (IEV)&lt;/a&gt; so you can follow along on your workstation!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;If video does not open, &lt;a href="http://youtu.be/rd972TegoBg"&gt;click here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you want even more background on this app, I invite you to watch the webinar recording on this topic, &lt;a href="http://www.cadence.com/cadence/events/Pages/event.aspx?eventid=560"&gt;&amp;quot;Quickly Find Data Transport Bugs with Formal Scoreboarding&amp;quot;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Happy Scoreboarding!&lt;/p&gt;&lt;p&gt;Joerg Muller&lt;br /&gt;Solutions Engineer&lt;br /&gt;Cadence R&amp;amp;D&lt;br /&gt;for Team Verify&lt;/p&gt;&lt;p&gt;On Twitter: &lt;a href="http://twitter.com/teamverify"&gt;http://twitter.com/teamverify&lt;/a&gt;, @teamverify&lt;/p&gt;&lt;p&gt;And now you can &amp;quot;Like&amp;quot; Team Verify on Facebook too:&amp;nbsp;&lt;br /&gt;&lt;a href="http://www.facebook.com/pages/Team-Verify/298008410248534"&gt;http://www.facebook.com/pages/Team-Verify/298008410248534&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1310915" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Formal+Analysis/default.aspx">Formal Analysis</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/ABV/default.aspx">ABV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IEV/default.aspx">IEV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/formal/default.aspx">formal</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IFV/default.aspx">IFV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video/default.aspx">video</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Joerg+Mueller/default.aspx">Joerg Mueller</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/scoreboard/default.aspx">scoreboard</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/apps/default.aspx">apps</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/formal+apps/default.aspx">formal apps</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/formal+scoreboard/default.aspx">formal scoreboard</category></item><item><title>UVM SystemVerilog Video Series Brings Verification World "More Cowbell!"</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/05/03/the-world-needs-quot-more-cowbell-quot-ahem-uvm-videos.aspx</link><pubDate>Thu, 03 May 2012 18:08:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1310722</guid><dc:creator>Axel Scherer</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1310722</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/05/03/the-world-needs-quot-more-cowbell-quot-ahem-uvm-videos.aspx#comments</comments><description>&lt;p&gt;To quote an American pop culture catchphrase made famous by Saturday Night Live character &lt;a href="http://en.wikipedia.org/wiki/More_cowbell"&gt;Bruce Dickison&lt;/a&gt;, &amp;quot;I gotta have &lt;a href="http://www.nbc.com/saturday-night-live/video/recording-studio-more-cowbell-excerpt/1374012"&gt;more cowbell&lt;/a&gt;!&amp;quot;&lt;/p&gt;&lt;p&gt;In the world of functional verification this translates to &amp;quot;more collateral!&amp;quot; Thererfore, we have released a set of byte-size videos about the basics of the Universal Verification Methodology (UVM) for &lt;a href="http://www.cadence.com/solutions/ev/pages/systemverilog_overview.aspx"&gt;SystemVerilog&lt;/a&gt;. Each video is under 5 minutes long and includes sound, so put on your headphones and get &amp;quot;more cowbell!&amp;quot; &lt;/p&gt;&lt;p&gt;This series is an introduction into the basic concepts, architecture and components of UVM. It features a mixture of slides and demos.&lt;/p&gt;&lt;p&gt;We decided to release the entire series publicly on YouTube &lt;a href="http://www.youtube.com/playlist?list=PL7FE0CE1170C06FDE"&gt;[click here to view]&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://youtu.be/V-pekia4SPM"&gt;Introducing UVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/aNLjUTmuZaw"&gt;Example DUT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/B72ykmYiYuo"&gt;UVM Environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/Qg6tfpS7eXI"&gt;Interface UVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/sR9T9iWQKkM"&gt;Collector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/kSZ3NAeIqIc"&gt;Monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/XsbYt0RLWT8"&gt;Sequence Item&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/muWuGKQNDVk"&gt;Sequence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/7N75l9CUU7c"&gt;Driver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/H0n9miyahOQ"&gt;Sequencer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/Ntz86E0lte8"&gt;Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/CMQWd3fgqcE"&gt;Agent types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/7mSX4mRJQMk"&gt;Interface UVC environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/XRsvFBqFrw8"&gt;Virtual Sequencer - Sequence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/uasHRps5Uig"&gt;Module UVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/NMkIq7lE360"&gt;Scoreboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/dfJ-iiCxbzc"&gt;DUT Functional Coverage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/enFibq8aooM"&gt;Testbench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/0hZpwjSASMI"&gt;Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/kEnxVSgvyVU"&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/BXLyO6s9O3Y"&gt;Factory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/jq3M9-2m7kY"&gt;Phases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/TMp4Qyw3sDY"&gt;Objections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/bM-TMl2IMZQ"&gt;Virtual Interface&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have UVM fever, remember the only prescription is &amp;quot;more cowbell!&amp;quot;.&lt;/p&gt;&lt;p&gt;Axel Scherer&lt;br /&gt;Incisive Product Expert Team&lt;br /&gt;&lt;a href="http://twitter.com/axelscherer"&gt;Twitter&lt;/a&gt;, @axelscherer &lt;/p&gt;
&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1310722" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Testbench+simulation/default.aspx">Testbench simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Verification+methodology+/default.aspx">Verification methodology </category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/OVM/default.aspx">OVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SoC/default.aspx">SoC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/eRM/default.aspx">eRM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/CDV/default.aspx">CDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemVerilog/default.aspx">SystemVerilog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IES/default.aspx">IES</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/MDV/default.aspx">MDV</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VMM/default.aspx">VMM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Vera/default.aspx">Vera</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvm/default.aspx">uvm</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/testbench/default.aspx">testbench</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/coverage/default.aspx">coverage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/videos/default.aspx">videos</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/universal+verification+methodology/default.aspx">universal verification methodology</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/uvmworld.org/default.aspx">uvmworld.org</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive+Enterprise+Simulator/default.aspx">Incisive Enterprise Simulator</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video/default.aspx">video</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Axel+Scherer/default.aspx">Axel Scherer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+training/default.aspx">UVM training</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/test+generation/default.aspx">test generation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVC/default.aspx">UVC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Questa/default.aspx">Questa</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/VCS/default.aspx">VCS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IUS/default.aspx">IUS</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+tutorial/default.aspx">UVM tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+tutorial/default.aspx">verification tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AVM/default.aspx">AVM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/video+tutorial/default.aspx">video tutorial</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Stimulus/default.aspx">Stimulus</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/URM/default.aspx">URM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/cowbell/default.aspx">cowbell</category></item><item><title>My Constraint was Ignored – Is it a Tool Bug? IntelliGen Gen Debugger Can Help!</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/04/24/my-constraint-was-ignored-is-it-a-tool-bug.aspx</link><pubDate>Tue, 24 Apr 2012 13:06:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1310410</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1310410</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/04/24/my-constraint-was-ignored-is-it-a-tool-bug.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;The IntelliGen Gen Debugger is a powerful Specman tool that can debug any generation problem that you might face. The most obvious and common generation problem is a contradiction, but the Gen Debugger can handle various other problems, such as user errors, performance problems and unexpected generation results.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;In this post, we will focus on one of the most extreme cases of unexpected generation: &lt;b&gt;a constraint which is not enforced&lt;/b&gt;. This can happen due to problems with your code, even in a simple example such as the following:&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/1.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Let&amp;rsquo;s explore a situation where the above code fails with a DUT error, and examine the full debug process &amp;ndash; from detecting and identifying the problem to tracing its root cause. &lt;/font&gt;&lt;/p&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Let&amp;rsquo;s debug!&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; &lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Because the above code does a &lt;b&gt;check that p.x == 100&lt;/b&gt;, we must conclude that if this check failed, it must be that p.x is not 100, and the constraint we gave was not enforced. Now our task is to identify the cause of failure.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;We can do this by performing the following steps:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst" style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;1.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Open the Gen Debugger at the generation of the field. We do this as follows:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-0.25in;margin:0in 0in 0pt 1in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;a.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Issue the following command: &amp;lsquo;&lt;b&gt;config gen &amp;ndash;collect = ALL&lt;/b&gt;&amp;rsquo;. This activates the Gen Debugger, and ensures that it keeps all information. (&lt;b&gt;Note:&lt;/b&gt; In Specman versions prior to version 11.1, the command is: &amp;lsquo;&lt;b&gt;br gen err; config gen &amp;ndash;del_old_dbg_info = FALSE&lt;/b&gt;&amp;rsquo;)&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-0.25in;margin:0in 0in 0pt 1in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;b.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Issue the following command: &amp;lsquo;&lt;b&gt;br on error&lt;/b&gt;&amp;rsquo;. This ensures that the Gen Debugger stops at the dut_error, so that we can determine what failed.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent:-0.25in;margin:0in 0in 10pt 1in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;c.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;After the Gen Debugger stops, issue the following command: &amp;lsquo;&lt;b&gt;show gen &amp;ndash;instance p.x&lt;/b&gt;&amp;rsquo; (you can specify any legal path to the relevant variable). This opens the Gen Debugger at the generation of the problematic field. This command is particularly useful when using the Gen Debugger in &amp;lsquo;offline&amp;rsquo; mode, after the generation has finished. If you stop during generation (for example, on an error), the &amp;lsquo;&lt;b&gt;gtree&lt;/b&gt;&amp;rsquo; command will open the gen debugger in its current state.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent:-0.25in;margin:0in 0in 10pt 1in;"&gt;&lt;font face="Calibri" size="3"&gt;In our example, the following figure illustrates the result.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt 0.75in;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Interestingly, the generated value (highlighted by the Gen Debugger in blue) shows us that the constraint was enforced.&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; &lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt 0.75in;"&gt;&lt;font face="Calibri" size="3"&gt;This means that for an error to have occurred, that generated value had to have been changed later on during processing. But where? How do we find the procedural location of the change? &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt 0.75in;"&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:11pt;"&gt;The good news is that we can use the Gen Debugger to help us as we try to pinpoint the location of the problem. But first we need to perform a rerun, stopping immediately after the generation.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:11pt;"&gt;&lt;p class="MsoListParagraphCxSpFirst" style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;"&gt;&lt;span&gt;&lt;span&gt;2.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Ascertain the needed values and then rerun the test as follows:&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent:-0.25in;margin:0in 0in 10pt 1in;"&gt;&lt;span&gt;&lt;span&gt;a.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;In the Gen Debugger, look for the Gen-Action and Connect Field Set (CFS) values. In our example (see the following figures), the Gen Action value is &lt;b&gt;2&lt;/b&gt;, and the CFS value is &lt;b&gt;20&lt;/b&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt 0.75in;"&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/3.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font face="Calibri" size="3"&gt;and&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/4.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/4.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p class="MsoListParagraphCxSpFirst" style="text-indent:-0.25in;margin:0in 0in 0pt 1in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;b.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Reload the code and issue &amp;lsquo;&lt;b&gt;br on gen action &lt;i&gt;#&lt;/i&gt; cfs &lt;i&gt;#&lt;/i&gt;&lt;/b&gt;&amp;rsquo; (in our example, &amp;lsquo;&lt;b&gt;br on gen action 2 cfs 20&lt;/b&gt;&amp;rsquo;), so that the test reruns and stops immediately after the generation.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent:-0.25in;margin:0in 0in 10pt 1in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;c.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;After the run is completed, issue &amp;lsquo;&lt;b&gt;gfinish&lt;/b&gt;&amp;rsquo;, which will advance to the completion of this CFS, and check the results (see the following figure). Notice that p.x. has the correct value.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/5.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/5.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt 0.25in;"&gt;&lt;font face="Calibri" size="3"&gt;At this point, the role of the Gen Debugger is over, and we need to use the source debugger. Since the problem is not in generation, we need to find out where in the procedural code this value was changed.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoListParagraph" style="text-indent:-0.25in;margin:0in 0in 10pt 0.5in;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;3.&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Issue the source-debugger command &amp;lsquo;&lt;b&gt;br on change sys.p.x&lt;/b&gt;&amp;rsquo; and continue. This will stop at the code which is responsible for the discrepancy (see the following figure).&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/6.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/6.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;In summary:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Through this example, we saw that what might seem to be an ignored constraint can actually be caused by a problem elsewhere (that is, that the constraint has not been ignored.)&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;And in the process, we learned how to use the Gen Debugger to help locate the actual source of the problem, and we saw several aspects of the Gen Debugger, including:&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst" style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;font size="3"&gt;&amp;middot;&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;its offline and online debug capabilities (Steps 1 &amp;amp; 2, respectively) &lt;/font&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent:-0.25in;margin:0in 0in 10pt 0.5in;tab-stops:184.5pt;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;font size="3"&gt;&amp;middot;&lt;/font&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;its connection to the source debugger (Step 3)&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;In the next post, we will see additional possible causes for the &amp;ldquo;ignored constraint&amp;rdquo; behavior, and in the process we will further examine Gen Debugger functionality.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Calibri"&gt;&lt;i&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri"&gt;&lt;i&gt;&lt;font size="3"&gt;Reuven Naveh, IntelliGen team, Specman R&amp;amp;D&lt;/font&gt;&lt;/i&gt;&lt;/font&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1310410" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IntelliGen/default.aspx">IntelliGen</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification/default.aspx">verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/debug/default.aspx">debug</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/constraints/default.aspx">constraints</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Gen+debugger/default.aspx">Gen debugger</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Gen/default.aspx">Gen</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/generation/default.aspx">generation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/test+generation/default.aspx">test generation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/constraint+not+enforced/default.aspx">constraint not enforced</category></item><item><title>Analyzing Error Reports When Specman Crashes</title><link>http://www.cadence.com/Community/blogs/fv/archive/2012/04/17/analyzing-specman-error-reports-when-specman-crashes.aspx</link><pubDate>Tue, 17 Apr 2012 16:46:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1309899</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1309899</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2012/04/17/analyzing-specman-error-reports-when-specman-crashes.aspx#comments</comments><description>One of the most frustrating events while running a tool would be to experience a tool crash. &lt;p&gt;In Specman you would usually see something like:&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;*** Error: OS signal 11 (segmentation violation) received&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; See the stack trace in ./specman.err&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;To debug:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;---------&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;o Rerun the same test with the same seed in interpreted mode, after&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; setting &amp;quot;break on error&amp;quot;. Load also any previously compiled modules.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; ** One user module is compiled.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;o For help on debugging e code, see &amp;quot;Debugger Commands&amp;quot; and &amp;quot;Source&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; Code Debugging&amp;quot; in the online help.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;o If any user C code is linked into the Specman environment, try&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; debugging it using a C debugger to ensure that you are not accessing&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; any null pointers or memories not allocated by the C program.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;If the problem is still not resolved, please send to Cadence support :&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;1.&amp;nbsp; Description of how you have tried to resolve the problem&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;2.&amp;nbsp; ./specman.err&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;3.&amp;nbsp; /home/avif/draft/crash.elog&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;(Error itself might vary, as we will see shortly)&lt;/p&gt;&lt;p&gt;However, there are some things you can do in such cases that will help you to either resolve the issue, or narrow it down&amp;nbsp;so that&amp;nbsp;Cadence Support&amp;nbsp;can find&amp;nbsp;a faster resolution. &lt;/p&gt;&lt;p&gt;In such event of a Specman crash, Specman will create a specman.err file. Your overall goal would be to determine the cause of the crash and then try to correct or eliminate the cause. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This post comes to help you understand what the elements in the Specman error report are, and how to use the report details, in order to identify the cause and what actions to take. &lt;/p&gt;&lt;h2&gt;&lt;u&gt;Error report layout&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;When Specman crashes, it creates an error report file (specman.err) in the run directory. This file contains the information that can help you identify the cause of the error, so that you can take steps to correct or eliminate the problem.&lt;/p&gt;&lt;p&gt;This specman.err file includes the following parts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Top section&lt;/b&gt; - specifies the error&lt;/li&gt;&lt;li&gt;&lt;b&gt;Raw stack trace&lt;/b&gt; - stack that contains the interpreted symbols of the compiled code (generated when the compiler is compiling Specman). You might not find this stack trace very useful, but its contents can be very important to Cadence Support and R&amp;amp;D, especially in cases where the crash was caused by a bug in an internal Specman module.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Interpreted stack trace&lt;/b&gt; - provides interpretation of the symbols found in the raw stack trace. It essentially translates C-functions to their corresponding Specman internal methods.&lt;/li&gt;&lt;li&gt;&lt;b&gt;User View stack trace&lt;/b&gt; - Stack trace at the time of the failure, provided in user recognizable terms. &lt;b&gt;This is the stack trace that you are likely to find most useful&lt;/b&gt;, because it generally identifies the module and line in the user code where the problem started. &lt;/li&gt;&lt;li&gt;&lt;b&gt;# of compiled modules&lt;/b&gt; - single line that specifies how many files are compiled in this testbench.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Bottom section (environment data)&lt;/b&gt; - the bottom of the error file provides environment data such as the platform you are running on, the patches included in the simulation, packages loaded (including Specman and UVCs, and their versions).&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;u&gt;Identifying the problem&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Following a Specman crash, first thing you should do is examine the specman.err file, proceeding in the following sequence:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1. Examine the error message(s) in the &lt;b&gt;top section&lt;/b&gt; to determine the error type (see the list below).&lt;/li&gt;&lt;li&gt;2. Examine the &lt;b&gt;User View stack trace&lt;/b&gt; and identify to which module and line it points. &lt;/li&gt;&lt;li&gt;3. Open the identified module and examine the contents of the identified line. It should provide important details regarding the nature of the problem. &lt;/li&gt;&lt;li&gt;4. Handle the problem appropriately, according to the error type (listed below). &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This post specifies problem identification, and will provide&amp;nbsp;handling guidelines, for the following error types:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1. OS11&lt;/li&gt;&lt;li&gt;2. OS11 during garbage collection&lt;/li&gt;&lt;li&gt;3. Unhandled OS11&lt;/li&gt;&lt;li&gt;4. Memory exceeded absolute_max_size &lt;/li&gt;&lt;li&gt;5. Specman internal error&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OS11 errors&lt;/h2&gt;&lt;p&gt;Let&amp;#39;s say you got an OS signal 11 error:&lt;/p&gt;&lt;p&gt;========================================================&lt;/p&gt;&lt;p&gt;OS signal 11 (segmentation violation) at Tue Aug 10 10:46:37 2010&lt;/p&gt;&lt;p&gt;OS signal 11 (segmentation violation) received&lt;/p&gt;&lt;p&gt;========================================================&lt;/p&gt;&lt;p&gt;As stated in the error message, the first thing to do is check is if the crash happened in compiled mode (that is, if the e-testbench is compiled):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If so, you should run it in interpreted mode (that is, so that the e-testbench is loaded), and see if you can get a meaningful error message in this mode. &lt;/li&gt;&lt;li&gt;If you cannot run in interpreted mode, you should recompile the environment with the &lt;b&gt;-debug&lt;/b&gt; flag &lt;b&gt;(&amp;lsquo;sn_compile.sh -debug ...&amp;#39;&lt;/b&gt; or &lt;b&gt;&amp;lsquo;irun -sncompargs &amp;lsquo;-debug&amp;#39;...&amp;#39;&lt;/b&gt;). Specman will then add additional checks, which might provide meaningful error messages than provided by the crash. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If the crash persists also after trying one of the above and you don&amp;#39;t get any meaningful message, you will&amp;nbsp;need to analyze the crash.&lt;/p&gt;&lt;h3&gt;Recommended handling&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;1. Examine the &lt;b&gt;User View stack trace&lt;/b&gt; and identify to which module and line it points. &lt;/li&gt;&lt;li&gt;2. Open the module and examine the line to which the &lt;b&gt;User View stack trace&lt;/b&gt; points. See if it contains a call to a C routine.&lt;/li&gt;&lt;li&gt;3. Check &lt;b&gt;Interpreted stack trace&lt;/b&gt; and see if it points to a user library. For example:&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;***** Interpreted stack trace:&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 0)&amp;nbsp; 0x85f2601&amp;nbsp; ahb_create_instance&amp;nbsp; + 0x9&amp;nbsp; [./&lt;b&gt;libahb_mytb.so&lt;/b&gt;]&lt;/p&gt;&lt;p&gt;If (2) or (3) are correct, it probably means that the error comes from your C code, and you now need to debug your own library/C code. In this case:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;4. You might try setting the environment variable SN_HANDLE_ALL to none (&amp;lsquo;&lt;b&gt;setenv SN_HANDLE_ALL none&lt;/b&gt;&amp;#39;), and rerun. This instructs Specman not to catch any signal. This will allow other tools to catch their signals, and might facilitate a more informative stack.&lt;/li&gt;&lt;li&gt;5. In either case, to debug your C code using gdb, you should &lt;ul&gt;&lt;li&gt;&amp;nbsp;Recompile your C code with &lt;b&gt;-g&lt;/b&gt;. &lt;/li&gt;&lt;li&gt;&amp;nbsp;Rerun with gdb attached and debug your C code.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;For more information regarding debugging C Interface code, please refer to &amp;quot;Incisive Enterprise Specman Elite Testbench Integrators Guide&amp;quot;, Chapter 1.16 - Debugging C/C++ Code&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;h2&gt;2. OS signal 11 during garbage collection&lt;/h2&gt;&lt;p&gt;The following is an example of an OS 11 message issued during garbage collection (GC). This error hints that GC probably found inconsistency with the e types that might have been caused by a memory corruption.&lt;/p&gt;&lt;p&gt;================================================================&lt;/p&gt;&lt;p&gt;Internal Error at Wed Nov&amp;nbsp; 9 04:40:14 2011&lt;/p&gt;&lt;p&gt;: Fatal error&lt;/p&gt;&lt;p&gt;OS signal 11 (segmentation violation) &lt;b&gt;during garbage collection&lt;/b&gt; - must exit.&lt;/p&gt;&lt;p&gt;================================================================&lt;/p&gt;&lt;h3&gt;Recommended handling&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Set &amp;lsquo;&lt;b&gt;config mem -check_consistency=TRUE&lt;/b&gt;&amp;#39;, and rerun. Specman will print the path to the corrupted struct, if one exists. This information might help Cadence Support to debug the issue. &lt;/li&gt;&lt;li&gt;If Specman&amp;#39;s check consistency option did not return anything, try to get more information on the memory consumption by turning on the memory debug flags and rerunning; the recommended flags are: &amp;lsquo;&lt;b&gt;config mem -show_mem_raw=TRUE&amp;#39;&lt;/b&gt; and &amp;#39;&lt;b&gt;config mem -print_debug_msgs=TRUE&amp;#39;&lt;/b&gt;. Then send the log to Cadence Support. &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;3. Unhandled OS signal 11&lt;/h2&gt;&lt;p&gt;The following is an example of an Unhandled OS signal 11 message:&lt;/p&gt;&lt;p&gt;============================================================&lt;/p&gt;&lt;p&gt;OS signal 11 (segmentation violation) at Wed Mar 10 13:26:05 2010&lt;/p&gt;&lt;p&gt;Internal Specman Error: unhandled OS signal 11 (segmentation violation).&lt;/p&gt;&lt;p&gt;============================================================&lt;/p&gt;&lt;p&gt;An unhandled OS signal 11 message often indicates that Specman caught an OS signal which it should not have - for example, a signal that was sent to a third-party tool or to the simulator. &lt;/p&gt;&lt;p&gt;You should examine the &lt;b&gt;User View stack trace&lt;/b&gt; and the &lt;b&gt;Interpreted stack trace&lt;/b&gt; and see where they point. &lt;/p&gt;&lt;p&gt;In the following example, the &lt;b&gt;User View stack trace&lt;/b&gt; clearly points to the simulator:&lt;/p&gt;&lt;p&gt;***** User View stack trace:&lt;/p&gt;&lt;p&gt;( 0x0)&amp;nbsp; &lt;b&gt;simulator&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In another example, the &lt;b&gt;Interpreted stack trace&lt;/b&gt; points to the simulator:&lt;/p&gt;&lt;p&gt;***** Interpreted stack trace:&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 0)&amp;nbsp; 0x80c42bc&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 1)&amp;nbsp; 0x80c4a0e&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 2)&amp;nbsp; 0x80c5ef5&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 3)&amp;nbsp; 0x80c635e&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 4)&amp;nbsp; 0x839d775&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 5)&amp;nbsp; 0x86a3612&amp;nbsp; TclInvokeStringCommand&amp;nbsp; + 0x73&amp;nbsp; [&lt;b&gt;ncsim&lt;/b&gt;]&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 6)&amp;nbsp; 0x86a4f5f&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 7)&amp;nbsp; 0x86a597f&amp;nbsp; Tcl_EvalEx&amp;nbsp; + 0x36e&amp;nbsp; [&lt;b&gt;ncsim&lt;/b&gt;]&lt;/p&gt;&lt;p&gt;(&amp;nbsp; 8)&amp;nbsp; 0x86a617f&amp;nbsp; Tcl_EvalObjEx&amp;nbsp; + 0x19f&amp;nbsp; [&lt;b&gt;ncsim&lt;/b&gt;]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Recommended handling &lt;/h3&gt;&lt;p&gt;In order to identify the actual source of the crash, set environment variable SN_HANDLE_ALL to none (&amp;lsquo;&lt;b&gt;setenv SN_HANDLE_ALL none&lt;/b&gt;&amp;#39;), and then rerun. This instructs Specman not to catch any signal; this will allow other tools to catch their signals, and might also facilitate a more informative stack. &lt;b&gt;Note&lt;/b&gt;: This flag should only be used for debug purposes.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;4. Memory requested from the operating system exceeds limit&lt;/h2&gt;&lt;p&gt;The following is an example of the messages issued when Specman reaches the user-defined maximum memory allowance granted to Specman (absolute_max_size):&lt;/p&gt;&lt;p&gt;========================================================&lt;/p&gt;&lt;p&gt;Internal Error at Mon Nov&amp;nbsp; 7 22:29:34 2011&lt;/p&gt;&lt;p&gt;: Fatal error&lt;/p&gt;&lt;p&gt;Total memory requested from operating system &lt;/p&gt;&lt;p&gt;exceeds get_config(memory,absolute_max_size) (5242880000)&lt;/p&gt;&lt;p&gt;========================================================&lt;/p&gt;&lt;p&gt;You should try to determine why the memory&amp;#39;s absolute_max_size was reached. For example, it might be that&lt;/p&gt;&lt;ul&gt;&lt;li&gt;this memory settings is not high enough for this environment and you need to increase the absolute_max_size value (config memory -absolute_max_size=&amp;lt;higher value&amp;gt;).&lt;/li&gt;&lt;li&gt;the environment&amp;#39;s memory consumption is too high and you need to profile your testbench. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To resolve the later memory consumption problem&lt;b&gt;, search for &amp;quot;Specman memory consumption is too high&amp;quot; in Specman documentation, and ascertain what steps you should take to tackle the problem.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;5. Specman internal error&lt;/h2&gt;&lt;p&gt;Although there is little you can do if a bug in a Specman module causes an internal error, there are some steps you can take in order to help Cadence Support identify the issue faster.&lt;/p&gt;&lt;p&gt;Internal errors are generally accompanied by additional information that helps to narrow the suspected area of code. If an internal error ((a) in the message below) is accompanied by a message that points to a line in an internal Specman module (d), it generally indicates that the error was caused by a bug in that Specman module (which is detailed in (b) and (c)). &lt;/p&gt;&lt;ul&gt;&lt;li&gt;(a) &lt;b&gt;Internal Error&lt;/b&gt; at Wed Jan 25 13:13:38 2012&lt;/li&gt;&lt;li&gt;(b) : assert more_general != NULL&lt;/li&gt;&lt;li&gt;&lt;div&gt;(c)&amp;nbsp;&amp;nbsp; In &amp;#39;gen_constraint.get_status_for_me_role()&amp;#39; at line 896 in &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;(d)&amp;nbsp;&amp;nbsp; &lt;b&gt;/vobs/specman/src/&lt;/b&gt;gen_static_gcroles.e&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The accompanying User View stack trace shows the calls which lead to the crash:&lt;/p&gt;&lt;p&gt;***** User View stack trace:&lt;/p&gt;&lt;p&gt;&lt;b&gt;(&amp;nbsp;&amp;nbsp; 0)&amp;nbsp; analyzing constraint at line 39 in @intc_basic_types&lt;/b&gt;&lt;/p&gt;&lt;p&gt;(&amp;nbsp;&amp;nbsp; 1)&amp;nbsp; gen context #145 tb_env_config_s&lt;/p&gt;&lt;p&gt;(&amp;nbsp;&amp;nbsp; 2)&amp;nbsp; generation static analysis (finalize)&lt;/p&gt;&lt;p&gt;(&amp;nbsp;&amp;nbsp; 3)&amp;nbsp; generation static analysis&lt;/p&gt;&lt;p&gt;(&amp;nbsp;&amp;nbsp; 4)&amp;nbsp; pre specman run&lt;/p&gt;&lt;p&gt;(&amp;nbsp;&amp;nbsp; 5)&amp;nbsp; specman&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Recommended handling&lt;/h3&gt;&lt;p&gt;When you encounter a Specman internal error, you should send the specman.err file to Cadence Support, along with the module file to which the &lt;b&gt;User View stack trace&lt;/b&gt; points to. If you cannot send the module file, try sending the code around the line in that module to which the &lt;b&gt;User View stack trace&lt;/b&gt; points. &lt;/p&gt;&lt;p&gt;Happy Debugging!&lt;/p&gt;&lt;p&gt;&lt;em&gt;Semadar Sadeh &amp;amp; Avi Farjoun&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1309899" width="1" height="1"&gt;</description><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Functional+Verification/default.aspx">Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Testbench+simulation/default.aspx">Testbench simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/signal+integrity/default.aspx">signal integrity</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/eRM/default.aspx">eRM</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SystemVerilog/default.aspx">SystemVerilog</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e/default.aspx">e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman/default.aspx">Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/OVM+e/default.aspx">OVM e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Aspect+Oriented+Programming/default.aspx">Aspect Oriented Programming</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AOP/default.aspx">AOP</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/EDA/default.aspx">EDA</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IES-XL/default.aspx">IES-XL</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/team+specman/default.aspx">team specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/OVM+ML/default.aspx">OVM ML</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/simulation/default.aspx">simulation</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/specman+crashes/default.aspx">specman crashes</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/stack+trace/default.aspx">stack trace</category></item></channel></rss>
