{"id":1375,"date":"2022-06-17T07:28:47","date_gmt":"2022-06-17T07:28:47","guid":{"rendered":"https:\/\/dsd.webs.upv.es\/?p=1375"},"modified":"2022-06-17T12:51:18","modified_gmt":"2022-06-17T12:51:18","slug":"sesion-3-seminario-verificacion-uvm-nivel-basico","status":"publish","type":"post","link":"https:\/\/dsd.webs.upv.es\/?p=1375","title":{"rendered":"Sesion 3 Seminario Verificaci\u00f3n UVM nivel b\u00e1sico"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En esta sesi\u00f3n nos vamos a  dedicarnos a la cobertura funcional y a mejorar nuestro plan de verificaci\u00f3n con el fin de conseguir una grado de cobertura especificado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para ello el esquema que vamos a seguir es el siguiente:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Determinaci\u00f3n de la cobertura funcional con el componente coverage<\/li><li>Generaci\u00f3n de nuevas secuencias y valoraci\u00f3n del grado de cobertura obtenido<\/li><li>Control de generaci\u00f3n de est\u00edmulos en base a grado de cobertura<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Cobertura funcional<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La cobertura funcional es ejercida fundamentalmente en systemverilog mediante los <a href=\"https:\/\/dsd.webs.upv.es\/?page_id=1109\">covergroups<\/a>. Pod\u00e9is observar en esta web un apartado espec\u00edfico para dichos elementos: VERIFICACI\u00d3N-&gt;COBERTURA FUNCIONAL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo importante ahora en UVM es saber donde vamos a definir nuestros covergroups. Lo haremos en el componente disponible en nuestro enviroment que recibe el nombre de \u00abcoverage\u00bb. Observad en el siguiente v\u00eddeo (en el punto 2 de su esquema) c\u00f3mo lo hacemos para el caso del radicador.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"UVM: Cobertura funcional |  | UPV\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/_xR_ctA2bRs?start=72&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Visto el procedimiento vamos a establecer como m\u00ednimo plan de verificaci\u00f3n, el que probemos casos en los que el numerador y denominador sean positivos y negativos y que tengamos combinaciones pos-pos, pos-neg, neg-pos y neg-neg. \u00bfC\u00f3mo hariamos los covergroups?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"> Generaci\u00f3n de varias secuencias<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos establecer varios tests, cada uno de ellos con una secuencia o podemos hacer un test que encadene varias secuencias. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a hacer esto \u00faltimo. Ya tenemos definida una primera secuencia que genera numeradores y denominadores positivos. Vamos  a generar tres nuevas secuencias para el resto de combinaciones que necesitamos comprobar en nuestro plan de verificaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recordad:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Generaremos la secuencia con la plantilla adecuada. <\/li><li>Generaremos la secuencia virtual asociada con la plantilla adecuada.<\/li><li>Definiremos lo que debe de hacer cada nueva secuencia.<ol><li>Habilitaremos y desabilitaremos constraints para que haga la combinaci\u00f3n que nos interesa.  <\/li><li>Definiremos un n\u00famero de repeticiones<\/li><li>Pondremos una evaluaci\u00f3n en cada repetici\u00f3n del grado de cobertura alcanzado (mediante el m\u00e9todo $get_coverage()) para que superado un cierto umbral dejemos de hacer repeticiones<\/li><\/ol><\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">El objetivo a conseguir es superar el 90% de cobertura total (en la que se tenga en cuenta covergroups y aserciones)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Propuesta de continuaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"> Si os queda tiempo y viendo como hemos solucionado este primer banco de pruebas UVM, ser\u00eda interesante establecer otras propuesta en la que utilicemos en lugar de un agente DOS. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Uno de ellos activo y el otro pasivo. <\/li><li>El activo dedicado a los operandos de entrada <\/li><li>El pasivo dedicado a los resultados<\/li><li>El activo deber\u00e1 tener generaci\u00f3n de est\u00edmulos y monitorizaci\u00f3n de entradas en base a la se\u00f1al de start que actua como validaci\u00f3n de las entradas<\/li><li>El pasivo deber\u00e1 tener monitorizaci\u00f3n de salidas en base a la se\u00f1al de fin que actua como validaci\u00f3n de las salidas<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>En esta sesi\u00f3n nos vamos a dedicarnos a la cobertura funcional y a mejorar nuestro plan de verificaci\u00f3n con el fin de conseguir una grado de cobertura especificado. Para ello el esquema que vamos a seguir es el siguiente: Determinaci\u00f3n de la cobertura funcional con el componente coverage Generaci\u00f3n de nuevas secuencias y valoraci\u00f3n del grado de cobertura obtenido Control de generaci\u00f3n de est\u00edmulos en base a grado de cobertura Cobertura funcional La cobertura funcional es ejercida fundamentalmente en systemverilog mediante los covergroups. Pod\u00e9is observar en esta web un apartado espec\u00edfico para dichos elementos: VERIFICACI\u00d3N-&gt;COBERTURA FUNCIONAL. Lo importante ahora en UVM es saber donde vamos a definir nuestros covergroups. Lo haremos en el componente disponible en nuestro enviroment que recibe el nombre de \u00abcoverage\u00bb. Observad en el siguiente v\u00eddeo (en el punto 2 de su esquema) c\u00f3mo lo hacemos para el caso del radicador. Visto el procedimiento vamos a establecer como m\u00ednimo plan de verificaci\u00f3n, el que probemos casos en los que el numerador y denominador sean positivos y negativos y que tengamos combinaciones pos-pos, pos-neg, neg-pos y neg-neg. \u00bfC\u00f3mo hariamos los covergroups? Generaci\u00f3n de varias secuencias Podemos establecer varios tests, cada uno de ellos con una secuencia o podemos hacer un test que encadene varias secuencias. Vamos a hacer esto \u00faltimo. Ya tenemos definida una primera secuencia que genera numeradores y denominadores positivos. Vamos a generar tres nuevas secuencias para el resto de combinaciones que necesitamos comprobar en nuestro plan de verificaci\u00f3n. Recordad: Generaremos la secuencia con la plantilla adecuada. Generaremos la secuencia virtual asociada con la plantilla adecuada. Definiremos lo que debe de hacer cada nueva secuencia. Habilitaremos y desabilitaremos constraints para que haga la combinaci\u00f3n que nos interesa. Definiremos un n\u00famero de repeticiones Pondremos una evaluaci\u00f3n en cada repetici\u00f3n del grado de cobertura alcanzado (mediante el m\u00e9todo $get_coverage()) para que superado un cierto umbral dejemos de hacer repeticiones El objetivo a conseguir es superar el 90% de cobertura total (en la que se tenga en cuenta covergroups y aserciones) Propuesta de continuaci\u00f3n Si os queda tiempo y viendo como hemos solucionado este primer banco de pruebas UVM, ser\u00eda interesante establecer otras propuesta en la que utilicemos en lugar de un agente DOS. Uno de ellos activo y el otro pasivo. El activo dedicado a los operandos de entrada El pasivo dedicado a los resultados El activo deber\u00e1 tener generaci\u00f3n de est\u00edmulos y monitorizaci\u00f3n de entradas en base a la se\u00f1al de start que actua como validaci\u00f3n de las entradas El pasivo deber\u00e1 tener monitorizaci\u00f3n de salidas en base a la se\u00f1al de fin que actua como validaci\u00f3n de las salidas<\/p>\n","protected":false},"author":2,"featured_media":1377,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[],"class_list":["post-1375","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales"],"featured_image_src":"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/Pasted-1.png","author_info":{"display_name":"ralfgad","author_link":"https:\/\/dsd.webs.upv.es\/?author=2"},"_links":{"self":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/1375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"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=1375"}],"version-history":[{"count":7,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/1375\/revisions"}],"predecessor-version":[{"id":1391,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/1375\/revisions\/1391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/media\/1377"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}