{"id":19246,"date":"2025-02-14T17:29:53","date_gmt":"2025-02-14T22:29:53","guid":{"rendered":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/?p=19246"},"modified":"2026-03-27T08:53:26","modified_gmt":"2026-03-27T12:53:26","slug":"got-coverage","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/2025\/02\/14\/got-coverage\/","title":{"rendered":"Got Coverage?"},"content":{"rendered":"\n<p>Welcome to 2025. What happened?!  &#8220;Coverage&#8221; in August in Yosemite backpacking has a different meaning. In August? Snow? Lots of coverage. Got Coverage? <\/p>\n\n\n\n<p>But, nevermind &#8211; what about YOUR coverage!? You didn&#8217;t get enough coverage collected. But just maybe you have a bunch of 0&#8217;s and 1&#8217;s. You&#8217;re late with your coverage, but your old school 0&#8217;s and 1&#8217;s are going to save the day.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"381\" height=\"270\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/0s-and-1s.jpg\" alt=\"Test Vectors from a Tester\" class=\"wp-image-19253\"\/><figcaption class=\"wp-element-caption\">Test vector results &#8211; 0&#8217;s and 1&#8217;s, but I didn&#8217;t collect coverage! Yet.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What to do to get Coverage?<\/h2>\n\n\n\n<p>We can build a coverage collector. We can build a set of coverage models and extract coverage from the 0&#8217;s and 1&#8217;s. And not just functional coverage.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"410\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow-1024x410.jpg\" alt=\"Coverage Flow\" class=\"wp-image-19256\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow-1024x410.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow-600x240.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow-768x307.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow-900x360.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Flow.jpg 1064w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>If we missed you at <a href=\"https:\/\/dvcontaiwan.org\/\" data-type=\"link\" data-id=\"https:\/\/dvcontaiwan.org\/\" target=\"_blank\" rel=\"noopener\">DVCON Taiwan 2024<\/a> in September, then you might want to check out our <a href=\"https:\/\/verificationacademy.com\/better-late-than-never-paper\" data-type=\"link\" data-id=\"https:\/\/verificationacademy.com\/better-late-than-never-paper\" target=\"_blank\" rel=\"noopener\">paper<\/a>  and <a href=\"https:\/\/verificationacademy.com\/better-late-than-never-slides\" target=\"_blank\" rel=\"noopener\">slides<\/a>, because that&#8217;s exactly what we describe &#8211; a way to feed in a file full of 0&#8217;s and 1&#8217;s and collect coverage.<\/p>\n\n\n\n<p>The idea is that we&#8217;ll read those 0&#8217;s and 1&#8217;s and assign those bits to &#8220;variables&#8221; in a SIMULATED environment. The 0&#8217;s and 1&#8217;s could be from simulation, prototyping, tester results or some other external model. We&#8217;ll read them and collect coverage in that SIMULATED environment &#8211; it is NOT a re-simulation of the design. It is a SIMULATION built to collect coverage &#8211; that&#8217;s it.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report-1024x684.jpg\" alt=\"Coverage Report\" class=\"wp-image-19257\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report-1024x684.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report-600x401.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report-768x513.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report-900x601.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Report.jpg 1068w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Coverage Report with Block, FSM and Expression Coverage<\/figcaption><\/figure>\n\n\n\n<p>Those 0&#8217;s and 1&#8217;s are the values that we want to &#8220;measure&#8221;. For example, suppose you have a 4 bit value and your coverage is simple &#8211; <em>&#8220;did all values occur at any time during the simulation?&#8221;<\/em> That&#8217;s a simple covergroup to write.<\/p>\n\n\n\n<p>Easy. Our technique covers that.<\/p>\n\n\n\n<p>If your coverage is more complicated that&#8217;s ok. You might need to cover that 4 bit value during all 7 of the state transistions &#8211; a cross coverage.<\/p>\n\n\n\n<p>Easy.<\/p>\n\n\n\n<p>In addition to functional coverage there are ways to collect FSM coverage and some simple expression coverage and even simple block coverage.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"156\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups-1024x156.jpg\" alt=\"Coverage Rollups\" class=\"wp-image-19261\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups-1024x156.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups-600x92.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups-768x117.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups-900x137.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2024\/12\/Coverage-Rollups.jpg 1074w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Coverage Rollups<\/figcaption><\/figure>\n\n\n\n<p>This technique can&#8217;t give you full coverage across your whole chip, but it can give you focused coverage on  some important values. You can cover module instance ports, or registers, or memory locations &#8211; whatever got logged in the 0&#8217;s and 1&#8217;s text file. The file also doesn&#8217;t have to be a text file. Whatever kind of file it is, you need to supply a reader for it and be able to get access to the values at a given time.<\/p>\n\n\n\n<p>Happy 2025! We hope you have a great 2025, and you get that coverage collected.<\/p>\n\n\n\n<p>See you at <a href=\"https:\/\/events.sw.siemens.com\/en-US\/dvcon-usa\/\" data-type=\"link\" data-id=\"https:\/\/events.sw.siemens.com\/en-US\/dvcon-usa\/\" target=\"_blank\" rel=\"noopener\">DVCON US 2025<\/a>. I&#8217;ll be at the Siemens booth, ready to talk about coverage, UVM, debug or anything verification at all. Maybe even Yosemite backpacking. Young Lakes. Half Dome. Clouds Rest. We can talk driver tracing and why debug and coverage is more important than ever. Come see Questa and Visualizer in action. Or we can talk ultra-light backpacking&#8230;<\/p>\n\n\n\n<p>Thanks<\/p>\n\n\n\n<p>rich<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welcome to 2025. What happened?! &#8220;Coverage&#8221; in August in Yosemite backpacking has a different meaning. In August? Snow? Lots of&#8230;<\/p>\n","protected":false},"author":71540,"featured_media":19306,"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":[401,506,718,751,787],"industry":[32,39,53],"product":[205,286],"coauthors":[961],"class_list":["post-19246","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-coverage","tag-functional-verification","tag-simulation","tag-systemverilog","tag-uvm","industry-aerospace-defense","industry-automotive-transportation","industry-electronics-semiconductors","product-questa","product-visualizer-debug-environment"],"featured_image_url":"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2025\/02\/backpacking-scaled.jpg","_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/19246","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\/71540"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/comments?post=19246"}],"version-history":[{"count":5,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/19246\/revisions"}],"predecessor-version":[{"id":19310,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/19246\/revisions\/19310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media\/19306"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media?parent=19246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/categories?post=19246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/tags?post=19246"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/industry?post=19246"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/product?post=19246"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/coauthors?post=19246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}