{"id":485,"date":"2020-10-21T12:54:38","date_gmt":"2020-10-21T12:54:38","guid":{"rendered":"http:\/\/dsd.webs.upv.es\/?p=485"},"modified":"2020-10-21T15:22:22","modified_gmt":"2020-10-21T15:22:22","slug":"funcionamiento-de-clocking-blocks","status":"publish","type":"post","link":"https:\/\/dsd.webs.upv.es\/?p=485","title":{"rendered":"Funcionamiento de clocking blocks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vamos a poner un ejemplo de clocking block insertado dentro de un modulo<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:verilog decode:true \">module M1(ck, ein, din, dout);\n input         ck,ein;\n input  [31:0] din    ;\n output [31:0] dout   ;\n\n clocking sd @(posedge ck);\n   input  #2ns ein,din    ;\n   output #3ns dout;\n endclocking:sd\n\n default clocking sd;\n\n logic  sd_ein, ein_reg ;\n logic [31:0] din_reg,sd_din_reg, sd_din;\n logic [31:0] sd_dout;\n initial begin\n\n   ##1 sd.dout&lt;=25;\n   ##1 sd.dout&lt;=33;\n end\nassign sd_dout=sd.dout;\nassign sd_din=sd.din;\nassign sd_ein=sd.ein; \nalways @(posedge ck)\n begin\n   sd_din_reg &lt;= sd.din;\n   din_reg &lt;= din; \n   ein_reg&lt;=ein;\n   \n end\n\nendmodule:M1<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Driver<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si analizamos la generaci\u00f3n de la secuencia de sd.dout (25=&gt;33) podemos observar el efecto del clocking block en la copia exacta que tenemos en la se\u00f1al  dout retrasada un tiempo exactamente igual al skew especificado en la l\u00ednea 8<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Muestreo<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto a din (que es generado desde el banco de pruebas) y es introducido en el modulo M1 a trav\u00e9s de un puerto de entrada, podemos ver que sd.din es una copia exacta de din sincronizada por el reloj y que asemeja su comportamiento al que tendr\u00eda una copia registrada de  din mediante una asignaci\u00f3n \u00abnon_blocking\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La \u00fanica forma de ver el efecto del skew se\u00f1alado en la l\u00ednea 7 ser\u00eda si nos fijamos en la se\u00f1al ein. Su comportamiento (que procede tambi\u00e9n del banco de pruebas) se ha programado para que su cambio sea 1 ns antes de cada flanco positivo del reloj de forma que pueda observarse que sd.ein es una copia exacta de ein sincronizada por el reloj; pero  el momento de captura se encuentra 2 ns antes de cada flanco de reloj (su skew en el clocking block).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si alguno tiene dudas sobre este funcionamiento he preparado el siguiente proyecto de simulaci\u00f3n, en el que se han creado ciertas copias de las se\u00f1ales del clocking block para que pod\u00e1is observarlas en un visualizador VCD. En el caso de realizar esta simulaci\u00f3n en questasim podr\u00e9is referenciar directamente a dichas variables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seria conveniente que hag\u00e1is los cambios que cre\u00e1is convenientes para acabar de entender c\u00f3mo funciona el clocking block.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><\/div>\n\n\n\n[iframe width=\u00bb100%\u00bb height=\u00bb480&#8243; src=\u00bbhttps:\/\/www.edaplayground.com\/x\/6uYW\u00bb].\n","protected":false},"excerpt":{"rendered":"<p>Vamos a poner un ejemplo de clocking block insertado dentro de un modulo Driver Si analizamos la generaci\u00f3n de la secuencia de sd.dout (25=&gt;33) podemos observar el efecto del clocking block en la copia exacta que tenemos en la se\u00f1al dout retrasada un tiempo exactamente igual al skew especificado en la l\u00ednea 8 Muestreo En cuanto a din (que es generado desde el banco de pruebas) y es introducido en el modulo M1 a trav\u00e9s de un puerto de entrada, podemos ver que sd.din es una copia exacta de din sincronizada por el reloj y que asemeja su comportamiento al que tendr\u00eda una copia registrada de din mediante una asignaci\u00f3n \u00abnon_blocking\u00bb. La \u00fanica forma de ver el efecto del skew se\u00f1alado en la l\u00ednea 7 ser\u00eda si nos fijamos en la se\u00f1al ein. Su comportamiento (que procede tambi\u00e9n del banco de pruebas) se ha programado para que su cambio sea 1 ns antes de cada flanco positivo del reloj de forma que pueda observarse que sd.ein es una copia exacta de ein sincronizada por el reloj; pero el momento de captura se encuentra 2 ns antes de cada flanco de reloj (su skew en el clocking block). Si alguno tiene dudas sobre este funcionamiento he preparado el siguiente proyecto de simulaci\u00f3n, en el que se han creado ciertas copias de las se\u00f1ales del clocking block para que pod\u00e1is observarlas en un visualizador VCD. En el caso de realizar esta simulaci\u00f3n en questasim podr\u00e9is referenciar directamente a dichas variables. Seria conveniente que hag\u00e1is los cambios que cre\u00e1is convenientes para acabar de entender c\u00f3mo funciona el clocking block. [iframe width=\u00bb100%\u00bb height=\u00bb480&#8243; src=\u00bbhttps:\/\/www.edaplayground.com\/x\/6uYW\u00bb].<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[5],"tags":[19,20],"class_list":["post-485","post","type-post","status-publish","format-standard","hentry","category-verificacion","tag-clocking-blocks","tag-sincronizacion"],"featured_image_src":null,"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\/485","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=485"}],"version-history":[{"count":9,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":500,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions\/500"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}