{"id":15965,"date":"2021-03-18T12:12:33","date_gmt":"2021-03-18T16:12:33","guid":{"rendered":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/?p=15965"},"modified":"2026-03-27T08:51:10","modified_gmt":"2026-03-27T12:51:10","slug":"getting-started-with-questa-memory-verification-ip","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/2021\/03\/18\/getting-started-with-questa-memory-verification-ip\/","title":{"rendered":"Getting Started with Questa Memory Verification IP"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">By Chris Spear &amp; Kamlesh Mulchandani&nbsp;<\/h3>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>The best way to create a System on a Chip is with design IP. Your&nbsp;project&nbsp;may have&nbsp;a memory controller&nbsp;and PHY&nbsp;that takes commands from the system bus and turns them into the detailed pin wiggles for&nbsp;devices such as DDR.&nbsp;How do you then check that your chip works with the&nbsp;design&nbsp;IP? You need&nbsp;to check that your memory subsystem works with the DDR protocol, but who has time to become an expert? The best way to verify your design is with Verification IP, or VIP.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Siemens Questa VIP (QVIP) has a wide range of DRAM and Flash memories. QVIP works with both&nbsp;SystemVerilog&nbsp;and VHDL designs, and easily integrates into a UVM&nbsp;testbench.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify your memory subsystem&nbsp;&nbsp;<\/h2>\n\n\n\n<p>What is the memory subsystem?&nbsp;There is a&nbsp;controller&nbsp;with&nbsp;a&nbsp;bus interface such as AXI, AHB, OCP, etc. This&nbsp;communicates with the PHY through a DFI interface,&nbsp;which drives the memory devices through DDR interface.&nbsp;There may be additional features such as continuous flow of commands and data over the memory interface, multi-port arbitration functionality, memory coherency,&nbsp;and<span class=\"has-inline-color has-black-color\"> more.&nbsp;With QVIP, you can model&nbsp;the&nbsp;bus controller&nbsp;and the DRAM devices.&nbsp;<\/span><\/p>\n\n\n\n<p>You&nbsp;can verify read and write transactions&nbsp;in your controller&nbsp;with QVIP which supports a range of&nbsp;DDR&nbsp;speed grades and manufacturers. Additionally,&nbsp;you can&nbsp;simulate real world conditions&nbsp;by verifying&nbsp;that&nbsp;your&nbsp;memory subsystem IP&nbsp;correctly performs&nbsp;memory&nbsp;training&nbsp;and operates under&nbsp;low power&nbsp;conditions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"485\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1-1024x485.png\" alt=\"\" class=\"wp-image-15984\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1-1024x485.png 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1-600x284.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1-768x364.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1-900x427.png 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys-1.png 1158w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Memory Subsystem with Controller, PHY, DDR<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Benefits of&nbsp;QVIP Memory Models&nbsp;<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"952\" height=\"262\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemBenefits.png\" alt=\"\" class=\"wp-image-15967\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemBenefits.png 952w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemBenefits-600x165.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemBenefits-768x211.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemBenefits-900x248.png 900w\" sizes=\"auto, (max-width: 952px) 100vw, 952px\" \/><figcaption>Benefits of QVIP Memory Models<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">QVIP Integration Flow<\/h2>\n\n\n\n<p>You&nbsp;can&nbsp;easily&nbsp;integrate QVIP DDR models with your design and&nbsp;start simulating in a&nbsp;few hours.&nbsp;Here are the four steps to connect QVIP to your testbench and verify your system.&nbsp;You can do the first two with the QVIP Configurator&nbsp;GUI.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"132\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-1024x132.png\" alt=\"\" class=\"wp-image-15972\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-1024x132.png 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-600x77.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-768x99.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-1536x198.png 1536w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow-900x116.png 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemFlow.png 1542w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>QVIP Memory Integration Flow<\/figcaption><\/figure>\n\n\n\n<p>1. <em>Connect &amp; configure RTL + QVIP:&nbsp;<\/em>Configurator reads your top netlist and creates a schematic symbol. You connect it to QVIP blocks such as&nbsp;a DDR VIP, AXI Master, plus clock and reset. The QVIP code, including the bus functional model and SystemVerilog&nbsp;Assertions, is inside a single module, which reduces the number of connections.&nbsp;Here you can see selecting a memory model based on type and manufacturer.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCfgr.png\" alt=\"\" class=\"wp-image-15970\" width=\"580\" height=\"410\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCfgr.png 1017w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCfgr-600x425.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCfgr-768x544.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCfgr-900x637.png 900w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><figcaption>QVIP Configurator GUI<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>2. <em>Generate compile &amp; sim scripts:&nbsp;<\/em>QVIP&nbsp;supports all major&nbsp;SystemVerilog&nbsp;and VHDL&nbsp;simulators.<\/p>\n\n\n\n<p>3. <em>Simulate &amp; debug:&nbsp;<\/em>Simulate the test and leverage debugging features.<\/p>\n\n\n\n<p>The transaction logger creates a text file that has memory transfers, mode registers and assertions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"850\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger-1024x850.png\" alt=\"\" class=\"wp-image-15986\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger-1024x850.png 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger-600x498.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger-768x638.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger-900x747.png 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemLogger.png 1084w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>QVIP Transaction Logger<\/figcaption><\/figure>\n\n\n\n<p>The transaction streams viewer displays transactions in the wave and co-relates pin-level activity with memory transactions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"417\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemWaves.png\" alt=\"\" class=\"wp-image-15987\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemWaves.png 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemWaves-600x278.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemWaves-768x356.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><figcaption>QVIP Transaction Streams Viewer<\/figcaption><\/figure>\n\n\n\n<p>4. <em>Analyze Functional Coverage:&nbsp;<\/em>you can measure verification progress and quickly see what areas need further testing.&nbsp;The&nbsp;covergroups&nbsp;are based on the JEDEC&nbsp;standard.&nbsp;Functional Coverage&nbsp;modules are unencrypted and extendable for custom use.&nbsp;You can view the Coverage report either in HTML or text formats.\u202f&nbsp;&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"409\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCover.png\" alt=\"\" class=\"wp-image-15991\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCover.png 908w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCover-600x270.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCover-768x346.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemCover-900x405.png 900w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><figcaption>Functional Coverage Analysis<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Where to start?<\/h2>\n\n\n\n<p>Do you already have a UVM testbench, and want to add a QVIP agent? Do you want to see alternative topologies with masters, slaves, and monitors? QVIP comes with an extensive library of ready-to-run examples that you can explore.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"651\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub-1024x651.png\" alt=\"\" class=\"wp-image-15976\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub-1024x651.png 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub-600x382.png 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub-768x488.png 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub-900x572.png 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemInfoHub.png 1338w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Siemens InfoHub with QVIP Documentation and Examples<\/figcaption><\/figure>\n\n\n\n<p>QVIP has User Guides for every protocol that walk you through the steps to verify your design. Need more details on a class, property, or method? The QVIP reference manuals have in-depth explanations of the QVIP bus functional model and SystemVerilog Assertions. There are even several video tutorials that walk you through popular topics such as injecting errors and debugging with Visualizer.<\/p>\n\n\n\n<p>Please visit <a href=\"https:\/\/eda.sw.siemens.com\/en-US\/ic\/questa\/verification-ip\/\" target=\"_blank\" rel=\"noopener\">https:\/\/eda.sw.siemens.com\/en-US\/ic\/questa\/verification-ip\/<\/a> for more product information.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Chris Spear &amp; Kamlesh Mulchandani&nbsp; Introduction The best way to create a System on a Chip is with design&#8230;<\/p>\n","protected":false},"author":71586,"featured_media":15979,"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":[417,912,913,914,910,587,911,658,674,751,787,819,825],"industry":[],"product":[206],"coauthors":[980],"class_list":["post-15965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-ddr","tag-ddr-phy","tag-dram","tag-flash-memory","tag-hardware-verification","tag-memory-model","tag-memory-subsystem","tag-questa","tag-qvip","tag-systemverilog","tag-uvm","tag-verification","tag-verification-ip","product-questa-verification-ip"],"featured_image_url":"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2021\/03\/MemSubSys.png","_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/15965","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\/71586"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/comments?post=15965"}],"version-history":[{"count":5,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/15965\/revisions"}],"predecessor-version":[{"id":15992,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/15965\/revisions\/15992"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media\/15979"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media?parent=15965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/categories?post=15965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/tags?post=15965"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/industry?post=15965"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/product?post=15965"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/coauthors?post=15965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}