<?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, 16 May 2012 16:12:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Functional Verification Doesn&#8217;t Have To Be A Sideshow</title>
		<link>http://www.agilesoc.com/2012/05/15/functional-verification-doesnt-have-to-be-a-sideshow/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=functional-verification-doesnt-have-to-be-a-sideshow</link>
		<comments>http://www.agilesoc.com/2012/05/15/functional-verification-doesnt-have-to-be-a-sideshow/#comments</comments>
		<pubDate>Tue, 15 May 2012 19:40:50 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1691</guid>
		<description><![CDATA[This is another one of those challenge-the-way-we-think-about-functional-verification posts. The motivation behind it comes from a few different places. First is a blog posted on eetimes designline by Brian Bailey a couple weeks back called Enough of the sideshows – it’s &#8230; <a href="http://www.agilesoc.com/2012/05/15/functional-verification-doesnt-have-to-be-a-sideshow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is another one of those challenge-the-way-we-think-about-functional-verification posts. The motivation behind it comes from a few different places.</p>
<p>First is a blog posted on eetimes designline by Brian Bailey a couple weeks back called <em><a href="http://www.eetimes.com/electronics-blogs/other/4372544/Enough-of-the-sideshows---it-s-time-for-some-real-advancement-in-functional-verification-" target="_blank">Enough of the sideshows – it’s time for some real advancement in functional verification</a></em>! In that post, Brian exposes a few techniques &#8211; constrained random verification in particular &#8211; that have failed to live up to the hype and praise that&#8217;s been heaped upon them over the last several years. That&#8217;s an industry expert suggesting we re-think the direction we&#8217;re going with functional verification tools so if you haven&#8217;t read it, I&#8217;d suggest doing so. In case you missed it, Brian also inspired the snappy title of this post <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Second is the work I&#8217;ve been putting into <a title="SVUnit" href="http://www.agilesoc.com/svunit/">SVUnit</a> and test-driven development. I&#8217;ve been having some decent success doing TDD w/SVUnit, enough that it&#8217;s quickly becoming my favorite design technique when it comes to verification IP and testbench development. Others are using it successfully as well which gives me hope that someday soon TDD will go mainstream in hardware development.</p>
<p>Also motivating this was the recently announced UVM-Express from Mentor. UVM-Express is a step-by-step approach that I really like and have already written about <a title="Why I Like UVM Express" href="http://www.agilesoc.com/2012/02/24/why-i-like-uvm-express/">here</a>.</p>
<p>The final bit of motivation, I have to say, is my slight distaste for UVM and our collective struggle to cage the mythical beast called <a title="Unicorns, Leprechauns and Reusable Verification IP" href="http://www.agilesoc.com/2012/05/14/unicorns-leprechauns-and-reusable-verification-ip/">reusable verification IP</a>. Realizing it <em>is</em> becoming industry standard and library of choice for those on the cutting edge I will use UVM&#8230; but only under protest.</p>
<blockquote><p>&lt;protest&gt;UVM is HUGE and it&#8217;s complicated. It&#8217;s extensible to the Nth degree yet at the same time arbitrarily confining (sure you can add as many wacky runtime phases as you want, in any order that you want, but don&#8217;t even <em>think</em> of creating a component after the build phase or connecting a driver to anything but a sequencer. Just don&#8217;t). It&#8217;s biggest problem is that it sure doesn&#8217;t appear it was developed with the majority of its users in mind. Bleeding edge users&#8230; perhaps. The majority&#8230; not a chance.&lt;/protest&gt;</p></blockquote>
<p>Sorry for pointing that out. A little harsh perhaps because I don&#8217;t mind it now that I&#8217;m using it&#8230; though the ramp-up is incredibly steep. If I&#8217;m the only one that feels that way, go ahead and disagree in the comments.</p>
<p>Put all those things together and what do you get? I think that over the last decade we&#8217;ve &#8220;evolved&#8221; into forgetting two critical aspects of testing:</p>
<ul>
<li>early results are important</li>
<li>it&#8217;s important to use the right tool for the job</li>
</ul>
<p>Remember the graphic that shows coverage from constrained random verification relative to directed testing? The one that people have used &#8211; and unfortunately I have used a time or two &#8211; to explain that if we just wait a little longer (aka: spend more time building the testbench), at some point we&#8217;ll suddenly get an explosion of positive results; our coverage line will abruptly charge due north and then gently flatten out to 100%.</p>
<blockquote><p>The flat line at the beginning of the constrained random curve is us convincing ourselves that early results aren&#8217;t important.</p></blockquote>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/05/Slide1.png"><img class="wp-image-1709 alignnone" title="Slide1" src="http://www.agilesoc.com/wp-content/uploads/2012/05/Slide1.png" alt="" width="459" height="345" /></a></p>
<p>That same graphic was used to undermine directed testing as a viable technique for making progress. Sure you might use it to verify a few corner cases on your way out of the office the day before RTL freeze, but the big progress is made with constrained random. You&#8217;d be crazy not to believe that. Just look at the graphic!</p>
<blockquote><p>Relegating directed testing to the corner-case-afterthoughts is us forgetting that there&#8217;s a right tool for every job.</p></blockquote>
<p>That&#8217;s a pretty bleak assessment of how we&#8217;ve faired with cutting edge functional verification tools and techniques over the last decade or so. But I really believe it&#8217;s a fair assessment because things have gone off the rails a bit. The good news, though, is that some of the innovation that Brian Bailey is looking for in his article can be done, in my opinion, by rethinking the tools we have as opposed to waiting for what we don&#8217;t have. I think that gets done by reasserting the importance of results (i.e. passing tests) as a metric for progress and recognizing there&#8217;s a right tool for every job.</p>
<p>Let&#8217;s do that by looking at functional verification as a 3 step process.</p>
<hr />
<p><strong>Step 1: Fix The First Bugs</strong></p>
<p>Basic sanity is a milestone that is so incredibly important for all development teams as it&#8217;s that first benchmark for progress. It requires little more than absolute simplicity which is something that teams devoted to constrained random verification have overlooked.</p>
<p>Don&#8217;t use a constrained random environment to fix the bugs required to verify basic sanity. Don&#8217;t worry about reuse when it comes to basic sanity. And don&#8217;t worry about rework. Build the simplest testbench you can with a short list of the simplest (regressionable) directed tests you can think of that&#8217;ll verify the simplest function of your DUT. Set a benchmark with basic sanity, then move on to step 2.</p>
<p>If you&#8217;re familiar with UVM-Express, think UVM-Express step 1 at this point; a verilog, UVM-less setup that&#8217;s perfectly suited to simple, directed tests useful for verification and design engineers.</p>
<p><strong>Step 2: Fix The Bugs You Expect</strong></p>
<p>With only your basic sanity test &#8211; and possibly some smoke testing from the designer(s) &#8211; it&#8217;s pretty safe to assume that the next feature you test will be broken. As will the feature you test after that&#8230; and the feature after that&#8230; and so on to the end of the feature list. For early code, focus is important. You need to be able to go to a designer and say &#8220;this feature isn&#8217;t working&#8221; and you need directed tests to be able to do that. Directed tests are still the right tool for the job for fixing the bugs you expect; constrained random tests are not.</p>
<p>To fix all the bugs you expect &#8211; which in all likelihood will apply to most of the features in your design &#8211; you might be thinking <em>isn&#8217;t that going to be a lot of directed tests??</em> You&#8217;re right to think that. All those tests may seem like a lot of keyboard bashing but the focus and the short debug cycles are what&#8217;ll make this more productive that using constrained random.</p>
<p><strong>Step 3: Fix The Bugs You Don&#8217;t Expect</strong></p>
<p>Finally, as you get to testing the unforeseen and the unknown, constrained random tests become the right tool for the job. Here&#8217;s where you&#8217;re looking for the things you don&#8217;t expect; the insidious little bugs that constrained random testing was made for.</p>
<hr />
<p>There&#8217;s three steps to 100% coverage using techniques we already have and applying them at a point where they add the greatest value. Now a few final thoughts related to reuse, reference models and code quality.</p>
<p>I&#8217;d recommend <em>not</em> being overly concerned with rework/reuse as you transition from step 1 to steps 2 and 3. I say that because it seems our infatuation with reuse at times pulls us away from the right tool for the job (i.e. why would I do something simple when I can do the same thing with something more complicated that&#8217;s poorly suited to what I&#8217;m trying to achieve?). And our penchant for extensibility bloats the code with rarely used features. It also adds delay. Reuse is important, but don&#8217;t be afraid to add features to the testbench as you need them and rework as necessary (yes&#8230; I realize suggesting rework is blasphemous for some but I think it can be extremely productive when properly contained). Incidentally, rework in the software world is called re-factoring and it&#8217;s seen as a necessary part of development.</p>
<p>Next is the reference model (and scoreboarding), which is necessary for constrained random tests. I suggest building your reference model incrementally as you build your directed tests in step 2. This kind of bite size progress is more manageable than holing up for a few weeks/months and doing it all in one shot. It&#8217;s also a twist on directed testing where the stimulus is directed but the checking is automated. Ideally, when you&#8217;re done step 2, your model is done so with your constrained random tests you&#8217;re worried about stimulus and coverage but not the checking.</p>
<p>Lastly, constrained random verification is senseless when applied to poor quality code&#8230; which unfortunately is what <em>99%</em> of us write when we code open loop (i.e. without tests). Test-driven development brings the code-and-test feedback loop that&#8217;s sorely lacking in hardware development. I&#8217;m using TDD and I love it. The quality of the code I used to write compared to what I&#8217;m doing now isn&#8217;t even comparable. TDD works in software development. It&#8217;ll work in hardware development, too. It&#8217;s only a matter of time.</p>
<p>You can find more about TDD <a title="Test Your Own Code! (I’ve Got Better Things To Do)" href="http://www.agilesoc.com/2011/10/31/test-your-own-code-ive-got-better-things-to-do/">here</a>.</p>
<p>I&#8217;m not sure if Brian had this type of innovation in mind when he wrote <em><a href="http://www.eetimes.com/electronics-blogs/other/4372544/Enough-of-the-sideshows---it-s-time-for-some-real-advancement-in-functional-verification-">Enough of the sideshows&#8230;</a></em>, but I think changing how we use the tools we already have is innovation that&#8217;ll take us much further than where we are now.</p>
<p>It&#8217;s also innovation that we&#8217;re all capable of.</p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;count=none&amp;text=Functional%20Verification%20Doesn%E2%80%99t%20Have%20To%20Be%20A%20Sideshow" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;count=none&amp;text=Functional%20Verification%20Doesn%E2%80%99t%20Have%20To%20Be%20A%20Sideshow" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;linkname=Functional%20Verification%20Doesn%E2%80%99t%20Have%20To%20Be%20A%20Sideshow" 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%2F2012%2F05%2F15%2Ffunctional-verification-doesnt-have-to-be-a-sideshow%2F&amp;title=Functional%20Verification%20Doesn%E2%80%99t%20Have%20To%20Be%20A%20Sideshow" id="wpa2a_2">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/05/15/functional-verification-doesnt-have-to-be-a-sideshow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unicorns, Leprechauns and Reusable Verification IP</title>
		<link>http://www.agilesoc.com/2012/05/14/unicorns-leprechauns-and-reusable-verification-ip/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=unicorns-leprechauns-and-reusable-verification-ip</link>
		<comments>http://www.agilesoc.com/2012/05/14/unicorns-leprechauns-and-reusable-verification-ip/#comments</comments>
		<pubDate>Mon, 14 May 2012 17:31:18 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1662</guid>
		<description><![CDATA[There are times when I use agilesoc.com to step out on a limb and challenge the general consensus in hardware development. This post would definitely qualify as one of those times. I don&#8217;t think the reusable verification IP we&#8217;ve been &#8230; <a href="http://www.agilesoc.com/2012/05/14/unicorns-leprechauns-and-reusable-verification-ip/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are times when I use agilesoc.com to step out on a limb and challenge the general consensus in hardware development. This post would definitely qualify as one of those times.</p>
<p><strong>I don&#8217;t think the reusable verification IP we&#8217;ve been building is as reusable as we think it is. I don&#8217;t think reusable IP is reused as many times as we&#8217;d like (if at all). Nor do I think reusable IP is as valuable as we think it is.</strong></p>
<p>There&#8230; I said it.<span id="more-1662"></span></p>
<p>That hasn&#8217;t always been my opinion&#8230; in fact I used to be a person that preached the exact opposite&#8230; but that&#8217;s my opinion now and it feels good to get it out. Our entire idea of reuse is something I have a problem with because I think most of us are getting it completely wrong, myself included, for a very simple reason. In our haste to create IP that is <strong>reusable</strong> we&#8217;ve forgotten about the absolutely most fundamental requirement: the IP has to first be <strong>usable</strong>. Anyone can riddle a piece of IP with all the elaborate features and switches and hooks and callbacks and scripts necessary for infinite reusability (or extensibility). But in a lot of cases <strong>reusability ends up being inversely proportional to usability</strong>; the more requirements a piece of IP can fill the fewer it fills well.</p>
<p>Jack of all trades&#8230; and you know how the rest turns out.</p>
<hr />
<blockquote><p><strong>If you&#8217;re working in hardware or embedded systems development, I&#8217;d appreciated you completing this <a href="https://www.surveymonkey.com/s/hardware-project-planning-survey">survey</a>.</strong></p></blockquote>
<hr />
<p>If your code isn&#8217;t usable there&#8217;s no point in thinking it&#8217;ll be reusable so I&#8217;m going to suggest we step away from &#8216;reuse&#8217; for the moment and focus all our attention on &#8216;use&#8217;. A simple way to do that is to look at building reusable IP as a two step process.</p>
<blockquote><p><strong>Step 1: Ensure you code is usable.</strong></p>
<p>I think all IP should fill some pretty basic requirements related to usability:</p>
<ul>
<li>it works</li>
<li>there are options for doing simple things in a simple way</li>
<li>it takes 5 minutes or less to get the point across</li>
<li>people only need to ask how to use it once</li>
<li>to understand the usage model/api it takes nothing more than&#8230;</li>
<ul>
<li>a README and a short conversation for an expert; OR</li>
<li>a README and a longer conversation and/or a whiteboard session for someone more junior to understand</li>
</ul>
<li>a full day training course (or longer) isn&#8217;t required to understand the usage model/api</li>
<li>it takes a half a day or less to integrate (to the point where it becomes useful)</li>
<li>it doesn&#8217;t unreasonably slow down compilation/simulation</li>
<li>designers are willing to use it (or at least some part of it)</li>
<li>designers don&#8217;t laugh, cringe or run the other way when you suggest they use it</li>
<li>it doesn&#8217;t frustrate people to point they&#8217;re forced to build their own</li>
<li>it&#8217;s easy to access</li>
<li>it comes with examples</li>
<li>it comes with a regression suite</li>
<li>it takes 5min or less to figure out how to run the regression suite</li>
<li>results of the regression suite are accessible and easy to interpret</li>
</ul>
<p><strong>Step 2: Ensure you code is reusable.</strong></p>
<p>The tenets of reuse are already trumpeted regularly so I&#8217;ll only add a few general rules:</p>
<ul>
<li>Don&#8217;t make your code reusable if no one intends to reuse it</li>
<li>Don&#8217;t impose a reuse model or framework on code that will never be reused</li>
<li>Reusability is determined by the person doing the reusing</li>
</ul>
</blockquote>
<p>The upside is that reusable verification IP does actually exist so there is hope. There <em>are</em> teams that put out great IP. For the rest of us though, creating reusable IP isn&#8217;t any more likely than prancing through a meadow on a unicorn or funding your retirement with a leprechaun&#8217;s gold. And, unfortunately, we&#8217;re making it worse. Building reusable IP is hard enough; there&#8217;s no need to make it harder by forgetting the most important part.</p>
<p>&#8216;Reuse&#8217; without &#8216;use&#8217; is just &#8216;re(diculous)&#8217;.</p>
<p>-neil</p>
<p><strong>Q. Have a different opinion on reusable verification IP? Or any use/reuse requirements to add?</strong></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;count=none&amp;text=Unicorns%2C%20Leprechauns%20and%20Reusable%20Verification%20IP" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;count=none&amp;text=Unicorns%2C%20Leprechauns%20and%20Reusable%20Verification%20IP" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;linkname=Unicorns%2C%20Leprechauns%20and%20Reusable%20Verification%20IP" 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%2F2012%2F05%2F14%2Funicorns-leprechauns-and-reusable-verification-ip%2F&amp;title=Unicorns%2C%20Leprechauns%20and%20Reusable%20Verification%20IP" id="wpa2a_4">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/05/14/unicorns-leprechauns-and-reusable-verification-ip/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(Wasted) Effort Spent In Verification</title>
		<link>http://www.agilesoc.com/2012/05/07/wasted-effort-spent-in-verification/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wasted-effort-spent-in-verification</link>
		<comments>http://www.agilesoc.com/2012/05/07/wasted-effort-spent-in-verification/#comments</comments>
		<pubDate>Mon, 07 May 2012 20:05:03 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Verification Horizons]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1638</guid>
		<description><![CDATA[I just spent a few minutes reading Harry Foster&#8217;s analysis of a functional verification study commissioned by Mentor Graphics and carried out by Wilson Research Group in 2010. There&#8217;s lots of good information in Harry&#8217;s analysis &#8211; there&#8217;s 9 posts &#8230; <a href="http://www.agilesoc.com/2012/05/07/wasted-effort-spent-in-verification/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just spent a few minutes reading <a href="http://blogs.mentor.com/verificationhorizons/blog/2011/03/30/prologue-the-2010-wilson-research-group-functional-verification-study/" target="_blank">Harry Foster&#8217;s analysis</a> of a functional verification study commissioned by <a href="http://www.mentor.com" target="_blank">Mentor Graphics</a> and carried out by Wilson Research Group in 2010. There&#8217;s lots of good information in Harry&#8217;s analysis &#8211; there&#8217;s 9 posts in all &#8211; and I&#8217;d highly recommend people take a look if they haven&#8217;t already. It&#8217;ll be worth your time. The posts go back to June 26th, 2011&#8230; which, admittedly, makes me a little slow on the uptake <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<span id="more-1638"></span></p>
<p>The absolute best piece of information in that series comes via my new favorite hardware development graphic. You&#8217;ll find it in <a href="http://blogs.mentor.com/verificationhorizons/blog/2011/04/04/part-5-the-2010-wilson-research-group-functional-verification-study/" target="_blank">part 5 of Harry&#8217;s analysis</a>&#8230; or since I&#8217;ve pasted it below, you&#8217;ll also see it by scrolling down a touch.</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" title="effort spent in verification" src="http://www.agilesoc.com/wp-content/uploads/2012/05/effort-spent-in-verification.png" alt="" width="960" height="720" /></a></p>
<p>Why do I like that graphic? Because it very clearly illustrates the near ridiculous amount of time we spend debugging code. In fact, if you compare the debug and testbench development slices of that pie, you see that we spend more time debugging code (33%) than we do writing it (28%).</p>
<hr />
<blockquote><p><strong>If you&#8217;re interested in participating in a study that&#8217;s different-but-similar, I&#8217;d appreciated you completing this <a href="https://www.surveymonkey.com/s/hardware-project-planning-survey">survey</a>.</strong></p></blockquote>
<hr />
<p>That should be an alarm bell for hardware developers &#8211; and I think it probably was for the people that saw it &#8211; but what do we do about it?</p>
<p>Seems we could handle this in a couple different ways. The first way would be to make more productive use of our time spent debugging. If we&#8217;re better at debugging, we spend less time debugging. Sounds great but I have a problem with that. The bugs have to come from somewhere. Just a guess, but they probably come from the people writing the code. Which means that what&#8217;s not immediately obvious in my new favorite graphic on (wasted) effort spent in verification is that a good portion of the 28% of the time verification engineers spend developing a testbench &#8211; and to be fair, the comparable amount of time designers spend creating a design &#8211; is dedicated to&#8230;</p>
<p><strong>&#8230;creating bugs.</strong></p>
<p>So how about this for a different direction&#8230; instead of finding faster ways to write then fix buggy code, how about writing more robust code in the first place? Better code&#8230; fewer bugs&#8230; less time spent debugging.</p>
<p>Serious.</p>
<p>If you want to know how to prevent bugs from getting into your code in the first place, you&#8217;ll want to go back to our Test-Driven Development posts from November last year. Those start <a href="http://wp.me/p1GmTc-f1">here</a>.</p>
<p>Say no to debugging. Write better code.</p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;count=none&amp;text=%28Wasted%29%20Effort%20Spent%20In%20Verification" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;count=none&amp;text=%28Wasted%29%20Effort%20Spent%20In%20Verification" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;linkname=%28Wasted%29%20Effort%20Spent%20In%20Verification" 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%2F2012%2F05%2F07%2Fwasted-effort-spent-in-verification%2F&amp;title=%28Wasted%29%20Effort%20Spent%20In%20Verification" id="wpa2a_6">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/05/07/wasted-effort-spent-in-verification/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Survey: Project Planning in Hardware and Embedded Systems Development</title>
		<link>http://www.agilesoc.com/2012/04/19/survey-project-planning-in-hardware-and-embedded-systems-development/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=survey-project-planning-in-hardware-and-embedded-systems-development</link>
		<comments>http://www.agilesoc.com/2012/04/19/survey-project-planning-in-hardware-and-embedded-systems-development/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 04:28:23 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Leadership]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1604</guid>
		<description><![CDATA[If you&#8217;re currently working in hardware and/or embedded systems development, we&#8217;d appreciate your participation in the following survey: Project Planning in Hardware And Embedded Systems Development Survey Are people in the hardware and embedded systems communities confident that their approach &#8230; <a href="http://www.agilesoc.com/2012/04/19/survey-project-planning-in-hardware-and-embedded-systems-development/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>If you&#8217;re currently working in hardware and/or embedded systems development, we&#8217;d appreciate your participation in the following survey:</strong></p>
<p><a href="https://www.surveymonkey.com/s/hardware-project-planning-survey" target="_blank">Project Planning in Hardware And Embedded Systems Development Survey</a></p>
<p>Are people in the hardware and embedded systems communities confident that their approach to project planning gives them a reasonable chance of success? We don&#8217;t know&#8230; but we&#8217;d like to.</p>
<p>We want you to know, too.</p>
<p>The survey is designed to measure confidence in the project planning approaches we use in hardware and embedded systems development. It is two pages of multiple choice questions covering tendencies in project planning and demographics. The survey takes roughly 5 minutes to complete and data is collected anonymously. Data and analysis will be published and freely/publicly available at the conclusion of the survey. The survey is being conducted by in partnership by me, Neil Johnson, and Catherine Louis of CLL-Group, LLC.</p>
<p><a href="https://www.surveymonkey.com/s/hardware-project-planning-survey" target="_blank">Project Planning in Hardware And Embedded Systems Development Survey</a></p>
<p>We&#8217;d also appreciate people&#8217;s efforts in spreading the word. Please help us by posting a link to the survey or to this page on <a href="http://www.linkedin.com" target="_blank">Linkedin</a>, <a href="http://www.facebook.com" target="_blank">Facebook</a>, <a href="http://twitter.com" target="_blank">Twitter</a>, your company intranet and/or anywhere else you go to share news and information with colleagues.</p>
<p>Thanks very much for your participation and thanks for helping make this survey a success!</p>
<p><strong>For more information, you can contact me at neil.johnson@agilesoc.com.</strong></p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;count=none&amp;text=Survey%3A%20Project%20Planning%20in%20Hardware%20and%20Embedded%20Systems%20Development" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;count=none&amp;text=Survey%3A%20Project%20Planning%20in%20Hardware%20and%20Embedded%20Systems%20Development" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;linkname=Survey%3A%20Project%20Planning%20in%20Hardware%20and%20Embedded%20Systems%20Development" 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%2F2012%2F04%2F19%2Fsurvey-project-planning-in-hardware-and-embedded-systems-development%2F&amp;title=Survey%3A%20Project%20Planning%20in%20Hardware%20and%20Embedded%20Systems%20Development" id="wpa2a_8">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/04/19/survey-project-planning-in-hardware-and-embedded-systems-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UVM Express Step 2: SVUnit with Covergroups and UVM Agents</title>
		<link>http://www.agilesoc.com/2012/03/09/uvm-express-step-2-svunit-with-covergroups-and-uvm-agents/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=uvm-express-step-2-svunit-with-covergroups-and-uvm-agents</link>
		<comments>http://www.agilesoc.com/2012/03/09/uvm-express-step-2-svunit-with-covergroups-and-uvm-agents/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 17:28:24 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[UVM]]></category>
		<category><![CDATA[UVM Express]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1532</guid>
		<description><![CDATA[I can honestly say that as of a couple weeks ago, I&#8217;ve gone further with SVUnit than I thought was realistic when I first starting looking at it. Having done more TDD, written more tests and recently finished step 2 &#8230; <a href="http://www.agilesoc.com/2012/03/09/uvm-express-step-2-svunit-with-covergroups-and-uvm-agents/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I can honestly say that as of a couple weeks ago, I&#8217;ve gone further with SVUnit than I thought was realistic when I first starting looking at it. Having done more TDD, written more tests and recently finished step 2 of my UVM Express example, I&#8217;ve come to the conclusion <em>there&#8217;s value in unit testing anything</em>! That includes coverage groups and UVM agents&#8230; which I talk about here.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-12.png"><img class="alignnone size-full wp-image-1534" title="Picture 12" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-12.png" alt="" width="523" height="76" /><span id="more-1532"></span></a></p>
<p>At UVM Express step 2, what I&#8217;m doing is building a layer of functionality atop the interface BFM that I&#8217;ve already built and talked about <a title="By Example: Test-driven Development of Verification IP" href="http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/">here</a>. In short, step 1 involved building and testing the APB interface while the goal of step 2 is to build and test a monitor, coverage group and an agent that puts it all together. That means 3 new classes and corresponding unit tests.</p>
<p>I started step 2 by building the monitor. For the monitor, the BFM tasks I created in step 1 are used to passively capture APB bus transactions. I translate the captured bus transactions into apb_xaction objects and write them to an analysis port (the apb_xaction is a new class I derived from the uvm_seq_item). To build the monitor, I ended up writing 10 tests for verifying construction and connectivity, read transactions and write transactions. Having already unit tested the BFM, I could rely on the fact the BFM tasks were working properly. The new tests would focus on the how the pin-level fields were translated to objects and written to the analysis port.</p>
<p>Next was the coverage class. I derived the coverage class from a uvm_subscriber; inside it I declared a covergroup meant to capture a reasonable range of values for address, data and transaction kind (WRITE or READ). Doing TDD of the coverage class is the point where I exceeded what I thought was reasonable with SVUnit. I&#8217;ve never unit tested coverage groups &#8211; or even thought about unit testing coverage groups for that matter &#8211; so successfully building a coverage class using TDD was me surprising myself.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-14.png"><img class="alignnone size-full wp-image-1533" title="Picture 14" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-14.png" alt="" width="523" height="77" /></a></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-15.png"><img class="alignnone size-full wp-image-1535" title="Picture 15" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-15.png" alt="" width="523" height="77" /></a></p>
<p>To build the covergroup tests, I alternated between sampling the covergroup and invoking the built-in query functions. Here&#8217;s an example:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-21.png"><img class="alignnone size-full wp-image-1581" title="Picture 21" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-21.png" alt="" width="403" height="260" /></a></p>
<p>In that snippet, you can see I&#8217;m verifying the sample method sets the sampled object properly as well as verifying 3 coverpoints for:</p>
<ul>
<li>the minimum address setting of 0&#215;0</li>
<li>the minimum data setting of 0&#215;0</li>
<li>and the kind setting of WRITE</li>
</ul>
<p>Querying the coverpoint, then sampling, then querying again verifies the coverage number goes from 0 to 100 &#8211; in the case of addr_min_cp and data_min_cp &#8211; or from 0 to 50 &#8211; in the case of kind_cp &#8211; as I expect.</p>
<p>I continue this query/sample/query sequence through the rest of the address settings that I&#8217;m interested in. Here&#8217;s another test that shows how I test the coverpoint with bins between min and max. You can see that it isn&#8217;t a simple 0% to 100% transition for the addr_bins_cp coverpoint because there are 16 bins. For the addr_bins_cp I need to calculate the expected percentages that creep up by 1/16 for every bin sampled.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-22.png"><img class="alignnone size-full wp-image-1580" title="Picture 22" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-22.png" alt="" width="535" height="310" /></a></p>
<p>Final test for the address is similar to the first but covers the maximum address.</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-17.png"><img class="alignnone size-full wp-image-1559" title="Picture 17" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-17.png" alt="" width="416" height="133" /></a></p>
<p>That wraps up the address related coverpoints. I have tests that similarly go through the data and kind fields. In all I have 6 tests for the coverage class.</p>
<p>That brings us to the last item in the list: the coverage agent. Agents were another type of class where I had initially dismissed the value of creating a unit test. This example changed my mind. The agent testing isn&#8217;t complicated but it is valuable in that it verifies connectivity between its internals. Thinking back to the number of connectivity issues I&#8217;ve chased down in my day, I reckon unit testing agents and similar container-like components is a low risk-high reward activity.</p>
<p>Here&#8217;s a test that verifies the contents of the agent are built&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-19.png"><img class="alignnone size-full wp-image-1561" title="Picture 19" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-19.png" alt="" width="349" height="79" /></a></p>
<p>Here&#8217;s the test that that verifies end-to-end connectivity by writing a bus transaction and then verifying the expected coverage results&#8230;</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-20.png"><img class="alignnone size-full wp-image-1562" title="Picture 20" src="http://www.agilesoc.com/wp-content/uploads/2012/03/Picture-20.png" alt="" width="504" height="105" /></a></p>
<p>With only those 2 tests, I&#8217;m able to verify connectivity and functionality of the entire coverage agent.</p>
<p>To summarize, using SVUnit to do TDD of the monitor, coverage class and coverage agent involved me creating a total of 18 tests. I did everything in one evening (roughly 4 hours). With the additions I explain in this post, the UVM Express example I started last week is complete up to step 2. Considering the time I spent on steps 1 and 2 so far, my opinion is that by doing TDD and taking the time to build unit tests, I&#8217;ve easily saved myself a few hours of debug time had I instead just written the code and dumped it on to somebody else.</p>
<p>It appears as though all the good things I&#8217;ve heard about TDD are coming true. And I have further reinforcement that UVM Express is a decent approach to building verification IP.</p>
<p>This entire UVM Express example is available to SVUnit early adopters. If you&#8217;re interested in becoming a SVUnit early adopter, let me know at <strong>neil.johnson@agilesoc.com</strong>!</p>
<p>Stay tuned for step 3 and the addition of random stimulus!</p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;count=none&amp;text=UVM%20Express%20Step%202%3A%20SVUnit%20with%20Covergroups%20and%20UVM%20Agents" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;count=none&amp;text=UVM%20Express%20Step%202%3A%20SVUnit%20with%20Covergroups%20and%20UVM%20Agents" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;linkname=UVM%20Express%20Step%202%3A%20SVUnit%20with%20Covergroups%20and%20UVM%20Agents" 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%2F2012%2F03%2F09%2Fuvm-express-step-2-svunit-with-covergroups-and-uvm-agents%2F&amp;title=UVM%20Express%20Step%202%3A%20SVUnit%20with%20Covergroups%20and%20UVM%20Agents" id="wpa2a_10">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/03/09/uvm-express-step-2-svunit-with-covergroups-and-uvm-agents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Definition of Ready</title>
		<link>http://www.agilesoc.com/2012/03/05/definition-of-ready/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=definition-of-ready</link>
		<comments>http://www.agilesoc.com/2012/03/05/definition-of-ready/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 14:00:49 +0000</pubDate>
		<dc:creator>Bryan Morris</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1538</guid>
		<description><![CDATA[A few weeks ago I had the pleasure of having lunch with Alan Dunne from Alcatel-Lucent here in Ottawa.  Alan has commented on a couple of our AgileSoC blog posts in the past, and is a shining example of someone &#8230; <a href="http://www.agilesoc.com/2012/03/05/definition-of-ready/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I had the pleasure of having lunch with Alan Dunne from Alcatel-Lucent here in Ottawa.  Alan has commented on a couple of our AgileSoC blog posts in the past, and is a shining example of someone who has been using agile techniques with good results in his team’s FPGA development.  Over the years Alan has been diligently refining the typical software agile techniques for his FPGA team.  It was Alan that introduced me to the “definition of ready” (let’s call it DoR  from here on in).  A DoR is a corollary to the &#8220;Definition of Done&#8221; (aka DoD) which Neil blogged about a while ago (review it here <a href="http://www.agilesoc.com/2011/07/31/by-example-done-vs-done/">http://www.agilesoc.com/2011/07/31/by-example-done-vs-done/</a>).</p>
<p><span id="more-1538"></span>What is the definition of the DoR?  Similar to the DoD, DoR is the criteria applied to every Product Story (aka feature or requirement) <em>before</em> the story is accepted into your workflow (or iteration).   It is the hurdle that every story must get over before the engineering team should add it to their todo list (e.g., sprint backlog if you’re using scrum, or your Kanban board). The DoR can be applied as the input criteria before your implementation.</p>
<p>Simply put, every product story should follow a simple three state process:</p>
<ol>
<li>a feature is considered from the Backlog, but must pass all (or most) of the items in your DoR,</li>
<li>the feature is implemented and verified, and finally</li>
<li>must pass all of the items in your DoD.</li>
</ol>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/03/DefinitionOfReady-Donesvg.png"><img class="alignnone size-full wp-image-1540" title="The &quot;Hurdles&quot; in your Workflow" src="http://www.agilesoc.com/wp-content/uploads/2012/03/DefinitionOfReady-Donesvg.png" alt="" width="954" height="690" /></a></p>
<p>The entire cross-functional team is responsible for creating (and presumably agreeing to adherence to) the DoR.  As with all things ‘agile’, the definition is permitted to be refined and adjusted throughout the project e.g., discussed during a Sprint Retrospective.  As well, the formality of a DoR can range from a checklist that must be strictly adhered to, to the “back of the napkin” / whiteboard session to indicate that the story is ready to proceed to the next phase.   It’s up to the team to decide what is appropriate.</p>
<p>While it&#8217;s true that this is another step in your process, it should be a step that is considered to help accelerate the implementation rather than slowing it down.  Having the entire team accept a DoR ensures that you are increasing your chances for success because everything you&#8217;ll need to complete the work is lined up (or is being lined up) to assist the completion.</p>
<p>While the specific elements of a DoR will likely be different for every team and project, there are a couple of common elements that I think a DoR should contain:</p>
<ul>
<li><strong>What: </strong> Is the goal or end-result of the story clearly defined?  i.e., is the expected behaviour or coverage goal as clear an unambiguous as possible at this stage of development?</li>
<li><strong>How: </strong>Have you considered how to build the feature?  It doesn’t have to be much, but some thought about how to build and integrate the product story into the existing working product.</li>
<li><strong>Who / Resources:  </strong>Are all the necessary resources (i.e., people, tools, IT infrastructure) available and committed to the product story to have a reasonable chance of completing within a reasonable amount of time?</li>
</ul>
<p>What would I include in a DoR?  I like to see the following:</p>
<ul>
<li><em>Is the expected behaviour as clearly defined and understood as possible?</em>  While this clearly leads into defining some acceptance criteria and is a prerequisite for the Definition of Done,  at this point in our development we simply need know that the behaviour expected is as clear as possible.</li>
<li><em>Have I given some thought on how it could be implemented?</em>  I prefer creating a quick UML class and sequence diagram of how the pieces work together.  My key goal here is to define what impacts will this new feature have on the <em>existing</em> work.</li>
<li><em>Should I create a short document with the design?</em>  Since I use UML I like to create a short document that glues the UML diagrams together.</li>
<li><em>Do I have a realistic handle on how long it is going to take to build?</em>  It won’t be right, but it needs to be a reasonable estimate given all that I know.</li>
<li><em>Do I have all the resources I need to complete this task?</em></li>
<li><em>Can I see any dependencies that would block me from starting or completing?</em> e.g., will I need to complete some other task? or wait on someone else? or some script is required before I start this product story.</li>
<li><em>Does everyone agree</em>?  Getting agreement is an important part of this checklist.</li>
</ul>
<p>My last point is your DoR should be viewed as an implicit agreement that should not be followed dogmatically.  Commitments made during the discussion may change even while your implementing the product story &#8212; that&#8217;s the nature of the work we do&#8230; priorities change frequently.  To summarize: use the DoR to get all your &#8216;ducks in a row&#8217;, but to stretch the metaphor, don&#8217;t expect the ducks to continue to walk in a straight line.</p>
<p><strong>What would you include in your DoR?</strong></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;count=none&amp;text=Definition%20of%20Ready" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;count=none&amp;text=Definition%20of%20Ready" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;linkname=Definition%20of%20Ready" 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%2F2012%2F03%2F05%2Fdefinition-of-ready%2F&amp;title=Definition%20of%20Ready" id="wpa2a_12">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/03/05/definition-of-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Like UVM Express</title>
		<link>http://www.agilesoc.com/2012/02/24/why-i-like-uvm-express/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-i-like-uvm-express</link>
		<comments>http://www.agilesoc.com/2012/02/24/why-i-like-uvm-express/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 21:12:58 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>
		<category><![CDATA[Mentor]]></category>
		<category><![CDATA[UVM]]></category>
		<category><![CDATA[UVM Express]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1519</guid>
		<description><![CDATA[This week Mentor released an extension to UVM called UVM Express. Normally, when someone announces an extension to the UVM, it involves more code or more tools. Not so in this case. With the library passing 67,000 lines of code &#8230; <a href="http://www.agilesoc.com/2012/02/24/why-i-like-uvm-express/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This week Mentor released an extension to UVM called UVM Express. Normally, when someone announces an extension to the UVM, it involves more code or more tools. Not so in this case. With the library passing 67,000 lines of code (can that be right??), Mentor isn&#8217;t just piling on more code. UVM Express is an &#8220;extension&#8221; that helps people use what&#8217;s already there.</p>
<p>Here&#8217;s a few excerpts from the <a href="http://verificationacademy.com/course-modules/uvm-ovm-verification/uvm-express-adopting-uvm-and-uvm-verification-style">UVM Express page</a> on Mentor&#8217;s verification academy with some additional commentary:</p>
<blockquote><p>The UVM Express is a collection of techniques, coding styles and UVM usages that are designed to increase the productivity of functional verification. The techniques include raising the abstraction level of tests, writing tests using BFM function and task calls, adding functional coverage, and adding constrained-random stimulus generation.</p></blockquote>
<p>Seasoned (aka: skeptical) verification engineers that have seen their share of new product announcements promising &#8220;increased productivity in functional verification&#8221; and suggesting &#8220;raising the level of abstraction&#8221; might be tapping the back button by this point but I&#8217;d encourage those skeptics to read on. I think the &#8220;revelations&#8221; appear in the next few sentences.<span id="more-1519"></span></p>
<blockquote><p>If you don’t have a full-time verification expert on staff, or if you are not a full-time verification engineer, UVM Express might be for you. Most verification teams do not have a full-time verification expert on staff, have time and budget restrictions and cannot adopt the UVM in whole or adopt it as quickly as they might like. These teams are usually under-staffed, under-funded and over-worked. They are exactly the kind of people that the UVM is meant to help, but the first step towards adoption is too high.</p>
<p>The UVM Express can be thought of as a series of steps or train stops on a journey that may ultimately lead to Full UVM.</p></blockquote>
<p>That, to me, is an all important recognition that while UVM is great new technology for functional verification, adopting UVM and actually realizing the benefits is <em>extremely</em> challenging.</p>
<p>In reading on you&#8217;ll see that UVM Express is a 3 step approach for building BFMs, coverage agents and stimulus agents with UVM. It&#8217;s not an all or nothing thing which means there&#8217;s value in going 1 step, 2 steps, 3 steps or further to &#8220;Full UVM&#8221; adoption. It also doesn&#8217;t touch all aspects of building a testbench (there&#8217;s still modeling and scoreboarding which UVM Express doesn&#8217;t touch); it focuses on a few important aspects of testbench development and leaves the rest, presumably, for later. A 3 step approach means you can use UVM Express to encourage people to master one particular expertise before moving on. I like that because UVM tends to be a giant wave of classes, macros, global variables, under-the-hood control and hidden optimizations that easily overwhelms newbies. Seems UVM Express could reduce that giant wave into a more manageable series of ripples. There&#8217;s more to it obviously, so I&#8217;d encourage people read through the material and watch the videos Mentor has posted to get the idea.</p>
<p>Unfortunately, the one thing that Mentor doesn&#8217;t explicitely say in their UVM Express collateral (maybe I missed it) is that UVM Express takes steps towards restoring a sense of inclusiveness within front-end development that has been steadily crumbling over the last 10 or so years.</p>
<p>It used to be that designers and verifiers all wrote code in the same language and used simple directed testing techniques. Then, in around 2000, came the invention of HVLs and release of verification libraries like eRM, RVM, VMM, AVM, OVM and now UVM. The upside of that transition was increased productivity for verification engineers, provided they could successfully climb the learning curve. The downside, however, is that HVLs and new verification libraries &#8211; not mention constrained random w/functional coverage, assertion libraries, formal and others &#8211; quickly became a wedge that&#8217;s now been driving design and verification engineers apart for more than a decade. In my opinion, UVM has the potential to become the biggest wedge of all. Left unchecked, not only will it drive designers and verifiers further apart, it will also further the gap between novice and expert verifiers.</p>
<p>UVM Express seems to be a baby step toward restoring the inclusiveness we had when everyone wrote simple Verilog or VHDL. That&#8217;s huge and I don&#8217;t think the importance of a restored sense of inclusiveness can be overstated, especially when you consider the newest gap in our development process between hardware and software engineers (we&#8217;ll leave that for another time <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). That&#8217;s really why I like UVM Express and hope that similar ideas are on the horizon.</p>
<p>For teams that are interested in agile development, UVM Express should be of particular interest. The method of incremental UVM adoption plays very nicely with the idea of incremental development. For example, a first product increment might require implementing a small subset of design features, completion of UVM Express step 1 (aka: the BFM step), creation of a simple test harness and a short list of directed tests. With that, a team can sanitize the design <em>without</em> UVM and designers would have a testbench that they&#8217;d be comfortable with, just like the old days. Subsequent increments could mean either expanding the functionality of this basic arrangement or, if necessary, moving on to UVM Express steps 2, 3 and beyond.</p>
<p>Very reasonable idea, no?</p>
<p>Another thing to mention is that UVM Express still does not address the issue of quality and robustness of verification IP (not a slight against UVM Express&#8230; it&#8217;s not meant to do that). Verifiers don&#8217;t normally do much in terms of testing-the-testbench so initial testbench quality tends to be pretty bad. I think test-driven development (TDD) is the answer there and I think TDD plays very nicely with the focus and incremental approach that UVM Express suggests. If you read my last post or follow me on Twitter (@nosnhojn), you&#8217;ll know that I&#8217;ve already started building examples for how one would pair TDD, <a title="SVUnit" href="http://www.agilesoc.com/svunit/">SVUnit</a> and UVM Express. I&#8217;ve described how I went through the BFM step in my <a title="By Example: Test-driven Development of Verification IP" href="http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/">last post</a>. You can expect more examples that describe the addition of coverage and random stimulus as I get through them.</p>
<p>To finish up, I&#8217;d recommend people take a look at UVM Express and form their own opinion while thinking about how it can be used in agile development as you go. I&#8217;d also recommend Mentor and others carry on from UVM Express. Accessibility to UVM and a battered sense of inclusiveness in hardware development have become a big problem that&#8217;s only getting worse. Seems to be a sliver of daylight on the horizon though so I get the feeling it&#8217;s not too late to turn things around.</p>
<p>Hopefully lots of exciting stuff to come!</p>
<p>-neil</p>
<p><strong>Q. What ideas out there am I missing that improve accessibility to UVM and foster inclusiveness in hardware development?</strong></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;count=none&amp;text=Why%20I%20Like%20UVM%20Express" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;count=none&amp;text=Why%20I%20Like%20UVM%20Express" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;linkname=Why%20I%20Like%20UVM%20Express" 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%2F2012%2F02%2F24%2Fwhy-i-like-uvm-express%2F&amp;title=Why%20I%20Like%20UVM%20Express" id="wpa2a_14">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/02/24/why-i-like-uvm-express/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>By Example: Test-driven Development of Verification IP</title>
		<link>http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=by-example-test-driven-development-of-verification-ip</link>
		<comments>http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 06:03:42 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[UVM]]></category>
		<category><![CDATA[UVM Express]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1483</guid>
		<description><![CDATA[I&#8217;ve been putting a lot of time into developing new examples for SVUnit lately and as of wednesday last week, I&#8217;ve finished another to show how people can use SVUnit to do test-driven development of verification IP. This particular example &#8230; <a href="http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been putting a lot of time into developing new examples for SVUnit lately and as of wednesday last week, I&#8217;ve finished another to show how people can use SVUnit to do test-driven development of verification IP.</p>
<p>This particular example involves development of an APB master BFM. APB isn&#8217;t the most complicated of bus protocols but it&#8217;s a very good subject for an example like this because the code and tests are easy to understand (there&#8217;s an APB example in the latest UVM release also, presumably for the same reason).</p>
<blockquote><p>UPDATE: for people looking at UVM Express that was announced by Mentor Graphics on Feb 22, this is my interpretation of how TDD can be applied at the lowest layer development of the BFM. Examples showing the addition of functional coverage and completion of an agent that includes sequence generation are still to come. You can see UVM Express on the Mentor website by going <a href="http://verificationacademy.com/course-modules/uvm-ovm-verification/uvm-express-adopting-uvm-and-uvm-verification-style">here</a>.</p></blockquote>
<p><span id="more-1483"></span></p>
<p>In terms of requirements and documentation for our BFM, I&#8217;ll describe what&#8217;s going on with a couple of user stories:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG107.jpg"><img class="alignnone size-medium wp-image-1489" title="IMG107" src="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG107-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG106.jpg"><img class="alignnone size-medium wp-image-1488" title="IMG106" src="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG106-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>There&#8217;s 2 stories that aptly describe this APB master verification IP. The ability to write/read memory of a peripheral and that&#8217;s pretty much it.</p>
<p>Here&#8217;s the acceptance criteria for both stories:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG108.jpg"><img class="alignnone size-medium wp-image-1490" title="IMG108" src="http://www.agilesoc.com/wp-content/uploads/2012/02/IMG108-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Because there&#8217;s 101 ways to build an APB BFM, the acceptance criteria here is important for narrowing things down. We&#8217;re looking for something equally useful for designers and verifiers so we&#8217;re not going to use anything fancy like UVM and we&#8217;re not going to use a transaction interface or anything constrained-random-like (which always seems to be the impulse of verification engineers). We&#8217;re just going to have IP with a simple method user interface on 1 side and pins on the other that could be connected to a peripheral. Arguably, a systemverilog interface is best for this so that&#8217;s the direction I went.</p>
<p>I was missing some necessary features for SVUnit so before I got started, I had to add support for generating unit test templates for systemverilog interfaces. I based the template off what I had already done for the module unit test template so it didn&#8217;t take long to get that done. With 1 test to verify the template output and 2 others to verify it compiled and simulated in both Questa and VCS, I could move on to the actual example.</p>
<p>The first tests I added to the unit test template were synchronous and asynchronous reset tests. No, they weren&#8217;t present on a story card but I thought this would be a good place to start anyway because they&#8217;re useful and would require all the pins of the interface but next to no functionality. Here&#8217;s one of those tests (fyi&#8230; `MST_EXPECT is a macro that checks each of the output ports on the interface. I expect all to be 0 after the reset):</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-7.png"><img class="alignnone size-full wp-image-1499" title="Picture 7" src="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-7.png" alt="" width="340" height="161" /></a></p>
<p>The first time I ran this test, it failed &#8211; as I expected &#8211; in compilation because none of the pins nor the reset method existed in the interface yet. I added the pins and an empty method and ran it again. That ended in a runtime failure &#8211; again as I expected &#8211; because the reset method was empty and my FAIL_IF assertions were firing (here, FAIL_IF is hidden in the MST_EXPECT but you&#8217;ll see it in the next test). Add the reset functionality in the interface method, run the test a 3rd time and voila&#8230; my first passing test and my first complete loop through the TDD cycle:</p>
<blockquote><p><strong>Add a test, confirm the test fails, add just enough design code, confirm the test passes.</strong></p></blockquote>
<p>The next test I wrote had to do with testing the functionality of the select pin for a write, which takes me into implementation of our first user story. Here&#8217;s that test:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-8.png"><img class="alignnone size-full wp-image-1498" title="Picture 8" src="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-8.png" alt="" width="398" height="227" /></a></p>
<p>You see here that I&#8217;m calling the write method on the interface and in parallel I&#8217;m checking the functionality of the select pin. Running this the first time ends of course with a compilation error because the write method doesn&#8217;t exist yet. I add an empty write method, run it again and see the failures from my FAIL_IF assertions again&#8230; which is exactly where I want to be. Now I add the code required to control the select. That means adding a state machine that takes the interface from IDLE to SETUP to ENABLE and back to IDLE while the select pin is active in SETUP and ENABLE but inactive in IDLE. Here&#8217;s the code I added to do that:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-10.png"><img class="alignnone size-full wp-image-1495" title="Picture 10" src="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-10.png" alt="" width="238" height="503" /></a></p>
<p>You&#8217;ll notice that my definition of <em>just enough</em> includes the write method, the FSM, the logic to control the select for a single write and some synchronization. I have nothing more than that because that&#8217;s all I need to pass my test. Run SVUnit again and now I have 2 passing tests: I know I can reset my interface and I know the select works properly for a single write.</p>
<p>One last example to drive it home&#8230; the next test I wrote was still focused on the select pin but was verifying it would remain active for 4 cycles in the case of back-to-back write transactions. Here&#8217;s the test:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-9.png"><img class="alignnone size-full wp-image-1497" title="Picture 9" src="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-9.png" alt="" width="387" height="256" /></a></p>
<p>That failed because the BFM couldn&#8217;t yet handle the transition from ENABLE back to SELECT. Here&#8217;s the update to the BFM that I had to make to pass the test:</p>
<p><a href="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-11.png"><img class="alignnone size-full wp-image-1496" title="Picture 11" src="http://www.agilesoc.com/wp-content/uploads/2012/02/Picture-11.png" alt="" width="389" height="228" /></a></p>
<p>Several more baby steps through the TDD cycle eventually led to a completed ABP BFM. Instead of boring you with the rest of the code, I&#8217;ll leave you with some statistics of what I ended up with after I was finished.</p>
<ul>
<li>My APB BFM ended up being ~200 lines long</li>
<li>It includes methods for writing and reading that designers and verifiers would both find easy to use</li>
<li>I ended up with 26 tests in a unit test template that was ~550 lines long</li>
<li>I had 2 tests for each port on the interface to verify it behaved correctly for single read/write transactions and back-to-back read/write transactions</li>
<li>SVUnit tells me in about 4 seconds (of which about 3.5 sec is spent in compilation) whether or not my APB BFM is working properly</li>
<li>Including the addition of interface support to SVUnit, this whole thing took me about 5 hours&#8230; from 8pm to 1:30am with a half hour break for tea at midnight <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>I&#8217;ll summarize by saying that as a beginner, I still find it a little tricky to get into TDD mode where I think in terms of tests first. Once I&#8217;m there though, I find it&#8217;s a very practical way to write code. And the best part is that you know the code is working as you write it as opposed to debugging it after the fact.</p>
<p>If you&#8217;re interested in seeing and running the results, this APB BFM example is currently available to SVUnit early adopters in the examples directory. If you&#8217;re not an SVUnit early adopter but you&#8217;re interested in becoming one, you can get a hold of me at neil.johnson@agilesoc.com.</p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;count=none&amp;text=By%20Example%3A%20Test-driven%20Development%20of%20Verification%20IP" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;count=none&amp;text=By%20Example%3A%20Test-driven%20Development%20of%20Verification%20IP" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;linkname=By%20Example%3A%20Test-driven%20Development%20of%20Verification%20IP" 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%2F2012%2F02%2F20%2Fby-example-test-driven-development-of-verification-ip%2F&amp;title=By%20Example%3A%20Test-driven%20Development%20of%20Verification%20IP" id="wpa2a_16">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/02/20/by-example-test-driven-development-of-verification-ip/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Unit Testing UVM Components: The Making Of</title>
		<link>http://www.agilesoc.com/2012/02/09/unit-testing-uvm-components-the-making-of/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=unit-testing-uvm-components-the-making-of</link>
		<comments>http://www.agilesoc.com/2012/02/09/unit-testing-uvm-components-the-making-of/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 08:43:40 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Functional Verification]]></category>
		<category><![CDATA[svunit]]></category>
		<category><![CDATA[UVM]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1459</guid>
		<description><![CDATA[Today we take another step into the practical with a demonstration of how SVUnit can be used to test UVM components. In the 3rd installment of the SVUnit Demo Series, I take people through a simple &#8211; yet complete &#8211; &#8230; <a href="http://www.agilesoc.com/2012/02/09/unit-testing-uvm-components-the-making-of/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today we take another step into the practical with a demonstration of how SVUnit can be used to test UVM components.</p>
<p>In the 3rd installment of the <a title="The SVUnit Demo Series" href="http://www.agilesoc.com/agilesoc-on-demand/the-svunit-demo-series/">SVUnit Demo Series</a>, I take people through a simple &#8211; yet complete &#8211; example of what&#8217;s required to test a UVM component within the SVUnit framework (if you haven&#8217;t seen the video yet, I&#8217;d recommend watching it <a title="SVUnit: Unit Testing UVM Components" href="http://www.agilesoc.com/agilesoc-on-demand/the-svunit-demo-series/svunit-unit-testing-uvm-components/">here</a> before reading on). The example I put together, and more importantly the plumbing under the hood required to make it work took me quite a while to put together for reasons that I don&#8217;t really get into in the video&#8230; but I will talk a bit about them here.</p>
<p>The usage model for SVUnit involves sequentially running a series of classes or modules through a corresponding list of unit test methods. In UVM however, due to the tight coupling between the phase methods in all uvm components and the instance of the uvm_root that ultimately drives the invocation of each phase method, uvm components are run in parallel.</p>
<p>One usage model wanting to be sequential and the other coded for parallelism gives us two models that are fundamentally at odds&#8230; so for unit testing UVM components, I had to get creative <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>I wouldn&#8217;t consider myself a UVM expert so the best way forward wasn&#8217;t immediately obvious. First I attempted to disable the components I wasn&#8217;t interested in by temporarily removing them from the component hierarchy. That was a dead end however because of the local access restrictions. My second idea was to replace components with a dud that effectively had no implementation&#8230; which means if the dud ran in place of an actual component, nothing would end up happening. That too was a dead end because of the same local access restrictions of the component hierarchy (in hindsight I should have known right away this was a no-go but I was still learning!).</p>
<p>The last implementation that ended up working involved creating and adding a new uvm_domain that ran in parallel with the existing UVM domain (where the run phases are stored). In the video, I talk about idle components that do nothing and a single unit under test that is driven through the run phases, iteratively if necessary. The idle components end up being idle because the newly created domain they&#8217;re assigned to &#8211; after of course going through the common phases of build, connect, end of elaboration and start of simulation &#8211; ends up raising an objection in the pre_reset_phase. That objection effectively means that components assigned to the domain never advance further. That&#8217;s what idle means&#8230; never advancing further than pre_reset.</p>
<p>I was pleasantly surprised to see that components could be assigned to different domains at any time which means I could activate and deactivate components whenever I wanted simply by changing which domain they&#8217;re assigned to.</p>
<p>When a component is deactivated, it is assigned to the new idle domain by&#8230;</p>
<pre>function void svunit_deactivate_uvm_component(uvm_component c);
  c.set_domain(svunit_idle_uvm_domain::get_svunit_domain(), 1);
endfunction</pre>
<p>Similarly, where I show a component being activated, it is being assigned to the normal uvm domain by&#8230;</p>
<pre>function void svunit_activate_uvm_component(uvm_component c);
  c.set_domain(uvm_domain::get_uvm_domain(), 1);
endfunction</pre>
<p>That seems to be the trick to being able to run uvm components sequentially in SVUnit without adding any new control or requirements to the components themselves, something I was looking to avoid from the outset.</p>
<p>If you want to take a closer look at the code, you can become an SVUnit project member and early adopter by getting a hold of me at neil.johnson@agilesoc.com.</p>
<p>Bonus marks go to the person that looks at the code and can suggest a better way of doing the same thing!</p>
<p>-neil</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;count=none&amp;text=Unit%20Testing%20UVM%20Components%3A%20The%20Making%20Of" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;count=none&amp;text=Unit%20Testing%20UVM%20Components%3A%20The%20Making%20Of" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;linkname=Unit%20Testing%20UVM%20Components%3A%20The%20Making%20Of" 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%2F2012%2F02%2F09%2Funit-testing-uvm-components-the-making-of%2F&amp;title=Unit%20Testing%20UVM%20Components%3A%20The%20Making%20Of" id="wpa2a_18">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/02/09/unit-testing-uvm-components-the-making-of/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work Smarter, Not Harder</title>
		<link>http://www.agilesoc.com/2012/01/30/work-smarter-not-harder/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=work-smarter-not-harder</link>
		<comments>http://www.agilesoc.com/2012/01/30/work-smarter-not-harder/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 18:17:22 +0000</pubDate>
		<dc:creator>nosnhojn</dc:creator>
				<category><![CDATA[Leadership]]></category>

		<guid isPermaLink="false">http://www.agilesoc.com/?p=1446</guid>
		<description><![CDATA[You&#8217;ve been working 12 hour days for the last 4 months. You&#8217;re coming off a night of only 4 hours sleep because all you could think about was the all-hands meeting with the CEO, CFO and CTO the next morning &#8230; <a href="http://www.agilesoc.com/2012/01/30/work-smarter-not-harder/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve been working 12 hour days for the last 4 months. You&#8217;re coming off a night of only 4 hours sleep because all you could think about was the all-hands meeting with the CEO, CFO and CTO the next morning where you&#8217;d be reminded that you&#8217;re 3 months behind schedule. Your alarm sounds. You drag yourself into work. You&#8217;re there in the meeting &#8211; just barely &#8211; leaning back half asleep. After listening for 30 minutes about how important &lt;this release&gt; is the company, you finally hear it&#8230;</p>
<blockquote><p>We need to find a way to work smarter (not harder).</p></blockquote>
<p>The ultimate bit of useless advice&#8230; work smarter, not harder &#8211; or some variation thereof.</p>
<p><span id="more-1446"></span>Thanks. Will do.</p>
<p>From managers (sorry for picking on managers but I think they&#8217;ll probably agree with me on this), the &#8220;work smarter not harder&#8221; imperative never seems to have the intended effect. It comes across more like &#8220;maybe if you thought about things a little bit we&#8217;d be done by now, we&#8217;d be getting rich off our stock options and instead of wasting your evenings in the office, you could be out waterskiing behind your new boat or golfing in Hawaii&#8221;.</p>
<p>What&#8217;s wrong with &#8220;work smarter&#8221;? It&#8217;s vague, there&#8217;s no method or actual goal, it devalues the hard work you <em>are</em> putting in, it always seems to come at a time of intense stress, and it injects panic instead of hope. Not exactly helpful. It is logical advice though and for some reason, I spent my weekend thinking about options for work smarter, not harder that teams can use to challenge themselves before the steady 12 hour work days kick in.</p>
<p>Here&#8217;s what I came up with&#8230;</p>
<ul>
<li>What would we have to do to cut our tools budget by 50% while maintaining our productivity and quality?</li>
<li>How could we cut our regression times in half without increasing the size of our server farm?</li>
<li>How could we get 5 days worth of work done in 4 days?</li>
<li>How would we organize ourselves if we had no one to manage us?</li>
<li>How could we limit the number of known defects to 1 or less (where less == 0)?</li>
<li>How could we cut the size of our product by 25% without losing customers?</li>
<li>How could we condense our design documentation by 75%?</li>
<li>How could we lower our defect rate by 90%?</li>
</ul>
<p>You&#8217;ll notice that these are pretty aggressive ideas and that&#8217;s on purpose. Aggressive goals like these would force teams to think outside the box (there&#8217;s another useful cliche <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) to find new/interesting/revolutionary changes to the way they work instead of looking for the evolutionary optimizations that never seem to get us much further ahead. These ideas are probably a good way to recognize the wasted time and effort in your development process that you&#8217;ve been accepting without realizing it.</p>
<p>So the challenge is&#8230; get your team together, pick a seemingly outrageous goal from the list I have or think of one on your own, brainstorm a list of ways to make it happen (no idea is too stupid) and then go do it.</p>
<p>Small optimizations are not an option. Go big or go home <img src='http://www.agilesoc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>-neil</p>
<p><strong>Q. What &#8220;work smarter&#8221; goals would you add to the list? How would you (or have you) reached those goals?</strong></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;count=none&amp;text=Work%20Smarter%2C%20Not%20Harder" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;counturl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;count=none&amp;text=Work%20Smarter%2C%20Not%20Harder" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.agilesoc.com%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;linkname=Work%20Smarter%2C%20Not%20Harder" 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%2F2012%2F01%2F30%2Fwork-smarter-not-harder%2F&amp;title=Work%20Smarter%2C%20Not%20Harder" id="wpa2a_20">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilesoc.com/2012/01/30/work-smarter-not-harder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

