{"id":676,"date":"2020-11-16T10:18:05","date_gmt":"2020-11-16T10:18:05","guid":{"rendered":"http:\/\/dsd.webs.upv.es\/?page_id=676"},"modified":"2025-08-07T08:09:12","modified_gmt":"2025-08-07T08:09:12","slug":"paso-3-clocking-block-y-monitorizacion","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=676","title":{"rendered":"Paso 3: Clocking block y monitorizaci\u00f3n"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En esta opci\u00f3n voy a comentar fundamentalmente dos nuevas incorporaciones que creo son las m\u00e1s destacables de esta evoluci\u00f3n:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El uso de clocking blocks para sincronizaci\u00f3n de los trasvases de informaci\u00f3n entre el program (testbench)&nbsp; y el dise\u00f1o (DUV)<\/li>\n\n\n\n<li>El uso de tasks de monitorizaci\u00f3n para hacer llegar los est\u00edmulos&nbsp; del testbench al modelo de referencia y para comparar las respuestas del DUV&nbsp; con las obtenidas con el modelo de referencia<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/EditPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650606&amp;addBefore=&amp;path=&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cloking Block<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La idea es sincronizar en base al evento descrito en el clocking block, tal como muestra la siguiente figura:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"300\" src=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-1.png\" alt=\"\" class=\"wp-image-1067\" srcset=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-1.png 600w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-1-300x150.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para entender mejor el comportamiento de los clocking blocks utilizados vamos a realizar la siguiente suposici\u00f3n. Supongamos que la se\u00f1al de START tiene un skew (output skew) en el clocking block de generaci\u00f3n de est\u00edmulos (sd)&nbsp;de 98 ns y un skew (input skew) de 5 ns en el clocking block de monitorizaci\u00f3n (md).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nclocking sd @(posedge CLK);\n   default input #1ns output #1ns;\n   input   COUNT,FIN ;\n   output #98ns START;\n   output X;\n endclocking:sd\n  \/\/efinimos el clocking de monitorizacion\n  clocking md @(posedge CLK);\n   default input #5ns output #1ns;\n   input   COUNT,FIN,START,X ;\n endclocking:md\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Vamos a representar en un cronograma el comportamiento del est\u00edmulo generado (prueba_radicador\/estim1\/sd\/START que lo llamaremos empieza_sd), c\u00f3mo es percibido por el DUV&nbsp; (prueba_radicador\/DUV\/START que lo llamaremos START), y c\u00f3mo es monitorizado por el modelo de referencia (prueba_radicador\/estim1\/md\/START que lo llamaremos empieza_md).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n<style>\n       .errordiv { padding:10px; margin:10px; border: 1px solid #555555;color: #000000;background-color: #f8f8f8; width:500px; }#advanced_iframe {visibility:visible;opacity:1;vertical-align:top;}.ai-info-bottom-iframe { position: fixed; z-index: 10000; bottom:0; left: 0; margin: 0px; text-align: center; width: 100%; background-color: #ff9999; padding-left: 5px;padding-bottom: 5px; border-top: 1px solid #aaa } a.ai-bold {font-weight: bold;}#ai-layer-div-advanced_iframe p {height:100%;margin:0;padding:0}<\/style><script type=\"text\/javascript\">var ai_iframe_width_advanced_iframe = 0;var ai_iframe_height_advanced_iframe = 0;function aiReceiveMessageadvanced_iframe(event) {  aiProcessMessage(event,\"advanced_iframe\", \"true\",\"\",\"false\",\"false\");}if (window.addEventListener) {  window.addEventListener(\"message\", aiReceiveMessageadvanced_iframe);} else if (el.attachEvent)  {  el.attachEvent(\"message\", aiReceiveMessageadvanced_iframe);}var aiOnloadScrollTop=\"true\";var aiShowDebug=false;\n\t\tif (typeof aiReadyCallbacks === 'undefined') {\n\t\t\tvar aiReadyCallbacks = [];\n\t\t} else if (!(aiReadyCallbacks instanceof Array)) {\n\t\t\tvar aiReadyCallbacks = [];\n\t\t}    function aiShowIframeId(id_iframe) { jQuery(\"#\"+id_iframe).css(\"visibility\", \"visible\");    }    function aiResizeIframeHeight(height) { aiResizeIframeHeight(height,advanced_iframe); }    function aiResizeIframeHeightId(height,width,id) {aiResizeIframeHeightById(id,height);}<\/script><iframe id=\"advanced_iframe\"  name=\"advanced_iframe\"  src=\"https:\/\/drom.io\/vcd\/?github=ralfgad\/simulaciones_vcd\/main\/radicador_detalles.vcd\"  width=\"100%\"  height=\"200\"  frameborder=\"0\"  border=\"0\"  allowtransparency=\"true\"  loading=\"lazy\"  style=\";border-width: 0px;;border: none;;width:100%;;height:200px;\" ><\/iframe><script type=\"text\/javascript\">var ifrm_advanced_iframe = document.getElementById(\"advanced_iframe\");var hiddenTabsDoneadvanced_iframe = false;\nfunction resizeCallbackadvanced_iframe() {}<\/script><script type=\"text\/javascript\"><\/script><p style=\"display:block !important; visibility:visible !important;margin: -18px 14px 0 0;padding-left: 3px;padding-top:3px;background: white; overflow: hidden; position: relative; line-height:15px;width: fit-content;\"><small style=\"display:block !important;visibility:visible !important\">powered by Advanced iFrame<\/small><\/p>\n\n\n<p class=\"wp-block-paragraph\">Si visualiz\u00e1ramos como es percibido este&nbsp;est\u00edmulo&nbsp;por el DUV, ver\u00edamos que existe un &nbsp;retardo que coincide con el&nbsp;&nbsp;\u00abskew\u00bb definido para las salidas del clocking block (sd).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos ver&nbsp;como ese mismo est\u00edmulo llega al modelo de referencia a&nbsp;trav\u00e9s de otro clocking block (md) tambi\u00e9n con el mismo evento base (flancos positivos del reloj). En este caso el est\u00edmulo llega retrasado dos&nbsp;ciclos de reloj, puesto que en dicho flanco de reloj (con un skew de adelanto de 5 ns) es cuando START tiene el valor 1.&nbsp; <strong>Para ver con detalle estas circunstancias, situarse con el rat\u00f3n encima de la forma de onda, picar sobre la misma y modificar su zoom mediante la acci\u00f3n conjunta de la tecla control y la rueda del rat\u00f3n<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Monitorizaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La monitorizaci\u00f3n de las entradas y de las salidas del DUV ha sido realizado mediante dos tasks con una estructura de un \u00abloop\u00bb tipo \u00abwhile\u00bb:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Uno &nbsp;est\u00e1 monitorizando en todo momento cualquier cambio de las entradas (monitor_input) para llevar inmediatamente esos est\u00edmulos al modelo de referencia y&nbsp; el resultado de aplicar estos est\u00edmulos a dicho modelo (respuesta esperada)&nbsp; guardarlo en una FIFO<\/li>\n\n\n\n<li>El otro est\u00e1 monitorizando en todo momento las salidas&nbsp;(monitor_output) del DUV para llevar inmediatamente dichas salidas a una aserci\u00f3n que compara este comportamiento de las salidas con las esperadas &nbsp;que tengo almacenadas en la FIFO&nbsp; (tras la extracci\u00f3n de las mismas)<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"821\" height=\"424\" src=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-2.png\" alt=\"\" class=\"wp-image-1068\" srcset=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-2.png 821w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-2-300x155.png 300w, https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2021\/10\/Pasted-2-768x397.png 768w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/EditPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650607&amp;addBefore=&amp;path=&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><\/p>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\"><\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/EditPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650608&amp;addBefore=&amp;path=&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><a href=\"https:\/\/poliformat.upv.es\/portal\/site\/GRA_12450_2020\/tool\/173d51a0-1c21-417b-acdb-9d8f7ee629de\/ShowPage?returnView=&amp;studentItemId=0&amp;backPath=&amp;errorMessage=&amp;messageId=&amp;clearAttr=&amp;source=&amp;title=&amp;sendingPage=7432070&amp;newTopLevel=false&amp;postedComment=false&amp;itemId=7650635&amp;addBefore=&amp;path=push&amp;topicId=&amp;addTool=-1&amp;recheck=&amp;id=&amp;forumId=#\"><strong><\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Laboratorio virtual<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.edaplayground.com\/x\/4Hx_\">https:\/\/www.edaplayground.com\/x\/4Hx_<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.edaplayground.com\/x\/4Hx_\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"295\" height=\"71\" src=\"https:\/\/dsd.webs.upv.es\/wp-content\/uploads\/2023\/09\/image-6.png\" alt=\"\" class=\"wp-image-1514\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>En esta opci\u00f3n voy a comentar fundamentalmente dos nuevas incorporaciones que creo son las m\u00e1s destacables de esta evoluci\u00f3n: Cloking Block La idea es sincronizar en base al evento descrito en el clocking block, tal como muestra la siguiente figura: Para entender mejor el comportamiento de los clocking blocks utilizados vamos a realizar la siguiente suposici\u00f3n. Supongamos que la se\u00f1al de START tiene un skew (output skew) en el clocking block de generaci\u00f3n de est\u00edmulos (sd)&nbsp;de 98 ns y un skew (input skew) de 5 ns en el clocking block de monitorizaci\u00f3n (md). Vamos a representar en un cronograma el comportamiento del est\u00edmulo generado (prueba_radicador\/estim1\/sd\/START que lo llamaremos empieza_sd), c\u00f3mo es percibido por el DUV&nbsp; (prueba_radicador\/DUV\/START que lo llamaremos START), y c\u00f3mo es monitorizado por el modelo de referencia (prueba_radicador\/estim1\/md\/START que lo llamaremos empieza_md). Si visualiz\u00e1ramos como es percibido este&nbsp;est\u00edmulo&nbsp;por el DUV, ver\u00edamos que existe un &nbsp;retardo que coincide con el&nbsp;&nbsp;\u00abskew\u00bb definido para las salidas del clocking block (sd). Tambi\u00e9n podemos ver&nbsp;como ese mismo est\u00edmulo llega al modelo de referencia a&nbsp;trav\u00e9s de otro clocking block (md) tambi\u00e9n con el mismo evento base (flancos positivos del reloj). En este caso el est\u00edmulo llega retrasado dos&nbsp;ciclos de reloj, puesto que en dicho flanco de reloj (con un skew de adelanto de 5 ns) es cuando START tiene el valor 1.&nbsp; Para ver con detalle estas circunstancias, situarse con el rat\u00f3n encima de la forma de onda, picar sobre la misma y modificar su zoom mediante la acci\u00f3n conjunta de la tecla control y la rueda del rat\u00f3n Monitorizaci\u00f3n La monitorizaci\u00f3n de las entradas y de las salidas del DUV ha sido realizado mediante dos tasks con una estructura de un \u00abloop\u00bb tipo \u00abwhile\u00bb: Laboratorio virtual https:\/\/www.edaplayground.com\/x\/4Hx_<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":463,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"class_list":["post-676","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\/676","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=676"}],"version-history":[{"count":43,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/676\/revisions"}],"predecessor-version":[{"id":1934,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/676\/revisions\/1934"}],"up":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/463"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}