{"id":11652,"date":"2015-07-01T20:33:49","date_gmt":"2015-07-02T03:33:49","guid":{"rendered":"https:\/\/blogs.mentor.com\/verificationhorizons\/?p=11652"},"modified":"2026-03-27T08:36:20","modified_gmt":"2026-03-27T12:36:20","slug":"no-to-know-vip-part-2-2","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/2015\/07\/01\/no-to-know-vip-part-2-2\/","title":{"rendered":"No to Know VIP &#8211; Part 2"},"content":{"rendered":"<p>Continuing on our journey on what is needed to get to productive verification with VIP, the first step is to make the connections between the DUT and the testbench.\u00a0 This includes connecting the signals, the clock and reset and setting any parameters. This is what we covered in <a href=\"https:\/\/blogs.mentor.com\/verificationhorizons\/blog\/2015\/05\/16\/no-to-know-vip\/\" target=\"_blank\" rel=\"noopener noreferrer\">part 1<\/a> of the series.<\/p>\n<p>Let us look at other steps need to get productive, taking PCIe VIP as an example.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-11654 aligncenter\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/07\/No2KnowVIP_2_1-520x240.png\" alt=\"No2KnowVIP_2_1\" width=\"559\" height=\"258\" \/><\/p>\n<p>Protocol Specific agents enables easy instantiation of agents in your testbench with fewer lines of configuration in the testbench. This is the customization of the generic agent. The PCIe agent will perform link training automatically, without us needing to start a sequence.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-11655 aligncenter\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/07\/No2KnowVIP_2_2-520x234.png\" alt=\"No2KnowVIP_2_2\" width=\"533\" height=\"240\" \/><\/p>\n<p>Next we move onto configuring the VIP.\u00a0 Here we are able to take advantage of a configuration policy that has already been defined for the specific design IP we are using and available alongside the VIP.<\/p>\n<p>It is again important for the VIP to be intuitive, and here you can see that we have used a collection of structs to define the configuration.\u00a0 These are then declared as variables in a configuration class for the agent, which is used in the testbench to set the configuration.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-11656 aligncenter\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/07\/No2KnowVIP_2_3-520x360.png\" alt=\"No2KnowVIP_2_3\" width=\"448\" height=\"310\" \/><\/p>\n<p>The user code which sets the configuration for a test is then intuitive and easy to read as shown below.\u00a0 In this particular example, we have set our agent to be a GEN2 root complex, connected at the serial interface and using an internally generated clock and reset.\u00a0 We have disabled the build in scoreboard and coverage, but enabled transaction logging.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" size-medium wp-image-11657 aligncenter\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/07\/No2KnowVIP_2_4-520x227.png\" alt=\"No2KnowVIP_2_4\" width=\"520\" height=\"227\" \/><\/p>\n<p>Once done with configuration, move on to PCIe link training and enumeration, which the VIP can take care of. As I mentioned earlier the agent will perform link training automatically, without needing to start a sequence.\u00a0 The VIP also provides a sequence to complete enumeration, which will block until link training is complete.<\/p>\n<p>This means that in the test, you just need to create and start this sequence, the \u201cbring up sequence\u201d in the code below.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" size-medium wp-image-11658 aligncenter\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2015\/07\/No2KnowVIP_2_5-520x172.png\" alt=\"No2KnowVIP_2_5\" width=\"520\" height=\"172\" \/><\/p>\n<p>Once that sequence ends, link up and enumeration are complete and you can start a user defined sequence that would typically perform reads and writes to do some application specific verification.<\/p>\n<p>VIP\u2019s include various sequence API for rapid test creation like memory, configure and I\/O reads and writes, as well as various scenario and error injection sequences.\u00a0Finally we are able to use the transaction layer sequences to begin some application specific verification by performing reads and writes across the bus.<\/p>\n<p>Using the automation provided by the VIP it is possible to complete the entire testbench and link up process in hours rather than days, allowing users to become productive much earlier.<\/p>\n<p>I would really like to hear how you use various VIPs so please comment below. In <a href=\"https:\/\/blogs.mentor.com\/verificationhorizons\/blog\/2015\/11\/16\/no-to-know-vip-part-3\/\" target=\"_blank\" rel=\"noopener noreferrer\">part 3<\/a> of the series, we will talk about various debug features of a VIP.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuing on our journey on what is needed to get to productive verification with VIP, the first step is to&#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":[334,473,633,674,835],"industry":[],"product":[],"coauthors":[],"class_list":["post-11652","post","type-post","status-publish","format-standard","hentry","category-news","tag-agent","tag-ez-vip","tag-pcie","tag-qvip","tag-vip"],"_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/11652","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=11652"}],"version-history":[{"count":1,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/11652\/revisions"}],"predecessor-version":[{"id":19793,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/11652\/revisions\/19793"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media?parent=11652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/categories?post=11652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/tags?post=11652"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/industry?post=11652"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/product?post=11652"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/coauthors?post=11652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}