<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUENQHgyfip7ImA9WhRXEUw.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807</id><updated>2011-12-17T15:58:11.696+05:30</updated><category term="Utility" /><category term="IEEE" /><category term="TechToons" /><category term="Sample Codes" /><category term="Coverage" /><category term="eBooks" /><category term="Implementation" /><category term="Specman Commands" /><category term="Did You Know" /><category term="IntelliGen" /><category term="Jobs" /><category term="Debugging" /><category term="Interview" /><category term="OVM" /><category term="News" /><category term="Papers" /><category term="Companies" /><category term="Books" /><title>Verification Blog</title><subtitle type="html">This blog is all about verification of Digital ASIC and VLSI circuits. I'll discuss about the different verification methodologies, ways to improve your verification strategy, making verification more efficient and less time consuming. Few tricks and tips will also be given especially for "e" user for Specman to implement faster and better verification environment.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://digitalverification.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/VerificationBlog" /><feedburner:info uri="verificationblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>VerificationBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0QBRn09fyp7ImA9WxFUE0Q.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-3783340436061093436</id><published>2010-06-24T22:35:00.002+05:30</published><updated>2010-06-24T22:39:17.367+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T22:39:17.367+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><title>Cadence's Labs on Cloud</title><content type="html">&lt;div style="text-align: justify;"&gt;Have you ever wanted to try out any Cadence tools or VIPs evaluation without going through the process of getting evaluation licenses, software download and installation and all that logistic stuff? Now you can do all that without all that hassles. Cadence has tied with Xuropa for their cloud computing platform so that all you need is high speed broadband for any Cadence tools/VIPs  evaluation.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Using &lt;a href="http://www.xuropa.com/company.php?comp_id=35"&gt;Xuropa Online Labs&lt;/a&gt;, you can run an evaluation using the Incisive Enterprise simulator, following instructions for a self-paced demo. All the software runs on Xuropa servers, and there is nothing to purchase, license, install, download, or upload.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can read more about it at at &lt;a href="http://www.cadence.com/Community/blogs/ii/archive/2009/09/30/cadence-s-xuropa-experience-a-new-approach-to-ip-evaluation.aspx"&gt;Cadence's Community Blog Post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-3783340436061093436?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/RmTSbBU1IzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/3783340436061093436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=3783340436061093436&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3783340436061093436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3783340436061093436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/RmTSbBU1IzI/cadences-labs-on-cloud.html" title="Cadence's Labs on Cloud" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2010/06/cadences-labs-on-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERnY5fCp7ImA9WxFQE0w.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-8345174297886254782</id><published>2010-05-08T16:40:00.002+05:30</published><updated>2010-05-08T16:53:27.824+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-08T16:53:27.824+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Utility" /><title>Generic/Parameter support in Mixed HDL Hierarchy Code Generator</title><content type="html">I hope this small utility is helpful. I've thought one small enhancement to it. Now, you can select whether you need VHDL Generic or Verilog Parameterized examples code by selecting the checkbox. Please feel free to comment/enhancement. You can visit &lt;a href="http://www.sandipgor.com/hdl_gen.html"&gt;http://www.sandipgor.com/hdl_gen.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-8345174297886254782?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/p8Y_Y_PMC7Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/8345174297886254782/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=8345174297886254782&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8345174297886254782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8345174297886254782?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/p8Y_Y_PMC7Y/genericparameter-support-in-mixed-hdl.html" title="Generic/Parameter support in Mixed HDL Hierarchy Code Generator" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2010/05/genericparameter-support-in-mixed-hdl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UESHY9eSp7ImA9WxFTGEw.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-8608532268498833469</id><published>2010-04-09T18:38:00.004+05:30</published><updated>2010-04-09T18:50:09.861+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-09T18:50:09.861+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Utility" /><title>Mixed HDL Hierarchy Code Generator</title><content type="html">&lt;div style="text-align: justify;"&gt;Sometime back, I wanted to experiment Specman environment with Mixed HDL (Verilog + VHDL) design. I wanted to have a simple 4 level hierarchical design with simple port connections. It took some time for me  to build it as I need to refer VHDL and Verilog syntax. That time one thought came to my mind to have simple utility which can build this env very quickly so that I don't need to invest time to clean up the compilation errors.&lt;br /&gt;&lt;br /&gt;Keeping this simple requirement in mind, I decided to build such a simple online tool which can be used by everybody.&lt;br /&gt;&lt;br /&gt;I've created one Javascript based tool which can generate Mixed HDL Hierarchical design.Its link is &lt;a rel="nofollow" target="_blank" href="http://www.sandipgor.com/hdl_gen.html"&gt;http://www.sandipgor.com/hdl_ gen.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've tried to keep it simple. You can use "Add VHDL" and "Add Verilog" buttons to add VHDL or Verilog instance into hierarchy. "Level Up" and "Level Down" buttons can be used to increase/decrease current level where you want to add instances. Finally "Generate" button can be used to dump the hierarchical HDL code into the two text box placed right side of the window. I've also kept "Clear Code" and "Clear Hierarchy" buttons to clean up the relevent data. "Undo" button is useful  to undo the last change. Remember, there is no "Redo" button though.&lt;br /&gt;&lt;br /&gt;I hope you will find it useful. Please feel free to use it.&lt;br /&gt;&lt;br /&gt;Any  suggestion/feedback is welcome.&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-8608532268498833469?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/WxcaXj6ZXTs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/8608532268498833469/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=8608532268498833469&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8608532268498833469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8608532268498833469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/WxcaXj6ZXTs/mixed-hdl-hierarchy-code-generator.html" title="Mixed HDL Hierarchy Code Generator" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2010/04/mixed-hdl-hierarchy-code-generator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFRX06eip7ImA9WxJUEk0.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-3048179219006747098</id><published>2009-07-10T11:30:00.002+05:30</published><updated>2009-07-10T11:36:54.312+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-10T11:36:54.312+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><title>DigitalVerification Blog is noticed by Verification Community</title><content type="html">&lt;div style="text-align: justify;"&gt;I am glad and thankful to the verification community for appreciating my small contribution towards the verification world. This blog has been noticed by &lt;a href="http://www.cadence.com/Community/blogs/fv/archive/2009/07/03/another-new-blog-on-e-specman.aspx?postID=18901"&gt;Cadence Team Specman&lt;/a&gt; and recoginized as useful resource.&lt;br /&gt;&lt;a href="http://chipdesignmag.com/sld/blog/2009/07/08/blog-review-july-8/"&gt;ChipDesignMag.com&lt;/a&gt; also recognized this blog saying "if you live and breathe in this world, here’s an additional resource"&lt;br /&gt;I'll keep posting and contributing to the verification world.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-3048179219006747098?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/GOjNIFHrieA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/3048179219006747098/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=3048179219006747098&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3048179219006747098?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3048179219006747098?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/GOjNIFHrieA/digitalverification-blog-is-noticed-by.html" title="DigitalVerification Blog is noticed by Verification Community" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/07/digitalverification-blog-is-noticed-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YGR307eCp7ImA9WxJWGU8.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-920170340464156012</id><published>2009-06-25T12:50:00.015+05:30</published><updated>2009-06-25T14:42:06.300+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-25T14:42:06.300+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IntelliGen" /><title>IntelliGen - Introduction</title><content type="html">&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;div style="text-align: justify;"&gt;IntelliGen is around for quite a while, but I've observed that most of the Specman users are less interested in/aware of it. Probably they are very comfortable with old generation engine known as PGen. Even I am quite comfortable with PGen and I am used to think generation in PGen way. But, when I went through IntelliGen, it also looked conviencing. But it will take some time to penetrate and Cadence has to push it hard so that people start thinking about generation IntelliGen way. :)&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;IntelliGen is a new generation engine introduced in Specman 6.1 version onwards. It is a new generation engine which uses different generation algorithm from Specman's original generation engine PGen. Though PGen remains default generation engine, user can switch to IntelliGen by setting a configuration flag before loading any code.&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Specman&gt;config gen -default_generator=IntelliGen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;IntelliGen is easier to use as there is no generation dependencies on the fields declaration order. In PGen, fields which are declared first are generated first unless there are specific generation order mentioned using "keep gen before" or "readonly()". With a new and powerful debugger, its very easy to debug generation errors for IntelliGen. The messages which are displayed when any generation errors occur are more informative than whatever is displayed for PGen. Cadence also claims that performance can be increased by 2 to 5 times compared to PGen. IntelliGen solves some constraint more logically and intelligently compared to PGen. We will see all these in few examples.&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Generation Order Independence&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;In the code shown below, we want to generate &lt;i&gt;addr&lt;/i&gt; based on &lt;i&gt;addr_hi_lo&lt;/i&gt; value. So you put constraint over &lt;i&gt;addr_hi_lo&lt;/i&gt; and &lt;i&gt;addr&lt;/i&gt;. But since &lt;i&gt;addr&lt;/i&gt; is declared first, it will be generated first in PGen generation engine. Due to that, there are very little chance that it is either equal to &lt;i&gt;addr_hi&lt;/i&gt; or &lt;i&gt;addr_lo&lt;/i&gt;. So, either of the constraint on &lt;i&gt;addr_hi_lo&lt;/i&gt; does not satisfy and PGen will not be able to solve it. Though the constraint is bidirectional, since &lt;i&gt;addr&lt;/i&gt; is declared first, it is generated first and that makes constraint unidirectional.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Same code will not cause any generation error if IntelliGen is used because, there is not generation dependency on declaration order.&lt;/div&gt;&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;define addr_hi 0xFF;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;define addr_lo 0x05;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type addr_kind : [LO, HI];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     addr       : list of uint (bits: 8);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     addr_hi_lo : addr_kind;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep addr.size() == 10;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep for each in (addr)&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent4"&gt;               addr_hi_lo == HI =&gt; it == addr_hi;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent4"&gt;               addr_hi_lo == LO =&gt; it == addr_lo;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     post_generate() is also { print addr; };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;Results with PGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;*** Error: Contradiction:&lt;br /&gt;A contradiction has occurred when generating sys-@0.addr_hi_lo :&lt;br /&gt;Previous constraints reduced its range of possible values,&lt;br /&gt; then the following constraint contradicted these values:&lt;br /&gt;   addr_hi_lo == LO =&gt; it == addr_lo;                 at line 20 in @temp&lt;br /&gt; Reduced: sys-@0.addr_hi_lo into []&lt;br /&gt;To see details, reload and rerun with "collect gen"&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Results with IntelliGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;addr =  (10 items, dec):&lt;br /&gt;           5   5    5   5   5   5    5   5   5   5   .0&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Better Solvability&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Further to that, IntelliGen takes good care of &lt;i&gt;soft&lt;/i&gt; and &lt;i&gt;soft select&lt;/i&gt; constraints. When &lt;i&gt;soft select&lt;/i&gt; constraints are added for a field which already has &lt;i&gt;soft&lt;/i&gt; constraint defined previously, PGen will ignore all the previously defined &lt;i&gt;soft&lt;/i&gt; constraints even there are no contradiction between &lt;i&gt;soft&lt;/i&gt; and &lt;i&gt;soft select&lt;/i&gt; constraints. Whereas IntelliGen takes care of both constraints as long as they do not contradict. If they contradict, then IntelliGen ignores &lt;i&gt;soft&lt;/i&gt; constraint over &lt;i&gt;soft select&lt;/i&gt;. Take a look at the following example and results generated using PGen and IntelliGen.&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type addr_kind : [LO, HI, OTHERS];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct operation_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     addr_hi_lo : addr_kind;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep soft addr_hi_lo in [HI, LO];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend operation_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     keep soft addr_hi_lo == select&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          10 : LO;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          80 : OTHERS;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          10 : HI;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     op : list of operation_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op.size() == 10;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     post_generate() is also { print op; };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;Results with PGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;op =&lt;br /&gt;item   type        addr_hi_lo&lt;br /&gt;                                                             &lt;br /&gt;0.     operation*  OTHERS&lt;br /&gt;1.     operation*  OTHERS&lt;br /&gt;2.     operation*  OTHERS&lt;br /&gt;3.     operation*  OTHERS&lt;br /&gt;4.     operation*  HI&lt;br /&gt;5.     operation*  OTHERS&lt;br /&gt;6.     operation*  OTHERS&lt;br /&gt;7.     operation*  HI&lt;br /&gt;8.     operation*  HI&lt;br /&gt;9.     operation*  OTHERS&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Results with IntelliGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;op =&lt;br /&gt;item   type        addr_hi_lo&lt;br /&gt;                                                             &lt;br /&gt;0.     operation*  LO&lt;br /&gt;1.     operation*  LO&lt;br /&gt;2.     operation*  HI&lt;br /&gt;3.     operation*  HI&lt;br /&gt;4.     operation*  LO&lt;br /&gt;5.     operation*  HI&lt;br /&gt;6.     operation*  HI&lt;br /&gt;7.     operation*  LO&lt;br /&gt;8.     operation*  LO&lt;br /&gt;9.     operation*  LO&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Better Distribution&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Because of improved constraint solving ability, IntelliGen gives better distribution of generated values within the range.&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;define addr_hi 0xFF;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;define addr_lo 0x05;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type op_kind : [LO, HI, OTHERS];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct operation_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     addr     : uint (bits: 8);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     op_hi_lo : op_kind;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op_hi_lo == HI =&gt; addr == addr_hi;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op_hi_lo == LO =&gt; addr == addr_lo;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op_hi_lo == OTHERS =&gt; addr in [addr_lo+1..addr_hi-1];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     op : list of operation_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op.size() == 10;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     post_generate() is also { print op; };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;Results with PGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;op =&lt;br /&gt;item   type        addr        op_hi_lo&lt;br /&gt;                                                             &lt;br /&gt;0.     operation*  0x57        OTHERS&lt;br /&gt;1.     operation*  0x12        OTHERS&lt;br /&gt;2.     operation*  0x80        OTHERS&lt;br /&gt;3.     operation*  0xbe        OTHERS&lt;br /&gt;4.     operation*  0x7f        OTHERS&lt;br /&gt;5.     operation*  0x64        OTHERS&lt;br /&gt;6.     operation*  0x0f        OTHERS&lt;br /&gt;7.     operation*  0xab        OTHERS&lt;br /&gt;8.     operation*  0x6e        OTHERS&lt;br /&gt;9.     operation*  0xcd        OTHERS&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Results with IntelliGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;op =&lt;br /&gt;item   type        addr        op_hi_lo&lt;br /&gt;                                                             &lt;br /&gt;0.     operation*  0xff        HI&lt;br /&gt;1.     operation*  0xc3        OTHERS&lt;br /&gt;2.     operation*  0xff        HI&lt;br /&gt;3.     operation*  0x05        LO&lt;br /&gt;4.     operation*  0x05        LO&lt;br /&gt;5.     operation*  0x05        LO&lt;br /&gt;6.     operation*  0x1d        OTHERS&lt;br /&gt;7.     operation*  0x6a        OTHERS&lt;br /&gt;8.     operation*  0x1a        OTHERS&lt;br /&gt;9.     operation*  0xff        HI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Better Debug Information&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;When any generation error occurs, IntelliGen issues elaborated generation error message which is very useful to pin point the problematic area of the code. Look at the below code.&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type addr_kind : [LO, HI, OTHERS];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct operation_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     addr_hi_lo : addr_kind;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep addr_hi_lo in [HI, LO];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     op : list of operation_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          keep op.size() == 10;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     keep for each in (op)&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          index in [0]    =&gt; it.addr_hi_lo == LO;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          index in [1..8] =&gt; it.addr_hi_lo == OTHERS;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;          index in [9]    =&gt; it.addr_hi_lo == HI;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;     post_generate() is also { print op; };&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;Error Message with PGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;*** Error: ERR_GEN_OR_WITH_NO_GEN_ALT: After static analysis, the following constraint&lt;br /&gt;consists of non-enforceable constraints only:&lt;br /&gt;   index in [1..8] =&gt; it.addr_hi_lo == OTHERS;      at line 19 in @temp&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Error Message with IntelliGen:&lt;/u&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;*** Error: Contradiction when generating sys&lt;br /&gt;&lt;br /&gt;No set of values exists for:&lt;br /&gt;op[0x0..0xffffffff].addr_hi_lo&lt;br /&gt;&lt;br /&gt;that obey the constraints:&lt;br /&gt;keep addr_hi_lo in [0x0..0x1]                   at line 7 in @temp ,&lt;br /&gt;index in [0x1..0x8] =&gt; it.addr_hi_lo == OTHERS    at line 19 in @temp&lt;br /&gt;&lt;br /&gt;with the input:&lt;br /&gt;index = 0x1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;By now, you might have realized the improvement of IntelliGen over PGen. I hope this is useful basic information about IntelliGen. I'll cover IntelliGen Technical Concepts in my next post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-920170340464156012?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/EktF1CvUYcM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/920170340464156012/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=920170340464156012&amp;isPopup=true" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/920170340464156012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/920170340464156012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/EktF1CvUYcM/font-definitions-font-face-font.html" title="IntelliGen - Introduction" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/06/font-definitions-font-face-font.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMQXg8eip7ImA9WxJWEEk.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-9165326051361480918</id><published>2009-06-15T10:57:00.009+05:30</published><updated>2009-06-15T11:26:20.672+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-15T11:26:20.672+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>Specman/Verification Books</title><content type="html">&lt;style type="text/css"&gt;&lt;!-- .Title    { background-color:#335577; color:white; text-align:center; font-size:28} .BookName { background-color:#558866; color:white; text-align:center; } .left     { background-color:#FFFFFF; color:black; text-align:left;   width:50} .right    { background-color:#FFFFFF; color:black; text-align:left} .RI       { background-color:#558866; color:white; text-align:center; font-size:10; font-family:courier} A.RI:link    {text-decoration: underline; color: white;} A.RI:visited {text-decoration: underline; color: white;} A.RI:active  {text-decoration: underline; color: white;} A.RI:hover   {text-decoration: underline; color: white;} --&gt;&lt;/style&gt; &lt;table border=1&gt;&lt;tr&gt;&lt;td class='Title'&gt;&lt;h2&gt;Specman Books&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0131413090.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Design Verification with e&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Samir Palnitkar&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0131413090&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Prentice Hall Professional Technical Reference&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;Auguts, 2003&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;416&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=Cr-t30K9vkwC&amp;printsec=frontcover&amp;dq=Design+Verification+with+e'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/1402080239.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;The e-Hardware Verification Language&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Sasan Iman and Sunita Joshi&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;1402080239&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Kluwer Academic Publishers&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;May, 2004&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;349&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=YllldOOHB3AC&amp;printsec=frontcover&amp;dq=The+e-Hardware+Verification+Language'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0123742102.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Aspect-Oriented Programming with the e Verification Language: A Pragmatic Guide for Testbench Developers&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;David Robinson&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0123742102&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Morgan Kaufmann Publishers&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt; August, 2007&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;244&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=AnvXI-0d9hAC&amp;dq=Aspect-Oriented+Programming+with+the+e+Verification+Language:+A+Pragmatic+Guide+for+Testbench+Developers'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;table border=1&gt;&lt;tr&gt;&lt;td class='Title'&gt;&lt;h2&gt;Verification Books&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387381511.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Metric Driven Design Verification: An Engineer's and Executive's Guide to First Pass Success&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Hamilton B. Carter; Shankar G. Hemmady&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387381511&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer Verlag&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;May, 2007&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;361&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=HgZWmY9TTVsC&amp;printsec=frontcover&amp;dq=Metric+Driven+Design+Verification:+An+Engineer%27s+and+Executive%27s+Guide+to+First+Pass+Success'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/1402074018.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Writing Testbenches: Functional Verification of HDL Models&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Janick Bergeron&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;1402074018&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Kluwer Academic Publishers&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;February, 2003&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;512&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=Fht_zBfoJQIC&amp;printsec=frontcover&amp;dq=Writing+Testbenches:+Functional+Verification+of+HDL+Models'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387286012.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Effective Functional Verification: Principles and Processes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Srivatsa Vasudevan&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387286012&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer Verlag&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;June, 2006&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;256&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=wNWib4yqisUC&amp;printsec=frontcover&amp;dq=Effective+Functional+Verification:+Principles+and+Processes'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0750676175.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Principles of Functional Verification&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Andrea S. Meyer&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0750676175&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Newnes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;November, 2003&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;240&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=qaIiX3hYWL4C&amp;pg=PP1&amp;dq=Principles+of+Functional+Verification'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;table border=1&gt;&lt;tr&gt;&lt;td class='Title'&gt;&lt;h2&gt;SystemVerilog Books&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0981656218.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Step-by-step Functional Verification with SystemVerilog and OVM&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Sasan Iman&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0981656218&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Hansen Brown Publishing&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;May, 2008&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;520&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=uls5MQAACAAJ&amp;dq=Step-by-step+Functional+Verification+with+SystemVerilog+and+OVM'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387270361.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;SystemVerilog for Verification: A Guide to Learning the Testbench Language Features&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Spear, Chris&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387270361&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;June, 2007&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;429&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=tJYK-_-OV6QC&amp;pg=PR3&amp;dq=SystemVerilog+for+Verification:+A+Guide+to+Learning+the+Testbench+Language+Features'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387255389.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Verification Methodology Manual For Systerm Verilog&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Andy Nightingale, Alan Hunter, Eduard Cerny and Janick Bergeron&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387255389&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer-Verlag New York Inc&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;2005&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;503&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=dcET3kKtmH4C&amp;pg=PT1&amp;dq=Verification+Methodology+Manual+For+System+Verilog#PPP1,M1'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387292217.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Writing Testbenches Using SystemVerilog&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Janick Bergeron&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387292217&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer-Verlag New York Inc&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;2006&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;412&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=ZWZAkWkNy3cC&amp;printsec=frontcover&amp;dq=Writing+Testbenches+Using+SystemVerilog'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387260498.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;A Practical Guide for System Verilog Assertions&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Srikanth Vijayaraghavan and Meyyappan Ramanathan&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387260498&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer Verlag&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;2005&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;334&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=wWJmy6X3cbQC&amp;printsec=frontcover&amp;dq=A+Practical+Guide+for+System+Verilog+Assertions'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &amp;nbsp; &lt;table&gt; &lt;tr width=100&gt;&lt;td&gt;&lt;img border=1 src='http://sandipgor.googlepages.com/0387717382.jpg' width=136 height=210&gt;&lt;/td&gt; &lt;td valign='top' height=210 align='left'&gt; &lt;table class='books_table' width=230 height=210 border=0 cellpadding=1&gt; &lt;tr&gt;&lt;td class='BookName' colspan=2&gt;&lt;b&gt;Hardware Verification With SystemVerilog: An Object-oriented Framework&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Author :&lt;/b&gt;&lt;/td&gt;         &lt;td class='right'&gt;Mike Mintz and Robert Ekendahl&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;ISBN&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;0387717382&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publisher&lt;/b&gt;&lt;/td&gt;        &lt;td class='right'&gt;Springer&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Publish Date&lt;/b&gt;&lt;/td&gt;     &lt;td class='right'&gt;May, 2007&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='left'&gt;&lt;b&gt;Page&lt;/b&gt;&lt;/td&gt;             &lt;td class='right'&gt;314&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class='RI'&gt;&lt;a target=_blank class='RI' href='http://books.google.com.sg/books?id=Mawfv_drBJoC&amp;printsec=frontcover&amp;dq=Hardware+Verification+With+SystemVerilog:+An+Object-oriented+Framework'&gt;Preview&lt;/a&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/table&gt; &amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-9165326051361480918?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/PjQLeJM93lc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/9165326051361480918/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=9165326051361480918&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/9165326051361480918?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/9165326051361480918?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/PjQLeJM93lc/specmanverification-books_15.html" title="Specman/Verification Books" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/06/specmanverification-books_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICRns-eyp7ImA9WxJQEkg.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-7398863904508754737</id><published>2009-05-25T16:38:00.004+05:30</published><updated>2009-05-25T17:09:27.553+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-25T17:09:27.553+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sample Codes" /><title>randc kind of implementation in e</title><content type="html">&lt;div style="text-align: justify;"&gt;When I went through SystemVerilog constructs, one of the unique construct I found out was &lt;span style="font-style: italic;"&gt;randc&lt;/span&gt;. Cyclic randomization sometimes helps you generating all unique combinations before repeating it. One classic usage example of &lt;span style="font-style: italic;"&gt;randc&lt;/span&gt; is to inject all the sequences into DUT at least once without repeating it again. So, I was wondering if it is possible to implement it in &lt;span style="font-style: italic;"&gt;e.&lt;/span&gt; I realized that though you can not generate the item based on its previously generated values, you can have some workaround for that using list psudo methods. There are all_values() and is_a_permutation() psudo methods which can be used for this purpose.&lt;br /&gt;&lt;br /&gt;Let me explain the logic to implement that classic usage example to inject all the sequences into DUT without repeating it. If we somehow generate a list of unique sequence kinds randomly, we can take that list items one-by-one and generate the sequence based on that kind. So, to generate the unique yet random list of sequence kind, we can use above mentioned two  list psudo methods. Take a look at the following code snippet.&lt;br /&gt;&lt;/div&gt;&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type seq_type_t : [SEQ_A, SEQ_B, SEQ_C, SEQ_D, SEQ_E, SEQ_F, SEQ_G];&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend MAIN my_sequence_s&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt; seq_randc : list of seq_type_t;&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;  keep seq_randc.is_a_permutation(all_values(seq_type_t));&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt; !seq : my_sequence_s;&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt; body() @driver.clock is only&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt; {&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;  gen_seq_randc();&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;  for i from 0 to seq_randc.size() - 1&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;  {&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent4"&gt;   do seq { keeping .kind == seq_randc[i]; }&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;  };&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt; };&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;all_values(seq_type_t)&lt;/span&gt; statement will return a list which will have all the unique values of scaler type &lt;span style="font-style: italic;"&gt;seq_type_t&lt;/span&gt;. &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;is_a_permutation()&lt;/span&gt; will make sure that &lt;span style="font-style: italic;"&gt;seq_ranc&lt;/span&gt; list has random  but all the fields of the list returned by &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;all_values(seq_type_t)&lt;/span&gt; statement. Thus, we have a list which has all the random values of the sequence kind. Now, we can loop through this list one by one and generate a seq and push it to the DUT.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-7398863904508754737?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/8CBIqixjHKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/7398863904508754737/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=7398863904508754737&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7398863904508754737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7398863904508754737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/8CBIqixjHKQ/randc-kind-of-implementation-in-e.html" title="randc kind of implementation in e" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/05/randc-kind-of-implementation-in-e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAEQnoyeSp7ImA9WxJRGUU.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-5599865486660131724</id><published>2009-05-22T14:27:00.024+05:30</published><updated>2009-05-22T15:35:03.491+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-22T15:35:03.491+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Specman Commands" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><title>Less known and less used Specman commands</title><content type="html">There are quite a few Specman commands which are handy when it comes to debugging. Here I tried to summarize few less known but useful Specman commands. Here we go.&lt;ol&gt;&lt;li&gt;If you have verification environment loaded on Specman and one method is extended in multiple files and you want to see all the extension of that method in a single place, "collect" command is what you are looking for.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; collect sys.mystruct.monitor&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; collect sys.run&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt; &lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;    File temp.erld - created by collecting:&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;    sys.run    (after module specman)&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;----------------------- Reset sys.run:&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys {&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;    run(&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;        ) is as was after specman;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;----------------------- From temp.e at line 6:&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys {&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;        run() is also&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;        {&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent3"&gt;                var x : mystruct_s;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent3"&gt;                gen x;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;        };&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;----------------------- End of sys.run&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;If you want to debug temporal expression, you would like to visualise how different events are triggered. Event chart is basic but sometimes useful for debugging temporal expressions. To see the events you first have to collect events you are interested in by using "collect events" Specman command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; collect events *.*&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; collect events sys.mystruct.* //collects all events for the instance sys.mystruct&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; collect events mystruct_s.* //collects all the events of struct mystruct_s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;If you want to see the events triggered during simulation, you can use Specman command "show events" after collecting the events as mentioned above.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show events&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show events 100 //This command shows events since time 100&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show events 100..150 //This command shows events in the time range 100..150&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show events -chart //Pops up event chart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;If you want to have a summarized report about the events count, if it is associated with cover group, its source etc, you can use "show events def" command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show events def sys.any&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;    count   echo    col   covr  name             source&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;0   10000  FALSE   TRUE  FALSE  sys.any          @sn_te_tick&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Executing actions on command line. You can define variables or call methods or start a TCMs. (you can not call a TCM on command line). Remember, you can not give "gen" action on command line, but you can call a method which has gen action in it.&lt;/li&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var x : uint(bits: 4) = 5;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var y : uint = x + 10;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; print x + y;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; sys.non_tcm()&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; start sys.tcm()&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; sys.non_tcm_with_arg(4, TRUE)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;You can search/grep within the loaded files using "search" command&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; search mystruct_s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;You can open a file (known as "module" in Specman terms) in source browser by using "source" command. It will open a source browser with that perticular line number into focus.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;syntax: source &lt;filename&gt; &lt;line&gt;&lt;/line&gt;&lt;/filename&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; source mystruct.e 50&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;You can run unix commands using "shell" command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;syntax: shell &lt;unix&gt;&lt;/unix&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; shell echo $SPECMAN_PATH&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; shell pwd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;You can also get the value of define by issuing "show define" command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;syntax: show define [-v] [-e] &lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show define -v "*WIDTH*"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;If you want to know what are the modules that are loaded you can use "show modules" command.&lt;/li&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show modules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;You can get unix environment variables value within your e code by using get_symbol() method.&lt;/li&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;" class="codefrag"&gt;&lt;div class="indent1"&gt;my_method() is&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;outf ("SPECMAN_PATH=%s",get_symbol("SPECMAN_PATH"));&lt;/div&gt;&lt;/div&gt; &lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;12. If you wish to execute specman command in e code, then you can use specman() method as shown below.&lt;/li&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;pre_generate() is&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;specman("break on error");&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;If you wish to execute unix command from your e code, you can use output_from() method.&lt;/li&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;my_method() is&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;var list_of_files: string;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;list_of_files = output_from("ls");&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent2"&gt;print list_of_files;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;" class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;If you want to uderstand port binding in Specman, use "show ports" command.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You can use "trace bind' to follow the binding process&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you have executed a set of commands and want to see the history of executed commands, you can use "show redo" command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt; &lt;/span&gt;show redo&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;show redo&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;The redo buffer (default is 'redo 0..') =&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;0.    "restore specman.esv"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;1.    "load temp.e"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;2.    "test"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;3.    "clear screen; restore; reload; test"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Once you know the hisotry of executed command, you can reexecute them by issueing "redo" Specman command.&lt;/li&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; redo 3 //this will execute command 3 (clear screen; restore; reload; test)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; redo 0..2 //this will execute command 0 to 2 (restore specman.esv, load temp.e, test)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;li&gt;If you have wave command executed to view e fields into waveform and want to dump all these wave tracing commands into a file, you can use "write wave" command.&lt;/li&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;syntax: write wave to &lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; write wave to trace_wave.ecom&lt;/filename&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;filename&gt;19. To debug, packing and unpacking, you can use "show pack" and "show unpack" command as shown below.&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:85%;"&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var x : uint (bits: 3) = 3&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var y : uint (bits: 7) = 5&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show pack(packing.low, x, y);&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |9 8 7 6 5 4 3|2 1 0|  +0&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     +-------------+-----|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |0 0 0 0 1 0 1|0 1 1|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     +-------------+-----|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |y            |x    |&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var x : packet_s&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; var data : list of bit = {1;1;0;1;0;0;0;1;1;1;0;1}&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;Specman&gt;&lt;/span&gt; show unpack(packing.low, data, x)&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |1 0 9 8 7 6 5 4|3 2 1 0|  +0&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     +---------------+-------|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |1 0 1 1 1 0 0 0|1 0 1 1|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     +---------------+-------|&lt;/span&gt;&lt;/filename&gt;&lt;br /&gt;&lt;filename&gt;&lt;span style="font-family:courier new;"&gt;     |x.addr         |x.len  |&lt;/span&gt;&lt;/filename&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-5599865486660131724?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/WaeFRptX5XA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/5599865486660131724/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=5599865486660131724&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/5599865486660131724?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/5599865486660131724?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/WaeFRptX5XA/less-known-and-less-used-specman.html" title="Less known and less used Specman commands" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/05/less-known-and-less-used-specman.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBQXY_cSp7ImA9WxJRGEQ.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-8486610350589206309</id><published>2009-05-21T13:03:00.014+05:30</published><updated>2009-05-21T14:50:50.849+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-21T14:50:50.849+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><title>Debugging packing and unpacking in Specman</title><content type="html">&lt;div style="text-align: justify;"&gt;Hello readers, I am back after a loooooong break. It has been quite a some time since I posted something here as I was too busy with my personal life and responsibilities. I try to be regular now. So with this note, let me start something from today itself.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;While using packing/unpacking in your environment, you might have gone through some debugging troubles due to silly mistakes. So here are few tips to avoid errors for packing and unpacking.&lt;br /&gt;So starting with Unpacking, there can be 2 kind of problems you may face while unpacking a list into struct&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;You run out of data while unpacking (i.e. list is shorter than total length of physical fields of a struct)&lt;/li&gt;&lt;li&gt;Unpacking is finished but you have bits/bytes left over (i.e. list is bigger than total length of physical fields of struct)&lt;/li&gt;&lt;/ul&gt;If you have situation 1, it will be flagged as run-time error by Specman. But, if you have situation 2, you might not even aware of it as Specman does not issue even a warning for this. For situation 1, if you want to suppress run-time error, you can use 'try' action.&lt;style&gt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&lt;/style&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;tcm() @clk is {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;try {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;unpack(packing.low, my_list, my_struct);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;} else {&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;message (LOW, "Unpacking failed");&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;To debug packing/unpacking issues, you can use Specman command '&lt;span style="font-style: italic;"&gt;trace packing&lt;/span&gt;'. It shows how packing/unpacking is performed. Following example shows the result of 'trace packing' command performed for unpacking.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://sandipgor.googlepages.com/unpacking_trace_result.png" width="100%" height="100%" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;add&gt;&lt;div style="text-align: justify;"&gt;Following example shows the result of 'trace packing' command performed for packing&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://sandipgor.googlepages.com/packing_trace_result.png" width="100%" height="100%" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;add&gt;&lt;div style="text-align: justify;"&gt;If unpacking is unsuccessful (ran out of data in the list), you normally get following message on Specman STDOUT.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;   *** Error: Ran out of data while trying to unpack (use 'trace packing' for further details)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;        at line 19 in @packing_unpacking_debug&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;        unpack(packing.low, lob_u, x);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But if you use '&lt;span style="font-style: italic;"&gt;trace packing&lt;/span&gt;' Specman command, you see where unpacking stopped.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&gt; ----- Starting an unpack() at line 19 in @packing_unpacking_debug ----&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; ----------- Unpacking 'x': x_s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; Unpacking 'x.a': uint (bits: 4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                                         8      .0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; 'x.a': uint (bits: 4) = 8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; Unpacking 'x.b': uint (bits: 8)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                                       0 5      .0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; 'x.b': uint (bits: 8) = 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; Unpacking 'x.c': list of byte&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   *** Error: Ran out of data while trying to unpack into 'x.c'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at line 19 in @packing_unpacking_debug&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        unpack(packing.low, lob_u, x);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;One of the very common cause of the unpacking failure is the unsized list. If the target struct has unsized list as a physical field, all the bits/bytes of the source list will be absorbed by this unsized list and there will be no data left for the next physical field and Specaman will issue an error. So it is always advisable not to have unsized list in the target struct.&lt;br /&gt;&lt;br /&gt;Another reason for unpacking failure could be subtype physical fields. If you have few physical fields defined under &lt;span style="font-style: italic;"&gt;'when' &lt;/span&gt;subtype of a struct, your need to make sure which subtype to pick while unpacking.&lt;br /&gt;&lt;br /&gt;One more reason for the unpacking to give errorneous result is the order of the physical fields in a struct. If physical fields of a struct is defined in the multiple files, then import order of that file becomes crucial because based on the order, physical fields will be treated differently during unpacking. Take a look at the following example.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/add&gt;&lt;/add&gt;&lt;div&gt;&lt;img src="http://sandipgor.googlepages.com/import_order.PNG" width="100%" height="100%" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-8486610350589206309?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/2chzwuumICc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/8486610350589206309/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=8486610350589206309&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8486610350589206309?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8486610350589206309?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/2chzwuumICc/debugging-packing-and-unpacking-in.html" title="Debugging packing and unpacking in Specman" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2009/05/debugging-packing-and-unpacking-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAARX85eip7ImA9WxRaFEQ.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-1266223039325751109</id><published>2008-12-17T12:19:00.003+05:30</published><updated>2008-12-17T12:22:24.122+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-17T12:22:24.122+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Job openings at Cadence Design Systems, India (Bangalore and Noida)</title><content type="html">In this tough time, there are some openings at Cadence Design Systems for its India centers (Bangalore and Noida). Please have a look at the openings for more details &lt;a href="http://getjobsinindia.blogspot.com/search/label/Cadence%20Design%20Systems"&gt;&lt;u&gt;here&lt;/u&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-1266223039325751109?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/f7kxrc-J1ow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/1266223039325751109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=1266223039325751109&amp;isPopup=true" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/1266223039325751109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/1266223039325751109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/f7kxrc-J1ow/job-openings-at-cadence-design-systems.html" title="Job openings at Cadence Design Systems, India (Bangalore and Noida)" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/12/job-openings-at-cadence-design-systems.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMMR3YzfCp7ImA9WxRXEEg.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-8853768507478586104</id><published>2008-10-15T12:29:00.004+05:30</published><updated>2008-10-15T12:38:06.884+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-15T12:38:06.884+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Verification Engineer required for Cadence Design Systems, Bangalore or Noida</title><content type="html">&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Experience:&lt;/u&gt;&lt;/span&gt; 4 to 5 years&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Location:&lt;/u&gt;&lt;/span&gt; India, Bangalore or Noida&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Job Requirement:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This engineer’s primary role will be to work in a team oriented environment to deliver digital logic design and verification methodologies, customised design environments and design implementation solutions that align with client goals. He/she will interact and work with other engineers on the worldwide D&amp;amp;V VCAD delivery team. &lt;/li&gt;&lt;li&gt;Responsibilities will include creating and customising design environments, design and verification methodologies.&lt;/li&gt;&lt;li&gt;Ideally the canddate should be able to assist with the optimisation of acceleration and emulation technologies using the Cadence Incisive verification flows including the Palladium and Xtreme hardware.&lt;/li&gt;&lt;li&gt;The engineer must have a solid background in logic design and verification experience with Cadence technology in the digital domain.&lt;/li&gt;&lt;li&gt;The client should have at least a basic understanding of modeling (e.g. Architecture or system), and both block and system level verification experiance, preferably with coverage driven methodologies. &lt;/li&gt;&lt;li&gt;The candidate should possess the necessary engineering and consultancy skills, i.e. that he/she is technically mature with the necessary communication skills to be able to consult effectively with clients, e.g. to talk to, coach and advise Customers. &lt;/li&gt;&lt;li&gt;The engineer must have a solid background  in the electronics industry with at least 4 to 5 years experience, and should be willing to learn new technical and consulting skills.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Key Accountabilities:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Execution on VCAD Customer support projects, e.g. Implementation and functional verification of design systems. &lt;/li&gt;&lt;li&gt;Development of customer specific verification environments including components, methodology support, operation and maintenance.&lt;/li&gt;&lt;li&gt;Be prepared to provide design and verification support in VCAD Customer design projects, both remotely and onsite.&lt;/li&gt;&lt;li&gt;Ability to handle all design environment implementation tasks and architectural tasks with the minimum support or through working in a joint team of Cadence and Customer engineers.&lt;/li&gt;&lt;li&gt;Work on multi person projects of varying complexity, working especially in a multi-site/multi-cultural project. The latter requires excellent communication skills in English.&lt;/li&gt;&lt;li&gt;Acquire a basic understanding of the (service) business environment of Cadence within 6 months including pre sales support.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Contact&lt;/u&gt;:&lt;/strong&gt; &lt;a href="mailto:getjobsinindia2007@gmail.com"&gt;getjobsinindia2007@gmail.com&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-8853768507478586104?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/uYimInYpdnM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/8853768507478586104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=8853768507478586104&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8853768507478586104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8853768507478586104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/uYimInYpdnM/verification-engineer-bangalore-or.html" title="Verification Engineer required for Cadence Design Systems, Bangalore or Noida" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/10/verification-engineer-bangalore-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBSHs6cSp7ImA9WxRXEEg.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-7420048252723602416</id><published>2008-10-15T12:16:00.004+05:30</published><updated>2008-10-15T12:39:19.519+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-15T12:39:19.519+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>DFT Engineer required for Cadence Design Systems, Bangalore</title><content type="html">&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Experience:&lt;/u&gt;&lt;/span&gt; 3 to 6 Years&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Location:&lt;/u&gt;&lt;/span&gt; Bangalore, India&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Skill Sets:&lt;/u&gt;&lt;/span&gt; Scan, Jtag, Atpg, Tester interface.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Good to have skills:&lt;/u&gt;&lt;/span&gt; Exposure to ATPG tools like Encounter Test&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Job Description:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This engineer’s primary role will be to work in a team oriented environment to deliver DFT activities for implementation services.  He/she will interact and work with other engineers on the worldwide delivery team.&lt;/li&gt;&lt;li&gt;This engineer is expected to provide services using the following technical skills: Scan, JTAG, ATPG, Logic Synthesis, Static Timing Analysis, and to interface with designers / testing team.&lt;/li&gt;&lt;li&gt;In addition to the technical skills they will be expected to operate effectively in project teams delivering the design of leading edge. Additional responsibilities include customer interactions and pre-sales activities.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Key Accountabilities&lt;/u&gt;&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ability to handle all design environment implementation tasks assigned, either personally or through supervising other Cadence and Customer engineers.&lt;/li&gt;&lt;li&gt;Work on multi person projects of varying complexity, working especially in a multi-site/multi-cultural project. The latter requires excellent communication skills in English.&lt;/li&gt;&lt;li&gt;Acquire a basic understanding of the (service) business environment of Cadence including pre sales support.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Contact&lt;/u&gt;:&lt;/strong&gt; &lt;a href="mailto:getjobsinindia2007@gmail.com"&gt;getjobsinindia2007@gmail.com&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-7420048252723602416?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/DQydh_X2Iyo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/7420048252723602416/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=7420048252723602416&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7420048252723602416?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7420048252723602416?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/DQydh_X2Iyo/dft-engineer-required-for-cadence.html" title="DFT Engineer required for Cadence Design Systems, Bangalore" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/10/dft-engineer-required-for-cadence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEARnw8cSp7ImA9WxRXEEg.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-7261075859790301256</id><published>2008-10-15T11:57:00.005+05:30</published><updated>2008-10-15T12:07:27.279+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-15T12:07:27.279+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="OVM" /><title>OVM 2.0 Webinar on 16th Oct, 2008</title><content type="html">&lt;div style="text-align: justify;"&gt;There is a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OVM&lt;/span&gt; 2.0 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Webinar&lt;/span&gt; organized on 16&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;th&lt;/span&gt; Oct, 2008.&lt;br /&gt;&lt;br /&gt;Details of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;webinar&lt;/span&gt; is mentioned below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Date&lt;/span&gt;          :     Thursday, October 16&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;th&lt;/span&gt;, 2008&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Time&lt;/span&gt;         :     10:00 AM - 11:00 AM (Pacific Daylight Time)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Location&lt;/span&gt; :     Online via Microsoft Office Live Meeting (details provided upon registration)&lt;br /&gt;&lt;br /&gt;For more information and registration, please click &lt;a href="http://www.ovmworld.org/webinars.php"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;OVM&lt;/span&gt; 2.0 update contains some technical advances. Few of are listed bellow&lt;br /&gt;&lt;ul&gt;&lt;li&gt;     Unified sequence mechanism&lt;/li&gt;&lt;li&gt;     &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;OVM&lt;/span&gt; User Guide&lt;/li&gt;&lt;li&gt;     Improved debugging and expanded use of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;parametrized&lt;/span&gt; classes&lt;/li&gt;&lt;li&gt;     Driver/sequencer communication enhancements&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-7261075859790301256?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/6TbS_5nZpWA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/7261075859790301256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=7261075859790301256&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7261075859790301256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7261075859790301256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/6TbS_5nZpWA/ovm-20-webinar-on-16th-oct-2008.html" title="OVM 2.0 Webinar on 16th Oct, 2008" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/10/ovm-20-webinar-on-16th-oct-2008.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGQHozfip7ImA9WxdSF0U.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-7968855927132960122</id><published>2008-05-26T12:22:00.002+05:30</published><updated>2008-05-26T12:27:01.486+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T12:27:01.486+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IEEE" /><title>IEEE Working Group Announces Updated e Language Standard</title><content type="html">&lt;div align="justify"&gt;The e Functional Verification Language Working Group (eWG) was formed to define a standard for the e language, and the initial 1647-2006 standard was published in September 2006. And now, IEEE has approved a revision to IEEE 1647, Standard for the Functional Verification Language e. This revision is called 1647-2008 e Language Standard&lt;br /&gt;&lt;br /&gt;Please see following link for more details.&lt;br /&gt;&lt;a href="http://standards.ieee.org/announcements/IEEE1647_eLanguageStandard.html"&gt;http://standards.ieee.org/announcements/IEEE1647_eLanguageStandard.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-7968855927132960122?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/AWP8DGSUaQ8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/7968855927132960122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=7968855927132960122&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7968855927132960122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7968855927132960122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/AWP8DGSUaQ8/ieee-working-group-announces-updated-e.html" title="IEEE Working Group Announces Updated e Language Standard" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/05/ieee-working-group-announces-updated-e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcASH49eSp7ImA9WxZWGU8.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-4706554865343865670</id><published>2008-03-13T10:57:00.008+05:30</published><updated>2008-03-19T16:24:09.061+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-19T16:24:09.061+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="OVM" /><title>OVM Seminars at Hyderabad and Bangalore</title><content type="html">&lt;div align="justify"&gt;There is an OVM semniar held at Hyderabad on Thursday, March 25, 2008 between 8:30 am to 2:30 pm (IST) and at Bangalore on Thursday, March 27, 2008 between 8:30 am to 2:30 pm (IST).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;For registeration, please visit &lt;a href="http://www.ovmworld.org/seminars.php"&gt;http://www.ovmworld.org/seminars.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are the topics covered in the seminar.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;LI&gt;&lt;STRONG&gt;OVM Overview&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Planning for Verification&lt;LI&gt;Testbench Architecture&lt;LI&gt;Transaction-Level Modeling (TLM) in Verification &lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;&lt;STRONG&gt;Stimulus and Coverage&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Transaction-Level Stimulus&lt;LI&gt;Decoupling Stimulus from the Design&lt;LI&gt;Sequential Stimulus Specification&lt;LI&gt;Layered Stimulus&lt;LI&gt;Transaction-Level Layered Coverage &lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;&lt;STRONG&gt;Planning for Verification Reuse&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Flexible Instantiation – Using the Factory&lt;LI&gt;Configuring Verification Components for Reuse&lt;LI&gt;Hierarchical Encapsulation &amp; Reuse &lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;&lt;STRONG&gt;Putting it All Together&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;OVM Moving Forward&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-4706554865343865670?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/xwaoZJuaV2A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/4706554865343865670/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=4706554865343865670&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/4706554865343865670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/4706554865343865670?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/xwaoZJuaV2A/ovm-seminar-tour.html" title="OVM Seminars at Hyderabad and Bangalore" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/03/ovm-seminar-tour.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YNR3g4cSp7ImA9WxdaEEk.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-6711567935289062724</id><published>2008-02-13T16:08:00.020+05:30</published><updated>2008-08-18T13:09:56.639+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-18T13:09:56.639+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Did You Know" /><title>About generation of do-not-generate fields</title><content type="html">&lt;p align="justify"&gt;Say a parent struct is having two fields inside it. One is an ungenerated (with do-not-generate sign) child struct and another ungenerated field is of pre defined data types (like uint, bool etc.).&lt;/p&gt;&lt;p align="justify"&gt;When this parent struct is generated&lt;/p&gt;&lt;div class="indent1"&gt;1) ungenerated field of pre defined data types will get their initial value (0 for scalars, NULL for structs, empty list for lists). &lt;p align="justify"&gt;2) ungenerated field whose value is a range (such as [0..100]) gets the first value in the range.&lt;/p&gt;&lt;p align="justify"&gt;3) ungenerated field of user defined data types (like sturcts) will not be allocated and none of the fields in it will be generated.&lt;/p&gt;&lt;/div&gt;&lt;p align="justify"&gt;Take a look at following code.&lt;/p&gt;&lt;div class="post-body entry-content"&gt;&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:10.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&gt;&lt;/style&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct child_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;!a : uint (bits: 4);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;b : uint (bits: 4);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct top_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;!child : child_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;!x : uint (bits: 3);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;!y : uint (bits: 3);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep x in [2..5];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;top : top_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="justify"&gt;In this example, top_s struct has one ungenerated struct and two ungenerated fields of uint (bits: 3). When top is generated inside the sys&lt;/p&gt;&lt;div class="indent1"&gt;1) y will be generated and will get any random value between 0 and 7 &lt;p align="justify"&gt;2) x will be generated with value of 2 as it is a range bound ungenerated field.&lt;/p&gt;&lt;p align="justify"&gt;3) child field will not be generated as it is defined as ungenerated struct. So, the fields a and b of child struct will not be generated as well.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-6711567935289062724?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/qsHZZxlOzD8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/6711567935289062724/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=6711567935289062724&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6711567935289062724?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6711567935289062724?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/qsHZZxlOzD8/about-generation-of-do-not-generate.html" title="About generation of do-not-generate fields" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/02/about-generation-of-do-not-generate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8ERHc6fyp7ImA9WxZRGEw.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-7712077732241865656</id><published>2008-02-12T16:30:00.000+05:30</published><updated>2008-02-12T16:43:25.917+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-12T16:43:25.917+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Did You Know" /><title>By default MAIN sequence is not empty</title><content type="html">&lt;div align="justify"&gt;By default, body method of MAIN sequence is not empty. It contains a loop which executes random number of times creating the sequence field (randomly unless constrained). The generated/created driver contains an instance of the MAIN sequence, which is started automatically upon run().&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;So, in your environment, if body method of MAIN sequence of any eVC is not made empty, it will start executing some random sequences at 0 simulation time. This might have adverse effect on the behavior of the stimulus given to the design if you are using virtual sequence, because user defined sequence (executed inside virutal sequence) and MAIN sequence might be running parallely and might be driving same signals and causing undesirable stimulus.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Debugging this will become difficult. You might be wondering why some other sequences are being executed even though you are calling perticular sequence only in virtual sequence?&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;So, if you are an eVC developer, always provide sequence library with body of MAIN sequence made empty. And if you are verifying any DUT and if you are using virtual sequence and not using MAIN sequence of any eVC, make body method of all MAIN sequences empty.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Take a look at &lt;a href="http://sandipgor.googlepages.com/main_sequence_example.e" target="_blank"&gt;this&lt;/a&gt; e code to check that how MAIN sequence is executing a loop which creates and executes the random sequence. Load &lt;a href="http://sandipgor.googlepages.com/main_sequence_example.e" target="_blank"&gt;this&lt;/a&gt; e code and give test command with random seed. You will see that even though body method of MAIN sequence is not extended, MAIN sequence is executing random sequneces (TEST1, TEST2, SIMPLE).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-7712077732241865656?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/7r5UODQ_Uh4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/7712077732241865656/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=7712077732241865656&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7712077732241865656?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/7712077732241865656?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/7r5UODQ_Uh4/by-default-main-sequence-is-not-empty.html" title="By default MAIN sequence is not empty" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/02/by-default-main-sequence-is-not-empty.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYAR3kzeip7ImA9WxZTE00.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-2515819245798336080</id><published>2008-01-14T15:00:00.000+05:30</published><updated>2008-01-14T15:02:26.782+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-14T15:02:26.782+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="OVM" /><title>OVM available on its new site</title><content type="html">&lt;div align="justify"&gt;Open Verification Methodology (OVM) is now available on its new site &lt;a href="http://www.ovmworld.org/"&gt; http://www.ovmworld.org&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-2515819245798336080?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/hRUYEMmZsyQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/2515819245798336080/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=2515819245798336080&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/2515819245798336080?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/2515819245798336080?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/hRUYEMmZsyQ/ovm-available-on-its-new-site.html" title="OVM available on its new site" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/01/ovm-available-on-its-new-site.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8GQHk-eCp7ImA9WB9aF0U.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-3495011391533431395</id><published>2008-01-08T12:14:00.000+05:30</published><updated>2008-01-08T13:57:01.750+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-08T13:57:01.750+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Implementation" /><title>Checker implementation dilema</title><content type="html">&lt;div align="justify"&gt;Ever encountered the checker implementation &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;dilemma&lt;/span&gt;? How to implement it? Using temporal expressions or using methods? Once in a lifetime, every verification engineer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;comes&lt;/span&gt; to a stage where they have to take decision about the implementation of a checker. Once, I made a wrong decision and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;implemented&lt;/span&gt; a complex event-based checker in temporal expressions using "&lt;em&gt;expect&lt;/em&gt;" statement. After that I was introduced to the hell of debugging temporal expressions in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Specman&lt;/span&gt;. Event chart is a junk feature in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Specman&lt;/span&gt;. Filtering of the events, having full path of the events are not so easy to see in the events chart. Even, &lt;em&gt;when-&lt;/em&gt;subtypes' events can not be viewed &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;separately&lt;/span&gt;.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;After having a lot of trouble debugging temporal expressions, I re-wrote the entire checker in the methods format using &lt;em&gt;"check that&lt;/em&gt;" and "&lt;em&gt;if &lt;/em&gt;else&lt;em&gt;" &lt;/em&gt;construct&lt;em&gt;.&lt;/em&gt; Debugging of method based checker is such an easy task in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Specman&lt;/span&gt;, as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Specman&lt;/span&gt; has a beautiful and reliable debugger. Lot of features, though might be basic, are quiet useful when it comes to debug the method based checkers. In Specman debugger, one can put conditional and unconditional breakpoints, can see the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;hierarchy&lt;/span&gt; of the threads, can add &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;watch points&lt;/span&gt; on &lt;em&gt;e &lt;/em&gt;fields and a lot more. I will &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;discuss&lt;/span&gt; about debugging in Specman for the beginners in the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;separate&lt;/span&gt; post. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;After that experience, I concluded following things for the checker implementation.&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div align="justify"&gt;Write down the checker in the simple e&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;nglish&lt;/span&gt; to understand its complexity.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;If checker is simple, I mean, just contains 2 to 3 basic events to check, then go for temporal expressions for the checker &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;implementation&lt;/span&gt;.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;If checker is even a bit complex having more than 3 events, just go for the method based checker implementation. You will save a hell lot of time which might be lost in the debugging temporal expressions.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div align="justify"&gt;Method based checker implementation looks more readable, even though it requires extra codes to implement and it's a bit slower than temporal expressions based checkers. But at the end, you are going to save lot of time having clean checker.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-3495011391533431395?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/r6lcM25Sn0M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/3495011391533431395/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=3495011391533431395&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3495011391533431395?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/3495011391533431395?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/r6lcM25Sn0M/checker-implementation-dilema.html" title="Checker implementation dilema" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/01/checker-implementation-dilema.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIHR30-fSp7ImA9WB9aFE8.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-2843495272037985674</id><published>2008-01-04T10:06:00.000+05:30</published><updated>2008-01-04T11:32:16.355+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-04T11:32:16.355+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Interview" /><title>Specman Verification Questions - Part III</title><content type="html">&lt;strong&gt;Question 1: What will be the output if following code is loaded and test command is issued into Specman ?&lt;/strong&gt; &lt;style&gt;&lt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:10.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;&lt;'&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;struct x&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;y : uint;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;keep soft y == 8;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;};&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;extend sys&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;run() is also&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;var x : x;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;gen x;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;var a : uint = 2;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;outf ("a = %d x.y = %d\n", a, x.y);&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;update_field(a);&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;update_struct(x);&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;outf ("a = %d x.y = %d\n", a, x.y);&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;};&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;update_field(a: uint) is&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;a = 4;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;};&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;update_struct(x: x) is&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;strong&gt;x.y = 4;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;strong&gt;};&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;};&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;strong&gt;'&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;a = 2 x.y = 8&lt;/p&gt;&lt;p&gt;a = 2 x.y = 4&lt;/p&gt;&lt;p align="justify"&gt;Here, variable uint &lt;em&gt;a&lt;/em&gt; is not updated and struct &lt;em&gt;x&lt;/em&gt; is updated. Why is so? Because in &lt;em&gt;specman&lt;/em&gt;, unlike user defined data types (e.g. structs, units), all variables with standard data types are passed by value in the methods. All user defined data types (like structs) are passed by reference. So, whenever, called methods update the passed structs, it is actually updating the original struct and not its copy.&lt;/p&gt;&lt;p align="justify"&gt;If one wants user defined data types to be passed by value then he/she can use deep_copy to copy the existing variable and pass it to the method as shown below.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct x&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;y : uint;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep soft y == 8;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;run() is also&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;var x : x;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;gen x;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;var a : uint = 2;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf ("a = %d x.y = %d\n", a, x.y);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;update_field(a);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;update_struct(&lt;span style="color:#ff0000;"&gt;deep_copy(x)&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf ("a = %d x.y = %d\n", a, x.y);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;update_field(a: uint) is&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;a = 4;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;update_struct(x: x) is&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;x.y = 4;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Question 2: What is the difference between inheritance implemented by "&lt;em&gt;when"&lt;/em&gt; construct and implemented by "&lt;em&gt;like&lt;/em&gt;" construct?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;em&gt;like&lt;/em&gt; inheritance is the concept of the object oriented programming (OOP) where as &lt;em&gt;when&lt;/em&gt; inheritance is the concept of aspect oriented programming (AOP). For more detail on AOP, please refer &lt;a title="Permanent Link to Aspect-Oriented Programming with the e Verification Language" href="http://www.verilab.com/blog/2007/08/aop-book/" rel="bookmark"&gt;Aspect-Oriented Programming with the e Verification Language&lt;/a&gt; book written by David Robinson (Verilab).&lt;/p&gt;&lt;p align="justify"&gt;&lt;em&gt;like &lt;/em&gt;construct is used when someone wants to derive a child object from the already defined struct/unit. This derived child will have new struct/unit name. When someone derive the child object using &lt;em&gt;when&lt;/em&gt; construct, the base name of the child will remain the same.&lt;/p&gt;&lt;p align="justify"&gt;Another difference between &lt;em&gt;like &lt;/em&gt;and &lt;em&gt;when&lt;/em&gt; construct is that, once the child is derived using &lt;em&gt;like&lt;/em&gt; inheritance, one can not add extra fields in the parent struct/unit, wherease, if child is derived using &lt;em&gt;when &lt;/em&gt;construct, parent struct/unit can have extra fields.&lt;/p&gt;&lt;p align="justify"&gt;Take a look at the following example. packet_valid field is added in the parent struct packet_s after the child is derived using &lt;em&gt;like&lt;/em&gt; inheritance. This is not allowed and Specman will issue an error during loading phase.&lt;/p&gt;&lt;p&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;type packet_type_t : [GOOD, BAD, UGLY];&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct packet_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;kind : packet_type_t;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct good_packet_s like packet_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;packet_size : uint (bits: 5);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend packet_s&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;span style="color:#ff0000;"&gt;packet_valid : bool;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;span style="color:#33cc00;"&gt;ack() is &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;span style="color:#33cc00;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;&lt;span style="color:#33cc00;"&gt;outf ("NOTE :: This is packet %s\n", me);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;&lt;span style="color:#33cc00;"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;packet : packet_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;good_packet : good_packet_s;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt; &lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;Specman will issue following error.&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#ff0000;"&gt;*** Error: Cannot add new field 'packet_valid' to struct 'packet_s': it has like children (e.g. 'good_packet_s') with fields.&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;Note that ack() method will be added in the parent struct packet_s even though child is derived using &lt;em&gt;like&lt;/em&gt; inheritance.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-2843495272037985674?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/x0qtw2aZMw8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/2843495272037985674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=2843495272037985674&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/2843495272037985674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/2843495272037985674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/x0qtw2aZMw8/specman-verification-questions-part-iii.html" title="Specman Verification Questions - Part III" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2008/01/specman-verification-questions-part-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIERXs5eSp7ImA9WB9bF0k.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-6360280475233785732</id><published>2007-12-27T12:49:00.000+05:30</published><updated>2007-12-27T12:58:24.521+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-27T12:58:24.521+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IEEE" /><title>IEEE standard draft for e available for review</title><content type="html">&lt;div align="justify"&gt;Individuals interested in functional verification languages are invited by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;eWG&lt;/span&gt; (e Work Group) to take part in the standardizing the e functional verification language. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;eWG&lt;/span&gt; is sponsored by the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;IEEE&lt;/span&gt; Design Automation Standards Committee called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;DASC&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Read more about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;eWG&lt;/span&gt; and its activity &lt;a href="http://www.ieee1647.org/about.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;IEEE&lt;/span&gt; Standard P1647 draft for functional verification language &lt;em&gt;e&lt;/em&gt; is also available for review. Click &lt;a href="http://ieee1647.org/downloads/P1647_Draft_3_071008.pdf"&gt;here&lt;/a&gt; to see the draft..&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-6360280475233785732?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/h8DRyGbSrl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/6360280475233785732/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=6360280475233785732&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6360280475233785732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6360280475233785732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/h8DRyGbSrl4/ieee-standard-draft-for-e-available-for.html" title="IEEE standard draft for e available for review" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2007/12/ieee-standard-draft-for-e-available-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QMRXY7eCp7ImA9WxRbGU0.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-448282524909355517</id><published>2007-12-24T18:36:00.000+05:30</published><updated>2008-12-10T14:59:44.800+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T14:59:44.800+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TechToons" /><title>My Toon</title><content type="html">&lt;a href="http://2.bp.blogspot.com/_6a35CAhHja8/R2-wrRSDlkI/AAAAAAAAAC4/dN1CDR7KUZo/s1600-h/bugs"&gt;&lt;img id="BLOGGER_PHOTO_ID_5147527156527765058" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_6a35CAhHja8/R2-wrRSDlkI/AAAAAAAAAC4/dN1CDR7KUZo/s400/bugs%27+father.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_6a35CAhHja8/R2-vOBSDljI/AAAAAAAAACw/Uz1s21djcrM/s1600-h/bugs"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-448282524909355517?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/pc2ZpEPLS1k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/448282524909355517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=448282524909355517&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/448282524909355517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/448282524909355517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/pc2ZpEPLS1k/my-toon.html" title="My Toon" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_6a35CAhHja8/R2-wrRSDlkI/AAAAAAAAAC4/dN1CDR7KUZo/s72-c/bugs%27+father.bmp" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2007/12/my-toon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IESXsyeyp7ImA9WB9bFEQ.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-5310505608927558707</id><published>2007-12-24T17:47:00.000+05:30</published><updated>2007-12-24T18:01:48.593+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-24T18:01:48.593+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sample Codes" /><title>Raised Objection Report</title><content type="html">Any raised objection will prohibit your simulation to stop. And In large environments, it may be painfull to find the one objection still raised using the SN commands 'show objections' or 'trace objections'.&lt;br /&gt;&lt;br /&gt;You may just load follwoing e-code in your test and you'll be able to get a short report of all raised objections by typing '&lt;span style="font-family:courier new;"&gt;sys.report_raised_objections(TEST_DONE)&lt;/span&gt;'&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:8.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&gt;&lt;/style&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{ &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;report_raised_objections(kind : objection_kind) is&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{ &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;// usage: sys.report_raised_objections(TEST_DONE)&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;var obj_units : list of any_unit = get_all_units(any_unit).all(.get_objection_counter(kind) &gt; 0); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("-----------------------------------------------\n");&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("Objection Report:\n"); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("Counter Total Env e path\n"); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("------- ----- ---- ------\n"); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;for each (u) in obj_units&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;{ &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent4"&gt;outf("%-7d %-5s %-7s \n", u.get_objection_counter(kind), u is an any_env ? u.short_name() : "", u.e_path()); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;}; &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;// just to print the command in the sn window&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;run() is also&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("-----------------------------------------------\n");&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("REPORT_RAISED_OBJECTIONS loaded\n"); &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("usage: sys.report_raised_objections(TEST_DONE)\n");&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;outf("------------------------------------------------\n");&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-5310505608927558707?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/Ck7pmRArzTA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/5310505608927558707/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=5310505608927558707&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/5310505608927558707?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/5310505608927558707?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/Ck7pmRArzTA/raised-objection-report.html" title="Raised Objection Report" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2007/12/raised-objection-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkANQHs9cSp7ImA9WB9UFk4.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-6307185819905719280</id><published>2007-12-14T16:31:00.001+05:30</published><updated>2007-12-14T17:49:51.569+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-14T17:49:51.569+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Coverage" /><title>Are You Reporting Wrong Coverage Number?</title><content type="html">If you are not giving weight to your items in your coverage groups, the overall functional coverage number you get on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Specman&lt;/span&gt; coverage report might be wrong. Let me explain it using an example. Take a look at following code.&lt;br /&gt;&lt;style&gt;&lt;br /&gt;&lt;!--  /* Font Definitions */ @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face  {font-family:"\@SimSun";  panose-1:0 0 0 0 0 0 0 0 0 0;}  /* Style Definitions */ div.codefrag  {margin:0in;  margin-bottom:.0001pt;  font-size:12.0pt;  font-family:"Courier New"; } div.indent1      {text-indent:20px; } div.indent2      {text-indent:40px; } div.indent3      {text-indent:60px; } div.indent4      {text-indent:80px; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct coverage_example&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;event cover_e;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;a : bool;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;b : uint (bits: 2);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;cover cover_e is&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;item a;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;item b;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;cross a, b;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;run() is also&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{ &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;emit cover_e;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;cov_ex : coverage_example;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep soft cov_ex.a == TRUE;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep soft cov_ex.b == 0;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;If you load above code, issue a test command and see the coverage report, it will show you 28%, which is wrong in fact. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Specman&lt;/span&gt; calculates the overall coverage numbers hierarchical. For the above code, it calculates as following.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For item a:&lt;/strong&gt;&lt;br /&gt;total bucket = 2&lt;br /&gt;total hit = 1&lt;br /&gt;So, coverage number = 50%&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For item b:&lt;/strong&gt;&lt;br /&gt;total bucket = 4&lt;br /&gt;total hit = 1&lt;br /&gt;So, coverage number = 25%&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For cross a, b&lt;/strong&gt;:&lt;br /&gt;total bucket = 4*2 = 8&lt;br /&gt;total hit = 1&lt;br /&gt;So, coverage number = 12.5%&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For Overall:&lt;br /&gt;&lt;/strong&gt;total bucket = 3 (item a, item b and cross a,b)&lt;br /&gt;total hit = (50 + 25 + 12.5) = 87.5&lt;br /&gt;So, coverage number = &lt;strong&gt;&lt;span style="color:#ff0000;"&gt;29.166% (87.5/3)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;But, in fact, it should be calculated as following.&lt;br /&gt;&lt;br /&gt;Total bucket in the coverage group = 2 + 4 + 8 = 14&lt;br /&gt;Total hit = 1 + 1 + 1 = 3&lt;br /&gt;So, overall coverage should be (3*100/14 = &lt;span style="color:#33cc00;"&gt;21.4285&lt;/span&gt;&lt;span style="color:#33cc00;"&gt;%&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;This wrong calculation can be avoided by doing following modification in the code. See highlighted "green" code below.&lt;br /&gt;&lt;br /&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;'&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;struct coverage_example&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;event cover_e;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;a : bool;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;b : uint (bits: 4);&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;cover cover_e is&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;//Weight is total number of buckets&lt;/div&gt;&lt;div class="indent3"&gt;item a &lt;span style="color:#33cc00;"&gt;using weight=2&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;item b &lt;span style="color:#33cc00;"&gt;using weight=4&lt;/span&gt;;&lt;/div&gt;&lt;div class="indent3"&gt;cross a,b &lt;span style="color:#33cc00;"&gt;using weight=8&lt;/span&gt;;&lt;/div&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;run() is also&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;{ &lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;emit cover_e;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;extend sys&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent2"&gt;cov_ex : coverage_example;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep soft cov_ex.a == TRUE;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent3"&gt;keep soft cov_ex.b == 0;&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div class="codefrag"&gt;&lt;div class="indent1"&gt;'&gt;&lt;/div&gt;&lt;div class="indent1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;But, all the time, applying weight to every item is not possible, as some code may be imported from third party vendor or some code might be read-only to the user. Also whenever the number of buckets change, user needs to update the weight of particular item. This might not be feasible sometimes.&lt;br /&gt;&lt;br /&gt;To avoid this, there is a utility called bucket_counter which was delivered by Clemens Mueller from Cadence. This e code will report total number of buckets in each item and total number of bucket hits. This simple utility will help you calculate the exact number of functional coverage you have.&lt;br /&gt;&lt;br /&gt;Please click &lt;a href="http://sandipgor.googlepages.com/vr_bucketcounter_top.e"&gt;here&lt;/a&gt; to download the code.&lt;br /&gt;&lt;br /&gt;Just load the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ecode&lt;/span&gt; along with your environment and read the coverage file. Then issue "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;sys&lt;/span&gt;.report_buckets()". It will report total number of buckets in each item, and total number of hits, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-family:courier new;color:#33cc00;"&gt;Valid Space size for item a is 2 buckets&lt;br /&gt;Valid Space size for item b is 4 buckets&lt;br /&gt;Valid Space size for item cross__a__b is 8 buckets&lt;br /&gt;total coverage buckets: 14&lt;br /&gt;total coverage buckets hit: 3&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-6307185819905719280?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/jix0qkxGOpQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/6307185819905719280/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=6307185819905719280&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6307185819905719280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/6307185819905719280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/jix0qkxGOpQ/if-you-are-not-giving-weightage-to-your.html" title="Are You Reporting Wrong Coverage Number?" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2007/12/if-you-are-not-giving-weightage-to-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYNQHg4fip7ImA9WB9UFUk.&quot;"><id>tag:blogger.com,1999:blog-1724087381158100807.post-8894616252041372725</id><published>2007-12-13T17:23:00.000+05:30</published><updated>2007-12-13T17:29:51.636+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-13T17:29:51.636+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Papers" /><title>Nice Papers on AOP and Verification</title><content type="html">Here are 3 nice paper written by David Robinson from Verilab on following topics.&lt;br /&gt;&lt;br /&gt;1) &lt;a href="http://www.verilab.com/files/sample_chapter_verilab_aop_cookbook.pdf"&gt;&lt;span style="color:#000000;"&gt;An Introduction to Aspect Oriented Programming in e&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;2) &lt;a href="http://www.verilab.com/files/simplifying_soc_verification_cdnlive_2006.pdf"&gt;Simplify SoC Verification using a Generic Approach&lt;/a&gt;&lt;br /&gt;3) &lt;a href="http://www.verilab.com/files/simplifying_soc_verification_cdnlive_2006.pdf"&gt;Simplify SoC Verification using a Generic Approach - NMI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1724087381158100807-8894616252041372725?l=digitalverification.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerificationBlog/~4/tEpQojag1s4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalverification.blogspot.com/feeds/8894616252041372725/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1724087381158100807&amp;postID=8894616252041372725&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8894616252041372725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1724087381158100807/posts/default/8894616252041372725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VerificationBlog/~3/tEpQojag1s4/nice-papers-on-aop-and-verification.html" title="Nice Papers on AOP and Verification" /><author><name>Sandeep Gor</name><uri>http://www.blogger.com/profile/17756641047106957907</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://digitalverification.blogspot.com/2007/12/nice-papers-on-aop-and-verification.html</feedburner:origLink></entry></feed>

