<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Processor Verification Company</title>
	
	<link>http://www.obsidiansoft.com</link>
	<description>Obsidian Software</description>
	<lastBuildDate>Fri, 30 Jul 2010 20:42:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheProcessorVerificationCompany" /><feedburner:info uri="theprocessorverificationcompany" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://www.obsidiansoft.com</link><url>http://www.obsidiansoft.com/images/arrowhead-square.png</url></image><feedburner:emailServiceId>TheProcessorVerificationCompany</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>20 Resources for Finding Processor Verification Internships</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/_2tn0y5J248/</link>
		<comments>http://www.obsidiansoft.com/2010/07/20-resources-for-processor-verification-internships/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 20:35:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1345</guid>
		<description><![CDATA[Finding an internship in processor design and verification can be difficult if you don&#8217;t know where to look. In addition to our own internship program, Obsidian has compiled a list of 20 processor designers who operate internship / co-op programs. We believe that co-ops are the future of our industry and that supporting their efforts [...]]]></description>
			<content:encoded><![CDATA[<p>Finding an internship in processor design and verification can be difficult if you don&#8217;t know where to look. In addition to our own <a href="http://www.obsidiansoft.com/about/careers/">internship program</a>, Obsidian has compiled a list of 20 processor designers who operate internship / co-op programs. We believe that co-ops are the future of our industry and that supporting their efforts in finding employment is beneficial to the industry as a whole.</p>
<ol>
<li><a href="http://www.apple.com/jobs/us/students.html">Apple – Jobs for Student and New Grads</a></li>
<li><a href="http://www.amd.com/US/ABOUTAMD/CAREERS/WORKING/CO-OP/Pages/co-op-intern-program.aspx">AMD &#8211; Co-op / Intern Program</a></li>
<li><a href="http://www.arm.com/about/careers/students/index.php">ARM – Student Internships and Engineering Placements</a></li>
<li><a href="http://www.broadcom.com/careers/ur/internship.php">Broadcom – Internship / Co-op Program</a></li>
<li><a href="http://www.centtech.com/internships.htm">Centaur Technology – Internships</a></li>
<li><a href="http://www.cisco.com/web/about/ac40/univ/index.html">Cisco Systems – Graduate Careers &amp; Internships / Co-ops</a></li>
<li><a href="http://www.freescale.com/webapp/sps/site/overview.jsp?code=CAREERS_USA_INTERN">Freescale Semiconductor – Student Intern / Co-op Program</a></li>
<li><a href="https://www.flacp.fujitsulabs.com/internship.php">Fujitsu Labs America – Internship and Job Opportunities</a></li>
<li><a href="http://www-03.ibm.com/employment/us/un_interns_coops.shtml">IBM – Intern / Co-op Opportunities</a></li>
<li><a href="http://www.intel.com/jobs/usa/students/internships/">Intel &#8211; Internships</a></li>
<li><a href="http://www.lsi.com/about_lsi/careers/university_recruiting/">LSI – College Recruiting and Internships</a></li>
<li><a href="http://extranet.marvell.com/careers/collegerecruit.jsp">Marvell – College Recruiting Programs</a></li>
<li><a href="http://www.nec-labs.com/careers/internship.php">NEC Labs &#8211; Internships</a></li>
<li><a href="http://www.nvidia.com/page/intern_coop_programs.html">NVIDIA – Intern and Co-op Programs</a></li>
<li><a href="http://labs.oracle.com/internships/">Oracle – Internships at Sun Microsystems Labs</a></li>
<li><a href="http://www.qualcomm.com/careers/students/intern.html">Qualcomm – Internship Programs</a></li>
<li><a href="http://www.samsung.com/sg/aboutsamsung/careers/internship/Careers_Internship.html">Samsung &#8211; Internships</a></li>
<li><a href="http://www.stericsson.com/careers/student_opportunities.jsp">ST Ericsson – Student Opportunities</a></li>
<li><a href="http://focus.ti.com/careers/docs/sectioncontent.tsp?sectionId=153">Texas Instruments – Opportunities for Students &amp; New College Grads</a></li>
<li><a href="http://www.xilinx.com/hr/ncg/intern.htm">Xilinx – Internship and Co-op Programs</a></li>
</ol>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=_2tn0y5J248:G6VmznJ9dUI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/_2tn0y5J248" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/07/20-resources-for-processor-verification-internships/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/07/20-resources-for-processor-verification-internships/</feedburner:origLink></item>
		<item>
		<title>Obsidian Software Announces Microprocessor Test and Verification Scholarship</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/itCKQGkKMVw/</link>
		<comments>http://www.obsidiansoft.com/2010/07/microprocessor-test-and-verification-scholarship/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 19:13:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Obsidian News]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1337</guid>
		<description><![CDATA[Obsidian Software, an electronic design automation company, announced today the offering of several scholarships for students to attend the 11th annual Microprocessor Test and Verification workshop ( MTVCon.org) in Austin, Texas. The scholarships will be made available to graduate students performing research in the field of processor verification and to recent graduates with less than [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.obsidiansoft.com/">Obsidian  Software</a>, an electronic design automation company, announced today  the offering of several scholarships for students to attend the 11<sup>th</sup> annual Microprocessor Test and Verification workshop ( <a href="http://www.mtvcon.org/">MTVCon.org</a>)  in Austin, Texas. <strong> </strong></p>
<p>The scholarships will be made available to graduate students  performing research in the field of processor verification and to recent  graduates with less than three years experience.</p>
<p>“We believe MTV is an important event that defines Austin as a  worldwide hub for processor verification”, said Eric Hennenhoefer, CEO  of Obsidian Software. “Obsidian is proud to sponsor and collaborate on  this world-class event.”  2010 will mark the fifth year of sponsorship  for Obsidian.</p>
<p>The deadline for scholarship applications is October 1, 2010.  Potential applicants are encouraged to apply online at:<a href="http://www.obsidiansoft.com/community/mtvcon-scholarship/"> http://www.obsidiansoft.com/community/mtvcon-scholarship/</a></p>
<p><strong>About MTVCon</strong></p>
<p>The purpose of MTV is to bring together researchers and practitioners  to exchange innovative ideas and to develop new methodologies for  solving difficult challenges facing the processor design community.</p>
<p><strong>About Obsidian Software</strong></p>
<p>Obsidian Software, a privately held company, has been providing  processor verification products, verification consulting and training  services to processor designers and semiconductor fabs since 1997.  Obsidian’s RAVEN software has been used to successfully verify dozens of  processor implementations by many of the world’s leading semiconductor  companies. Obsidian has been recognized as part of the INC500, Austin  Heavy Hitters, and Austin Fast 50.</p>
<p><strong>Contacts:</strong></p>
<table style="height: 100px;" border="0" cellspacing="0" cellpadding="0" width="451">
<tbody>
<tr>
<td width="129" valign="top">Obsidian Software<br />
Saturday Schroder<br />
Marketing Coordinator<br />
(512) 330-9818 x 113<br />
saturday@obsidiansoft.com</p>
<p>http://www.obsidiansoft.com</td>
<td width="218" valign="top">Microprocessor Test and Verification Workshop<br />
Magdy S. Abadir<br />
General Chair</p>
<p>M.Abadir@freescale.com</p>
<p>http://www.mtvcon.org</td>
</tr>
</tbody>
</table>
<p>###</p>
<p>﻿</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=itCKQGkKMVw:_GS3uQYwJIg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/itCKQGkKMVw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/07/microprocessor-test-and-verification-scholarship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/07/microprocessor-test-and-verification-scholarship/</feedburner:origLink></item>
		<item>
		<title>Obsidian Software Expands Worldwide, Allies With EDAcon Partners</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/JTkFbMCeBps/</link>
		<comments>http://www.obsidiansoft.com/2010/06/obsidian-software-expands-worldwide-allies-with-edacon-partners/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 22:42:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Obsidian News]]></category>
		<category><![CDATA[semiconductor trends]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1283</guid>
		<description><![CDATA[Persistent Link to this Article Obsidian Software, Inc., a growing processor verification company, and EDAcon Partners Ltd., a sales and marketing outsourcing company, announced today the expansion of Obsidian’s sales internationally. Both companies stand to benefit from the rising strength in the semiconductor industry, which has outperformed the broader technology sector thus far this year. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.marketwire.com/press-release/Obsidian-Software-Expands-Worldwide-Allies-With-EDAcon-Partners-1277102.htm">Persistent Link to this Article</a></p>
<p>Obsidian Software, Inc., a growing processor verification company, and EDAcon Partners Ltd., a sales and marketing outsourcing company, announced today the expansion of Obsidian’s sales internationally. Both companies stand to benefit from the rising strength in the semiconductor industry, which has outperformed the broader technology sector thus far this year.</p>
<p>“EDA firms like Obsidian Software are positioned to grow in this economy and can take advantage of our global network of representatives, knowing that an experienced manager is driving their sales in the specified territories,” said Coby Hanoch, President and CEO of EDAcon Partners. Hanoch founded EDAcon Partners in 2007. Prior to this, Hanoch established sales offices in North America, Europe and Asia while serving as VP of Worldwide Sales for Verisity Design, Inc. and VP of Verification Sales at Cadence Design Systems, Inc. </p>
<p>Obsidian’s engineering team specializes in processor design testing through creation of functional test suites and random test generators. Austin and Silicon Valley have always been profitable for Obsidian, but with chip sales up worldwide, Obsidian is positioned to grow internationally.</p>
<p>EDAcon offers a sales outsourcing model for EDA vendors, saving companies like Obsidian significant resources by providing a worldwide network of experienced sales representatives. EDAcon sales representatives are local to each country and have a proven track record of selling EDA products.</p>
<p>“Through this investment in sales, Obsidian will continue to expand its reach in the semiconductor industry and advance our reputation as a leader in processor verification. We have demonstrated a strong track record across a variety of architectures such as ARM, MIPS, X86, Power ISAs, and proprietary RISC/CISC implementations for SoC core designs,” said Mark Glenewinkel, COO of Obsidian Software.</p>
<p><strong>About Obsidian Software</strong></p>
<p>Obsidian Software, a privately held company, has been providing processor verification products, verification consulting and training services to processor designers and semiconductor fabs since 1997. Obsidian’s RAVEN software has been used to successfully verify dozens of processor implementations by many of the world’s leading semiconductor companies. Obsidian has been recognized as part of the INC500, Austin Heavy Hitters, and Austin Fast 50.</p>
<p><strong>About EDAcon Partners</strong></p>
<p>EDAcon Partners enables EDA and IP vendors to outsource their sales activities, including definition of sales strategy and development of marketing materials. With its worldwide network of representatives, EDAcon Partners provides an instant sales channel with proven abilities, saving EDA and IP vendors the enormous investment in time and money needed to find and ramp up representatives in every country.</p>
<p><strong>Contacts:</strong></p>
<p>Obsidian Software<br />
Saturday Schroder, Marketing<br />
(512) 330-9818 x 113<br />
saturday@obsidiansoft.com</p>
<p>http://www.obsidiansoft.com</p>
<p>EDAcon Partners<br />
Coby Hanoch<br />
+972-545-421-321<br />
coby@edacon-partners.com</p>
<p>http://www.edacon-partners.com</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=JTkFbMCeBps:pXJU5T0plKI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/JTkFbMCeBps" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/06/obsidian-software-expands-worldwide-allies-with-edacon-partners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/06/obsidian-software-expands-worldwide-allies-with-edacon-partners/</feedburner:origLink></item>
		<item>
		<title>Top 20 DVClub Processor Presentations</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/u_QzE83431I/</link>
		<comments>http://www.obsidiansoft.com/2010/06/top-20-dvclub-processor-presentations/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 19:37:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[coverage driven verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[DVClub]]></category>
		<category><![CDATA[Power Architecture]]></category>
		<category><![CDATA[SoC Verification]]></category>
		<category><![CDATA[verification metrics]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1273</guid>
		<description><![CDATA[We thought that it might make for interesting reading to compile a list of the best processor presentations from past DVClub events. For those of you unfamiliar with DVClub, membership is free and is open to all non-service provider semiconductor professionals. Most members work in verification, but there are also plenty of entrepreneurs, professors, students, [...]]]></description>
			<content:encoded><![CDATA[<p>We thought that it might make for interesting reading to compile a list of the best processor presentations from past <a href="http://www.dvclub.org">DVClub</a> events. </p>
<p>For those of you unfamiliar with DVClub, membership is free and is open to all non-service provider semiconductor professionals. Most members work in verification, but there are also plenty of entrepreneurs, professors, students, managers, investors, and even design engineers who attend. If you&#8217;re interested and would like to learn more, why not <a href="http://visitor.constantcontact.com/manage/optin/ea?v=001AAPQafplpnLyyJ2ftSpWWw%3D%3D">join the club</a>?</p>
<p><strong>Chuck Alley, IBM</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Alley_VSUFunctionalCoverage_1f.pdf"> Using PSL and FoCs for Functional Coverage Verification</a></p>
<p><strong>Bob Colwell, Intel (Retired)</strong><br />
<a href="http://www.dvclub.org/images/Presentations/The_Validation_Attitude.pdf"> The Validation Attitude</a></p>
<p><strong>Raj Dayal, Qualcomm</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Dayal_RTP_Q2_07.pdf"> Managing Deployment of SVAs in Your Project</a></p>
<p><strong>Ish Kumar Dham, Texas Instruments</strong><br />
<a href="http://www.dvclub.org/images/Presentations/dham_bangalore_q407.pdf"> Design Verification to Application Validation of a Multiprocessor SoC</a></p>
<p><strong>Sanjay Gupta, IBM</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Gupta_Cell%20Verification%20DV%20Club.pdf">Cell Verification Metrics</a></p>
<p><strong>Narasimha Karunakar, AMD</strong><br />
<a href="http://www.dvclub.org/images/stories/Presentations/DV_LowPowerVerif_Challenges.pdf"> Low-Power Verification Challenges</a></p>
<p><strong>Mark A Firstenberg, IBM</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Firstenberg_q207.pdf"> Experience with Formal Methods, Especially Sequential Equivalence Checking</a></p>
<p><strong>Jai Kumar, Sun</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Jai_Kumar_FPGA_prototyping.pdf"> Leveraging Low-Cost FPGA Prototyping for Validation of Highly Threaded Server-on-Chip</a></p>
<p><strong>John Ludden, IBM</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Ludden_Power7_Verification.pdf"> Mainline Functional Verification of IBM&#8217;s POWER7 Processor Core</a></p>
<p><strong>Milind Padhye, Freescale</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Padhye_DVClub_low_power_verif_2006_11_20_ver0.1.pdf"> Wireless Low Power and Verification Challenges</a></p>
<p><strong>Somdipta Basu Roy, Texas Instruments</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Roy_OMAP_Validation_DVCLub_092106.pdf"> OMAP Verification</a></p>
<p><strong>Scott Runner, Qualcomm</strong><br />
<a href="http://www.dvclub.org/images/Presentations/runner_sv_q307.pdf"> Verification of Wireless SoCs: No Longer in the Dark Ages</a></p>
<p><strong>Sakar Jain, Freescale</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Sakar_Jain.pdf"> Verification of the QorIQ Communication Platform’s CoreNet Fabric with SystemVerilog</a></p>
<p><strong>Shahram Salamian, Intel</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Sharam-Salamian.pdf"> Intel Atom Processor Pre-Silicon Verification Experience</a><br />
<a href="http://www.dvclub.org/images/Presentations/Salamian_DV_Club_Foils_Intel_Austin.pdf"> CPU Verification Metrics</a></p>
<p><strong>Jason Stinson, Intel</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Stinson_PostSi%20and%20Verification.pdf"> Pre-Si Verification for Post-Si Validation</a></p>
<p><strong>Paul Tobin, AMD</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Tobin_VerificationIsGlobal.pdf"> Verification in a Global Design Community</a></p>
<p><strong>Durgam Vahia, Sun</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Durgam_Vahia_OpenSPARC_FPGA.pdf "> Mapping Server-Class Multi-Threaded OpenSPARC T1 Processor Core on FPGAs</a></p>
<p><strong>David Williamson, ARM</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Williamson_ARM%20Validation%20Metrics.pdf"> Verification Metrics</a></p>
<p><strong>Paul Zehr, Intel</strong><br />
<a href="http://www.dvclub.org/images/Presentations/Zehr_DVClub_12052006.pdf"> Intel Xeon Pre-Silicon Validation</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=u_QzE83431I:7FElzIC8sbw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/u_QzE83431I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/06/top-20-dvclub-processor-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/06/top-20-dvclub-processor-presentations/</feedburner:origLink></item>
		<item>
		<title>Power7 Verification: It’s Not Rocket Science (It’s More Advanced)</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/EW31JYW7ejM/</link>
		<comments>http://www.obsidiansoft.com/2010/05/power7-verification-its-not-rocket-science-its-more-advanced/#comments</comments>
		<pubDate>Wed, 26 May 2010 14:00:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Verification Planning]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[DVClub]]></category>
		<category><![CDATA[multi-processor verification]]></category>
		<category><![CDATA[Power Architecture]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1022</guid>
		<description><![CDATA[By Hemendra Talesara Complexity In his recent presentation discussing verification of the Power7 processor, John Ludden of IBM opened with a quote from an IBM exec more than a decade ago. &#8220;it&#8217;s not rocket science&#8221;- a perception held by some members of the management and design communities at that time. However, designs have become a [...]]]></description>
			<content:encoded><![CDATA[<p>By <a href="http://www.linkedin.com/in/talesara" target="_blank">Hemendra Talesara</a></p>
<h3>Complexity</h3>
<p>In his recent presentation discussing verification of the Power7 processor, John Ludden of IBM opened with a quote from an IBM exec more than a decade ago. &#8220;it&#8217;s not rocket science&#8221;- a perception held by some members of the management and design communities at that time.</p>
<p>However, designs have become a whole lot more complex over time. The Power7 processor at 45nm has 1.2B transistors on a 567 sq. mm die, supporting 8 cores with 4 threads each, an on-chip eDRAM, 3 levels of caches and 2 DDR memory controllers. Yet as verification complexity multiplies in this multi-threaded design, it&#8217;s very helpful to have some of the more advanced tools and methodology at your disposal.</p>
<h3>Tools and Methodology</h3>
<p>Fortunately for Ludden and the Power7 team, IBM has invested in verification technology for years (in spite the quote from the exec). The company continues to develop and rely on in-house tools for many of the advanced verification technologies for processor-specific testing. These include the test-bench, multi-thread test generators, hardware accelerators, formal and semi-formal tools, micro-architecture checkers (API based), cache coherency checkers and coverage tools. Exercisers<br />
originally developed for post-silicon validation were used to exploit the hardware acceleration platform. Forty-five thousand coverage points were organized to assist with big picture and were used to re-direct the test generator and exercisers for accelerators.</p>
<p><a href="http://www.dvclub.org/images/wordpress/uploads/2010/05/Ludden_Slide28.png"><img class="alignnone size-full wp-image-247" title="Ludden_Slide28" src="http://www.dvclub.org/images/wordpress/uploads/2010/05/Ludden_Slide28.png" alt="" width="695" height="495" /></a></p>
<p>To support corner case testing for events that occur rarely, especially in multi-threaded scenarios, software irritator threads were used. These irritators are capable of creating the worst possible contentions. Through their application, twenty-three high quality bugs were revealed hiding in the corners.</p>
<p><a href="http://www.dvclub.org/images/wordpress/uploads/2010/05/Ludden_Slide37.png"><img class="alignnone size-full wp-image-248" title="Ludden_Slide37" src="http://www.dvclub.org/images/wordpress/uploads/2010/05/Ludden_Slide37.png" alt="" width="695" height="492" /></a></p>
<p>A methodical application of these tools and technology clearly captured and advanced the industry best practices.</p>
<h3>Designing for Verification</h3>
<p>Designing for Verification was an important element in managing the overall risk to verification time line. IBM minimized the risks by maintaining a tight interaction between the specification and verification teams during the design phase and allowing the verification team to maintain architectural changes. &#8220;Chicken switches&#8221; were placed in silicon that allowed verification team to back-off an area considered risky or possible of otherwise compromising the verification effort. These switches provide workarounds, with some small impact on performance but no functional change, for accessing difficult to verify micro architectural features. Hardware irritators were also used to enable stress testing of corner cases in both pre-silicon and post-silicon testing.</p>
<h3>Conclusion</h3>
<p>The Power7 draws many architectural features from the Power5 and 6 designs, although it is a much more complex and powerful processor with a much shorter verification cycle. Ludden and the Power7 team accomplished this remarkable feat with a lot of foresight in planning, metrics collection and careful execution. Tight interlocking between metrics collected and verification plan was key part of tracking mechanism and functional closure. This project should serve as an example of how to plan for and manage risks in a complex verification project.</p>
<p>Kudos to John and the IBM team. His full presentation can be downloaded <a href="http://www.dvclub.org/images/Presentations/Ludden_Power7_Verification.pdf">here</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=EW31JYW7ejM:wp48qcE0FT8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/EW31JYW7ejM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/05/power7-verification-its-not-rocket-science-its-more-advanced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/05/power7-verification-its-not-rocket-science-its-more-advanced/</feedburner:origLink></item>
		<item>
		<title>Apple’s Intrinsity Acquisition</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/i6xhz5CtKdg/</link>
		<comments>http://www.obsidiansoft.com/2010/05/apples-intrinsity-acquisition/#comments</comments>
		<pubDate>Mon, 24 May 2010 18:49:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[ARM verification]]></category>
		<category><![CDATA[CPU verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=1015</guid>
		<description><![CDATA[Obsidian Software congratulates both Apple and Intrinsity on their acquisition deal that closed late last month. Obviously, the need for faster chips in mobile devices has Apple seeking to secure an advantage over competitors with this purchase. According to the New York Times, industry analysts speculate it’s Intrinsity’s technology that gives the iPad’s A4 chip [...]]]></description>
			<content:encoded><![CDATA[<p>Obsidian Software congratulates both Apple and Intrinsity on their acquisition deal that closed late last month. Obviously, the need for faster chips in mobile devices has Apple seeking to secure an advantage over competitors with this purchase. According to the <span style="text-decoration: underline;"><a href="http://www.nytimes.com/2010/04/28/technology/28apple.html">New York Times</a></span>, industry analysts speculate it’s Intrinsity’s technology that gives the iPad’s A4 chip its beefed up 1 GHz processing power. Intrisity’s patented technology provides <span style="text-decoration: underline;"><a href="http://www.statesman.com/business/content/business/stories/technology/2009/07/27/0727intrinsity.html">more speed</a></span> with lower power requirements, giving a significant edge over other ARM-compatible models. The NYT quoted Tom R. Halfhill, a well-known chip analyst for Microprocessor Report, saying Intrinsity’s price was in the neighborhood of $121 million. Certainly, this is an easy price for Apple to pay given that the iPad’s sales have <span style="text-decoration: underline;"><a href="http://host.madison.com/ct/business/technology/blog/article_2bf5e4ee-578c-11df-9260-001cc4c002e0.html">outpaced the iPhone</a></span> in the first month after launch by more than two to one.</p>
<p>As we rely on our mobile devices more as mini computers and less as simple phones, processing power becomes increasingly vital for companies like Apple. Nearly 90% of US households have a cell phone, yet <span style="text-decoration: underline;"><a href="http://www.nytimes.com/2010/05/14/technology/personaltech/14talk.html?src=linkedin">voice minutes use</a></span> has flat lined while more households increasingly give up their landlines. We’re still using our phones, but using them more and more for data and less for talking.</p>
<p>When Steve Jobs introduced the iPad, he referred to the A4 as the best and most complicated chip Apple ever designed. Intrisity worked closely with a division of Samsung Austin Semiconductor, said to be the <span style="text-decoration: underline;"><a href="http://www.statesman.com/business/technology/samsung-moving-ahead-of-schedule-on-500m-austin-219726.html">largest chip manufacturing plant</a></span> in North America that builds the A4 chips for Apple. Intrinsity CEO, Bob Russo, credited the <span style="text-decoration: underline;"><a href="http://www.statesman.com/business/content/business/stories/technology/2009/07/27/0727intrinsity.html">partnership with Samsung</a></span> for bringing visibility to the relatively small, <span style="text-decoration: underline;"><a href="http://www.anandtech.com/show/3665/apples-intrinsity-acquisition-winners-and-losers">100-employee company</a></span> based in Austin, Texas.</p>
<h3>What does this mean for Austin?</h3>
<p>This acquisition brings focus once again to Austin, Texas, a city increasingly important in the microprocessor field. Before this acquisition, Intrinsity was a David competing with Goliaths such as Texas Instruments and Freescale Semiconductor, both based in Austin. They were also going head to head with Intel Corp.&#8217;s Austin-designed Atom processor. Clearly when it comes to fast chips, there’s quite a lot going on in Austin, Texas.</p>
<p>Naturally, Austin is also becoming a hub for processor verification. Game-changing advances in chip performance call for equally nimble and innovative advances in processor verification. Obsidian Software and Intrinsity share a common passion for excellence and innovation, they were both founded in 1997 in Austin, and Mark McDermott, former VP of Engineering for Intrinsity sits on Obsidian’s Advisory Board.<br />
<strong></strong></p>
<h3>Has the processor business turned?</h3>
<p>The Intrinsity deal is the second chip acquisition for Apple in two years. Recall Apple’s purchase of PA Semi in 2008. Companies who design cutting edge mobile devices are increasingly choosing to do processor design and to some extent verification. Are these purchases by Apple part of a defensive strategy to stay ahead of emerging technologies funded by increasingly scarce venture capital? Or will we see a new generation of innovation come from the Intrinsity team that is now a part of Apple?</p>
<p>Companies such as Qualcomm, NVIDIA, and Marvell build their own unique ARM chips for their devices. Perhaps the line between device makers and chip makers will become increasingly blurred as both camps work to gain market advantage through increased vertical integration.</p>
<p><em>Further Reading:</em></p>
<p><a href="http://spectrum.ieee.org/tech-talk/computing/software/forecasting-apples-intrinsity-acquisition" target="_blank">IEEE Spectrum &#8211; Forecasting Apple&#8217;s Intrinsity Acquisition</a></span></p>
<p><a href="http://www.macdailynews.com/index.php/weblog/comments/trefis_apples_intrinsity_deal_is_a_snapdragon_slayer/" target="_blank">Mac Daily News &#8211; Apple’s Intrinsity Deal is a Snapdragon Slayer</a></span></p>
<p><a href="http://www.bizjournals.com/austin/stories/2010/04/26/daily38.html" target="_blank">Austin Business Journal &#8211; Apple Inc. Acquires Intrinsity</a></span></p>
<p><a href="http://www.anandtech.com/show/3665/apples-intrinsity-acquisition-winners-and-losers" target="_blank">Anandtech &#8211; Apple&#8217;s Intrinsity Acquisition: Winners and Losers</a></span></p>
<p><a href="http://www.nytimes.com/2009/09/07/technology/companies/07qualcomm.html?_r=1" target="_blank">NY Times &#8211; Intel and Qualcomm Eye Each Other’s Terrain </a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=i6xhz5CtKdg:S2wMOjgdgnE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/i6xhz5CtKdg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/05/apples-intrinsity-acquisition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/05/apples-intrinsity-acquisition/</feedburner:origLink></item>
		<item>
		<title>Intelligent Testbench vs. Random Test Generator</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/MGek92rhnkI/</link>
		<comments>http://www.obsidiansoft.com/2010/03/intelligent-testbench-vs-random-test-generator/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 18:53:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Verification Planning]]></category>
		<category><![CDATA[ARM verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random test generators]]></category>
		<category><![CDATA[random verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=919</guid>
		<description><![CDATA[By Melanie Typaldos The idea of an intelligent testbench has long been of interest in functional processor verification, although it has always seemed to fall short of expectations when it comes down to just what degree of “intelligence” is really involved. Throughout this document, we will present the argument that a sophisticated, well-evolved, dynamic random [...]]]></description>
			<content:encoded><![CDATA[<p>By Melanie Typaldos</p>
<p>The idea of an intelligent testbench has long been of interest in functional processor verification, although it has always seemed to fall short of expectations when it comes down to just what degree of “intelligence” is really involved. Throughout this document, we will present the argument that a sophisticated, well-evolved, dynamic random test generator, when used as part of a complete verification plan, can be of more value than marketing-driven intelligent verification products.</p>
<h3>Defining Intelligent Testbench</h3>
<p>An accurate definition of “intelligent testbench” is difficult to find, so let&#8217;s begin with that offered by Wikipedia. The intelligent testbench is described as something that “uses information derived from the design and existing test description to automatically update the test description to target design functionality not verified, or covered by the existing tests”<sup>[<a href="#intelligent-verification">1</a>]</sup>. This implies that a feedback loop exists which is capable of creating new test sequences based on what has and has not yet been tested. Other than this closed loop system, the concept is very similar to that of a random test generator.</p>
<h3>Not all Test Generators are Created Equally</h3>
<p>I remember at one time, we were speaking with a potential client who said something along the lines of &#8220;I don&#8217;t know why you people want so much money for this RAVEN thing. I can just get a co-op to write one in a week.&#8221; He wasn&#8217;t wrong in his assumption that a relatively unskilled engineer could conceivably write a generator in a short amount of time. However, the old adage remains that you get what you pay for. A generator of this sort would be incapable of effectively verifying a design of any complexity whatsoever. This is analogous to running every instruction followed by every other instruction and calling verification complete. There are no standard methodologies for constructing test generators, and each one will have different methods for achieving randomness, different capabilities in pipeline exploration, varying abilities in multi-processor testing, etc. </p>
<h3>Functional Coverage</h3>
<p>Many intelligent testbench products claim to automatically create test sequences based on pre-designated coverage points. However, the belief that hitting every coverage point means that your design is verified is a big mistake. By the very fact that coverage points are singular points in a vast space, they cannot cover the entire design. Engineers can work hundreds of hours writing more coverage points, but it will never be enough to completely verify the design. Because of this, our test generator uses templates (created by engineers) that automatically create sequences to hit not only the coverage point, but also other behaviors around that point.</p>
<p><b>Figure 1. Abbreviated Flow of Randomness</b></p>
<p><a href="http://www.obsidiansoft.com/wp-content/uploads/2010/03/randomness.png"><img src="http://www.obsidiansoft.com/wp-content/uploads/2010/03/randomness.png" alt="" title="randomness" width="600" height="89" class="alignnone size-full wp-image-941" /></a></p>
<h3>Random Stimulus Compared to Feedback Looping</h3>
<p>RAVEN is very good at what it does; it is designed to hit both simple and complex behaviors randomly with little direction from human users. For instance, if we&#8217;re looking at instruction A followed by instruction B with operands X, Y and Z, then we&#8217;re going to hit that randomly with ease. Constrained-random templates can replace 95-98% of all directed test sequences. It&#8217;s only a matter of time and simulation power applied before we randomly hit all of these simple scenarios and many of the complex ones as well.</p>
<p>The whole point here is that coverage points that are easy to direct (i.e. via feedback), will have already been covered by virtue of random testing. Highly complex behaviors and difficult-to-reach corner cases require a significant degree of architectural knowledge, and they are too difficult and too architecturally dependent to effectively be covered by a piece of software. If an effective feedback loop could be done with good logic or programming skills, we would have already done it.</p>
<blockquote><p>
&#8220;At a recent ASIC verification panel discussion at DesignCon, a question was asked about intelligent testbenches &#8212; something promised for a long time but not really delivered by the EDA companies. One of the panel members from a design company responded, and said that if you ever tell his engineers that his testbenches are not intelligent then he would be very upset. I am sorry but I have to break the news to him. Testbenches are dumb!&#8221; &#8211; Brian Bailey <sup>[<a href="#bailey-1">2</a>]</sup>
</p></blockquote>
<h3>The Promise of Eliminating Redundant Testing</h3>
<p>Eliminating “redundant testing” via software is a dangerous thing to do. Suppose that we have two similar sequences of 20 instructions, but the second test has one instruction that is different. Are those tests redundant?  They seem like it, and they have a lot in common. But depending on what those instructions are, what registers they use, what the pipeline looks like and whether they took exceptions, that one instruction can be the one that makes the difference. So it&#8217;s dangerous for a piece of software to make the supposition that this test is redundant. It could very well be that this next instruction could be the one that reveals an error. </p>
<p>When I was working at a major processor company several years ago, we found a case in silicon where the processor would hang for seemingly no reason. What we found was that an illegal access to a register was causing the error approximately 1000 instructions before the hang would occur. This taught me that sometimes even the designer is not aware of the conditions that can lead to a bug. Designers may know their own block, but the interactions between the blocks can be very complex, and oftentimes this can be confusing even for experienced engineers. So I think that it&#8217;s really dangerous to assume that you can get rid of redundant tests in this manner. </p>
<p>But this is not to say that ineffective tests should be continually simulated. Test templates should remain in the suite only as long as they continue to uncover errors. When it no longer seems like it&#8217;s finding bugs, that template should be archived and replaced by another. But having a piece of software decide that for you is not a good thing.</p>
<div class="footnote">
<p>
<sup>[<a name="intelligent-verification">1</a>] <a href="http://en.wikipedia.org/wiki/Intelligent_verification">Wikipedia: Intelligent Verification</a></sup><br />
<sup>[<a name="bailey-1">2</a>] <a href="http://en.wikipedia.org/wiki/Intelligent_verification">Brian Bailey: Constrained Random Test Struggles to Live Up to Promises</a></sup>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=MGek92rhnkI:MkoPSWmMvi0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/MGek92rhnkI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/03/intelligent-testbench-vs-random-test-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/03/intelligent-testbench-vs-random-test-generator/</feedburner:origLink></item>
		<item>
		<title>Is There Hope for the US Fab Industry?</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/p4V3zbGAgtw/</link>
		<comments>http://www.obsidiansoft.com/2010/03/is-there-hope-for-the-us-fab-industry/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 19:24:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[semiconductor foundries]]></category>
		<category><![CDATA[semiconductor trends]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=884</guid>
		<description><![CDATA[For the past two quarters analysts have been telling us that we&#8217;re on the upswing of the crash. In their World Fab Forecast, published in May, San Jose industry research firm Semi predicted that the outlook for fabs in 2010 was fair with &#8220;signs of increasing investment.&#8221; The firm projected that global market leaders with [...]]]></description>
			<content:encoded><![CDATA[<p>For the past two quarters analysts have been telling us that we&#8217;re on the upswing of the crash. In their <a href="http://www.scfab.com/index.php?p=news&#038;id=91">World Fab Forecast</a>, published in May, San Jose industry research firm <a href="http://semi.org">Semi</a> predicted that the outlook for fabs in 2010 was fair with &#8220;signs of increasing investment.&#8221; The firm projected that global market leaders with access to significant capital would be responsible for leading much of the market recovery. One major factor in this equation is Intel, who Semi predicted will make significant investments in US based fab construction. This is interesting news considering that fab investment in China, Europe and Japan are now at a 10 year low.</p>
<p>Whether Intel can pull the US market out of the red has yet to be seen however. The company recently announced that their manufacturing deal with TSMC is now on hiatus due to a lack of demand among consumers for more Atom based devices. In addition, Intel seems to be favoring overseas locations to US based sites for new fab construction. </p>
<p>Intel is set to begin production of chipsets in a new <a href="http://www.digitimes.com/news/a20100209PB200.html">China based facility</a> later this year, and it seems likely that Haifa will be selected as the site of the next 22nm fab considering <a href="http://www.businessweek.com/news/2010-02-08/intel-s-israel-unit-exports-advanced-145-in-2009-update1-.html">their gains in 2009</a> and the <a href="http://www.rte.ie/business/2010/0304/intel.html">closing of the Ireland facility</a>. Two of Intel&#8217;s six US based facilities are scheduled to be closed this year according to Semi&#8217;s map of closing/closed frontend fabs, shown below. Other major players include Toshiba, who is currently contemplating the <a href="http://www.eetimes.com/news/design/showArticle.jhtml?articleID=222700715">creation of a new $8.9B fab in Japan</a> and giant TSMC, who is holding strong despite recent <a href="http://www.semiconductor.net/article/451279-TSMC_Facing_EUV_Wafer_Cost_Challenges.php">challenges with wafer costs</a> and <a href="http://www.businessweek.com/news/2010-02-10/semiconductor-manufacturing-loss-widens-on-tsmc-costs-correct-.html">11 straight quarterly losses</a>.</p>
<p>Although it is unclear if Intel intends to make additional investments into the <a href="http://www.engadget.com/2010/02/03/intel-swings-25nm-factory-doors-open-for-a-tour-de-fab/">remaining US fabs</a>, hopefully the current race among NAND flash manufacturers can bolster the US market. Electronics manufacturer Samsung is pushing hard to open a <a href="http://www.statesman.com/business/technology/samsung-moving-ahead-of-schedule-on-500m-austin-219726.html">new Austin facility</a> in 2010 that will be the largest chip fab in North America. Additionally, Texas Instruments is set to begin production at its <a href="http://www.eetimes.com/showArticle.jhtml?articleID=220300277">new analog fab</a> in Richardson, TX later this year, and GlobalFoundries is planning the creation of a <a href="http://www.saratogian.com/articles/2010/03/04/news/doc4b8f27282a9b8766765446.txt">new facility in Saratoga, NY</a>.</p>
<p><b>Map of Closed and Closing Fabs</b><br />
<iframe width="640" height="380" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;t=h&amp;oe=UTF8&amp;msa=0&amp;msid=108641497750867157156.000465f7aabeee2f894c0&amp;ll=43.068888,-94.21875&amp;spn=163.569452,360&amp;z=1&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?ie=UTF8&amp;t=h&amp;oe=UTF8&amp;msa=0&amp;msid=108641497750867157156.000465f7aabeee2f894c0&amp;ll=43.068888,-94.21875&amp;spn=163.569452,360&amp;z=1&amp;source=embed" style="color:#0000FF;text-align:left">Closed/Will be Closed Frontend Semiconductor Fabs</a> in a larger map</small></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=p4V3zbGAgtw:NBvbH4_VeSE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/p4V3zbGAgtw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2010/03/is-there-hope-for-the-us-fab-industry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2010/03/is-there-hope-for-the-us-fab-industry/</feedburner:origLink></item>
		<item>
		<title>Multicore Verification of an ARM Processor</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/KgHNXm1WLtk/</link>
		<comments>http://www.obsidiansoft.com/2009/11/multi-processor-verification-of-an-arm-processor-core/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 23:25:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[RTL Verification]]></category>
		<category><![CDATA[ARM verification]]></category>
		<category><![CDATA[cache verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[multi-processor verification]]></category>
		<category><![CDATA[random verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=110</guid>
		<description><![CDATA[The goal of multi-processor verification, simply put, is to find errors that emerge when individual CPUs interact with each other. This typically involves behaviors encountered when sharing various resources such as caches, registers and main memory. Multi-processor (MP) errors are among the most difficult to debug in all of functional verification, especially given the complexity [...]]]></description>
			<content:encoded><![CDATA[<p>The goal of multi-processor verification, simply put, is to find errors that emerge when individual CPUs interact with each other. This typically involves behaviors encountered when sharing various resources such as caches, registers and main memory. Multi-processor (MP) errors are among the most difficult to debug in all of functional verification, especially given the complexity modern MP systems. This document serves to outline Obsidian’s random testing methodology for verifying caches. Although written specifically for the ARM architecture, the underlying methodology of this paper may be applied generally to encompass other designs as well.</p>
<h2>Don’t Begin Multi-Processor Testing Before You’re Ready</h2>
<p>One of the core principles of Obsidian’s verification methodology is to catch every possible bug in the simplest possible configuration. That stands to reason that the single processor configuration needs to be thoroughly verified with a high degree of confidence before MP verification begins. The reason for this is simple &#8211; if the same bugs can be found in a simpler processor configuration, much less time will go to waste. Multiplied hundreds of times over, this savings in time can result in a time-to-market improvement of weeks or even months.</p>
<h2>Beginning Multi-Processor Verification with Non-Sharing Tests</h2>
<p>The first stage of MP testing that we implement is non-sharing. The goal at this stage is to find and correct errors that occur with the least amount of sharing as possible to simplify debugging and save time troubleshooting complex scenarios.</p>
<p>In the initial stages of MP verification, it’s best to divide the memory up into large partitions that are each allocated to a single processor core. Some sharing will always exist between the CPUs in spite of restrictions. This is due to the way that multiple CPUs behave upon reset (i.e. beginning the execution stream at the same reset address) and because complex MP systems typically require each CPU to be aware of their own CPU number (i.e. CPU0, CPU1, etc.).</p>
<p>Ideally, sharing should be minimized as much as possible at this stage of verification, although it is impossible to eliminate it altogether. If the architecture permits, it’s also beneficial to start with paging disabled to simplify debugging. This eliminates the possibility of errors where one physical address is mapped to multiple pages by more than one CPU.</p>
<p>With these restrictions imposed, large numbers of random test sequences are generated and debugged as needed. Once errors become extremely sparse in this mode of testing, the memory is divided up into cache lines which are each assigned to allow accesses by only a particular CPU. A more complex environment is then created in which more complex bugs can be found, such as paging errors. As before, copious amounts of random test sequences are generated and more errors will be found.</p>
<p>Some verification teams will completely forgo the large partition phase of false-sharing and start by immediately dividing the memory into cache lines. While this does work, it also tends to complicate debugging and forces the verification team being to prematurely deal with paging issues while debugging simple errors.</p>
<h2>False-Sharing Multi-Processor Tests</h2>
<p>The false-sharing arrangement is similar to the second stage of non-sharing in that the memory is divided up into cache lines. In this mode, multiple CPUs are allowed to hit the same cache lines, but not the exact same physical addresses. What this does is allow the cache accesses to come very close to each other without hitting the same spots. Several cache problems can be found and corrected using this method.</p>
<p>Debugging caches in this way greatly simplifies the process of testing actual shared memory and better limits the occurrence of simple errors in complex scenarios.  At every stage of the process, it is important to perform cacheable and non-cacheable testing as there may be bugs lurking in both of these areas.</p>
<h2>True-Sharing Multi-Processor Tests</h2>
<p>True-sharing tests are more complex as they allow multiple CPUs to access the same physical memory addresses. In both deterministic and in non-deterministic modes, tests generated by RAVEN are guaranteed to execute correctly regardless of timing issues including fast or slow memory or insertion of external interrupts.</p>
<h3>Deterministic True-Sharing</h3>
<p>As a simplified example of deterministic true-sharing, let us assume that we are verifying a dual CPU configuration. We begin by dividing up the execution stream using semaphores. Each divided zone may contain different numbers of instructions for each CPU with varying amounts of memory accesses, exceptions, etc. Because of this, some CPUs may complete their zones more quickly than others. During the same semaphore, the CPUs are unaware of values written by the other. Not until the semaphore has been completed will the CPUs sync up again and be aware of the other’s transactions. Once this happens, CPU0 can determine that it is legal to write to a line that CPU1 completed in the last semaphore. Upon completion of all zones, final values are compared, checking for consistency and errors. Although our rules are much more complicated than this, the example should elaborate on the kind of errors that can occur in MP verification. Because our tool implements complex rules, the test generated can determine if memory location will be deterministic or non-deterministic based on execution divided by semaphores. This is how we do deterministic sharing and actual reads and writes to the same physical memory addresses. This can find a lot of bugs.</p>
<h3>Non-Deterministic True-Sharing</h3>
<p>Non-deterministic true-sharing is the most complex mode of sharing and should always be conducted as the final stage of MP verification. In this method, we don’t use semaphores to divide up the execution stream, but instead allow CPUs to read addresses that are being written by other CPUs.  If two CPUs write to the same address, then a read of this address will result in an unknown value. If this value was intended for use in address generation or arithmetic calculation, then the result of these tasks will be unknown, and verification becomes much more difficult. Non-deterministic registers then cannot be used as sources, but only destinations until they take on deterministic values.</p>
<p>If non-deterministic transactions set flags, then the flag register must immediately be re-written. This is especially important in ARM processors where every instruction is conditionally executed. If something is done that results in a flag, the next instruction must be set to always execute regardless of flag values and perform the additional step of re-writing the flags.  We have settings and rules that determine what percentage of registers are allowed to become non-deterministic based on their type (i.e FPR, GPR, etc.).  So we do have some pretty complicated algorithms for handling determinism and non-determinism and determining legality of actions.</p>
<p>Non-deterministic tests become much more difficult to debug because you will have a list of possible values for each access and the errors can be timing dependent. These areas are important to cover, but they should be done last as the difficulty in debugging errors of this type is extremely high.</p>
<h2>Verifying the Snooping Mechanism</h2>
<p>One of the most critical areas in MP verification is cache coherence. Errors of this type can be detrimental to practical operation of the design. For example, it is possible to have errors in which data integrity is compromised due to multiple CPUs accessing shared memory.</p>
<p>To further illustrate an error of this type, let us assume that we are verifying two CPUs that both share a single L1 cache. At some point the L1 cache will have an image of data that resides in the main memory. If both CPUs write to the same cache line of the L1, then it is necessary to verify that the correct values get written back to main memory.</p>
<p>Adding an L2 memory to a situation such as this makes matters even more complicated. In this case, cache lines in the L1 will be an image taken the L2, which itself contains portions of data in the main memory. However, there is now the additional problem of L1 data being written back to main memory without crossing the L2. This creates a corresponding line of L2 cache that must now be invalidated to avoid errors.</p>
<p>Further conflicts can occur if a CPU flushes a cache line in the L1 that another CPU has written to, was going to write to, or is in the process of writing to. Fox example, suppose that we have a four CPU situation with two L1 caches, each being shared by a pair of CPUs and an L2 that is shared by all four CPUs. This is a common paradigm in MP designs. In this situation, it is physically possible for CPUs 0 /1 to write to the same line of memory as CPUs 2/3, creating another situation that has to be resolved. Each cluster of CPUs must then ask the other if for permission to read/write to main memory to avoid conflicts.</p>
<h2>Verification of Shared Registers</h2>
<p>One of the great things about having a random test generator is that it can effectively deal with obscure cases and propagate them across multiple CPUs. In the case of shared registers, we can divide them up into an arrangement similar to our true sharing example or allow only one CPU to handle all the shared registers. We can also use semaphores to do time/execution division of accesses and do non-deterministic testing, although this depends on the type of register. Although shared registers present some unique challenges, they also allow for some different opportunities to take advantage of.</p>
<p>These are all complicated issues which may be further compounded by timing issues. Errors such as these are what MP verification is really about and where the bulk of the errors can be found.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=KgHNXm1WLtk:qZY0pZL-Y6s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/KgHNXm1WLtk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/11/multi-processor-verification-of-an-arm-processor-core/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/11/multi-processor-verification-of-an-arm-processor-core/</feedburner:origLink></item>
		<item>
		<title>Verification Planning for ARM Architectures</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/Vvda6d-LDhk/</link>
		<comments>http://www.obsidiansoft.com/2009/10/beginning-verification-of-an-arm-processor-design/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 21:50:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Verification Planning]]></category>
		<category><![CDATA[ALU verification]]></category>
		<category><![CDATA[ARM verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[simulation based verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=80</guid>
		<description><![CDATA[By Melanie Typaldos and Tim Short The early stages of functional verification present several unique challenges that must be overcome to achieve first silicon on schedule. This article identifies several common problems that Obsidian recently encountered in the verification of a new ARM based processor design and discusses how the RAVEN random test generator was [...]]]></description>
			<content:encoded><![CDATA[<p><em>By Melanie Typaldos and Tim Short</em></p>
<p>The early stages of functional verification present several unique challenges that must be overcome to achieve first silicon on schedule. This article identifies several common problems that Obsidian recently encountered in the verification of a new ARM based processor design and discusses how the RAVEN random test generator was used in overcoming these obstacles.</p>
<h2>Eliminating Bottlenecks</h2>
<p>Many organization want to begin verification as soon as the first logical unit of RTL becomes available. However, the tool-chain (i.e. assembler, linker, compiler, etc.) often lags behind RTL development and architectural changes, creating a bottleneck in verification. RAVEN allows verification teams to completely bypass this problem and begin identifying functional errors before the tool-chain is implemented. Customers using RAVEN can have reported large productivity gains over directed testing, especially in the beginning and intermediate stages of verification &#8211; hitting 95-98% of all required coverage points using random tests.</p>
<h2>Verifying Intermediate RTL</h2>
<p>Let’s assume that the ALU unit of your design is ready for testing at an early stage, but the MMU, floating-point and load/store units are not. Some teams might begin by testing each instruction in order, varying only one or two operands for the sake of expedience. However, this creates a problem. Following this methodology, only a small portion of the RTL will be tested and the entire design will be exposed to errors that should have been corrected early on. With the same investment in time, RAVEN can produce significantly better results with only slight modifications to the default template.</p>
<p>Start Test<br />
Random Instruction (ALU)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..min=10     max=20<br />
End Test</p>
<p>RAVEN template files are used to designate which behaviors should be tested. At the most basic level, these templates provide the ability to interchange instruction groups, instruction quantity, and selection of operands. More advanced configurations allow for the biasing of certain exceptions and addressing/operand modes. This ability is important in the sense that it allows additional behaviors to be added incrementally as bugs are discovered and new areas of the RTL become available in emerging designs.</p>
<p>In the case of our ALU example, the Random Instruction control can be directed to use only instructions in the ALU group and can even disable the selection of individual instructions within that group. Available instructions can then be tested with an almost infinite number of parameter configurations. As further instruction groups and processor features become available (e.g. integer divide, MMU, load/store) RAVEN templates can be automatically updated to include these new behaviors. Simply re-generating the same templates then allows for the creation of thousands of new tests.</p>
<h2>Planning for Bugs in Your Testing Methodology</h2>
<p>As you’re creating your first tests, it’s important to think about how long they’ll take to simulate and debug. Smart design teams take into account where they are in the development cycle and the amount of processing power available for simulation when creating tests. This way tests can be run and completed within a targeted amount of time.</p>
<p>When a generated test hits a bug, it’s also much easier to isolate and identify the error if it is detected in a test with ten instructions rather than one with a thousand instructions. Even if you hit a bug in only one out of every thousand tests of ten instructions, this is still beneficial when compared to the time required to debug large tests.</p>
<p>Once you’re able to generate 10-20K short tests without finding errors, then it’s time to move up to tests of a hundred instructions and eventually on to tests of a thousand instructions. The reasoning here is that the more rare your bugs then become, the more dependent they will be on processor state, and longer tests will be more useful in this respect. Changing the quantity of instructions in a RAVEN template is as easy as adding extra zeros and regenerating.</p>
<p>Once bugs are found, RAVEN can be configured to continue testing around the error by disabling access to problematic behaviors in the RTL. Most internally developed generators don’t have this fine-grained level of control. It’s far easier for RAVEN to hit new behaviors while avoiding others that aren’t yet ready to be tested than for most other EDA tools on the market.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=Vvda6d-LDhk:m9EAymvzZeA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/Vvda6d-LDhk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/10/beginning-verification-of-an-arm-processor-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/10/beginning-verification-of-an-arm-processor-design/</feedburner:origLink></item>
		<item>
		<title>Using RAVEN to Generate Self-Checking Tests in Post Silicon Validation</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/ibRjqfuNd_M/</link>
		<comments>http://www.obsidiansoft.com/2009/10/using-raven-to-generate-self-checking-tests-in-silicon-validation/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 18:54:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Post-Silicon Validation]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random test generators]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[silicon debugging]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=76</guid>
		<description><![CDATA[By Tim Short and Melanie Typaldos, Obsidian Software Sure, self-checking code can be used with directed tests. But it&#8217;s time consuming, cumbersome and there&#8217;s no randomization. RAVEN has several features that make it work really well in a silicon validation environment for creating self-checking tests. Inherent Self-Checking Taking them one by one. If you&#8217;re leaving [...]]]></description>
			<content:encoded><![CDATA[<p><em>By Tim Short and Melanie Typaldos, Obsidian Software</em></p>
<p>Sure, self-checking code can be used with directed tests. But it&#8217;s time consuming, cumbersome and there&#8217;s no randomization. RAVEN has several features that make it work really well in a silicon validation environment for creating self-checking tests.</p>
<h2>Inherent Self-Checking</h2>
<p>Taking them one by one. If you&#8217;re leaving RAVEN undirected, which is usually what you want to do, then what gets intermixed are lots of jumps that depend on the previously generated values. Since tests generated by RAVEN can go anywhere and do anything, it&#8217;s not uncommon for complex tests to end with a jump off of some value, leading to another instruction sequence. So, inherently RAVEN tests are self checking.</p>
<p>Inside of a random test, you&#8217;ll usually have lots of jumps. If any of the calculations leading to those jumps change, then you&#8217;ll jump off into an area that you don&#8217;t want to be fairly quickly because some calculated value went wrong. Depending on your architecture, what some companies will do is to preload the memory area so that undefined instructions will cause traps resulting in a fail. Now you have to go into your silicon and figure out how you got to this point, but at least you know that you have a failure. Directed tests won&#8217;t have the same results as RAVEN because the engineers writing them won&#8217;t jump off of their results into strange places. It&#8217;s too hard for humans to use the results of calculations as jump targets, but for RAVEN it&#8217;s actually quite easy.</p>
<h2>Configurable Self-Checking Features</h2>
<p>The second thing that users can do is to turn on RAVEN&#8217;s self-checking feature, which includes a number of options for how you want to do self-checking. This feature tells RAVEN to insert self-checking code, much like a directed programmer would do to validate something, like a series registers. Since RAVEN knows when registers are updated, we can tell it to check all registers to make sure that their information is valid. Alternatively, we can check only the registers that were written or read. We can do this check after a preset number of instructions, at the end of the sequence, or it can be randomized to occur between a certain number of instructions.</p>
<h2>Adapting Self-Checking Tests to Fit the Hardware Environment</h2>
<p>For many customers, the actual test or hardware that they are operating in is embedded in an SoC with some test mode that allows them to bring signals out. But their environment is very different from the environment of their simulation world. In simulation, they may have a large amount of memory to use for testing. In this new environment though, they may want to restrict the tests to use only the on-board device memory. This might be a only very small amount, let&#8217;s say somewhere between 256K and 2MB.</p>
<p>Because RAVEN has configuration files that describe the environment that the chip is in, you can move tests originally written for a 4GB address space into 1MB of memory. RAVEN can then re-generate all of the tasks from your templates, forcing them into that much more constrained memory area. Now you can take your whole suite, and probably with some exceptions, regenerate all of your tests toward your real hardware platform and even re-simulate them again in their original environment with slight modifications to mimic what the hardware will look like. If all of these tests can be successfully run at full speed, then there is a high degree of confidence that the model is accurately reflected in the design and that there won&#8217;t be hidden problems in the silicon.</p>
<h2>Ability to Verify RTL and Instruction Set Simulator Agreement</h2>
<p>Another, more comprehensive method of self-checking in the RTL environment is the intermediate state information provided by RAVEN. Our test output files contain information about all updates to registers and memory that occur as a result of instruction execution. The testbench can be instrumented so that there are checkers that watch registers and memory to make sure that they progress through values predicted by simulation. This allows the testbench to detect the discrepancy in the exact instruction that caused it or within just a few cycles of that instruction, greatly reducing the time required for a verification engineer to isolate the problem.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=ibRjqfuNd_M:f1q4YFZgrQw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/ibRjqfuNd_M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/10/using-raven-to-generate-self-checking-tests-in-silicon-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/10/using-raven-to-generate-self-checking-tests-in-silicon-validation/</feedburner:origLink></item>
		<item>
		<title>Uncovering Processor Design Errors Spanning Page Boundaries</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/j_rOnFEk1yU/</link>
		<comments>http://www.obsidiansoft.com/2009/09/uncovering-processor-design-errors-spanning-page-boundaries/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 21:23:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[RTL Verification]]></category>
		<category><![CDATA[ARM verification]]></category>
		<category><![CDATA[cache verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[simulation based verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=72</guid>
		<description><![CDATA[Functional errors are not always easy to find in processor designs, especially when they require a specific series of events to occur before their presence is revealed. Obsidian&#8217;s verification engineers recently discovered an error of this type spanning page boundaries in a multi-core ARM design. When a load/store instruction crosses a page boundary, it is [...]]]></description>
			<content:encoded><![CDATA[<p>Functional errors are not always easy to find in processor designs, especially when they require a specific series of events to occur before their presence is revealed. Obsidian&#8217;s verification engineers recently discovered an error of this type spanning page boundaries in a multi-core ARM design.</p>
<p>When a load/store instruction crosses a page boundary, it is difficult to create all possible combinations of exceptions for both halves of the instruction. For example, if 2 possible exceptions exist then there will be 16 possible combinations of exceptions for 2 halves of the access. Because of this, it can be very hard to reach these exceptions, even with directed testing.</p>
<p>Obsidian&#8217;s RAVEN technology addresses this issue with its random methodology. User configurable biases may be used to direct the generator into areas where data access instructions may cross page-boundaries. Difficult to reach errors such as these can be uncovered with minimal effort and without diverting your greatest resource, the time of your most experienced engineers.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=j_rOnFEk1yU:wSlL59I_CWU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/j_rOnFEk1yU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/09/uncovering-processor-design-errors-spanning-page-boundaries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/09/uncovering-processor-design-errors-spanning-page-boundaries/</feedburner:origLink></item>
		<item>
		<title>State of the Industry Panel Discussion</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/HYVnDAbUNxc/</link>
		<comments>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 21:30:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[DVClub]]></category>
		<category><![CDATA[semiconductor trends]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=68</guid>
		<description><![CDATA[On June 30th, DVClub Austin will be hosting a state of the industry panel discussion. Topics are set to include industry consolidation, downsizing trends, corporate agility, and anything else that the audience can throw at our panelists. As always, DVClub will take place at Cool River Cafe on Parmer Ln. Confirmed Panelists include: Ty Garibay [...]]]></description>
			<content:encoded><![CDATA[<p>On June 30th, <a href="http://www.dvclub.org/" target="_blank">DVClub</a> Austin will be hosting a <a href="http://www.dvclub.org/Events/Austin-Q2-2009-Future-of-Semiconductor-Design-and-Verification-Jobs" target="_blank">state of the industry panel discussion</a>. Topics are set to include industry consolidation, downsizing trends, corporate agility, and anything else that the audience can throw at our panelists. As always, DVClub will take place at<a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=4001+W+Parmer+Ln,+Austin,+TX+78727,+USA&amp;ie=UTF8&amp;ll=30.425085,-97.715621&amp;spn=0.010824,0.019312&amp;t=h&amp;z=16&amp;iwloc=A" target="_blank"> Cool River Cafe</a> on Parmer Ln.</p>
<h2>Confirmed Panelists include:</h2>
<h3 style="padding-left: 30px;">Ty Garibay</h3>
<ul style="padding-left: 60px;">
<li>Ty Garibay is the Program Manager for ARM Processor development in Texas Instruments&#8217; Wireless Terminals Business Unit and site manager for TI&#8217;s Austin office. Currently, he and his team are focused on the completion of the industry&#8217;s first 45nm implementation of ARM&#8217;s Cortex-A8 super-scalar processor core.</li>
<li>Over the previous 20+ years, Ty has designed microprocessors at ARM, Alchemy Semiconductor, SGI/MIPS, Cyrix and Motorola, participating in all phases of design from circuits and layout through architecture and product definition.</li>
<li>He holds over 30 patents in the areas of integrated circuit design, computer architecture and design methodology.</li>
</ul>
<h3 style="padding-left: 30px;">Brian Wong</h3>
<ul style="padding-left: 60px;">
<li>Mr. Wong was President and CEO of D2Audio Corporation since 2005, a leading audio semiconductor and software company.  D2Audio was recently acquired by Intersil Corporation in August, 2008.  He is currently running the D2Audio-Intersil business as Director of D2Audio.</li>
<li>Previously, Mr. Wong was CEO at Primarion Inc, a company focused on data communications and Power Management ICs, which was acquired by Infineon.</li>
<li>Prior to that, he was a senior manager at TRW and managed the Mixed Signal IC business, which included data converter, Clock/Data Recovery, PLL, optical datacom, and high speed digital ICs.</li>
<li>Mr. Wong holds a BSEE from University of California, Los Angeles, a MSEE from University of Southern California, and has taken graduate management classes at UCLA Anderson School of Management. He has co-authored textbooks and papers on semiconductor technology and data converters. He is the Chairman of The Austin Technology Council, serves on the Advisory Board for the UC Davis ECE Department, and on the board of Integral Wave Technologies, a power management company.</li>
</ul>
<h3 style="padding-left: 30px;">Jim Reinhart</h3>
<ul style="padding-left: 60px;">
<li>Jim Reinhart is President and CEO of Luminary Micro and one of the company’s three cofounders. Jim has more than 25 years of experience in the creation and commercialization of computing technologies. A sixth-generation Texan with degrees from Rice and St. Edwards Universities, Jim will give a talk on the changes that are driving a massive shift in the semiconductor industry.</li>
<li>This event will be hosted by Eric Hennenhoefer of Obsidian Software and moderated by Steven Schulz of Silicon Integration Initiative.</li>
</ul>
<h2>Registration</h2>
<p>DVClub membership is free and is open to all non-service provider semiconductor professionals. Most members work in verification, but there are also plenty of entrepreneurs, professors, students, managers, investors, and even design engineers who attend. Participation by service providers (solicitors) is limited to event sponsors, who supply the funds for DVClub events.</p>
<p>Help us plan for a proper setup and <a href="http://www.evite.com/app/publicUrl/CNCNGIBUEAEPWPLQYBMX/DVClubAustinQ2-2009" target="_blank">RSVP here</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=HYVnDAbUNxc:H18_WWFxanY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/HYVnDAbUNxc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/</feedburner:origLink></item>
		<item>
		<title>Microprocessor Test and Verification Conference</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/D5wseGs4kFI/</link>
		<comments>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 23:12:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[Obsidian News]]></category>
		<category><![CDATA[coverage driven verification]]></category>
		<category><![CDATA[semiconductor trends]]></category>
		<category><![CDATA[silicon debugging]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=63</guid>
		<description><![CDATA[Preliminary Call for Papers: 10th International Workshop on Microprocessor Test and Verification (MTV 2009) December 7-8, 2009, Hyatt Regency On Town Lake, Austin, Texas, USA. Website: http://mtv.ece.ucsb.edu/MTV/ This is the 10th edition of the MTV Workshop, a testament to its success in providing an ideal environment for cross- examination of test and verification experiences and [...]]]></description>
			<content:encoded><![CDATA[<h2>Preliminary Call for Papers:</h2>
<p>10th International Workshop on Microprocessor Test and Verification (MTV 2009)<br />
December 7-8, 2009, Hyatt Regency On Town Lake, Austin, Texas, USA.</p>
<p>Website: <a href="http://mtv.ece.ucsb.edu/MTV/">http://mtv.ece.ucsb.edu/MTV/</a></p>
<p style="padding-left: 30px;">This is the 10th edition of the MTV Workshop, a testament to its success in providing an ideal environment for cross- examination of test and verification experiences and innovative solutions. MTV has been held in Austin for the last 8 years, so please plan on participating in order to make this another successful forum.</p>
<h2>Purpose</h2>
<p style="padding-left: 30px;">The purpose of this workshop is to bring researchers and practitioners from the fields of verification and test together to exchange innovative ideas and to develop new methodologies to solve the difficult challenges facing us today in various processor and SOC design environments. In the past few years, some work has been done on exploiting techniques from test to solve problems in verification and vice versa.</p>
<h2>Topics</h2>
<p style="padding-left: 30px;">AREAS OF INTEREST include, but not limited to:</p>
<p style="padding-left: 30px;">• Validation of microprocessors and SOCs<br />
• Test/Verification of multimedia processors<br />
• Performance testing<br />
• High-level test generation for functional verification<br />
• Emulation techniques<br />
• Silicon debugging<br />
• Formal techniques and their applications<br />
• Verification coverage<br />
• Test Generation at the transistor level<br />
• Equivalence checking of custom circuits<br />
• ESL Methodology<br />
• Virtual Platforms<br />
• Software verification<br />
• Circuit level verification<br />
• Switch-level circuit modeling<br />
• Timing validation techniques<br />
• Path analysis for verification or test<br />
• Design error models<br />
• Design error diagnosis<br />
• Design for Testability or Verifiability<br />
• Optimizing SAT procedures with applications to testing and formal verification</p>
<h2>Important dates</h2>
<p style="padding-left: 30px;">Submission: Sept 1, 2009<br />
Notification: Oct 1, 2009<br />
Final version due: Nov 1, 2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=D5wseGs4kFI:634XW9zXCsQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/D5wseGs4kFI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/</feedburner:origLink></item>
		<item>
		<title>Obsidian Solution Value</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/K22-bsuYSVo/</link>
		<comments>http://www.obsidiansoft.com/2009/06/roi-proposition/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 17:00:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<guid isPermaLink="false">http://flint.obsidiansoft.com/wp/?p=570</guid>
		<description><![CDATA[Experience Productivity Gains Design productivity is tied to the ability to quickly generate large numbers of tests. RAVEN can be implemented in nightly test suites to continually generate hundreds of thousands of tests. Processor designs are verified with less time and effort than with alternative verification methodologies. Fewer Respins Obsidian can help clients eliminate costly [...]]]></description>
			<content:encoded><![CDATA[<h2>Experience Productivity Gains</h2>
<p>Design productivity is tied to the ability to quickly generate large numbers of tests. RAVEN can be implemented in nightly test suites to continually generate hundreds of thousands of tests. Processor designs are verified with less time and effort than with alternative verification methodologies.</p>
<h2>Fewer Respins</h2>
<p>Obsidian can help clients eliminate costly manufacturing respins due to functional errors. Using a dynamic random test generator ensures that more of the design will be tested with better coverage, specifically around difficult to reach corner-cases. With proper deployment and training of RAVEN, verification teams can save the equivalent of one full respin for each design project.</p>
<h2>Time-to-Market Advantage</h2>
<p>Fully, 55% of embedded processor designs do not meet their scheduled release dates. Being first-to-market among competitors can be extremely advantageous for processor designers as revenues are typically doubled during the extra time period.</p>
<h2>Cutting Verification Costs</h2>
<p>If Obsidian can cut verification time by a modest 10%, the end user can claim a 5% reduction in total design costs. Based on the $50M cost of a 45nm processor, this element alone would result in a savings of $2.5M for the design project. These numbers will be higher for more complex processors and with better time savings.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=K22-bsuYSVo:Sedky5FMe2k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/K22-bsuYSVo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/roi-proposition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/06/roi-proposition/</feedburner:origLink></item>
		<item>
		<title>Knowing When Verification is Complete</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/ZMJgqscSDw4/</link>
		<comments>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 17:56:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[RTL Verification]]></category>
		<category><![CDATA[Verification Debugging]]></category>
		<category><![CDATA[coverage driven verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[simulation based verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=21</guid>
		<description><![CDATA[This article presents an overview of functional design verification using a coverage driven methodology while attempting to answer the question of how much testing is enough.]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>This article presents an overview of functional design verification using a coverage driven methodology while attempting to answer the question of how much testing is enough. The part being verified in this case will be a general purpose microprocessor, such as those found in mobile computing devices. Note that an approach of this magnitude is not always required. Designs with very limited instruction sets or highly restricted functionalities may be satisfied by simply writing directed assembly code tests to verify their intended functionalities.</p>
<h2>Comparison of Simple and Complex Architectures</h2>
<p>Figure 1 depicts a simple architecture as compared to a complex one. Note that the number of corner cases and unpredictability of the verification space increases as the architecture gains complexity. Thus, the complexity of the architecture determines how much testing will need to be accomplished to properly verify the component’s function.</p>
<p><strong>Figure 1. Comparison of Verification Spaces</strong></p>
<p><img class="alignnone size-medium wp-image-23" title="Distribution of Coverage Points" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/figure-1-300x186.png" alt="" width="300" height="196" /></p>
<h2>Measuring Verification Progress</h2>
<p>Coverage metrics are the dominant method for measuring verification progress in the industry today. Coverage points are normally designated by the design engineers looking at the logic of their block and by verification or system engineers looking at the functional definition of the part. Both of these are critical insights into the required verification coverage of the design.</p>
<p>Coverage points, indicated by the red dots in Figure 2, are deliberately chosen with respect to placement and density according to design knowledge and risk assessment.</p>
<p><strong>Figure 2. Distribution of Coverage Points</strong></p>
<p><strong><a href="/wp-content/uploads/2009/03/figure-2-300x196.png"><img class="alignnone size-medium wp-image-23" title="Distribution of Coverage Points" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/figure-2-300x196.png" alt="Distribution of Coverage Points" width="201" height="131" /></a><br />
</strong></p>
<h2>Directed Testing VS Random Methodology</h2>
<p>Some organizations will use only directed tests to hit coverage points.  Because directed tests are by their very nature highly targeted and relatively inflexible, this results in much of the design not being tested as is shown by the ratio of red to gray in Figure 2. In addition to the low overall coverage that results from this approach, creation of directed tests is time consuming, requiring approxomately 20-30 minutes per test, and requires highly skilled engineers. In this approach, testbench checkers that detect hits to coverage points are often overlooked with the assumptions that the engineers writing the tests know how to hit the required coverage points and that human errors will not a significant problem. As the design changes over the course of RTL development, directed tests may lose track of their targeted coverage points. Without coverage monitors, these types of errors will not be detected and the design will not be as thoroughly verified as it appears to be on paper.</p>
<h2>Using a Random Test Generator to Close Coverage</h2>
<p>As processor designs became more complex, the need to hit more coverage points became apparent. Once the grid has been established, large numbers of purely random tests may be incorporated to begin closing coverage. Some of these tests may hit points on the coverage grid while others will not.</p>
<p><strong>Figure 3. Intersection of Coverage Grid and Pure Random</strong></p>
<p><strong><a href="/wp-content/uploads/2009/03/figure-3-300x149.png"><img class="alignnone size-medium wp-image-24" title="Intersection of Coverage Grid and Pure Random" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/figure-3-300x149.png" alt="Intersection of Coverage Grid and Pure Random" width="316" height="156" /></a><br />
</strong></p>
<h2>Hitting Corner Cases</h2>
<p>Approaching the problem of hitting coverage points from a random test generator viewpoint, a single engineer begins by writing a few generator templates and then generates tests using those templates. The generated tests are then run on a testbench which incorporates coverage monitors. The coverage monitors report all coverage points that are hit by the tests. As long as tests generated from the templates continue to hit new coverage points, the templates are kept in the nightly suite. As the rate of hitting new coverage points declines, new generator templates are created to target coverage holes. This approach requires skilled engineers to write checkers for the testbench but less skilled engineers to run the test generator.</p>
<p>Directed-random templates are created around points not hit by the purely random templates. We now begin to see the coverage grid closing more tightly (around 95%), and the verification process comes closer to completion.</p>
<p><strong>Figure 4. Coverage Grid, Directed Random and Pure Random</strong></p>
<p><strong><a href="/wp-content/uploads/2009/03/figure-4-300x159.png"><img class="alignnone size-medium wp-image-25" title="Coverage Grid, Directed Random and Pure Random" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/figure-4-300x159.png" alt="Coverage Grid, Directed Random and Pure Random" width="300" height="159" /></a><br />
</strong></p>
<h2>Hitting Corner Cases</h2>
<p>Not all coverage points will be hit by fully random or directed random templates. Some coverage points require a long series of events before the targeted behavior takes place. In this case, there are two possible approaches: write directed tests and write directed templates. Directed tests can get to these most difficult coverage points more quickly but prove only one or a few cases around that point. Directed templates take more time to create but can be written to allow as much random behavior around the coverage point as possible.</p>
<p><strong>Figure 5. Review Templates and Relax Restrictions</strong></p>
<p><strong><a href="/wp-content/uploads/2009/03/figure-5-300x173.png"><img class="alignnone size-medium wp-image-26" title="Review Templates and Relax Restrictions" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/figure-5-300x173.png" alt="Review Templates and Relax Restrictions" width="300" height="173" /></a><br />
</strong></p>
<p>Finally, existing tests are reviewed, and as much directed behavior as possible is removed before the tests are run again. Coverage then reaches full closure, and these tests are run until the schedule no longer permits.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=ZMJgqscSDw4:9_PbNutETUk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/ZMJgqscSDw4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/</feedburner:origLink></item>
		<item>
		<title>Bailey on Verification at the Club</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/OX_gi2IpLq8/</link>
		<comments>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 20:07:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[DVClub]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=45</guid>
		<description><![CDATA[By Grant Martin This blog post originally appeared at: http://www.chipdesignmag.com/martins/2009/03/19/bailey-on-verification-at-the-club/ — March 19, 2009 @ 11:14 pm Today I attended the latest meeting of the Silicon Valley branch of the DVClub. For those not familiar with the DVClub (DV = Design Verification), it was started by Eric Hennenhoefer in Austin a few years ago. It [...]]]></description>
			<content:encoded><![CDATA[<p>By <a href="http://www.chipdesignmag.com/martins/">Grant Martin</a></p>
<p>This blog post originally appeared at:</p>
<p><a href="http://www.chipdesignmag.com/martins/2009/03/19/bailey-on-verification-at-the-club/" target="_blank">http://www.chipdesignmag.com/martins/2009/03/19/bailey-on-verification-at-the-club/</a></p>
<p>— March 19, 2009 @ 11:14 pm</p>
<p>Today I attended the latest meeting of the Silicon Valley branch of the <a href="http://www.dvclub.org" target="_blank">DVClub</a>. For those not familiar with the DVClub (DV = Design Verification), it was started by Eric Hennenhoefer in Austin a few years ago. It now has branches in Austin, Bangalore, Boston, Bristol, Dallas, RTP, San Diego and Silicon Valley. In Silicon Valley it meets about once a quarter for a talk on some aspect of verification. I first heard of this about 1.5 years ago when we were invited from Tensilica to give a talk about verifying our video subsystem. The club has all the right ingredients to attract a crowd of engineers:</p>
<ol>
<li>a free lunch</li>
<li>interesting speakers</li>
<li>did I mention a free lunch?</li>
<li>a chance to meet new colleagues and old friends</li>
<li>and of course, a free lunch</li>
</ol>
<p>(Sponsors such as Cadence, Doulos, Denali, Silicon Elite and Obsidian pick up the tab for the venue and lunch (updated after original post, on Friday 20 March 2009, to correct list of sponsors)).</p>
<p>Today’s speaker was <a href="http://brianbailey.us/" target="_blank">Brian Bailey</a>, a friend and co-author of mine, speaking on “Is it time to declare a verification war?” The place was packed out with about 130 people, filling the room to capacity (Eric said this was the largest Silicon Valley DVClub crowd to date).</p>
<p><div id="attachment_46" class="wp-caption alignnone" style="width: 226px"><img class="size-full wp-image-46" title="brian-bailey" src="http://www.obsidiansoft.com/wp-content/uploads/2009/03/brian-bailey1.jpg" alt="Brian Bailey" width="216" height="291" /><p class="wp-caption-text">Brian Bailey</p></div></p>
<p>Brian spoke about his philosophy of verification, drew some analogies to Sun-Tzu’s <a href="http://en.wikipedia.org/wiki/The_Art_of_War" target="_blank">Art of War</a>, and also spoke about three technologies that he felt had potential to change verification significantly:</p>
<ol>
<li>Functional Qualification &#8211; as exemplified by Certess (now SpringSoft) Certitude</li>
<li>Raising abstraction &#8211; as exemplified by Calypto’s sequential equivalence checking</li>
<li>“Intelligent testbenches” &#8211; as exemplified by Jasper’s Behavioural Indexing</li>
</ol>
<p>Brian’s slides are available <a href="http://www.dvclub.org/images/Presentations/schulz_sv_q2_2009.pdf" target="_blank">here</a>.</p>
<p>IF you live or work anywhere any of these branches of the DVClub, and have an interest in verification, I recommend that you check them out. Sign up for their <a href="http://visitor.constantcontact.com/email.jsp?p=oi&amp;m=1101368618919" target="_blank">newsletter</a> and get notified of meetings in advance.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=OX_gi2IpLq8:CI3B3Kh3L7E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/OX_gi2IpLq8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/</feedburner:origLink></item>
		<item>
		<title>Random Test Generator Taxonomy</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/ldjwWiFSrJw/</link>
		<comments>http://www.obsidiansoft.com/2009/02/random-test-generator-taxonomy/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 23:53:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[simulation based verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/blog/?p=16</guid>
		<description><![CDATA[There is a vast landscape of test generators used in the industry today. These range from simple scripts and parameterized macros that can be created in a matter of weeks to full featured systems used by cutting edge processor verification teams. In many cases, a processor design team will write a simple test generator for [...]]]></description>
			<content:encoded><![CDATA[<p>There is a vast landscape of test generators used in the industry today. These range from simple scripts and parameterized macros that can be created in a matter of weeks to full featured systems used by cutting edge processor verification teams.</p>
<p>In many cases, a processor design team will write a simple test generator for the first phase of a project and gradually evolve it into a more advanced form as the architecture matures. This continual evolution of test generator technology stems from several causes:</p>
<p style="padding-left: 30px;">• Earlier designs tend to be simpler with later revisions adding more features and complexity.</p>
<p>• Later designs may prove complex enough to require a new approach.</p>
<p>• The verification effort may initially be underestimated.</p>
<p>• Estimates become more realistic over time as they become based on knowledge gained in earlier revisions.</p>
<p>• Products that go through several revisions and enhancements are likely to be those that have proven successful in the market and these tend to have better funding for both design and verification.</p>
<h2>Table Based Generators</h2>
<p>Table based test generators are the simplest possible generators. Creation of such generators can be accomplished relatively quickly, and maintenance requirements are often low. These generators work by capturing ISA knowledge and storing it in a central table for later use. Because of their simplistic nature, table based generators may be used by less skilled personnel to create tests. There is a drawback to these generators however, as their implementation is generally restricted to simple architectures. Usage on more complex designs may result in an inability to reach corner-cases or create complex scenarios. Table based generators may also generate invalid tests at times.</p>
<h2>Static Generators</h2>
<p>Static generators are similar to table based generators with the exception that the majority of the instruction, operand and data selection reside in complex procedural code. Static generators are capable of producing more random behavior than table based generators, but still have trouble hitting many corner-cases. In addition, the skill level required to create and maintain such a tool rises sharply once this level of sophistication is reached.</p>
<h2>Dynamic Generators</h2>
<p>Dynamic generators incorporate significant knowledge about the architecture being tested. They enhance the ability of less-skilled users to generate complex tests that can hit hard-to-reach corner cases without stumbling on subtle programming pitfalls. This added knowledge, flexibility and ease-of-use is reflected in a more complex generator and consequently the cost of creating and maintaining the generator are greater than for table-based or static generators.</p>
<p><a href="http://www.obsidiansoft.com/wp-content/uploads/2009/02/rtg-comparison1.png"><img class="alignnone size-full wp-image-18" title="rtg-comparison" src="http://www.obsidiansoft.com/wp-content/uploads/2009/02/rtg-comparison1.png" alt="Comparison of Various Aspects of Random Test Generators" width="500" height="236" /></a></p>
<p>Obsidian Software&#8217;s RAVEN is a dynamic random test generator that has been developed and maintained by processor verification experts since 1997. During this time RAVEN has been used to verify dozens of processor implementations by design teams across the globe.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=ldjwWiFSrJw:3roCnpkFc6o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/ldjwWiFSrJw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/02/random-test-generator-taxonomy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/02/random-test-generator-taxonomy/</feedburner:origLink></item>
		<item>
		<title>The Evolution of Processor Test Generation Technology</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/6dyeUIyClyI/</link>
		<comments>http://www.obsidiansoft.com/2009/02/the-evolution-of-processor-test-generation-technology/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 22:37:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[random test generators]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[simulation based verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=833</guid>
		<description><![CDATA[Eric Hennenhoefer and Melanie Typaldos PDF Version Abstract Random test generation (RTG) technology is the backbone of modern processor functional verification strategies. These programs create pseudo-random assembly level tests based on some level of user preferences. The resulting tests are used throughout the verification process from early RTL bring-up to the final steps of massive [...]]]></description>
			<content:encoded><![CDATA[<p>Eric Hennenhoefer and Melanie Typaldos<br />
<a href="http://www.obsidiansoft.com/pdf/evolution.pdf">PDF</a> Version</p>
<h3>Abstract</h3>
<p>Random test generation (RTG) technology is the backbone of modern processor functional verification strategies. These programs create pseudo-random assembly level tests based on some level of user preferences. The resulting tests are used throughout the verification process from early RTL bring-up to the final steps of massive regression and sometimes even in post silicon hardware testing.</p>
<p>This paper provides an overview of the evolution of RTG across multiple generations of test generation technology including table-based generators, static test generators, dynamic test generators, knowledge based generators, and commercial grade knowledge based test generation systems. Also outlined are several usage models to help determine the right technology or combination of technologies for a given project based on the complexity of the verification challenge and life expectancy of the processor architecture.</p>
<h3>Introduction</h3>
<p>Random test generators are the backbone of modern functional verification methodologies for processors. Recent papers claim to have implemented random test generators in as little as a few weeks [1], whereas, experts in the field spend millions [2] and employ large research groups with the charter to maintain and enhance RTG technology. In reality, both approaches produce test generators but the level of robustness and the types of end users vary radically between these cases.</p>
<p>This paper provides an overview of various test generation technologies available for creating pseudo random tests for the functional verification of processors. Each technology or method will be analyzed based on creation costs and the ability of the test generator to meet the needs of modern processor development teams. The paper also presents a methodology for determining the optimal technology for a new processor based on the complexity of the ISA and the implementation.</p>
<p>Finally an overview of the necessary technology and process needed to deploy Obsidian Software’s commercial test generator, RAVEN®, will be reviewed.</p>
<h3>Motivation</h3>
<p>The goal of verification teams is to achieve bug free first silicon on schedule. The cost of failure is extremely high due to the high costs of mask sets and the loss of market window implied in a missed schedule.</p>
<p>A typical processor pre-silicon functional verification process involves running a large number of assembly level tests in RTL simulation. The more random tests that are run in RTL pre-silicon, the greater the chance the DV team has of finding all the bugs. The concept of massive regression combined with automated results checking and coverage results is the foundation of modern processor verification.</p>
<p>There are two primary problem spaces to which RTG can be applied. The first is enabling the massive regression system and the second is providing a way of building on existing knowledge to increase the productivity of the stimulus creation process.</p>
<h3>Taxonomy of Test Generators</h3>
<p>There is a vast landscape of test generators used in the industry today. These range from simple scripts and parameterized macros that can be created in a matter of weeks to full featured systems used by cutting edge processor verification teams. The following sections will provide an overview of the major types of generators. This outline will be presented in historical ordering. Table 1 provides a summary of existing RTG technologies.</p>
<p><strong>Table 1: Overview of Verification Methods</strong></p>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 118pt;" width="157" valign="top"><span style="color: white;">Technology</span><span> </span></td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 124pt;" width="165" valign="top"><span style="color: white;">Description</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top"><span>Directed ASM tests</span></td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top"><span>DV engineers write tests by   hand.</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 118pt;" width="157" valign="top"><span>Table-based Generators</span></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 124pt;" width="165" valign="top"><span>Simple tables of macros,   instructions, and operands mixed with random parameters.</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top"><span>Static Generators </span></td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top"><span>Tables are combined with   complex procedural code.</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 118pt;" width="157" valign="top"><span>Dynamic Generators</span></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 124pt;" width="165" valign="top"><span>Uses the state of the ISA to   create more robust tests.</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top"><span>Knowledge-based Generators</span></td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top"><span>Dynamic test generators that   allow testing knowledge capture for future projects. Multiple solvers are   used to handle complex constraints and pipeline allocation. Typically GUI   front end if usage extends beyond author.</span></td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 118pt;" width="157" valign="top"><span>Commercial Test Generators</span></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 124pt;" width="165" valign="top"><span>Complex, comprehensive test   generators available from 3rd parties</span></td>
</tr>
</tbody>
</table>
<p>In many cases, a processor design team will select a simple test generator for the first project and gradually evolve it into a more advanced form. This evolution stems from several causes. The verification effort may be underestimated or minimized during the justification phase of a new product. During development of later revisions, the verification phase estimate can be more realistic since it is based on knowledge gained in earlier revisions. Earlier designs tend to be simpler in structure with later designs adding more features and more complexity. Simple designs can often be verified using less sophisticated technology while verification of later designs may prove to be too complex for the simple approach. Products that go through several revisions and enhancements are likely to be those that have proven successful in the market and these tend to have better funding for both design and verification.</p>
<h3>Directed ASM Tests</h3>
<p><strong>Description</strong></p>
<p>Hand crafted assembly language tests.</p>
<p><strong>Pros</strong></p>
<ul>
<li>Easy to construct</li>
<li>Simple to debug</li>
<li>Requires DV engineers to learn the ISA</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Very time consuming</li>
<li>Requires all DV engineers to learn the ISA and the software development environment</li>
<li>Can be difficult to coordinate test creation to ensure coverage, especially of corner cases.</li>
<li>Engineers’ knowledge of the design can bias test creation.</li>
</ul>
<p><strong>Usage</strong></p>
<ul>
<li>New ISA features</li>
<li>Early bring up</li>
<li>DV engineer training</li>
<li>Targets known holes in test generation</li>
</ul>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">Enables massive test   generation</td>
<td style="padding: 1.95pt 2.3pt; width: 120pt;" width="160" valign="top">No</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">Enables knowledge capture</td>
<td style="padding: 1.95pt 2.3pt; width: 120pt;" width="160" valign="top">Very low</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">Coverage productivity gain</td>
<td style="padding: 1.95pt 2.3pt; width: 120pt;" width="160" valign="top">None</td>
</tr>
</tbody>
</table>
<h3>Table based Generators</h3>
<p><strong>Description</strong></p>
<p>A simple test generator constructed from data tables. These generators have little to no logic in them; everything is in the tables or macros. Examples are UMA DGL macro generator and Specman CPU examples.</p>
<p><strong>Pros</strong></p>
<ul>
<li>Can be developed in about a month</li>
<li>Can achieve high encoding coverage of very regular data path instructions</li>
<li>Tables and macros are easy to understand without requiring a full knowledge of the ISA</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Quickly breaks down in complex ISA areas</li>
<li>Macros have low randomness</li>
<li>Large numbers of macros may be required to hit interesting corner cases.</li>
</ul>
<p><strong>Usage</strong></p>
<ul>
<li>Table based generators are a temporary solution until more robust generators are available</li>
</ul>
<h3>Static Generators</h3>
<p><strong>Description</strong></p>
<p>Static generators are similar to table based generators with the difference being that the majority of the instruction, operand, and data selection is now in complex procedural code</p>
<p><strong>Pros</strong></p>
<ul>
<li>Increased randomness over table based generators</li>
<li>Better support for control flow instructions</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Lacks state information</li>
<li>Insertion of helper instructions decreases randomness</li>
<li>Macros are still required to reach difficult cases</li>
</ul>
<p><strong>Usage</strong></p>
<ul>
<li>Medium complexity projects along with directed tests</li>
</ul>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables massive test   generation</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Moderate, scales better on   simple ISAs</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables knowledge capture</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Low, source code   modifications required</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Coverage productivity gain</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Moderate</td>
</tr>
</tbody>
</table>
<h3>Dynamic Generators</h3>
<p><strong>Description</strong></p>
<p>Test generator that uses the current state of the processor.</p>
<p><strong>Pros</strong></p>
<ul>
<li>Thorough test generation for complex ISAs</li>
<li>Creates dense, interesting tests</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Slower test generation</li>
<li>Significant engineer investment to create</li>
</ul>
<p><strong>Usage</strong></p>
<ul>
<li>Medium to high complexity designs.</li>
<li>Some directed tests still required.</li>
</ul>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables massive test generation</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Moderate to high</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables knowledge capture</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Moderate</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Coverage productivity gain</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">Moderate</td>
</tr>
</tbody>
</table>
<h3>Knowledge-based Generators</h3>
<p><strong>Description</strong></p>
<p>Dynamic test generators combined with advanced constraint and pipeline solvers. These generators separate generic testing knowledge from ISA specific information. The ISA specific fraction of the test generator can be enhanced or swapped for use in future projects</p>
<p><strong>Pros</strong></p>
<ul>
<li>Generic, reusable, constraint solvers</li>
<li>Scalable testing knowledge</li>
<li>Pipeline resource solvers</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Development costs are high, comparable to a compiler development</li>
</ul>
<p><strong>Usage</strong></p>
<ul>
<li>Knowledge-based generators are capable of providing high-quality verification tests for all designs.</li>
<li>Usage is often decreased if the tool lacks documentation, user interfaces, and an EDA support team.</li>
</ul>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables massive test   generation</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">High</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Enables knowledge capture</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">High</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 118pt;" width="157" valign="top">Coverage productivity gain</td>
<td style="padding: 1.95pt 2.3pt; width: 124pt;" width="165" valign="top">High</td>
</tr>
</tbody>
</table>
<h3>Commercial Test Generators</h3>
<p><strong>Description</strong></p>
<p>Complex, comprehensive generators that abstract as much testing knowledge as possible into reusable cores. ISA specific information is added on top of a proven base</p>
<p><strong>Pros</strong></p>
<ul>
<li>The reusable core of the generator has been used on multiple projects and is fully debugged</li>
<li>A full-featured test generator is available early since only the ISA specific layer needs to be added</li>
<li>The vendor provides a tool development team that is experienced with multiple architectures and verification strategies as well as with the development of the tool itself</li>
<li>A full-featured, user friendly GUI usually provided</li>
<li>User manuals explaining the complete functionality of the tool are provided</li>
<li>Vendor supplies support personnel for learning and debugging</li>
<li>Improvements made to the core for other architectures or customers are included in updates</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>In a large company, the internal tools development group may resent the use of an outside vendor</li>
<li>Knowledge of the ISA must be made available to the tool developer</li>
<li>Acceptance and deployment to multiple groups may be an issue.</li>
</ul>
<p><strong>Usage</strong></p>
<p>Commercial test generators are full featured generators that provide tests for designs of all levels. The verification phase of the design is expedited since the tool is available early in development</p>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 117pt;" width="156" valign="top">Enables massive test   generation</td>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">High</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 117pt;" width="156" valign="top">Enables knowledge capture</td>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">High</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 117pt;" width="156" valign="top">Coverage productivity gain</td>
<td style="padding: 1.95pt 2.3pt; width: 123pt;" width="164" valign="top">High</td>
</tr>
</tbody>
</table>
<h3>Determining the Best Technology for a Project</h3>
<p>The choice of the correct verification tool for a new design project will depend on many factors, among which are:</p>
<ul>
<li>The level of experience of the design and verification teams</li>
<li>The complexity of the ISA or processor</li>
<li>The project schedule</li>
<li>The tools currently in use within the company</li>
<li>The level of staffing for verification, design and tool development</li>
<li>Funding available for verification</li>
</ul>
<p>Several areas of microprocessor design are increasing the complexity of the average design project. Microprocessors themselves have become increasingly complex, incorporating advanced memory management units, floating point, multimedia instructions, SIMD, VLIW and multi-tasking and multi-processing. In addition, processors are tending toward becoming microcontrollers or SoCs with the inclusion of DSP, DMA and other functions previously relegated to board components.</p>
<p>The more complex the design, the more complex and comprehensive tool is required for verification. Even on simpler designs, it may be advantageous to select a more thorough verification approach to avoid having to revamp or recreate a verification environment for potentially more complex follow-on projects.</p>
<p>Table 1 provides an overview of the functions provided by each type of generator, directed ASM, table-based, static, dynamic, knowledge-based and commercial. A comparison of the required testing parameters may be used along with this table may help determine the correct tool.</p>
<h3>The RAVEN® Generator</h3>
<p>For many projects, the complexity of the design and the need for fast verification preclude the development of an RTG from scratch. Design teams may attempt to improve an existing test generator, moving it from one of the simpler types to a more sophisticated knowledge-based generator. However, this is a major effort that could draw essential resources from the design team or require skills that are not available. This is especially true since the development of such an advanced tool requires experienced engineers who have knowledge of processor architecture, verification and high level software development. In addition, the end product of such an effort is likely to be difficult to use with little documentation.</p>
<p>At this point, a commercial RTG becomes attractive. The RAVEN® generator developed by Obsidian Software is often a better solution than that described above. RAVEN® is a full-featured RTG composed of three main elements: 1) the core, 2) the ISA layer and 3) the GUI.</p>
<p>The RAVEN® core includes constraint solvers, a simulator interface, multi-processor support, and test output functions. The ISA layer includes information specific to the particular architecture under test. This layer is modified to support new ISAs. The GUI provides an easy-to-use interface to all of the configuration features of the generator. The generator itself can be run from the GUI or from the command line. The features provided by RAVEN® are outlined under the Commercial column in Table 2.</p>
<p class="TableTitle" style="margin-left: 0in; text-indent: 0in;"><span style="font-weight: normal;">Table 2: Feature Comparison</span></p>
<table style="margin-left: 2.3pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top">
<p style="margin: 0in 0in 0.0001pt; text-indent: 0in;"><span style="color: white;">Table</span></p>
</td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top">
<p style="margin: 0in 0in 0.0001pt; text-indent: 0in;"><span style="color: white;">Static</span></p>
</td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">
<p style="margin: 0in 0in 0.0001pt; text-indent: 0in;"><span style="color: white;">Dynamic</span></p>
</td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">
<p style="margin: 0in 0in 0.0001pt; text-indent: 0in;"><span style="color: white;">Knowledge</span></p>
</td>
<td style="padding: 1.95pt 2.3pt; background: black none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">
<p style="margin: 0in 0in 0.0001pt; text-indent: 0in;"><span style="color: white;">Commercial</span></p>
</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Random Instructions</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Random Data</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Parameterized Macros   X</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Support for complex ISA</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Control flow generation</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Macros</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Loops with low randomness</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Link with ISS</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">State set up code not needed;                              enhances randomness</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">State aware generation</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Integrated self-checking code</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Loops with moderate   randomness</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Support for dynamic resource                            scheduling</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Constraint Engine</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Architectural pipeline solver</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Complex Interrupt &amp;   exception  support</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Full Paging</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Cache controls</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Biases / API exposed to the   user</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Reusable generation core</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Separate architecture layer   for  each ISA</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Loops with full randomness</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Multiprocessor /   Multithreaded</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Detailed instruction testing   knowledge</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">User accessible settings to   control test intent</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">User accessible parameters   for instruction and operand selection</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Iterators to support common   testing methods; every instruction followed by every other instruction</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">GUI</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Manual</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Tutorials</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; width: 184pt;" width="245" valign="top">Generator development system   including regression</td>
<td style="padding: 1.95pt 2.3pt; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; width: 75pt;" width="100" valign="top">X</td>
</tr>
<tr>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 184pt;" width="245" valign="top">Commercial support</td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 50pt;" width="67" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 55pt;" width="73" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 60pt;" width="80" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top"></td>
<td style="padding: 1.95pt 2.3pt; background: #e6e6e6 none repeat scroll 0% 0%; width: 75pt;" width="100" valign="top">X</td>
</tr>
</tbody>
</table>
<p>RAVEN® can generate significant tests for a new platform within a few weeks. Advanced features such as interrupt control and task switching may require more time to implement. Depending on the similarity of the new features to those already supported in RAVEN®. However, even while this development is proceeding, the full power of the core functions is available. In addition, the GUI is available and generally complete from initial deployment, although some user-configuration parameters may be added as architectural support becomes more complete – for example controls for the generation of task switches or exceptions may be modified to reflect specific architectures.</p>
<p>RAVEN® currently supports multiple architectures such as ARM, MIPS, PowerPC, and proprietary DSPs. Additionally, Obsidian can port RAVEN® to fit almost any proprietary architecture. Porting RAVEN® typically requires between 3-9 months depending on ISA complexity and similarities to existing architectures.</p>
<p>Once the initial version of RAVEN® has been deployed, verification engineers can immediately begin generating tests. The help provided in the tool and the manual are usually sufficient for engineers to understand how to use the tool. Obsidian also offers training classes and on-site support.</p>
<h3>Conclusions</h3>
<p>Random test generators have a long development history, most of it confined within the individual companies where the tool was to be used. As designs become more complex and design cycles shorter, verification has become a bottleneck in product development, typically taking 50-70% of the total product development time. Internal development of tools often saps resources from other areas of development. Commercial RTGs have recently become available and can be quickly ported to new architectures. These provide a basis of fully tested core functions upon which to build the architecture specific support.</p>
<h3>References</h3>
<p>[1] Glassner, C. “Random Test Generation for a RISC Processor Core” Verifyer, June 2001</p>
<p>[2] Aharon, A., D. Goodman, M. Levinger, Y. Lichtenstein, Y. Malka, C. Metzger, M. Molcho, G. Shurek “Test Program Generation for Functional Verificaton of PowerPC Procesors in IBM,” Proceedings of 32nd ACM/IEE Design Automation Conference, 1995</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=6dyeUIyClyI:rd1l3WMs_xU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/6dyeUIyClyI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/02/the-evolution-of-processor-test-generation-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/02/the-evolution-of-processor-test-generation-technology/</feedburner:origLink></item>
		<item>
		<title>Random Test Generation for Multi-Processor Systems</title>
		<link>http://feedproxy.google.com/~r/TheProcessorVerificationCompany/~3/qGbMMuJFrvA/</link>
		<comments>http://www.obsidiansoft.com/2009/02/random-test-generation-for-multi-processor-systems/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 21:55:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[RTL Verification]]></category>
		<category><![CDATA[cache verification]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[multi-processor verification]]></category>
		<category><![CDATA[random verification]]></category>

		<guid isPermaLink="false">http://www.obsidiansoft.com/?p=830</guid>
		<description><![CDATA[By Becky Cavanaugh and Melanie Typaldos PDF Version Abstract Multi-processor systems have presented a challenge to the development of random test generation tools. This challenge is inherent in the added complexity of interactions between multiple processors. Controlling these interactions while providing substantial random behavior can be accomplished through a variety of methods. In this paper [...]]]></description>
			<content:encoded><![CDATA[<p>By Becky Cavanaugh and Melanie Typaldos<br />
<a href="http://www.obsidiansoft.com/pdf/mp.pdf">PDF Version</a></p>
<h2>Abstract</h2>
<p>Multi-processor systems have presented a challenge to the development of random test generation tools. This challenge is inherent in the added complexity of interactions between multiple processors. Controlling these interactions while providing substantial random behavior can be accomplished through a variety of methods. In this paper we will discuss some of the issues and trade-offs in time, complexity and random behavior for different approaches to multi-processor random test generators. The paper will focus on Obsidian Software’s RAVEN tool and highlight design decisions made during the development of the multi-processor version of this tool.</p>
<h2>1. Memory Sharing Modes</h2>
<p>The basic difficulty in multi-processor random test generation and verification revolves around the issue of memory accesses. Multi-processing is traditionally divided into categories based on the types of sharing that are allowed. These divisions are also useful during verification since correct behavior at each stage in the verification process is prerequisite to correct behavior at the next more advanced stage. It is also clear that verification and debug of simpler sharing modes allows for faster isolation of potential processor design flaws.</p>
<h3>1.1 Non-sharing</h3>
<p>This is the simplest possible memory division for multiprocessor systems. In this mode, multiple processors exist in the same system, but memory is divided in such a way that no two processors access a memory address that is in the same block of memory. Blocks are typically defined in such a way that cache lines are isolated, preventing interactions between the caches of the various processors. This eliminates cache coherency issues from the verification problem space.</p>
<h3>1.2 False sharing</h3>
<p>At this level, multiple processors can access memory in the same memory block (or cache line) as another processor, but no two processors will access the exact same addresses. This allows for some checking of cache coherency but without the introduction of nondeterministic behavior or the need for semaphores. These tests can be run quickly and debugged easily.</p>
<h3>1.3 Deterministic True Sharing</h3>
<p>This mode is implemented through the use of semaphores. Memory accesses by multiple processors to the same address are allowed but are controlled such that processor state is deterministic at each semaphore boundary. The nature of the access, whether it is a read or write, is key to this mechanism. This level of multiprocessing allows for testing of most multiprocessor issues including cache coherency and is easier to detect and isolate failures than non-deterministic truesharing (true-sharing without semaphores). Crossmodifying code can be supported at this level of sharing.</p>
<h3>1.4 Non-deterministic True Sharing</h3>
<p>In this mode, processors read and write to identical memory locations in such a way that the values read from memory and propagated into the registers cannot be determined by simulation in a non-cycle accurate test bench. Even given such a test bench, stochastic variables may influence the behavior of the system so that results vary with each execution. This makes this level of verification much more difficult but the processors will be fully exercised. Nevertheless, non-deterministic behavior must be limited or controlled in some fashion otherwise the test becomes meaningless.</p>
<h3>1.5 Multiple Sharing Modes</h3>
<p>In general, processors in a multi-processor test do not need to be restricted to the same type of sharing. For example an eight processor system might contain one processor in non-sharing mode, three in false sharing mode, two in deterministic true sharing and two in nondeterministic true sharing. During generation of each processor, the sharing allowed for all other processors would need to be taken into consideration and accesses correctly restricted. For example, a deterministic truesharing processor would be allowed to hit in the same cache line with a false sharing processor but not at the same address – even though the current processor allows true sharing.</p>
<p>Allowing independent sharing modes complicates and slows test generation and does not add to either ease or completeness of testing.</p>
<h2>2. Processor Generation</h2>
<p>Two approaches can be taken to processor generation, either round-robin generation or sequential generation. In two processor round robin generation, for example, test generation starts with CPU1 which generates a single instruction then continues to CPU2 which also generates a single instruction. Generation would then return to CPU1 for its second instruction and so on.</p>
<p>In sequential generation, the entire instruction sequence for each processor is generated in turn. Each processor has knowledge only of previously generated processors. For example, in a four CPU test, CPU1 would have no knowledge of any other processors’ accesses during generation whereas CPU3 would have knowledge of CPU1 and CPU2 but not of CPU4.</p>
<p>These two approaches are approximately equivalent. In the round robin mode, the higher level of communication during generation results in increased overhead for all processors for all instructions, and becomes increasingly more severe as the number of instructions increases. In the sequential generation mode, the first CPU generates as easily as in a single CPU test. Each addition CPU encounters more restrictions on memory usage and this results in subsequent slowdown.</p>
<p>The sequential mode generation method has the potential to allow expansion of existing MP tests or the replacement of later CPUs with newly generated CPUs. For example, a two CPU test could be expanded to four CPUs without the need to regenerate CPUs 1 and 2. Or CPUs 3 and 4 in a four CPU test could be replaced with newly generated CPUs. This flexibility results from the fact that each CPU generation depends only on those processors generated earlier in the sequence and not on higher numbered CPUs.</p>
<p>The RAVEN test generator implements sequential mode generation. The decision to implement this was based largely on ease of programming. The current RAVEN implementation does not support the addition of or replacement of CPUs, although this could be added with simple changes to the user interface. This is facilitated by RAVEN’s use of a central multi-processor test configuration file (the .mp file) and individual processor test configuration files. The .mp file contains information about the expected number of processors, the names of the configuration files for each of the processors and the memory map, as discussed in the next section. Processor configuration files can be modified or substituted as long as they satisfy a few constraints, such as compatible sharing modes.</p>
<h2>3. Division of Memory</h2>
<p>In multi-processor test generation, the memory usage of each processor must be controlled in a way that meets the sharing requirements of the test. There are two possible approaches to this. In the first approach, all or most memory is assumed to be shared. In this paper this method will be referred to as <em>On-the-Fly Memory Division</em>. In the second approach, memory is divided into regions that are allocated to one or more processors. This method will be referred to as <em>Regional Memory Division</em>.</p>
<h3>3.1 On-the-Fly Memory Division</h3>
<p>On-the-fly memory division needs to address two main issues: 1) the need for large blocks of data to support some data structures and 2) the need to mark critical data as non-sharable. In all randomly generated tests there are some data blocks – such as system tables &#8211; that exist as large, contiguous, memory blocks. A processor may create such a data structure and yet not initialize all memory within the structure. An example of this would be a page table where not all entries in the table are accessed. Processors generated later in the sequence can potentially use these “holes” in memory for their own smaller data structures. This behavior is acceptable as long as it meets sharing constraints. However, the more memory accesses per processor and the more processors, the fewer large blocks of unaccessed memory will remain. This can result in significant slow-down of processors generated late in the sequence for sequential generation or for instructions generated late in the test for round-robin generation. Some data structures can be very large and the inability to find a free memory block may cause the test to fail to generate. Again, an example of this is a page table. When the table is created for the first page, it is not easy to predict or restrict the generation of accesses to memory in other pages in the same page table. If the generator is unable to find a large enough block of free memory to contain the entire table, it may either fail to generate or suffer the considerable overhead of checking each access to ensure that the page table entry can be written.</p>
<p>Data in page tables, interrupt tables, task state segments and other system tables cannot be allowed to become non-deterministic or the behavior of the processor – and the test – will become widely divergent depending on the exact sequence of accesses by the different processors to the critical memory region. This issue arises in nondeterministic true sharing tests. Because of this unpredictable behavior, there must be a method of marking memory blocks as reserved for a given processor.</p>
<p>Marking critical memory blocks as non-shared is not a difficult procedure. However, each memory write by any processor needs to check sharing status for all accessed memory. This results in additional overhead, slowing generation, and does not provide for interesting behavior.</p>
<h3>3.2 Regional Memory Division</h3>
<p>In regional memory division, memory must be allocated in a way that allows for the appropriate mode of sharing, allows processors to have private memory and prevents processors from randomly writing over each other’s code. This is the method implemented in RAVEN.</p>
<p>RAVEN handles these issues through an extension of its <em>memory map</em> construct. In a single processor test, RAVEN allows for the division of memory into named regions. These regions are collectively referred to as the memory map. Each memory region can be configured to support instructions, data or both, along with other relevant attributes such as caching constraints and paging attributes. Regions defined in the memory map direct the test’s memory usage.</p>
<p>This same construct has been expanded to support multiprocessor systems. In addition to the normal region attributes, MP memory maps also specify sharing characteristics. The only memory sharing characteristic currently maintained in the .mp file is the list of processors that can use each of the defined regions. A region can be defined for use by a single processor or by any subset of processors. For MP tests, the memory map is maintained in a file used by all processors rather than having a copy of the map in the configuration file for each processor. This prevents the use of conflicting memory maps.</p>
<p>The generator uses the defined memory regions when memory addresses are needed during random generation. Using user configurable biases, the generator first determines if a shared access is desired. If no sharing is selected for the current access, a memory region defined as non-shared is used. If sharing is selected, the generator queries the settings to select the processor to attempt to share memory with. A memory region is then chosen that is shared both by the current CPU and the “target” CPU.</p>
<p>Once the memory region for the access has been determined, the generator determines the type of sharing desired. In the current RAVEN implementation this is based solely on the configuration of the current CPU. To support different sharing modes in the different processors, the currently generating CPU would need to know the sharing configuration of the previously generated processors.</p>
<h2>4. Shared Memory Usage Information</h2>
<p>In order for a sequentially generated processor in a multiprocessor test to correctly and actively generate accesses to shared memory, knowledge of previous processors’ memory accesses must be forwarded to the currently generating processor. The exact nature of the information required is dependent on the type of sharing.</p>
<p>For non-sharing multi-processor tests, only memory regions designated as non-shared will be used by any processor. Since this memory cannot be used by another processor, no data concerning memory accesses needs to be passed forward.</p>
<p>For false sharing multi-processor tests, the exact addresses used by a processor must be passed forward to later-generated processors. The nature of these accesses, whether they are reads or writes, is not important in this case. Since no address used by the current processor will be used by another processor, data integrity is not an issue. The currently generating processor uses the passed forward list of addresses to attempt to generate accesses to similar addresses, resulting in hits to the same cache line.</p>
<p>In deterministic true sharing, a complex set of rules must be followed regarding memory accesses in order to ensure that non-deterministic data is not accessed. In these tests, each semaphore creates a “zone” separating instructions executed before the semaphore code is reached from those that are executed after the semaphore check is passed. Each memory access is then associated with the zone during which it occurred. Note that a zone is not a memory or time division but a division based on code execution. In addition, the access must be marked as a read, a write, a read followed by a write or a write followed by a read. This data must be passed forward to later generated processors so that only deterministic accesses will be made to shared memory. This is discussed in detail in a later section.</p>
<p>In non-deterministic true sharing, all reads from shared memory are assumed to be non-deterministic. The nature of the accesses of previous processors is therefore not used in the generation of future processors. For this case, all that needs to be passed forward are the addresses of the accesses.</p>
<p>At the end of each processor generation, RAVEN creates a memory access map. This map is a list of every address used during the test. If this processor is not the first one generated, the accesses for this processor are merged with those from previous processors into a single access map. The map is written at the end of the test output file. This implementation requires the generator to read the test output file for the most recently generated CPU before beginning generation of the current CPU. Communication of accessed addresses forward to later-generated processors could also be accomplished by having the generator store this information in some internal data structure. Although this method might be marginally faster, RAVEN did not choose this implementation for two reasons. Firstly, this would restrict the use of previously generated CPU tests as a starting point. Secondly, the data present in the memory map for each processor is useful for the verification engineer during debugging.</p>
<h2>5. Test Generation</h2>
<h3>5.1 Generation of Non-sharing Tests</h3>
<p>For regional memory division generators, non-sharing multi-processor tests, while useful during verification, do not present unique problems for the generator. The single constraint imposed on the generation of processors in these tests is that they do not use any memory region that is marked as shared.</p>
<p>For on-the-fly memory division generators, each memory access would need to check memory at adjacent addresses, depending on the cache line size, to determine if another processor has already made an access to this cache line. If no such access has been make, the generator can use the address. If another processor has accessed the same cache line, the address would be rejected.</p>
<h3>5.2 Generation of False Sharing Tests</h3>
<p>The goal of false sharing multi-processor tests is to cause multiple processors to access memory addresses near addresses accessed by another processor. This should result in the loading and flushing of cache lines and, depending on processor architecture, communication between the various processor caches.</p>
<p>For on-the-fly memory division, false sharing is much like non-sharing. The same type of memory check is required but only the exact addresses accessed by the current processor would be prohibited from having been accessed by previously generated processors.</p>
<p>In regional memory division generators, processors generated for false-sharing tests have relatively few restrictions. In RAVEN, a user configurable parameter is provided that determines the percentage of memory accesses that will hit in a shared region. When an access is selected as “shared”, the generator always attempts to hit near another processor’s access. Because of constraints in the register and memory contents and the nature of the instruction being generated, this may not always be possible.</p>
<p>Because RAVEN uses sequential processor generation, each processor can only attempt to hit addresses near a lower-numbered CPU. This is not a restriction however since processors generated later will attempt to hit near all CPUs with equal probability. For example, in a two CPU test, during CPU1 generation, the generator will not be able to find any shared locations that hit within the same cache line as another processor. However, CPU2 will attempt to cause cache line hits near CPU1 accesses. Since CPU2 has knowledge of all of CPU1’s accesses, some CPU2 accesses will occur both before and after accesses made by CPU1.</p>
<h3>5.3 Generation of Deterministic True Sharing Tests</h3>
<p>In deterministic true sharing, code execution is divided into sections called zones. Each zone begins at a semaphore, or at the beginning of the test, and ends at a semaphore, or at the end of the test. If there are n semaphores there are therefore n+1 zones. Each processor executes the instruction stream within a zone and then enters the semaphore code sequence. In the semaphore code, the processor decrements the semaphore count using an atomic instruction, checks the value of the semaphore count, and loops until the count reaches zero. Therefore all memory accesses made in a zone by all processors are guaranteed to have taken place before the first instruction in the next zone is executed.</p>
<p>Deterministic true sharing can be implemented using either the sequential generation or round robin generation methods. Certain rules need to be applied to the memory accesses to prevent non-deterministic behavior. These rules differ slightly between the two methods of generation.</p>
<h4>5.3.1 Sequential generation</h4>
<p>The memory access rules that apply to overlapping shared memory accesses for sequential generation are as follows:</p>
<ol>
<li>1.  A processor may read an address if:
<ul>
<li>No previously generated processor has written to this address OR</li>
</ul>
<ul>
<li>In the last zone where this address was written, only a single processor performed a write OR</li>
<li>The current processor has written to this address in this zone and no other processor has performed a write to this address in this zone</li>
</ul>
</li>
<li>A processor may write an address if:
<ul>
<li>No previously generated processor performs a read to this address in this zone AND</li>
<li>No previously generated processor performs a read to this address in a following zone unless there is an intervening write from a previously generated processorThese rules ensure that non-deterministic data is not read by any processor. Because the processors are generated sequentially, the data read by early processors must not be modified by later-generated processors.
<p>These early processors were generated without knowledge of potential writes by later processors. It is possible to modify these rules to gain some greater flexibility. For example, a new rule could be inserted before the previously stated rule 2 as follows.</li>
</ul>
</li>
<li>A processor may write an address if:
<ul>
<li>The data to be written is identical to the current data in memoryWhile this might appear to provide added randomness to the test, it does not enhance the verification processes. If the only data that can be written is the data that is already there, it is unlikely that a behavioral error can be detected.</li>
</ul>
</li>
</ol>
<h4>5.3.2 Round-robin generation</h4>
<p>The rules for round-robin generation are similar to those for sequential generation, however some restrictions are relaxed. The rules for round-robin generation are shown below.</p>
<ol>
<li>A processor may read an address if:
<ul>
<li>No other processor has written to this address in this zone AND</li>
<li> In the last zone where this address was written, only a single processor performed a write OR</li>
<li>The current processor has written to this address in this zone and no other processor has performed a write to this address in this zone</li>
</ul>
</li>
<li>A processor may write an address if:
<ul>
<li>No other processor performs a read to this address in this zoneThese rules demonstrate the strength of round-robin generation over sequential generation. The relaxed rules allow a round-robin generated test to contain more shared accesses than a similar sequentially generated test.</li>
</ul>
</li>
</ol>
<h3>5.4 Generation of Non-deterministic True Sharing Tests</h3>
<p>In non-deterministic true sharing, there is no knowledge about the order of execution of instructions in different processors. Deterministic true sharing provides this information through the use of semaphores. After each semaphore, the generator is guaranteed that all instructions in previous zones for all processors have been executed; this includes all memory reads and writes. Removing the semaphores removes this information. Any processor that reads a data address written by another processor cannot determine if the read is done before or after the write.</p>
<p>When non-deterministic data is read into a register, the register must be marked as non-deterministic. This means that future instructions that use this register as a source will have unpredictable behavior. Non-deterministic behavior may also be propagated into the processor’s status or flags registers, depending on the nature of the instruction that uses the non-deterministic data. The generator may mark the entire flags register as nondeterministic or may mark individual bits as nondeterministic. Marking the entire register requires that the generator have knowledge of which instructions modify any flag bits. Marking the individual bits requires the generator to have knowledge of all flag bits that are potentially modified by every instruction. Since most instructions that operate off flags do so using a limited set of flag bits, tracking the individual bits results in greater flexibility in instruction choice.</p>
<h4>5.4.1 Determining non-determinism</h4>
<p>For regional memory division, all reads from shared memory regions are assumed to be non-deterministic. Whether using sequential or round-robin generation, it is not possible to tell at the time an instruction is generated whether another processor will write to a particular memory address. In the round-robin case, even though the processor tests are generated using a stepping process, it cannot be assumed that execution of the processors in a cycle-accurate simulator or in hardware will exhibit this same lock-step behavior.</p>
<p>On-the-fly memory division generation always assumes that all non-reserved memory accesses are shared. In nondeterministic true sharing, all of these accesses must be assumed to be non-deterministic.</p>
<p>In sequential generation, only the last processor to generate could know whether there are writes by other processors to a given address because only this processor has full knowledge of the memory usage of all of the other processors. This information could be used to limit the marking of memory or registers as non-deterministic. There are three reasons why this is probably not worthwhile. Firstly, any generation modification would apply to only one processor. Secondly, this would prevent the expansion of the MP test to a larger number of processors while using the previously generated processor tests. Thirdly, the generator is attempting to share as much as possible resulting in few non-shared accesses.</p>
<h4>5.4.2 Restrictions on non-deterministic registers</h4>
<p>Registers marked as containing non-deterministic data can propagate non-determinism through the processor. For example, an ADD instruction with one deterministic register operand and one non-deterministic register operand can result in the propagation of non-deterministic source data to the destination register or memory location. This same instruction can also cause certain processor flags, such as those indicating equality, negative values or zeros, to become non-deterministic. In order to allow reasonable processor execution and random behavior, such propagation must be allowed.</p>
<p>Restrictions apply to the use of registers containing nondeterministic data under two circumstances: 1) where the non-deterministic nature of the data may affect the instruction stream and 2) where the non-deterministic data would be used in the generation of a data address.</p>
<p>Case (1) can result from exceptions, which may be allowed to a limited extent. It may be that not all exception handlers return to the excepting instruction. Where the exception handler does return to the excepting instruction, the potential for an exception may be allowed, providing that execution of the exception handler does not result in unacceptable non-deterministic behavior. In the case where the exception does not return to the excepting instruction there are two cases. If the processor has a fixed instruction length, such exceptions may be allowed. If the processor has a variable instruction length it is frequently impossible, or requires an unacceptably large handler, to determine the length of the excepting instruction. In this case, the exception handler normally jumps to a known safe location – a location known to be past the end of the longest instruction that could have caused the exception. This potentially results in a gap in the addresses of instructions in the main code stream. However, if the exception is not taken, the next instruction will fall immediately after the current instruction with no gap. This means that the two potential code execution paths can result in the processor executing at an address that is not aligned with the initial generated code.</p>
<p>Case (1) may also result from conditional jumps based either on non-deterministic flag values or on the values of non-deterministic registers. These instructions can be restricted to execute only when the flags or data are deterministic. Alternatively, a non-conditional jump to the same address as the conditional jump could be inserted directly after a non-deterministic conditional jump. This would result in the possible execution of one extra instruction before both potential streams converged. However allowing an exception on the conditional branch or the non-conditional branch instruction would result in a much more complex problem space and should be avoided.</p>
<p>Case (2) allows for the use of non-deterministic values for the generation of data addresses. This means that the address to read or write will not be known. This may be acceptable if all potential addresses are acceptable. This would mean that the address is not being used for a system function – for example a system table fetch or write – and that no potential address falls within a reserved, non-shared region.</p>
<p>Although all of this support is theoretically possible, RAVEN does not support any of the exotic cases presented as case (1) and case (2) above. Supporting these conditions would result in a greatly complicated generator and much slower generation. Instead, RAVEN inhibits the use of non-deterministic registers in address generation, prohibits the use of non-deterministic flags for conditional jumps and disallows instructions that may potentially cause exceptions based on non-deterministic data. Although this limits some of the random behavior of the test, the faster generation time and ease of code maintenance are seen as offsetting benefits.</p>
<h4>5.4.3 Restoring deterministic values</h4>
<p>Using some algorithm, the generator must restore registers to a deterministic state. This can be done periodically – every n instructions – or based on the current processor condition – how many registers contain non-deterministic data or which registers contain nondeterministic data. In RAVEN restoration of deterministic values is based on user configurable settings that govern the percentage of registers of different classes that are allowed to contain non-deterministic data. As each class of registers passes the allowed ratio of nondeterministic to deterministic registers, a macro is executed that loads the registers using immediate values, if possible, or reserved non-shared memory locations.</p>
<p>Since all memory within shared regions is assumed to be non-deterministic at all times, memory is not restored to deterministic values.</p>
<h2>6. Conclusions</h2>
<p>Although this paper has covered many issues concerning random test generation of multi-processor systems, there are many areas that remain uncovered. The approach taken by RAVEN is a single example of a successful system. There are many other possible approaches, each with it’s own strengths and weaknesses. Some of these may be more appropriate to one processor or system than the RAVEN approach. However RAVEN strikes a good compromise between performance, random behavior and flexibility.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?a=qGbMMuJFrvA:JTp-C7xay3c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheProcessorVerificationCompany?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheProcessorVerificationCompany/~4/qGbMMuJFrvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/02/random-test-generation-for-multi-processor-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.obsidiansoft.com/2009/02/random-test-generation-for-multi-processor-systems/</feedburner:origLink></item>
	</channel>
</rss>
