{"id":527,"date":"2020-10-21T16:03:58","date_gmt":"2020-10-21T16:03:58","guid":{"rendered":"http:\/\/dsd.webs.upv.es\/?page_id=527"},"modified":"2025-08-06T17:00:02","modified_gmt":"2025-08-06T17:00:02","slug":"generate","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=527","title":{"rendered":"Generate"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Es una construcci\u00f3n que ya dispon\u00eda Verilog en su versi\u00f3n de 2001<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En principio estaba pensado para replicado de instancias cuando se quer\u00eda realizar de manera lo m\u00e1s autom\u00e1tica posible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo si se quer\u00eda instanciar 32 sumadores de tipo Full Adder  para la construcci\u00f3n de un sumador \u00abripple carry\u00bb de 32 bits, se puede recurrir de manera elegante a este tipo de construcci\u00f3n que nos permite un replicado r\u00e1pido<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nmodule add_array (A, B, CIN, S, COUT) ;\n   input &#x5B;31:0] A, B ;\n   input CIN ;\n   output &#x5B;31:0] S ;\n   output COUT ;\n   genvar i;\n   wire &#x5B;31:1] carry;\n   generate \n       for (i=31;i&amp;gt;-1;i=i-1)\n                begin: width\n                   case(i)\n                       31:      full_add FA7 (A&#x5B;i],B&#x5B;i],carry&#x5B;i],S&#x5B;i],COUT);\n                       0:      full_add FA0 (A&#x5B;i],B&#x5B;i],CIN,S&#x5B;i],carry&#x5B;i+1]);\n                       default: full_add FA (A&#x5B;i],B&#x5B;i],carry&#x5B;i],S&#x5B;i],carry&#x5B;i+1]);\n                   endcase\n                end\n   endgenerate\nendmodule\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Se puede observar los elementos esenciales de esta construcci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La variable en base a la cual trabajar\u00e1 la construcci\u00f3n de replicado (ver linea 6). Se tiene que definir a trav\u00e9s de la palabra reservada \u00abgenvar\u00bb<\/li>\n\n\n\n<li>La cabecera y final de dicha construcci\u00f3n mediante \u00abgenerate\u00bb y \u00abendgenerate\u00bb<\/li>\n\n\n\n<li>el uso interno de la variable especificada en contrucciones iterativas de tipo \u00abfor\u00bb o en estructuras condicionales de tipo \u00abif\u00bb y \u00abcase\u00bb<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nada impide que esta construcci\u00f3n  pueda replicar cualquier otra estructura concurrente: always, assign, primitivas, initial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tanto es as\u00ed que podemos realizar su uso para el replicado por ejemplo de aserciones concurrentes. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos en el siguiente ejemplo como replicamos las ecuaciones b\u00e1sicas de suma y acarreo de un full-adder (por tanto replicamos construcciones \u00abassign\u00bb) para generar un sumador de 8 bits<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.edaplayground.com\/x\/uNZ6\" 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-8.png\" alt=\"\" class=\"wp-image-1518\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Es una construcci\u00f3n que ya dispon\u00eda Verilog en su versi\u00f3n de 2001 En principio estaba pensado para replicado de instancias cuando se quer\u00eda realizar de manera lo m\u00e1s autom\u00e1tica posible. Por ejemplo si se quer\u00eda instanciar 32 sumadores de tipo Full Adder para la construcci\u00f3n de un sumador \u00abripple carry\u00bb de 32 bits, se puede recurrir de manera elegante a este tipo de construcci\u00f3n que nos permite un replicado r\u00e1pido Se puede observar los elementos esenciales de esta construcci\u00f3n: Nada impide que esta construcci\u00f3n pueda replicar cualquier otra estructura concurrente: always, assign, primitivas, initial. Tanto es as\u00ed que podemos realizar su uso para el replicado por ejemplo de aserciones concurrentes. Veamos en el siguiente ejemplo como replicamos las ecuaciones b\u00e1sicas de suma y acarreo de un full-adder (por tanto replicamos construcciones \u00abassign\u00bb) para generar un sumador de 8 bits<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":525,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"class_list":["post-527","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\/527","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=527"}],"version-history":[{"count":9,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/527\/revisions"}],"predecessor-version":[{"id":1868,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/527\/revisions\/1868"}],"up":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/525"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}