<?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>Pune&#039;s Semi/EDA &#38; Embedded Forum &#187; verification</title>
	<atom:link href="http://punechips.com/tag/verification/feed/" rel="self" type="application/rss+xml" />
	<link>http://punechips.com</link>
	<description>Pune&#039;s Forum for Semiconductor/EDA and Embedded Design</description>
	<lastBuildDate>Mon, 19 Mar 2012 06:40:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Free Event: Advanced System Verilog Tips Including OVM &amp; UVM Tips by Cliff Cummings</title>
		<link>http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/</link>
		<comments>http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 14:35:06 +0000</pubDate>
		<dc:creator>punechips</dc:creator>
				<category><![CDATA[ASIC]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[pune]]></category>
		<category><![CDATA[semiconductor]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[verification]]></category>
		<category><![CDATA['system verilog]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[cliff cummings. qlogic]]></category>
		<category><![CDATA[ovm]]></category>
		<category><![CDATA[uvm]]></category>

		<guid isPermaLink="false">http://punechips.com/?p=243</guid>
		<description><![CDATA[<p><img src="http://www.sunburst-design.com/cliffc/photo_cliff_highres.gif" alt="Cliff Cummings photograph" height="320" align="left" /></p>
<p>SystemVerilog Guru <a title="Cliff Cummings Profile" href="http://www.sunburst-design.com/cliffc/" target="_blank">Cliff Cummings </a>is back in town and he will be holding another seminar on April 19th at the MCCIA auditorium on Senapati Bapat Road from 4:00pm to 7:30pm. Most recently, Cliff was here in November 2009 and this seminar gives a great opportunity for engineers to  re-engage with him. This event is completely free, but registration is required. Please visit <a title="SystemVerilog Seminar Invite" href="http://www.cadence.com/cadence/events/Pages/event.aspx?eventid=530" target="_blank">this</a> link to register and view the agenda.</p>
<p><a href="http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/" [...]<br />
<p>Continue reading <a href="http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/">Free Event: Advanced System Verilog Tips Including OVM &#038; UVM Tips by Cliff Cummings</a></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.sunburst-design.com/cliffc/photo_cliff_highres.gif" alt="Cliff Cummings photograph" height="320" align="left" /></p>
<p>SystemVerilog Guru <a title="Cliff Cummings Profile" href="http://www.sunburst-design.com/cliffc/" target="_blank">Cliff Cummings </a>is back in town and he will be holding another seminar on April 19th at the MCCIA auditorium on Senapati Bapat Road from 4:00pm to 7:30pm. Most recently, Cliff was here in November 2009 and this seminar gives a great opportunity for engineers to  re-engage with him. This event is completely free, but registration is required. Please visit <a title="SystemVerilog Seminar Invite" href="http://www.cadence.com/cadence/events/Pages/event.aspx?eventid=530" target="_blank">this</a> link to register and view the agenda.</p>
<p> This event is co-sponsored by <a title="QLogic" href="http://www.qlogic.com/Pages/default.aspx" target="_blank">Qlogic </a>and <a title="Cadence India" href="http://www.cadence.com/in/pages/default.aspx" target="_blank">Cadence </a>who I must thank profusely on behalf of the PuneChips community. It is not very often that internationally renowned experts visit our city and hold free seminars, but QLogic and Cadence have made it possible. So, I encourage everyone who has any interest in SystemVerilog to attend and participate.</p>
<div class="al2fb_like_button"><div id="fb-root"></div><script type="text/javascript">
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=224013594362235";
  fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "facebook-jssdk"));
</script>
<fb:like href="http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/" layout="standard" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://punechips.com/free-event-advanced-system-verilog-tips-including-ovm-uvm-tips-by-cliff-cummings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chip Design Verification: Test-plan/Coverage Plan</title>
		<link>http://punechips.com/chip-verification-test-plan/</link>
		<comments>http://punechips.com/chip-verification-test-plan/#comments</comments>
		<pubDate>Tue, 11 May 2010 09:45:55 +0000</pubDate>
		<dc:creator>punechips</dc:creator>
				<category><![CDATA[ASIC]]></category>
		<category><![CDATA[pune]]></category>
		<category><![CDATA[semiconductor]]></category>
		<category><![CDATA[verification]]></category>
		<category><![CDATA[coverage]]></category>
		<category><![CDATA[rtl]]></category>
		<category><![CDATA[testplan]]></category>

		<guid isPermaLink="false">http://punechips.com/?p=153</guid>
		<description><![CDATA[<p><a title="wafer - 1" href="http://www.flickr.com/photos/17425845@N00/3983024833/" target="_blank"><img src="http://farm3.static.flickr.com/2439/3983024833_cd718b491a_m.jpg" border="0" alt="wafer - 1" /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://punechips.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absMiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="oskay" href="http://www.flickr.com/photos/17425845@N00/3983024833/" target="_blank">oskay</a></small> </p>
<p>This is the second in the blog series titled <em>Field Manual for Verification Planning</em> written for PuneChips by <a href="http://www.linkedin.com/pub/suhas-belgal/4/a8a/8b4" target="_blank">Suhas Belgal </a>. The blogs deal with <a href="http://en.wikipedia.org/wiki/Functional_verification">functional verification </a>of digital ICs and cover mostly the pre-silicon verification phase.  </p>
<p><a href="http://punechips.com/chip-verification-test-plan/" [...]<br />
<p>Continue reading <a href="http://punechips.com/chip-verification-test-plan/">Chip Design Verification: Test-plan/Coverage Plan</a></p>]]></description>
			<content:encoded><![CDATA[<p><a title="wafer - 1" href="http://www.flickr.com/photos/17425845@N00/3983024833/" target="_blank"><img src="http://farm3.static.flickr.com/2439/3983024833_cd718b491a_m.jpg" border="0" alt="wafer - 1" /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://punechips.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absMiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="oskay" href="http://www.flickr.com/photos/17425845@N00/3983024833/" target="_blank">oskay</a></small> </p>
<p>This is the second in the blog series titled <em>Field Manual for Verification Planning</em> written for PuneChips by <a href="http://www.linkedin.com/pub/suhas-belgal/4/a8a/8b4" target="_blank">Suhas Belgal </a>. The blogs deal with <a href="http://en.wikipedia.org/wiki/Functional_verification">functional verification </a>of digital ICs and cover mostly the pre-silicon verification phase.  </p>
<p>Welcome to the second article in the <em>Chip Design Verification </em>blog series. In this article, we will look at the Test-plan development part of the verification program. We are going to explore the method to the madness of developing effective test-plans.  </p>
<p>Some of the questions that come to the mind are: how do we know if the test-plan is complete? How do we map the test-plan to the ‘tests’? How do we ensure coherency between the test-plan and the test data base throughout the project (and beyond)? What’s a good test-plan template? How should the cases be organized? What additional data or information needs to be in the test-plan? Throughout this article, we will address these questions. What one should expect here is not a ready-made solution, but the underlying philosophy, various options available for implementation and key considerations. As mentioned in the introductory article, there is an ‘intellectual part’ which requires the best and the brightest engineering mind and cannot be substituted by any tool or practice. This will be clearly identified wherever applicable.  </p>
<h2>Example</h2>
<p>Let’s revisit our example. The DUT is a simple SOC with some standard SOC components &#8211; a host processor, a co-processor (such as a DSP or some such computational element), internal buses for both control and high speed data transfers, memory sub-system (DDRs, SRAMs), peripheral IO interfaces such as USB, UART, and internal SOC control elements such as IO muxes, clock/power management unit, interrupt management unit.  </p>
<p>The following block diagram illustrates our example. </p>
<div id="attachment_157" class="wp-caption alignnone" style="width: 310px"><a href="http://punechips.com/wp-content/uploads/2010/05/DUT.jpg"><img class="size-medium wp-image-157 " title="Example DUT" src="http://punechips.com/wp-content/uploads/2010/05/DUT-300x225.jpg" alt="Example DUT" width="300" height="225" /></a><p class="wp-caption-text">Example DUT</p></div>
<h2><em>What</em> Rather Than <em>how</em></h2>
<p>The first step in any verification program is to review the Design/Architecture Specification documents along with any other relevant supporting documents such as ‘Standards Specifications’. This becomes the basis of what needs to be tested. At this stage, don’t worry about the how this block or chip needs to be tested or any other logistical issues such as schedule, simulation speed, resources etc., as it would cause unnecessary distraction, and might cause you to overlook some of the test-cases. Any cracks at this stage are the most expensive. Achieving a <em>high quality</em> list of ‘<em>what’</em> needs testing is indeed an <em>intellectual process</em> – this list forms the ‘denominator’ in the coverage ratio – regardless of tool or method used for measuring coverage.  </p>
<p>Given the importance, this step needs undivided attention. Block off time on your calendar, hide in conference rooms, work from home, or do whatever it takes to focus. In addition, indulge in lots of formal and informal brainstorming sessions with various members of the team such as the architects, principle designers, other senior verification engineers, software/firmware engineers, and even marketing personnel. During these discussions, don’t let the other person drag you into the ‘how’ or any other logistical issue like schedules or resources. Also note that everyone will be providing you their perspective based on their roles/background. I call these Swiss cheese slices; all will have holes, but stacked on top of each other will give you a solid list of cases.  </p>
<p>Lastly, start organizing this list hierarchically and in sections. Typically, there will be following sections:  </p>
<ul>
<li>Architectural or black box cases
<ul>
<li>eg, Read a sector from SATA interface with the interrupt enabled. In the Interrupt Service Routine (ISR), examine the contents of the sector read and clear the interrupt.</li>
</ul>
</li>
<li>Software or use cases
<ul>
<li>eg, The boot sequence; Bus enumeration sequence for the USB port</li>
</ul>
</li>
<li>Micro-architectural or Design cases (aka white box)
<ul>
<li>eg, state machine interactions; buffer full/empty conditions</li>
</ul>
</li>
<li>Block/sub-block level
<ul>
<li>eg, USB Link block level: Rest of the chip can be substituted by a Bus Functional Model (BFM)</li>
</ul>
</li>
<li>Cluster or System level interactions
<ul>
<li>eg, System Memory coherency and interactions with multiple requestors</li>
</ul>
</li>
<li>Compliance
<ul>
<li>eg, SATA, USB standards Compliance for interoperability;</li>
</ul>
</li>
<li>Error cases
<ul>
<li>eg, SATA Device sends erroneous packets</li>
</ul>
</li>
<li>Performance
<ul>
<li>eg, Memory Bandwidth  </li>
</ul>
</li>
</ul>
<p>Example of a hierarchy:  </p>
<ul>
<li>Major Feature: eg. USB packet Transfer types
<ul>
<li>Minor Feature: eg. Bulk Transfer
<ul>
<li>Test Scenario or a Test Matrix: eg. Minimum and Maximum size Bulk OUT transfers</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>In addition to writing down the test scenario, it is extremely important to note down any assumptions or questions one might have.  </p>
<h2>A Generic Block</h2>
<p>Let’s create a generic block to illustrate the process of identifying thorough top-down test scenarios:  </p>
<div id="attachment_158" class="wp-caption alignleft" style="width: 310px"><a href="http://punechips.com/wp-content/uploads/2010/05/test_block.png"><img class="size-medium wp-image-158" title="Generic Test Block" src="http://punechips.com/wp-content/uploads/2010/05/test_block-300x166.png" alt="Generic Test Block" width="300" height="166" /></a><p class="wp-caption-text">Generic Test Block</p></div>
<p>This block has several input and output data ports. There is a separate interface to access control/status registers. There are two clock domains and internal memory for local storage. In addition, there are some side band signals, along with several asynchronous events coming into the block such as reset, clock disable, mode control signal and so on. As an exercise, try mapping any blocks or designs you have worked in the past into this – you will be amazed! Make it even more interesting – map a microprocessor into this block!  </p>
<p>First order <em>Test Scenarios</em> for this generic block:  </p>
<ul>
<li>Access to all control/status register</li>
<li>Access to all memory elements (both via standard datapath, and any special backdoor access)</li>
<li>Complete protocol testing of all input and output interfaces (control and datapath)</li>
<li>Exhaustive/interesting testing of all control logic (first order and ‘interesting’ register coverage)</li>
<li>Exhaustive/interesting testing of any data computation performed in the block</li>
<li>All possible/useful combinations of the two clocks</li>
<li>Side band signal functionality</li>
<li>All asynchronous events crossed with each other and skewed against each other</li>
<li>All asynchronous events during ‘important or interesting’ states  of the block</li>
<li>Memory element access during operations – corner cases (buffer full, empty)</li>
<li>Stalling</li>
<li>Hard and soft reset behavior</li>
<li>Power management cases</li>
<li>Performance</li>
</ul>
<p>We just saw the ‘science’ portion of test-planning! Generating a robust first order list of scenarios for any block should be possible by going through the above exercise. This starts becoming an ‘art’ (or the intellectual process), once we start creating second order or combination tests; in short, the optimization process.  </p>
<h2>Priorities</h2>
<p>Now that we have a list of ‘all’ cases that need to be tested or covered, next thing to do is to prioritize them according to the importance. This can be used throughout the project to make tough schedule related calls. The priority should also be used to generate weighted coverage numbers.  </p>
<p>What is the basis of the priorities or the importance? The following set will serve as a useful guideline:  </p>
<ul>
<li>Atomic hardware functions that cannot be worked around using software. For Instance, basic addition instruction in a microprocessor</li>
<li>Advertised features or normal operation of the machine are more important than others</li>
<li>Any bug that can cause a catastrophic failure in the normal operation of the machine.</li>
</ul>
<p>Another pragmatic view point is ‘assuming worst case scenarios’ – let’s say a bug that slips affects the reset or the boot sequence – this chip will be DOA (Dead on Arrival) – no bring-up or characterization can be done on this chip. Instead, say, the access to certain memory locations don’t work – this is definitely not something to be proud of, but, on the positive side, at least the operations of the chip using the lower memory locations can be tested out (including the development of the software). Thus, one would put the boot sequence test at a higher priority compared to the access to the entire memory range. Again, note, this example was just to illustrate relative priorities. Any verification plan that does not cover access to the entire memory map is indeed a very poor one!  </p>
<p>Note that this was just to illustrate how one can go about the prioritizing. There are a lot more factors that need to be considered for prioritizing that depends on your project goals.  </p>
<h2>Reviews</h2>
<p>We have identified, documented and prioritized all the test-cases (the ‘<em>what’</em> portion). It’s time for a formal review. Very important to note – DO NOT WAIT to complete identifying and documenting <em>all</em> the cases before calling a review. As we all know, verification is an NP complete problem, and thus, one can never say that their plan is theoretically complete! Use judgment, and call the review once the plan is at, say, 90% mark. Some useful guidelines for the review:  </p>
<ul>
<li>Circulate the review material well in advance so that the audience has a chance to study it.</li>
<li>No lengthy text or narration.</li>
<li>Walk through the cases hierarchically (breadth first)</li>
<li>Use appropriate visual forms such as tables, lists, pictures (remember, a picture is worth a 1000 words)</li>
<li>Start with a block diagram and a description of the DUT ‘in your own words’</li>
<li>Required Audience: Design counterparts, architects, and senior design/verification members, owners of adjacent blocks, owners of central blocks, software/firmware engineers, System/board designers and Managers.</li>
<li>Have your manager or colleague collect action items.</li>
<li>Don’t let anyone hijack the meeting. Keep it under your control – it’s your meeting.</li>
<li>Call extension meetings if all the material cannot be covered in one session.</li>
<li>Solicit feedback on the ‘priority settings’.</li>
<li>Follow up on all action items and send the updated plan once all the action items are completed.</li>
<li>Don’t get into the ‘how portion’ (or don’t let any drag you into the implementation) – Cover that topic in a separate review.  </li>
</ul>
<h2>The ‘how’ Portion</h2>
<p>Now that all the cases that need to be covered are completely documented and reviewed, let’s look at the ‘how’ part. This part will determine or form the specification for the test-bench.  </p>
<p>The first order of classification will be based on whether something is tested using simulation, formal method or emulation.  Simulation provides more controllability and observability. This makes it easier and more practical to hit white-box cases. Also, debugging is much harder on the emulator. You don’t want to be exposed to first order bugs in the basic operation during the emulation. In fact, simulation based testing needs to be used as a screen before starting the emulation.  </p>
<p>Within simulation the scope of the DUT is the other decision point. Most of the cases intrinsic to a block should be tested at a block level. This makes simulations faster, debugging quicker and test setups easier. Also, during earlier phases of the project, all the adjacent blocks may not be developed or stable for cluster or system level testing.  </p>
<p>Formal method or tools are still limited in terms of ability. These are best suited for smaller blocks that are well specified.  </p>
<p>Cases that need a large number of cycles are best suited for emulation. Other types of cases suited for emulation or prototyping are the ones that test interoperability with real-life interfaces or devices such as SATA or USB, in our example.  </p>
<p>To summarize, here are some of the key factors influencing the testing method:  </p>
<ul>
<li>Debug-ability: Areas most likely to have lots of bugs. This is true for normal machine operation during initial phases of verification (fresh RTL code).</li>
<li>Cases hard to control: error cases, multiple events happening at precise points</li>
<li>Cycles needed to setup and exercise the case</li>
<li>Requirement of real life devices to provide the stimulus/response(interoperability)</li>
<li>Testing speed (some cases need at-speed testing)</li>
<li>Number of theoretical cases. Some scenarios can explode – and there may be an opportunity to use formal methods to cover such scenarios  </li>
</ul>
<p>Another practical tip here is to put greater emphasis on debugging ease and simulation times/turn times during the high bug phase, for instance, when there is fresh RTL code.  There is no need to worry about phases or cases where the probability or likelihood of hitting a bug is very low.  </p>
<p>Notes:  </p>
<ul>
<li>The test-bench and the test cases should be design in such a way that most or majority of the tests at a lower scope can be reused at a higher level.  Block level cases should be reusable at cluster level, and system level simulation cases should be reusable on emulators. This provides two benefits: the lower level or scope tests can be used as a screen to start testing at the higher level, thereby eliminating any build or database coherency issues. Secondly, the test setup knowledge at lower levels can be used at higher levels. For instance, for system level test cases, one should not be required to understand detailed setup up procedures of a SATA transfer in the context of the SATA Link when it has already been put in place at a lower level test-bench.</li>
<li>Lastly, apply the 80-20 rule for test-bench designs. That is 80% (read as majority) of cases should be supported by the mainstream test-bench. For the remaining 20% (read as minority), a special ability or a hook needs to be added to the test-bench. Again, apply the 80-20 rule for this remaining 20% and keep going till all cases are covered. This will be reviewed again, and in greater detail, with examples in a future article covering test-bench designs.  </li>
</ul>
<h2>Coverage Measurement/Key Indicators/Metrics</h2>
<p>Once the test-plan has been filled with all the test cases (or coverage scenarios) along with the priorities and testing methods, one can start creating various indicators and metrics.  </p>
<p>A single number providing the state of the verification program is always desirable. However, it is important to build this in a hierarchical fashion. This way, one gets to look at the coverage at various granularities such as block based, feature based, scope based and so on. This helps to make tactical project decisions.  In the final section we will look at how all of this data can be organized and consumed.  </p>
<p>The most popular methods of measuring coverage are:  </p>
<ul>
<li>Code coverage – toggle, block, condition, state machine, expression.<br />
This is the easiest way to generate coverage information. It is built into most simulators these days and can be turned ON or OFF with the flick of a switch.<br />
The advantages of code coverage are the ease of use, and detection of any first order hole. On the down side, it doesn’t quite tell us if we are done. Any ‘missing’ RTL code cannot be detected. Also, the coverage information is mostly combinatorial in nature. Sequential cases don’t get measured. Lastly, dead logic or architecturally irrelevant cases provide false negatives. <br />
It is a necessary but not a sufficient condition. Lastly, code coverage monitoring in the mid-phase of the project is a good way to track project progress.</li>
<li>Functional coverage:<br />
One of the things that code coverage doesn’t provide is a coverage view abstracted at a higher level. For instance, one will get information about whether all the bits toggled on the address bus, but it will not tell us if all ‘regions’ of the memory were accessed by a particular memory master. This kind of abstracted coverage information starts tying closely with the desired functionality of a particular block. In most of the modern HVLs (Hardware Verification Languages), one can easily instrument these ‘coverage points’ or ‘coverage buckets’ to provide an abstracted view of the coverage. This is the most effective way to track coverage, provided test-benches are developed using HVLs.</li>
<li>Assertion Based Coverage:<br />
This is a form of functional coverage.  There are several assertion languages and libraries that one can choose from. Interesting cases can be coded as assertions and the simulator can then ‘watch’ for these assertions during simulations. Note, one can construct very ‘smart’ sequential or ‘temporal’ assertion, and tie these closely to the coverage-plan/test-plan.</li>
<li>Register Coverage:<br />
This is a special type of functional coverage. Covering all the bits or knobs that control a particular block’s behavior can provide very useful first order coverage. One can then create combinations of various fields to cover interesting cases.  </li>
</ul>
<p>Knowing or deciding ‘what’ needs to be measured and setting goals is more of an art than science. This is the <em>intellectual exercise</em>. Let’s take a block with 20 control bits or knobs. If you let a coverage tool measure the coverage on this without any constraints, it will look for all permutations and combinations of these bits or fields – that’s more than a million cases and most of the cases may be useless or irrelevant. Identifying or selecting ‘interesting’ cases is indeed an intellectual exercise. How good someone is in doing this will determine the efficiency and robustness of the verification project.  </p>
<p>Another way to reduce the coverage set or optimize it without risk is to look at orthogonal cases, based on the design and usage. For instance, one may never use two features or blocks of the design simultaneously &#8211; say, SATA and the Memory Card interface will never be in a product together. This can be used to drastically reduce the number of test cases. Note, that this can be dangerous if used without proper care. First of all, this has to be documented very clearly. Even better, make it a requirement that such cases need to be officially accepted by the program management.  </p>
<h2>Test-Plan Management System</h2>
<p>Last but not the least is how do we manage all this data? There is a lot of important data that needs to be created, stored and accessed with different views. Traditional ‘Word’ or even Excel based test-plans are not enough. These are not ‘executable’, hard to keep coherent with the test-base. Oftentimes, the testplan document never gets updated once it is reviewed, and by the end of the project it is almost obsolete!  </p>
<p>The real solution is to create a database for all the information, similar to bug databases. There are several solutions available in the market. Cadence’s VManager™ or Mentor’s ReqTracer™ are some of the examples. Jasper DA offers a freeware named Gameplan ™. Or, one can develop an in-house tool to manage the test-plans. Let’s look at how we might want to organize and access this data.  </p>
<p>Key factors to keep in mind:  </p>
<ul>
<li>Ease of use.  Anything complex becomes a deterrent.</li>
<li> Test-plan is a live document – keeps getting updated whenever new ideas prop up, and everyone ought to be viewing the most recent version</li>
<li>Ability for different views</li>
<li>Marrying the scenarios with simulation or implementation data</li>
<li>Ability to tightly couple with the testbench collateral</li>
<li>Track specification/design changes seamlessly</li>
<li>Removing any room for ‘oops’ through automation</li>
<li>Query based access</li>
<li>Using test-plan to manage status information including coverage data.</li>
</ul>
<h3>Records</h3>
<p>The atomic record in this database is a test case (or a test scenario). Some of the important fields are:  </p>
<ul>
<li>Summary and description field,</li>
<li> Module, feature, sub-feature</li>
<li>Owner</li>
<li>Test-case submitter (there may be a situation that someone other than the block owner thinks of a case)</li>
<li>Testing Method(s) used: simulation/emulation/formal</li>
<li>Scope(s): Block/Cluster/System</li>
<li>Priority/Weight</li>
<li>Test(s) that will cover this scenario</li>
<li>Assumptions/Questions associated</li>
<li>Coverage measurement method</li>
<li>Status (based on back-annotated simulation data)</li>
<li>Tags:  This can be used for queries to build different types of ‘test-lists’ or ‘regression lists’ based on the need.</li>
<li>Simulation directives</li>
</ul>
<p>Of course, once you start thinking down this route, there may be other attributes that you can use to make the system even more efficient for your environment.  </p>
<h3>Access</h3>
<p>Various access points are desired for proper use of this data. Some of these are:  </p>
<ul>
<li>Easy to use GUI based system to enter test cases, one at a time</li>
<li>Importing (from, say, an excel spreadsheet)</li>
<li>Backdoor access for simulation scripts (query based)</li>
<li>Exporting into standard formats such as excel (query based)</li>
<li>Back annotation of results and other status information</li>
<li>Reporting – html or other forms based on queries (for reviews)</li>
<li>Metric reporting in a tabular or graphical form (query based) </li>
</ul>
<p>So, we have seen the art and science behind creation of test-plans/coverage plans. Test/coverage plan development is a very creative process. To begin with, one needs to have an in-depth knowledge of the DUT being implemented. The ‘hunch’ is a cumulative knowledge of the protocols involved, usage perspective including the use-cases, intent of  the features, design methods used, historical perspective (knowing USB1.0,2.0 while testing 3.0), knowing where the bugs lie. The ‘hunch’ then allows one to prioritize, shortlist ‘interesting cases’. This allows crafting of the next ‘killer’ test case. However, this alone is not enough. Verification is as much about discipline. One might catch all the killer corner cases in a DUT, but completely overlook an entire section! Cases like these are not uncommon. Having a disciplined systematic approach in combing through all the possible test scenarios is a must. This is the ‘science’ behind verification test planning.  </p>
<p>In the next article, we will focus on test-bench design – on how to build robust and reusable test-benches. You might have the best or most exhaustive test-plan, but a poor test-bench can be a project killer.</p>
<p><strong>About the Author</strong>:  Suhas Belgal has 17 plus years of experience in Chip Design, Emulation, Modeling and Verification, including 9 years as a Verification Manager. During these years, Suhas has worked for several multi-billion dollar companies such as <a href="http://www.intel.com">Intel </a>, <a href="http://www.lsi.com">LSI</a>, <a href="http://www.mentor.com">Mentor Graphics</a>, and various start ups, and co-founded a Verification Services company. Over the years, Suhas has played key roles several high profile design teams such as Pentium II, and successfully led several SoC chips to production.  He has experience in a wide range of Verification Methods and tools, and has been a presenter and panel member at various conferences, including the DAC. He has a master’s degree in EE from <a href="http://www.utexas.edu/">University of Texas at Austin </a>and a bachelor’s from <a href="http://www.vjti.ac.in/">VJTI, Mumbai</a>.</p>
<div class="al2fb_like_button"><div id="fb-root"></div><script type="text/javascript">
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=224013594362235";
  fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "facebook-jssdk"));
</script>
<fb:like href="http://punechips.com/chip-verification-test-plan/" layout="standard" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://punechips.com/chip-verification-test-plan/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introduction to Chip Verification Planning</title>
		<link>http://punechips.com/introduction-to-chip-verification-planning/</link>
		<comments>http://punechips.com/introduction-to-chip-verification-planning/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 14:20:57 +0000</pubDate>
		<dc:creator>punechips</dc:creator>
				<category><![CDATA[ASIC]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[semiconductor]]></category>
		<category><![CDATA[verification]]></category>
		<category><![CDATA[emulation]]></category>
		<category><![CDATA[hvl]]></category>
		<category><![CDATA[ovm]]></category>
		<category><![CDATA[rtl]]></category>
		<category><![CDATA[simulation]]></category>
		<category><![CDATA[vmm]]></category>

		<guid isPermaLink="false">http://punechips.com/?p=79</guid>
		<description><![CDATA[<p><a href="http://punechips.com/wp-content/uploads/2010/02/Suhas.jpg"><img class="size-thumbnail wp-image-82 alignnone" title="Suhas Belgal" src="http://punechips.com/wp-content/uploads/2010/02/Suhas-150x150.jpg" alt="Suhas Belgal" width="150" height="150" /></a></p>
<p>This is the first in a series of blogs written for PuneChips by <a href="http://www.linkedin.com/pub/suhas-belgal/4/a8a/8b4" target="_blank">Suhas Belgal </a>titled <em>Field Manual for Verification Planning</em>. The blogs deal with <a href="http://en.wikipedia.org/wiki/Functional_verification">functional verification </a>of digital ICs and cover mostly the pre-silicon verification phase.     </p>
<p><a href="http://punechips.com/introduction-to-chip-verification-planning/" [...]<br />
<p>Continue reading <a href="http://punechips.com/introduction-to-chip-verification-planning/">Introduction to Chip Verification Planning</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://punechips.com/wp-content/uploads/2010/02/Suhas.jpg"><img class="size-thumbnail wp-image-82 alignnone" title="Suhas Belgal" src="http://punechips.com/wp-content/uploads/2010/02/Suhas-150x150.jpg" alt="Suhas Belgal" width="150" height="150" /></a></p>
<p>This is the first in a series of blogs written for PuneChips by <a href="http://www.linkedin.com/pub/suhas-belgal/4/a8a/8b4" target="_blank">Suhas Belgal </a>titled <em>Field Manual for Verification Planning</em>. The blogs deal with <a href="http://en.wikipedia.org/wiki/Functional_verification">functional verification </a>of digital ICs and cover mostly the pre-silicon verification phase.     </p>
<p>The objective of this series is to provide a view of the ‘art’ of design verification. Everyone has heard the quote “Verification is an <a href="http://en.wikipedia.org/wiki/NP-complete">NP complete </a>problem – it can never be done”.  If so, how should one schedule the <em>verification program</em>? When is the chip really <em>verification clear</em> for tape-out or production? If it is art, how does one measure the quality? Or, how does one turn it into ‘science’ and bring predictability into the equation?  Recently, while reading <a href="http://en.wikipedia.org/wiki/Robert_M._Pirsig">Robert Pirsig’s </a>famous book “<a href="http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance:_An_Inquiry_into_Values">Zen and the art of Motorcycle Maintenance</a>”, the questions of ‘art’, ‘science’ and ‘quality’ of the chip being designed crossed my mind…This series will provide a practical insight into the various aspects of verification, different tools, methodologies, best known practices, key indicators, tracking and management while trying to reflect on the fundamental question of whether verification can be <em>completed</em>. All of these will help bringing in the much needed predictability into the verification program. However, all of the best know practices and automation tools in the world can still not replace the need for <em>engineering intelligence</em>. You still need the best and the brightest minds to tackle the challenges. On the flip side, this is what makes verification challenging and interesting, and will attract the best minds out there. So, sprinkled throughout this series, you will find the term ‘intellectual process’ or ‘intellectual exercise’; the part of the process which still needs human intelligence or an engineering discretion will be identified as the <em>intellectual process</em> or the <em>intellectual exercise</em>.The basic goal of any chip design verification project is to find ‘all’ the bugs before <a href="http://en.wikipedia.org/wiki/Tapeout">tape-out</a>! One way to bring pragmatism is to clearly identify the context of the statement of bug free design. That is, the design should be bug free for a crisply identified goal such as ‘customer demo/samples’ or ‘to enable software development’.  Even with such constraints, it still remains to be an NP complete problem. This is where statistics, probability can come in, and various indicators can be used to define the verification quality.          </p>
<p>In addition to the fundamental goal, there are other objectives such as productivity, efficiency, resource usage, ‘finding critical bugs earlier’ and so on. These are as important, as a matter of fact, even more important oftentimes than the basic question of ‘have we caught <em>all</em> the bugs’.     </p>
<h3><span style="color: #999999;">Basic Dimensions </span>  </h3>
<p>The three basic dimensions of verification are ‘Coverage’, ‘Stimulus’ and ‘Checker’. Regardless of the tools or methodology, any verification environment consists of these three parts.       </p>
<p><em>Coverage</em> addresses the fundamental question of how complete the verification is. This being an NP complete problem can never be complete, theoretically. However, in reality, setting the ‘denominator’ of the ratio &#8211; ‘covered vs planned’, becomes an <em>intellectual exercise</em>. Certain practices and pitfalls will be covered in detail in the ‘coverage/testplan’ topic.      </p>
<p><em>Stimulus</em> can be deterministic, but can explode very quickly. Say, a 2 input functional block can be covered exhaustively in 4 cases. But, a 256 input block will require  1.1579….e+77 combinations – impractical! Even worse, sequential elements add a time dimension. Finding proper methods to select or prioritize ‘important’ or ‘high leverage’ stimulus is an <em>intellectual exercise</em>.       </p>
<p><em>Checker</em> or rather, not having a thorough checker will make the two other dimensions useless. One can have a ‘complete’ checker only if the definition of that the expected behavior is complete. Usually, this is covered by the Design or the Architecture Specification of the chip or the product. Proper interpretation and checking for completeness is an <em>intellectual process</em>.     </p>
<h3><span style="color: #999999;">Flow/Process</span>  </h3>
<p>A typical flow involves the following steps/phases, interspersed with reviews (every phase should begin and end with reviews).       </p>
<ol>
<li>Design/Specification study</li>
<li>Coverage planning (traditionally known as test-plan development)</li>
<li>Testbench design planning</li>
<li>Setting up the Verification Environment – databases, bug tracker, templates, regression/simulation environment, debug process, indicator tracking</li>
<li>Testbench implementation</li>
<li>Coverage plan implementation</li>
<li>Bringup (fresh <a href="http://en.wikipedia.org/wiki/Register_transfer_level">RTL</a> tested against fresh testbench)</li>
<li>Feature coverage</li>
<li>Coverage exploration</li>
<li>Final Checklist</li>
</ol>
<h3><span style="color: #999999;">Verification Methods  </span></h3>
<p>Several methods can be employed to carry out pre-silicon verification. The primary being Simulation based, Emulation based and the Formal method. All have pros and cons and can be used to complement each other.       </p>
<p>Simulation method utilizes dynamic simulation techniques used at different scopes such as ‘module or block’ level, ‘cluster’ level or the ‘full chip’ level.  Lower granularity helps speed up simulations, catch basic bugs quickly.  However, cluster or full chip environments help check the interactions between the blocks, which are a common source of bugs. However, at higher levels, simulation speed slows down, and one starts encountering ‘controllability/observability ’ problems.       </p>
<p>Emulation, hardware acceleration, proto-typing allows testing at much higher speed, and possibly at-speed.  Hardware/software co-verification, using real life devices can be accomplished using emulators.  Primary advantage is to get large number of cycles needed reach certain states of the design, say testing thousands of HD video frames. Also, one can actually bring-up peripheral devices such as SATA hard drives, thus taking out any risk in the implementation. Downsides are the cost and debug ability.       </p>
<p>Formal methods prove behavior of a certain section of the design to match a certain set of properties <em>mathematically</em>. Thus, it’s exhaustive and complete! However, there are logistical limitations to the current generation of tools such as design size, speed, and even then, coverage is still only as good as the property set. Defining the property set is an <em>intellectual process</em>.     </p>
<h3><span style="color: #999999;">Productivity  </span></h3>
<p>Productivity or the efficiency pertains to the processes, environment, tools, methods which can improve the verification cycle. The major costs are the ‘direct’ $ cost, human power cost and the cost in terms of total calendar time.  Simulators, emulators, server farms, other tools contribute to the direct $ cost. Calendar time is the critical path, and accounts for the processes that cannot be temporally scaled.       </p>
<p>Buy vs. brew is always an important decision, and comes across multiple times during a project. The maintenance cost of developing a tool in-house should not be ignored while making this decision.       </p>
<p>The non-deterministic, open-ended nature of verification complicates resource planning too. Predicting the number of simulation licenses needed, server farm size/capacity and estimating the total cycles needed to flush out ‘all the bugs’ is an <em>intellectual process</em>.       </p>
<p>Simulation license usage, cycles, build times, run-times need to be tracked before they can be improved. Scripts/tools to track these indicators should be planned for. In addition, the bug tracking (rate of opening/closing bugs, turnaround times etc), rate of test development, coverage improvement needs to be constantly measured for improvement.     </p>
<h3><span style="color: #999999;">Environment </span>  </h3>
<p><em>Verification Environment</em> is a key part of the verification project. This includes organizing the verification collateral, selecting an efficient and robust revision control system, work flow, automation to avoid manual mistakes and improve efficiency, integration of various pieces of verification and choosing an efficient platform for the entire team, including designers, to develop complex projects. And, in today’s global development community, an efficient environment is the key to success. Groups can be spread all over the world, but their development environment should be identical or seamless.       </p>
<p>Discipline and attention to detail are extremely important. How many times have we heard or experienced cases where bugs have slipped through the cracks in spite of having a ‘test’ that should have caught them – just because the test was not run on the final version of the netlist, or the test was not a part of a certain regression list. These mistakes are expensive, to say the least. Adding mere stress and pressure on engineers doesn’t help either. A fool-proof process and a set of tools/scripts can mitigate these circumstances.     </p>
<h3><span style="color: #999999;">Verification Language    </span></h3>
<p>The biggest wars in the verification world are on this topic. The modeling language for creating test-bench and the tests is central to any verification strategy. Starting with a bit of a historical perspective, Verilog or VHDL have been traditionally used for verification along with design. The ‘behavioral’ constructs in these languages aid verification tasks. Even today, several companies/projects rely on verification strategies based entirely on Verilog or VHDL. Using <a href="http://en.wikipedia.org/wiki/Verilog">Verilog</a> or <a href="http://en.wikipedia.org/wiki/VHDL">VHDL</a> has its advantages; the language knowledge is universal, no <em>special</em> simulators are needed, and most of the EDA tools understand and support these languages. On the downside, these languages were primarily designed to describe digital circuits/logic. They don’t have powerful data structure constructs. Randomization support is very limited.       </p>
<p>To circumvent these limitations, common powerful languages/scripts such as C and Perl have been introduced. C or Perl provide the language or programming power. However, they are still not specifically ‘verification languages’, and every project/company tend to have their own implementation of the methodology.       </p>
<p>Over 10 years ago, a new breed of specialized languages known as ‘<a href="http://en.wikipedia.org/wiki/Hardware_verification_language">Hardware Verification Languages (HVL</a>)’ came into existence, starting with Vera and Specman. Vera was born inside Sun Microsystems as an internal verification language/tool. This was spun off and eventually became part of Synopsys. Most recently, the industry trend has been towards <em>SystemVerilog</em>, in an effort to standardize on the language.  HVLs provide strong Object Oriented Structure and advanced features for randomization and constraint solving. In addition, they have become platforms for myriad of verification functions such as coverage monitoring, assertions and so on.      </p>
<p>Finally, the most recent development has been that of a methodology layer via libraries. <a href="http://www.vmmcentral.org/">VMM</a>, OVM are the two main methodologies in the market today for System Verilog.      </p>
<p>One could argue that everything that is provided by these higher level HVLs or the libraries can be implemented in Verilog or VHDL. True! But, firstly you get a tremendous boost in productivity as these libraries or languages provide a high number of pre-defined functions, constructs. Secondly, these libraries provide a framework that inherently makes the collateral reusable and efficient.        </p>
<h3><span style="color: #999999;">Random, Directed, Emulation?     </span></h3>
<p>Another contentious area for design and verification teams is to decide between random, constrained random or directed testing. Another dimension of this debate is the simulation vs. emulation decision. The pros and cons will be discussed in detail in a future article of this series.        </p>
<p>Sometimes, it helps using analogues. For instance, how would one test out a car – would one use a test-track with ‘simulated’ skids, obstacles and other external environmental factors, or just drive 100K miles on an expressway. One could use this analogy further and even look at orthogonals – say, if the blinkers have been tested in the garage, is it necessary to test them while driving through winding hilly roads, or say, while driving through winding hilly roads while the outside temperature is sub zero <em>and</em> at night. This helps reduce the set of <em>interesting</em> test cases.      </p>
<h3><span style="color: #999999;">Reviews/Checklist    </span></h3>
<p>As mentioned earlier, discipline is very important in Verification. Verification is the final safety net prior to tape-out. Any hole can potentially cost millions. In addition to inserting checks and balances into the tools/scripts/processes, reviews and checklists have a significant role in any verification project.        </p>
<p>For reviews, key things to understand are:      </p>
<ul>
<li>Primary intent should be to solicit feedback from other team members. Thus, every attempt should be made to communicate the content clearly to the attendees. A good idea or a clarification or detection of an error can save lots of time, frustration downstream.</li>
<li>Put as many figures, tables as possible. Avoid textual paragraphs. A picture is worth 1000 words!</li>
<li>Example <em>code</em> review is highly recommended.</li>
<li>Time should be used efficiently but one should not limit wall-clock times     </li>
</ul>
<p>Some of the useful review/checklists, other than the usual, are:      </p>
<ul>
<li>Tape-out checklist. Some of the items are
<ul>
<li>Waived coverage points or tests along with justification</li>
<li>Waived bugs along with justification</li>
<li>Uncovered planned items, if any, with justification/risk assessment</li>
<li>‘<em>What-else’</em> checklist: Once all the planned verification activities are completed along with a satisfactory bug curve, a series of <em>what else</em> reviews are recommended. This is a free flowing brainstorming of what else can possibly be done to find the bugs. As we all know, all bugs can never be found – which also means there are always more bugs in the design to be found and these reviews can potentially lead to them.</li>
<li>‘<em>Last set of bugs’</em> – (This category or the review needs a better name!): Towards the end, around the time the ‘<em>what-else’</em> reviews are held, the last set of bugs uncovered should be reviewed or analyzed for the following:
<ul>
<li>What found the problem – was it accidental?</li>
<li>What caused the bug – did it exist all along or a recent event caused it?</li>
<li>Could it have been caught earlier?</li>
<li>What if it had slipped? Is there a workaround? This tells the severity of the bug    </li>
</ul>
</li>
</ul>
</li>
</ul>
<p>These questions and discussions usually give rise to a few more clues or ideas about how to look for the remaining residual bugs.      </p>
<h3><span style="color: #999999;">Modeling     </span></h3>
<p>Modeling is a very generic term. In the context of verification, this is used for a ‘model’ that describes the correct or golden behavior. Often times, this arises out of architectural exploration efforts.        </p>
<p>Models can be developed in C (most common), MatLab, SystemC, SystemVerilog, and Verilog or for that matter, any language.        </p>
<p>When used as a golden model for verification purposes, it is very important to consider the verification requirements as this can have a very high impact on the productivity or efficiency of the project.  Most of the time, there are surprises, as the models are developed much before verification starts and/or by different groups. Avoid them by planning and collaborating ahead of time with the modeling team. Verifying these models independently is always an interesting and important problem.     </p>
<h3><span style="color: #888888;">Performance Verification</span>     </h3>
<p>This being very important, requires explicit attention. Performance, as opposed to functional verification, can be tricky due to two things. Firstly, setting up cases or ‘checking mechanism’ is not covered by the traditional functional verification collateral – thus, it is more work and often comes as a surprise. Secondly, identifying, defining and quantifying performance metrics is non-trivial. For instance, if the specification identifies the startup time of, say, a product like an iPod to be less than 2 seconds, then one needs to identify functionality in the hardware that contributes to this delay and then use that number to check for correctness. Sometimes, ‘quality’ aspects are not clearly quantified – especially, the acceptable numbers. Video quality is a good example of this.      </p>
<h3><span style="color: #888888;">Other Verification Areas</span>     </h3>
<p>While planning for verification, following areas or special cases need to be considered   </p>
<ul>
<li>Handling clock domain crossings</li>
<li>Simulation artifacts, for instance, code that could mask propagation of Xs</li>
<li>Design rule violations that will not be caught during traditional simulation/emulation</li>
<li>Check for  potential errors introduced by the RTL -&gt; GDS process</li>
<li>Analog components, and their interface with the digital logic</li>
<li>Process variations and the logic implemented to compensate, for instance, DLLs.</li>
<li>Power simulations are going to be commonplace going forward</li>
</ul>
<h3><span style="color: #888888;">Example DUT</span>     </h3>
<p>Let’s take an example <a href="http://en.wikipedia.org/wiki/Device_under_test">DUT</a> – a simple SOC. We will throw in some standard SOC components &#8211; a host processor, a co-processor (such as a DSP or some such computational element), internal buses for both control and high speed data transfers, a memory sub-system (DDRs, SRAMs), peripheral IO interfaces such as USB, PCIe, UART, and internal SOC control elements such as IO muxes, clock/power management unit, interrupt management unit.       </p>
<p>The following block diagram illustrates our example. All the future topics in this series will be discussed in the context of this example. </p>
<div id="attachment_89" class="wp-caption alignnone" style="width: 310px"><a href="http://punechips.com/wp-content/uploads/2010/02/DUT1.jpg"><img class="size-medium wp-image-89 " title="Example SoC DUT" src="http://punechips.com/wp-content/uploads/2010/02/DUT1-300x225.jpg" alt="Example of a SoC DUT" width="300" height="225" /></a><p class="wp-caption-text">Example of a SoC DUT</p></div>
<h3><span style="color: #888888;">Summary</span></h3>
<p>Throughout this series, we will make an effort to identify the ‘art’ and ‘science’ involved in Chip verification, with practical tips or some of the best known practices. Through use of advanced techniques, tools, methods, discipline, best practices one can mitigate the non-deterministic nature of verification. These can be used for accurate scheduling, planning and a high quality execution of verification projects leading to successful first pass silicon. However, there is an ‘intellectual’ part of the process that still requires the best and the brightest minds.  And, that’s where the satisfaction or the intellectual rewards lie. Verification accounts for 70% of the pre-silicon development efforts, according to some estimates – let’s not leave it to chance by quoting the famous ‘verification is an NP complete problem’ – it can be harnessed and this has been already demonstrated by several successful groups, companies.       </p>
<p>In the next session, we will cover ‘test-plan/coverage plan’ topic in detail.       </p>
<p><strong><span style="color: #000080;">About the Author</span></strong>:  Suhas Belgal has 17 plus years of experience in Chip Design, Emulation, Modeling and Verification, including 9 years as a Verification Manager. During these years, Suhas has worked for several multi-billion dollar companies such as <a href="http://www.intel.com">Intel </a>and <a href="http://www.lsi.com">LSI</a>, various start ups, and co-founded a Verification Services company. Over the years, Suhas has played key roles several high profile design teams such as Pentium II, and successfully led several SoC chips to production.  He has experience in a wide range of Verification Methods and tools, and has been a presenter and panel member at various conferences, including the DAC. He has a master’s degree in EE from <a href="http://www.utexas.edu/">University of Texas at Austin </a>and a bachelor’s from <a href="http://www.vjti.ac.in/">VJTI, Mumbai</a>.      </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc/2.5/in/"><img src="http://i.creativecommons.org/l/by-nc/2.5/in/88x31.png" alt="Creative Commons License" /></a><br />
This content has been licensed to PuneChips under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/2.5/in/">Creative Commons Attribution-Noncommercial 2.5 India License</a>. Contact Suhas Belgal for details of how to attribute and re-use for non-commercial as well as commercial distribution. <!-- end general-header footer -->   </p>
<h2> </h2>
<div class="al2fb_like_button"><div id="fb-root"></div><script type="text/javascript">
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=224013594362235";
  fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "facebook-jssdk"));
</script>
<fb:like href="http://punechips.com/introduction-to-chip-verification-planning/" layout="standard" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://punechips.com/introduction-to-chip-verification-planning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Techniques in ASIC Verification</title>
		<link>http://punechips.com/new-techniques-in-asic-verification/</link>
		<comments>http://punechips.com/new-techniques-in-asic-verification/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 07:03:38 +0000</pubDate>
		<dc:creator>punechips</dc:creator>
				<category><![CDATA[event report]]></category>
		<category><![CDATA[pune]]></category>
		<category><![CDATA[ASIC]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[semiconductor]]></category>
		<category><![CDATA[verification]]></category>

		<guid isPermaLink="false">http://punechips.com/?p=19</guid>
		<description><![CDATA[<p><em>(This is a guest post for PuneTech by <a href="http://www.linkedin.com/pub/arati-halbe/1/380/457">Arati Halbe</a>, who has close to 9 years experience in ASIC front end design and verification. She is a PuneChips member.)</em></p>
<p>As the complexity of <a title="Integrated circuit" rel="wikipedia" href="http://en.wikipedia.org/wiki/Integrated_circuit">Integrated Circuits</a> (specifically <a title="Application-specific integrated circuit" rel="wikipedia" href="http://en.wikipedia.org/wiki/Application-specific_integrated_circuit">ASIC</a> and <a title="System-on-a-chip" rel="wikipedia" href="http://en.wikipedia.org/wiki/System-on-a-chip">SoC</a>) increases, and as their sizes keep reducing, the task of testing the chip gets more and more challenging. Engineers need to come up with better and different methodologies to ensure what goes to the factory for manufacturing is actually what they intended to deliver. Verification occurs at various stages in the ASIC development cycle. How much is enough at each stage is a problem that needs to be addressed on a case to case basis. A sound knowledge of various techniques and awareness of capabilities and limitations of each technique goes a long way in making decisions about when, where and what.</p>
<div></div>
<p><a href="http://punechips.com/new-techniques-in-asic-verification/" [...]<br />
<p>Continue reading <a href="http://punechips.com/new-techniques-in-asic-verification/">New Techniques in ASIC Verification</a></p>]]></description>
			<content:encoded><![CDATA[<p><em>(This is a guest post for PuneTech by <a href="http://www.linkedin.com/pub/arati-halbe/1/380/457">Arati Halbe</a>, who has close to 9 years experience in ASIC front end design and verification. She is a PuneChips member.)</em></p>
<p>As the complexity of <a title="Integrated circuit" rel="wikipedia" href="http://en.wikipedia.org/wiki/Integrated_circuit">Integrated Circuits</a> (specifically <a title="Application-specific integrated circuit" rel="wikipedia" href="http://en.wikipedia.org/wiki/Application-specific_integrated_circuit">ASIC</a> and <a title="System-on-a-chip" rel="wikipedia" href="http://en.wikipedia.org/wiki/System-on-a-chip">SoC</a>) increases, and as their sizes keep reducing, the task of testing the chip gets more and more challenging. Engineers need to come up with better and different methodologies to ensure what goes to the factory for manufacturing is actually what they intended to deliver. Verification occurs at various stages in the ASIC development cycle. How much is enough at each stage is a problem that needs to be addressed on a case to case basis. A sound knowledge of various techniques and awareness of capabilities and limitations of each technique goes a long way in making decisions about when, where and what.</p>
<div>
<dl>Keeping this in mind, <a href="http://punetech.cm/category/punechips/" target="_blank">PuneChips</a> had verification expert Jagdish Doma talk about <a href="http://punetech.com/punechips-event-asic-verification-trends-and-challenges-jagdish-doma-former-director-of-vlsi-design-conexant-systems-20-aug/" target="_blank">“ASIC verification: Trends and Challenges”</a> on 20<sup>th</sup> August 2009. Though impacted by the H1N1 scare we had a small but diverse audience. Jagdish discussed in detail the strengths and limitations of the various techniques, viz: <a title="Electronic system level" rel="wikipedia" href="http://en.wikipedia.org/wiki/Electronic_system_level">ESL</a>, <a title="Formal verification" rel="wikipedia" href="http://en.wikipedia.org/wiki/Formal_verification">Formal verification</a>, Dynamic simulation, FPGA prototyping and Emulation.</dl>
</div>
<p><a href="http://en.wikipedia.org/wiki/Electronic_system_level" target="_blank">ESL</a> or Electronic System Level testing is the newest trend. Supporters of ESL claim that it is a highly powerful system level modeling tool. It enables fast software bring-up if combined with an emulation/FPGA prototyping platform. ESL has been used successfully to validate systems for mobile applications where only one peripheral/application is active on the processor bus. ESL does not seem suitable for systems where multiple processes and interfaces are active simultaneously, like for example in a networking system.</p>
<p>Formal verification, a static verification technique which is mainly assertion based, is useful to check control paths. It cannot be used to verify datapaths. Dynamic simulation is a very effective way of verifying functionality of every block in the ASIC including the datapath. Gate level simulations performed after the back annotated placement and routing data is available are used to identify timing related issues or omissions/errors in stating multi-cycle paths.</p>
<p>The need to find hardware bugs as early as possible in the ASIC lifecycle drives the emulation and/or FPGA prototyping effort. Both these techniques enable the testing of scenarios which are generally not possible to test in dynamic <a title="Functional verification" rel="wikipedia" href="http://en.wikipedia.org/wiki/Functional_verification">functional verification</a>, well before the actual silicon comes back from the fab. Emulation or prototyping also accelerate fast software ramp up and the software team can get a development platform ready well before the actual chip is available. Emulation involves running test cases on hardware accelerated platforms like Palladium from Cadence and Veloce from Mentor. For FPGA prototyping, Single or multiple <a title="Field-programmable gate array" rel="wikipedia" href="http://en.wikipedia.org/wiki/Field-programmable_gate_array">FPGAs</a> are used to build a <a title="Printed circuit board" rel="wikipedia" href="http://en.wikipedia.org/wiki/Printed_circuit_board">PCB</a> system targeted for the testing of the ASIC/SoC. The ASIC code is then fully or partially programmed on the FPGA/s and functionality can thus be tested.</p>
<p>Scenarios with much longer simulation times than what normal functional simulation allows can be run on the emulation platforms. All the internal signals are available for viewing and debug, just like in functional simulation. The FPGA prototype platform does enable longer test time, but the debugging available is limited. The hardware accelerators are costly, and investing in them makes sense if a company has lot of ASIC programs running simultaneously. For companies which have similar chips planned back to back, investing in a home grown FPGA based emulation/prototyping platform makes sense. Another advantage FPGA prototyping is that the RTL goes through a complete synthesis and <a title="Place and route" rel="wikipedia" href="http://en.wikipedia.org/wiki/Place_and_route">place and route</a> cycle and testing is done on a circuit which is as close to the real ASIC as possible.</p>
<p>To ensure that a bug free product reaches the customer is a complex activity and poses multiple challenges. Coverage, legacy code, repeatability are issues that need to be tackled. Ensuring that the coverage is at an acceptable level is important. <a title="Code coverage" rel="wikipedia" href="http://en.wikipedia.org/wiki/Code_coverage">Code coverage</a> is run to find out if all the possibilities of a written code are exercised in a test suite. Simulators from cadence (ius), synopsys(vcs) and mentor (modelsim) have their own code coverage analyzers. Functional coverage means to find out if each feature listed in the specification for an ASIC/SoC is verified. It is essential that the functional specification document has an individual numbered paragraph for each feature so that traceability is easier. Functional coverage is an activity that needs planning, reviews and careful test case designing. Methodologies like eRM (e reuse methodology – Specman based) and OVM (open verification methodology – System verilog based) do assist checking functional coverage, but the inputs provided need careful specification and reviews.</p>
<p>Reviews, not just for coverage, but at every stage in the ASIC cycle are extremely important. One of the challenges encountered while designing an ASIC is that the hardware team interprets a certain behavior from software and the software expects that certain things are taken care of in hardware. It is very important to involve members from design team, verification team, architecture team, software &amp; firmware team for verification review.</p>
<p>It takes a good amount of effort to come up with a verification environment, and it is very common for a team to use what has worked before when schedules are demanding. Legacy environment saves lot of time, but it also handicaps the team. Talking about saving time, efficiency goes a long way in shrinking the schedules. The initial time and effort investment in automation of repetitive tasks save lot of time in future. Use of re-usable methodologies will definitely save time and effort.</p>
<p>Finally, while choosing the verification flow for a certain ASIC, team needs to look at what is available in terms of resources as well as time, understand the end user requirement, and make a decision on which technique to employ at what stage.</p>
<p><strong>About the Author</strong></p>
<p>Arati has close to 9 years experience in ASIC front end design and verification. <a title="Post silicon validation" rel="wikipedia" href="http://en.wikipedia.org/wiki/Post_silicon_validation">Post silicon validation</a> and <a title="Field-programmable gate array" rel="wikipedia" href="http://en.wikipedia.org/wiki/Field-programmable_gate_array">FPGA</a> prototyping is her recent area of interest and expertise. Arati has worked with <a title="Wipro Technologies" rel="homepage" href="http://www.wipro.com/index.aspx">Wipro Technologies</a> and <a title="Conexant" rel="homepage" href="http://www.conexant.com/">Conexant Systems</a>. Arati did her B.E. from University of Pune and M.Tech from CEDT, <a title="Indian Institute of Science" rel="homepage" href="http://www.iisc.ernet.in/">Indian Institute of Science, Bangalore</a>. See her <a href="http://www.linkedin.com/pub/arati-halbe/1/380/457">linked-in profile</a> for more details.</p>
<div class="al2fb_like_button"><div id="fb-root"></div><script type="text/javascript">
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=224013594362235";
  fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "facebook-jssdk"));
</script>
<fb:like href="http://punechips.com/new-techniques-in-asic-verification/" layout="standard" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://punechips.com/new-techniques-in-asic-verification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

