{"id":646,"date":"2020-11-15T10:44:55","date_gmt":"2020-11-15T10:44:55","guid":{"rendered":"http:\/\/dsd.webs.upv.es\/?page_id=646"},"modified":"2025-08-06T16:43:34","modified_gmt":"2025-08-06T16:43:34","slug":"modelo-mealy","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=646","title":{"rendered":"M\u00e1quinas Mealy"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Modelo de bloques<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La funcionalidad del modelo Mealy&nbsp; podemos verla representada&nbsp; en la&nbsp;<strong>Ilustraci\u00f3n 4<\/strong>, destacando, a diferencia del modelo Moore, que el circuito combinacional de salida depende tanto del estado como de las entradas.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/poliformat.upv.es\/access\/content\/group\/GRA_12412_2017\/Ocultos\/Imagenes\/Diagrama%20bloques_mealy.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ilustraci\u00f3n 4<\/strong>. Modelo Mealy<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Modelo Verilog<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Como puede adivinarse, los procesos combinacional1 y secuencial2 son totalmente equivalentes al modelo Moore y tan solo el proceso combinacional3 debe reflejar su dependencia en la lista de sensibilidad a los cambios que puedan producirse en las entradas que l\u00f3gicamente son le\u00eddas en el interior de la descripci\u00f3n. As\u00ed de esta forma tendr\u00edamos lo siguiente:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"color:#bc360a\" class=\"has-inline-color\">combinacional1:&nbsp;<strong>always @<\/strong>( entradas or estado_actual)<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">proceso sensible a las entradas y al estado de la m\u00e1quina. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional que nos obtiene el pr\u00f3ximo estado de la m\u00e1quina Mealy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"color:#bc360a\" class=\"has-inline-color\">secuencial2:&nbsp;<strong>always @<\/strong>(posedge reloj or negedge reset_a)<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">proceso que modelizar\u00e1 la l\u00f3gica secuencial. Se encargar\u00e1 de que en el flanco activo del reloj el estado de la m\u00e1quina pase a ser el valor que en ese momento tenga el pr\u00f3ximo estado. Tambi\u00e9n en este proceso se modelizar\u00e1 la acci\u00f3n del reset de la m\u00e1quina, sea as\u00edncrono o s\u00edncrono.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"color:#bc360a\" class=\"has-inline-color\">combinacional3:&nbsp;<strong>always @<\/strong>(estado_actual, entradas)<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">proceso sensible al estado de la m\u00e1quina y a las entradas. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional de las salidas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Como hemos dicho anteriormente, una variante muy habitual es combinar los dos procesos combinacionales en uno solo, puesto que ambos comparten la misma lista de sensibilidad&nbsp; y en ambos es necesario recorrer de igual forma las diferentes transiciones que ocurren desde cada estado y ante cualquier combinaci\u00f3n de entradas, para determinar&nbsp; cual es el estado siguiente y la salida asociada a dicha transici\u00f3n. En el ejemplo seguiremos aplicando la variante de los tres procesos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El diagrama de estado correspondiente al detector de secuencias bajo un modelo Mealy es el representado en la&nbsp;<strong>Ilustraci\u00f3n 5<\/strong>&nbsp;y su correspondiente descripci\u00f3n Verilog la tenemos en&nbsp;<strong>Ejemplo 2<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/poliformat.upv.es\/access\/content\/group\/GRA_12412_2017\/Ocultos\/Imagenes\/Diagrama%20estados_mealy.png\" alt=\"\" style=\"width:261px;height:309px\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ilustraci\u00f3n 5<\/strong>. Diagrama de estados Mealy<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:verilog decode:true \">module FSM_10 (\n    input RELOJ,\n    input RESET_A,\n    output logic SALIDA,\n    input ENTRADA);\n \nparameter [2:0] Q1=3'h0, Q2=3'h3, Q3=3'h5 ;\nlogic [2:0] ESTADO, ESTADO_PROX;\n \nalways_ff @(posedge RELOJ or negedge RESET_A)\nif (!RESET_A) ESTADO &lt;= Q1;\nelse ESTADO &lt;=  ESTADO_PROX ;\nalways_comb \nunique case (ESTADO) \n    Q1 :    if (!ENTRADA) ESTADO_PROX=Q2;\n    Q2 :    if (ENTRADA) ESTADO_PROX=Q3;\n    Q3 :    if (!ENTRADA)   ESTADO_PROX=Q2;\n            else ESTADO_PROX=Q1;\nendcase\nalways_comb \ncase (ESTADO) \n    Q1 :    SALIDA=1'b0;\n    Q2 :    SALIDA=1'b0;\n    Q3 :    if (!ENTRADA)       SALIDA=1'b1;\n            else SALIDA=1'b0;\n     default:  SALIDA=1'bx;\nendcase\nendmodule<\/pre><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nmodule FSM_10 (\n    input RELOJ,\n    input RESET_A,\n    output logic SALIDA,\n    input ENTRADA);\n \nparameter &#x5B;2:0] Q1=3&#039;h0, Q2=3&#039;h3, Q3=3&#039;h5 ;\nlogic &#x5B;2:0] ESTADO, ESTADO_PROX;\n \nalways_ff @(posedge RELOJ or negedge RESET_A)\nif (!RESET_A) ESTADO &amp;lt;= Q1;\nelse ESTADO &amp;lt;=  ESTADO_PROX ;\nalways_comb \nunique case (ESTADO) \n    Q1 :    if (!ENTRADA) ESTADO_PROX=Q2;\n    Q2 :    if (ENTRADA) ESTADO_PROX=Q3;\n    Q3 :    if (!ENTRADA)   ESTADO_PROX=Q2;\n            else ESTADO_PROX=Q1;\nendcase\nalways_comb \ncase (ESTADO) \n    Q1 :    SALIDA=1&#039;b0;\n    Q2 :    SALIDA=1&#039;b0;\n    Q3 :    if (!ENTRADA)       SALIDA=1&#039;b1;\n            else SALIDA=1&#039;b0;\n     default:  SALIDA=1&#039;bx;\nendcase\nendmodule\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo 2<\/strong>. Descripci\u00f3n Verilog del detector de secuencia Mealy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Realizando FSM Mealy con Verilog<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. Estilo de tres procesos<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><em>A continuaci\u00f3n en el siguiente v\u00eddeo ver\u00e1s c\u00f3mo se describe una FSM Mealy con un estilo de tres procesos.<\/em><\/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=\"FSM Mealy con Verilog, estilo de tres procesos b\u00e1sico |  | UPV\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/5VhmqpuBdrw?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><figcaption class=\"wp-element-caption\">Mealy: Estilo de 3 procesos<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">2. Estilo de dos procesos<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><em>A continuaci\u00f3n en el siguiente v\u00eddeo ver\u00e1s c\u00f3mo se describe una FSM Mealy con un estilo de tres procesos.<\/em><\/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=\"FSM Mealy con Verilog, estilo de dos procesos |  | UPV\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/7Ibvn8IJsI0?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><figcaption class=\"wp-element-caption\">Estilo de dos procesos<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Estados esp\u00fareos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En el ejemplo que acabamos de ver el sintetizador suele implementar dos flip-flops para almacenar el estado de la m\u00e1quina, sin embargo la m\u00e1quina solo dispone de tres estados normales, luego existir\u00e1 una combinaci\u00f3n de la variables de estados que constituir\u00e1 un estado esp\u00fareo. \u00bfQu\u00e9 hace el sintetizador con los estados esp\u00fareos?.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que se haga con ellos depender\u00e1 de la herramienta de s\u00edntesis que se utilice; afortunadamente la mayor\u00eda de ellas tienen como opci\u00f3n de s\u00edntesis el utilizar un criterio de coste m\u00ednimo: el circuito ser\u00e1 lo m\u00e1s r\u00e1pido y peque\u00f1o posible a costa de no importarle lo que le ocurra a la m\u00e1quina cuando entra en un estado esp\u00fareo; o un criterio de riesgo m\u00ednimo: el circuito no ser\u00e1 tan \u00f3ptimo en \u00e1rea y velocidad pero estar\u00e1 protegido ante la aparici\u00f3n de estados esp\u00fareos, es decir, lo har\u00e1 transitar&nbsp; r\u00e1pidamente a un estado normal&nbsp; de funcionamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo mi recomendaci\u00f3n personal ante este tipo de situaciones ser\u00eda que no confi\u00e1ramos en esas magnificas opciones del sintetizador (en la mayor\u00eda suelen aparecer) y que expl\u00edcitamente en nuestro c\u00f3digo procur\u00e1ramos la soluci\u00f3n con riesgo m\u00ednimo. \u00bfC\u00f3mo?. Pues sencillamente con la opci\u00f3n de&nbsp;<em>default<\/em>&nbsp;del case llevando el estado esp\u00fareo a un estado normal de funcionamiento.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modelo de bloques La funcionalidad del modelo Mealy&nbsp; podemos verla representada&nbsp; en la&nbsp;Ilustraci\u00f3n 4, destacando, a diferencia del modelo Moore, que el circuito combinacional de salida depende tanto del estado como de las entradas. Ilustraci\u00f3n 4. Modelo Mealy Modelo Verilog Como puede adivinarse, los procesos combinacional1 y secuencial2 son totalmente equivalentes al modelo Moore y tan solo el proceso combinacional3 debe reflejar su dependencia en la lista de sensibilidad a los cambios que puedan producirse en las entradas que l\u00f3gicamente son le\u00eddas en el interior de la descripci\u00f3n. As\u00ed de esta forma tendr\u00edamos lo siguiente: combinacional1:&nbsp;always @( entradas or estado_actual) proceso sensible a las entradas y al estado de la m\u00e1quina. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional que nos obtiene el pr\u00f3ximo estado de la m\u00e1quina Mealy. secuencial2:&nbsp;always @(posedge reloj or negedge reset_a) proceso que modelizar\u00e1 la l\u00f3gica secuencial. Se encargar\u00e1 de que en el flanco activo del reloj el estado de la m\u00e1quina pase a ser el valor que en ese momento tenga el pr\u00f3ximo estado. Tambi\u00e9n en este proceso se modelizar\u00e1 la acci\u00f3n del reset de la m\u00e1quina, sea as\u00edncrono o s\u00edncrono. combinacional3:&nbsp;always @(estado_actual, entradas) proceso sensible al estado de la m\u00e1quina y a las entradas. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional de las salidas. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Como hemos dicho anteriormente, una variante muy habitual es combinar los dos procesos combinacionales en uno solo, puesto que ambos comparten la misma lista de sensibilidad&nbsp; y en ambos es necesario recorrer de igual forma las diferentes transiciones que ocurren desde cada estado y ante cualquier combinaci\u00f3n de entradas, para determinar&nbsp; cual es el estado siguiente y la salida asociada a dicha transici\u00f3n. En el ejemplo seguiremos aplicando la variante de los tres procesos. Ejemplo &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El diagrama de estado correspondiente al detector de secuencias bajo un modelo Mealy es el representado en la&nbsp;Ilustraci\u00f3n 5&nbsp;y su correspondiente descripci\u00f3n Verilog la tenemos en&nbsp;Ejemplo 2. Ilustraci\u00f3n 5. Diagrama de estados Mealy module FSM_10 ( input RELOJ, input RESET_A, output logic SALIDA, input ENTRADA); parameter [2:0] Q1=3&#8217;h0, Q2=3&#8217;h3, Q3=3&#8217;h5 ; logic [2:0] ESTADO, ESTADO_PROX; always_ff @(posedge RELOJ or negedge RESET_A) if (!RESET_A) ESTADO &lt;= Q1; else ESTADO &lt;= ESTADO_PROX ; always_comb unique case (ESTADO) Q1 : if (!ENTRADA) ESTADO_PROX=Q2; Q2 : if (ENTRADA) ESTADO_PROX=Q3; Q3 : if (!ENTRADA) ESTADO_PROX=Q2; else ESTADO_PROX=Q1; endcase always_comb case (ESTADO) Q1 : SALIDA=1&#8217;b0; Q2 : SALIDA=1&#8217;b0; Q3 : if (!ENTRADA) SALIDA=1&#8217;b1; else SALIDA=1&#8217;b0; default: SALIDA=1&#8217;bx; endcase endmodule Ejemplo 2. Descripci\u00f3n Verilog del detector de secuencia Mealy. Realizando FSM Mealy con Verilog 1. Estilo de tres procesos A continuaci\u00f3n en el siguiente v\u00eddeo ver\u00e1s c\u00f3mo se describe una FSM Mealy con un estilo de tres procesos. 2. Estilo de dos procesos A continuaci\u00f3n en el siguiente v\u00eddeo ver\u00e1s c\u00f3mo se describe una FSM Mealy con un estilo de tres procesos. Estados esp\u00fareos En el ejemplo que acabamos de ver el sintetizador suele implementar dos flip-flops para almacenar el estado de la m\u00e1quina, sin embargo la m\u00e1quina solo dispone de tres estados normales, luego existir\u00e1 una combinaci\u00f3n de la variables de estados que constituir\u00e1 un estado esp\u00fareo. \u00bfQu\u00e9 hace el sintetizador con los estados esp\u00fareos?. Lo que se haga con ellos depender\u00e1 de la herramienta de s\u00edntesis que se utilice; afortunadamente la mayor\u00eda de ellas tienen como opci\u00f3n de s\u00edntesis el utilizar un criterio de coste m\u00ednimo: el circuito ser\u00e1 lo m\u00e1s r\u00e1pido y peque\u00f1o posible a costa de no importarle lo que le ocurra a la m\u00e1quina cuando entra en un estado esp\u00fareo; o un criterio de riesgo m\u00ednimo: el circuito no ser\u00e1 tan \u00f3ptimo en \u00e1rea y velocidad pero estar\u00e1 protegido ante la aparici\u00f3n de estados esp\u00fareos, es decir, lo har\u00e1 transitar&nbsp; r\u00e1pidamente a un estado normal&nbsp; de funcionamiento. Sin embargo mi recomendaci\u00f3n personal ante este tipo de situaciones ser\u00eda que no confi\u00e1ramos en esas magnificas opciones del sintetizador (en la mayor\u00eda suelen aparecer) y que expl\u00edcitamente en nuestro c\u00f3digo procur\u00e1ramos la soluci\u00f3n con riesgo m\u00ednimo. \u00bfC\u00f3mo?. Pues sencillamente con la opci\u00f3n de&nbsp;default&nbsp;del case llevando el estado esp\u00fareo a un estado normal de funcionamiento.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":628,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-646","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\/646","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=646"}],"version-history":[{"count":13,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/646\/revisions"}],"predecessor-version":[{"id":1851,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/646\/revisions\/1851"}],"up":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/628"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}