{"id":12022,"date":"2015-11-16T06:12:56","date_gmt":"2015-11-16T13:12:56","guid":{"rendered":"https:\/\/blogs.mentor.com\/verificationhorizons\/?p=12022"},"modified":"2026-03-27T08:36:55","modified_gmt":"2026-03-27T12:36:55","slug":"no-to-know-vip-part-3","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/2015\/11\/16\/no-to-know-vip-part-3\/","title":{"rendered":"No to Know VIP \u2013 Part 3"},"content":{"rendered":"<p>Thus far we have talked about the importance of having a VIP which is easy to connect to the DUT in <a href=\"https:\/\/blogs.mentor.com\/verificationhorizons\/blog\/2015\/05\/16\/no-to-know-vip\/\" target=\"_blank\" rel=\"noopener\">part 1<\/a> and having the flexibility to configure the VIP as per your requirements and use the built-in or pre-packaged sequences in <a href=\"https:\/\/blogs.mentor.com\/verificationhorizons\/blog\/2015\/07\/01\/no-to-know-vip-part-2-2\/\" target=\"_blank\" rel=\"noopener\">part 2<\/a>. In this final part of the series, we will talk about the various built-in features of a VIP which helps with your debug.<\/p>\n<p>If you have a UVM based testbench with one or multiple VIPs, your testbench could be more complex than your DUT and debugging this environment could be a major challenge. Debugging UVM VIP based environments could be thought of having 3 layers:<\/p>\n<ol>\n<li><a href=\"https:\/\/verificationacademy.com\/cookbook\/debugging\" target=\"_blank\" rel=\"noopener\">UVM\u2019s built-in debug mechanism<\/a><\/li>\n<li><a href=\"https:\/\/verificationacademy.com\/verification-horizons\/june-2014-volume-10-issue-2\/Visualizer-Debug-Environment-Class-based-Testbench-Debugging-using-a-New-School-Debugger-Debug-This\" target=\"_blank\" rel=\"noopener\">Simulator with Class Based Debug<\/a><\/li>\n<li>VIP with built-in debug features<\/li>\n<\/ol>\n<p>These are some of the features that Mentor\u2019s VIP provide as built-in debug mechanisms:<\/p>\n<p><strong>VIP Query Commands:<\/strong><\/p>\n<p>These query commands provide the ability to query the state of the VIP in the testbench at any given time in a batch or CLI mode to get the summary of the VIP or the current configuration of the VIP and prints it to the simulation log.<\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12024\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug1-520x224.png\" alt=\"debug1\" width=\"520\" height=\"224\" \/><\/a><\/p>\n<p>For example, in PCI Express, the VIP can output B.A.R. information, to show the addressing set up in the system (above) as well as the PCIe configuration space showing the device capabilities (below).<\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12025\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug2-520x260.png\" alt=\"debug2\" width=\"520\" height=\"260\" \/><\/a><\/p>\n<p><strong>Error Messaging &amp; Reporting:<\/strong><\/p>\n<p>Error Messaging is very important as this is the first thing the user checks while debugging. The error messages have proper encoding to differentiate between methodology errors, protocol errors and infrastructure errors. It also provides the flexibility of customizing the report message and logging mechanism.<\/p>\n<p><strong>Assertions:<\/strong><\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12026\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug3-520x256.png\" alt=\"debug3\" width=\"520\" height=\"256\" \/><\/a><\/p>\n<p>While the VIP is running, a built-in set of assertions check for any protocol violations to verify compliance with the specification.\u00a0 When these fire, they result in a message that can be printed to the transcript, or piped through the UVM reporting mechanism.\u00a0 The text of the message include the interface instance name, a description of what went wrong and a reference back to the specification to help when looking up further details.\u00a0 Each assertion error is configurable and can be enabled or disabled and have its severity level changed.<\/p>\n<p><strong>\u00a0<\/strong><strong>Protocol Debug:<\/strong><\/p>\n<p>Another important aspect of the VIP is to help with protocol debug.\u00a0 Mentor VIP is transaction based, and those transactions are available for creating stimulus as well as for analysis, where they can be used in the testbench for scoreboarding and coverage collection.<\/p>\n<p><strong>Transaction Logging:<\/strong><\/p>\n<p>Transactions can also be logged to a text file, printed out via the standard UVM print mechanism, or output to a tracker file by a provided analysis component. Following is the sample print of transaction log file that shows attribute information that is printed along with the format:<br \/>\n<em>\u00a0 \u00a0AXI Clk Cycle = 10.00 ns; AXI Clk Frequency = 100.00 MHz; Data bus width = 32 bits<\/em><\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12027\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug4-520x123.jpg\" alt=\"debug4\" width=\"520\" height=\"123\" \/><\/a><\/p>\n<p>Here, transaction wise data is printed in the log file which includes whether transaction is read or write, ID of transaction, starting address, accept time of address phase, data of each beat, write strobes, data burst accept time, response of transaction, response phase accept time, length of transaction, burst type, and size of burst.<\/p>\n<p>The VIP can also output text based log, or tracker files.\u00a0 This can typically be done at both the protocol level, and also at the symbol level for protocols such as PCI Express to help debug link training, or other state machines.\u00a0 Here we can see the symbols for an OS PLP transmission, a TLP transmission and a DLLP transmission on the bus.<\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12028\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug5-520x358.png\" alt=\"debug5\" width=\"520\" height=\"358\" \/><\/a><\/p>\n<p><strong>Transaction Linking:<\/strong><\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12029\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug6-520x240.jpg\" alt=\"debug6\" width=\"520\" height=\"240\" \/><\/a><\/p>\n<p>Just logging transactions isn\u2019t sufficient while debugging a cache coherent interconnect (CCI). An originating master request transaction results in snoops to other cached masters and a slave access as needed. While debugging system level stimulus, it becomes difficult to identify which all snoop transactions are related to a specific originating request. A Cache Coherency Interconnect Monitor (CCIM), helps overcome this debugging issue by providing a transaction linking component that connects to all the interfaces around a CCI. CCIM provides a top-level parent sequence item that links to all related child sequence items, such as originating request, snoop to cached masters, and slave access.<\/p>\n<p><strong>Protocol Stack Debug:<\/strong><\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-12030\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/11\/debug7-520x237.png\" alt=\"debug7\" width=\"520\" height=\"237\" \/><\/a><\/p>\n<p>Along with the transactions, the VIP also records relationship information, relations to other transactions through the protocol stack and also to the signals themselves.\u00a0 This allows you to quickly move from transaction, to signal level debug, and highlight not just which signals, but also the time at which those signals participated in any given transaction.<\/p>\n<p>I hope this series has provided you with few insights into what makes a VIP easy to instantiate, connect, configure and start driving stimulus. I would really like to hear about your VIP usage experiences.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Thus far we have talked about the importance of having a VIP which is easy to connect to the DUT&#8230;<\/p>\n","protected":false},"author":71604,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[331,365,371,374,419,506,633,674,718,751,787,794,819,820,827,835],"industry":[],"product":[],"coauthors":[],"class_list":["post-12022","post","type-post","status-publish","format-standard","hentry","category-news","tag-ace","tag-axi","tag-cache-coherency","tag-cci","tag-debug","tag-functional-verification","tag-pcie","tag-qvip","tag-simulation","tag-systemverilog","tag-uvm","tag-uvm-debug","tag-verification","tag-verification-academy","tag-verification-methodology","tag-vip"],"_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/12022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/users\/71604"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/comments?post=12022"}],"version-history":[{"count":1,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/12022\/revisions"}],"predecessor-version":[{"id":19808,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/12022\/revisions\/19808"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media?parent=12022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/categories?post=12022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/tags?post=12022"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/industry?post=12022"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/product?post=12022"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/coauthors?post=12022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}