{"id":895,"date":"2021-05-25T13:35:45","date_gmt":"2021-05-25T13:35:45","guid":{"rendered":"https:\/\/dsd.webs.upv.es\/?page_id=895"},"modified":"2021-05-25T13:57:35","modified_gmt":"2021-05-25T13:57:35","slug":"casos-especiales","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=895","title":{"rendered":"Codificaci\u00f3n de los estados"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">De todos los dise\u00f1adores de m\u00e1quinas de estados es sabido que una de las cuestiones m\u00e1s importantes desde el punto de vista de la obtenci\u00f3n de \u00f3ptimos resultados en la s\u00edntesis de las FSM es la codificaci\u00f3n&nbsp; del estado de la m\u00e1quina. As\u00ed, entre otras, tenemos que podemos realizar las siguientes codificaciones:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00b7 &nbsp; &nbsp;&nbsp;<strong>Secuencial<\/strong>: binario natural. Utiliza el&nbsp; m\u00ednimo n\u00famero de bits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00b7 &nbsp; &nbsp;&nbsp;<strong>Gray, Johnson<\/strong>: disminuyen la posibilidad de transiciones incorrectas ante entradas que cambian dentro de los m\u00e1rgenes de set-up de los flip-flops. Lo cual las hace interesantes para cambiar de dominio de reloj.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00b7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>One-hot<\/strong>: tantos flip-flops como estados. Cada estado se representa por un flipflop a uno y el resto a cero. Adecuado en aquellas arquitecturas tecnol\u00f3gicas que disponen de un alto n\u00famero de flip-flops frente a l\u00f3gica combinacional para cada registro. Por ejemplo las FPGAs son arquitecturas de este tipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ante estas diferentes posibilidades, que me pueden dar mejores o peores resultados, el dise\u00f1ador puede utilizar inteligentemente los tipos de datos disponibles en Verilog para conseguir alternativas de codificaci\u00f3n que le lleven a resultados \u00f3ptimos sin tener que escribir c\u00f3digo de manera exhaustiva y continua. Vamos a resumir los diferentes tipos de datos que podemos gastar para la variable de ESTADO y ESTADO_PROX y las codificaciones que ellos implican.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tipos de datos y codificaciones asociadas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos utilizar otros tipos de datos que ahora vamos a describir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a)&nbsp;<strong>Usando tipo integer<\/strong>:&nbsp;La codificaci\u00f3n es impl\u00edcita pero \u00fanica: secuencial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">b)\u00a0<strong>Usando tipo vectores (reg, bit o logic):\u00a0<\/strong>La codificaci\u00f3n es expl\u00edcita (normalmente mediante par\u00e1metros) y por tanto especificada y fijada por la descripci\u00f3n. Es a nuestro modo de ver la soluci\u00f3n m\u00e1s sencilla cuando se quiere una codificaci\u00f3n a la carta de nuestra m\u00e1quina de estados .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">c) &nbsp;<strong>Usando tipo enumerado<\/strong>: La codificaci\u00f3n es expl\u00edcita como en el caso b); sin embargo el uso de directivas especiales hacen que el sintetizador entienda que se est\u00e1 tratando de un tipo de datos parecido a un enumerado, con lo cual la codificaci\u00f3n final del dise\u00f1o sintetizado corre a cargo del sintetizador. Dicho sintetizador normalmente admite en sus opciones de s\u00edntesis diferentes alternativas de codificaci\u00f3n como las vistas anteriormente, que pueden ser elegidas y aplicadas sin problemas por \u00e9l. Hemos utilizado en los dos ejemplos anteriores este tipo de directivas y hemos comentado que a veces la elecci\u00f3n de diferentes codificaciones obliga (en algunos tipos de software) a rectificar el c\u00f3digo Verilog, puesto que se parte de una codificaci\u00f3n expl\u00edcita que aunque luego superada por el sintetizador, a veces interfiere lamentablemente en el proceso de elaboraci\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De todos los dise\u00f1adores de m\u00e1quinas de estados es sabido que una de las cuestiones m\u00e1s importantes desde el punto de vista de la obtenci\u00f3n de \u00f3ptimos resultados en la s\u00edntesis de las FSM es la codificaci\u00f3n&nbsp; del estado de la m\u00e1quina. As\u00ed, entre otras, tenemos que podemos realizar las siguientes codificaciones: \u00b7 &nbsp; &nbsp;&nbsp;Secuencial: binario natural. Utiliza el&nbsp; m\u00ednimo n\u00famero de bits. \u00b7 &nbsp; &nbsp;&nbsp;Gray, Johnson: disminuyen la posibilidad de transiciones incorrectas ante entradas que cambian dentro de los m\u00e1rgenes de set-up de los flip-flops. Lo cual las hace interesantes para cambiar de dominio de reloj. \u00b7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One-hot: tantos flip-flops como estados. Cada estado se representa por un flipflop a uno y el resto a cero. Adecuado en aquellas arquitecturas tecnol\u00f3gicas que disponen de un alto n\u00famero de flip-flops frente a l\u00f3gica combinacional para cada registro. Por ejemplo las FPGAs son arquitecturas de este tipo. Ante estas diferentes posibilidades, que me pueden dar mejores o peores resultados, el dise\u00f1ador puede utilizar inteligentemente los tipos de datos disponibles en Verilog para conseguir alternativas de codificaci\u00f3n que le lleven a resultados \u00f3ptimos sin tener que escribir c\u00f3digo de manera exhaustiva y continua. Vamos a resumir los diferentes tipos de datos que podemos gastar para la variable de ESTADO y ESTADO_PROX y las codificaciones que ellos implican. Tipos de datos y codificaciones asociadas Podemos utilizar otros tipos de datos que ahora vamos a describir. a)&nbsp;Usando tipo integer:&nbsp;La codificaci\u00f3n es impl\u00edcita pero \u00fanica: secuencial. b)\u00a0Usando tipo vectores (reg, bit o logic):\u00a0La codificaci\u00f3n es expl\u00edcita (normalmente mediante par\u00e1metros) y por tanto especificada y fijada por la descripci\u00f3n. Es a nuestro modo de ver la soluci\u00f3n m\u00e1s sencilla cuando se quiere una codificaci\u00f3n a la carta de nuestra m\u00e1quina de estados . c) &nbsp;Usando tipo enumerado: La codificaci\u00f3n es expl\u00edcita como en el caso b); sin embargo el uso de directivas especiales hacen que el sintetizador entienda que se est\u00e1 tratando de un tipo de datos parecido a un enumerado, con lo cual la codificaci\u00f3n final del dise\u00f1o sintetizado corre a cargo del sintetizador. Dicho sintetizador normalmente admite en sus opciones de s\u00edntesis diferentes alternativas de codificaci\u00f3n como las vistas anteriormente, que pueden ser elegidas y aplicadas sin problemas por \u00e9l. Hemos utilizado en los dos ejemplos anteriores este tipo de directivas y hemos comentado que a veces la elecci\u00f3n de diferentes codificaciones obliga (en algunos tipos de software) a rectificar el c\u00f3digo Verilog, puesto que se parte de una codificaci\u00f3n expl\u00edcita que aunque luego superada por el sintetizador, a veces interfiere lamentablemente en el proceso de elaboraci\u00f3n.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"class_list":["post-895","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\/895","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=895"}],"version-history":[{"count":3,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/895\/revisions"}],"predecessor-version":[{"id":904,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/895\/revisions\/904"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}