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

<channel>
	<title>AgileSoC</title>
	<atom:link href="http://www.agilesoc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilesoc.com</link>
	<description>Bringing Agile Methods  to Soc Development</description>
	<lastBuildDate>Wed, 22 May 2013 22:31:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>MiniTB: Finally&#8230; a Testbench Framework for Designers</title>
		<link>http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=minitb-finally-a-testbench-framework-for-designers</link>
		<comments>http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/#comments</comments>
		<pubDate>Wed, 22 May 2013 22:31:55 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MiniTB]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2685</guid>
		<description><![CDATA[Through the hardware industry&#8217;s continuing infatuation with leading verification technologies &#8211; constrained-random verification, functional coverage, numerous fancy methodologies, intelligent testbenches and a host of others &#8211; the needs of designers have been thoroughly ignored. That changes with MiniTB. What is &#8230; <a href="http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong><div style='float:right; width:350px;' ><div id='stb-box-9005' class='stb-download_box' ></strong></p>
<p><strong>Get the latest version of MiniTB</strong></p>
<div class="button_col" style="background-color:#000000;float:left;"><a href="https://github.com/nosnhojn/miniTB/archive/master.zip" style="color:#ffffff;" target="_blank">Download MiniTB</a><span></span></div><div class="clear"></div>
<p><strong></div></div></strong></p>
<p>Through the hardware industry&#8217;s continuing infatuation with leading verification technologies &#8211; constrained-random verification, functional coverage, numerous fancy methodologies, intelligent testbenches and a host of others &#8211; the needs of designers have been thoroughly ignored. That changes with MiniTB.<span id="more-2685"></span></p>
<p><strong>What is MiniTB?</strong></p>
<p>MiniTB is an open-source Verilog framework designers use to smoke test their code.</p>
<p>MiniTB is easy to use. After instantiating and connecting a module-under-test, a designer can write and run any number of smoke tests to verify their code&#8217;s sanity. Smoke tests are compiled into a single executable which means little time lost to compilation and fast turnaround. Test status is determined by simple assertions and MiniTB exits with an overall PASS/FAIL summary status. MiniTB supports Cadence Incisive, Mentor Graphics Questa and Synopsys VCS.</p>
<p><strong>Getting Started with MiniTB</strong></p>
<p>MiniTB comes with a packaged example to help get you started. In the APB slave example, you&#8217;ll see tests in apb_slave_minTB.sv that look like this:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.12.29-PM.png"><img class="alignnone size-full wp-image-2693" alt="Screen Shot 2013-05-22 at 4.12.29 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.12.29-PM.png" width="448" height="219" /></a></p>
<p>When you run the smoke tests in the MiniTB example, you&#8217;ll get a log that looks like this:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.11.30-PM.png"><img class="alignnone size-full wp-image-2694" alt="Screen Shot 2013-05-22 at 4.11.30 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.11.30-PM.png" width="455" height="157" /></a></p>
<p>That&#8217;s 4 passing tests that how our example module-under-test is sane and ready for exhaustive testing.</p>
<p>The complete 2-step instructions for running the example are can be found in the &#8216;examples/module/apb_slave/README&#8217;.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.08.03-PM.png"><img class="alignnone size-full wp-image-2695" alt="Screen Shot 2013-05-22 at 4.08.03 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-4.08.03-PM.png" width="406" height="318" /></a></p>
<p><strong>Full MiniTB Support for Early Adopters</strong></p>
<p>If you&#8217;re a designer interested in using MiniTB, we want to give you a hand. We&#8217;ll maintain a short first-come, first-served list of early adopters that will get our full attention as they get going with MiniTB. Being an early adopter also gives you the opportunity to shape future releases of MiniTB.</p>
<p><strong>To become a MiniTB early adopter, email us at: neil.johnson@agilesoc.com.</strong></p>
<p>-neil</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/" data-text="MiniTB: Finally&#8230; a Testbench Framework for Designers"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F22%2Fminitb-finally-a-testbench-framework-for-designers%2F&amp;linkname=MiniTB%3A%20Finally%E2%80%A6%20a%20Testbench%20Framework%20for%20Designers" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F22%2Fminitb-finally-a-testbench-framework-for-designers%2F&amp;title=MiniTB%3A%20Finally%E2%80%A6%20a%20Testbench%20Framework%20for%20Designers" id="wpa2a_2">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/05/22/minitb-finally-a-testbench-framework-for-designers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My First SVUnit Test Challenge</title>
		<link>http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-first-svunit-test-challenge</link>
		<comments>http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/#comments</comments>
		<pubDate>Fri, 17 May 2013 22:02:06 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2663</guid>
		<description><![CDATA[Let&#8217;s have some fun, shall we? I&#8217;m looking for people to show their commitment to hardware quality by taking the My First SVUnit Test Challenge. It&#8217;s easy and perfect for anyone new to SVUnit. My First SVUnit Test Challenge Step 1: download SVUnit by &#8230; <a href="http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s have some fun, shall we? I&#8217;m looking for people to show their commitment to hardware quality by taking the<strong> My First <strong>SVUnit </strong>Test Challenge</strong>. It&#8217;s easy and perfect for anyone new to SVUnit.<span id="more-2663"></span></p>
<hr />
<blockquote><p><strong>My First <strong>SVUnit </strong>Test Challenge</strong></p>
<p><strong><div style='float:right; width:350px;' ><div id='stb-box-529' class='stb-download_box' >Get the latest version of SVUnit from Sourceforge</strong></p>
<div class="button_col" style="background-color:#000000;float:left;"><a href="https://sourceforge.net/projects/svunit/files/latest/download" style="color:#ffffff;">Download SVUnit</a><span></span></div><div class="clear"></div>
<p><strong></div></div></strong></p>
<p><strong>Step 1:</strong> download SVUnit by pushing the big &#8216;Download SVUnit&#8217; button to the right.</p>
<p><strong>Step 2:</strong> unpack the tarball (&#8216;tar zxvf svunit-v1.*.tar.gz&#8217;) and follow the steps in the README to create a UUT and corresponding unit test that demonstrate your commitment.</p>
<p><strong>Step 3:</strong> take a snapshot of your code and test result and post it where you and everyone around you can see it.</p></blockquote>
<hr />
<p>An example you&#8217;re asking? I just happen to have one. My commitment to hardware quality is to verify a development_process won&#8217;t produce garbage code.</p>
<p>Here&#8217;s the UUT:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.24.30-PM.png"><img class="alignnone size-full wp-image-2665" alt="Screen Shot 2013-05-17 at 3.24.30 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.24.30-PM.png" width="265" height="89" /></a></p>
<p>Here&#8217;s my unit test that confirms my commitment:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.24.51-PM.png"><img class="alignnone size-full wp-image-2664" alt="Screen Shot 2013-05-17 at 3.24.51 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.24.51-PM.png" width="487" height="55" /></a></p>
<p>When I run my test, this is what I get out:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.23.54-PM.png"><img class="alignnone size-full wp-image-2666" alt="Screen Shot 2013-05-17 at 3.23.54 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-3.23.54-PM.png" width="891" height="156" /></a></p>
<p>Test passes. I&#8217;m committed. Easy-peasy.</p>
<p>Now it&#8217;s your turn. Download SVUnit and follow the instructions in the README to verify your commitment to hardware quality. When you&#8217;re done, take snapshots and post them where you can see it and be reminded of your commitment. Bonus marks for people that send me a snapshot of their commitment to post on AgileSoC.com (neil.johnson@agilesoc.com). Double bonus points for creativity <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>The world needs more people that are committed to hardware quality&#8230; so let&#8217;s get on with it.</p>
<p>-neil</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/" data-text="My First SVUnit Test Challenge"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F17%2Fmy-first-svunit-test-challenge%2F&amp;linkname=My%20First%20SVUnit%20Test%20Challenge" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F17%2Fmy-first-svunit-test-challenge%2F&amp;title=My%20First%20SVUnit%20Test%20Challenge" id="wpa2a_4">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/05/17/my-first-svunit-test-challenge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UVM Report Mock Update</title>
		<link>http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=uvm-report-mock-update</link>
		<comments>http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/#comments</comments>
		<pubDate>Fri, 17 May 2013 16:23:45 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[svunit]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2643</guid>
		<description><![CDATA[I&#8217;ve had some good feedback from a couple fellows using the report mock and today I released a new version to start incorporating it. SVUnit v1.4 includes a new UVM report mock. Two significant changes&#8230; First is that the macros are &#8230; <a href="http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong><div style='float:right; width:350px;' ><div id='stb-box-895' class='stb-download_box' >Get the latest version of SVUnit from Sourceforge</strong></p>
<div class="button_col" style="background-color:#000000;float:left;"><a href="https://sourceforge.net/projects/svunit/files/latest/download" style="color:#ffffff;">Download SVUnit</a><span></span></div><div class="clear"></div>
<p><strong></div></div></strong></p>
<p>I&#8217;ve had some good feedback from a couple fellows using the report mock and today I released a new version to start incorporating it. <a title="SVUnit" href="http://www.agilesoc.com/svunit/">SVUnit</a> v1.4</p>
<p>includes a new UVM report mock.</p>
<p>Two significant changes&#8230;<span id="more-2643"></span></p>
<p>First is that the macros are no longer required. It uses UVM facilities to eventually intercept the global uvm_report_(warning|error|fatal) functions. Logging messages with those globals directly or by using the stock `uvm_* macros both work the same now. Both can be verified using the mock. I&#8217;ve expanded the example that&#8217;s shipped with SVUnit to demonstrate. Here&#8217;s a snapshot of that code that shows our UUT using both the `uvm_error() macro and uvm_report_warning() function:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.13-AM.png"><img class="alignnone size-full wp-image-2646" alt="Screen Shot 2013-05-17 at 10.01.13 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.13-AM.png" width="441" height="106" /></a></p>
<p>&#8230;and here&#8217;s the 2 tests we use to verify the error and warning are triggered properly:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.32-AM.png"><img class="alignnone size-full wp-image-2645" alt="Screen Shot 2013-05-17 at 10.01.32 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.32-AM.png" width="348" height="200" /></a></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.46-AM.png"><img class="alignnone size-full wp-image-2644" alt="Screen Shot 2013-05-17 at 10.01.46 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.01.46-AM.png" width="350" height="192" /></a></p>
<p>Thanks to my colleague Jean-Marc Tremblay for handling this part of the upgrade.</p>
<p>Second change&#8230; with the initial mock, when something went awry and your logging doesn&#8217;t match up, the mock told you as much&#8230; but only by returning false via the verify_complete(). I didn&#8217;t have anything to help people diagnose why, but now I do. In v1.4, when the verify_complete() fails the mock dumps the expected and actual messages it&#8217;s logged so far. That dump looks like this:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-9.59.26-AM.png"><img class="alignnone size-full wp-image-2647" alt="Screen Shot 2013-05-17 at 9.59.26 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-9.59.26-AM.png" width="526" height="88" /></a></p>
<p>You get the expected and actual ID, MSG and severity at each index. So this dump from the mock would tell you, for example, that the error and fatal you were expecting were logged in the wrong order (i.e. you expected fatal then error, but you got error then fatal).</p>
<p>Last change&#8230; I had the order of the ID and MSG mixed up in the original so if you simply plugin this new version, I expect you&#8217;ll see a lot of failures (in UVM, the argument order is ID then MSG but I had MSG then ID). To clarify, prototypes for the expect functions are now&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.34-AM.png"><img class="alignnone size-full wp-image-2648" alt="Screen Shot 2013-05-17 at 10.13.34 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.34-AM.png" width="385" height="34" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.24-AM.png"><img class="alignnone size-full wp-image-2649" alt="Screen Shot 2013-05-17 at 10.13.24 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.24-AM.png" width="386" height="29" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.14-AM.png"><img class="alignnone size-full wp-image-2650" alt="Screen Shot 2013-05-17 at 10.13.14 AM" src="http://www.agilesoc.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-17-at-10.13.14-AM.png" width="388" height="32" /></a></p>
<p>This won&#8217;t match what you have now, so unfortunately you&#8217;ll have to go back and swap the arg order. Sorry about that <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</p>
<p>If you&#8217;re new to the UVM report mock, you catch up with <a title="Verifying UVM Error Conditions with SVUnit UVM Report Mock" href="http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/">my original post</a> from a few weeks ago.</p>
<p>Enjoy!</p>
<p>-neil</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/" data-text="UVM Report Mock Update"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F17%2Fuvm-report-mock-update%2F&amp;linkname=UVM%20Report%20Mock%20Update" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F05%2F17%2Fuvm-report-mock-update%2F&amp;title=UVM%20Report%20Mock%20Update" id="wpa2a_6">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/05/17/uvm-report-mock-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SVUnit v1.1 &#8211; Improved Module/RTL Support</title>
		<link>http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=svunit-v1-1-improved-modulertl-support</link>
		<comments>http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 05:18:44 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[svunit]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2631</guid>
		<description><![CDATA[Today, I posted a new v1.1 release of SVUnit on sourceforge. The &#8220;new&#8221; feature in version 1.1 is a refactored/simplified framework meant to increase usability, especially for people that want to do TDD or unit testing of RTL. Up until &#8230; <a href="http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today, I posted a new v1.1 release of SVUnit on <a href="http://sourceforge.net/projects/svunit" target="_blank">sourceforge</a>. The &#8220;new&#8221; feature in version 1.1 is a refactored/simplified framework meant to increase usability, especially for people that want to do TDD or unit testing of RTL.<span id="more-2631"></span></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/04/Screen-Shot-2013-04-25-at-10.48.28-PM.png"><img class="size-full wp-image-2632 alignright" alt="Screen Shot 2013-04-25 at 10.48.28 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/04/Screen-Shot-2013-04-25-at-10.48.28-PM.png" width="293" height="591" /></a>Up until now, I think SVUnit has been pretty decent for building systemverilog class and interface based verification IP because the class based structure of the framework was originally intended to support classes and interfaces. Modules though&#8230; not so much&#8230; so while class/interface support was a strength, module support &#8211; and consequently support for design IP &#8211; was a significant weakness. The intention of v1.1 is greater support for modules by changing to a module-based structure.</p>
<p>In v1.1, the unit test template is like a mini-testbench. There&#8217;s an instance of the UUT in the mini-testbench. The constructor from past releases that we used to create and connect any peripheral functionality has been replaced by a build() function that&#8217;s automatically called by the testsuite prior to anything else happening. There&#8217;s the same setup and teardown methods with a minor change then the test macros are the same as what was there. In terms of how tests are run and the sequence of events that are followed, nothing really changes.</p>
<p>I&#8217;ll be writing more about it in the next few weeks as I continue to simplify the code base. In the meantime, I&#8217;ve embedded a condensed dump of the unit test template created by create_unit_test.pl (condensed in that I&#8217;ve removed some of the comments and whitespace so it fits on my screen).</p>
<p>If you&#8217;ve got comments on the format relative to prior versions, I&#8217;d appreciate you posting them. If this is cleaner and more usable, I&#8217;d like to hear it. If not, of course I&#8217;d prefer to hear that, too <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>-neil</p>
<p>&nbsp;</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/" data-text="SVUnit v1.1 &#8211; Improved Module/RTL Support"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F26%2Fsvunit-v1-1-improved-modulertl-support%2F&amp;linkname=SVUnit%20v1.1%20%E2%80%93%20Improved%20Module%2FRTL%20Support" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F26%2Fsvunit-v1-1-improved-modulertl-support%2F&amp;title=SVUnit%20v1.1%20%E2%80%93%20Improved%20Module%2FRTL%20Support" id="wpa2a_8">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/04/26/svunit-v1-1-improved-modulertl-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intel Agile and Lean Development Conference &#8211; Part 2</title>
		<link>http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=intel-agile-and-lean-development-conference-part-2</link>
		<comments>http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 04:58:09 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile@intel]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2616</guid>
		<description><![CDATA[Great final day at the Intel Agile and Lean Development Conference. It started with a keynote talk by Jim Tremlett of Rally, I had morning talk and an afternoon talk and filled in the rest of the time with hallway &#8230; <a href="http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/04/2013-04-17-18.19.43.jpg"><img class="size-medium wp-image-2617 alignright" alt="2013-04-17 18.19.43" src="http://www.agilesoc.com/wp-content/uploads/2013/04/2013-04-17-18.19.43-300x225.jpg" width="300" height="225" /></a>Great final day at the Intel Agile and Lean Development Conference. It started with a keynote talk by Jim Tremlett of Rally, I had morning talk and an afternoon talk and filled in the rest of the time with hallway discussion. As always happens to me during an agile conference week, I&#8217;m tired and my head hurts. That was compounded by me giving 2 talks in the same day which I&#8217;ve never done before. But I made it and now it&#8217;s time to crash. But first&#8230;<span id="more-2616"></span></p>
<hr />
<p><strong>Scaled Agile Leadership &#8211; Lessons From the Military</strong></p>
<p>Jim Tremlett&#8217;s 9am talk Scaled Agile Leadership got the day rolling. Jim&#8217;s talk revolved around the <a href="http://scaledagileframework.com/">scaled agile framework</a> and the idea that the military, with it&#8217;s model of decentralized control, provided a good example for how different teams within an organization can be given the latitude to make their own decisions while still working toward to common good. He talked about how information needs to flow through planning layers in an organization to be effective as well as decentralizing control and knowledge in an organization and the need for supporting technologies.</p>
<p>Jim finished with a specific example that talked about adjustments the American military made to vehicle convoys to protect themselves during the Iraq war. The case study typified the ineffectiveness of imposed solutions while showing that practical solutions can be encouraged by leaders willing to decentralize control of the situation. That allows the people best suited to solve a problem to come together and do so.</p>
<p>Tip of the day from Jim&#8217;s talk: more value created with overall alignment than local excellence.</p>
<p><strong>Agile Applied To Hardware Development&#8230; We&#8217;re Not That Different After All!</strong></p>
<p>Round 1 of 2 for me on the day started at 11am with Agile Applied To Hardware Development. For someone that&#8217;s used describing agile hardware to empty seats about agile hardware, today was refreshing. Still lots of empty seats, but only because the auditorium was so large! We had a good crowd <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>The talk went well. I started with material I first presented at Agile2011 in Salt Lake City. I gave my take on the challenges we face in hardware development, then proposed how we apply the values of the <a href="http://agilemanifesto.org">agile manifesto</a> to clear those challenges. That kind of stuff is pretty general but I think it&#8217;s necessary to talk about the needs of hardware developers before you get to how we apply agile. It&#8217;s not stuff you can specifically practice, but it&#8217;s necessary context to see the possibilities.</p>
<p>The more practical part of the talk was the last half where I talked a bit about the first time I attempted to be agile in 2009 and then shared my view of agile development as it applies to front end ASIC/FPGA development, that came from my Agile2012 talk.</p>
<p>I switched things up a bit this morning by adding a shot of the <a title="My Commitment to Agile Hardware Development" href="http://www.agilesoc.com/2013/01/13/my-commitment-to-agile-hardware-development/">Commitment to Agile Hardware Development</a> blog I wrote a couple months ago (I actually added it to both my talks today so I didn&#8217;t miss anyone). I suggested that the end of a conference was a great time for people to commit to doing something different. I&#8217;d love to see people take me up on that challenge!</p>
<p><strong>An Incremental Approach to Functional Verification</strong></p>
<p>Now this talk had potential but I also knew it was a bit of a risk. I wanted to bring some specific examples with details while at the same time, not get so detailed that I lose people. Turned out there was no problem at all. I thought the 2nd session actually went better than the first. Turns out hardware developers like detail. Who knew <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>This talk is quite focused on the design and verification aspects of ASIC development. I identify 4 characteristics of late delivery &#8211; delays in initial results, subsystems prioritized over products, subjective progress metrics and long debug cycles &#8211; with a look at how I&#8217;ve addressed them using agile techniques. The big takeaways I&#8217;ve emphasized in this talk were TDD of the testbench components and incremental development of the functional model. New for this time around was a look at applying SVUnit to legacy code and using TDD to add features to existing code.</p>
<p>Discussion from both sessions was absolutely excellent. We had questions about how my small case study example would scale to a larger team of people. We had a fellow that worked in validation asking about how he could become part of the design process. There were questions about measuring velocity and how I defined done (code written doesn&#8217;t factor into it at all). Also met a guy that maintained a framework similar to SVUnit (it was nice to have discussion about TDD and unit testing spilled into the hallway). Naturally, he won a prize at the end of the session.</p>
<hr />
<p>It was a great week for me and I&#8217;m glad to have had the opportunity to be a part of it. I met lots of great new people, learned some new things and had a great time. It&#8217;s weeks like this that keep me motivated to go further with agile development. These guys have their stuff together. I&#8217;m expecting big things out of them in the next few years.</p>
<p>Thanks again to the coaches at Intel for inviting me!</p>
<p>-neil</p>
<p>PS: almost forgot the question of the day. I had a coach&#8230; who shall remain nameless&#8230; ask me how to pronounce A-S-I-C. Love it.</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/" data-text="Intel Agile and Lean Development Conference &#8211; Part 2"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F19%2Fintel-agile-and-lean-development-conference-part-2%2F&amp;linkname=Intel%20Agile%20and%20Lean%20Development%20Conference%20%E2%80%93%20Part%202" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F19%2Fintel-agile-and-lean-development-conference-part-2%2F&amp;title=Intel%20Agile%20and%20Lean%20Development%20Conference%20%E2%80%93%20Part%202" id="wpa2a_10">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/04/19/intel-agile-and-lean-development-conference-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intel Agile and Lean Development Conference &#8211; Part 1</title>
		<link>http://www.agilesoc.com/2013/04/18/agileintel/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=agileintel</link>
		<comments>http://www.agilesoc.com/2013/04/18/agileintel/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 05:57:18 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile@intel]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2600</guid>
		<description><![CDATA[So pretend you&#8217;ve dedicated about 5 years to something you believe in&#8230; I mean really believe in. At the beginning it seems like you&#8217;re the only person in on it (or 1 of 2 in my case considering Bryan was &#8230; <a href="http://www.agilesoc.com/2013/04/18/agileintel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>So pretend you&#8217;ve dedicated about 5 years to something you believe in&#8230; I mean <em>really</em> believe in. At the beginning it seems like you&#8217;re the only person in on it (or 1 of 2 in my case considering Bryan was the guy that gave me the first little push). It seems to make so much sense but you can&#8217;t figure out why others haven&#8217;t seen it already. Then slowly&#8230; very slowly&#8230; you see people pop out of the woodwork from around the world. At times you get the feeling there&#8217;s a community being built, and that you&#8217;re a part of it, but it&#8217;s still so early that it&#8217;s not entirely clear who&#8217;s in your little community or where it even exists. Sometimes you question whether it actually exists at all&#8230; but you keep plugging away because you believe in it.</p>
<p>Then you spend a week in Hillsboro and find out that there are hundreds of people working toward the exact same thing you are.</p>
<p>Surprise! The agile hardware community does in fact exist. It&#8217;s a relief to actually see it <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<span id="more-2600"></span></p>
<p>This week, I&#8217;m at the Intel Agile and Lean Development Conference in Hillsboro. Back in March, the agile coaching group at Intel were nice enough to offer me a few slots on the program and I gladly accepted (who would pass up the opportunity to talk to actual hardware developers about agile hardware??). It&#8217;s been a great 3 days so far and as I&#8217;ve done for previous agile conferences I wanted to give people a run down of what happened. This&#8217;ll be part one (provided I get finished before I fall asleep on my laptop). I&#8217;ll probably post part 2 tomorrow.</p>
<hr />
<p><strong>Monday Coding Dojo</strong></p>
<p>My week started on monday when had the chance to take part in a coding dojo. Having never been to a coding dojo before, I had no idea what to expect. From what I gather, you can have a coding dojo to learn just about anything. People here were focused on TDD. To do it, they took a problem &#8211; Conway&#8217;s game of life &#8211; with the language of their choice and solved it a number of different ways, with a number of different parters and a number of different twists.</p>
<p>When I walked in, the twist was people working together weren&#8217;t allowed to talk to each other. The only way to communicate was through code and tests. The next twist was that people couldn&#8217;t use primitive data types to interact with their design, only complex data types were allowed. I played passive observer for those 2 rounds and then jumped in for the last. That was a free-for-all where the only limitation was to use TDD. We used C# in visual studio (I think??) which obviously meant my partner was at the keyboard, not me.</p>
<p>Overall, it seemed people were quite happy with the exercise. There was a great mix of people from different sites and teams with different backgrounds and language and unit test framework preferences. It looked like a very good way to learn how to pair and learn TDD so it gives you the chance to kill two birds with one stone.</p>
<p>Attending the coding dojo wasn&#8217;t initially part of the plan but I&#8217;m glad I did. Here&#8217;s a link for more info on coding dojos if you&#8217;re interested: <a href="http://coderdojo.com/">http://coderdojo.com/</a>.</p>
<p><strong>TDD in C Tutorial (Tuesday AM)</strong></p>
<p>My big break with TDD came after I saw James Grenning&#8217;s TDD in C tutorial at Agile2011 in Salt Lake City. I&#8217;ve seen it once since at ESC in San Jose and Tuesday I got to see it again but this time as observer/helper (James is a pro so he didn&#8217;t need much help).</p>
<p>The difference this time around that I <em>loved</em> was that James runs his tutorial using <a href="https://github.com/JonJagger/cyberdojo">Cyberdojo</a>. If you&#8217;ve never heard of Cyberdojo, you should check it out. Instead of running on local tools or machines, exercises are done using a simple browser-based editor. You log into your session and everything is set up without any futzing around.</p>
<p>The magical part was that the Cyberdojo keeps a history of your activity where every run was captured as a red, yellow or green dot at the top of the screen; red is a failing test, yellow a compile/link error and green was passing tests. Stringed together, the dots show you how you&#8217;re doing. This is TDD so ideally, you&#8217;re looking for a repeating pattern of red then green (i.e. your test fails then it passes). You can also, at a glance, catch the pairs that weren&#8217;t TDD&#8217;ing! No red dots&#8230; no failing tests&#8230; no TDD.<a href="https://github.com/JonJagger/cyberdojo"><br />
</a></p>
<p>&#8220;What you do tomorrow is your own business, but today we&#8217;re doing TDD&#8221;.</p>
<p>The best advice James had during the session was for people new to TDD: it&#8217;s a discipline to begin with but it ends up being an addiction. I&#8217;d agree with that.</p>
<p><strong>An Introduction to Hardware TDD (Tuesday PM)</strong></p>
<p>My turn. A 4 hour session dedicated entirely to hardware TDD using SVUnit. Seriously, what could be more fun!</p>
<p>As I said to everyone attending, the goal of the session wasn&#8217;t to learn TDD, it was to practice it. I gave a brief description of the TDD cycle and a few guidelines to start, then we got right into it.</p>
<p>After clearing a few technical hurdles (I&#8217;m quite sure no two hardware developers on the planet actually share the same environment setup) we did a kickstart exercise to introduce SVUnit. What&#8217;s a passing test look like, what&#8217;s a failing test look like, simple stuff like that. On test 3, most of the people in the class went through the TDD cycle for the first time ever. A couple more tests, people were familiar and we got to the real example.</p>
<p>In December I had the idea of putting together a modelling example based on the old HP48G calculator I had at university. It uses reverse polish notation and has about a billion different functions so it&#8217;s the perfect way to start simple, get increasingly more complicated and go as far as you want. Everyone used TDD to implement the numbers, stack and <em>almost</em> a few arithmetic operators. We did everything in pairs and one point I had people switch pairs and work on someone else code, exactly the type of thing that happens in the real world.</p>
<p>We had great questions and discussion all the way through. People were engaged and open to the idea. I know at least one person that&#8217;s committed to the idea which is great (as I&#8217;m typing he just sent an email saying he&#8217;s starting Friday morning). It&#8217;s pretty rewarding to see the interest.</p>
<p>The thing I didn&#8217;t do was hand out the Intel sponsored prizes at the end of the tutorial! I know who my winners are, I just need to find you before end-of-day tomorrow!</p>
<p>All-in-all, very happy with the session. Couldn&#8217;t have gone much better.</p>
<p><strong>Wednesday Keynotes</strong></p>
<p>The morning keynotes on wednesday were given by David Hussman from <a href="http://devjam.com/">DevJam</a> and James Grenning. I&#8217;m lumping these together because both guys had similar messages from different angles.</p>
<p>Both, over the years, have seen agile practiced so many different ways by so many different people and both had examples of how teams have tried to follow agile by the book while forgetting some of the motivations behind why they were using it in the first place.</p>
<p>David emphasized how agile had become a process that teams follow while forgetting about the product they&#8217;re delivering. Teams need to forget about the right and wrong ways to be agile and instead find the way that works for them. Today was also the first I&#8217;ve seen of dude&#8217;s law where <em>Value</em> is directly proportional to <em>Why</em> (why the product does what it does) and inversely proportional to <em>How</em> (how you do what you do); value increases as you focus more on the product and decreases as you focus on the process you use to build it (I think that&#8217;s right??).</p>
<p>James pointed out that many teams are so focused on the team and structure that they forget that technical competency is an obvious requirement of every development team; it&#8217;s a strategy without the tactics to follow through. He suggested that with Scrum being so popular, teams need to reconnect with the technical practices of XP; it&#8217;s the combination of the two that&#8217;s powerful.</p>
<p>Keynote highlight: David referring to his fashion sense as business camping. Nice.</p>
<p><strong>Open Space</strong></p>
<p>Wednesday afternoon was dedicated to open space guided by Diana Larson. Open space is a loosely structured way of letting people organize themselves into groups and conversations that matter to them.</p>
<p>Large sticky notes were spaced around the auditorium. People interested in hosting an open space discussion wrote their topic on the sticky note and announced it on the mic so everyone knew what they planned. Boards at the front of the auditorium started as an empty agenda. As people announced their topics, they put their sticky notes on the board to settle on place and time. When the topics stopped rolling in, everyone picked a session and the discussions began.</p>
<p>I teamed up with a few local guys and a couple fellows from Chandler to talk about agile hardware (surprise). We talked about some of the challenges of defining DONE for a hardware team, how to limit work in progress, the interactions between design and validation teams and TDD in RTL design.</p>
<p>Open space was an excellent way to enable the conversations that people were obviously interested in having. There was no looking around when Diana asked for topics, people dived right in. The boards were full and everyone was participating. Quite a good idea.</p>
<hr />
<p>That&#8217;s it for today. I did skip a park bench session of industry experts that I&#8217;ll try and cover tomorrow. The two big sessions for me tomorrow are at 11am &#8211; Agile Applied to Hardware Development&#8230; We&#8217;re Not That Different After All &#8211; and 2pm &#8211; An Incremental Approach to Functional Verification. Hoping to have good crowds at both!</p>
<p>-neil</p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/04/18/agileintel/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/04/18/agileintel/" data-text="Intel Agile and Lean Development Conference &#8211; Part 1"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/04/18/agileintel/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F18%2Fagileintel%2F&amp;linkname=Intel%20Agile%20and%20Lean%20Development%20Conference%20%E2%80%93%20Part%201" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F18%2Fagileintel%2F&amp;title=Intel%20Agile%20and%20Lean%20Development%20Conference%20%E2%80%93%20Part%201" id="wpa2a_12">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/04/18/agileintel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hardware Project Planning Survey: Full Results</title>
		<link>http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hardware-project-planning-survey-full-results</link>
		<comments>http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 16:20:53 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Planning]]></category>
		<category><![CDATA[project planning survey]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2556</guid>
		<description><![CDATA[After some of our own analysis, it&#8217;s time to turn the conversation over to you! Here are all the data from our 2012 hardware project planning survey. To quickly rehash what you&#8217;re looking at, this survey was conducted by Catherine &#8230; <a href="http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>After some of our own analysis, it&#8217;s time to turn the conversation over to you! Here are all the data from our 2012 hardware project planning survey.</p>
<p>To quickly rehash what you&#8217;re looking at, this survey was conducted by Catherine Louis and I last year. The intention was to get a feel for how successful hardware teams have been with their current approaches to project planning. As you&#8217;ll see, we had people respond from all areas of hardware development from all levels. We&#8217;ve found the results to be quite interesting.</p>
<p>If you want a little more background, <a title="Planning to Fail in Hardware Development" href="http://www.agilesoc.com/2013/02/03/planning-to-fail-in-hardware-development/">Planning to Fail in Hardware Development</a> is a good place to start. In there you&#8217;ll find a link to our initial analysis posted on eetimes. Other articles we&#8217;ve posted since:</p>
<ul>
<li><a title="Planning to Fail: How Stable are Your Project Plans?" href="http://www.agilesoc.com/2013/02/10/planning-to-fail-how-stable-are-your-project-plans/">Planning to Fail: How Stable are your Project Plans</a></li>
<li><a title="Planning to Fail: Is Estimating Really This Difficult?" href="http://www.agilesoc.com/2013/02/26/planning-to-fail-is-estimating-really-this-difficult/">Planning to Fail: Is Estimating Really this Difficult</a></li>
<li><a title="Planning to Fail: Long Hours, Mounting Stress and Aggressive Goal Setting" href="http://www.agilesoc.com/2013/03/03/planning-to-fail-long-hours-mounting-stress-and-aggressive-goal-setting/">Planning to Fail: Long Hours, Mounting Stress and Aggressive Goal Setting</a></li>
</ul>
<p>But enough talk from me. Since you&#8217;re here to see data, here it is!</p>
<p>-neil<span id="more-2556"></span></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo1.png"><img class="alignnone size-large wp-image-2557" alt="demo1" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo1-1024x758.png" width="640" height="473" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo2.png"><img class="alignnone size-large wp-image-2558" alt="demo2" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo2-1024x700.png" width="640" height="437" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo3.png"><img class="alignnone size-full wp-image-2559" alt="demo3" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo3.png" width="842" height="560" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo4.png"><img class="alignnone size-large wp-image-2560" alt="demo4" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo4-1024x685.png" width="640" height="428" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo5.png"><img class="alignnone size-large wp-image-2561" alt="demo5" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo5-1024x705.png" width="640" height="440" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/demo6.png"><img class="alignnone size-large wp-image-2562" alt="demo6" src="http://www.agilesoc.com/wp-content/uploads/2013/04/demo6-1024x804.png" width="640" height="502" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q1.png"><img class="alignnone size-large wp-image-2563" alt="q1" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q1.png" width="640" height="402" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q2.png"><img class="alignnone size-large wp-image-2564" alt="q2" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q2.png" width="640" height="403" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q3.png"><img class="alignnone size-large wp-image-2565" alt="q3" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q3.png" width="640" height="468" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q4.png"><img class="alignnone size-large wp-image-2566" alt="q4" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q4.png" width="640" height="466" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q5.png"><img class="alignnone size-large wp-image-2567" alt="q5" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q5.png" width="640" height="456" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q6.png"><img class="alignnone size-large wp-image-2568" alt="q6" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q6.png" width="640" height="467" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q7.png"><img class="alignnone size-large wp-image-2569" alt="q7" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q7.png" width="640" height="431" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q8.png"><img class="alignnone size-large wp-image-2570" alt="q8" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q8.png" width="640" height="440" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q9.png"><img class="alignnone size-large wp-image-2571" alt="q9" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q9.png" width="640" height="433" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q10.png"><img class="alignnone size-large wp-image-2572" alt="q10" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q10.png" width="640" height="486" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q11.png"><img class="alignnone size-large wp-image-2573" alt="q11" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q11.png" width="640" height="441" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q12.png"><img class="alignnone size-large wp-image-2574" alt="q12" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q12.png" width="640" height="454" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q13.png"><img class="alignnone size-large wp-image-2575" alt="q13" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q13.png" width="640" height="464" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q14.png"><img class="alignnone size-large wp-image-2576" alt="q14" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q14.png" width="640" height="440" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q15.png"><img class="alignnone size-large wp-image-2577" alt="q15" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q15.png" width="640" height="439" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q16.png"><img class="alignnone size-large wp-image-2578" alt="q16" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q16.png" width="640" height="424" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q17.png"><img class="alignnone size-large wp-image-2579" alt="q17" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q17.png" width="640" height="429" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q18.png"><img class="alignnone size-large wp-image-2580" alt="q18" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q18.png" width="640" height="424" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q19.png"><img class="alignnone size-large wp-image-2581" alt="q19" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q19.png" width="640" height="456" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q20.png"><img class="alignnone size-large wp-image-2582" alt="q20" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q20.png" width="640" height="448" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q21.png"><img class="alignnone size-large wp-image-2583" alt="q21" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q21.png" width="640" height="459" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q22.png"><img class="alignnone size-large wp-image-2584" alt="q22" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q22.png" width="640" height="453" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q23.png"><img class="alignnone size-large wp-image-2585" alt="q23" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q23.png" width="640" height="464" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q24.png"><img class="alignnone size-large wp-image-2586" alt="q24" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q24.png" width="640" height="452" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q25.png"><img class="alignnone size-large wp-image-2587" alt="q25" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q25.png" width="640" height="426" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q26.png"><img class="alignnone size-large wp-image-2588" alt="q26" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q26.png" width="640" height="462" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q27.png"><img class="alignnone size-large wp-image-2589" alt="q27" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q27.png" width="640" height="472" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q28.png"><img class="alignnone size-large wp-image-2590" alt="q28" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q28.png" width="640" height="450" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q29.png"><img class="alignnone size-large wp-image-2591" alt="q29" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q29.png" width="640" height="472" /></a> <a href="http://www.agilesoc.com/wp-content/uploads/2013/04/q30.png"><img class="alignnone size-large wp-image-2592" alt="q30" src="http://www.agilesoc.com/wp-content/uploads/2013/04/q30.png" width="640" height="469" /></a></p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/" data-text="Hardware Project Planning Survey: Full Results"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F11%2Fhardware-project-planning-survey-full-results%2F&amp;linkname=Hardware%20Project%20Planning%20Survey%3A%20Full%20Results" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F04%2F11%2Fhardware-project-planning-survey-full-results%2F&amp;title=Hardware%20Project%20Planning%20Survey%3A%20Full%20Results" id="wpa2a_14">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/04/11/hardware-project-planning-survey-full-results/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Do Verification Engineers Waste 2 Hours, 52 Minutes, 48 Seconds a Day?</title>
		<link>http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day</link>
		<comments>http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 06:22:01 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>
		<category><![CDATA[Mentor Graphics]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2522</guid>
		<description><![CDATA[If you need a good way to waste 36% or your day, debugging code is your best bet! That&#8217;s what I figured Thursday while listening to Harry Foster&#8217;s analysis of the 2012 Wilson Research Group Functional Verification Survey commissioned by Mentor Graphics. &#8230; <a href="http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>If you need a good way to waste 36% or your day, debugging code is your best bet!</p>
<p>That&#8217;s what I figured Thursday while listening to <a href="http://www.mentor.com/products/fv/events/the-2012-wilson-research-group-functional-verification-studyview" target="_blank">Harry Foster&#8217;s analysis</a> of the 2012 Wilson Research Group Functional Verification Survey commissioned by <a href="http://www.mentor.com" target="_blank">Mentor Graphics</a>. The survey is meant to show design and functional verification trends from hardware development. It&#8217;s well done and well presented by Harry.</p>
<p><span id="more-2522"></span></p>
<p>People that follow <a href="http://www.agilesoc.com">AgileSoC.com</a> will know that I&#8217;ve been interested in one particular data point from the previous Wilson Research survey and I was quite interested to see the updated statistics. It has to do with the amount of time verification engineers spend debugging code. Here&#8217;s the numbers from the 2010 study.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/05/effort-spent-in-verification.png"><img class="alignnone size-full wp-image-1639" alt="effort spent in verification" src="http://www.agilesoc.com/wp-content/uploads/2012/05/effort-spent-in-verification.png" width="960" height="720" /></a></p>
<p>Forget about everything except for debug because I don&#8217;t think any of the rest of this is significant. Debug <em>is</em> significant though and that&#8217;s why I love this slide.  At 32%, a verification engineer in 2010 was wasting 2 hours, 33 minutes and 36 seconds a day, on average, debugging code. That&#8217;s fixing defects that <em>we</em> inject.</p>
<p>It&#8217;s two years later and what&#8217;s happened?</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-3.10.00-PM.png"><img class="alignnone size-large wp-image-2532" alt="Screen Shot 2013-03-27 at 3.10.00 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-3.10.00-PM-1024x793.png" width="640" height="495" /></a></p>
<p>We&#8217;re up by 4%&#8230; that&#8217;s what&#8217;s happened. That means we&#8217;re now wasting an additional 19 minutes and 15 seconds a day debugging code compared to 2010. That&#8217;s almost 3 hours/day and more than we spend on anything else. Horrid.</p>
<p>At first glance, it&#8217;s hard to blame that statistic on anything other than garbage code. As much as people would hate to admit it, I think it clearly shows that as an industry we have defect rates that are unacceptably high. Harder to explain, though, is why the number hasn&#8217;t improved.</p>
<p>One explanation: adopting advanced verification practices actually leads to higher defect rates, not lower. Why go there? Well&#8230; the survey data suggest that&#8217;s a possibility. Consider the follow points&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-11.55.17-PM.png"><img class="alignnone size-full wp-image-2545" alt="Screen Shot 2013-03-27 at 11.55.17 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-11.55.17-PM.png" width="905" height="704" /></a></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-3.10.16-PM.png"><img class="alignnone size-large wp-image-2533" alt="Screen Shot 2013-03-27 at 3.10.16 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-3.10.16-PM-1024x791.png" width="640" height="494" /></a></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-11.56.56-PM.png"><img class="alignnone size-full wp-image-2546" alt="Screen Shot 2013-03-27 at 11.56.56 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-27-at-11.56.56-PM.png" width="906" height="701" /></a></p>
<p>Since the last survey there&#8217;s been a significant uptick in teams using UVM. There&#8217;s also been a significant uptick in teams using verification techniques like constrained random, functional coverage and assertions (NOTE: that last slide is a comparison with statistics from 2007, not 2010). This has all happened during a period where there&#8217;s been a slight <em>increase</em> in debug time. Hence my conclusion that advanced verification practices haven&#8217;t quite had the desired effect in the area of code quality.</p>
<p>Do I expect broad agreement with this analysis? Not really. Of course there are other valid arguments that take design and team size into account which could lead to a different conclusion. But whatever you might argue, as much as we want to believe we&#8217;re going in the right direction, we need to be able to talk openly about whether or not that&#8217;s actually the case. The bottom line is blowing more than a 3rd of a person&#8217;s time fixing defects is what it is: unacceptable. We have to wonder if the complexity we&#8217;re building into our development process is actually leading to better results? Yes or no? Is standardization leading to portable results? Yes or no? Is reuse leading to faster results? Yes or no? Are our best practices really the best we can do? Yes or no? Should we be looking elsewhere (i.e. agile development) for <em>better</em> best practices? Yes or no?</p>
<p>The answers to those questions will depend on who you are so regardless of who you are, the best thing you can do is to sit down, think about them and answer them for yourself. And don&#8217;t overlook the fact that with the possibility of earning back part of the 2 hours, 52 minutes 48 seconds a day we&#8217;re wasting now, the potential payoff from a little reflection is huge <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> !</p>
<p>-neil</p>
<p><strong>(fyi&#8230; all the graphics in this post have come from Harry&#8217;s webinar. That&#8217;s the source, I&#8217;m just the messenger/arm chair analyst. I&#8217;d recommend following along with Harry&#8217;s analysis as I assume he&#8217;ll be busy posting over the coming months. It was good reading last time around; I&#8217;m expecting the same this year).</strong></p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/" data-text="How Do Verification Engineers Waste 2 Hours, 52 Minutes, 48 Seconds a Day?"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F28%2Fhow-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day%2F&amp;linkname=How%20Do%20Verification%20Engineers%20Waste%202%20Hours%2C%2052%20Minutes%2C%2048%20Seconds%20a%20Day%3F" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F28%2Fhow-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day%2F&amp;title=How%20Do%20Verification%20Engineers%20Waste%202%20Hours%2C%2052%20Minutes%2C%2048%20Seconds%20a%20Day%3F" id="wpa2a_16">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/03/28/how-do-verification-engineers-waste-2-hours-52-minutes-48-seconds-a-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Your Coverage Model is Wrong!</title>
		<link>http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=your-coverage-model-is-wrong</link>
		<comments>http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 22:47:13 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2162</guid>
		<description><![CDATA[Here&#8217;s the scene: you&#8217;re a hardware engineer at a conference sitting in on a talk about functional coverage. You&#8217;re there because you think functional coverage is important. You think you do a good job of building functional coverage groups but &#8230; <a href="http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s the scene: you&#8217;re a hardware engineer at a conference sitting in on a talk about functional coverage. You&#8217;re there because you think functional coverage is important. You think you do a good job of building functional coverage groups but the title of the talk suggests otherwise. The speaker takes the stage&#8230;<span id="more-2162"></span></p>
<blockquote><p>Hi everyone. It&#8217;s good to see you all here.</p>
<p>Before I get started I just want to take a quick poll. By show of hands, how many of you are using constrained random verification? Right.. quite a few people&#8230; that&#8217;s what I figured.</p>
<p>Ok&#8230; keep your hand up if you use functional coverage to measure whether or not you&#8217;re finished your verification effort.</p>
<p>Alright&#8230; I see a few dropping but most of you have still got your hands up&#8230; that&#8217;s a good sign since we all know results from constrained random tests aren&#8217;t overly useful without functional coverage.</p>
<p>Ok&#8230; next&#8230; does anyone here test their coverage groups? I mean does anyone take the time to verify that their coverage groups, the actual code, is correct? Anyone? I see a lot of hands dropping&#8230; not a good sign.</p>
<p>Last&#8230; from the people that just dropped their hand I&#8217;ve got a question: should you trust your functional coverage model, probably the most important code you write, if you haven&#8217;t gone to the trouble of making sure it&#8217;s correct?</p>
<p>Hopefully not.</p></blockquote>
<p>A fully populated functional coverage model has become a pretty important component of determining whether you&#8217;ve sufficiently traveled the design state space. It tells you that you&#8217;ve done all that needs to be done by observing all that needs to be observed. The coverage model is the benchmark by which DONE is measured, which is the way it should be&#8230; unless you&#8217;re coverage model is wrong (i.e. it&#8217;s a defect ridden pile of unverified code).</p>
<p>Luckily, writing unit tests with SVUnit is a great way to verify you&#8217;re coverage model is correct. Here&#8217;s how.<em><strong><br />
</strong></em></p>
<p>To start, testing your coverage model depends on an &#8220;obscure&#8221; built-in method for cover points and cover groups (I say &#8220;obscure&#8221; not because it isn&#8217;t important, but because I doubt many people actually use it). The get_inst_coverage() method is what we&#8217;re after; what it does is return a coverage percentage from a particular cover group or coverpoint. For example, if you have a coverpoint with 2 bins and you sample 1, the get_inst_coverage() returns 50. Sample both and you get 100. Sample neither and you get 0.</p>
<p>Here&#8217;s three unit tests that illustrate what I&#8217;m talking about. We have a coverpoint called addr_min_cp and it&#8217;s observing two addresses: &#8217;0&#8242; and &#8217;4&#8242;. The first test confirms that when we sample addr_min_cp with &#8217;0&#8242; we&#8217;ve hit 50%. The second test confirms that &#8217;4&#8242; hits the other 50%. The 3rd test, where we combine &#8217;0&#8242; and &#8217;4&#8242;, verifies addr_min_cp is correct.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.37.13-PM.png"><img class="alignnone size-full wp-image-2507" alt="Screen Shot 2013-03-25 at 1.37.13 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.37.13-PM.png" width="427" height="606" /></a></p>
<p>Easy peasy.</p>
<p>With add_min_cp observing interaction with the low end of the address space, we can also observe interaction with the upper end of the address space. Here&#8217;s three other tests we can use to verify that our addr_max_cp is behaving as we expect.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.38.16-PM.png"><img class="alignnone size-full wp-image-2508" alt="Screen Shot 2013-03-25 at 1.38.16 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.38.16-PM.png" width="431" height="607" /></a></p>
<p>Now how about a few equally spaced bins between min and max, as is often done by verification engineers to see that we&#8217;ve plucked an acceptable number of data points from throughout the address space. Here&#8217;s how we&#8217;d loop through 16 data points, verifying the coverage score along the way.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.39.16-PM.png"><img class="alignnone size-full wp-image-2509" alt="Screen Shot 2013-03-25 at 1.39.16 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-1.39.16-PM.png" width="444" height="294" /></a></p>
<p>Important to point out from that snippet of code is that the get_inst_coverage() returns a real equal to &#8216;N * 1/16&#8242;, which means we need to expect a real or we find ourselves with a failing unit test.</p>
<p>Now the coverage points in those examples are pretty basic right? Who hasn&#8217;t implemented the pattern of MIN, MAX and a few in between? Anybody? And if we look at the code, there aren&#8217;t too many ways to screw that up&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.05.57-PM.png"><img class="alignnone size-full wp-image-2510" alt="Screen Shot 2013-03-25 at 2.05.57 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.05.57-PM.png" width="393" height="232" /></a></p>
<p>&#8230;and yet there are ways to screw up just about anything, isn&#8217;t there, even basic coverpoints. Let&#8217;s say you define `ADDR_MAX  in some other file as follows:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.08.37-PM.png"><img alt="Screen Shot 2013-03-25 at 2.08.37 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.08.37-PM.png" width="164" height="23" /></a></p>
<p>Nothing wrong with that, until somebody changes the definition for a test that&#8217;s being written and mistakenly changes that line to this without understanding the implications:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.08.45-PM.png"><img class="alignnone size-full wp-image-2513" alt="Screen Shot 2013-03-25 at 2.08.45 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-25-at-2.08.45-PM.png" width="160" height="20" /></a></p>
<p>Now, as I suggest in the title, your coverage model is wrong.</p>
<p>What happens from here? Well, if you have unit tests changing that line wouldn&#8217;t be a big deal because two failing unit tests would flag a problem and the person that made the change could go back and fix it. Without unit tests, however, the chances that this defect gets shipped to a customer &#8211; via a product with an inadequately exercised address space &#8211; is quite high. And what happens when your customer comes to you and says they can&#8217;t reach the upper end of the address space?</p>
<p><em>Oh&#8230; sorry. It looks like we had a bug in our coverage model so we didn&#8217;t see that. But don&#8217;t worry, it was an easy one. It&#8217;s fixed now.</em></p>
<p>Sure it&#8217;s easy to fix, though how many times can you get away with &#8220;<em>oh&#8230; sorry&#8221;</em>? That depends on your customer and your track record. A couple times might not be bad; several times will be embarrassing;  one too many can be catastrophic.</p>
<p>For as simple as it is to test your coverage groups with SVUnit, and for as critical as they are to determining progress and design coverage, I&#8217;d recommend erring on the side of caution.</p>
<p>-neil</p>
<p><strong>NOTE: As of writing this, the build-in get_inst_coverage() method looks like it&#8217;s only be properly supported in Questa. I&#8217;m using version 10.1c_1. As of VCS version G-2012.09 and Incisive version 12.10-s008, get_inst_coverage() was not supported by Synopsys or Cadence. If you&#8217;re using newer versions, you&#8217;ll want to see for yourself if anything has changed. If you see a version of either that works, please let me know and I&#8217;ll post an update.</strong></p>
<p><strong>UPDATE: You&#8217;ll see in the comments that Cadence also supports the get_inst_coverage() method but you need to use the &#8216;-coverage &lt;string&gt;&#8217; option on the command line (which I didn&#8217;t originally have). That&#8217;s confirmed for versions 12.10-s007 and 12.10-s008.</strong></p>
<p><strong>UPDATE: Count Synopsys in as well now as of at least vcs version G-2012.09. I had an AE help me out (he easily saw what I was forgetting). With the &#8220;option.per_instance = 1&#8243; setting in your covergroup, the get_inst_coverage() returns a valid result. Without, you&#8217;ll see that it returns 0 in all cases. All of Synopsys, Mentor and Cadence support unit testing covergroups!</strong></p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/" data-text="Your Coverage Model is Wrong!"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F25%2Fyour-coverage-model-is-wrong%2F&amp;linkname=Your%20Coverage%20Model%20is%20Wrong%21" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F25%2Fyour-coverage-model-is-wrong%2F&amp;title=Your%20Coverage%20Model%20is%20Wrong%21" id="wpa2a_18">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/03/25/your-coverage-model-is-wrong/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Verifying UVM Error Conditions with SVUnit UVM Report Mock</title>
		<link>http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=verifying-uvm-error-conditions-with-svunit-uvm-report-mock</link>
		<comments>http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 03:18:53 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[UVM]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=2386</guid>
		<description><![CDATA[Verifying error conditions and UVM testbench checkers just got easier! The SVUnit UVM report mock lets you automate testing of UVM errors and fatals to increase confidence that the checkers in your testbench are defect free. The SVUnit UVM report mock &#8230; <a href="http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Verifying error conditions and UVM testbench checkers just got easier! The SVUnit UVM report mock lets you automate testing of UVM errors and fatals to increase confidence that the checkers in your testbench are defect free. The SVUnit UVM report mock is a scoreboard style checker where actual and expected errors are logged and compared to trigger a PASS/FAIL result.</p>
<p>Here&#8217;s how it works&#8230;<span id="more-2386"></span></p>
<p>In a unit test, a user would go through the following steps to verify a uvm_error is being triggered properly:</p>
<ul>
<li>set the expectation of a particular error by calling the svunit_uvm_report_mock::expect_error(&#8230;) function</li>
<li>apply the error causing scenario to the UUT</li>
<li>call svunit_uvm_report_mock::verify_complete() to ensure actual errors are trapped in the UUT as expected (and that there are no expected errors left outstanding).</li>
</ul>
<p>To help get those points across, we&#8217;ll look at the uvm_report_mock example that&#8217;s packaged with SVUnit. In this example we have a UUT with a method called verify_arg_is_not_99(). In case it&#8217;s not obvious, verify_arg_is_not_99() is designed to trap variables that are set to 99 by asserting a uvm_error. Other values are ignored.</p>
<p>To verify our UUT is working as we expect, we of course need a few tests. Here&#8217;s the first from the example that tests the error condition.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.33.35-PM.png"><img class="alignnone size-full wp-image-2485" alt="Screen Shot 2013-03-12 at 4.33.35 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.33.35-PM.png" width="345" height="189" /></a></p>
<p>That test exactly follows the bullet steps above. We call the expect_error() method once because we expect one error. That pushes an item onto the expected queue of our log message scoreboard inside the svunit_uvm_report_mock. Then we call our UUT function with 99 as the argument. That pushes an item onto the actual queue of our log message scoreboard. Finally, we call the verify_complete. That does an in-order comparison between the actual and expected queues to confirm we&#8217;re getting the errors we expect.</p>
<p>To pass this test, this is the code we need in our UUT. An error is triggered for 99; nothing happens otherwise.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.11.51-PM.png"><img class="alignnone size-full wp-image-2479" alt="Screen Shot 2013-03-12 at 4.11.51 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.11.51-PM.png" width="359" height="51" /></a></p>
<p>At this point, you might be wondering how the svunit_uvm_report_mock knows about UVM errors. Well it&#8217;s not as magical as you might think. To do it, we redefine the uvm_error macro to call the svunit_uvm_report_mock::actual_error(&#8230;) function instead of the normal UVM reporter. The macros are redefined in the svunit_uvm_mock_defines.sv and they look like this&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.16.14-PM.png"><img class="alignnone size-full wp-image-2480" alt="Screen Shot 2013-03-12 at 4.16.14 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.16.14-PM.png" width="282" height="80" /></a></p>
<p>So instead of sending errors to your log file where you&#8217;d have to visually confirm they&#8217;re being asserted, we redirect them by mocking out the UVM reporting and automate the confirmation. For that to work, we have to make sure the macros are redefined as we intend. That&#8217;s done with includes at the top of the unit test file. The uvm_macros are loaded first, then the svunit_uvm_mock_defines are loaded to redefine the macros.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-13-at-3.54.43-PM.png"><img class="alignnone size-full wp-image-2490" alt="Screen Shot 2013-03-13 at 3.54.43 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-13-at-3.54.43-PM.png" width="269" height="39" /></a></p>
<p>To exhaustively verify our UUT, we need one more test to make sure values other than 99 don&#8217;t cause a problem. In this test, you&#8217;ll see we still call verify_complete() to make sure we get what we expect, but we don&#8217;t call expect_error() because we&#8217;re&#8230; uhh&#8230; not expecting an error.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.28.49-PM.png"><img class="alignnone size-full wp-image-2483" alt="Screen Shot 2013-03-12 at 4.28.49 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.28.49-PM.png" width="347" height="176" /></a></p>
<p>In this case, verify_complete() will return 1. That tells us no errors were expected and none were detected.</p>
<p>A final feature that we&#8217;ll talk about is the ability to expect a specific MSG and ID from your error. To do that, you pass in strings to the expect_error() function (the defaults are null strings which means the content of the message isn&#8217;t checked).</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.30.41-PM.png"><img class="alignnone size-full wp-image-2484" alt="Screen Shot 2013-03-12 at 4.30.41 PM" src="http://www.agilesoc.com/wp-content/uploads/2013/03/Screen-Shot-2013-03-12-at-4.30.41-PM.png" width="378" height="188" /></a></p>
<p>You can see that test is the same as the first except that the MSG and ID are passed to the expect_error(). Just getting the error in this test case isn&#8217;t enough, the content of the message has to match also. If it doesn&#8217;t, the test fails.</p>
<p>That&#8217;s how to automate checking of uvm_error logging with the SVUnit UVM report mock. FYI&#8230; uvm_fatal is also supported so if that&#8217;s what you&#8217;re looking for, just do a search-and-replace to swap error for fatal. The mechanisms for both are the same.</p>
<p>Lastly, I&#8217;ll mention that this is version 0.1 functionality so if you&#8217;ve got any better ideas for doing the same kind of automation, I&#8217;d love to hear it!</p>
<p>-neil</p>
<p><strong>Q. If you don&#8217;t test your checkers, how do you know they&#8217;re working?</strong></p>
<p><a class="a2a_button_facebook_like addtoany_special_service" data-href="http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/"></a><a class="a2a_button_twitter_tweet addtoany_special_service" data-count="none" data-url="http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/" data-text="Verifying UVM Error Conditions with SVUnit UVM Report Mock"></a><a class="a2a_button_google_plusone addtoany_special_service" data-annotation="none" data-href="http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/"></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F13%2Fverifying-uvm-error-conditions-with-svunit-uvm-report-mock%2F&amp;linkname=Verifying%20UVM%20Error%20Conditions%20with%20SVUnit%20UVM%20Report%20Mock" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.agilesoc.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.agilesoc.com%2F2013%2F03%2F13%2Fverifying-uvm-error-conditions-with-svunit-uvm-report-mock%2F&amp;title=Verifying%20UVM%20Error%20Conditions%20with%20SVUnit%20UVM%20Report%20Mock" id="wpa2a_20">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2013/03/13/verifying-uvm-error-conditions-with-svunit-uvm-report-mock/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
