<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Cadence Functional Verification Blogs</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><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cadence/community/blogs/fv" /><feedburner:info uri="cadence/community/blogs/fv" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:explicit>no</itunes:explicit><itunes:subtitle></itunes:subtitle><feedburner:emailServiceId>cadence/community/blogs/fv</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/cadence/community/blogs/fv" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcadence%2Fcommunity%2Fblogs%2Ffv" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item><title>How Can You Continue Learning About Advanced Verification at Your Desk?  </title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/yY8ZGSVsPTQ/how-to-keep-learning-about-advanced-verification-at-your-desk.aspx</link><pubDate>Mon, 03 Jun 2013 21:39:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1324197</guid><dc:creator>umery</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1324197</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/06/03/how-to-keep-learning-about-advanced-verification-at-your-desk.aspx#comments</comments><description>&lt;p&gt;How much time do you spend &amp;quot;playing&amp;quot; and &amp;quot;learning&amp;quot; before you try a new EDA tool, feature, or flow?&lt;br /&gt;Do you really take a training class and sift through the documentation or books about the subject before you start project work? Or are you the type who has the knack of figuring things out on your own by taking a deep dive, head first?&lt;/p&gt;&lt;p&gt;Learning is an iterative and repetitive process.&amp;nbsp; Human beings spend most of their lives learning through a structured learning program in their school years, then an expensive and elective college adventure, leading to years of learning during their professional lives.&amp;nbsp; The big challenge that I have faced with learning is how to find the right learning vehicle that helps me discover what I didn&amp;#39;t already know in a short period of time.&amp;nbsp; &amp;nbsp;If you struggle with this aspect, you should look at Cadence Rapid Adoption Kits (or, RAKs).&lt;/p&gt;&lt;p&gt;Rapid Adoption Kits from Cadence help engineers learn foundational aspects of Cadence tools and design and verification methodologies using a &amp;quot;DIY&amp;quot; approach.&amp;nbsp;&amp;nbsp; Don&amp;#39;t get me wrong, instructor-led, structured training programs work beautifully if you can invest the time and money. But there is always demand for learning something simply and quickly in some corner of the world.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Today, we have made available eight RAKs focused to help our users learn various aspects of digital IP and SoC functional verification methodologies and tools.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/RAK.JPG"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/RAK.JPG" border="0" width="550" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The RAKs provide an introduction to state-of-the-art verification solutions including Universal Verification Methodology (UVM), based on the industry-standard UVM Reference Flow donated by Cadence for digital and mixed-signal verification using Incisive Enterprise Simulator and Metric Driven Verification methodology (MDV). For implementation, the flow uses Incisive Enterprise Manager, as well as SoC verification techniques such as I/O connectivity using Incisive Enterprise Verifier and optimization of simullation performance&amp;nbsp; for large SoCs.&lt;/p&gt;&lt;p&gt;The examples referenced in the Rapid Adoption Kit exercises are based on the Cadence SoC Verification Kit.&amp;nbsp; You can view presentations, app notes, videos and/or download the package that also contains lab exercises, relevant scripts and instructions. &lt;/p&gt;&lt;p&gt;Download your RAK today at &lt;a href="http://support.cadence.com/raks"&gt;http://support.cadence.com/raks.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Happy Learning!&lt;/p&gt;&lt;p&gt;Umer Yousafzai &lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1324197" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/yY8ZGSVsPTQ" height="1" width="1"/&gt;</description><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/metric+driven+verification+_2800_MDV_2900_/default.aspx">metric driven verification (MDV)</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/methodology/default.aspx">methodology</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/metric-driven+verification/default.aspx">metric-driven verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/connectivity/default.aspx">connectivity</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/metric+driven+verification/default.aspx">metric driven verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/metric-driven/default.aspx">metric-driven</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/_3A00_+Functional+Verification/default.aspx">: Functional Verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/advanced+verification/default.aspx">advanced verification</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/Incremental+Elaboration/default.aspx">Incremental Elaboration</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/RAK/default.aspx">RAK</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/06/03/how-to-keep-learning-about-advanced-verification-at-your-desk.aspx</feedburner:origLink></item><item><title>Introducing UVM Multi-Language Open Architecture</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/2CABqTEZU7I/introducing-uvm-multi-language-open-architecture.aspx</link><pubDate>Sat, 01 Jun 2013 02:06:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1324145</guid><dc:creator>Adam Sherilog</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1324145</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/06/01/introducing-uvm-multi-language-open-architecture.aspx#comments</comments><description>&lt;p&gt;The new&amp;nbsp;&lt;a href="http://forums.accellera.org/files/file/65-uvm-ml-open-architecture/" target="_blank"&gt;&amp;nbsp;&lt;/a&gt;&lt;a href="http://forums.accellera.org/files/file/65-uvm-ml-open-architecture/" target="_blank"&gt;UVM Multi-Language (ML) Open Architecture (OA) posted to the new UVMWorld&lt;/a&gt;&amp;nbsp;is the result of a collaboration between Cadence and AMD.&amp;nbsp; It uniquely integrates &lt;i&gt;e&lt;/i&gt;, SystemVerilog, SystemC, C/C+, and other languages into a cohesive verification hierarchy and runs on multiple simulators.&amp;nbsp; Moreover, the new solution is open for additional collaboration and technology enhancement.&amp;nbsp;&lt;/p&gt;&lt;p class="p1"&gt;Since Cadence introduced &lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2009/02/27/ovm-multi-language-libraries-a-closer-look.aspx" target="_blank"&gt;&lt;span class="s1"&gt;ML verification&lt;/span&gt;&lt;/a&gt; four years ago, the need for it has never been greater.&amp;nbsp; Complex SoCs are verified with a combination of industry-standard languages and frameworks including IEEE 1647 (&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;), 1800 (SystemVerilog), 1666 (SystemC), and Accellera UVM, as well as C/C++, VMM, Perl, and others.&amp;nbsp; The previous ML solution enabled the standard connections but had some limitations.&amp;nbsp; Among the limitations included are a focus on &amp;ldquo;quick-stitch&amp;rdquo; integration that allowed for data communication but required significant additional coding to synchronize the communication. In addition, the solution was built primarily for the Incisive Enterprise Simulator.&lt;/p&gt;&lt;p class="p1"&gt;Bryan Sniderman, Verification Architect for AMD, introduces the requirements that drove the development, the limitations in existing solutions, and the features you can expect in this &lt;a href="http://www.cadence.com/cadence/success_stories/Pages/video.aspx?vfile=/misc_pages/cadence_videos/video1.aspx?vfile=2416471878001&amp;amp;federated_f9=61773537001&amp;amp;videoPlayer=999&amp;amp;playerID=61773537001&amp;amp;w=700&amp;amp;h=442&amp;amp;oheight=550" target="_blank"&gt;UVM ML OA video&lt;/a&gt;.&amp;nbsp; In the video, Bryan describes how the new solution enables hierarchical integration of the frameworks, seamless phasing, seamless configuration, and has the ability to run on multiple simulators.&lt;/p&gt;&lt;p class="p1"&gt;You can also learn more about the solution in our &lt;span class="s1"&gt;webinar, &amp;ldquo;&lt;a href="http://www.cadence.com/cadence/events/Pages/event.aspx?eventid=783" target="_blank"&gt;Introducing UVM Multi-Language Open Architecture&lt;/a&gt;,&amp;rdquo; archived&lt;/span&gt; on Cadence.com. If you are at DAC, stop by the Cadence Theater on Wednesday at 4:30pm to hear Mike Stellfox present the solution and take part in our Q/A that will follow.&amp;nbsp; Of course, you can also stop by the booth to learn more as well or send an email to&amp;nbsp;&lt;a href="mailto:support_uvm_ml@cadence.com" target="_blank"&gt;support_uvm_ml@cadence.com&lt;/a&gt;&amp;nbsp;if you have any questions.&amp;nbsp; Finally, note that you will need to register in the&amp;nbsp;&lt;a href="http://forums.accellera.org/" target="_blank"&gt;Accellera Forums&lt;/a&gt;&amp;nbsp;to download the UVM ML OA and that registration is open to all.&lt;/p&gt;&lt;p class="p1"&gt;Think of the UVM ML OA as a new beginning.&amp;nbsp; As you read through and watch the background materials, you&amp;rsquo;ll probably see a mix of exciting new features and opportunities to further improve the solution.&amp;nbsp; We welcome that input.&amp;nbsp; The solution you see here represents a solid foundation, but there is more that we can do and we are happy to expand the collaboration to bring in those new ideas.&lt;/p&gt;&lt;p class="p2"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="p1"&gt;=Adam Sherer on behalf of the AMD and Cadence collaboration&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="p2"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1324145" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/2CABqTEZU7I" height="1" width="1"/&gt;</description><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/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/e/default.aspx">e</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/uvm/default.aspx">uvm</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+ML/default.aspx">UVM ML</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVMWorld/default.aspx">UVMWorld</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/SoCs/default.aspx">SoCs</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AMD/default.aspx">AMD</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/UVM+Multi-Language/default.aspx">UVM Multi-Language</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/06/01/introducing-uvm-multi-language-open-architecture.aspx</feedburner:origLink></item><item><title>New Specman Coverage Engine - Extensions Under Subtypes</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/TEeyejwQ8PQ/new-coverage-engine-extentions-under-subtypes.aspx</link><pubDate>Tue, 28 May 2013 13:31:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1323954</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1323954</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/05/28/new-coverage-engine-extentions-under-subtypes.aspx#comments</comments><description>&lt;p&gt;This is first in a series of&amp;nbsp;three blog posts that are going to present some powerful enhancements&amp;nbsp;that were added to Specman 12.2 in order to ease the modeling of a multi-instance coverage environment. In this blog we&amp;#39;re going to focus on the first enhancement, while the other two enhancements will be described in the following coverage blogs.&lt;/p&gt;&lt;p&gt;Starting with Specman 12.2, one can define the coverage options per subtype. Using per-instance, Specman checks the subtypes of each instance, and applies only the relevant subtype options. We will demonstrate the power of this in both &amp;quot;per unit instance&amp;quot; and &amp;quot;per subtype instance.&amp;quot; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;u&gt;I. &lt;b&gt;Utilizing when extensions for modeling &lt;i&gt;per subtype instances&lt;/i&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;One intuitive use of extensions of covergroups under &amp;quot;when&amp;quot; subtypes relates to covergroups which are collected per subtype using the per_instance item option:&lt;/p&gt;&lt;p&gt;type packet_size_t: [SMALL, LARGE];&lt;/p&gt;&lt;p&gt;struct packet{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; size: packet_size_t;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; length: uint(bits:4);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; event sent; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; cover sent is{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; item size using per_instance;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; item length;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;};&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The results of the above covergroup are collected per each value of the size item, so in practice this covergroup is collected separately per each &amp;quot;size&amp;quot; subtype.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s assume that small packets can only have length &amp;lt; 8, and big packets can only have length &amp;gt;= 8. The following code&amp;nbsp;was needed in pre 12.2 releases for refining the irrelevant values of each subtype:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend packet{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover sent(size==SMALL) is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item length using also ignore=(length &amp;gt;= 8);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover sent(size==BIG) is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item length using also ignore=(length &amp;lt; 8);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This code can now be replaced with a native &amp;quot;when&amp;quot; subtype extension:&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend packet{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; when SMALL packet{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover sent is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item length using also ignore=(length &amp;gt;= 8);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;i&gt;when BIG packet{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover sent is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item length using also ignore=(length &amp;lt; 8);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;II. &lt;b&gt;Utilizing when extensions for modeling &lt;i&gt;per unit instances&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Extension of covergroups under &amp;quot;when&amp;quot; subtypes can also be used to model the different instances of a covergroup that are collected per-unit instance, according to the exact subtype of the containing instance.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s see&amp;nbsp;a code example that illustrates the power of this capability.&amp;nbsp; In this code we model a packet generator unit that generates packets of different sizes. The packet generator unit has a field which describes the maximal size of a packet that a packet_generator instance can generate:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;type packet_size_t: [SMALL, MEDIUM,LARGE,HUGE];&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;struct packet{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; size: packet_size_t;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;unit packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; max_packet_size: packet_size_t;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; event packet_generated;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cur_packet: packet;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; generate_packet() is{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gen cur_packet keeping {it.size.as_a(int) &amp;lt;= max_packet_size.as_a(int)};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; emit packet_generated;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend sys{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_gen1: packet_generator is instance;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; keep packet_gen1.max_packet_size == LARGE;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_gen2: packet_generator is instance;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; keep packet_gen2.max_packet_size == MEDIUM;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_gen3: packet_generator is instance;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; keep packet_gen3.max_packet_size == HUGE;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Oh, right, there&amp;#39;s that coverage thing we need to define in order&amp;nbsp;to check that each valid packet size was generated in each instance of the packet_generator :&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover packet_generated using per_unit_instance is{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item p_size: packet_size_t = cur_packet.size;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;OK, so the above code enables the coverage collection of p_size separately for each instance of packet_generator. Let&amp;#39;s generate 100 packets in each packet generator instance. Surely we&amp;#39;ll get 100% coverage?&lt;/p&gt;&lt;p&gt;Well, we won&amp;#39;t. When launching Incisive Metric Center (IMC), three of the coverage instances are not fully covered. For example the grade of the instance under sys.packet_gen1 is only 75%:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/erez2.png"&gt;&lt;img height="221" width="610" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/erez2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The reason for that is the constraint that prevents the generation of HUGE size packets in instance sys.packet_gen1, so no matter how many packets are generated in that instance, the &amp;lsquo;HUGE&amp;#39; bucket (bin) will never be covered.&lt;/p&gt;&lt;p&gt;We need to refine the valid buckets according to the generatable packet size in each instance. We can use the instance specific covergroups extensions for that:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend packet_generator{ &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover packet_generated(e_path==sys.packet_gen1) is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;LARGE.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover packet_generated(e_path==sys.packet_gen2) is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;MEDIUM.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; cover packet_generated(e_path==sys.packet_gen3) is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;HUGE.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Now we can achieve 100% grade for each instance:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/erez1.png"&gt;&lt;img height="293" width="608" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/erez1.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;But in 12.2 we can use the following subtype extensions instead:&lt;/p&gt;&lt;p&gt;&lt;i&gt;extend packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; when SMALL&amp;#39;max_packet_size packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover packet_generated is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;SMALL.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; when MEDIUM&amp;#39;max_packet_size packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover packet_generated is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;MEDIUM.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; when LARGE&amp;#39;max_packet_size packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover packet_generated is also{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;LARGE.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; when HUGE&amp;#39;max_packet_size packet_generator{&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cover packet_generated is also{// for extend packet_type_t: [GIGANTIC]; ...&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item p_size using also ignore = p_size.as_a(int) &amp;gt; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packet_size_t&amp;#39;HUGE.as_a(int);&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; };&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;};&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;At first look, the later solution doesn&amp;#39;t look more efficient than the former one. It includes 4 extensions of the covergroup instead of 3 extensions that were needed before. But what would have happened if instead of only 3 packet_generator instances we would have 100 instances? If we extend each instance by itself, as we&amp;#39;ve done in the first solution, we will need to extend each one of the 100 covergroup instances.&lt;/p&gt;&lt;p&gt;While&amp;nbsp;using the &amp;quot;when subtype extension&amp;quot; solution, the 4 extensions above satisfy the requirement for any number of instances.&lt;/p&gt;&lt;p&gt;Even more important, the solution which uses &amp;quot;when subtype extension&amp;quot; is reusable, since it doesn&amp;#39;t use the full path of the covergroup instances. So it is much more suitable for verification IPs and for module verification environments which are later integrated into system level verification.&lt;/p&gt;&lt;p&gt;But before you run and start extending your covergroups under subtypes, I&amp;#39;d like to mention that there is another newly supported option in the &lt;em&gt;&lt;strong&gt;e&lt;/strong&gt;&lt;/em&gt; language which is even a better suited for that exact scenario which is described above - -it is called the &amp;quot;instance_ignore&amp;quot; item option.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;What is this &amp;quot;instance_ignore&amp;quot; option?&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Why it is better suited for the above scenario?&lt;/li&gt;&lt;li&gt;For which scenarios is the &amp;lsquo;extension under when subtypes&amp;#39; better suited?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Answers for all of the above questions (and more) will be found in the next Specman coverage blog -- &amp;quot;Using Instance Based Coverage Options for Coverage Parameterization&amp;quot;&lt;/p&gt;&lt;p&gt;Team Specman&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1323954" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/TEeyejwQ8PQ" height="1" width="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/coverage+driven+verification+_2800_CDV_2900_/default.aspx">coverage driven verification (CDV)</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/Incisive/default.aspx">Incisive</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/metric-driven+verification/default.aspx">metric-driven verification</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/coverage/default.aspx">coverage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AF/default.aspx">AF</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman+coverage+engine/default.aspx">Specman coverage engine</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/extensions+under+subtypes/default.aspx">extensions under subtypes</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/multi-instance+coverage/default.aspx">multi-instance coverage</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/when+extensions/default.aspx">when extensions</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+coverage/default.aspx">verification coverage</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/05/28/new-coverage-engine-extentions-under-subtypes.aspx</feedburner:origLink></item><item><title>Mode Support for SimVision “Stop Simulation” Button</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/oyOk-ut8YMU/mode-support-for-simvision-stop-simulation-button.aspx</link><pubDate>Wed, 08 May 2013 13:32:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1319900</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1319900</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/05/08/mode-support-for-simvision-stop-simulation-button.aspx#comments</comments><description>&lt;p&gt;Prior to Incisive Enterprise Simulator (IES) 12.1, clicking the SimVision &amp;quot;Stop Simulation&amp;quot; button would stop the simulation both in an HDL context and in a Specman context if Specman was present in the simulation. To provide&amp;nbsp;better flexibility in the exact place where you want to pause, the &amp;quot;Stop in Specman only&amp;quot; functionality has been introduced. &amp;nbsp;&lt;/p&gt;&lt;p&gt;As of IES 12.1,whenever Specman is present in the simulation, the SimVision &amp;quot;Stop Simulation&amp;quot; button provides a drop-down menu that lets you choose between two switchable modes: &amp;quot;Stop Simulation&amp;quot; (wherever the simulation is now), and &amp;quot;Stop in Specman&amp;quot; (see the following figure).&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/s1.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/s1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;SimVision will immediately perform the &amp;quot;Stop&amp;quot; operation in the mode you select, and keep that mode persistent. It will also indicate the selected mode in the button icon and tooltip (see the following figure).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/s2.png"&gt;&lt;img height="37" width="112" src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/s2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Note the &amp;quot;&lt;b&gt;e&lt;/b&gt;&amp;quot; over the button. The &amp;quot;&lt;b&gt;e&lt;/b&gt;&amp;quot; indicates that you selected &amp;quot;Stop Specman&amp;quot; mode. (Had you chosen Stop Simulation, no indicator would appear over the button.)&lt;/p&gt;&lt;p&gt;When you click the &amp;quot;Stop&amp;quot; button while SimVision operates in &amp;quot;Stop Specman&amp;quot; mode, the simulation will stop only when it is in Specman, not before. &lt;/p&gt;&lt;p&gt;To toggle between the Stop Simulation modes, just make your new choice in the dropdown menu.&lt;/p&gt;&lt;p&gt;Note that if you run the simulation without Specman, or invoke standalone Specman, the drop-down menu is absent and the &amp;quot;Stop&amp;quot; button works in &amp;quot;Stop Simulation&amp;quot; mode (see the following figure).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/s3.png"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/s3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;Alex Chudnovsky&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1319900" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/oyOk-ut8YMU" height="1" width="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/IES/default.aspx">IES</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/Incisive/default.aspx">Incisive</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/SimVision/default.aspx">SimVision</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/AF/default.aspx">AF</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/stop+Specman/default.aspx">stop Specman</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/stop+simulation/default.aspx">stop simulation</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/05/08/mode-support-for-simvision-stop-simulation-button.aspx</feedburner:origLink></item><item><title>Develop For Debugability – Part II</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/H9KSMFjceHc/develop-for-debugability-part-ii.aspx</link><pubDate>Tue, 23 Apr 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1319712</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1319712</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/04/23/develop-for-debugability-part-ii.aspx#comments</comments><description>&lt;b&gt;Looking at Coding Styles for Debug&lt;/b&gt; &lt;p&gt;In this blog post we are going to discuss 3 different cases where&amp;nbsp;coding style can help you debug easier: &lt;/p&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Declarative vs. Sequential Coding &lt;p&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Method Call Depth &lt;/p&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Calculating if-else Conditions &lt;h4&gt;&lt;/h4&gt;&lt;p&gt;&lt;b&gt;Declarative vs. Sequential Coding&lt;/b&gt; &lt;/p&gt;&lt;p&gt;When modeling your testbench you will need to write code that describes time-consuming or&amp;nbsp;complex steps of some intended behavior. This will be considered sequential code. &lt;/p&gt;&lt;p&gt;You will also most likely need code that keeps the current state of your object accessible to other objects, as well as tracking these object states over time. This will be considered declarative code.&lt;/p&gt;&lt;p&gt;While developing your testbench you will find yourself asking quite often: &amp;quot;Should I make this declarative or sequential?&amp;quot; As a general guideline, reducing the number of sequential lines of code and keeping as much information as possible in the declarative code will help you to debug a lot quicker.&lt;/p&gt;&lt;p&gt;Specman has a superb data-browser and step-debugger and it is important to keep this in mind. When debugging code you usually want to see where the testbench and the RTL go out of sync. The common approach would be to fire up your failing simulation and set the breakpoints:&lt;/p&gt;&lt;p&gt;Specman&amp;gt; break on error&lt;/p&gt;&lt;p&gt;Specman&amp;gt; break on gen err&lt;/p&gt;&lt;p&gt;This will make your simulation stop on an error and open up the debugger, highlighting the precise line where the error occurred. In an ideal case, you can already tell from your error description what went wrong. This however is rather rare and you should get acquainted with the current state of your testbench and gather all declarative information you can get through Specman&amp;#39;s data browser. This will give you an understanding of where the simulation has headed, and chances that you will understand the error are pretty good if you tracked enough information in your declarative code. If you are fortunate enough you can already resolve the error or at least have a conversation with the person that might have to fix this scenario.&lt;/p&gt;&lt;p&gt;However, there are still quite a few cases where you need to rerun the simulation. Here you will have to dive into the remaining sequential code and do a step-by-step debugging session. Step-debugging is very tedious and will get more cumbersome the more sequential code you have to examine. It gets even more cumbersome if you are relying on a lot of temporary variables inside your methods. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Method Call Depth&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;While developing sequential code you will be defining and implement a bunch of methods. Crafting methods is usually a straightforward process. In verification you need to think aboiut whether you need a time-consuming method (TCM) or a timeless method. As a general rule, if you are modeling event-based models or checks, then you need a TCM -- otherwise try to stick with a regular, timeless method. &lt;/p&gt;&lt;p&gt;Mostly you will be developing methods for:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Interface and Virtual Sequences&lt;/li&gt;&lt;li&gt;Interface Monitors (not block-level monitors)&lt;/li&gt;&lt;li&gt;Bus-Functional Models (BFMs)&lt;/li&gt;&lt;li&gt;Reference Models&lt;/li&gt;&lt;li&gt;Scoreboards&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Due to this separation of functionality, given by the UVM-&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;, there is already a given blueprint for how to integrate these methods with each other. &lt;/p&gt;&lt;p&gt;One issue that may come from developing methods is that one may feel tempted to create methods for reusability and hence encapsulate even trivial steps in a method and have that method called, instead of typing out these steps. The problem with debugging code that relies heavily on method calls is that you always step into a new method and lose the scope of your method&amp;#39;s callee. &lt;/p&gt;&lt;p&gt;The opposite problem of creating too many methods&amp;nbsp;implements mega-monolithic methods. These kinds of methods are hard to debug and understand as well, since they usually not only carry the context of one specific modeled aspect.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Pre-Calculating if-else Conditions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The essence of code execution is handling conditional branching constructs. Generally there is nothing wrong about simply writing a condition into your if-else actions. However, complex Boolean expressions should be evaluated before entering the expression query. By creating a temporary variable and assigning a Boolean evaluation to it, you will gain two advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a meaningful variable name&lt;/li&gt;&lt;li&gt;Break on the if-execution with the condition already evaluated&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To read part 1 of this blog series, &lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2013/04/08/develop-for-debugability-part-1.aspx?postID=1319710"&gt;click here.&lt;/a&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;Daniel Bayer&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1319712" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/H9KSMFjceHc" height="1" width="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/Incisive+Enterprise+Simulator+_2800_IES_2900_/default.aspx">Incisive Enterprise Simulator (IES)</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/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/AF/default.aspx">AF</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman_2F00_e/default.aspx">Specman/e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/debugability/default.aspx">debugability</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Daniel+Bayer/default.aspx">Daniel Bayer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/debuggability/default.aspx">debuggability</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/04/23/develop-for-debugability-part-ii.aspx</feedburner:origLink></item><item><title>Develop for Debugability – Part 1</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/4Zh0tY0DB1E/develop-for-debugability-part-1.aspx</link><pubDate>Mon, 08 Apr 2013 14:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1319710</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1319710</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/04/08/develop-for-debugability-part-1.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;Debugging is the most time-critical activity of any verification engineer. Finding a bug is very often a combination of having a good hunch, experience, and the quality of testbench code that you need to analyze. Since having a good hunch and experience is something everyone needs to acquire for themselves, I am going to focus on potential code optimizations that help reduce debug time.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;Encapsulate your Aspects&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As in any other object-oriented language, modeling should be a planned rather than an ad-hoc process. However, as a verification engineer you are heavily reliant on others to help you in the planning process to develop your testbench. As such, you will quite often be forced to do ad-hoc programming to model a new requirement, or rewrite already existing code to meet a slight change in an already existing requirement. The UVM-&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; guidelines already provide a very solid basis; however even within those guidelines, your scoreboard can be very prone to becoming a dumpster for anything that you have to do on an ad-hoc basis.&lt;/p&gt;&lt;p&gt;You might be fine with just using your scoreboard for modeling all the RTL-to-testbench output checking. However, your testbench might have to handle more complex input-to-output transformations to provide the testbench output. This is where using the scoreboard as a dumpster for anything you can think of is a bad idea, and you should think about using a dedicated reference model to provide a well encapsulated input-to-output transformation or even an input predictor, based on the output you received.&lt;/p&gt;&lt;p&gt;As an &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; user you are in luck, because it is very easy to perform ad-hoc programming in &lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt; and avoid &amp;quot;the dumpster.&amp;quot; In a series of steps, I am going to guide you through how to integrate your reference model into your block-level monitor unit. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Declare your scoreboard&lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lt;&amp;rsquo;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:8pt;"&gt;// This is just a place-holder for your scoreboard&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;unit&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_scbd_u &lt;b&gt;like&lt;/b&gt; uvm_base_unit {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Place-holder method for input-to-output transformation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;transform_received_to_expected( src_tr: src_prot_tr_s ): target_prot_tr_s is &lt;b&gt;empty&lt;/b&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lsquo;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;/span&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;Instantiate your scoreboard in the Block-Level Monitor&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lt;&amp;rsquo;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;unit&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_block_monitor_u &lt;b&gt;like&lt;/b&gt; uvm_base_unit {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// the scoreboard instance&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scbd: my_scbd_u &lt;b&gt;is instance&lt;/b&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;extend&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_scbd_u {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// reference, do not generate&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;!p_block_mon: my_block_monitor_u;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;connect_pointers() is also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p_block_mon = &lt;b&gt;get_enclosing_unit&lt;/b&gt;( my_block_monitor_u );&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lsquo;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3.&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;Create your reference model aspect feature and instantiate it in the monitor&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lt;&amp;rsquo;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;unit&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_model_aspect_a_u &lt;b&gt;like&lt;/b&gt; uvm_base_unit {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// reference to your monitor unit&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;!p_block_mon:&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;my_block_monitor_u;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;// All your fields, events, methods etc go in here&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:gray;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// ... &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;my_transformation_algorithm( src_tr: src_prot_tr_s ): target_prot_tr_s &lt;b&gt;is&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// algorithm that models the transformation from input to output&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;connect_pointers() is also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;p_block_mon = get_enclosing_unit( my_block_monitor_u );&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Add a name for your model&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;short_name(): string is also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;result&lt;/b&gt; = &lt;i&gt;&lt;span style="color:#0070c0;"&gt;&amp;rdquo;ASPECT_A&amp;rdquo;&lt;/span&gt;&lt;/i&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;extend&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_block_monitor_u {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;model_aspect_a: my_model_aspect_a_u &lt;b&gt;is instance&lt;/b&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lsquo;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4.&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;Integrate the first model aspect into the scoreboard&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lt;&amp;rsquo;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;extend&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_scbd_u {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Reference the aspect&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;!p_model_aspect_a: my_model_aspect_a_u;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Add the transformation hook&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;transform_received_to_expected( src_tr: src_prot_tr ): target_prot_tr &lt;b&gt;is&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;result&lt;/b&gt; = p_model_aspect_a.my_transformation_algorithm( src_tr );&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;connect_pointers() is also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;p_model_aspect_a = p_block_mon.model_aspect_a;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lsquo;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;5.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Adding more aspects to the verification environment. &lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lt;&amp;rsquo;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;extend&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt; my_scbd_u {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Reference another aspect&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;!p_model_aspect_b: my_model_aspect_b_u;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// Add the transformation hook for another model aspect&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;transform_received_to_expected( src_tr: src_prot_tr ): target_prot_tr &lt;b&gt;is&lt;/b&gt; &lt;b&gt;also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;// This could be an example of a filter that alters or removes transactions&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;result&lt;/b&gt; = p_model_aspect_b.apply_filters(&lt;span&gt;&amp;nbsp; &lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;connect_pointers() is also&lt;/b&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;p_model_aspect_b = p_block_mon.model_aspect_b;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:8pt;"&gt;&amp;lsquo;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;In this flow, steps 1 through 4 have to be done once, and step 5 is simply just extending your transformation hook method with any additional algorithms you need to add to your scoreboard.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;By following these steps as a guideline, you can quickly change reference model aspects to your scoreboard without creating a dumpster and this will help you debug any issues tremendously. Don&amp;rsquo;t forget to extend the short_name() method in your units for your messaging! &lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:11pt;"&gt;Daniel Bayer&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1319710" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/4Zh0tY0DB1E" height="1" width="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/Incisive+Enterprise+Simulator+_2800_IES_2900_/default.aspx">Incisive Enterprise Simulator (IES)</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/debug/default.aspx">debug</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/AF/default.aspx">AF</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/debugging/default.aspx">debugging</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/encapsulating+aspects/default.aspx">encapsulating aspects</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/debugability/default.aspx">debugability</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/encapsulate/default.aspx">encapsulate</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Daniel+Bayer/default.aspx">Daniel Bayer</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/04/08/develop-for-debugability-part-1.aspx</feedburner:origLink></item><item><title>Incisive Debug Analyzer is a Finalist for EETimes and EDN ACE Software Product of the Year</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/-_Xi2cKvD7k/incisive-debug-analyzer-is-a-finalist-for-eetimes-and-edn-ace-software-product-of-the-year.aspx</link><pubDate>Mon, 25 Mar 2013 17:17:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1321821</guid><dc:creator>Karnane</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1321821</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/03/25/incisive-debug-analyzer-is-a-finalist-for-eetimes-and-edn-ace-software-product-of-the-year.aspx#comments</comments><description>&lt;p&gt;Great news.... Incisive Debug Analyzer (IDA) is one of five finalists for the EETimes/EDN &lt;a target="_blank" href="http://ubm-ace.com/"&gt;Annual Creativity in Electronics&amp;nbsp;&lt;/a&gt;(ACE) Awards in the Software Product of the Year category. In addition to IDA, Lip-Bu Tan and Cadence are also finalists for ACE Executive of the Year and Company of the Year, respectively.&lt;/p&gt;&lt;p&gt;Check out the &lt;a href="http://finance.yahoo.com/news/ubm-techs-ee-times-edn-170000072.html"&gt;Press Release&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The awards program honors the people and companies behind the technologies and products that are changing the world of electronics.&amp;nbsp;Winners will be announced April 23 during Design West in San Jose.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Team_Specman/ACE.jpg"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/2012/Team_Specman/ACE.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Companies today spend more than 50% of their verification effort in debug because bugs are hard to find at&amp;nbsp;both the HDL level or at the testbench level.&amp;nbsp; This has created a critical market need for sophisticated debug solutions that can find bugs quickly, thereby lowering design costs and speeding time to market.&lt;/p&gt;&lt;p&gt;In 2012, Cadence met this market need with the introduction of the Incisive Debug Analyzer (IDA) - a new and unique multi-language, &amp;quot;interactive&amp;quot; post-process debug solution that can help customers find bugs in minutes instead of hours.&lt;b&gt;&amp;nbsp; &lt;/b&gt;As the&lt;b&gt; only &lt;/b&gt;debug tool in the market to deliver comprehensive and innovative debug functionality in a single, integrated, and synchronized debug environment, the new IDA can cut customer debug time by 40-50% and by more than 2X on really complex bugs. &lt;/p&gt;&lt;p&gt;&lt;b&gt;About IDA&lt;/b&gt;&lt;/p&gt;&lt;p&gt;IDA provides sophisticated debug solutions to address RTL, testbench and SoC verification debug needs. Additionally, IDA provides an interactive debug flow in a post-process debug environment. This means that customers have all the functionality of an interactive debug flow while debugging in a post-process mode. Since users have access to all the data files, they only need to run the simulation once -- a significant time saver in debug.&lt;/p&gt;&lt;p&gt;IDA has several unique debug capabilities which are all very tightly integrated and synchronized into a single-multi-pane debug window. Here are just a few:&lt;/p&gt;&lt;ul class="unIndentedList"&gt;&lt;li&gt;&lt;b&gt;Playback Debugger: &lt;/b&gt;Unique functionality which allows customers to either step or jump through time to any source code line or variable change, both forward and backward in time. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Cause Analysis:&lt;/b&gt; Intuitive, flow-oriented debug environment which presents suggestions about where to look, in order to debug.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SmartLog:&lt;/b&gt; Integrated message window that shows logfile messages from HDL, testbench, C/C++/SystemC/Assertions, etc.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Learn more about &lt;a href="http://www.cadence.com/products/fv/pages/default.aspx"&gt;Incisive Debug Analyzer&lt;/a&gt;.&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;p&gt;Cadence is taking the lead in debug, and there are loads of new features, improved ease of use, and better performance planned for Incisive debug solutions in 2013 and beyond. &amp;nbsp;Contact your Cadence representative for more information, in-depth demos/presentations, or hands-on technical workshops.&lt;/p&gt;&lt;p&gt;Happy Debugging!&lt;/p&gt;&lt;p&gt;Kishore Karnane&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;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1321821" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/-_Xi2cKvD7k" height="1" width="1"/&gt;</description><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/Incisive+Enterprise+Simulator+_2800_IES_2900_/default.aspx">Incisive Enterprise Simulator (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/EDA/default.aspx">EDA</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/debug/default.aspx">debug</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/ACE/default.aspx">ACE</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/EE+Times/default.aspx">EE Times</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/Cadence/default.aspx">Cadence</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/Specman+e/default.aspx">Specman e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman_2F00_e/default.aspx">Specman/e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Incisive+Debug+Analyzer/default.aspx">Incisive Debug Analyzer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/IDA_3A00_+Functional+Verification/default.aspx">IDA: Functional Verification</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/03/25/incisive-debug-analyzer-is-a-finalist-for-eetimes-and-edn-ace-software-product-of-the-year.aspx</feedburner:origLink></item><item><title>Specman: Getting Source Information on Macros</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/sIMnakJ5yYc/getting-source-information-on-macros.aspx</link><pubDate>Tue, 12 Mar 2013 23:31:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1318984</guid><dc:creator>teamspecman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1318984</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/03/12/getting-source-information-on-macros.aspx#comments</comments><description>&lt;p&gt;When you write a &lt;b&gt;define-as&lt;/b&gt; or &lt;b&gt;define-as-computed&lt;/b&gt; &lt;i&gt;e&lt;/i&gt; macro, you sometimes need the replacement code to contain or to depend on the source information regarding the specific macro call, including the source module and the source line number. &lt;/p&gt;&lt;p&gt;For example, a macro may need to print source information, or it may need to create different code when used in one module than it needs to create when used in other modules. &lt;/p&gt;&lt;p&gt;You can achieve this as follows.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Define-as macro&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In a &lt;b&gt;define-as&lt;/b&gt; macro, you can use the following two special kinds of replacement terms inside the replacement block:&lt;/p&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;b&gt;&amp;lt;current_line_num&amp;gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;This is replaced with the decimal numeric representation of the source line number in which the macro is called.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;b&gt;&amp;lt;current_module_name&amp;gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;This is replaced with the name of the module in which the macro is called.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;For example, the following macro modifies the given left hand side expression (such as a field or a variable) to the given value, and prints an informational message reporting this change.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;&amp;#39;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;define &amp;lt;my&amp;#39;action&amp;gt; &amp;quot;modify_and_print &amp;lt;field&amp;#39;exp&amp;gt; &amp;lt;value&amp;#39;exp&amp;gt;&amp;quot; as {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field&amp;#39;exp&amp;gt; = &amp;lt;value&amp;#39;exp&amp;gt;;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; out(&amp;quot;*** The value of &amp;lt;field&amp;#39;exp&amp;gt; was changed to &amp;quot;, &amp;lt;value&amp;#39;exp&amp;gt;,&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; at line &amp;lt;current_line_num&amp;gt; in @&amp;lt;current_module_name&amp;gt;&amp;quot;);&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;};&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;lsquo;&amp;gt;&lt;/p&gt;&lt;p&gt;Assume the following code is then written in a module called my_module.e:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;&amp;#39;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;extend sys {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; !x: int;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run() is also {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modify_and_print x 10;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;};&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lsquo;&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This code will assign the value 10 to the field x, and will print the following output:&lt;/p&gt;&lt;p&gt;*** The value of x was changed to 10 at line 5 in @my_module&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Define-as-computed macro&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In a &lt;b&gt;define-as-computed&lt;/b&gt; macro, the following two pre-defined routines can be used to query the current source line number and the current module.&lt;/p&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;b&gt;get_current_line_num(): int&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;This routine returns the source line number in which the macro is called.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;b&gt;get_current_module(): rf_module&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;This routine returns the reflection representation of the module in which the macro is called.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;To get the module name string, similarly to &amp;lt;current_module_name&amp;gt; in define-as macros, use the get_name() method of rf_module.&lt;/p&gt;&lt;p&gt;For example, the following macro adds a new field of type int to the struct in the context of which it is called. The field name is constructed from the current module name and line number. However, if the module name has the &amp;quot;_xxx&amp;quot; suffix, no field is added.&lt;/p&gt;&lt;p&gt;&amp;lt;&amp;#39;&lt;/p&gt;&lt;p&gt;&lt;em&gt;define &amp;lt;my_field&amp;#39;struct_member&amp;gt; &amp;quot;special_field&amp;quot; as computed {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var m_name: string = get_current_module().get_name();&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if m_name !~ &amp;quot;/_xxx$/&amp;quot; then {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = append(&amp;quot;f_&amp;quot;, m_name, &amp;quot;_&amp;quot;,&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&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;nbsp;&amp;nbsp;&amp;nbsp; get_current_line_num(), &amp;quot;: int&amp;quot;);&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;};&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;lsquo;&amp;gt;&lt;/p&gt;&lt;p&gt;The following code, if written in a module called some_module.e, adds two integer fields to sys: f_some_module_3 and f_some_module_4:&lt;/p&gt;&lt;p&gt;&amp;lt;&amp;#39;&lt;/p&gt;&lt;p&gt;&lt;em&gt;extend sys {&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; special_field;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; special_field;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;};&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lsquo;&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Note however that if the same code is written in a module called some_module_xxx.e, nothing is done.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Yuri Tsoglin&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;e Language team, Specman R&amp;amp;D&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.cadence.com/Community/aggbug.aspx?PostID=1318984" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/sIMnakJ5yYc" height="1" width="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/team+specman/default.aspx">team specman</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/e+language/default.aspx">e language</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/AF/default.aspx">AF</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/messages/default.aspx">messages</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/source+information+on+macros/default.aspx">source information on macros</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/03/12/getting-source-information-on-macros.aspx</feedburner:origLink></item><item><title>Launch Time – Udacity CS348 Functional Hardware Verification Hits the Web Today, March 12, 2013</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/LXbRndSmBLU/launch-time-udacity-cs348-functional-hardware-verification-hits-the-web-today-mar-12-2013.aspx</link><pubDate>Tue, 12 Mar 2013 14:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1321285</guid><dc:creator>Axel Scherer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1321285</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/03/12/launch-time-udacity-cs348-functional-hardware-verification-hits-the-web-today-mar-12-2013.aspx#comments</comments><description>&lt;p&gt;Coinciding with the first day of CDNLive! Silicon Valley,&amp;nbsp;our &lt;a href="http://www.udacity.com/"&gt;Udacity&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/MOOCs"&gt;MOOCs&lt;/a&gt; course on &lt;a href="https://www.udacity.com/course/cs348"&gt;Functional Hardware Verification&lt;/a&gt; will go live today! Developing this course has been a very rewarding experience and we are happy this day has finally come.&lt;/p&gt;&lt;p&gt;Last week we gave you a sneak &lt;a href="http://goo.gl/W69IG"&gt;preview of the interactivity&lt;/a&gt; featured in the course. However, as you all know there is nothing like trying something by yourself to really get it.&lt;/p&gt;&lt;p&gt;So now it is your turn. Go ahead - &lt;a href="https://www.udacity.com/course/cs348"&gt;enroll and check it out&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To give you more motivation to enroll, we are providing you another glimpse of the course. This time the clip is from unit 2, where we model packets for a data router.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s verify! &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/community/posts/Axel-Scherer.aspx"&gt;Axel Scherer&lt;/a&gt;&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=1321285" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/LXbRndSmBLU" height="1" width="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/IEEE+1647/default.aspx">IEEE 1647</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/e+language/default.aspx">e language</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/Cadence/default.aspx">Cadence</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/MOOC/default.aspx">MOOC</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Udacity/default.aspx">Udacity</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/CS348/default.aspx">CS348</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Scherer/default.aspx">Scherer</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/verification+course/default.aspx">verification course</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/hardware+verification/default.aspx">hardware verification</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/on-line+course/default.aspx">on-line course</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/on-line+class/default.aspx">on-line class</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/03/12/launch-time-udacity-cs348-functional-hardware-verification-hits-the-web-today-mar-12-2013.aspx</feedburner:origLink></item><item><title>DVCon 2013: Functional Verification Is EDA’s “Killer App”</title><link>http://feedproxy.google.com/~r/cadence/community/blogs/fv/~3/Fa47RTqqoFE/dvcon-2013-functional-verification-is-eda-s-killer-app.aspx</link><pubDate>Mon, 11 Mar 2013 06:28:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1321226</guid><dc:creator>jvh3</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.cadence.com/Community/blogs/fv/rsscomments.aspx?PostID=1321226</wfw:commentRss><comments>http://www.cadence.com/Community/blogs/fv/archive/2013/03/10/dvcon-2013-functional-verification-is-eda-s-killer-app.aspx#comments</comments><description>&lt;p&gt;With another year of record attendance, DVCon has again proven that a functional verification-focused mix of trade show and technical conference is what customers need to get their jobs done.&amp;nbsp; Here are some of the some of the highlights I took away from this informative event:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/Joe_Hupcey_III/dvcon%202013%20composite.jpg"&gt;&lt;img src="http://www.cadence.com/Community/CSSharedFiles/blogs/fv/Joe_Hupcey_III/dvcon%202013%20composite.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;DVCon 2013 was a one stop shop for panels, papers, posters,&lt;br /&gt;live demos, and tutorials on functional verification&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;* Great panels on Verification Planning and Drastically Improving D&amp;amp;V&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Two panels at the conference provided valuable food for thought in their own ways.&amp;nbsp; First, in regard to the Cadence lunch panel on &amp;quot;Best Practices in Verification Planning&amp;quot;, EDA industry observer&lt;a href="http://www10.edacafe.com/blogs/whatwouldjoedo/2013/02/28/dvcon-2013-best-practices-in-verification-planning/"&gt; Peggy Aycinena wrote&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;i&gt;Sometimes magic happens at panel discussions at technical conferences, and that was the case mid-day on Wednesday at DVCon in San Jose this week, where the conversation was lively, entertaining and informative on the pedestrian, albeit foundational, topic of &amp;quot;Best Practices in Verification Planning.&amp;quot;&amp;nbsp; Ironically, the hour-long conversation did not appear to be planned at all, but to be organic and spontaneous ...&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Granted I&amp;#39;m biased - but I have to agree whole heartedly.&amp;nbsp; The panelists were generous in sharing their experiences with the mixture of art&amp;nbsp;and science required by verification project planning, and I urge you to review either of&amp;nbsp;&lt;a href="http://www10.edacafe.com/blogs/whatwouldjoedo/2013/02/28/dvcon-2013-best-practices-in-verification-planning/"&gt;Peggy&amp;#39;s account of the panel&lt;/a&gt;&amp;nbsp;or Industry Insights&amp;#39;&amp;nbsp;&lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2013/03/05/dvcon-2013-expert-panel-how-to-succeed-with-verification-planning.aspx"&gt;Richard&amp;#39;s Goering&amp;#39;s in depth report&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Later that day &amp;quot;panel magic&amp;quot; happened again at the Industry Leaders panel on &amp;quot;The Road to 1M Design Starts&amp;quot;.&amp;nbsp; To everyone&amp;#39;s delight, the panelists embraced the spirit of brainstorming how design and verification can be made significantly (think 20x, even 100x) more efficient.&amp;nbsp; Sound impossible?&amp;nbsp; One panelist gamely recalled that not many years ago there was a &amp;quot;software crisis&amp;quot; where the best software managers could expect was a net of 10 tested lines of code per day per engineer.&amp;nbsp; Fast forward to the present, and teenagers with a lot of imagination but limited programming experience are creating money-making apps on incredibly complex mobile platforms thanks to very well thought out development tools and libraries.&amp;nbsp; The panel challenged the audience to consider the lessons of such anecdotes in increasing abstraction and automation for EDA tool providers and their customers alike.&lt;/p&gt;&lt;p&gt;Richard Goering covers this panel in depth&amp;nbsp;&lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2013/03/01/dvcon-2013-panel-1-million-ic-design-starts-how-can-we-get-there.aspx"&gt;here&lt;/a&gt;&amp;nbsp;in his Industry Insights blog.&lt;/p&gt;&lt;p&gt;&lt;b&gt;* Apps as the new EDA paradigm&lt;/b&gt;&lt;/p&gt;&lt;p&gt;At last year&amp;#39;s DVCon one of my product teams (&lt;a href="http://www.cadence.com/community/posts/teamverify.aspx"&gt;&amp;quot;Team Verify&amp;quot;&lt;/a&gt;) introduced the idea formal apps in&amp;nbsp;&lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2012/03/12/photo-essay-video-playlist-and-comments-on-dvcon-2012-in-san-jose.aspx"&gt;our tutorial&lt;/a&gt;.&amp;nbsp; (In a nutshell, a formal app enables usage of powerful formal engines &amp;quot;under-the-hood&amp;quot; by an engineer who has never used formal before, to solve specific problems.)&amp;nbsp; At the time we were the only ones promoting this concept and offering the underlying product support.&amp;nbsp; What a difference a year makes -- not only have our immediate competitors adapted this approach, but the &amp;quot;app&amp;quot; term was being applied to both formal, multi-engine, and pure dynamic simulation offerings and every thing in between.&amp;nbsp; Of course, it&amp;#39;s hard to be surprised by this given the EDA-related appeal is obvious: because apps are focused on specific, painful problems -- i.e. they are customer-centric by definition and in practice -- they are a clear win for both end users and vendors.&lt;/p&gt;&lt;p&gt;&lt;b&gt;* The &lt;/b&gt;&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;&lt;b&gt;/Specman Surge&lt;/b&gt;&lt;/p&gt;&lt;p&gt;After years of having waves of Specman-related abstracts be rejected seemingly out of hand, this year the assembly finally got to see what Specmaniacs have been eager to share with this verification community.&amp;nbsp; One look at the posters by Meirav Nitzan of Xilinx (&lt;i&gt;1P.21, Taming the Beast: A Smart Generation of Design Attributes (Parameters) for Verification Closure using Specman&lt;/i&gt;) and Horace Chan of PMC Sierra (&lt;i&gt;1P.25&amp;nbsp;&amp;nbsp; Maximize Vertical Reuse, Building Module to System Verification Environments with UVM &lt;/i&gt;&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;) and it&amp;#39;s obvious that &amp;lsquo;&lt;b&gt;&lt;i&gt;e&lt;/i&gt;&lt;/b&gt;&amp;#39; and Specman usage are both thriving and they remain at the forefront of verification innovation.&lt;/p&gt;&lt;p&gt;Until next DVCon, may your power consumption be low and your throughput be high.&lt;/p&gt;&lt;p&gt;Joe Hupcey III&lt;/p&gt;&lt;p&gt;On Twitter: @jhupcey, &lt;a href="http://twitter.com/jhupcey"&gt;http://twitter.com/jhupcey&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Reference Links&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;DVCon 2013 Proceedings, &lt;a href="http://dvcon.org/"&gt;http://dvcon.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;DVCon 2013 YouTube playlist of speaker and panelist video interviews:&lt;br /&gt;&lt;a href="http://www.youtube.com/playlist?list=PLYdInKVfi0Kantj1U3H8pk9NkxFykT0rG"&gt;http://www.youtube.com/playlist?list=PLYdInKVfi0Kantj1U3H8pk9NkxFykT0rG&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Richard Goering Industry Insights report: DVCon 2013 Expert Panel: How to Succeed with Verification Planning&lt;br /&gt;&lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2013/03/05/dvcon-2013-expert-panel-how-to-succeed-with-verification-planning.aspx"&gt;http://www.cadence.com/Community/blogs/ii/archive/2013/03/05/dvcon-2013-expert-panel-how-to-succeed-with-verification-planning.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Richard Goering Industry Insights report: DVCon 2013 Panel: 1 Million IC Design Starts - How Can We Get There?&lt;br /&gt;&lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2013/03/01/dvcon-2013-panel-1-million-ic-design-starts-how-can-we-get-there.aspx"&gt;http://www.cadence.com/Community/blogs/ii/archive/2013/03/01/dvcon-2013-panel-1-million-ic-design-starts-how-can-we-get-there.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Peggy Aycinena, EDA Caf&amp;eacute;: DVCon 2013: Best Practices in Verification Planning&lt;br /&gt;&lt;a href="http://www10.edacafe.com/blogs/whatwouldjoedo/2013/02/28/dvcon-2013-best-practices-in-verification-planning/"&gt;http://www10.edacafe.com/blogs/whatwouldjoedo/2013/02/28/dvcon-2013-best-practices-in-verification-planning/&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=1321226" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/cadence/community/blogs/fv/~4/Fa47RTqqoFE" height="1" width="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/metric+driven+verification+_2800_MDV_2900_/default.aspx">metric driven verification (MDV)</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/DVcon/default.aspx">DVcon</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/formal/default.aspx">formal</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/methodology/default.aspx">methodology</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/metrics/default.aspx">metrics</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Joe+Hupcey+III/default.aspx">Joe Hupcey III</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Richard+Goering/default.aspx">Richard Goering</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/UVM+e/default.aspx">UVM e</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/papers/default.aspx">papers</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Specman+e/default.aspx">Specman e</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/Team+Verify/default.aspx">Team Verify</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/e+code/default.aspx">e code</category><category domain="http://www.cadence.com/Community/blogs/fv/archive/tags/DVCon+2013/default.aspx">DVCon 2013</category><feedburner:origLink>http://www.cadence.com/Community/blogs/fv/archive/2013/03/10/dvcon-2013-functional-verification-is-eda-s-killer-app.aspx</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
