<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Adventures in ASIC Digital Design</title>
	<atom:link href="http://asicdigitaldesign.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://asicdigitaldesign.wordpress.com</link>
	<description>Tricks and Tips for ASIC Digital Designers</description>
	<pubDate>Wed, 14 May 2008 13:09:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
			<item>
		<title>Ring Buffers</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/05/14/ring-buffers/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/05/14/ring-buffers/#comments</comments>
		<pubDate>Wed, 14 May 2008 12:51:41 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Ring Buffers]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=246</guid>
		<description><![CDATA[On the last technical post I discussed the problem of transferring information serially between two different clock domains with similar frequency but with drifting phase.
This post will try to explain how this issue is being solved.
When approaching this problem, we have to remember that the phase might drift over time and we have to quantify [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>On the last technical post I discussed the problem of transferring information serially between two different clock domains with similar frequency but with drifting phase.<br />
This post will try to explain how this issue is being solved.</p>
<p>When approaching this problem, we have to remember that the phase might drift over time and we have to quantify this drift before the design starts. Modeling the channel beforehand is very helpful here.<br />
Once we know the needed margin, we can approach the design of the ring buffer.</p>
<p>The ring buffer is a FIFO with both ends &#8220;tied together&#8221; as depicted below. Pointers designate the read and write position and are moved with each respected clock signal in the direction of the arrow (in the figure below  - clockwise). Remember, the read and write pointers move at different times but the overall rate of change of both is similar. This means that in some moment one can move ahead of the other, and in another it can lag behind, but over time the the amount of clock edges is the same.</p>
<p align="center"><a href="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_01.png"><img src="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_01.png?w=171&h=153" alt="" width="171" height="153" class="alignnone size-full wp-image-247" /></a></p>
<p>The tolerance of the ring buffer is represented below with the dashed arrows. The read and write clocks can drift in time up to a point just before they meet and cross each other.</p>
<p align="center"><a href="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_02.png"><img src="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_02.png?w=165&h=159" alt="" width="165" height="159" class="alignnone size-full wp-image-248" /></a></p>
<p>The series of images below depicts how the read and write pointers move with time and how the buffer is filled with new information (green) and how it is read (red). Notice how the first two reads will generate garbage because it reads out information that was not written into the buffer.</p>
<p align="center"><a href="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_031.png"><img src="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_031.png?w=450&h=122" alt="" width="450" height="122" class="alignnone size-full wp-image-250" /></a></p>
<p>One of the most complicated issues is the start-up of the ring buffer, because both clock domains are unrelated. A certain &#8220;start&#8221; signal has to be generated and &#8220;tell&#8221; both pointers to start to advance. If this is not done carefully enough, one pointer will start to advance ahead of time and thus &#8220;bite away&#8221; some of the margin we designed for. This problem is even more complicated, when a lot of channels with different ring buffers are operated in parallel. </p>
<p>In one of the next posts we will explore a simple technique that enables us to determine if the ring buffer failed and the information read is actually one which is not updated. </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/246/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/246/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=246&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/05/14/ring-buffers/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_01.png" medium="image" />

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_02.png" medium="image" />

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/05/ring_buffers_031.png" medium="image" />
	</item>
		<item>
		<title>Long Break&#8230;</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/05/10/long-break/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/05/10/long-break/#comments</comments>
		<pubDate>Sat, 10 May 2008 06:45:08 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=245</guid>
		<description><![CDATA[Due to a long and severe sickness I was unable to update the blog for such a long time.
I promise to catch up soon, with more interesting posts - hold on&#8230;
       ]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Due to a long and severe sickness I was unable to update the blog for such a long time.<br />
I promise to catch up soon, with more interesting posts - hold on&#8230;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/245/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/245/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=245&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/05/10/long-break/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>
	</item>
		<item>
		<title>Clock Domain Crossing - An Important Problem</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/04/21/clock-domain-crossing-an-important-problem/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/04/21/clock-domain-crossing-an-important-problem/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 12:32:19 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Clock Domain Crossing]]></category>

		<category><![CDATA[Synchronization]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=240</guid>
		<description><![CDATA[Sometimes, when crossing clock domains, synchronizers are just not enough.
Imagine sending data serially over a single line and receiving it on the other side from the output of a common synchronizer as shown bellow.
 
Assuming one clock cycle is enough to recover from metastability under the given operating conditions, what seems to be the main [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sometimes, when crossing clock domains, synchronizers are just not enough.</p>
<p>Imagine sending data serially over a single line and receiving it on the other side from the output of a common synchronizer as shown bellow.</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync1.png'><img src="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync1.png?w=292&h=96" alt="" width="292" height="96" class="aligncenter size-full wp-image-242" /></a></p>
<p>Assuming one clock cycle is enough to recover from metastability under the given operating conditions, what seems to be the main problem is not the integrity of the signal - i.e. making sure it is not propagating metastability through the rest of the circuit - but rather the correctness of the data.</p>
<p>Let&#8217;s observe the waveform below. The red vertical lines represent the sampling point of the incoming signal. We see from the waveform that since sometimes we sample during a transition - in effect violating the setup-hold window - the output of the first sampling flop (marked &#8220;<strong>x</strong>&#8220;) goes metastable. This metastability does not propagate further into the circuit, it is effectively blocked by the second flop, but since the result of recovery from metastability is not certain (see <a href="http://asicdigitaldesign.wordpress.com/2007/05/28/synchronization-uncertainty-and-latency/">previous post</a>) the outcome might be a corrupt data.<br />
In this specific example we see that net <strong>x</strong> goes metastable after sampling the 3rd bit but recovers correctly. In a later sampling, for the 6th bit we see that the recovered outcome is not correct and as a result the output data is wrong.</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync3.png'><img src="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync3.png?w=300&h=134" alt="" width="300" height="134" class="alignnone size-medium wp-image-244" /></a></p>
<p>Another interesting case is when both the send clock and the receive clock are frequency locked but their phase might drift in time or the clock signals might experience occasional jitter.<br />
In that case, a bit might &#8220;stretch&#8221; or &#8220;shrink&#8221; and can be accidentally sampled twice or not sampled at all.<br />
The waveform below demonstrates the problem. Notice how bit 2, was stretched and sampled twice.</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync2.png'><img src="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync2.png?w=300&h=133" alt="" width="300" height="133" class="alignnone size-medium wp-image-243" /></a></p>
<p>To sum up, never use a simple synchronizer structure to transfer information serially between clock domains, even if they are frequency locked. You might be in more trouble than you initially thought.</p>
<p>On the next post we will discuss how to solve this problem with ring buffers (sometimes mistakenly called FIFOs).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/240/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/240/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=240&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/04/21/clock-domain-crossing-an-important-problem/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync1.png?w=292" medium="image" />

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync3.png?w=300" medium="image" />

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/04/failed_sync2.png?w=300" medium="image" />
	</item>
		<item>
		<title>Another FSM Design Tool</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/04/17/another-fsm-design-tool/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/04/17/another-fsm-design-tool/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 13:12:24 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[CAD]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=241</guid>
		<description><![CDATA[For those who don&#8217;t read through the comments. Harry the ASIC guy commented on the last post about an FSM design environment from Paul Zimmer. You can find more details here.
       ]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>For those who don&#8217;t read through the comments. <a href="http://theasicguy.com/">Harry the ASIC guy</a> commented on the last post about an FSM design environment from <a href="http://zimmerdesignservices.com/index.php?section=1">Paul Zimmer</a>. You can find more details <a href="http://www.fizzim.com/">here</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/241/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/241/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=241&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/04/17/another-fsm-design-tool/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>
	</item>
		<item>
		<title>Visual FSM Design Tool</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/04/09/visual-fsm-design-tool/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/04/09/visual-fsm-design-tool/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 10:12:29 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[CAD]]></category>

		<category><![CDATA[FSM]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=238</guid>
		<description><![CDATA[I am still not convinced visual FSM design tools make such a big difference but this one looks pretty cool.
I haven&#8217;t really went through all the features and details, so if anyone has some more details/recommendations/complaints about it, just email me or simply comment on this post.
       ]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I am still not convinced visual FSM design tools make such a big difference but <a href="http://qfsm.sourceforge.net/">this one</a> looks pretty cool.<br />
I haven&#8217;t really went through all the features and details, so if anyone has some more details/recommendations/complaints about it, just email me or simply comment on this post.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/238/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/238/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=238&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/04/09/visual-fsm-design-tool/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>
	</item>
		<item>
		<title>The Principle Behind Multi-Vdd Designs</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/04/02/the-principle-behind-multi-vdd-designs/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/04/02/the-principle-behind-multi-vdd-designs/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 12:44:04 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Low Power]]></category>

		<category><![CDATA[CAD]]></category>

		<category><![CDATA[Emerging Methodologies]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=235</guid>
		<description><![CDATA[Multi-Vdd design is a sort of buzz word lately. There are still many issues involved before it could become a real accepted and supported design methodology, but I wanted to write a few words on the principle behind the multi-Vdd approach.
The basic idea is that by lowering the operating voltage of a logic gate we [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Multi-Vdd design is a sort of buzz word lately. There are still many issues involved before it could become a real accepted and supported design methodology, but I wanted to write a few words on the principle behind the multi-Vdd approach.</p>
<p>The basic idea is that by lowering the operating voltage of a logic gate we naturally also cut the power dissipation through the gate.<br />
The price we pay is that gates operated by lower voltage are somewhat slower (exact factor is dependent on many factors).</p>
<p>The basic idea is to identify the non-critical paths and to power the gates in those paths with a lower voltage. Seen below are two paths, there is obviously less logic through the blue path than through the orange one and is therefore a candidate for being supplied with lower Vdd. </p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/04/multivdd.png' title='multivdd.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/04/multivdd.png' alt='multivdd.png' /></a></p>
<p>The idea looks elegant but as always the devil is in the details. There are routing overheads for the different power grids, level shifters must be introduced when two different Vdd logic paths converge to create a new logical function, new power source for the new Vdd must be designed and most important of all, there has to be<em> support present by the CAD tools</em> - if that doesn&#8217;t exist this technique will be buried.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/235/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/235/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/235/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=235&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/04/02/the-principle-behind-multi-vdd-designs/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/04/multivdd.png" medium="image">
			<media:title type="html">multivdd.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Puzzle #9 - The Snail - Solution</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/03/27/puzzle-9-the-snail-solution/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/03/27/puzzle-9-the-snail-solution/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 11:54:11 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Interview Questions]]></category>

		<category><![CDATA[Puzzles]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=234</guid>
		<description><![CDATA[I will keep this post short. First make sure you take a look at the original puzzle - link here. 
The shortest sequence is 6 bits long and is &#8220;100110&#8243; (or its inverse &#8220;011001&#8243;). The smallest amount of bits needed to determine a direction is 5, i.e. any 5 consecutive bits seen by the snail [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I will keep this post short. First make sure you take a look at the original puzzle - <a href="http://asicdigitaldesign.wordpress.com/2007/09/10/puzzle-9-the-snail/">link here</a>. </p>
<p>The shortest sequence is 6 bits long and is &#8220;100110&#8243; (or its inverse &#8220;011001&#8243;). The smallest amount of bits needed to determine a direction is 5, i.e. any 5 consecutive bits seen by the snail could help him determine the direction home.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/234/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/234/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=234&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/03/27/puzzle-9-the-snail-solution/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>
	</item>
		<item>
		<title>Puzzle #8 - Clock Frequency Driver - Solution</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/03/26/puzzle-8-clock-frequency-driver-solution/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/03/26/puzzle-8-clock-frequency-driver-solution/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 16:27:00 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Puzzles]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=233</guid>
		<description><![CDATA[It&#8217;s been a while since I posted some puzzles or solutions to puzzles. I noticed that I concentrated lately more on tricky circuits and fancy ideas but neglected the puzzle section. Some readers asked me to post some more puzzles. Before I can do that, I have to first clear the list of all unsolved [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It&#8217;s been a while since I posted some puzzles or solutions to puzzles. I noticed that I concentrated lately more on tricky circuits and fancy ideas but neglected the puzzle section. Some readers asked me to post some more puzzles. Before I can do that, I have to first clear the list of all unsolved puzzles.</p>
<p><a href="http://asicdigitaldesign.wordpress.com/2007/08/13/puzzle-8-clock-frequency-driver/">The clock frequency driver puzzle </a>drew little attention compared to the others and I got only one complete and correct solution for it.<br />
What follows is my own solution which I hope will be easily understood.</p>
<p>The requirement was to have a NAND gate as the last output stage with one input driven by a rising edge triggered memory element and the other by a falling edge triggered memory element.<br />
A look at the NAND gate truth table reveals that somehow the inputs have to toggle between &#8220;11&#8243; (to generate a logical &#8220;0&#8243;) and &#8220;10&#8243;, &#8220;00&#8243; or &#8220;01&#8243; (to generate the logical &#8220;1&#8243;) <strong>on each and every clock edge! </strong></p>
<p>I will now describe the solution for a certain case while the value in brackets will represent the analogous opposite case.<br />
This in tern means (and without loss of generality) that with each rising[falling] clock edge the output state of both flops should be &#8220;11&#8243;. On the falling[rising] edge we should have the states &#8220;00&#8243;, &#8220;01&#8243; or &#8220;10&#8243;. </p>
<p>The state &#8220;00&#8243; can be immediately eliminated because the transition &#8220;00&#8243; &#8211;&gt; &#8220;11&#8243; means we have to have both bits change on the rising[falling] edge together.<br />
we are left with the following possible cases for the transitions (&#8221;r&#8221; marks a rising edge transition, &#8220;f&#8221; a falling edge transition):</p>
<ol>
<li> &#8220;10&#8243; r&#8211;&gt; &#8220;11&#8243; f&#8211;&gt; &#8220;10&#8243; </li>
<li> &#8220;10&#8243; r&#8211;&gt; &#8220;11&#8243; f&#8211;&gt; &#8220;01&#8243; </li>
</ol>
<p>Looking at the first option reveals that the rightmost bit needs to change on the rising edge from &#8220;0&#8243; to &#8220;1&#8243; and on the falling edge from &#8220;1&#8243; to &#8220;0&#8243; - this is not possible or in contradiction to the rules.<br />
The second option looks promising - the rightmost bit changes from &#8220;0&#8243; to &#8220;1&#8243; on the rising edge, the left most from &#8220;1&#8243; to &#8220;0&#8243; on the falling edge - so far so good&#8230; but, let us continue the pattern:</p>
<p>&#8220;10&#8243; r&#8211;&gt; &#8220;11&#8243; f&#8211;&gt; &#8220;01&#8243; r&#8211;&gt; &#8220;11&#8243; </p>
<p>Each second state <strong>has</strong> to be &#8220;11&#8243;. After continuing the sequence for one more step we see that now the rightmost bit changes from &#8220;0&#8243; to &#8220;1&#8243; on the <strong>rising</strong> edge, but the immediate previous transition had it change on the <strong>falling</strong> edge, therefore we get again a contradiction!</p>
<p>We conclude that having a NAND on the output is impossible.</p>
<p>As mentioned before <em>Mark Wachsler</em> sent his own solution long time ago. Here it is in is own words:</p>
<blockquote><p>
I&#8217;m assuming the question is, is it possible to do something like this:</p>
<p>always @ (posedge clock) p &lt;= something;<br />
always @ (negedge clock) n &lt;= something else;<br />
assign out = ~ (p &amp; n);</p>
<p>and have out toggle on every transition of the clock?</p>
<p>If so, the answer is no.</p>
<p>Proof by contradiction:<br />
1. Assume it can be done: out toggles on every transition of the clock.<br />
2. We know p and n never change simultaneously, so for out to toggle,<br />
either p or n must be 1.<br />
3. So it may never be the case that p == 0 and n == 0.<br />
3. Since they can&#8217;t both be zero, and they never change<br />
simultaneously, at least one of them must always be 1.<br />
4. But if n is always one, out can&#8217;t have a transition on negedge.<br />
And if p is always one, out can&#8217;t have a transition on posedge.<br />
5. Therefore there are some clock edges on which out doesn&#8217;t toggle.</p>
<p>So it can&#8217;t be done.
</p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/233/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/233/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=233&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/03/26/puzzle-8-clock-frequency-driver-solution/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>
	</item>
		<item>
		<title>Cyclic Combinational Circuits</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/03/07/cyclic-combinational-circuits/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/03/07/cyclic-combinational-circuits/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 09:46:49 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Cool Circuits]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=232</guid>
		<description><![CDATA[As one of my strange hobbies, I sometimes try to search the web for interesting PHD thesis works. I came across this one a while back and thought it would be interesting to share.
We always hear how bad combinational cyclic loops are. Design Compiler even generates a reports to help us detect them. In the [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As one of my strange hobbies, I sometimes try to search the web for interesting PHD thesis works. I came across <a href="http://www.paradise.caltech.edu/papers/thesis008.pdf">this one</a> a while back and thought it would be interesting to share.</p>
<p>We always hear how bad combinational cyclic loops are. Design Compiler even generates a reports to help us detect them. In the normal ASIC flow combinational loops are very dangerous, hard to analyze and characterize for timing. But here comes this Dissertation work by <a href="http://paradise.caltech.edu/~riedel/">Marc Riedel</a> and highlights a special set of cyclic combinational circuits which offer several important advantages.</p>
<p>I will try to explain the basic principle by going through an example, but make sure to read his <a href="http://www.paradise.caltech.edu/papers/thesis008.pdf">PHD thesis</a>, it is well written and easily understood.</p>
<p>As an example we will look at the very simple case depicted below:</p>
<p align="center"><a href='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational1.png' title='cyclic_combinational1.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational1.png' alt='cyclic_combinational1.png' /></a></p>
<p>Notice that it has 5 inputs: X, Y0, Y1, Y2, Y3 and has 6 outputs f0..f5. Notice also the symmetry or duality between the AND/OR gates which have the X input connected into them. The basic principle being, that if X = &#8220;0&#8243; the cycle will be broken at the top AND gate and if X = &#8220;1&#8243;, the cycle would be broken in the middle OR gate. This in turn will &#8220;create&#8221; two &#8220;different&#8221; circuits depending on the value of X. In essence we have physically a combinational loop BUT we guarantee that whatever value X has, this loop will be <strong>logically</strong> broken! </p>
<p>Both cases are shown below.</p>
<p align="center"><a href='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational2.png' title='cyclic_combinational2.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational2.png' alt='cyclic_combinational2.png' /></a></p>
<p align="center"><a href='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational3.png' title='cyclic_combinational3.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational3.png' alt='cyclic_combinational3.png' /></a></p>
<p>If we factor in X into the equations we get the following dependencies for all the outputs on all the inputs.</p>
<p align="center"><a href='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational4.png' title='cyclic_combinational4.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational4.png' alt='cyclic_combinational4.png' /></a></p>
<p>The above example is one of the simplest of all and was just presented to show the principle. In this specific circuit you could also short Y0 and Y2, Y1 and Y3 and get a 3 input circuit where each of the inputs has the same behavior as X in the example (shown in page 12 in the PDF file of the thesis). </p>
<p>The thesis goes on to show how such circuits can be used with different advantages. The thesis is bears the date May 2004 - I hope that significant advances have been made in this area in the last 4 years. This idea is too beautiful to just let it accumulate dust or being discarded by the CAD industry&#8230;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/232/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/232/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=232&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/03/07/cyclic-combinational-circuits/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational1.png" medium="image">
			<media:title type="html">cyclic_combinational1.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational2.png" medium="image">
			<media:title type="html">cyclic_combinational2.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational3.png" medium="image">
			<media:title type="html">cyclic_combinational3.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/03/cyclic_combinational4.png" medium="image">
			<media:title type="html">cyclic_combinational4.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Johnson Counter Recovery Circuits</title>
		<link>http://asicdigitaldesign.wordpress.com/2008/02/25/johnson-counter-recovery-circuits/</link>
		<comments>http://asicdigitaldesign.wordpress.com/2008/02/25/johnson-counter-recovery-circuits/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 16:53:26 +0000</pubDate>
		<dc:creator>Nir Dahan</dc:creator>
		
		<category><![CDATA[Cool Circuits]]></category>

		<guid isPermaLink="false">http://asicdigitaldesign.wordpress.com/?p=221</guid>
		<description><![CDATA[In a previous post I discussed the Johnson counter (diagram below). It was mentioned that if a bit accidentally flips in the wrong place in the counter (due to wrong reset behavior, noise, etc.) it will rotate through the counter indefinitely. 

In a robust Johnson counter there is a mechanism for self-correction of these errors. [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In a <a href="http://asicdigitaldesign.wordpress.com/2007/08/20/the-johnson-counter/">previous post</a> I discussed the Johnson counter (diagram below). It was mentioned that if a bit accidentally flips in the wrong place in the counter (due to wrong reset behavior, noise, etc.) it will rotate through the counter indefinitely. </p>
<p align="center"><a href='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_1.png' title='johnson_recovery_1.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_1.png' alt='johnson_recovery_1.png' /></a></p>
<p>In a robust Johnson counter there is a mechanism for self-correction of these errors. This post discussed in detail how to resolve such single bit errors with minimum hardware overhead. </p>
<p>Let&#8217;s assume that for some odd reason <em>within</em> a run of &#8220;1&#8243;s or &#8220;0&#8243;s a single bit had flipped.  If we now take a snapshot of 3 consecutive bits in the counter as the bits are rotating, we will eventually discover two <strong>forbidden</strong> states:  &#8220;010&#8243; and &#8220;101&#8243;. All the other six possible states for 3 consecutive bits are legal - as seen in the table below:</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_2.png' title='johnson_recovery_2.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_2.png' alt='johnson_recovery_2.png' /></a> </p>
<p>The basic idea, is to try to identify those rogue states and fix them by flipping the middle, erroneous bit and pushing the result to the next state. Naturally, we have to make sure that we keep the normal behavior of the circuit as well.<br />
We will examine two solutions (a) and (b). One more efficient (hardware wise) than the other.</p>
<p>Let&#8217;s start with approach (a). With this approach we try to correct <strong>both</strong> forbidden state. The table bellow shows a snapshot of 3 consecutive bits in the &#8220;state&#8221; column. One is marked in red the other in orange. The column &#8220;next(a)&#8221; contains the value to be shifted into the 3rd bit - e.g. if &#8220;011&#8243; is encountered then the middle &#8220;1&#8243; will be pushed unchanged to the bit to its right, however if the state &#8220;010&#8243; will be detected, the middle &#8220;1&#8243; will be flipped to a &#8220;0&#8243; and pushed into the right thus correcting a forbidden state.</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_3.png' title='johnson_recovery_3.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_3.png' alt='johnson_recovery_3.png' /></a> </p>
<p>The second approach (b) corrects only<em> the single</em> forbidden state &#8220;010&#8243;. Then how come this solves the problem? Approach (b) relies on the fact that state &#8220;010&#8243; is the inverse state of &#8220;101&#8243;. It is enough to correct state &#8220;010&#8243; since state &#8220;101&#8243; will reach the end of the counter, then will be flipped bit by bit and will eventually appear as &#8220;010&#8243; in the next cycle through the counter!</p>
<p>The next diagram shows the different hardware implementation for both solutions. While I can be blamed of being petty, solution (b) is definitely cheaper. </p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_4.png' title='johnson_recovery_4.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_4.png' alt='johnson_recovery_4.png' /></a> </p>
<p>The final, self-correcting 4-bit Johnson counter is shown below.</p>
<p align="center"> <a href='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_5.png' title='johnson_recovery_5.png'><img src='http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_5.png' alt='johnson_recovery_5.png' /></a></p>
<p>It is important to note that this circuit recovers from a single bit error. If we had a 7-bit Johnson counter and 2 adjacent bits would flip in a middle of a run (unlikely but still possible), we would not detect it with the above circuit. For correcting 2 adjacent flips a wider &#8220;snapshot&#8221; of 4-bits is needed, and the circuit will naturally become more complex. </p>
<p>It is considered good design practice to have at least a single bit self-correcting circuit, as the one above, for each Johnson counter being used.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/asicdigitaldesign.wordpress.com/221/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/asicdigitaldesign.wordpress.com/221/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/asicdigitaldesign.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/asicdigitaldesign.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/asicdigitaldesign.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/asicdigitaldesign.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/asicdigitaldesign.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/asicdigitaldesign.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/asicdigitaldesign.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/asicdigitaldesign.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/asicdigitaldesign.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/asicdigitaldesign.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=asicdigitaldesign.wordpress.com&blog=1082757&post=221&subd=asicdigitaldesign&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://asicdigitaldesign.wordpress.com/2008/02/25/johnson-counter-recovery-circuits/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/nirdahan-128.jpg" medium="image">
			<media:title type="html">nird</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_1.png" medium="image">
			<media:title type="html">johnson_recovery_1.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_2.png" medium="image">
			<media:title type="html">johnson_recovery_2.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_3.png" medium="image">
			<media:title type="html">johnson_recovery_3.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_4.png" medium="image">
			<media:title type="html">johnson_recovery_4.png</media:title>
		</media:content>

		<media:content url="http://asicdigitaldesign.files.wordpress.com/2008/02/johnson_recovery_5.png" medium="image">
			<media:title type="html">johnson_recovery_5.png</media:title>
		</media:content>
	</item>
	</channel>
</rss>