<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1436736254097809592</id><updated>2026-05-08T12:22:40.413-07:00</updated><category term="Digital"/><category term="Specman Tutorial"/><category term="Verification"/><category term="Verilog"/><category term="Learn C"/><category term="Timing"/><category term="Synthesis"/><category term="General"/><category term="SOC"/><category term="Specman"/><category term="State Machine"/><category term="DFT"/><category term="RTL"/><category term="FPGA"/><category term="Gate level simulation"/><category term="Low power"/><category term="VHDL"/><category term="VLSI"/><category term="AMS"/><category term="CMOS"/><category term="Clock divider"/><category term="FIFO"/><category term="Reset"/><title type='text'>ASIC Verification</title><subtitle type='html'>Hello Everyone,&#xa;This is My first blog ever. I have created this blog to discuss about various topics in the field of ASIC. You&#39;ll find lot of useful information about verification. Keep visiting this site for more updates.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/18115567044084336439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2119240511008793730</id><published>2011-02-10T17:16:00.000-08:00</published><updated>2011-02-10T17:19:47.709-08:00</updated><title type='text'>Resolved the issue....</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;When my blogspot loads, I see the bottom bar saying connecting to &lt;a rel=&quot;nofollow&quot; href=&quot;http://js.jargonfish.com/&quot; target=&quot;_blank&quot;&gt;js.jargonfish.com&lt;/a&gt;.  It had been going a little while.  I did add some gadgets recently and that causes the issue. So I edited the HTML and removed that piece of code and it works fine for me.&lt;br /&gt;&lt;br /&gt;Please let me know if  you see any issues.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Suresh</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2119240511008793730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2119240511008793730' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2119240511008793730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2119240511008793730'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2011/02/resolved-issue.html' title='Resolved the issue....'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-1850854057974672849</id><published>2011-02-10T16:38:00.000-08:00</published><updated>2011-02-10T16:51:00.250-08:00</updated><title type='text'>I am back after 2 years!!!</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;I&#39;ve been out for almost 2 years because of work pressure and some other issues. I haven&#39;t even checked my blogspot for long time. I noticed that it is taking more than 5 minutes to load the web page.&lt;br /&gt;&lt;br /&gt;Does anyone know the reason for that? I would appreciate if you guys give me your opinions.&lt;br /&gt;&lt;br /&gt;I thank you all for visiting my blogspot and I am sure that I&#39;ll keep on updating the blogspot.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Suresh</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/1850854057974672849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/1850854057974672849' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1850854057974672849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1850854057974672849'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2011/02/i-am-back-after-2-years.html' title='I am back after 2 years!!!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-5331265551161818170</id><published>2008-09-29T22:59:00.000-07:00</published><updated>2008-09-29T23:16:59.580-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Specman"/><title type='text'>Writing test cases using sequences</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;The simplest way to write a test case is to redefine the behavior of the MAIN sequence by overriding the &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;body()&lt;/span&gt; TCM. This is sufficient to create the test case, because the MAIN sequence is started automatically.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; MAIN usb_sequence_s  {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;body()&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;clock &lt;span style=&quot;font-style: italic;&quot;&gt;is only&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;do&lt;/span&gt; usb_transaction_s &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;keeping&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;.pid &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; SETUP};&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of body()&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of MAIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To create a simple test based on the sequence library is to choose a subset that will be activated in the specific test and then set the weights for each kind using keep soft select.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/5331265551161818170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/5331265551161818170' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/5331265551161818170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/5331265551161818170'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/09/writing-test-cases-using-sequences.html' title='Writing test cases using sequences'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2273794623968001813</id><published>2008-09-23T23:37:00.000-07:00</published><updated>2008-09-24T00:24:14.099-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Specman"/><title type='text'>Sequence Implementation</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;How to implement the various scenarios using the sequence struct? &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;The items and sub-sequences are created inside the pre-defined TCM called &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;&quot;body()&quot; &lt;/span&gt;- used to define the behavior of the sequences - using the dedicated &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&quot;do&quot;&lt;/span&gt; action. &lt;/li&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;The &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;body()&lt;/span&gt; TCM inside the &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;MAIN&lt;/span&gt; sequence is launched automatically by the &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;run() &lt;/span&gt;method inside the sequence driver. &lt;/li&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;The &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;body()&lt;/span&gt; TCM of any sub-sequence is activated by the &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;&quot;do&quot;&lt;/span&gt; action. &lt;/li&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;The &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;body() &lt;/span&gt;TCM defines the duration of the sequences.&lt;/li&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;When &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&quot;do&quot;&lt;/span&gt;ing an item, you must emit the event driver.item_done to let the sequence complete the &quot;do&quot; action and inform the driver that the item was processed.  Without emitting this event, the sequence cannot continue, and the driver cannot drive more items.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;The do action can only be activated inside sequences.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;How to create the sequence library?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you define the sequence struct, you can create various scnearios by creating the sub types of the sequences using kind field.&lt;br /&gt;&lt;br /&gt;1. Extend the sequence kind type with the new kind&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_transaction_kind_t &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; [ SETUP];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. Extend the new sequence sub type of the kind with either &lt;span style=&quot;font-style: italic;&quot;&gt;parameter&lt;/span&gt;s or &lt;span style=&quot;font-style: italic;&quot;&gt;body()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;// SETUP Transaction&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; SETUP usb_sequence_s {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;body()&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;clock &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;is&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;do &lt;/span&gt;sequence_items &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;keeping&lt;/span&gt; {&lt;/span&gt; &lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// The &quot;do sequence_items&quot; will wait until the driver.get_next_item is called and will be&lt;br /&gt;// completed once the driver. packet_done is emitted. Hence the &quot;do sequence_items&quot; and &lt;br /&gt;// driver.get_next_item work in tandem&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;pid &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; SETUP;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of body()&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of extend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// OUT Transaction&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_transaction_kind_t &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; [ OUT];&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; OUT usb_sequence_s {&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;body()&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;clock &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;is&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;do &lt;/span&gt;sequence_items &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;keeping&lt;/span&gt; {&lt;/span&gt; &lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;pid &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; OUT;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of body()&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of extend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// IN Transaction&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_transaction_kind_t &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; [ IN];&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; IN usb_sequence_s {&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;body()&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;clock &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;is&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;do &lt;/span&gt;sequence_items &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;keeping&lt;/span&gt; {&lt;/span&gt; &lt;br /&gt;  &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;pid &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; IN;&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of body()&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of extend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the next post, we will see how to write the test cases using sequences.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2273794623968001813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2273794623968001813' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2273794623968001813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2273794623968001813'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/09/sequence-implementation.html' title='Sequence Implementation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-5476237242070287930</id><published>2008-09-22T22:57:00.000-07:00</published><updated>2008-09-23T00:22:55.310-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Specman"/><title type='text'>Sequences in Specman</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;What are the sequences in Specman? What are the significance of sequences? This post explains the way of implementing the sequences in specman.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;Introduction: &lt;/span&gt;Sequences let you define the streams of data items sent over to the input protocol of the DUT. Before moving on to the details of sequences, let me give you some of the important definitions.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;Item :&lt;/span&gt; It is a struct that represents the main inputs to the DUT - Basically a USB packet or an CPU instruction.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;Sequence :&lt;/span&gt; It is a struct that represents the streams of data items generated one after another according to some protocol, say for example, in USB - Out or setup packet is transferred followed by Data packet.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;Sequence driver :&lt;/span&gt; The SD acts as an agent b/w sequences and the Bus Functional Model (BFM). Basically, a SD takes the generated data items and pass it on to the BFM which in turns convert all your high level data items (Packets or Instruction) into low level data items (bits and bytes).&lt;br /&gt;&lt;br /&gt;Basically a TCM which resides in the BFM does the actual transmission of data items. Both the sequence driver and BFM acts as a pair; The sequence driver serves as the interface upward towards the sequnces and the BFM serves as the interface downward towards DUT. Therefore the Sequence driver only interacts with BFM for the purpose of driving data item into the DUT.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;How to use sequences?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;1. Define the sequence item struct - For an item to be used with sequences, it must have some common functionality.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;type&lt;/span&gt; usb_pid_t &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; [SETUP &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 0xD, OUT &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 0x1 , IN&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; =&lt;/span&gt; 0x9];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Create the sequence item&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;struct&lt;/span&gt; usb_&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;transaction_s&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 153); font-style: italic;&quot;&gt; like any_sequence_item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;dev_addr&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; :&lt;/span&gt; uint (bits : 7);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;ep_num &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; uint (bits:4);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;pid &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_pid_t;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;data &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; list of uint (bits : 8);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;2.  Define the sequence and its driver using the sequence statement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Define the sequence&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;sequence&lt;/span&gt; usb_sequence_s &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;using&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;item&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;= &lt;/span&gt;usb_transaction_s,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;created_driver&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_transaction_driver_u; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// Name of the driver&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;created_kind&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_transaction_kind_t;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // Various sub types for the sequence&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;3. Hook up the sequence driver to the environment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Have a BFM that knows how to drive the USB packet to the DUT.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;unit&lt;/span&gt; usb_bfm &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;event&lt;/span&gt; usb_clk &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;is rise&lt;/span&gt; (&#39;usb_clk_30&#39;) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt; sim;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;drive_packet&lt;/span&gt; ( packet &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_transaction_s) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt; usb_clk is&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;-------&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;------&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;};&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of drive_packet TCM&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 0);&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of unit usb_bfm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The BFM is instantiated in the Agent&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_bfm {&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;driver &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_transaction_driver_u; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// Reference to the sequence driver in the BFM&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;unit&lt;/span&gt; usb_agent {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;bfm &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_bfm &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;is instance&lt;/span&gt;; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_agent {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;driver &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; usb_transaction_driver_u &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;is instance&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;keep &lt;/span&gt;bfm.driver &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; driver;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;connect the pre-defined clock to the BFM clock&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_bfm {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;on&lt;/span&gt; usb_clk { &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;emit&lt;/span&gt; driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;clock }; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pull item from driver, process it and inform through done&lt;br /&gt;Instantiate the driver into the Agent&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;extend&lt;/span&gt; usb_bfm {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; execute_items () &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt; clock &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;is&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;var&lt;/span&gt; sequential_items &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;: &lt;/span&gt;usb_transaction_s;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;while&lt;/span&gt; (TRUE) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; sequential_items&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; =&lt;/span&gt; driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;get_next_item()&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; drive_packet (sequential_item);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;emit&lt;/span&gt; driver&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.&lt;/span&gt;packet_done;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of while loop&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // End of execute_item TCM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;run()&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;is also&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;start&lt;/span&gt; execute_items ();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of run method&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// End of usb_bfm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;In the next post, we will see how to implemet the sequence library and how to write the test case s using the sequences.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/5476237242070287930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/5476237242070287930' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/5476237242070287930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/5476237242070287930'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/09/sequences-in-specman.html' title='Sequences in Specman'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-773002312562016904</id><published>2008-09-20T21:59:00.000-07:00</published><updated>2008-09-21T00:14:48.557-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><title type='text'>Increase the operational speed of the circuit</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;There are numerous design techniques exists to increase the speed of the digital circuit. These design techniques are implemented automatically during synthesis. It also involves the trade-off between the area and speed, means that you have to pay for more area in order to achieve a speed.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use And-Or-Invert or Or-And-Invert gates wherever possible, since they are economical particularly for both area and speed.&lt;/li&gt;&lt;li&gt;Feed the late arriving signals in your design late into the combinatorial circuit to balance the total gate delay along each path of the combinatorial circuit. To know more about late arriving signals, please go thorough it &lt;a href=&quot;http://asicdigitaldesign.wordpress.com/2007/05/23/late-arriving-signals/&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;here.&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use a maximum of 2 inputs on all combinatorial circuits in your design. For example, you can use two numbers of 2 input NAND gates and a 2 input NOR gate instead of using a 4 input AND gate.&lt;/li&gt;&lt;li&gt;The bottom line is, if a boolean function with more than 2 inputs are decomposed into several simple gates, which results in more gates for the same function; but the  total delay is reduced. According to the gate delay model, an N-input AND gate contains a branch with N transistors in series, resulting in an increased internal resistance of N*delta. Furthermore, the parasitic capacitance is also increased; therefore the internal delay of an N input AND gate is N(square)*delta. So if the NAND gate with 6 inputs is not decomposed, the internal delay will be rougly 0.7 ns as opposed to 0.42 ns with decomposition.&lt;/li&gt;&lt;li&gt;Use Johnson counters instead of binary counters.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An n-stage johnson counter produces a set of outputs of length 2n, which can be decoded to give a count sequence. The advantage of using this counter is that, having no combinatorial logic between flip-flops, it can be run at the maximum speed permitted by setup and hold time constraints. The disadvantage of a johnson counter is that, for a required count of m, it requires m/2 flip-flops, rather than log2(m) as required by a synchronous binary counter.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/773002312562016904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/773002312562016904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/773002312562016904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/773002312562016904'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/09/increase-operational-speed-of-circuit.html' title='Increase the operational speed of the circuit'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-8507323264801796395</id><published>2008-09-04T23:28:00.000-07:00</published><updated>2008-09-05T00:05:59.321-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><title type='text'>Verilog questions</title><content type='html'>&lt;span style=&quot;font-family: arial; font-weight: bold; color: rgb(51, 102, 255);&quot;&gt;1. Is this a valid, synthesizable, use of a for loop?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;module&lt;/span&gt; for_loop();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;reg&lt;/span&gt; [8:0] A, B;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;integer&lt;/span&gt; i;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;parameter&lt;/span&gt; N&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;8;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;always&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;(B)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;for&lt;/span&gt; (i&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;1; i&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt;N; i&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;i&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;+&lt;/span&gt;1)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;A[i&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;1]&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;B[i];&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold;&quot;&gt;A[N] &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;= &lt;/span&gt;A[N&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;1];&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial; font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;end&lt;br /&gt;endmodule&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial; font-weight: bold; color: rgb(51, 102, 255);&quot;&gt;2. Assuming the code above is synthesizable,  Which of the following continuous assignment statements would have the closest meaning?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;A. &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;&lt;&lt;/span&gt; 1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;B. &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;&lt;&lt;&lt;/span&gt; 1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;C. &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&gt;&gt;&lt;/span&gt; 1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;D. &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&gt;&gt;&gt;&lt;/span&gt; 1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify; color: rgb(51, 0, 153);&quot;&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(51, 102, 255);&quot;&gt;3. If the following logic is built exactly as described, which test vector sensitizes a stuck-at-0 fault at &quot;e&quot; and propagates it to the output &quot;g&quot;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;module&lt;/span&gt; (a, b, c, d, e, f, g);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; a, b, c, d;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;output&lt;/span&gt; e, f, g;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; e &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; a &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;amp;&lt;/span&gt; b;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; f &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; c &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;^&lt;/span&gt; e;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; g &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; d &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;| &lt;/span&gt;f;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;A. {a, b, c, d} = 4’b0010;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;B. {a, b, c, d} = 4’b1100;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;C. {a, b, c, d} = 4’b1111;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;D. {a, b, c, d} = 4’b0101;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;E. None of the above&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(51, 102, 255);&quot;&gt;4. Consider the following two test fixtures.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;// Fixture A&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;parameter&lt;/span&gt; delay1 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;parameter&lt;/span&gt; delay2 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;initial&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b0;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;20 A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;delay1 A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b0;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;delay2 B&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; =&lt;/span&gt; 1&#39;b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;// Fixture B&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;initial&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;fork&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b0;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;20 A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;40 A &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b0;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;#&lt;/span&gt;60 B &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1’b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial; color: rgb(0, 0, 153);&quot;&gt;join&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;For these two fixtures to produce the same waveforms, delay1 and delay2 have to be set&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;A. delay1 = 40; delay2 = 60;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;B. delay1 = 30; delay2 = 20;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;C. delay1 = 30; delay2 = 30;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;D. delay1 = 20; delay2 = 20;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;E. None of these are correct&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify; font-weight: bold; font-family: arial;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt; &lt;span style=&quot;color: rgb(51, 102, 255);&quot;&gt;5. In verification, most of the effort should be applied at the system (complete chip) level. Which of the following statements gives the best reason as to why?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;A. Most of the bugs in a design are in the netlist wiring it together.&lt;br /&gt;B. Most of the bugs in a design are due to poorly understood interactions between different modules.&lt;br /&gt;C. This is the fastest way to verify the individual modules that make up the design.&lt;br /&gt;D. Most of the bugs in a design occur because of poorly designed interfaces, e.g. buses.&lt;br /&gt;E. None of the above are remotely a good reason.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 102, 255);&quot;&gt;6. Consider the following specify block:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;specify&lt;br /&gt;specparam A0spec &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; :&lt;/span&gt; 2 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; 3;&lt;br /&gt;specparam A1spec &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 2 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; 3 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt; 4;&lt;br /&gt;(a &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&gt;&lt;/span&gt; b) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; (A0spec, A1spec);&lt;br /&gt;endspecify&lt;br /&gt;&lt;br /&gt;This is defining the following:&lt;br /&gt;&lt;br /&gt;A. Rising, falling and steady delay from input a to output b of 1, 2, and 3 ns respectively when a is 0, and 2, 3, and 4 ns when a is 1.&lt;br /&gt;B. Minimum, typical and maximum delay from input a to output b of 1, 2, and 3 ns on a rising edge at B, and 2, 3 and 4 ns on a falling edge.&lt;br /&gt;C. Non-blocking assignment of a to b with minimum, typical and maximum delay of 1, 2 and 3ns.&lt;br /&gt;D. Setup time requirements for the flip-flop with output B.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: arial; font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/8507323264801796395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/8507323264801796395' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/8507323264801796395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/8507323264801796395'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/09/verilog-questions.html' title='Verilog questions'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-3224974406517103825</id><published>2008-08-24T22:25:00.000-07:00</published><updated>2008-08-24T22:58:28.423-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Low power"/><title type='text'>Power consumption</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Here are some tips to predict the power consumption early in the design cycle i.e at the RTL Level.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Determine your design components power consumption&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Find which components power consumption in your design is fixed by the specification and which components will be affected through power reduction techniques. For instance, input output power can be fixed at the specification level and memory power can also be fixed in the specification level. But memory can be powered down when not in use. If large amount of power is consumed by the clock in your design, then you need to have a clock gating techniques. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The designers can do an RTL power analysis before the design is synthesized.  This analysis can&#39;t be as accurate as Gate level synthesis. But it gives an overall idea of potential power saving. For example, how much power could be saved if block &quot;A&quot; could be powered down 65 percent of the time, or if block &quot;A&quot; operated at 0.8 volt rather than 1 V?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Accurate switching activity from your simulation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;To ensure an accurate power estimate, you need to use the most accurate data you have available at any given point in the design flow and revise your estimate as new data becomes available. But getting accurate switching activity is a huge challenge.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;If switching activity data is not available from simulation, designers should estimate the switching activity on the chip&#39;s primary inputs and apply that estimate within the power analysis tool. Most power analysis tools can propagate the switching activity data through both the combinatorial and sequential logic.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/3224974406517103825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/3224974406517103825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/3224974406517103825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/3224974406517103825'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/08/power-consumption.html' title='Power consumption'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2206307808465707776</id><published>2008-07-24T12:48:00.000-07:00</published><updated>2008-11-13T05:04:10.306-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Low power"/><title type='text'>Low power design</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;In today&#39;s chip industry, power consumption is the primary concern of the hardware designers who implement wireless and mobile applications. Though, EDA tools are emerging, many design decisions - which are influencing the power consumptions - are made at the system and architectural level prior to writing RTL. &lt;/span&gt;&lt;span class=&quot;text&quot;  style=&quot;font-family:arial;&quot;&gt;The power consumption of a circuit can be classified as either dynamic or static. Dynamic power consumption is a function of switched capacitance and supply voltages. Static power consumption comprises the circuit-activity-independent leakage power consumption. Leakage power depends on process technology parameters such as threshold voltages, supply voltages, circuit state, and temperature&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;. &lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;&quot; &gt;Methodology&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;text&quot;  style=&quot;font-family:arial;&quot;&gt;Cells that do not perform a required function are turned off using sleep transistors. But instead of disabling just the clock signal, sleep transistors also disconnect cells from their power supply. Therefore, power gating reduces both dynamic and static power consumption. &lt;/span&gt;  &lt;span class=&quot;text&quot;  style=&quot;font-family:arial;&quot;&gt;Power gating can be implemented in two different ways: fine or coarse grain.&lt;br /&gt;&lt;br /&gt;FINE GRAIN power gating requires that each cell come with its own sleep transistor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Advantage&lt;/span&gt; &lt;ul style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Good timing control&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Disadvantages&lt;/span&gt; &lt;ul style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Increased area overhead&lt;/li&gt;&lt;li&gt;Less leakage control&lt;/li&gt;&lt;li&gt;Required a standard cell library with sleep transistor&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;text&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;COARSE-GRAIN power gating methodology is implemented using special sleep transistor cells. One sleep transistor cell is used to turn on and off a set of standard cells. The coarse-grained approach requires less area than fine-grain power gating due to the lower number of sleep transistors and less routing of enable signals for power gating. Fewer sleep transistors result in better leakage control.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;text&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;text&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;text&quot;  style=&quot;font-family:arial;&quot;&gt;Unlike fine grained power gating, when the power is switched off in coarse grain power gating, the power is disconnected from all the registers resulting in loss of data. If the data is to be preserved when the power is disconnected, then we need to store the data somewhere, where there is no power gating - This is done by a special register called &quot;Retention&quot; register. The key advantage of retention register is that they are simple to use and are very quick to save and restore the state.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;text&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;text&quot;&gt; &lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;&quot; &gt;State Retention Power Gating&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;text&quot;  style=&quot;font-family:arial;&quot;&gt;This technique allows the voltage supply is reduced to zero for the majority of the SOC block&#39;s logic gates while maintaining the voltage supply for the state element of that block. The state of the SOC is always saved in the sequential components. Using the SRPG technique, when in the inactive mode, power to the combination logic is turned off and the sequential stays on thereby reducing the power consumption greatly when the application is in stop mode. &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;text&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrJ-pXx8LrXG7_XKT-1rfzAwcaRke63uaO0SEt_UW4vXnJR_Hc9yhXmHbddmFvr4SDLXFdMLxt9RLgKhwGyOkRc0UqVTWR4nHyVtuWbiFieKRxi_21EzIu0Ljff71zQl3A9XlIGVxe58/s1600-h/SRPG.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 356px; height: 223px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrJ-pXx8LrXG7_XKT-1rfzAwcaRke63uaO0SEt_UW4vXnJR_Hc9yhXmHbddmFvr4SDLXFdMLxt9RLgKhwGyOkRc0UqVTWR4nHyVtuWbiFieKRxi_21EzIu0Ljff71zQl3A9XlIGVxe58/s400/SRPG.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5226683119165249138&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2206307808465707776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2206307808465707776' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2206307808465707776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2206307808465707776'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/07/low-power-design.html' title='Low power design'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrJ-pXx8LrXG7_XKT-1rfzAwcaRke63uaO0SEt_UW4vXnJR_Hc9yhXmHbddmFvr4SDLXFdMLxt9RLgKhwGyOkRc0UqVTWR4nHyVtuWbiFieKRxi_21EzIu0Ljff71zQl3A9XlIGVxe58/s72-c/SRPG.JPG" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-6851832805714961698</id><published>2008-07-23T23:30:00.000-07:00</published><updated>2008-07-24T00:26:05.213-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><title type='text'>Gray Code Counter Implementation</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;A Gray code is an encoding of numbers so that adjacent numbers have a single digit differing by 1. The term Gray code is often used to refer  to a Binary Reflected  Gray Code. We can implement a gray code counter in a different ways. Consider the following table carefully.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;B&lt;/span&gt; : 000, 001, 010, 011, 100, 101, 110, 111&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;G&lt;/span&gt;: 000, 001, 011, 010, 110, 111, 101, 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;To convert a binary &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;font-family:arial;&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;number d1,d2,..,d(n-1),dn  to its corresponding Binary Reflected Gray Code, start at the right with the digit dn (the LSB). If the d(n-1) is 1, replace dn by (1-dn); otherwise,  leave it unchanged. Then proceed to d(n-1). Continue  up to the first d1, which is kept  the same. The resulting  number g1,g2,..,g(n-1),gn is the Reflected Binary Gray Code. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt;The most common Gray code is where the lower half of the sequence is exactly the mirror image of first half with only the MSB inverted. We illustrate the 3-bit binary Gray code as an example.&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Binary to gray code can be achieved by&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p face=&quot;arial&quot; style=&quot;font-weight: bold; font-family: arial;&quot;&gt;gray[2] = binary[2];&lt;/p&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;gray[1] = binary[2] ^ binary[1];&lt;/p&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;gray[0] = binary[1] ^ binary[0];&lt;/p&gt;&lt;p style=&quot;font-family: arial;&quot;&gt;A simple verilog code to implement this function is given by&lt;/p&gt;&lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; gray &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;(&lt;/span&gt;binary&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;^&lt;/span&gt; binary; &lt;span style=&quot;font-weight: normal;&quot;&gt;// Right shift by 1 and EX-OR with binary&lt;/span&gt;.&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; module&lt;/span&gt; gray_cntr (&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;  &lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;g&quot;  &gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;clock_in&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;g&quot;  &gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;    rst_n&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;g&quot;  &gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     enable_in&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;g&quot;  &gt;,&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     cnt_out&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   );&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span id=&quot;lo&quot;  style=&quot;font-family:arial;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;  &lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot; id=&quot;g&quot;  &gt;// I/O Declarations&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;g&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;input&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; clock_in, rst_n, enable_in; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;output&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; [ 2&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] cnt_out;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;wire&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; [2&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] cnt_out;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;reg&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; [2&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] cnt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;g&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;  &lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;always&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);font-family:arial;font-size:130%;&quot; id=&quot;sc&quot;  &gt;@&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;posedge&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; clock_in &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;negedge&lt;/span&gt; rst_n) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;if&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;(&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;!&lt;/span&gt;rst_n) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     cnt &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);font-family:arial;font-size:130%;&quot; id=&quot;sc&quot;  &gt;&lt;=&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; 1&#39;b0; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;else&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;&quot; &gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;if&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; &lt;/span&gt;(enable_in) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     cnt &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);font-family:arial;font-size:130%;&quot; id=&quot;sc&quot;  &gt;&lt;=&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; cnt&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;sc&quot;  &gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;+&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;1&#39;b1; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;assign&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; cnt_out&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:130%;&quot; id=&quot;sc&quot;  &gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;{ cnt[2], (^cnt[2:1]), (^cnt[1:0])&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; };&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; id=&quot;lo&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot; id=&quot;b&quot;  &gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/6851832805714961698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/6851832805714961698' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6851832805714961698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6851832805714961698'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/07/gray-code-counter-implementation.html' title='Gray Code Counter Implementation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-1162846033671407770</id><published>2008-07-19T18:15:00.000-07:00</published><updated>2008-07-19T19:17:57.571-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AMS"/><title type='text'>Mixed Signal Modeling</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div  style=&quot;text-align: justify;font-family:arial;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;Designers today find themselves adding more and more analog and mixed-signal content to their creations. &lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;In the past, designers used different verification methodologies to verify designs that contains analog circuits. At the very highest levels of abstraction, system designers used Matlab to model systems that would be implemented with analog circuits;  Designers now started using Verilog AMS ( Analog Mixed Signal ) - which allows the designer to model the analog circuit with different level of abstractions. &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The AMS extensions to Verilog is a good idea, particularly for SOC design. But so far they have received limited use, because they are relatively new and require learning new syntax and semantics and the acquisition of new simulation tools.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:130%;&quot;  &gt;Here are some of the simple examples that shows how to write the behavioral model for analog circuits.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 0);font-family:arial;&quot; &gt;RESISTORS&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;One of the simplest models that can be described by Verilog-A is a resistor. In general, &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;a resistor is a relationship between voltage and current, as in&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-weight: bold;&quot;&gt;f(V, I) = 0&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;where V represents the voltage across the resistor, I represents the current through the &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;resistor, and f is an arbitrary function of two arguments.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;The equation for a simple linear resistor is&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;V = IR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;font-size:85%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;where R is the resistance.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;font-size:130%;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 153);font-size:130%;&quot; &gt;include&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt; “disciplines.vams”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;It defines the names&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 0);font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;electrical, V, and I, which are used in the model. It also defines other disciplines and natures.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;module&lt;/span&gt; res(p,n);&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;inout&lt;/span&gt; p,n;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;// Positive and Negative terminals&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;electrical&lt;/span&gt; p,n;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;The p and n ports are defined to&lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt; &lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;be electrical, meaning the signals associated with the ports&lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt; are expected to be voltage&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt; and current.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;parameter&lt;/span&gt; real r&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt;0 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;from&lt;/span&gt; [0&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;inf];&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;// R value is from 0 to infinity&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;analog&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;    &lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;V(p,n) &lt;+ r*I(p,n);&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;The analog keyword introduces an analog process. An analog process is&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;used to describe continuous time behavior. Syntactically, it is the analog keyword followed&lt;/span&gt; &lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt; by a statement that describes the relationship between signals. This relationship&lt;/span&gt; &lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt; must be true at all times.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot;  &gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 0);font-family:arial;&quot; &gt;TRIANGLE WAVE FORM GENERATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;module&lt;/span&gt; V_triangle_generator(out);&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; output &lt;/span&gt;out;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;voltage&lt;/span&gt; out;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; parameter&lt;/span&gt; real period &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 10n from [0&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;inf],&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;                ampl   &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; 1;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; integer&lt;/span&gt; slope;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; real&lt;/span&gt; offset;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot;  &gt; analog&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;font-size:100%;&quot;  &gt; begin&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;   &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;(timer(0,period))&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;   &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;begin&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     slope &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; +1;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     offset &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; $realtime;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     discontinuity(1);&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;   &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;   &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;(timer(period/2,period))&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;  &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt; begin&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     slope &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; -1;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     offset &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; $realtime;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;     discontinuity(1);&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;   &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 102, 0);font-family:arial;font-size:100%;&quot;  &gt;   V(out) &lt;+ ampl * slope * (4*($realtime-offset)/period - 1);&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 153); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div  style=&quot;text-align: justify;font-family:arial;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;Note that you &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;can&#39;t&lt;/span&gt; compile this code in modelsim simulator tool. Synopsys&#39; Discovery AMS, a mixed-signal simulator, allows designers to create entire designs with Accellera&#39;s Verilog-AMS language, launch all simulations from a single integrated control environment, and efficiently use parasitic data for post-layout analysis.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;;font-family:arial;font-size:100%;&quot;  &gt;Verilog-AMS, a language standard approved by the Accellera EDA standards body, describes the behavior of analog and mixed-signal designs. The language is made up of three key parts: Verilog-D for digital designs, Verilog-A for analog, and mixed-signal extensions to specify domain-shifting algorithms.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;You can download the Verilog-AMS language reference manual from &lt;a href=&quot;http://verilog.org/verilog-ams/htmlpages/public-docs/lrm/2.0/AMS-LRM-2-0.pdf&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/1162846033671407770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/1162846033671407770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1162846033671407770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1162846033671407770'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/07/mixed-signal-modeling.html' title='Mixed Signal Modeling'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-1510300949469885663</id><published>2008-07-14T19:44:00.000-07:00</published><updated>2008-07-14T20:45:21.632-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><category scheme="http://www.blogger.com/atom/ns#" term="RTL"/><title type='text'>Serial to Parallel Data Conversion</title><content type='html'>&lt;div face=&quot;arial&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;A &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite1&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; to parallel data conversion requires n-bit shift register. Therefore, a &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite1&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite2&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite3&quot;&gt;parallel&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite4&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; shift register converts data from &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite1&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; format to &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite3&quot;&gt;parallel&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; format. If four data bits are shifted &lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite2&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; by four clock pulses via a single wire at serial-&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot; class=&quot;hilite2&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;, the data becomes available simultaneously on the four outputs parallel_out[3] to parallel_out[0] after the fourth clock pulse.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;A serial to parallel data conversion circuit is used for converting a serial word supplied by some domain &quot;X&quot; to a parallel word so as to allow for the processing of the parallel word by a processor. The &quot;X&quot; domain supplies to the interface circuit a &#39;ready&#39; pulse signal. The interface circuit, in response to the &#39;ready&#39; pulse signal, supplies an  &#39;ack&#39; pulse and a &#39;clock&#39; signal to the &quot;X&quot;, so as to allow the serial word from the &quot;X&quot; to be transferred to the interface circuit, which then converts the serial word to a parallel word. An enable pulse signal supplied to the interface circuit effects the transfer of the parallel word from the interface circuit to the processor. &lt;/span&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;&lt;br /&gt;&lt;br /&gt;module&lt;/span&gt; serial_2_parallel (&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;clk_in,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;rst_n,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;ready_in,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;shift_enable,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;serial_in,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;ack_out,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;parallel_out );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// I/O declarations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; clk_in;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; rst_n;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; ready_in;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; shift_enable;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;input&lt;/span&gt; serial_in;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;output&lt;/span&gt; [3&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] parallel_out;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;reg&lt;/span&gt; [3&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] parallel_out;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;output&lt;/span&gt; ack_out;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;reg&lt;/span&gt; ack_out;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;wire&lt;/span&gt; [3&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;0] parallel_wire;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// A 4-bit shift register to convert serial to parallel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;always&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;(&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;posedge&lt;/span&gt; clk_in &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;negedge&lt;/span&gt; rst_n)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153); font-family: arial;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;    &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;if&lt;/span&gt;(rst_n &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; 1&#39;b0)&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153); font-family: arial;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;        parallel_out &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; 4&#39;b0;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;ack_out &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; 1&#39;b0;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; // ack_out is initially 0&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt; &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;    // Shift enable is driven from tb as 1 when ack_out is 1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;    &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;else if &lt;/span&gt;(shift_enable &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; 1&#39;b1 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ready_in &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; 1&#39;b1)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;        parallel_out &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; ({serial_in, parallel_wire[3&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;:&lt;/span&gt;1]});&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;    &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: rgb(0, 0, 153); font-weight: bold; font-family: arial;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;        parallel_out &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; parallel_wire;&lt;/span&gt;&lt;br /&gt;     &lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;   ack_out &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; 1&#39;b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;    &lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;end  &lt;/span&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;// Declare a 4-bit wire&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;assign&lt;/span&gt; parallel_wire &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; parallel_out;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153); font-family: arial;&quot;&gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/1510300949469885663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/1510300949469885663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1510300949469885663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1510300949469885663'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/07/serial-to-parallel-data-conversion.html' title='Serial to Parallel Data Conversion'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-7086868114144773998</id><published>2008-07-14T12:12:00.000-07:00</published><updated>2008-07-14T12:19:45.457-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SOC"/><category scheme="http://www.blogger.com/atom/ns#" term="Verification"/><title type='text'>Coverage driven Random Verification</title><content type='html'>&lt;div  style=&quot;text-align: justify;font-family:arial;&quot;&gt;&lt;span class=&quot;paragraphBody&quot;  style=&quot;font-family:arial;&quot;&gt;Coverage-driven random verification methods are becoming recognized as one of the best ways to verify complex IC designs. &lt;/span&gt;&lt;span class=&quot;body&quot;  style=&quot;font-family:arial;&quot;&gt;&lt;span class=&quot;storybody&quot;&gt;Cadence Design Systems, announced that new technologies have been integrated into the Cadence® Incisive® Enterprise verification family that enable engineering teams to address increasingly complex chip design. Incisive technologies now offer support for the newly developed &lt;span style=&quot;font-style: italic;&quot;&gt;Open Verification Methodology (OVM)&lt;/span&gt;, a new aspect-oriented generation engine, and the second generation of Cadence transaction-based acceleration (TBA) with native support of multiple test-bench languages and numerous productivity enhancements.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;paragraphBody&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;To understand how to take advantage of this solution, cdn (cadence  designer network) talked to Mr. Apurva Kalia, VP of R&amp;amp;D.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;You can read his interview &lt;/span&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.cdnusers.org/TechnologyZones/FunctionalVerification/tabid/115/InterviewCoverageDrivenRandomVerification/tabid/438/Default.aspx&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/7086868114144773998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/7086868114144773998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7086868114144773998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7086868114144773998'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/07/coverage-driven-random-verification.html' title='Coverage driven Random Verification'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2124519207069204852</id><published>2008-06-16T17:12:00.000-07:00</published><updated>2008-06-16T18:05:07.629-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="RTL"/><title type='text'>RTL Design techniques - Coding style</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;My focus has always been on what is good for synthesis with little regard to the effect on simulation speed. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Create a block level diagram before begin your coding&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Draw a simple block diagrams of the functions of your design. This will also helpful in documentation. Use these block diagrams while code your design.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Always think of a fresher who read your RTL&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Start with the inputs to your design - on the left side of block diagram - and describe the design&#39;s functionality from inputs to outputs. &lt;span style=&quot;font-style: italic;&quot;&gt;Don&#39;t try to be an ultra-efficient RTL coder&lt;/span&gt;. Please dont forget to put comments. Have a comment header for each module, comment the functionality of each I/O, and use comments throughout the design to explain the tricky parts.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;Hierarchy&lt;/span&gt;&lt;br /&gt;At the top level of your chip there should be 4 or 5 blocks: &lt;span style=&quot;font-style: italic;&quot;&gt;I/O pads, clock generator, reset &lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;circuit,  &lt;/span&gt;and&lt;span style=&quot;font-style: italic;&quot;&gt; the core design.&lt;/span&gt; They are in separate blocks, because they might not be all synthesizable. Isolating them simplifies synthesis. Typically, the core design is hierarchical and organized by function.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;Use separate always@ blocks for sequential logic and combinatorial logic&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt; &lt;span style=&quot;font-family: arial;&quot;&gt;It helps organize your RTL description&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;font-family: arial;&quot;&gt;There is a sequential optimization process in DC, which uses your coding style description of the sequential element to map it to the best sequential element in your technology library. When you combine sequential and combinatorial logic descriptions together, the tool can get confused and might not recognize the type of sequential element you are describing.&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Use blocking for combinational and non-blocking for sequential&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;There is one good paper by Stuart Sutherland about the blocking and non-blocking assignments. This paper can be downloaded from &lt;/span&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.sutherland-hdl.com/papers/1996-CUG-presentation_nonblocking_assigns.pdf&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 102, 255);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Know whether you have prioritized or parallel conditions&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;If the conditions are mutually exclusive, then a case statement is better, because it is easier to read and it organizes the parallel states of the description. If multiple conditions can occur at the same time, use the if statement and prioritize the conditions using else if for each subsequent condition.&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Completely specify all branches of all conditional statements&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;If you completely specify all possible combinations of ones and zeros for the different cases and you use the same select operator for all cases  DC will automatically recognize that case statement is fully specified and parallel.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Initialize output of conditional statements prior to defining the statements&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Be careful selecting what value you initialize the output to. If there is&#39;t a default state for that part of the design  then try to pick the most popular state to initialize the output to  that should help reduce extra switching (power) during operation.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Use high level constructs (case, if, always@) as much as possible&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Synthesis works best with high level RTL constructs. Low level gates or Boolean level constructs (verilog primitives) constrain DC.&lt;br /&gt;&lt;br /&gt;Using good coding style and writing safe RTL code is not enough! Understand what you are implying and figure out in advance where are the potential problems. You should be able to manually synthesize in your head what you have described in your RTL description.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2124519207069204852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2124519207069204852' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2124519207069204852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2124519207069204852'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/rtl-design-techniques-coding-style.html' title='RTL Design techniques - Coding style'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2887940774804515437</id><published>2008-06-15T19:46:00.000-07:00</published><updated>2008-06-15T20:23:50.395-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="RTL"/><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><category scheme="http://www.blogger.com/atom/ns#" term="VHDL"/><title type='text'>RTL Design techniques - Pre-RTL Checklist.</title><content type='html'>&lt;div face=&quot;arial&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Your success in IC design is directly depends on your RTL code. There is a lot more that goes into a good RTL description than just writing with good coding style. Design for Test and Design for Synthesis are just a few examples of design goals that can be affected at the RTL. This post is all about RTL design issues. Code it correctly from the beginning and you won&#39;t need so many big fancy tools to solve your timing closure problems at the back end of the design cycle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;There are many design issues - which impact the speed and area of the design - need to be resolved before you begin coding your design.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Communicate design issues with your team - Things to be worked out as a team&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Naming convention for hierarchical blocks,&lt;/li&gt;&lt;li&gt;Naming convention for signals,&lt;/li&gt;&lt;li&gt;Active low or active high states for the signal&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;Does the specification define how the design should be partitioned?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Partitioning helps to break down your big design into smaller blocks and assign each small unit to different members of the team. Follow the specification&#39;s recommendation for partitioning.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;What are the I/O requirements?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;At the major functional block level, define the interface protocol as soon as possible. What bus interface protocol will be used? PCI, AHB or OCP. Get the specification for each bus and interface to the design before you begin coding. Make sure the function and timing of each one is clear. This will also enable you to create high level models of your design before you start coding the RTL.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;What about the clocks in the design?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;How many clocks will be required for the design? Where are the clocks for the chip coming from? Will they be internally generated? PLL? Divide by circuits? Externally supplied clocks? You have to isolate your clock generation circuitry from the rest of the chip design. Especially if it is analog based. &lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 153);&quot;&gt;What other IPs are you using?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Does the design require any extra IP (Intellectual Property) to be integrated into it? RAMs? Cores? Buses? FIFOs? Then start with the interface to each IP block and define it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153); font-family: arial;&quot;&gt;Is it your expectation that you are pin-limited or gate limited?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Being pin-limited means that you dont have enough I/O pads in your ASIC package to do what you really want to do. You might be able to double up on the functions of each pin, which would require multiplexing signals and would prevent any ideas of a unidirectional bus interface at the I/O pad level. But if you need all the signals to be active simultaneously, you wont be able to do it either. You&#39;ll have to split the design up. You should know before you begin your RTL.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Being gate-limited means that the design has too much functionality for the die size chosen. You might have to cut out functionality to fit on the die. Or you can try to optimize your design for area, which means speed objectives might be tough to meet. It is hard to estimate whether you will be gate limited at the beginning of a project unless you have been through this design before.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153); font-family: arial;&quot;&gt;Is it your expectation that you will be pushing the speed envelope of the technology?&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;How much functionality are you putting into your design&lt;/li&gt;&lt;li&gt;At what speed will it be running?&lt;/li&gt;&lt;li&gt;What technology are you going to use to implement it? &lt;/li&gt;&lt;li&gt;Has it ever been done before? &lt;/li&gt;&lt;li&gt;What changes to the design are you willing to make to achieve the speed goal for your design? &lt;a href=&quot;http://chipverification.blogspot.com/2008/06/what-is-pipelining.html&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 51, 153);&quot;&gt;Pipelining&lt;/span&gt;&lt;/a&gt; or &lt;a href=&quot;http://chipverification.blogspot.com/2008/06/re-timing.html&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 51, 153);&quot;&gt;Register re-timing&lt;/span&gt;&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;In the next post, I&#39;m going to post the rules that tend to cause the most common errors.&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2887940774804515437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2887940774804515437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2887940774804515437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2887940774804515437'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/rtl-design-techniques-pre-rtl-checklist.html' title='RTL Design techniques - Pre-RTL Checklist.'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-6071241514064453104</id><published>2008-06-11T23:40:00.000-07:00</published><updated>2008-11-13T05:04:10.607-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><title type='text'>Fact about Johnson counter</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The Johnson counter is made of a simple shift register with an inverted feedback. That is if the complement output of a ring counter is fed back to the input instead of the true output, a Johnson counter results. Figure shows the 4-bit Johnson counter with 2*4=8 states.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW-71e5YRwoXFi0Y3TBV2C-ILFEOfU7MET6n7Cqo8kLzqyPF8P4j_cgrt-J9Zo2HhrquhNt1Zplnjy8jBJytrDQn56KIzMENJDd6DEg0PU7MZzGbN46nXczjXMFOPa4nqjxN61LipFFZ0/s1600-h/johnson_counter.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW-71e5YRwoXFi0Y3TBV2C-ILFEOfU7MET6n7Cqo8kLzqyPF8P4j_cgrt-J9Zo2HhrquhNt1Zplnjy8jBJytrDQn56KIzMENJDd6DEg0PU7MZzGbN46nXczjXMFOPa4nqjxN61LipFFZ0/s320/johnson_counter.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5210884031588653602&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Johnson counter have 2n states where &quot;n&quot; is the number of flip-flops. But normal binary counters have (2 power n) states for the same number of flops. Here the interesting news about the Johnson counter is unused states. The formula used to find out the unused states is (2 power n) - (2n). Here, in this case, the number of unused states are  (2 power 4) - (2*4) =  8 states.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/6071241514064453104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/6071241514064453104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6071241514064453104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6071241514064453104'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/fact-about-johnson-counter.html' title='Fact about Johnson counter'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW-71e5YRwoXFi0Y3TBV2C-ILFEOfU7MET6n7Cqo8kLzqyPF8P4j_cgrt-J9Zo2HhrquhNt1Zplnjy8jBJytrDQn56KIzMENJDd6DEg0PU7MZzGbN46nXczjXMFOPa4nqjxN61LipFFZ0/s72-c/johnson_counter.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-4982072041772106189</id><published>2008-06-10T23:34:00.000-07:00</published><updated>2008-06-11T00:15:13.654-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FPGA"/><title type='text'>What is Pipelining?</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Let me assume that I am going to build a car and I have all of the parts are lying around at my hand. Let us further assume that the main steps in the process are as follows:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;li&gt;Attach the wheel to the car,&lt;/li&gt;&lt;li&gt;Attach the engine,&lt;/li&gt;&lt;li&gt;Attach the seats,&lt;/li&gt;&lt;li&gt;Attach the body and&lt;/li&gt;&lt;li&gt;Paint everything.&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Now let us assume that I require a specialist to perform each of these tasks. My Five friends are playing cricket. My first friend comes and attaches a wheel and goes back to play cricket. Assume that he takes 10 minutes. On his return, My second friend comes and attaches the engine and goes back once his job is done and so on. Once the first car has been completed, they start all over again. Obviously, this is very in-efficient scenarios as the whole process takes 50 minutes. Furthermore, for each of those 10 minutes, only one man is working. It would be much more efficient to have 5 cars in the same place. In this case, as soon as my first friend completed his work, he can go to the second car to attach a wheel while the second friend attaches the engine in first car. In this scenario, everyone will be working at all time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;&quot; &gt;PIPELINING&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Let us assume that we have a design that can be implemented as a series of blocks of combinational logics. Let&#39;s assume that we have a chunk of 3 combinational blocks. Let us say each block takes &quot;t&quot; nanoseconds to perform its task. In this case, it will take &quot;3t&quot; nanoseconds for a word of data to propagate through the function, starting with its arrival at the inputs to the first block and ends with its departure at the output pin of 3rd block.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;We wouldn&#39;t want to present a new data to the inputs until we have stored the output results associated  with the first word of data. The answer is  to use a  pipelined  design technique  in which  the block of combinational logic are sandwiched b/w block of registers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;All of the register banks are driven by a common clock. On each active clock edge, the registers feeding a block of logic are loaded with the result from the previous stage. These values then propagate through that block of logic until they arrive at its outputs, at which point they are read to be loaded to the next set of register on the next clock. In this case, as soon as the pipeline is fully loaded, a new word of data can be processed every &quot;t&quot; nanoseconds.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/4982072041772106189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/4982072041772106189' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/4982072041772106189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/4982072041772106189'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/what-is-pipelining.html' title='What is Pipelining?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-1886033081495448950</id><published>2008-06-09T23:38:00.000-07:00</published><updated>2008-11-13T05:04:10.744-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FPGA"/><title type='text'>Re-Timing</title><content type='html'>&lt;div  style=&quot;text-align: justify; font-family: arial;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Re-timing&lt;/span&gt; is based on the concept of balancing out the positive and negative slacks throughout the design. In this context, the positive slack means, the amount of time by which the conditions are met and negative slack means, the amount of time by which the condition is not met.&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;font-family:arial;&quot; &gt;For example, let us assume a pipe-lined design, whose frequency is such that the maximum register to register delay is 15ps. Now, let us assume that we have a situation as shown in Figure.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFpkEWUo2qt-C_YLUmVqxunWWiAIja6rneZRp57fbg-Mm0JDTYKBpTYB8wRaFJ72eZwGK0ekjCNwmFfHu6IR7LA6gyJ7WfRcGbrje3Dd1Efr5nVL1xdLgdVFDvHzVnPjoSNIx2ljuxRLM/s1600-h/ReTiming.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFpkEWUo2qt-C_YLUmVqxunWWiAIja6rneZRp57fbg-Mm0JDTYKBpTYB8wRaFJ72eZwGK0ekjCNwmFfHu6IR7LA6gyJ7WfRcGbrje3Dd1Efr5nVL1xdLgdVFDvHzVnPjoSNIx2ljuxRLM/s320/ReTiming.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5210144011282905010&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The longest timing path in the first block of combinational logic is 10ps - positive slack of 5ps.&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The longest timing path in the second block of combination logic is 20ps - negative slack of 5ps. Once the initial path timing is calculated, combinational logic is moved across the register boundaries to steal from paths with a negative slack to donate to the paths with a postive slack.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/1886033081495448950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/1886033081495448950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1886033081495448950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/1886033081495448950'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/re-timing.html' title='Re-Timing'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFpkEWUo2qt-C_YLUmVqxunWWiAIja6rneZRp57fbg-Mm0JDTYKBpTYB8wRaFJ72eZwGK0ekjCNwmFfHu6IR7LA6gyJ7WfRcGbrje3Dd1Efr5nVL1xdLgdVFDvHzVnPjoSNIx2ljuxRLM/s72-c/ReTiming.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2856930066817889594</id><published>2008-06-07T12:55:00.000-07:00</published><updated>2008-06-07T13:02:16.003-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VLSI"/><title type='text'>Ten Tips to Improve an IC Design Teams Project Execution</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Many IC design projects are frequently struggling with unexpected delays to their production plan. Intense time to market pressures demands an environment that prescribes improvement to both the predictability and length of design time lines. In consideration of this continuous improvement, aspiration Jorvig Consulting has compiled ten vital tips for consideration as teams pursue their quest to improve IC design execution.&lt;i&gt;&lt;br /&gt;&lt;br /&gt;This press release can be viewed from &lt;a href=&quot;http://www.prweb.com/releases/2006/04/prweb369576.htm&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2856930066817889594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2856930066817889594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2856930066817889594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2856930066817889594'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/06/ten-tips-to-improve-ic-design-teams.html' title='Ten Tips to Improve an IC Design Teams Project Execution'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-7014003263173349378</id><published>2008-05-31T11:34:00.000-07:00</published><updated>2008-06-06T12:57:13.969-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><category scheme="http://www.blogger.com/atom/ns#" term="VHDL"/><title type='text'>VHDL vs Verilog</title><content type='html'>&lt;div  style=&quot;text-align: justify;font-family:arial;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:arial;&quot; &gt;What is the reason that Verilog is usually considered better at low level modeling than VHDL? Why is VHDL usually considered better than Verilog for high level modeling?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: normal;font-family:arial;&quot; &gt;Verilog has built-in types for gates and transistors, can also handle true bidirectional signals (VHDL  has none of these things).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: normal;font-family:arial;&quot; &gt;VHDL allows users to define their own data types which allows users to extend the language. Also, support for libraries and packages lends itself to more complex models.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/7014003263173349378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/7014003263173349378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7014003263173349378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7014003263173349378'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/vhdl-vs-verilog.html' title='VHDL vs Verilog'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-2899451067493192347</id><published>2008-05-28T00:34:00.000-07:00</published><updated>2008-05-28T00:45:37.078-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><title type='text'>Parity Detector</title><content type='html'>&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt;N number of EX-NOR gates is connected in series such that the N inputs (A0, A1, A2......) are given in the following way:&lt;br /&gt;&lt;br /&gt;A0 and A1 is being given to first EX-NOR gate and A2 and output of first EX-NOR is being given to second EX-NOR gate and so on. Nth EX-NOR gate&#39;s output is final output. How does this circuit work? Explain in detail?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;If N= Odd ( # of EX-NOR gates are Odd), the circuit acts as even parity detector, i.e. the output will 1 if there are even number of 1&#39;s in the inputs. This could also be called as odd parity generator since with this additional 1 as output the total number of 1&#39;s will be Odd. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;If N= Even ( # of EX-NOR gates are Even), the circuit acts as odd parity detector, i.e. the output will 1 if there are odd number of 1&#39;s in the inputs. This could also be called as even parity generator since with this additional 1 as output the total number of 1&#39;s will be Even.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/2899451067493192347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/2899451067493192347' title='84 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2899451067493192347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/2899451067493192347'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/parity-detector.html' title='Parity Detector'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>84</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-3456487970511769861</id><published>2008-05-26T19:44:00.000-07:00</published><updated>2008-11-13T05:04:10.900-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Clock divider"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital"/><title type='text'>Clock Dividers</title><content type='html'>&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;Dividing a clock by an even number always generates 50% duty cycle output. Sometimes it is necessary to generate a 50% duty cycle frequency even when the input clock is divided by an odd or non-integer number. In this post I am going to talk about how to divide a clock by an odd number.&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;br /&gt;The easiest way to create an odd divider with a 50% duty cycle is to generate two clocks at half the desired output frequency with a quadrature-phase relationship (constant 90° phase difference between the two clocks). You can then generate the output frequency by exclusive-ORing the two waveforms together. Because of the constant 90° phase offset, only one transition occurs at a time on the input of the exclusive-OR gate, effectively eliminating any glitches on the output waveform.&lt;br /&gt;&lt;br /&gt;Let’s see how it works by taking an example where the REF_CLK is divided by 3.&lt;br /&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;li&gt;Create a counter which is incremented on every rising edge of the input clock (REF_CLK) and the counter is reset to ZERO when the terminal count of counter reaches to (N-1). where N is odd number (3, 5, 7 and so on)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;li&gt;Take two toggle flip-flops and generate their enables as follows; T-FF1 is enabled when the counter reaches &#39;0&#39; and T-FF2 is enabled when the counter reaches (N/2)+1.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;li&gt;Output of T-FF1 is triggered on rising edge of REF_CLK and output of T-FF2 is triggered on the falling edge of REF_CLK.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;li&gt;The divide by N clock is derived by simply Ex-ORing both the output of T-FFs.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPie5kwQ4hNsxy17Cvt0iNeY7qv5mUtno4tui07COyUAofYMi1Ga3U1vudDc7fkjzGvxm1R0-6LA7H4VmgpEwAQng1Lm1G44AtEkj-U5YPhHEClLvUnwP2pnBFoI7OlQCNnn7cgljdA2A/s1600-h/clk_div.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPie5kwQ4hNsxy17Cvt0iNeY7qv5mUtno4tui07COyUAofYMi1Ga3U1vudDc7fkjzGvxm1R0-6LA7H4VmgpEwAQng1Lm1G44AtEkj-U5YPhHEClLvUnwP2pnBFoI7OlQCNnn7cgljdA2A/s320/clk_div.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5204893832218699426&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The above Figure shows the timing diagram for the above steps.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/3456487970511769861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/3456487970511769861' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/3456487970511769861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/3456487970511769861'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/clock-dividers.html' title='Clock Dividers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPie5kwQ4hNsxy17Cvt0iNeY7qv5mUtno4tui07COyUAofYMi1Ga3U1vudDc7fkjzGvxm1R0-6LA7H4VmgpEwAQng1Lm1G44AtEkj-U5YPhHEClLvUnwP2pnBFoI7OlQCNnn7cgljdA2A/s72-c/clk_div.JPG" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-4201045105628523633</id><published>2008-05-20T00:29:00.000-07:00</published><updated>2008-11-13T05:04:11.574-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reset"/><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><title type='text'>Asynchronous and Synchronous Reset</title><content type='html'>&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;ASYNCHRONOUS RESET&lt;/span&gt;&lt;br /&gt;&lt;div  style=&quot;text-align: justify;font-family:arial;&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;A fully asynchronous reset is one that both asserts and de-asserts a flip-flop asynchronously. Here, asynchronous reset refers to the situation where the reset net is tied to the asynchronous reset pin of the flip-flop. Additionally, the reset assertion and de-assertion is performed without any knowledge of the clock. This type of reset is very common but is very dangerous if the module boundary represents the FPGA boundary.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The biggest problem with the asynchronous reset circuit described above is that, it will work most of the time. However, if the edge of the reset deassertion is too close to the clock edge and violate the reset recovery time, then the output of FF goes to metastable. The reset recovery time is a type of setup timing condition on a flip-flop that defines the &lt;/span&gt;&lt;span style=&quot;font-style: italic;font-family:arial;&quot; &gt;minimum amount of time between the de-assertion of reset and the next rising clock edge&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt; as shown in Figure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;font-family: arial;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5I66GPbPfAae7lEF03NnqPfYbnk9eNd5OnbHH6ulNmlT34b3VKwYBcDKnA7ZRUArx9AVpgua7kn2BIhvsPT4HckDxt462lxGyZZdMMIb2fiUObI1k10DPjy4uSZFltOV25GrnIT9ip0/s1600-h/synchronous_reset.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5I66GPbPfAae7lEF03NnqPfYbnk9eNd5OnbHH6ulNmlT34b3VKwYBcDKnA7ZRUArx9AVpgua7kn2BIhvsPT4HckDxt462lxGyZZdMMIb2fiUObI1k10DPjy4uSZFltOV25GrnIT9ip0/s320/synchronous_reset.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5202361941870989650&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;It is important to note that reset recovery time violations &lt;/span&gt;&lt;span style=&quot;font-style: italic;font-family:arial;&quot; &gt;only&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt; occur on the de-assertion of reset and not the assertion. Therefore, fully asynchronous resets are not recommended.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;SYNCHRONOUS RESET&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The most obvious solution to the problem introduced in the preceding section is to fully synchronize the reset signal as you would any asynchronous signal.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdSkwxKEML4Gnllbm0pCyn6M5rv6fv35GMfVpZj-EDBbOoZ6bTztQmTBViS1bd6nFjJnemLxsykcuitVyE_6_mpD9HzuJApKZKa5CADSlFa5os87zqEGdM0Ee4DwDxDM91xlI91XTp-Is/s1600-h/synchronous_reset1.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdSkwxKEML4Gnllbm0pCyn6M5rv6fv35GMfVpZj-EDBbOoZ6bTztQmTBViS1bd6nFjJnemLxsykcuitVyE_6_mpD9HzuJApKZKa5CADSlFa5os87zqEGdM0Ee4DwDxDM91xlI91XTp-Is/s320/synchronous_reset1.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5202365085787050338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The advantage to this type of topology is that the reset presented to all functional flip-flops is fully synchronous to the clock and will always meet the reset recovery time. The interesting thing about this reset topology is actually not the deassertion of reset for recovery time but rather the assertion In the previous section, it was noted that the assertion of reset is not of interest, but that is true only for asynchronous resets and not necessarily with synchronous resets. Consider the scenario illustrated in Figure.&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbJllik2f-wPAIhCjJwGY2QdoIFtQ1_TMFoUydual5lGuNcs8-1M5xCv3Vnw2MAsv6vG9xawgAdd4qHS5DYLupsy8EaQ9MAybWOYgVHY0L9fkVdH_c8gWahzLClH33AlxoEtG4h7t0gl0/s1600-h/synchronous_reset_slow.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbJllik2f-wPAIhCjJwGY2QdoIFtQ1_TMFoUydual5lGuNcs8-1M5xCv3Vnw2MAsv6vG9xawgAdd4qHS5DYLupsy8EaQ9MAybWOYgVHY0L9fkVdH_c8gWahzLClH33AlxoEtG4h7t0gl0/s320/synchronous_reset_slow.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5202366034974822770&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Consider the scenario where the clock is running sufficiently slow, the reset is not captured due to the absence of a rising clock edge during the assertion of the reset signal. The result is that the flip-flops within this domain are never reset.&lt;br /&gt;&lt;br /&gt;Fully synchronous resets may fail to capture the reset signal itself (failure of assertion) depending on the nature of the clock.&lt;br /&gt;&lt;br /&gt;For this reason, fully synchronous resets are not recommended unless the capture of the reset signal (reset assertion) can be guaranteed by design.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Asynchronous Assertion, Synchronous De-assertion&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;A third approach that captures the best of both techniques is a method that asserts all resets asynchronously but de-asserts them synchronously.&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qKMPOj8dxASBhJrCKAN0HbLrvTZ7zTxQeA_SgbnU-NIxMnBv5wqILbqjVVmm79q5O01ZexeUC3g154qE9bl_cWvIfBfkoRhngVKooNHv6CIC3e3qWbxEnOHSmNK8lMn3V7aIew4kchg/s1600-h/sync_deass_async_ass.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qKMPOj8dxASBhJrCKAN0HbLrvTZ7zTxQeA_SgbnU-NIxMnBv5wqILbqjVVmm79q5O01ZexeUC3g154qE9bl_cWvIfBfkoRhngVKooNHv6CIC3e3qWbxEnOHSmNK8lMn3V7aIew4kchg/s320/sync_deass_async_ass.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5202368444451475842&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;In Figure, the registers in the reset circuit are asynchronously reset via the external signal, and all functional registers are reset at the same time. This occurs asynchronous with the clock, which does not need to be running at the time of the reset. When the external reset de-asserts, the clock local to that domain must toggle twice before the functional registers are taken out of reset. Note that the functional registers are taken out of reset only when the clock begins to toggle and is done so synchronously.&lt;br /&gt;&lt;br /&gt;A reset circuit that asserts asynchronously and de-asserts synchronously generally provides a more reliable reset than fully synchronous or fully asynchronous resets.&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The code for this synchronizer is shown below.&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;module&lt;/span&gt; reset_sync(&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;output reg&lt;/span&gt; rst_sync,&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;input &lt;/span&gt;clk, rst_n);&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;reg&lt;/span&gt; R1;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;always&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;@&lt;/span&gt;(&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;posedge&lt;/span&gt; clk &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;negedge&lt;/span&gt; rst_n)&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;!&lt;/span&gt;rst_n) &lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;br /&gt; begin&lt;/span&gt;&lt;br /&gt;     R1 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; 1&#39;b0;&lt;br /&gt;     rst_sync &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; 1&#39;b0; &lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;br /&gt; end  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 51, 255);font-family:arial;&quot; &gt;    else&lt;br /&gt; begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;        R1 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;= &lt;/span&gt;1&#39;b1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;        rst_sync &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;=&lt;/span&gt; R1;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 51, 255);font-family:arial;&quot; &gt;    end&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 51, 255);font-family:arial;&quot; &gt;endmodule&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/4201045105628523633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/4201045105628523633' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/4201045105628523633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/4201045105628523633'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/asynchronous-and-synchronous-reset.html' title='Asynchronous and Synchronous Reset'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5I66GPbPfAae7lEF03NnqPfYbnk9eNd5OnbHH6ulNmlT34b3VKwYBcDKnA7ZRUArx9AVpgua7kn2BIhvsPT4HckDxt462lxGyZZdMMIb2fiUObI1k10DPjy4uSZFltOV25GrnIT9ip0/s72-c/synchronous_reset.JPG" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-7823093184604910596</id><published>2008-05-17T09:53:00.000-07:00</published><updated>2008-05-17T10:13:46.895-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Verification"/><title type='text'>Developing Test Plan</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;What is the difference between Test Specification and a Test Plan?&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong style=&quot;color: rgb(0, 0, 102);&quot;&gt;Test Specification&lt;/strong&gt; – A detailed summary of what scenarios will be tested, how they will be tested, how often they will be tested and so on.  Example of a given feature include, if the USB2.0 hub receives the token packet followed by a data packet with a payload of 64 bytes for the bulk endpoint, it has to give the acknowledge back the host controller within the specified time as per USB2.0 specification.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 102);&quot;&gt;Test Plan&lt;/span&gt; - &lt;/span&gt;A collection of all test specifications for a given area.  The Test Plan contains a high-level overview of what is tested and what is tested by others for the given feature area.&lt;br /&gt;&lt;br /&gt;If you ask a tester on another team what is the difference between the two, you might receive different answers.  In addition, I use the terms interchangeably all the time at work, so if you see me using the term test plan, think of test specification.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify; color: rgb(0, 0, 102);&quot;&gt;&lt;strong&gt;Parts of a Test Specification&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify; color: rgb(0, 0, 102);&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; face=&quot;arial&quot; style=&quot;margin: 0in 0in 0pt; text-align: justify; font-family: arial;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; face=&quot;arial&quot; style=&quot;margin: 0in 0in 0pt; text-align: justify; font-family: arial;&quot;&gt;A Test Specification should consists of the following parts:&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; face=&quot;arial&quot; style=&quot;margin: 0in 0in 0pt; text-align: justify; font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;History / Revision&lt;/strong&gt; -&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;Who created the test spec?&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;Who were the developers and Program Managers (Usability Engineers, Documentation Writers, etc) at the time when the test specification was created?&lt;span style=&quot;&quot;&gt; &lt;/span&gt;When was it created?&lt;span style=&quot;&quot;&gt; &lt;/span&gt;When was the last time it was updated?&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;What were the major changes at the time of the last update?&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;Feature Description&lt;/strong&gt; – A brief description of what area is being tested.&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;What is tested?&lt;/strong&gt; – A quick overview of what scenarios are tested, so people looking through this specification know that they are at the correct place.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;What is not tested?&lt;/strong&gt; &lt;span style=&quot;&quot;&gt; &lt;/span&gt;- Are there any areas being covered by different people or different test specs?&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;If so, include a pointer to these test specifications.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;&quot;Nightly&quot; Test Cases&lt;/strong&gt; – A list of the test cases and high-level description of what is tested each night or whenever a new release becomes available.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;&lt;strong&gt;Breakout of Major Test Areas&lt;/strong&gt; &lt;span style=&quot;&quot;&gt; &lt;/span&gt;- This section is the most interesting part of the test specification where test plan writers arrange test cases according to what they are testing.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(0, 0, 102);&quot;&gt;Setting Test Case Priority&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;A Test Specification may have a couple of hundred test cases, depending on how the test cases were defined, how large the feature area is, and so forth.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;It is important to be able to query for the most important test cases (nightly), the next most important test cases (weekly), the next most important test cases (full test pass) and so forth.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;A sample prioritization for test cases may look like:&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; font-family: arial; text-align: justify;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div style=&quot;font-family: arial; text-align: justify;&quot;&gt; &lt;/div&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;Highest priority (Nightly) – Must run whenever a new release is available&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;Second highest priority (Weekly) – Other major functionality tests run once every three or four release&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin-top: 0in; font-family: arial; text-align: justify;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;Lower priority – Run once every major coding milestone&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/7823093184604910596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/7823093184604910596' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7823093184604910596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/7823093184604910596'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/developing-test-plan.html' title='Developing Test Plan'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1436736254097809592.post-6360094226723037780</id><published>2008-05-16T10:05:00.000-07:00</published><updated>2008-11-13T05:04:11.825-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Verification"/><title type='text'>Planning for Verification</title><content type='html'>&lt;span style=&quot;font-family: arial;font-family:arial;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;INTRODUCTION&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;Verification planning is most important part of verification, irrespective of the size of the design. Since, about 70% of the design cycle time is spent on verification, with proper verification planning some of the issues faced during the later stages of the design cycle can be easily avoided earlier.  Verification planning is described as a set of goals that needs to be verified. A verification plan would consists of: &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt; &lt;/div&gt;&lt;ol style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;li&gt;Functional requirements&lt;/li&gt;&lt;li&gt;Design requirements&lt;/li&gt;&lt;li&gt;Defining coverage goals and&lt;/li&gt;&lt;li&gt;Embedded firmware requirements&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Apart from these requirements, the verification plan should also focus on reusable methodology.&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;SPECIFICATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The specification is for capturing the requirements of the design. It is required to split the specification into &lt;span style=&quot;font-style: italic;&quot;&gt;Functional&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;Design requirements&lt;/span&gt;.  Functional requirements can be defined as the behavior required by the system while the Design requirements is used to check the implementation of the function against the design specification. For verifying the design requirements, bottom-up verification approach can be adapted to reduce the effort spent on SOC level. The Design requirements need to be split into &lt;span style=&quot;font-weight: bold;&quot;&gt;system-specific requirements&lt;/span&gt; and &lt;span style=&quot;font-weight: bold;&quot;&gt;peripheral specific requirements&lt;/span&gt;  . The peripheral-specific requirements are those which can be verified in module level.  Examples of peripheral-specific requirements are  &lt;/div&gt;&lt;ul style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;li&gt;Verifying all possible packet types for all HS/FS/LS for USB&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;li&gt;Verifying all possible baud rate for a UART&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p face=&quot;arial&quot; style=&quot;text-align: justify; font-family: arial;&quot;&gt;System specific requirements focus more on system level issues such as reset generation logic and clock generation logic can be completely verified only on system level. &lt;/p&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt; &lt;/div&gt;&lt;p face=&quot;arial&quot; style=&quot;text-align: justify; font-family: arial;&quot;&gt;Examples of system-specific requirements are&lt;/p&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt; &lt;/div&gt;&lt;ol style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;li&gt; &lt;p&gt;Verifying the system is properly reset for the different types of reset&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;Verifying the system for different types of power saving modes&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;Verifying the interconnectivity of clock&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;Verifying the connectivity to pads, interrupts, debug interfaces.&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: justify; font-family: arial;&quot;&gt; &lt;/div&gt;&lt;p style=&quot;font-family: arial; text-align: justify;&quot;&gt;With this approach, the peripheral is verified completely in the module level. The SOC level verification could then focus more on top-level issues such as &lt;span style=&quot;font-style: italic;&quot;&gt;interconnectivity, interrupt system behavior (response of interrupt for that peripheral), bus interfaces, I/O interfaces&lt;/span&gt;. The system level verification could focus more on system level issues and speed up the overall verification process.&lt;/p&gt;&lt;span style=&quot;font-weight: bold; font-family: arial;font-family:arial;&quot; &gt;COVERAGE HOLES&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;font-family:arial;&quot; &gt;It is good to have a complete coverage metric for all the peripherals, but this would mean additional overhead for simulators which would slow down the simulation speed drastically. There has always been a compromise for coverage against the simulation speed. Hence it becomes necessary to understand the complexity of the design before identifying the coverage points.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;font-family:arial;&quot; &gt;For SOC verification it would be good to have interconnectivity coverage, coverage for interrupts, system-specific behavior such as power saving features, recovery sequences, reset and clock (power saving features), and system buses.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;EMBEDDED F/W REQUIREMENTS&lt;/p&gt; &lt;p style=&quot;font-family: arial;&quot; face=&quot;arial&quot;&gt;An embedded firmware can be described as a piece of software embedded into the ROM/EPROM which would initialize the chip into a &lt;span style=&quot;font-style: italic;&quot;&gt;defined state on reset&lt;/span&gt;. This piece of software could contain Startup sequences, bootstrap loaders, memory test routines, tests for production etc. It can be seen that this software is very complex and the corresponding verification is a complex task. Unlike the verification of peripherals, firmware verification is restricted to SOC level which further increases the complexity of verification. So how do we ensure this piece of software works? For firmware verification, it is necessary to have a good coverage metric. During the verification planning phase, we need to identify all the coverage points with iterative process of review from the members involved in the development of concept and firmware. Normally the firmware verification plan is a list of coverage items that needs to be addressed in the process.&lt;/p&gt;&lt;p style=&quot;font-family: arial;&quot;&gt;Figure shows the coverage points for firmware ( Thanks to &lt;a href=&quot;http://www.us.design-reuse.com/&quot;&gt;http://www.us.design-reuse.com&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;&lt;a style=&quot;font-family: arial;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqhgb6wfnNulFcwAoxmDOipc5PBoRRZL-X8MJsrMyBusg-Az2tHf8iDd38FmB7txIaBjEWF4prZhwGwlF9-ngX51Z6DIpOMHHrAJssO9KqiPgcq7uoZvjTquTD6bwSRnSeOB2r0j0weK8/s1600-h/firmware.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqhgb6wfnNulFcwAoxmDOipc5PBoRRZL-X8MJsrMyBusg-Az2tHf8iDd38FmB7txIaBjEWF4prZhwGwlF9-ngX51Z6DIpOMHHrAJssO9KqiPgcq7uoZvjTquTD6bwSRnSeOB2r0j0weK8/s320/firmware.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5201034341709992226&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;font-family: arial;&quot;&gt;An example of Firmware code&lt;/p&gt; &lt;div  style=&quot;margin-left: 40px; font-weight: bold; font-family: arial;font-family:arial;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;If&lt;/span&gt; (HWCFG &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; “010”) &lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;then&lt;/span&gt; &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;MEM(status) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; software_boot; &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;Software_start(); &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;else if &lt;/span&gt;(HWCFG &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;==&lt;/span&gt; “011”) &lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;then &lt;/span&gt;&lt;/span&gt;  &lt;span&gt;&lt;br /&gt;MEM(status) = ext_boot; &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;Ext_start(); &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span&gt; MEM(status) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;=&lt;/span&gt; int_boot; &lt;/span&gt;  &lt;span&gt;&lt;br /&gt;Internal_boot();&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: rgb(51, 51, 255);&quot;&gt;end if&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt; &lt;p style=&quot;font-family: arial;&quot;&gt;The firmware code can then be translated to a flow chart which gives the verification engineer an overview of the software flow.&lt;/p&gt;&lt;a style=&quot;font-family: arial;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-uLW1XM_lgDDvv7ZXDpFoAnhsXL0OzpXyhAh8tOuhTYlz9Exifg50zVy5EbOLrkASkhw6c6Z69LlIMg4-KQcjrardMrMISE15ccy8JiA04mBaYBaEWeRH0hds_h09EotUgk4coLphpk/s1600-h/Flowchart.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-uLW1XM_lgDDvv7ZXDpFoAnhsXL0OzpXyhAh8tOuhTYlz9Exifg50zVy5EbOLrkASkhw6c6Z69LlIMg4-KQcjrardMrMISE15ccy8JiA04mBaYBaEWeRH0hds_h09EotUgk4coLphpk/s320/Flowchart.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5201034560753324338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Conclusion&lt;/span&gt; &lt;/p&gt;&lt;p style=&quot;font-family: arial; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: arial;font-family:arial;&quot; &gt;Verification plan gives an early estimate on effort, resource required, reuse percentage and coverage goals. Verification closure is an iterative process where the plan is measured against the implementation and coverage goals. Verification reuse can be achieved with proper planning, reusable verification environment and proper documentation.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chipverification.blogspot.com/feeds/6360094226723037780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1436736254097809592/6360094226723037780' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6360094226723037780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1436736254097809592/posts/default/6360094226723037780'/><link rel='alternate' type='text/html' href='http://chipverification.blogspot.com/2008/05/planning-for-verification.html' title='Planning for Verification'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqhgb6wfnNulFcwAoxmDOipc5PBoRRZL-X8MJsrMyBusg-Az2tHf8iDd38FmB7txIaBjEWF4prZhwGwlF9-ngX51Z6DIpOMHHrAJssO9KqiPgcq7uoZvjTquTD6bwSRnSeOB2r0j0weK8/s72-c/firmware.JPG" height="72" width="72"/><thr:total>5</thr:total></entry></feed>