{"id":1188,"date":"2021-10-13T11:24:52","date_gmt":"2021-10-13T11:24:52","guid":{"rendered":"https:\/\/dsd.webs.upv.es\/?page_id=1188"},"modified":"2025-08-06T17:03:06","modified_gmt":"2025-08-06T17:03:06","slug":"generacion-de-estimulos","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=1188","title":{"rendered":"Generaci\u00f3n de est\u00edmulos"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vamos a ver la generaci\u00f3n de est\u00edmulos habituales necesarios en nuestros bancos de pruebas realizados con Verilog.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Generaci\u00f3n de reloj<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestra primera opci\u00f3n es mediante un always<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\n`timescale 1 ns \/ 100 ps;\nreg clk;\nparameter periodo = 10;\n\/\/ Periodo = 10ns\nalways\nbegin\n#(periodo\/2);\nclk = 1\u2019b0;\n#(periodo\/2);\nclk = 1\u2019b1;\nend\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Como puede observarse es f\u00e1cil hacer este est\u00edmulo configurable con tan solo el cambio del valor del par\u00e1metro denominado \u00abperiodo\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otra alternativa interesante es mediante un \u00abinitial\u00bb combinado con un \u00abforever\u00bb<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\ninitial begin clk = 1&#039;b0;\nforever #(periodo\/2)  clk = !clk;\nend\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Generaci\u00f3n de reset<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para la generaci\u00f3n del reset, la recomendaci\u00f3n b\u00e1sica es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><figure><span style=\"background-color: rgb(255, 255, 255); color: initial;\">Si es un reset as\u00edncrono, lo peor que nos puede pasar es que la desactivaci\u00f3n del reset coincida en el dise\u00f1o con la activaci\u00f3n del reloj<\/span><\/figure><\/li>\n\n\n\n<li><figure><span style=\"background-color: rgb(255, 255, 255); color: initial;\">Si es un reset s\u00edncrono, la peor situaci\u00f3n que nos puede ocurrir es la coincidencia de los cambios de la se\u00f1al de reset con el flanco activo del reloj, si bien esta situaci\u00f3n la veremos con m\u00e1s detenimiento en el siguiente apartado por considerar en este caso esta se\u00f1al como un est\u00edmulo s\u00edncrono cualesquiera.<\/span><\/figure><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si nos centramos en el reset as\u00edncrono, es muy importante tener en cuenta que la consideraci\u00f3n aportada se refiere a:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bb c\u00f3mo le llegan esas se\u00f1ales a los flip-flops de mi dise\u00f1o\u00bb<\/strong>, con lo cual queremos decir que es muy posible que nuestros est\u00edmulos a nivel de puerto est\u00e9n muy separados (por ejemplo medio ciclo) y sin embargo esas mismas se\u00f1ales, despu\u00e9s de pasar por los \u00e1rboles de distribuci\u00f3n de la se\u00f1al de reloj y de la se\u00f1al de reset as\u00edncrono, dichas se\u00f1ales sean percibidas por los flipflops pr\u00e1cticamente coincidentes y por tanto generando problemas de \u00abremoval\u00bb y de \u00abrecovery\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos en el siguiente video como realizar esta generaci\u00f3n del reset:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"SIMULACION FSM: Generaci\u00f3n del reset | 7\/34 | UPV\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/4XBJEb0K3Qs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Generaci\u00f3n de est\u00edmulo s\u00edncrono b\u00e1sico<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar deber\u00edamos considerar dos condicionantes fundamentales:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El est\u00edmulo debe de ser adecuado para el funcionamiento del banco de pruebas para una simulaci\u00f3n funcional (RTL) en la cual no hay retardos , y para una simulaci\u00f3n Gate Level con retardos.\n<ul class=\"wp-block-list\">\n<li>Para una simulaci\u00f3n RTL el mayor riesgo es una condici\u00f3n de carrera en el momento del flanco activo de reloj. Eso se produce cuando el est\u00edmulo cambia en el mismo instante y se desconoce por tanto que va&nbsp; a ser procesado en primer lugar por el simulador:\n<ul class=\"wp-block-list\">\n<li>Bien en primer lugar el cambio del est\u00edmulo y luego el cambio de reloj<\/li>\n\n\n\n<li>O bien primero el cambio de reloj y luego en segundo lugar el cambio del est\u00edmulo<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>El problema a evitar en las simulaciones temporales es que esos est\u00edmulos , al llegar a los flipflops que los procesan (estamos hablando de los destinos de esos paths ), no respetemos los m\u00e1rgenes de activaci\u00f3n y de retenci\u00f3n .<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a ver con el siguiente v\u00eddeo, como podemos acometer de forma r\u00e1pida y sencilla unos est\u00edmulos s\u00edncronos que nos eviten problemas de temporizaci\u00f3n en simulaciones Gate Level o problemas de carrera en simulaciones funcionales.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"SIMULACI\u00d3N FSM: GENERACI\u00d3N DE EST\u00cdMULO B\u00c1SICO | 6\/34 | UPV\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/BUvNyWkm1kM?start=50&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2021\/tool\/23508f1c-7832-41d9-bcd9-9721e27e39cf\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;bltiAppStores=false&amp;errorMessage=&amp;clearAttr=&amp;messageId=&amp;source=&amp;title=&amp;sendingPage=7557376&amp;newTopLevel=false&amp;postedComment=false&amp;addBefore=&amp;path=push&amp;itemId=8125739&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Generaci\u00f3n avanzada de est\u00edmulos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El t\u00e9rmino avanzado es muy sufrido y puede significar muchas cosas. Puesto que estamos hablando de simulaci\u00f3n de dise\u00f1os y no de su hermano mayor (verificaci\u00f3n de dise\u00f1os) , nos vamos a conformar en considerar avanzado una generaci\u00f3n de est\u00edmulos que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Est\u00e1 encapsulada en tasks<\/li>\n\n\n\n<li>Que dichos tasks puedan ser f\u00e1cilmente empaquetados para su reuso posterior<\/li>\n\n\n\n<li>Que dichos tasks no presenten problemas de llamadas reeentrantes paralelas<\/li>\n\n\n\n<li>y finalmente que dichos tasks no tenga que modificarlos para reusarlos<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para ver estos aspectos vamos a visualizar le siguiente v\u00eddeo<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"SIMULACI\u00d3N FSM: GENERACI\u00d3NM DE EST\u00cdMULO AVANZADO | 5\/34 | UPV\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/SuHC8QRUmK4?start=383&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos a ver la generaci\u00f3n de est\u00edmulos habituales necesarios en nuestros bancos de pruebas realizados con Verilog. Generaci\u00f3n de reloj Nuestra primera opci\u00f3n es mediante un always Como puede observarse es f\u00e1cil hacer este est\u00edmulo configurable con tan solo el cambio del valor del par\u00e1metro denominado \u00abperiodo\u00bb. Otra alternativa interesante es mediante un \u00abinitial\u00bb combinado con un \u00abforever\u00bb Generaci\u00f3n de reset Para la generaci\u00f3n del reset, la recomendaci\u00f3n b\u00e1sica es: Si nos centramos en el reset as\u00edncrono, es muy importante tener en cuenta que la consideraci\u00f3n aportada se refiere a: \u00bb c\u00f3mo le llegan esas se\u00f1ales a los flip-flops de mi dise\u00f1o\u00bb, con lo cual queremos decir que es muy posible que nuestros est\u00edmulos a nivel de puerto est\u00e9n muy separados (por ejemplo medio ciclo) y sin embargo esas mismas se\u00f1ales, despu\u00e9s de pasar por los \u00e1rboles de distribuci\u00f3n de la se\u00f1al de reloj y de la se\u00f1al de reset as\u00edncrono, dichas se\u00f1ales sean percibidas por los flipflops pr\u00e1cticamente coincidentes y por tanto generando problemas de \u00abremoval\u00bb y de \u00abrecovery\u00bb. Veamos en el siguiente video como realizar esta generaci\u00f3n del reset: Generaci\u00f3n de est\u00edmulo s\u00edncrono b\u00e1sico Para empezar deber\u00edamos considerar dos condicionantes fundamentales: Vamos a ver con el siguiente v\u00eddeo, como podemos acometer de forma r\u00e1pida y sencilla unos est\u00edmulos s\u00edncronos que nos eviten problemas de temporizaci\u00f3n en simulaciones Gate Level o problemas de carrera en simulaciones funcionales. Generaci\u00f3n avanzada de est\u00edmulos El t\u00e9rmino avanzado es muy sufrido y puede significar muchas cosas. Puesto que estamos hablando de simulaci\u00f3n de dise\u00f1os y no de su hermano mayor (verificaci\u00f3n de dise\u00f1os) , nos vamos a conformar en considerar avanzado una generaci\u00f3n de est\u00edmulos que: Para ver estos aspectos vamos a visualizar le siguiente v\u00eddeo<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-1188","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\/1188","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=1188"}],"version-history":[{"count":7,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/1188\/revisions"}],"predecessor-version":[{"id":1869,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/1188\/revisions\/1869"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}