{"id":1124,"date":"2021-10-11T15:46:01","date_gmt":"2021-10-11T15:46:01","guid":{"rendered":"https:\/\/dsd.webs.upv.es\/?page_id=1124"},"modified":"2025-08-06T18:32:05","modified_gmt":"2025-08-06T18:32:05","slug":"definicion-de-covergroups","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=1124","title":{"rendered":"Definici\u00f3n de covergroups"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Dentro de module, program o interface<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El elemento esencial en el que se basa la cobertura funcional es la utilizaci\u00f3n de covergroups. B\u00e1sicamente se conocen dos tipos de covergroups que son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00abwithout event triggering\u00bb:\n<ul class=\"wp-block-list\">\n<li>No disponen de ninguna especificaci\u00f3n de cuando son muestreados los coverpoints.<\/li>\n\n\n\n<li>Por tanto tiene que especificarse en el curso de ejecuci\u00f3n el momento exacto donde tiene que hacerse el muestreo. <\/li>\n\n\n\n<li>Dicho muestreo se realiza con un m\u00e9todo asociado denominado \u00absample\u00bb<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u00abwith event triggering\u00bb:\n<ul class=\"wp-block-list\">\n<li>Disponen de  especificaci\u00f3n de cuando son muestreados los coverpoints.<\/li>\n\n\n\n<li>Esta especificaci\u00f3n puede ser en flancos positivos o en flancos negativos del reloj. <\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos ejemplos de ambos tipos:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nbit &#x5B;1:0] b;\nmodulo DUV (.*,\n            .salida(b))\ncovergroup cg_salidas; \/\/define\n  bcov: coverpoint b;\nendgroup\ncg_salidas cg_inst ; \/\/declare\ninitial begin\n  cg_inst = new; \/\/instantiate a cg.group\n  repeat(10) end\n    \/\/ do something\n    if (condition)\n      cg_inst.sample();\n    ##1;\n  end\nend\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puede observarse en este ejemplo las tareas acciones que coment\u00e1bamos en la idea principal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ACCION DEFINICI\u00d3N:  en las l\u00edneas 6, 7 y 8<\/li>\n\n\n\n<li>ACCION MUESTREO: en la l\u00ednea 16. Es un muestreo inmediato que debe explicitarse mediante el m\u00e9todo \u00absample\u00bb<\/li>\n\n\n\n<li>ACCI\u00d3N MONITORIZACI\u00d3N: pr\u00e1cticamente el resto de l\u00edneas. Se declara e instancia el objeto covergroup en el mismo \u00abmodule\u00bb donde se encuentra la variable salida a muestrear. Con lo cual el intercoexionado es pr\u00e1cticamente directo <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos ahora un ejemplo del otro tipo de covergroup:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nbit &#x5B;1:0] a;\nmodulo DUV (.*,\n            .entrada(a))\ncovergroup cg_entradas @(negedge clk);\/\/define\n  acov: coverpoint a;\nendgroup\ninitial begin\n  cg_entradas cg_inst = new; \/\/declare and instantiate\n...\nend\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Siempre muestree en cada flanco negativo del reloj el valor de b. Se puede habilitar una condici\u00f3n para seleccionar en qu\u00e9 flancos muestrear y as\u00ed acotar los eventos de reloj. Para ello utilizar\u00edamos la palabra reservad iff seguida de la condici\u00f3n en el coverpoint que nos interesara\n<ul class=\"wp-block-list\">\n<li>acov: <strong>coverpoint<\/strong> a <strong>iff<\/strong> (b==2);<\/li>\n\n\n\n<li>Registre la cobertura en a en cada flanco negativo del reloj, solo si b==2, de lo contrario ignorar (no muestrear). <\/li>\n\n\n\n<li>Se puede utilizar en covergroups con o sin triggering events <\/li>\n\n\n\n<li>iff se puede utilizar en cualquier coverpoint, en cualquier covergroup. <\/li>\n\n\n\n<li>Uso t\u00edpico: desactivar la cobertura cuando el reset est\u00e1 activo<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Al final de la simulaci\u00f3n podemos obtener los resultados en la forma: 125 veces b fue 00, 48 veces b fue 01, 70 veces b fue 10, 113 veces b fue 11. <\/li>\n\n\n\n<li>Si b nunca fue 01, entonces tenemos un agujero de cobertura (75% de cobertura solamente).<\/li>\n\n\n\n<li>Es posible especificar una cantidad m\u00ednima de cuentas para que un caso\u00a0 se considere como cubierto.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Dentro de clases (embedded covergroups)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando hacemos la definici\u00f3n , declaraci\u00f3n e instanciaci\u00f3n del objeto covergoup dentro de una clase, la declaraci\u00f3n es impl\u00edcita . Veamos un ejemplo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nclass fifo_driver;\n  covergroup COV_salidas; \/\/define\n      coverpoint  mports.px.data_out; \n  endgroup\n  \n  function new (virtual fifo_if.test ports, virtual fifo_if.monitor mports);\n  begin\n   ....\n    COV_salidas=new; \/\/instantiate\n   ....\n   end\n   \n   ...\n   endclass\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La sintaxis , c\u00f3mo puede observarse es un tanto extra\u00f1a por cuanto no existe una declaraci\u00f3n expl\u00edcita de objeto y parece que se construya directamente el covergroup en la instanciaci\u00f3n. En cualquier caso, aunque se ha elegido en este ejemplo un \u00abwithout triggering event covergroup\u00bb, podr\u00eda haberse utilizado un \u00abwith triggering event covergroup\u00bb. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dentro de module, program o interface El elemento esencial en el que se basa la cobertura funcional es la utilizaci\u00f3n de covergroups. B\u00e1sicamente se conocen dos tipos de covergroups que son: Veamos ejemplos de ambos tipos: Puede observarse en este ejemplo las tareas acciones que coment\u00e1bamos en la idea principal: Veamos ahora un ejemplo del otro tipo de covergroup: Dentro de clases (embedded covergroups) Cuando hacemos la definici\u00f3n , declaraci\u00f3n e instanciaci\u00f3n del objeto covergoup dentro de una clase, la declaraci\u00f3n es impl\u00edcita . Veamos un ejemplo: La sintaxis , c\u00f3mo puede observarse es un tanto extra\u00f1a por cuanto no existe una declaraci\u00f3n expl\u00edcita de objeto y parece que se construya directamente el covergroup en la instanciaci\u00f3n. En cualquier caso, aunque se ha elegido en este ejemplo un \u00abwithout triggering event covergroup\u00bb, podr\u00eda haberse utilizado un \u00abwith triggering event covergroup\u00bb.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"class_list":["post-1124","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/1124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1124"}],"version-history":[{"count":7,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/1124\/revisions"}],"predecessor-version":[{"id":1917,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/1124\/revisions\/1917"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}