{"id":1346,"date":"2022-06-16T07:39:00","date_gmt":"2022-06-16T07:39:00","guid":{"rendered":"https:\/\/dsd.webs.upv.es\/?p=1346"},"modified":"2022-09-05T09:21:37","modified_gmt":"2022-09-05T09:21:37","slug":"sesion-2-seminario-verificacion-uvm-nivel-basico","status":"publish","type":"post","link":"https:\/\/dsd.webs.upv.es\/?p=1346","title":{"rendered":"Sesion 2 Seminario Verificaci\u00f3n UVM nivel b\u00e1sico"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En esta sesi\u00f3n nos vamos a centrar en la creaci\u00f3n del test de la siguiente figura (RECUADRO EN AMARILLO) y su posterior refinamiento, tanto de la generaci\u00f3n de est\u00edmulos como en la observaci\u00f3n de  los resultados. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El esquema que vamos a seguir es el siguiente:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Creaci\u00f3n del test\n<ol class=\"wp-block-list\">\n<li>Inserci\u00f3n de un agente<\/li>\n\n\n\n<li>Generaci\u00f3n del \u00abenviroment\u00bb<\/li>\n\n\n\n<li>Generaci\u00f3n del test.  Esta generaci\u00f3n de test a su vez requiere de:\n<ol class=\"wp-block-list\">\n<li>Generaci\u00f3n de secuencia<\/li>\n\n\n\n<li>Generaci\u00f3n de secuencia virtual<\/li>\n\n\n\n<li>Generaci\u00f3n propiamente del test<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Generaci\u00f3n de los est\u00edmulos y <\/li>\n\n\n\n<li>Observaci\u00f3n de los resultados<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Creaci\u00f3n del test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como puede observarse por los pasos a seguir es una metodolog\u00eda \u00abbottom-up\u00bb. Antes de ello recapitularemos nuestros pasos de la primera sesi\u00f3n para adaptarlos definitivamente al dise\u00f1o propuesto: Un divisor algor\u00edtmico, ya que nuestra estructura de dut y nuestro interfaz estaban extra\u00eddos de un dise\u00f1o de otro circuito aritm\u00e9tico algor\u00edtmico: un radicador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"> Adaptaci\u00f3n al circuito divisor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que ha habido un cambio en el dise\u00f1o y en las especificaciones. \u00bfQu\u00e9 deber\u00edamos cambiar? \u00bfQu\u00e9 permanecer\u00eda sin cambios?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empecemos con lo que no cambiar\u00eda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Podemos seguir trabajando con el mismo proyecto<\/li>\n\n\n\n<li>Podemos seguir trabajando con el TOP general definido en la sesi\u00f3n anterior (recuadro azul) <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestros cambios deber\u00edan centrarse en los bloques interfaz y DUT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto a lo primero, el interfaz,  ten\u00edamos un interfaz ejemplo que os proporcion\u00e9 que serv\u00eda para interfasar con un circuito aritm\u00e9tico con un solo operando de entrada y una solo resultado. Ahora tenemos dos operandos y dos resultados. Haced los cambios pertinentes si no los hab\u00e9is hecho.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto al DUT,  lo primero que  tenemos b\u00e1sicamente  es el dise\u00f1o RTL (que como ingenieros de verificaci\u00f3n se nos suele proporcionar) y un top_dut que os recuerdo hace la adaptaci\u00f3n de puertos al interfaz que acabamos de adaptar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creaci\u00f3n de la infraestructura test<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Os proporciono el siguiente v\u00eddeo para que ve\u00e1is como proceder con el ejemplo 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: Creaci\u00f3n del Test |  | UPV\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/U_V--GQgsls?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\">Fijaros que en este paso hemos tirado fundamentalmente de Templates proporcionados por el asistente y  pr\u00e1cticamente lo que es el esqueleto de toda la estructura de test ya la tenemos realizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si hab\u00e9is seguido los pasos correctamente debe de apareceros una figura tal como la siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"540\" src=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-3-1024x540.png\" alt=\"\" class=\"wp-image-1360\" srcset=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-3-1024x540.png 1024w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-3-300x158.png 300w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-3-768x405.png 768w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-3.png 1026w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Generaci\u00f3n de los est\u00edmulos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a introducir RCSG (Random Constraint Stimulus Generation) siguiendo los siguientes pasos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Secuencia-Test asociado a dicha secuencia<\/li>\n\n\n\n<li>\u201cItem\u201d del \u201cagent\u201d<\/li>\n\n\n\n<li>\u201cDriver\u201d del \u201cagent\u201d<\/li>\n<\/ul>\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: Secuencia de est\u00edmulos |  | UPV\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/Nb40n7L_0t8?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 que hemos seguido proponemos tunear nuestra primera secuencia con los siguientes objetivos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Randomizar el numerador y el denominador<\/li>\n\n\n\n<li>Colocar un constraint de que el numerador sea positivo <\/li>\n\n\n\n<li>Colocar una constraint de que el denominador sea positivo<\/li>\n\n\n\n<li>hacer 50 repeticiones en dicha secuencia<\/li>\n\n\n\n<li>Monitorizar cuando el reset est\u00e9 desactivo en todos los flancos de reloj siempre y cuando termina el algoritmo<\/li>\n\n\n\n<li>Compilar el dise\u00f1o y est\u00edmulos generados y lanzar el simulador<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Observaci\u00f3n de resultados<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos ahora a automatizar en la medida de lo posible la observaci\u00f3n de resultados. Para ello fundamentalmente necesitamos (que aun tenemos pendiente) la introducci\u00f3n de un modelo de referencia (Golden model) y trazar un buen muestreo de las entradas y salidas de nuestra DUT para qe las entradas sean llevadas al modelo de referencia y las salidas sean llevadas al scorborad para comparar los resultados con el modelo de eferencia. Eso obliga por supuesto a que el modelo de referencia est\u00e9 tambi\u00e9n perfectamente conectado al scoreboard. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El esquema de lo que nos queda por hacer es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Definici\u00f3n modelo de referencia<\/li>\n\n\n\n<li>Introducci\u00f3n del mismo en el \u00abenviroment\u00bb<\/li>\n\n\n\n<li>Conexionado del modelo de referencia<\/li>\n\n\n\n<li>Procedimiento b\u00e1sico de monitorizaci\u00f3n<\/li>\n<\/ul>\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: Observaci\u00f3n de resultados |  | UPV\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/kMcKFPbwRYI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><figcaption>Del resultado de estas operaciones ten\u00e9is que tener una estructura UVM como la representada en la siguiente figura:<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"477\" src=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-4-1024x477.png\" alt=\"\" class=\"wp-image-1369\" srcset=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-4-1024x477.png 1024w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-4-300x140.png 300w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-4-768x358.png 768w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2022\/06\/image-4.png 1067w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"> Recomendaciones finales<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En el v\u00eddeo anterior quedan algunas cosas pendientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> Se define inserta y conecta el modelo de referencia pero no se concreta la realizaci\u00f3n del modelo de referencia. Evidentemente es un paso dise\u00f1o dependiente. Si se quiere observar un ejemplo de refinamiento y descripci\u00f3n de un modelo de referencia para un radicador pod\u00e9is observarlo en el primer punto del siguiente v\u00eddeo. La idea es saber ahora c\u00f3mo hariais el modelo de referencia del divisor. <\/li>\n<\/ul>\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?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li> El scoreboard generado por los templates requiere un ligero cambio para que refleje perfectamente el comportamiento del duv (comportamiento obtenido-actual) y el comportamiento del modelo de referencia ante los mismos est\u00edmulos (comportamiento esperado-expected). Estad muy atentos porque esos cambios est\u00e1n descritos el el anterior v\u00eddeo en el punto 3 de su esquema de desarrollo.<\/li>\n\n\n\n<li>Por \u00faltimo queda la determinaci\u00f3n correcta del m\u00f3nitor de vuestro agente. La monitorizaci\u00f3n determinada por el template establece unos flancos de reloj para hacer ese muestreo, presuponiendo que el reset est\u00e9 desactivo (cuidado con el nivel de ese reset desactivo!), y con una supuesta se\u00f1\u00e1l de validaci\u00f3n de las respuestas correctas. De nuevo necesitamos refinar este fichero y adaptarlo a la forma de operar del dise\u00f1o objeto de verificaci\u00f3n <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta sesi\u00f3n nos vamos a centrar en la creaci\u00f3n del test de la siguiente figura (RECUADRO EN AMARILLO) y su posterior refinamiento, tanto de la generaci\u00f3n de est\u00edmulos como en la observaci\u00f3n de los resultados. El esquema que vamos a seguir es el siguiente: Creaci\u00f3n del test Como puede observarse por los pasos a seguir es una metodolog\u00eda \u00abbottom-up\u00bb. Antes de ello recapitularemos nuestros pasos de la primera sesi\u00f3n para adaptarlos definitivamente al dise\u00f1o propuesto: Un divisor algor\u00edtmico, ya que nuestra estructura de dut y nuestro interfaz estaban extra\u00eddos de un dise\u00f1o de otro circuito aritm\u00e9tico algor\u00edtmico: un radicador. Adaptaci\u00f3n al circuito divisor Supongamos que ha habido un cambio en el dise\u00f1o y en las especificaciones. \u00bfQu\u00e9 deber\u00edamos cambiar? \u00bfQu\u00e9 permanecer\u00eda sin cambios? Empecemos con lo que no cambiar\u00eda: Nuestros cambios deber\u00edan centrarse en los bloques interfaz y DUT. En cuanto a lo primero, el interfaz, ten\u00edamos un interfaz ejemplo que os proporcion\u00e9 que serv\u00eda para interfasar con un circuito aritm\u00e9tico con un solo operando de entrada y una solo resultado. Ahora tenemos dos operandos y dos resultados. Haced los cambios pertinentes si no los hab\u00e9is hecho. En cuanto al DUT, lo primero que tenemos b\u00e1sicamente es el dise\u00f1o RTL (que como ingenieros de verificaci\u00f3n se nos suele proporcionar) y un top_dut que os recuerdo hace la adaptaci\u00f3n de puertos al interfaz que acabamos de adaptar. Creaci\u00f3n de la infraestructura test Os proporciono el siguiente v\u00eddeo para que ve\u00e1is como proceder con el ejemplo del radicador. Fijaros que en este paso hemos tirado fundamentalmente de Templates proporcionados por el asistente y pr\u00e1cticamente lo que es el esqueleto de toda la estructura de test ya la tenemos realizada. Si hab\u00e9is seguido los pasos correctamente debe de apareceros una figura tal como la siguiente: Generaci\u00f3n de los est\u00edmulos Vamos a introducir RCSG (Random Constraint Stimulus Generation) siguiendo los siguientes pasos: Visto el procedimiento que hemos seguido proponemos tunear nuestra primera secuencia con los siguientes objetivos: Observaci\u00f3n de resultados Vamos ahora a automatizar en la medida de lo posible la observaci\u00f3n de resultados. Para ello fundamentalmente necesitamos (que aun tenemos pendiente) la introducci\u00f3n de un modelo de referencia (Golden model) y trazar un buen muestreo de las entradas y salidas de nuestra DUT para qe las entradas sean llevadas al modelo de referencia y las salidas sean llevadas al scorborad para comparar los resultados con el modelo de eferencia. Eso obliga por supuesto a que el modelo de referencia est\u00e9 tambi\u00e9n perfectamente conectado al scoreboard. El esquema de lo que nos queda por hacer es: Recomendaciones finales En el v\u00eddeo anterior quedan algunas cosas pendientes:<\/p>\n","protected":false},"author":2,"featured_media":1348,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"categories":[63],"tags":[],"class_list":["post-1346","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\/image-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\/1346","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=1346"}],"version-history":[{"count":12,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/1346\/revisions"}],"predecessor-version":[{"id":1399,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/1346\/revisions\/1399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/media\/1348"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}