<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1575376285321445036</id><updated>2012-02-20T20:34:40.993+05:30</updated><category term='VERA/NTB'/><category term='RVM/VMM'/><category term='functional coverage'/><category term='system verilog'/><category term='ASIC verification'/><title type='text'>Art of verification</title><subtitle type='html'>A blog to share my knowledge in ASIC design verification with respect to verification environment architecture, verification methodology, verification languages, protocols &amp;amp; EDA tool evaluations.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1095265863358045858</id><published>2012-02-18T19:53:00.007+05:30</published><updated>2012-02-18T21:00:47.734+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Accessing class attributes bottom up !!!</title><content type='html'>&lt;p class="MsoNormal" style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; "&gt;Accessing a property of a class top down is done through hierarchical access through dot operator which is very common in the HVL world. Accessing class properties bottom up through multiple levels is also a requirement we come across in verification which is little bit tricky to implement.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; "&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Following is an example on how we could do a bottom up access of a class property.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt; top&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;  int&lt;/b&gt;&lt;/span&gt;        flag&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;level_1    obj&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;  function&lt;/b&gt;&lt;/span&gt; &lt;span&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;br /&gt;  obj&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;   endfunction&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;b&gt;endclass&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt; level_1&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;  top parent_of_the_class&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;    function&lt;/b&gt;&lt;/span&gt; &lt;span&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; &lt;span&gt;(&lt;/span&gt; top parent_of_the_class&lt;span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;       this&lt;/b&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;parent_of_the_class&lt;span&gt;=&lt;/span&gt;parent_of_the_class&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;    endfunction&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;    task&lt;/b&gt;&lt;/span&gt; run&lt;span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;      if&lt;/b&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;parent_of_the_class&lt;span&gt;.&lt;/span&gt;flag&lt;span&gt;==&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;      begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; &lt;span&gt;         $display&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;" Flag set &lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;     end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;     else&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;     begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; &lt;span&gt;        $display&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;" Flag not set &lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;     end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;    endtask&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;endclass&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&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/1575376285321445036-1095265863358045858?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1095265863358045858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1095265863358045858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1095265863358045858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1095265863358045858'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2012/02/accessing-class-attributes-bottom-up.html' title='Accessing class attributes bottom up !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5924776903529615253</id><published>2012-01-28T09:29:00.003+05:30</published><updated>2012-01-28T10:25:13.757+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Constraint  solver performance  !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Debugging constraint solver performance issues is a real challenge; even a small mistake in a constraint can  impact constraint solver performance . Common mistake people do which results in constrain solver performance degradation is to constraint the data payload to a predictable pattern to enable designers to debug RTL faster. When predictable data pattern is constrained for every transaction the number of bidirectional constraints solved increases exponentially resulting in constraint solver performance degradation. The problem would be magnified further when a scenario generator is used to randomize sequence of transactions.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The solution to this is if you would require a predictable data pattern to be used  in the data  payload  override the random value with predictable pattern in  post_randomize() method  instead of going for a constraint, this would improve the runtime performance of your simulation.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-5924776903529615253?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5924776903529615253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5924776903529615253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5924776903529615253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5924776903529615253'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2012/01/constraint-solver-performance.html' title='Constraint  solver performance  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-8086644798328460854</id><published>2011-12-03T14:56:00.002+05:30</published><updated>2011-12-03T15:02:53.279+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><title type='text'>Using vmm_opts to configure the test bench !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Traditionally plusargs switch is used in verification environments to configure attributes of the verification environment from the command line, like configuring timeout value of the test environment, configuring no of packets to be generated by the generator and setting error limits for the test to exit simulation. More compact and robust implementation of configuration mechanism in VMM is through vmm_opts. vmm_opts class has methods like get_object_bit(), get_object_int()  to receive the runtime values in the environment.  We can set different values to different instances from the command line. Example you can use the same configuration attribute for configuring no of packets for both TX as well as RX transactions and hierarchically set different values for TX and RX from the command line. Configuring global values like the test bench timeout does not require hierarchical access. The values can also be overridden from the test case using set_int ()  and  set_bit() methods in place of a command line override.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Configurability of test bench from command line is a must have feature especially  to abstract your test bench complexity from the consumers in this case a RTL designer , test case development team or  release management team.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-8086644798328460854?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/8086644798328460854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=8086644798328460854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8086644798328460854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8086644798328460854'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/12/using-vmmopts-to-configure-test-bench.html' title='Using vmm_opts to configure the test bench !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1756695671530271969</id><published>2011-11-12T15:12:00.004+05:30</published><updated>2011-11-12T21:50:40.261+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Register Automation using VMM/UVM RAL</title><content type='html'>&lt;p class="MsoNormal"&gt;VMM RAL had been around for a long time is a very powerful  feature to verify  your hardware registers it provides the user with features  like  name based register access, mirroring registers, back door access, functional coverage and the predefined tests .The same set of  VMM RAL features are available in UVM as well. One of the features which i was impressed with was  auto mirror update feature which updates the RAL mirror on register changes through backdoor, this feature is handy when you do your register read/write through an embedded processor instead of regular front door access and you want to synchronize your test bench based on the value of register mirrors.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;                          Accellera has come up with standards like IPXACT and system RDL to define your registers, this enables vendor independence to the users and most of generator tools are converging on these standards.  The ideal way of automating your register is to define the registers using the standards and use generators from vendors to auto generate the RTL, firmware code, documentation and system Verilog RAL classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; Quick survey on the tools supporting the standards indicated that there are many players in this space. One aspect which did not sink into my head was why the entire register solution can’t be packaged with the simulator itself, so that the user does not have to make additional investment on another tool. May be it might be on the product road map for the simulators.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;With VMM RAL being adopted in UVM, definitely the user base for RAL is going to increase.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1756695671530271969?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1756695671530271969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1756695671530271969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1756695671530271969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1756695671530271969'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/11/register-automation-using-vmmuvm-ral.html' title='Register Automation using VMM/UVM RAL'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5264382228316889652</id><published>2011-11-05T07:58:00.020+05:30</published><updated>2011-12-09T17:19:40.456+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Downside of being the “guinea pig”   for adopting the latest buzz words in verification !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Adopting the latest’s verification methods and trends is my hobby right from the year 2002 and I have been continuing this till date. Adoption includes adopting new feature in the tool/methodology or construct in a language to adopting a new method of verification which could potentially improve the productivity, results in finding more bugs and improve the maintenance of the test bench. The upside of this hobby is you keep yourself updated with new trends in the market and become the early bird in adopting a trend. Evaluating the down side of this hobby did not come to my mind till one of my friends put an insight into my mind, adopting all the marketing buzz words can become fatal.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;"&gt;His words of wisdom made me rewind my thoughts on all the possible trends I tried to adopt over years. Few common trends i observed in each of the adoption are as follows&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;1) New code development is only 10% rest of the effort is making enhancements to the current environment. Tool vendors do not take this equation and end up facing gaps in the feature offering.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;2) Being the first one to adopt a new verification trend, be prepared to face tool bugs, and sometimes even showstopper bugs.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;3) Not all people have the practice of updating themselves to the latest trend and are more than happy to implement things with outdated technology. These people find it difficult to adapt to changes, we have to carry this type of people with us.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;!--[if !supportLists]--&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;There have been feature or tools i have adopted early with became highly popular over years and some features i adopted early don’t even exist now.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-5264382228316889652?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5264382228316889652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5264382228316889652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5264382228316889652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5264382228316889652'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/11/downside-of-being-guinea-pig-for.html' title='Downside of being the “guinea pig”   for adopting the latest buzz words in verification !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1006752028986372806</id><published>2011-10-08T08:18:00.008+05:30</published><updated>2011-10-11T20:03:48.069+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Gate level simulation !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;One of time-consuming task in functional verification life cycle is gate level simulation. Gate level simulation can be broadly broken down into&lt;/p&gt;&lt;p class="MsoNormal"&gt;1) Gate level simulation after synthesis  to check equivalence with the RTL.&lt;/p&gt;&lt;p class="MsoNormal"&gt;2) Gate level simulation with SDF on the post routed netlist.   &lt;/p&gt;&lt;p class="MsoNormal"&gt;A common question that is asked by many fokes is why step 2 is required. The netlist before P &amp;amp; R is compared with the netlist after P &amp;amp; R &lt;span&gt; &lt;/span&gt;using formal tools for logic equivalence. Timing after P &amp;amp; R is checked with STA for all possible corners and configuration. It looks like an SDF simulation on post routed netlist is redundant.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Assume now a designer by mistake has place timing exception like false path and multi cycle path, the above condition goes undetected in the STA. Dynamic functional &lt;span&gt; &lt;/span&gt;gate level simulation with SDF on post routed netlist is counter check for STA and &lt;span&gt; &lt;/span&gt;catches if the designer has made mistakes on placing an &lt;span&gt; &lt;/span&gt;timing exception. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1006752028986372806?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1006752028986372806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1006752028986372806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1006752028986372806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1006752028986372806'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/10/gate-level-simulation.html' title='Gate level simulation !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1927488722679207754</id><published>2011-10-05T12:54:00.002+05:30</published><updated>2011-12-09T17:21:35.462+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Code coverage !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Coverage closure be it functional coverage or code coverage is one of the time consuming task in functional verification life cycle. With respect to functional coverage automatic coverage closure tools are available in the market. When it comes to code coverage it is very tedious and manual process to measure and close coverage, Code coverage number (Line, condition, fsm , toggle) of 95% is unacceptable in many places. The remaining &lt;span&gt; &lt;/span&gt;5 % &lt;span&gt; &lt;/span&gt;coverage holes need to be completely analyzed and closed. More perfection requires more time and resource . Generally code coverage analysis is done by verification engineers who have relatively less knowledge in design this impacts the overall efficiency of the task execution. &lt;span&gt; &lt;/span&gt;Why is code coverage important especially when we have functional coverage ? missing test cases are captured easily by code coverage which seems to have slipped through the functional coverage plan.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;                          &lt;/span&gt;It is good idea to not include the register package test for code coverage as this test would give a false pass on the register coverage. We generally expect the register to be covered using functional tests, by including register package test we will end up covering registers by just doing a read and write to all the bits which is&lt;span&gt;  &lt;/span&gt;not our intent. &lt;span&gt; &lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1927488722679207754?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1927488722679207754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1927488722679207754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1927488722679207754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1927488722679207754'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/10/code-coverage.html' title='Code coverage !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-8719056470695094973</id><published>2011-09-14T15:28:00.003+05:30</published><updated>2011-12-03T19:47:44.102+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>What make a verification team great !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Move with the industry trend&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Verification keeps moving at a very fast pace, great verification teams move with the advancements very fast and implement those in the projects to reap the benefits. Ordinary teams stay with the old ways of doing things.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Knowledge sharing &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The most important aspect for a verification team to become a great team is to share the knowledge they gained with the entire team improving the overall efficiency of the &lt;span&gt; &lt;/span&gt;team. &lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Take the entire team with you&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Most important aspect in managing and staging advance verification techniques in the project is the ability of the members to take the entire team with them. Ordinary teams follow the decision of the most powerful person in the team; great teams take a collaborative decision. &lt;span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Risk taking &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;To implement or adopt new verification trends the team should be able to take calculated risk. If the risk taking ability is not there then it points to an ordinary team.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Expect the unexpected &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;One of the attributes of the great verification team is to expect the unexpected result during an adoption to a new trend and successfully overcome it.&lt;span&gt;  &lt;/span&gt;Ordinary verification teams back out when the unexpected behavior happens. &lt;span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-8719056470695094973?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/8719056470695094973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=8719056470695094973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8719056470695094973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8719056470695094973'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/09/what-make-verification-team-great.html' title='What make a verification team great !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-7068096014266191219</id><published>2011-08-20T21:38:00.005+05:30</published><updated>2011-08-20T21:41:39.291+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>VMM Channel  methods  grab, ungrab, lock, unlock !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;Assume two different threads&lt;span&gt;  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;feeding a single channel with&lt;span&gt;  &lt;/span&gt;a sequence of transactions. If the transactions are just put in to the channel without using channel grab() the result would be that the sequence between two threads&lt;span&gt;  &lt;/span&gt;will be mixed producing unexpected results.&lt;span&gt;  &lt;/span&gt;Grab() method is used to request for exclusive access to the channel once the grab is activated no other thread can put an object in to the channel. Once the channel is loaded with the sequence of transaction object ungrab() should be used to release the channel for other threads. &lt;span&gt; &lt;/span&gt;Is_grabbed () function can be used to know if the channel is grabbed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="line-height: 115%; "&gt;&lt;span&gt;&lt;/span&gt;                                                                     Lock () method can be used to lock the channel producer (put ) or channel consumer &lt;span&gt; &lt;/span&gt;(get ). Unlock () can be initiated to remove the lock(). Status of the lock can be got using is_locked() method. These methods are useful to control channel from a different location say different block.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-7068096014266191219?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/7068096014266191219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=7068096014266191219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/7068096014266191219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/7068096014266191219'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/08/vmm-channel-methods-grab-ungrab-lock.html' title='VMM Channel  methods  grab, ungrab, lock, unlock !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-7889594855368826775</id><published>2011-07-11T03:02:00.001+05:30</published><updated>2011-07-11T03:05:40.329+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Using a verification methodology to solve a verification problem !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;Few problems that i always come across &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;with verification methodology users is limited knowledge on what the methodology can offer and lack of effort on their side to update them self on the new features of the methodology. Once they are presented a verification problem to be solved using a verification methodology they come up with a solution based on their limited knowledge of the methodology. The solution they come up is exactly not the best solution that the methodology can offer. User manual / reference guide of a methodology can only educate you on the features the methodology can offer. Ultimately taking a decision on what features to use under what circumstance is totally left to the users of the methodology. This is where I find many people making mistakes starting from a simple noncompliance to a major architectural mistake. Once such types of mistakes are done the code eventually becomes an excess baggage that needs to be carried and maintained for the rest of the project life span. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-7889594855368826775?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/7889594855368826775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=7889594855368826775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/7889594855368826775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/7889594855368826775'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/07/using-verification-methodology-to-solve.html' title='Using a verification methodology to solve a verification problem !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-2344369478592000322</id><published>2011-06-18T23:13:00.010+05:30</published><updated>2011-12-09T17:26:43.330+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>vmm_broadcast and vmm_scheduler  !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="line-height: 115%; font-family: Times, serif; "&gt;Channels are point-to-point data transfer mechanisms.  If multiple consumers had to extract same transaction descriptors from a channel&lt;/span&gt; &lt;/span&gt;then vmm_broadcast should be used. vmm_broadcast broadcasts transaction from one source channel to multiple output channels. Copy of the transaction from the source channel is forwarded to the output channels.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Assume if you have multiple interfaces having different signal level protocol transmitting the same  transaction&lt;/span&gt; at the same time a VMM broadcast can be used in this scenario. Unified generator is connected to the source channel of the vmm_broadcast and output channels of the broadcast are connected to the drivers of the interfaces.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;Vmm_scheduler directs the transaction from different input channels to single output channel based on a scheduling algorithm. The default scheduling algorithm is round robin mode, by adjusting the constraint you can also have a random scheduling implemented. If you need custom scheduling you can implement the same in the vmm_scheduler_election class. Scheduler can be used if you need to schedule transactions based on some timing information.&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12.0pt;line-height:115%;font-family:&amp;quot;Times&amp;quot;,&amp;quot;serif&amp;quot;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-family: Times, serif; line-height: 18px; "&gt; &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-2344369478592000322?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/2344369478592000322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=2344369478592000322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2344369478592000322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2344369478592000322'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/06/vmmbroadcast-and-vmmscheduler.html' title='vmm_broadcast and vmm_scheduler  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5724142806183861560</id><published>2011-05-08T03:56:00.010+05:30</published><updated>2011-05-08T05:14:46.981+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Verification environment architecture  !!!</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center; "&gt;&lt;div style="text-align: left;"&gt;Architecting a verification environment with a dynamically changing requirement is a real challenge, when the entire requirement is known upfront you can fit your problem statement perfectly in to methodology. But if you get requirements in bit and pieces then you make an architectural decision based on the know requirements, when more requirements trickle in you find that decision you did earlier was not right. Option you have on hand is to re-write the code and correct your mistake or patch up the code and deviate it from the methodology recommendations resulting in less reusability. &lt;span&gt;&lt;/span&gt;This is a typical problem that happens when overall picture of the problem statement is not understood by the architect. Another problem is due to the attitude that let us get the basic stuff working first, then incrementally fit the requirements in to the basic architecture.&lt;span&gt;Typical project flow when requirements are not know upfront will be like this ( Just for humor !!! &lt;span&gt;&lt;/span&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-uqpvVrqwe9U/TcXZPpmxZ8I/AAAAAAAAAkA/6RwmZ0tlO74/s1600/arch.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 286px;" src="http://3.bp.blogspot.com/-uqpvVrqwe9U/TcXZPpmxZ8I/AAAAAAAAAkA/6RwmZ0tlO74/s400/arch.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5604124174222190530" /&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-uqpvVrqwe9U/TcXZPpmxZ8I/AAAAAAAAAkA/6RwmZ0tlO74/s1600/arch.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center; "&gt;&lt;br /&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/1575376285321445036-5724142806183861560?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5724142806183861560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5724142806183861560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5724142806183861560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5724142806183861560'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/05/verification-environment-architecture.html' title='Verification environment architecture  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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://3.bp.blogspot.com/-uqpvVrqwe9U/TcXZPpmxZ8I/AAAAAAAAAkA/6RwmZ0tlO74/s72-c/arch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1650770451178566642</id><published>2011-04-02T18:06:00.003+05:30</published><updated>2011-04-02T18:12:58.937+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Channel  record &amp; playback in VMM !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Channel record and playback is useful feature which can be used to reproduce an issue hit at top level environment in a different block level environment. As you know the randomization changes with the change in system Verilog files for the same seed, the same scenario cannot be reproduced with the same seed in a different environment due to the change in the system Verilog files. We need to spend time running random regression with different seeds at block level to reproduce the issue that happened in the top level with a particular sequence. The alternative way to reproduce the issue at block level is to record the transaction at top level which is&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;done using channel record. Then playback the transaction through channel playback from the block level to reproduce the issue. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;// Record transaction in top level&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="font-size:10.5pt; line-height:115%;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt; gen.out_chan.record("Record_transaction"); &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; font-size: 14px; line-height: 16px; "&gt;// Play back at Block level&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="font-size:10.5pt; line-height:115%;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;gen.out_chan.playback(status,"Record_transaction",tr);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="font-size:10.5pt; line-height:115%;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;If (!status)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="font-size:10.5pt; line-height:115%;font-family:&amp;quot;Trebuchet MS&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;&lt;span style="mso-spacerun:yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;`vmm_error(log,”play back failed \n”);&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&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/1575376285321445036-1650770451178566642?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1650770451178566642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1650770451178566642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1650770451178566642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1650770451178566642'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/04/channel-record-playback-in-vmm.html' title='Channel  record &amp; playback in VMM !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-146442681862350311</id><published>2011-03-20T07:23:00.002+05:30</published><updated>2011-03-20T07:37:20.318+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>First look at UVM  Methodology  !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;I have been a&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;RVM/VMM user for many years following advancements that come in VMM&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;in every release; I try to use the new features whenever i get a chance. Recently i had a chance to take a first look at the UVM methodology. I was fully aware that UVM is based on the OVM methodology, with register package derived from VMM (RAL). Now how easy or difficult is it for a person with VMM background to pick up UVM with the fact that he does not have an OVM knowledge. From my experience I felt that this can be done very quickly in a matter of few days. As i started reading the UVM methodology and exploring &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;the features of the methodology, I did see a lot of similarities between UVM and VMM.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;People who had a chance to use VMM 1.2 &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;can make this switch even faster. I went through all the basic features UVM had to offer, looks very interesting. &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;Then i decided i should explore UVM features in detail.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-146442681862350311?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/146442681862350311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=146442681862350311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/146442681862350311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/146442681862350311'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/03/first-look-at-uvm-methodology.html' title='First look at UVM  Methodology  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1343267005659839861</id><published>2011-02-20T05:30:00.007+05:30</published><updated>2011-02-20T05:42:36.981+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Error injection in VMM environments  !!!</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;There are different approaches in VMM to inject error , each one selects a way which is comfortable for them. But when finalizing on an approach it is good to know the advantages and disadvantages in terms of test bench reuse and  code organization.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Error injection in transaction class attributes &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Design a transaction class with virtual fields specifying the error types and control the physical fields based on the virtual error types. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;This error injection code can be placed with basic transaction class or the error injection code can be a separate class extending the basic transaction class. &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;I would prefer the error injection class to be a separate class extending the basic transaction class as the code become better organized and you don’t end up having one big monolithic transaction class.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Most of the transaction based error injection should be done using this approach. &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;Sequence involving error injection can be &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;easily &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;generated using this approach.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Error injection&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;through&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;call back registered through driver.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Error injection on the signal level protocol controlling the driver attributes should be done through call back registers to the driver.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Transaction class error injection should not be handled through driver call backs. &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1343267005659839861?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1343267005659839861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1343267005659839861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1343267005659839861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1343267005659839861'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/02/error-injection-in-vmm-environments.html' title='Error injection in VMM environments  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5631516126216449226</id><published>2011-01-03T17:20:00.008+05:30</published><updated>2011-12-09T17:32:33.501+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Formal verification !!!</title><content type='html'>Recently i had a chance to know what formal verification is all about.  My first impression on formal verification, it uses white box techniques to verify design against the black box approach used in constraint random verification. If your assertions or property definitions is accurate, formal tool can hit bugs faster than regular simulation effort. Ramp up   on the formal tool takes little bit of time for people who are new to the formal verification world, debugging failures requires little bit of ramp up time as well. we need to debug failures without timing information by tracing schematics. When you get through the initial hiccups, you will definitely enjoy doing formal verification. Formal tool takes system Verilog or PSL assertions and tries to prove that your assertion can be violated by generating all possible stimuli.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-5631516126216449226?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5631516126216449226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5631516126216449226' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5631516126216449226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5631516126216449226'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2011/01/formal-verification.html' title='Formal verification !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4579802979000937095</id><published>2010-12-04T21:25:00.005+05:30</published><updated>2010-12-21T20:38:26.979+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>uni-directional, bi-directional constraint  &amp; functions in constraints !!!</title><content type='html'>Consider a simple constraint example a == b + c;&lt;br /&gt;&lt;br /&gt;Now if you constraint any of the 2 values of a,b,c the third value gets generated automatically due to the bi-directional nature of the constraint.&lt;br /&gt;&lt;br /&gt;Now modify the constraint void (a) == b+ C;&lt;br /&gt;&lt;br /&gt;Value of a gets generated first based on which b and c are generated. Generating a based on b and c is not possible. The same functionality can be achieved by using a solve before constraint as follows.&lt;br /&gt;&lt;br /&gt;a== b+c;&lt;br /&gt;solve a before b; solve a before c;&lt;br /&gt;&lt;br /&gt;Functions can be used in constraints for reusability between constraints, but important point to note is the constraints will become uni-directional when used in a function.&lt;br /&gt;&lt;br /&gt;function integer sum (integer b, integer c);&lt;br /&gt;sum=b+c;&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;Constraint sum_constraint { a==sum(b,c); }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4579802979000937095?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4579802979000937095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4579802979000937095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4579802979000937095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4579802979000937095'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/12/uni-directional-bi-directional.html' title='uni-directional, bi-directional constraint  &amp; functions in constraints !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-737043204501888401</id><published>2010-11-26T01:57:00.002+05:30</published><updated>2011-12-09T17:34:52.328+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Randomization of  floating point or Real variable !!!</title><content type='html'>What are the application areas of floating point numbers ?&lt;br /&gt;&lt;br /&gt;1) Floating point numbers are used in PLL configuration were fractional values are required.&lt;br /&gt;2) Processor,image processing &amp;amp; graphics applications mostly work on floating point numbers.&lt;br /&gt;&lt;br /&gt;Vera/ NTB does not even have a real or a floating point type; forget about randomizing a floating point number. The workaround for this is to write your own floating point class, randomize the class and use it. System verilog has a real type which is used to represents a floating point number, but a real type cannot be randomized. The LRM does not support the randomization of real data types. Some time back when i was discussing about this with one of my friend he was telling me that system verilog committee was working on this, not sure how true this information is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-737043204501888401?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/737043204501888401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=737043204501888401' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/737043204501888401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/737043204501888401'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/11/randomization-of-floating-point-or-real.html' title='Randomization of  floating point or Real variable !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-837266653478460589</id><published>2010-11-07T23:21:00.005+05:30</published><updated>2010-11-07T23:26:30.068+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Test end condition using vmm_consensus !!!</title><content type='html'>VMM provides the vmm_consensus class as a voting mechanism, which is used to determine when the test could be terminated. Earlier before the introduction of vmm_consensus class end of test condition was determined by some condition like score board empty condition or a timeout. The test end condition was tied to a specific environment and was not reusable across environments.&lt;br /&gt;&lt;br /&gt;With the introduction of vmm_consensus class various elements such as channels, notification, and transactors play the role of voter and all voters have to agree for a consensus. Even if one voter opposes there will be no consensus. The vmm_consensus has a wait_for_consensus ( ) method which will be called in vmm_env’s wait_for_end ( ) method. The wait_for_consensus ( ) method will block till all voters consent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How to use vmm_consensus to determine when the test should end ?&lt;br /&gt;&lt;br /&gt;1) Add vmm_consensus::wait_for_consensus ( ) method to vmm_env::wait_for_end () method&lt;br /&gt;&lt;br /&gt;2) Register voters in the vmm_env::build ( ) using end_vote.register_* () method, where end_vote is the instance of vmm_consensus defined in vmm.sv&lt;br /&gt;&lt;br /&gt;3) Each of the sub environment instance has a single vote, it can consent or oppose.&lt;br /&gt;&lt;br /&gt;4) We have options such as consensus_force_thru() which can be used by a particular subenv or a VMM components to force consensus through even though other components oppose the decision.&lt;br /&gt;&lt;br /&gt;5) As usual we have methods that can be used to monitor the status of consensus, which components oppose and which components consent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-837266653478460589?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/837266653478460589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=837266653478460589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/837266653478460589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/837266653478460589'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/11/test-end-condition-using-vmmconsensus.html' title='Test end condition using vmm_consensus !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5885592064768271955</id><published>2010-10-09T18:48:00.004+05:30</published><updated>2011-12-09T17:38:11.172+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Scoreboard for checking interrupts !!!</title><content type='html'>Architecting a good interrupt monitor and an interrupt scoreboard is very essential to hit bugs and close coverage on the interrupt logic of the design.The architecture is very simple, you need to have a shadow register for  your interrupt status register and predict the interrupt by writing in to this register, the predication should be done in the transactor based on the transaction class attributes  for a regular transaction, error condition ect ..    The interrupt scoreboard should reside on the passive interrupt monitor which reads the shadow register as well as the original hardware register and the mask and makes a comparison on the expected interrupts and flags an error if the interrupt is mismatching. The monitor should have options to clear the interrupt when it is available or accumulate interrupt and clear it when it is required. At end of the simulation a comparison of shadow register and real interrupt status register needs to be done to check if all the expected interrupts have arrived and flag appropriate error messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-5885592064768271955?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5885592064768271955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5885592064768271955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5885592064768271955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5885592064768271955'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/10/scoreboard-for-checking-interrupts.html' title='Scoreboard for checking interrupts !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1772442386946414636</id><published>2010-09-11T23:49:00.005+05:30</published><updated>2011-12-09T17:49:19.309+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Interfacing CRV environment with procedural environments !!!</title><content type='html'>One of interesting challenges in verification is building constraint random verification environment on top of an existing code which is a procedural code.The challenges are unique to each of the environments; simplest solution is wrapping the procedural code in a transactor which is connected to a channel which interfaces with the constraint random generators.  Transaction object attributes are mapped to different functionality in the procedural code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1772442386946414636?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1772442386946414636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1772442386946414636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1772442386946414636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1772442386946414636'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/09/interfacing-crv-environment-with-legacy.html' title='Interfacing CRV environment with procedural environments !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-332669769606154238</id><published>2010-08-22T20:32:00.006+05:30</published><updated>2011-12-09T17:57:15.273+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Tips to improve constraint solver performance !!!</title><content type='html'>Performance issues are very hard to debug, especially to find the root cause of the issue. If the constraint solving time is at unacceptable limits, the first area to debug is the bidirectional nature of the constraint implemented. quickly review the constrains that does not require bi-directional functionality and convert constraints from bidirectional to unidirectional using void termination or solve before, also reduce the number of constraints solved at a single point of time to improve performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-332669769606154238?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/332669769606154238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=332669769606154238' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/332669769606154238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/332669769606154238'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/08/tips-to-improve-constraint-solver.html' title='Tips to improve constraint solver performance !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4823351303416616171</id><published>2010-07-03T23:38:00.002+05:30</published><updated>2010-07-04T00:07:47.410+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Structures and union in system verilog !!!</title><content type='html'>VERA/NTB users migrating to system verilog have a tendency of not using structures and union construct in system verilog when architecting or implementing a system verilog verification environment. The reason being, this constructs are not available in VERA/NTB. Struct is pretty useful construct to group fields which are logically related to each other. It helps to organize you code. The union construct is very similar to a structure, but only one of the fields will be valid at a given point of time. Using packed struct and packed unions helps to organize fields in the memory without gaps, which in turn results in faster access to memory and results in faster simulation time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4823351303416616171?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4823351303416616171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4823351303416616171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4823351303416616171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4823351303416616171'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/07/structures-and-union-in-system-verilog.html' title='Structures and union in system verilog !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-9190424451858581308</id><published>2010-05-20T01:50:00.004+05:30</published><updated>2010-05-20T09:05:04.047+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Factory replacement  in the scenario generator scenario using  ‘.using’   gotcha !!!</title><content type='html'>When you want to do a factory replacement of a transaction class in your scenario,we assign the factory to .using.&lt;br /&gt;&lt;br /&gt;Scenario.using=transaction_factory;&lt;br /&gt;&lt;br /&gt;The  gotcha in this factory replacement is we need to implement the allocate() and copy() methods in the extended class for the factory replacement to work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many times i have seen people including myself spending time debugging their code when using  “.using” for factory replacement as they are not aware of the gotcha.Maybe the RVM/VMM documentation should have this requirement highlighted so that the user can easily understand this requirement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-9190424451858581308?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/9190424451858581308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=9190424451858581308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/9190424451858581308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/9190424451858581308'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/05/factory-replacement-in-scenario.html' title='Factory replacement  in the scenario generator scenario using  ‘.using’   gotcha !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-8830569574596633474</id><published>2010-05-08T22:45:00.006+05:30</published><updated>2010-07-12T19:05:40.000+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Atomic generator  using allocate() !!!</title><content type='html'>RVM/VMM atomic and scenario generator randomizes a blueprint pattern which is assigned with the extended class (factory) , the copy of the randomized blueprint is pushed into the channel. Most of the RVM/VMM users use this approch in there custom generators. Is there a different way of implementing your atomic generator without using a copy() method ?. The answer is yes, following method can be used to generate atomic transaction without using copy().&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_l7B_mRZtMcg/S-WiyJ7iMLI/AAAAAAAAAMY/sVdPuT5jfvM/s1600/gen.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 194px; DISPLAY: block; HEIGHT: 320px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5468956305054118066" border="0" alt="" src="http://2.bp.blogspot.com/_l7B_mRZtMcg/S-WiyJ7iMLI/AAAAAAAAAMY/sVdPuT5jfvM/s320/gen.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For the above code to work you need to implement the allocate method in your extended class. The extended class is assigned to the factory before the start_xactor() method is called.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-8830569574596633474?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/8830569574596633474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=8830569574596633474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8830569574596633474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8830569574596633474'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/05/custom-atomic-generator-using-allocate.html' title='Atomic generator  using allocate() !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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/_l7B_mRZtMcg/S-WiyJ7iMLI/AAAAAAAAAMY/sVdPuT5jfvM/s72-c/gen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-657179472213309857</id><published>2010-05-02T01:41:00.004+05:30</published><updated>2010-05-02T01:52:57.832+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>ASIC verification tasks verification engineers dislike the most !!!</title><content type='html'>I was having a friendly discussion with few of my fellow verification engineers, we were discussing about the verification tasks they dislike the most. The conclusion from the discussion was they disliked verification tasks which were laborious,  which requires manual effort and had very little learning opportunity. The verification task they disliked are as follows.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)Language migration without  the help of a commercial language conversion tool &lt;br /&gt;2)Code coverage analysis and identification of code coverage exclusions.&lt;br /&gt;3) “X” tracing while debugging gate level simulation.&lt;br /&gt;4)Release management ( Tagging the release code ,Triggering  regression and debug of  regression results ,becomes messy when more that 25 people are involved and release management is handled by a single person)&lt;br /&gt;5)Working on outdated technology which is away from the verification market movement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-657179472213309857?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/657179472213309857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=657179472213309857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/657179472213309857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/657179472213309857'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/05/verification-tasks-verification.html' title='ASIC verification tasks verification engineers dislike the most !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4759277230903710496</id><published>2010-04-25T00:53:00.005+05:30</published><updated>2011-12-09T18:04:46.009+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Top 6 verification misconceptions!!!</title><content type='html'>1)&lt;strong&gt;This is a silicon proven IP no need to do rigorous testing and coverage&lt;/strong&gt; – Hold on are you sure if all the feature crosses are validated by the IP vendor in the silicon.&lt;br /&gt;&lt;br /&gt;2)&lt;strong&gt;RTL is the one that is taped out and converted to a product no need to review verification environment, test plan review is sufficient &lt;/strong&gt; --- 70 % of time is spend on verification out of which considerable amount of time is spend on developing test bench, re-usable and well architected test bench helps you to achieve your verification objectives in less time and in maintenance of your code in longer run.&lt;br /&gt;&lt;br /&gt;3)&lt;strong&gt;This is a working legacy code keep it &lt;/strong&gt;--- Legacy code with defect in the architecture is difficult to maintain and doing an enhancement on the code is a nightmare. Consider re-coding sections of the legacy code when you have to do an enhancement in the code to support a new feature.&lt;br /&gt;&lt;br /&gt;4)&lt;strong&gt;Start the implementation and study the protocol as you go. We want you to be productive from day1&lt;/strong&gt; --- A big no!! You cannot architect an environment without understanding the protocol completely and you will always end up with a situation were you were not informed about a requirement.&lt;br /&gt;&lt;br /&gt;5)&lt;strong&gt;Good verification engineer is the one who hit lot of bugs &lt;/strong&gt;– Hold on you can have a bad designer who can make many mistakes, making ordinary verification engineer look exceptional.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)&lt;strong&gt;No need to have an architecture document for a verification environment&lt;/strong&gt; --- Reverse engineering a code to find out the verification environment architecture is not an easy job. It is a pain of understanding the architecture of an environment after reverse engineering a code. Always document the architecture of your verification environment if possible document a class diagram.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4759277230903710496?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4759277230903710496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4759277230903710496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4759277230903710496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4759277230903710496'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/04/top-6-verification-misconceptions.html' title='Top 6 verification misconceptions!!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-157260003684739766</id><published>2010-04-17T22:12:00.003+05:30</published><updated>2011-12-09T18:10:26.370+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Checker for complex constraints spanning multiple transaction !!!</title><content type='html'>It is hard to debug the constraint failures spanning multiple transactions say  sequence of ten to fifteen transaction were the constraints on each atomic transaction is dependent on the other. Manual debug on such failures are time consuming.We can use a procedural checker to check the randomization of the scenario which is an array of transaction objects. In RVM/VMM the procedural checker can be placed in the post_scenario_gen callback of the RVM/VMM scenario generator. The post_scenario_gen has drop bit which can be set from the callback to stop the transactions from being pushed in to the channel.The checker is active at all times and flags an error if there is an error in the randomization across transaction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-157260003684739766?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/157260003684739766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=157260003684739766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/157260003684739766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/157260003684739766'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/04/checker-for-complex-constraints.html' title='Checker for complex constraints spanning multiple transaction !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4603486752115236702</id><published>2010-04-14T02:55:00.016+05:30</published><updated>2010-04-14T03:53:48.242+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>System verilog 2009 new  features !!!</title><content type='html'>Following are some of the new features of system verilog 2009 standard that caught my attention.&lt;br /&gt;&lt;br /&gt;1)`begin_keyword `end_keyword&lt;br /&gt;&lt;br /&gt;The above defines can be used between any section of code to maintain backward compatibility with verilog or system verilog 2005, very useful if you are migrating your testbench or design to system verilog, you might come across system verilog keywords used in your verilog design which can cause compile to fail. With system verilog 2009 just wrap the code with `begin_keyword and `end_keyword to get past the error without modifying your code.&lt;br /&gt;&lt;br /&gt;2) Let construct substitute to macros ?&lt;br /&gt;&lt;br /&gt;Package example_package;&lt;br /&gt;Let expand_operation (a,b) = assert ( !a &amp;amp; b)&lt;br /&gt;end package;&lt;br /&gt;&lt;br /&gt;module test ( …);&lt;br /&gt;import example_package::*;&lt;br /&gt;&lt;br /&gt;always @ ( …) begin&lt;br /&gt;expand_operation (read,write); // expands to assert(!read &amp;amp; write)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end module&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Pure constraints&lt;br /&gt;&lt;br /&gt;virtual class example;&lt;br /&gt;pure constraint valid;&lt;br /&gt;endclass&lt;br /&gt;&lt;br /&gt;Allows you to declare pure constraint in the abstract class,just the declaration alone without implementation. The implementation of this constraint is provided in the extended class with the same constraint name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4603486752115236702?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4603486752115236702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4603486752115236702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4603486752115236702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4603486752115236702'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/04/system-verilog-2009-new-features.html' title='System verilog 2009 new  features !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4056361745248464404</id><published>2010-03-25T20:46:00.003+05:30</published><updated>2010-03-25T21:52:36.681+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Closing  “quality gap” in functional verification !!!</title><content type='html'>Recently i came across a white paper on a new EDA tool certitude which is used to close the ”quality gap”  in functional verification using mutation techniques. The tool introduces mutations in the RTL code and then subjects the mutated RTL to the verification team's test bench and checks if the verification environment has been able to detect, activate and propagate the mutations. If the verification environment is able to catch the mutations, then the verification is probably complete and there is a reasonable certainty that no bugs are left.  If not, there could be serious weaknesses in the test bench and it needs to be reworked. Put simply, if the verification testbench cannot detect the mutations (or bugs) introduced, chances are there that other bugs are also left out. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another way to see the situation is that after introducing mutations, we have two versions of the RTL code, one original and one mutated (say, bugs) and the verification environment is passing both. Clearly then there is a weakness in the verification environment which needs to be fixed.&lt;br /&gt;&lt;br /&gt;The tool works with all the major simulators available in the market and works with all languages C, System C, System Verilog, Specman e, Vera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4056361745248464404?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4056361745248464404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4056361745248464404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4056361745248464404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4056361745248464404'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/03/closing-quality-gap-in-functional.html' title='Closing  “quality gap” in functional verification !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-2092742175625267003</id><published>2010-03-21T04:11:00.001+05:30</published><updated>2010-03-21T04:27:27.843+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>VMM 1.2 tutorial !!!</title><content type='html'>I was looking out for a nice tutorial on the new features of VMM 1.2. I came across this 2 hr video tutorial on VMM 1.2 features on the VMM central web site (http://www.vmmcentral.org ). Nicely composed video covers all aspects of VMM 1.2 release from implicit phasing, analysis ports, transport &amp;  factory. Definitely useful for VMM 1.1 users  migrating to VMM 1.2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-2092742175625267003?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/2092742175625267003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=2092742175625267003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2092742175625267003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2092742175625267003'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/03/vmm-12-tutorial.html' title='VMM 1.2 tutorial !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4320542377059529529</id><published>2010-03-17T03:16:00.008+05:30</published><updated>2010-03-17T22:12:40.898+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Another verification methodology UVM !!!</title><content type='html'>Recently through one of my friends  i  came to know about the development of a  new verification methodology UVM.The UVM ( Universal verification methodology ) is being standardized by Accellera Technical Subcommittee (TSC) and claims to solve the system verilog  cross methodology interoperability problem. This methodology is being suppored by all the 3 major EDA vendors synopsys, cadence and mentor. The advantage of switching to this methodology (when it is available)   is portability  of the methodology across different vendors.  The base code for this methodology will be from OVM  version 2.0.3.The base classes for UVM methodology is expected by Q1 2010.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It is still not clear about the backward compatability of this methodology with OVM. To me backward compatibility with VMM is out of question as the base code for this methodology is from OVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4320542377059529529?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4320542377059529529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4320542377059529529' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4320542377059529529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4320542377059529529'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/03/another-verification-methodology-uvm.html' title='Another verification methodology UVM !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-5143232035117580557</id><published>2010-02-20T23:54:00.004+05:30</published><updated>2011-12-09T18:22:02.375+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Functional coverage in RVM /VMM !!!</title><content type='html'>The conventional way of collecting functional coverage for a transaction class in RVM/VMM is through RVM/VMM callback and it generally reports the functional coverage on the random transaction generated by the generator, The functional coverage point hit or miss is purely dependent on the generated random values there is no real check if that scenario was hit in the RTL or not, meaning if you disconnect the RTL completely from the verification environment and run the test the functional converge point will still be hit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ideal way is to have a passive monitor hooked up to the RTL which will collect functional coverage, the idea is like sampling the values from the RTL through the passive monitor and unpacking the bytes to a transaction class object and from the transaction class object we can easily collect functional coverage. By having such an arrangement we make sure that the functional coverage point is only hit when the scenario is hit in the RTL. I know this approach requires more effort but we can be absolutely sure that the functional coverage hit will happen only if the scenario happens in the RTL. More over your functional coverage code will be isolated from rest of the verification environment code. In case of VIP development, this is the right approach to group you functional coverage model with a passive monitor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some of the drawbacks to this approach are the latest coverage convergence technology might not work well with this approach. You might not be able to tune or bias your constraint solver to achieve your functional coverage convergence automatically. Especially when you collect the functional coverage from RTL nodes you need to update your test bench whenever there is a change in the RTL code which affects the way functional coverage is collected.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;one more reason for choosing this approach is if you have more than one way of verifying the design and we want the functional coverage monitor to collect functional coverage irrespective of the way of generating the stimulus this approach will work perfectly well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-5143232035117580557?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/5143232035117580557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=5143232035117580557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5143232035117580557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/5143232035117580557'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/02/compile-flow-for-vera.html' title='Functional coverage in RVM /VMM !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4141365427837673954</id><published>2010-01-01T12:17:00.012+05:30</published><updated>2011-12-09T18:26:01.891+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>RVM/VMM Scenario generator !!!</title><content type='html'>RVM/VMM ships with some pretty useful built-in components and applications. RVM/VMM's Atomic Generator is probably one of the most powerful ones, yet it's pretty basic. It can definitely help you generate a flow of random items but it was not intended for generation of sequences. A sequence (scenario) is a set of items that have some sort of correlation between them. For example - consider a set of 6 transactions where the transaction 4 depends on the previous transactions say transaction 2. Atomic generator can not generate this kind of sequence, RVM/VMM addresses the need for smart scenarios with the "RVM/VMM Scenario Generator"&lt;br /&gt;&lt;br /&gt;Since we can not anticipate the future enhancement in the verification environment it is better that we provide the flexibility in the verification environment for generating scenarios. Selecting scenario generator will be the right step.&lt;br /&gt;&lt;br /&gt;The deployment of scenario generator in the verification environment is slightly complex that deploying an atomic generator, but we can have the complete controllability on the micro transactions in a sequence using scenario generators. Deploying a scenario generator in the verification environment will help you in the longer run, also you can randomize between scenarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4141365427837673954?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4141365427837673954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4141365427837673954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4141365427837673954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4141365427837673954'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2010/01/year-2009-quick-recap.html' title='RVM/VMM Scenario generator !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-6444374484897951138</id><published>2009-12-16T17:57:00.005+05:30</published><updated>2011-12-09T18:33:31.852+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Infact coverage convergence tool  !!!</title><content type='html'>To start with infact tools features; infact is a graph based tool which generates the random values and traverse through the various predefined paths through graph algorithm. It uses a complimentary technology to a constraint solver (i.e) a graph algorithm. The tool has to be inputted with graph rules which will be processed by the tool to generate all possible combination of the rules. There are no redundant values or combinations generated. The unique value is generated across multiple parallel runs on server farm. We need to provide the tool with all possible combinations. The tool can work with any language say verilog, vhdl, vera, ntb, specmen, system verilog &amp;amp; C++ . Infact tool communicates with simulator through a PLI call. Existing constraint random code needs to be represented as a graph rule and the infact tool will generate the random values. &lt;div&gt;&lt;br /&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/1575376285321445036-6444374484897951138?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/6444374484897951138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=6444374484897951138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6444374484897951138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6444374484897951138'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/12/infact-coverage-convergence-tool.html' title='Infact coverage convergence tool  !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-6869865578859643282</id><published>2009-10-07T18:47:00.000+05:30</published><updated>2009-10-07T18:50:27.574+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Joy of doing ASIC verification!!!</title><content type='html'>Verification is often treated as the step-child of design. Decade back verification was considered less critical task than design by some companies and fresher’s where often pushed in to verification It’s not surprising, then, that most of the verification engineers want to be designers. But now verification is more lucrative career option than design and many experience people now hold on to verification without moving to design. It is generally estimated that 70% of ASIC design cycle is spend on functional verification. The ratio of verification engineers to design engineers is approximately 3:1. Job switching for verification engineers is easy when compared to the designers provided they have the right skill set. The advancements happen in verification at a very fast rate that design.&lt;br /&gt;&lt;br /&gt;Earlier verification job was looked down, as the design is what is getting taped out and moves in to mass production stage not the test bench. But verification requires lot more effort and skills, example, to test a 100 line state machine we need to develop testbench which will have atleast 500 lines of code and draft a test plan which covers all the possible scenarios. VIP development companies get their revenues from their testbench which is licensed and shipped as a product.&lt;br /&gt;&lt;br /&gt;Reasonably experienced person will know that building a re-useable system level verification environment and verifying the design without any post silicon bugs is more difficult than adding a glue logic in the design. &lt;br /&gt;&lt;br /&gt;Do you still believe verification is a less critical task and requires lesser expertise that design?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-6869865578859643282?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/6869865578859643282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=6869865578859643282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6869865578859643282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6869865578859643282'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/10/joy-of-doing-asic-verification.html' title='Joy of doing ASIC verification!!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-9026465069886595740</id><published>2009-09-27T12:59:00.005+05:30</published><updated>2011-12-09T18:49:53.018+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Score board architecture !!!</title><content type='html'>&lt;div&gt;How would you implement the following requirement of designing a scoreboard ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;1) Scoreboard should predict a DUT transformation.&lt;br /&gt;2) Scoreboard should be able to handle packet drops.&lt;br /&gt;&lt;br /&gt;Just extend the VMM data stream scoreboard and implementing few virtual methods like transform, quick_compare &amp;amp; compare. use expect_with_losses() method for requirement (2). The requirement (1)  can be  implemented easily with transform method ().&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;VMM has much more robust features to offer, it is a good idea to check out the features available in VMM score board before coding your own scoreboard, i believe it would save lot of time. &lt;br /&gt;&lt;br /&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/1575376285321445036-9026465069886595740?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/9026465069886595740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=9026465069886595740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/9026465069886595740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/9026465069886595740'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/09/score-board-architecture.html' title='Score board architecture !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-6652879255344741692</id><published>2009-09-20T15:48:00.001+05:30</published><updated>2011-12-09T18:52:37.859+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>How do you identify a good functional verification engineer?</title><content type='html'>Evaluation based on product success:&lt;br /&gt;&lt;br /&gt;The answer looks straight forward, at the end of an emulation effort, chip tape out &amp;amp; chip production. If there are no functional bugs and design works as expected then obviously the person who has verified the design is a good verification engineer.&lt;br /&gt;&lt;br /&gt;The above statement has a rider; the above result can be produced in three circumstances&lt;br /&gt;&lt;br /&gt;1) Good designer, bad verification engineer &amp;amp; very low bug rate.&lt;br /&gt;2) Bad designer, good verification engineer &amp;amp; very high bug rate.&lt;br /&gt;3) Re-used design which is silicon proven &amp;amp; no bugs.&lt;br /&gt;&lt;br /&gt;If your chip taped out successfully without any functional issues with scenario 2 , then you have identified a good verification engineer.&lt;br /&gt;&lt;br /&gt;Evaluation based on process success:&lt;br /&gt;&lt;br /&gt;You wrote a verification environment, found lot of design bugs, now you need to verify a design enhancement which requires changes in your earlier verification environment. Now effort required to do the changes in your verification environment depends on reusability of code you have written earlier. If you are able add the enhancement within a short span of time with little code changes you are on track to be identified as good verification engineer.&lt;br /&gt;&lt;br /&gt;Evaluation when the design success is not immediately visible:&lt;br /&gt;&lt;br /&gt;This type of scenario is seen in VIP development where the development is verified internally and product release is done for the customers use.&lt;br /&gt;&lt;br /&gt;The only way to identify a good verification engineer under this scenario is “customer bug rate over a fixed time say 12 months” Vs “internal bug rate during development”. If there are no customer bugs for a long period of time on the feature, you have identified a good verification engineer.&lt;br /&gt;&lt;br /&gt;Evaluation based on knowledge of language /methodology /protocol:&lt;br /&gt;&lt;br /&gt;This is the method most of the people use for identifying a verification engineer during hiring in a new organization. If the person has good coding experience in projects, he will be having a very good command on verification languages and will be well versed with the intricacies of the language. Asking a person to write a code for a given scenario will test his knowledge of the language and test his problem solving skills. Testing a persons knowledge of protocol will help us to know how well he has understood the protocol and used the knowledge in verifying the design.&lt;br /&gt;&lt;br /&gt;Evaluation based on moving with technology:&lt;br /&gt;&lt;br /&gt;This is very important aspect in today’s industry. The verification methodology, tools improvements happens at a very fast rate from the EDA vendors helping the verification engineers to reduce the time on verification. A good verification engineer will definitely keep himself updated on the new aspects of functional verification which is good sign in identifying a good verification engineer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have also in my past come across some sense less interviewers evaluating verification hires on his knowledge of digital electronics and CMOS. Does a verification engineer use digital design or CMOS for architecting or writing his test bench?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-6652879255344741692?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/6652879255344741692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=6652879255344741692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6652879255344741692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6652879255344741692'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/09/how-do-you-identify-good-functional.html' title='How do you identify a good functional verification engineer?'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-1372413946048962314</id><published>2009-09-12T14:33:00.001+05:30</published><updated>2011-12-09T19:00:40.966+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Verification effectiveness!!!</title><content type='html'>“Functional verification takes 70% of the chip design cycle”. Writing test plans, Writing reusable verification environment, writing assertions for the design, debugging RTL failures, attaining code coverage and functional coverage goals &amp;amp; gate level simulation and debug are some of the common activities a functional verification engineer goes through in project life cycle before tape out. The work of verification engineer exponentially increases if the design under test has more number of bugs, which involves lot of RTL debug effort. Metrics on which a verification engineer is evaluated is on “How many bugs where hit during functional verification” Vs “bugs hit during emulation/post silicon validation” Even a single post silicon functional bug indicates the ineffectiveness in the functional verification.&lt;br /&gt;&lt;br /&gt;If you are verification engineer and you feel that you have hard time in meeting your schedules and you work for more hours in office (say more than 8 hours) to meet the dead lines. Following are some effective ways i used to meet the dead lines without compromising on work quality or the compromise on working hours.&lt;br /&gt;&lt;br /&gt;1) Micro schedule your tasks with effort estimates and get an approval on the time line from your manager.&lt;br /&gt;&lt;br /&gt;2) Whenever scope of the work is increased / decreased re-schedule the effort estimates and keep your manager updated about this.&lt;br /&gt;&lt;br /&gt;3) Prioritize your tasks and complete one after the other.&lt;br /&gt;&lt;br /&gt;4) Whenever you are writing a test bench make sure your test bench is reusable. This can help you to minimize your work at a later point of time.&lt;br /&gt;&lt;br /&gt;5) Always try to use module level verification environment at the system level. Maximum effort you need to put is the integration effort from module level to system level.&lt;br /&gt;&lt;br /&gt;6) Always write random verification environment to test your design, most of the bugs are easily captured by random verification environment. Write a directed test case only if it is absolutely required to hit a functional coverage / code coverage hole.&lt;br /&gt;&lt;br /&gt;7) Always move with the market, try learning and using new technology which will overall reduce the verification effort. Example adoption to tested methodology like VMM or OVM might be initially tough but on a longer run it will reduce your time to verification.&lt;br /&gt;&lt;br /&gt;8) Always file a bug when you hit design issue, this is very important because this is the only metrics on which a verification engineer gets evaluated. Also top level management will know the effectiveness of the verification and schedule slips due to design issues.&lt;br /&gt;&lt;br /&gt;9) Always keep your manager updated with status of your task so that he will be in position to evaluate your bandwidth for future tasks.&lt;br /&gt;&lt;br /&gt;10) Never compromise on testing a DUT feature due to lack of test bench support, this may lead to emulation/post-silicon bugs.&lt;br /&gt;&lt;br /&gt;11) Always keep the code coverage analysis towards the end of the project after your function coverage goals are met.&lt;br /&gt;&lt;br /&gt;12) When you are stuck with a problem, do not work continuously to fix the issue this will increase the stress level and you will end up spending more time hitting on the areas around the issue. Take a break from the issue and come back with a fresh mind.&lt;br /&gt;&lt;br /&gt;13) Try to understand the code base relevant for the enhancement or the modification, spending time on understanding overall code base has diminishing returns.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Does the functional verification engineer get rewarded for his verification efforts is really a question mark and largely dependent on the company you work for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-1372413946048962314?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/1372413946048962314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=1372413946048962314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1372413946048962314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/1372413946048962314'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/09/verification-effectiveness.html' title='Verification effectiveness!!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-2029815580611926772</id><published>2009-08-09T08:35:00.001+05:30</published><updated>2011-12-09T19:03:38.975+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>six reasons why you should use system verilog for verification !!!</title><content type='html'>1) System verilog is an IEEE standard supported by multiple vendors, your code is portable across simulators.You are not tied to a single vendor, which is the case if you are using HVL like VERA/NTB/SPECMAN.&lt;br /&gt;&lt;br /&gt;2) Free open source standard verification methodologys like VMM &amp;amp; OVM  are available which can be used with system verilog.&lt;br /&gt;&lt;br /&gt;3) Simulation speed will improve,if you are an HVL user using VERA/SPECMAN for verification.&lt;br /&gt;&lt;br /&gt;4) Most of the VIP vendors support system verilog, building verification environment for SOC will not be an issue.&lt;br /&gt;&lt;br /&gt;5) System verilog interoperability layers are available, you can re-use you VERA/NTB code from system verilog,similar arrangement is available for specman user too.&lt;br /&gt;&lt;br /&gt;6) System verilog supports most of the constructs supported by HVL ( VERA/NTB/SPECMAN) , migration to sytem verilog for HVL users will not be an issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-2029815580611926772?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/2029815580611926772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=2029815580611926772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2029815580611926772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2029815580611926772'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/08/six-reasons-why-you-should-use-system.html' title='six reasons why you should use system verilog for verification !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-3677419949460831142</id><published>2009-07-19T15:24:00.001+05:30</published><updated>2011-12-09T19:14:21.246+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Learning curve for a verification engineer !!!</title><content type='html'>For a verification engineer, which of following work environment gives him maximum learning opportunity ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) IP verification&lt;br /&gt;2) SOC verification&lt;br /&gt;3) Verification IP developement&lt;br /&gt;4) Verification consultancy&lt;br /&gt;&lt;br /&gt;I will try to evaluate each of these work environment.&lt;br /&gt;&lt;br /&gt;According to me,the skill you accuire on doing your day to day activities at your work place should match the requirements of the industry and should be portable across companies. (i.e) Assume you are doing an assembly level verification for a processor design using internal tools of that company, the methodology and tool knowledge is limited to that particular company and skill is not portable between companies, then the skill you accuired is not marketable, hence the learing curve is minimum in this case.&lt;br /&gt;&lt;br /&gt;We can find our self in above scenario in verification consultancy work environment where we have very little control of job nature , implementation flexibily is also minimal in this case. One good thing about this work enviroment is you will get your hands dirty on different type of projects and you will rarely find your self struck with the same project. In comparitive scale verification consultancy work enviroment gives verification engineer moderate learning curve.&lt;br /&gt;&lt;br /&gt;Verification IP developement requirement and process are different from RTL developement and verification. In this kind of work environment we have very good learning curve on the new verification methodology , we can improve our knowledge on different languages as VIP are developed in single language but controlled through different languages like VERA/NTB/VERILOG/SYSTEM VERILOG /C. you can gain good protocol knowledge by developing the VIP and stay updated on the developements in the protocol. One of the draw backs in VIP developement work environment is your initial learning curve will be steep, after few years most of you work will be just bug fixes and some times VIP enhancements. In comparitive scale VIP developement work enviroment gives verification engineer moderate learning curve.&lt;br /&gt;&lt;br /&gt;SOC verification work environment is different, as the verification is done on proven design IP,finer points in protocol are generally ignored. One good thing in SOC verification is we end up working on different type of protocol and interfaces. In comparitive scale SOC verification work enviroment gives verification engineer good learning curve provided he works on different interfaces every project.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In case of IP developement work environment , your learning curve on the protocol will be good.The test plan and implementation will touch the finer points in protocol verification. In comparitive scale IP verification work enviroment gives verification engineer good learning curve provided his company has migrated to system verilog or HVL based verification.&lt;/p&gt;&lt;p&gt;The best scenario is to have at least a few years of experience in all the type work environments, so that you can get good experience in verification methodology, verification tools,languages &amp;amp; different protocols. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-3677419949460831142?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/3677419949460831142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=3677419949460831142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3677419949460831142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3677419949460831142'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/07/learning-curve-for-verification.html' title='Learning curve for a verification engineer !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-6915273264879471465</id><published>2009-04-30T13:00:00.002+05:30</published><updated>2011-11-29T20:04:16.704+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>VMM Planner</title><content type='html'>So what is VMM planner ? VMM planner is a tool which can atomatically annotate the functional coverage and code coverage from regression runs and present the data in a XLS or XML format. It associates the test plan to the test result automatically. The planner can be used for managing verification effort for any project. The basic requirement for using VMM planner is we need to have complete test plan mapped to a functional coverage model. Once we have the plan as an XML or HVP document we can automaticlly annotate the test result using HVP commands. Some of the user provided metrics like bug count , test pass/fail count can be provided to planner tool using the userdata command .We can use VMM planner to report verification status to top level management.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-6915273264879471465?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/6915273264879471465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=6915273264879471465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6915273264879471465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/6915273264879471465'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/04/vmm-planner.html' title='VMM Planner'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-4457685908654213292</id><published>2009-03-20T17:49:00.002+05:30</published><updated>2011-12-09T19:18:06.224+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Coverage convergence technology (CCT)</title><content type='html'>CCT automates the process of going between coverage goals and determining what constraints to modify, then modifying the constraint to achive the functional coverage goal. CCT also has a provision to automatically generate functional coverage groups from the VERA/NTB/System verilog code based on the constraints specified.&lt;br /&gt;&lt;br /&gt;The automatically generated functional coverage code can be used as the starting point for writing the functional coverage model and can be integrated with the DV enviroment. CCT also allows parallel test runs with each test run targetting different coverage points without having any overlap between them. parallel test runs without overlapping random values is achived by providing the tool with a bias file which is generated by the tool based on the functional coverage data base.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-4457685908654213292?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/4457685908654213292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=4457685908654213292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4457685908654213292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/4457685908654213292'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/03/coverage-convergence-technology-cct.html' title='Coverage convergence technology (CCT)'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-2966186352517657606</id><published>2009-03-01T11:07:00.000+05:30</published><updated>2009-10-04T15:00:51.447+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Streaming operators --- System verilog</title><content type='html'>In VERA/NTB we have vera_pack &amp;amp; vera_unpack methods to pack a class object to bit stream or unpack a bit stream to a class object. System verilog does not have a pack or unpack methods the replacement for this methods are the Streaming operators &lt;&lt; , &gt;&gt;. These operaters have the same functionality as the pack/unpack methods. We frequently see the usage of pack and unpack methods while extending the RVM/VMM classes like rvm_data/vmm_data.&lt;br /&gt;&lt;br /&gt;Following is an example on the usage of Streaming operators&lt;br /&gt;&lt;br /&gt;byte stream[$]; // byte stream&lt;br /&gt;&lt;br /&gt;class Packet&lt;br /&gt;rand int header;&lt;br /&gt;rand int len;&lt;br /&gt;rand byte payload[];&lt;br /&gt;int crc;&lt;br /&gt;constraint G { len &gt; 1; payload.size == len ; }&lt;br /&gt;function void post_randomize; crc = payload.sum; endfunction&lt;br /&gt;endclass&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;send: begin // Create random packer and transmit&lt;br /&gt;byte q[$];&lt;br /&gt;Packet p = new;&lt;br /&gt;void’(p.randomize());&lt;br /&gt;q = {&lt;&lt; byte{p.header, p.len, p.payload, p.crc}}; // pack&lt;br /&gt;stream = {stream, q}; // append to stream&lt;br /&gt;end&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;receive: begin // Receive packet, unpack, and remove&lt;br /&gt;byte q[$];&lt;br /&gt;Packet p = new;&lt;br /&gt;{&lt;&lt; byte{ p.header, p.len, p.payload with [0 +: p.len], p.crc }} = stream;&lt;br /&gt;stream = stream[ $bits(p) / 8 : $ ]; // remove packet&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-2966186352517657606?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/2966186352517657606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=2966186352517657606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2966186352517657606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/2966186352517657606'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/streaming-operators-system-verilog.html' title='Streaming operators --- System verilog'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-3437500385147110869</id><published>2009-02-19T17:48:00.001+05:30</published><updated>2011-12-09T19:21:38.029+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Automated coverage closure</title><content type='html'>Nusym tool does automated coverage closure. It automatically directs the random constraints so as to target coverage points.It automates the process of going between coverage goals and determining what constraints to modify, then modifying the constraint to achive the coverage goal. When we hit bug in random scenario we generally re-play the sequence to fix the bug , but with Nusym's verification tool the same bug is reproduced just at the point of bug , the long sequence of random transaction need not be reproduced to hit the bug. The tool supports both VERA and Systemverilog languages for automatic coverage closure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-3437500385147110869?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/3437500385147110869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=3437500385147110869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3437500385147110869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3437500385147110869'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/automated-coverage-closure.html' title='Automated coverage closure'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-3654482132112779563</id><published>2009-02-15T10:34:00.000+05:30</published><updated>2009-10-04T15:01:26.875+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Randomization of scalar variables -- System Verilog</title><content type='html'>In VERA/NTB to randomize a set of variables we need to have variables in the class add constraints/ in-line constraints to randomize the variables. More over the variables have to be of type rand or randc Assume we have a requirement to randomize a set of variables outside a class with a set of constraints. We have the option of using random(),urandom() or urandom_range() and randomize the variables separately. When we use the above listed random methods we can not randomize a variable based on another variable.&lt;br /&gt;&lt;br /&gt;System verilog has an option of randomizing scalar variables out side a class with constraints.&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;integer a,b,c;&lt;br /&gt;void'( std::randomize(a,b,c) with { a==b;b&gt;0;c==10; } );&lt;br /&gt;&lt;br /&gt;The above construct generates random values for a,b,c the constraint is provided in line. The variables a,b,c are out side the class scope.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-3654482132112779563?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/3654482132112779563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=3654482132112779563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3654482132112779563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3654482132112779563'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/randomization-of-scalar-variables.html' title='Randomization of scalar variables -- System Verilog'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-3576752664013964340</id><published>2009-02-14T11:43:00.002+05:30</published><updated>2011-12-09T19:23:34.366+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Coverage grading</title><content type='html'>What is coverage grading ?&lt;br /&gt;&lt;br /&gt;Coverage grading is an option used to rank the test cases based on the number of functional coverage points hit by the individual test case. Grading option can be used to analyze and remove redundant test cases which is targeting the same functionality. This will help to optimize the regression run and save simulation time.&lt;br /&gt;&lt;br /&gt;In random test run scenario it also helps in identifying the random seeds which provides maximum coverage.It will be a good idea to go for functional coverage grading when the verification environment and test cases are frozen and suitable functional coverage numbers are achieved. if your test bench is constantly in development and changing ,using the same seed that gave you good coverage before may not do so again since the randomization may have been affected by the changes in the source code.&lt;br /&gt;&lt;br /&gt;Command to generate functional coverage grading in VCS is&lt;br /&gt;&lt;br /&gt;urg -dir ( *.vdb ) &lt;path&gt;-grade -metric group&lt;/path&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-3576752664013964340?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/3576752664013964340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=3576752664013964340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3576752664013964340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/3576752664013964340'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/coverage-grading.html' title='Coverage grading'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-694812771112639441</id><published>2009-02-08T10:51:00.001+05:30</published><updated>2011-12-09T19:26:14.430+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>functional coverage</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Code coverage metrics such as line coverage, fsm coverage, expression coverage, block coverage, toggle coverage and branch coverage is extracted automatically by the code coverage tool it gives us the picture of which sections of the RTL have been executed. Root cause analysis can be done on the code coverage holes and suitable test case can be added to cover the RTL functionality.Code coverage has a draw back of not identifying missing features in the RTL. There is no automatic way of getting the correlation between the functionality to be tested and the implementation of the functionality.Lot of manual effort has to put in to get this correlation.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Functional coverage is the determination of how much functionality of the design has been exercised by the verification environment. Functional coverage is a user defined coverage which maps every functionality to be tested (defined in the test plan) to a coverage point. When ever the functionality to be tested is hit in the simulation the functional coverage point is automatically updated. Functional coverage report can be generated which gives us the summary of how many coverage points where hit. Functional coverage metrics can be used as a feedback path to measure the progress of a verification effort. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Adding functional coverage to a verification environment involves three steps.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;1. Identifying the functional coverage and cross coverage points.&lt;br /&gt;( directly maps to your test plan )&lt;br /&gt;2. Implementing the functional coverage monitors.&lt;br /&gt;3. Running simulation to collect the functional coverage and functional coverage analysis.&lt;br /&gt;&lt;br /&gt;Methodology of identifying functional coverage points and cross coverage points can be explained with a simple USB2.0 Bulk transfer example.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5300296131722613666" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 399px; CURSOR: hand; HEIGHT: 203px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_l7B_mRZtMcg/SY5vP-e0E6I/AAAAAAAAAIY/8KwhGi5g-T4/s320/fcov.jpg" border="0" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;12 diffrent axis have been identified for a simple USB 2.0 bulk transfer. Total no of basic coverage points for this functional coverage group is 34 coverage points. Now we need to get the cross coverage points. So what is a cross coverage point ? Cross coverage is the valid combinations of the identified axis for example one cross coverage point can be &lt;/p&gt;&lt;p&gt;HS(speed) --&amp;gt; IN(direction) --&amp;gt;ACK(response) --&amp;gt;SMALL(length) --&amp;gt; No (data toggle error)&lt;/p&gt;&lt;p&gt;--&amp;gt; No (crc error) --&amp;gt;No ( pid error) --&amp;gt; SMALL (No of tokens per uframe) &lt;/p&gt;&lt;p&gt;--&amp;gt; No ( token error) --&amp;gt; ODD (payload) --&amp;gt; OFF (ping token) &lt;/p&gt;&lt;p&gt;We need to identify all the cross coverage points for this functional coverage group. Each of the cross coverage point is an test scenario. The way to find all the cross coverage point is to simply cross all the axis which will give you all the possible combinations, now eliminate the invalid combinations. Eliminating the invalid cross can be done using ignore construct or bad state construct in VERA/NTB. &lt;/p&gt;&lt;p&gt;example :: finding the cross coverage points for Axis1 and Axis2 alone. ( In the actual scenario all the axis should be taken in to account). possible cross coverage points &lt;/p&gt;&lt;p&gt;HS --&amp;gt; IN, HS --&amp;gt;OUT , FS --&amp;gt; IN , FS--&amp;gt;OUT &lt;/p&gt;&lt;p&gt;4 cross coverage points have been identifyed by crossing Axis 1 and Axis 2.&lt;/p&gt;&lt;p&gt;Now the identified functional coverage / cross coverage points need to be implemented in VERA/NTB/SV as a coverage group and integrated to the verification environment. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-694812771112639441?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/694812771112639441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=694812771112639441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/694812771112639441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/694812771112639441'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/functional-coverage.html' title='functional coverage'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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://4.bp.blogspot.com/_l7B_mRZtMcg/SY5vP-e0E6I/AAAAAAAAAIY/8KwhGi5g-T4/s72-c/fcov.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-8547340555161357029</id><published>2009-02-07T16:23:00.000+05:30</published><updated>2009-10-04T14:55:50.580+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>Fine-grain process control -- System Verilog</title><content type='html'>In Vera/NTB the user has very limited control to the threads/process spawned by fork ..join construct . We have constructs like wait_child() to wait for all the threads to complete. terminate() to kill all threads spawned. What was missing in VERA/NTB was the fine-grain process control which will allow the user to selectively suspend,resume,wait and kill the spawned threads.&lt;br /&gt;&lt;br /&gt;System Verilog has a build in process class which can be used for fine-grain process control.This process class is a good addition in system verilog and provides fine-grain process control which was not available in VERA/NTB. The prototype of the process class is as follows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;class process;&lt;br /&gt;enum state { FINISHED, RUNNING, WAITING, SUSPENDED, KILLED };&lt;br /&gt;static function process self();&lt;br /&gt;function state status();&lt;br /&gt;task kill();&lt;br /&gt;task await();&lt;br /&gt;task suspend();&lt;br /&gt;task resume();&lt;br /&gt;endclass &lt;/div&gt;&lt;br /&gt;Objects of type process are created internally when processes are spawned. Users cannot create objects of type process; attempts to call new shall not create a new process, and instead result in an error. The process class cannot be extended. Attempts to extend it shall result in a compilation error.&lt;br /&gt;&lt;br /&gt;The self() function returns a handle to the current process, that is, a handle to the process making the call. The status() function returns the process status, as defined by the state enumeration:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;FINISHED Process terminated normally. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;RUNNING Process is currently running (not in a blocking statement). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;WAITING Process is waiting in a blocking statement. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;SUSPENDED Process is stopped awaiting a resume. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;KILLED Process was forcibly killed (via kill or disable).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The await() task allows one process to wait for the completion of another process. It shall be an error to call this task on the current process, i.e., a process cannot wait for its own completion.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The suspend() task allows a process to suspend either its own execution or that of another process. If the process to be suspended is not blocked waiting on some other condition, such as an event, wait expression, or a delay then the process shall be suspended at some unspecified time in the current time step.&lt;br /&gt;&lt;br /&gt;The resume() task restarts a previously suspended process.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The kill() task terminates the given process and all its sub-processes, that is, processes spawned using fork statements by the process being killed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Usage example for the process class &lt;/p&gt;&lt;br /&gt;task do_n_way( int N );&lt;br /&gt;process job[1:N];&lt;br /&gt;    for ( int j = 1; j &lt;= N; j++ )&lt;br /&gt;          fork&lt;br /&gt;               automatic int k = j;&lt;br /&gt;               begin job[j] = process::self(); ... ; end&lt;br /&gt;           join_none&lt;br /&gt;     for( int j = 1; j &lt;= N; j++ ) // wait for all processes to start&lt;br /&gt;               wait( job[j] != null );&lt;br /&gt;      job[1].await(); // wait for first process to finish&lt;br /&gt;      for ( int k = 1; k &lt;= N; k++ ) begin&lt;br /&gt;                if ( job[k].status != process::FINISHED )&lt;br /&gt;                 job[k].kill();&lt;br /&gt;       end&lt;br /&gt;endtask&lt;br /&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1575376285321445036-8547340555161357029?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/8547340555161357029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=8547340555161357029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8547340555161357029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/8547340555161357029'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/02/fine-grain-process-control-system.html' title='Fine-grain process control -- System Verilog'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry><entry><id>tag:blogger.com,1999:blog-1575376285321445036.post-729446763700585897</id><published>2009-01-26T11:35:00.004+05:30</published><updated>2011-12-09T20:49:13.481+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='VERA/NTB'/><category scheme='http://www.blogger.com/atom/ns#' term='functional coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='system verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='RVM/VMM'/><category scheme='http://www.blogger.com/atom/ns#' term='ASIC verification'/><title type='text'>System verilog !!!</title><content type='html'>System verilog is now being used widely across the industry for any new code development. With the introduction of standard verification methodology like VMM from Synopsys, AVM from mentor, URM from cadence and OVM from cadence and mentor. There is a wide range of verification methodologies to choose from. Companies now are thinking in terms of verification reuse .All the verification methodology tell us how to write a reusable code ,but the real bottle neck is the legacy code written during time where no standard verification methodology like RVM,OVM &amp;amp; VMM existed. The solution to this issue is to re-write the code in more reusable way. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To use system verilog for the newer development in an SOC is also challenging. Luckily in some simulators have  an interop mode where we can access HVL code from system verilog and vice versa. This solves the issue of integrating and using the legacy HVL code with system verilog. interop solves integration issues with system verilog but we still have to use two languages ( one for doing enhancements in legacy HVL code and system verilog for new development ). The Solution to this issue is to migrate the VERA/NTB code to system verilog. Most of the features used in VERA/NTB is available in system verilog. Syntax migration from one language to other is the fastest way to port your code and it takes only fraction of your development time. Industry standard conversion tools are available  to covert your VERA/NTB code to System verilog or you can develop your own Perl script for migration. Open source perl scripts are also available on the internet to convert code from VERA/NTB to system verilog.&lt;br /&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/1575376285321445036-729446763700585897?l=art-of-verification.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://art-of-verification.blogspot.com/feeds/729446763700585897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1575376285321445036&amp;postID=729446763700585897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/729446763700585897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1575376285321445036/posts/default/729446763700585897'/><link rel='alternate' type='text/html' href='http://art-of-verification.blogspot.com/2009/01/verification-marshal-arts-system.html' title='System verilog !!!'/><author><name>saravanan</name><uri>http://www.blogger.com/profile/11967368690794767974</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></entry></feed>
