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

<channel>
	<title>The Processor Verification Company</title>
	<atom:link href="http://www.obsidiansoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.obsidiansoft.com</link>
	<description>Obsidian Software</description>
	<lastBuildDate>Fri, 05 Mar 2010 19:24:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Is There Hope for the US Fab Industry?</title>
		<link>http://www.obsidiansoft.com/2010/03/is-there-hope-for-the-us-fab-industry/</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 Blog]]></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 <a href="http://www.edn.com/article/CA6720662.html">manufacturing deal</a> 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>
]]></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>
		</item>
		<item>
		<title>Multicore Verification of an ARM Processor</title>
		<link>http://www.obsidiansoft.com/2009/11/multi-processor-verification-of-an-arm-processor-core/</link>
		<comments>http://www.obsidiansoft.com/2009/11/multi-processor-verification-of-an-arm-processor-core/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 22:25:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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>
]]></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>
		</item>
		<item>
		<title>Verification Planning for ARM Architectures</title>
		<link>http://www.obsidiansoft.com/2009/10/beginning-verification-of-an-arm-processor-design/</link>
		<comments>http://www.obsidiansoft.com/2009/10/beginning-verification-of-an-arm-processor-design/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 20:50:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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[RTL 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 used [...]]]></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>
]]></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>
		</item>
		<item>
		<title>Using RAVEN to Generate Self-Checking Tests in Silicon Validation</title>
		<link>http://www.obsidiansoft.com/2009/10/using-raven-to-generate-self-checking-tests-in-silicon-validation/</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 17:54:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></category>
		<category><![CDATA[CPU verification]]></category>
		<category><![CDATA[directed testing]]></category>
		<category><![CDATA[random test generators]]></category>
		<category><![CDATA[random verification]]></category>
		<category><![CDATA[RTL verification]]></category>
		<category><![CDATA[silicon debugging]]></category>
		<category><![CDATA[silicon validation]]></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 RAVEN undirected, which [...]]]></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>
]]></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>
		</item>
		<item>
		<title>Uncovering Processor Design Errors Spanning Page Boundaries</title>
		<link>http://www.obsidiansoft.com/2009/09/uncovering-processor-design-errors-spanning-page-boundaries/</link>
		<comments>http://www.obsidiansoft.com/2009/09/uncovering-processor-design-errors-spanning-page-boundaries/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 20:23:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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 difficult [...]]]></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>
]]></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>
		</item>
		<item>
		<title>State of the Industry Panel Discussion</title>
		<link>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/</link>
		<comments>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 20:30:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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

Ty Garibay is [...]]]></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/index.php/component/option,com_eventlist/Itemid,103/id,63/view,details/" 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>
]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/state-of-the-industry-panel-discussion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microprocessor Test and Verification Conference</title>
		<link>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/</link>
		<comments>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 22:12:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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 innovative solutions. MTV has [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/microprocessor-test-and-verification-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obsidian Solution Value</title>
		<link>http://www.obsidiansoft.com/2009/06/roi-proposition/</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>
				<category><![CDATA[Microprocessor Verification Blog]]></category>

		<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 manufacturing respins due [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/06/roi-proposition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Knowing When Verification is Complete</title>
		<link>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/</link>
		<comments>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:56:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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>
]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/03/knowing-when-verification-is-complete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bailey on Verification at the Club</title>
		<link>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/</link>
		<comments>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 19:07:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microprocessor Verification Blog]]></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 now has branches in [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://www.obsidiansoft.com/2009/03/bailey-on-verification-at-the-club/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
