[MÚSICA] Hola, seguimos ahora con 8.02 Máquina de Moore. A ver, vamos a partir con un ejemplo. Diseñemos un circuito que va a tener estas especificaciones, tiene que tener una entrada w y una salida z, muy simple. Vamos a suponer que los cambios en la salida ocurren durante el flanco positivo del reloj. Que la salida z va a valer 1, si durante 2 ciclos anteriores o precedente la entrada w es 1 y en cualquier otro caso la salida z va a ser igual a 0. Entonces tiene que haber 2 entradas w 1, para que en el ciclo siguiente la salida sea 0. Y a partir de esas especificaciones podemos inferir algunas cosas. La salida z no depende solamente de w, depende de algo más, depende del estado anterior porque tiene que haber, tiene que llevar registro de alguna forma a ver si la entrada fue 1 o no. Entonces tiene algo de memoria, tiene estados, tiene memoria. Bien, podemos comprobarlo con una secuencia de entrada y salida. Aquí estamos con la entrada w y la salida z. Si estamos mirando 0, 1, 0, 1. Aquí hay un 1 y aquí hay otro 1 seguido, por lo tanto mi siguiente salida va a ser un 1. Aquí aparece un 0, así que la salida es 0. Aquí hay 1 seguidos, por lo tanto mi salida es 1. Aquí hay dos 1 seguidos, por lo tanto mi salida es un 1 y eso solo de ejemplo. Bien, pues tratemos de hacer este circuito. Entonces vamos a partir de este diagrama de estados. Y vamos a responder un par de preguntas básicas. ¿Cuántos estados tiene esta máquina de estados finito? Y, ¿qué transiciones de estado son posibles? Y eso, eso son las preguntas que vamos a responder para armar nuestro diagrama de estado. No existe un único procedimiento para crear un diagrama de estado, pero es mucho más fácil si elegimos un estado inicial por ejemplo, el estado en el que entramos cuando hay un reset, cuando parte el circuito entramos en el estado y este estado le vamos a llamar estado A. Perfecto, ahí está lo denominamos estado A. Luego existe un estado B y en este estado B la entrada you fue 1 una vez, ese es el estado B. Y el estado C significa que la entrada you fue 1 dos veces seguidas. Entonces en ese caso, pasamos al estado C. Y este concepto el que estamos usando hoy día en esta clase que se llama Máquina de Moore, existen dos tipos esencialmente de máquinas secuenciales las de Moore y las de Mealy, en esta clase estamos aprendiendo las de Moore. En una Máquina de Moore cada estado tiene asociado un valor para la salida. Entonces si es que miramos este diagrama de estado, este diagrama posee nodos, estos de aquí son los nodos. Este diagrama posee transiciones que son estos arcos entre nodos. Y en una Máquina de Moore, nosotros escribimos para cada estado ponemos un nodo, entonces este estado A está en un nodo, este estado B está en un nodo y este estado C está en un nodo. Y como la Máquina de Moore cada estado tiene asociado un valor para la salida, lo que nosotros hacemos es escribir aquí la salida dentro del nodo, porque el estado tiene asociada una salida. Perfecto, entonces lo que queremos hacer como decíamos antes es este circuito, este circuito lo vamos a crear con esta Máquina de Moore. A ver, ¿qué anotamos en las transiciones? En las transiciones vamos a estar anotando qué condición me lleva de un nodo a otro o qué condición me lleva de un nodo a sí mismo. Y eso lo vamos a entender a continuación. ¿Cuál es la idea entonces? Aquí Nosotros describimos el estado con un nombre de estado, aquí le llamamos estado A, B y C. Y eso lo ponemos en los nodos y en los arcos indicamos las entradas necesarias para movernos de estado. Por ejemplo el estado A significa que no ha habido ninguna entrada anterior igual a 1. El estado B significa que you hubo una entrada igual a 1, porque cuando la B es 1 yo estoy en A me muevo a B. El estado C significa que you hubo otra entrada igual a 1. Por lo tanto, en el estado C you hubo 2 entradas igual a 1, por lo tanto la salida para el estado C tiene que ser z igual 1, en todos los demás casos z igual 0. Perfecto, entonces yo puedo en este diagrama de estados escribir los estados a los cuales le pongo un nombre A, B y C. Las salidas correspondiente a los estados y puedo escribir mediante arcos las transiciones y junto a cada arco yo pongo la condición de entradas que me lleva a ese arco. Por ejemplo, si estoy en el estado C en que you habido 1s seguido y estoy sacando la salida z y mi entrada es 0, entonces yo me voy a mover al estado A porque tengo que esperar 2 entradas seguidas nuevas. Excelente, entonces también podemos escribir una tabla de estados. La tabla de estados tiene que ver con el diagrama de estados también. Un diagrama de estados describe el comportamiento del circuito secuencial y para implementar el circuito conviene poner estos estados en una tabla. Entonces la tabla me indica todas las transiciones desde cada estado actual o presente hasta el estado siguiente. Y en este caso, ponemos estado actual A, estado actual B, estado actual C. Aquí están los 3 estados y ponemos el siguiente estado. ¿Cuál va a ser? Si es que estoy en A y la entrada es 0, sigo en A. Si es que estoy en A y mi entrada es 1, paso a B. Y además me indica la salida porque recuerden que en una Máquina de Moore cada estado tiene asociado un valor para la salida. Por lo tanto, yo puedo escribir aquí entrada A tiene asociado un valor de salida 0, entrada B tiene asociado un valor de salida 0 y entrada C tiene asociado un valor de salida 1. Perfecto, entonces la tabla de estados es una representación distinta para el diagrama de estados, es una tabla ¿cierto? Y la señal de reset me va a llevar a mi estado inicial. Bien, entonces mi estado es muy bonito el estado A, que significa que no ha habido ninguna entrada anterior con 0. El estado B, significa que con 1 perdón. El estado B significa que mi entrada anterior fue un 1 y mi estado C me dice que hubo 2 entradas anteriores en 1. Pero eso es un nombre muy largo, por eso le pongo entrada A, B y C. Pero yo eventualmente voy a tener que llevar estos nombres alfa numéricos A, B y C a una representación binaria, porque un circuito no entiende A, B y Cs. Entonces eso es lo que denominamos asignación de estado. Asignación de estado significa pasar de nombres arbitrarios de variable a una combinación de bits para cada uno de esos estados. Quise decir de ese nombre arbitrario de estados a una combinación de bits que describa esto. Entonces como dijimos antes, cada estado está representado por una combinación de valores de las variables de estado y esas variables de estado son los bits finalmente. Entonces si yo tengo 3 estados, con un bit yo puedo representar hasta 2 elevado a 1 estado, o sea, puedo representar 2 estados. Con 2 bits puedo representar hasta 2 elevado a 2 estados hasta 4 estados. Entonces necesito al menos o necesito más bien 2 bits para representar 3 estados distintos. Esos 2 bits le vamos a llamar y 1, y 2 y esos son nuestras variables de estado. Y nuestras variables de estado van a codificarnos de alguna forma el estado A, el estado B y el estado C. Entonces A va a significar por ejemplo que el y 1 es un cierto valor y el y 2 es un cierto valor. B va a significar que y 1 otro cierto valor, y 2 es otro cierto valor, etcétera. Entonces de esa forma nosotros podemos codificar el nombre del estado con nuestras 2 variables de estado. Y las variables de estado hay que registrarlas y hay que guardarlas porque al ir avanzando en la operación del circuito hay que recordar que valores tenían antes. Entonces eso los guardamos en flip-flops. Entonces estos flip-flops que están aquí son nuestras variables de estado, son los que guardan las variables de estado. Aquí está y 1, está la salida y 1. Ésta de aquí es la salida y 2 que son los estados actuales y los estados siguientes que son los que van a venir después son las entradas de mi flip-flops, lo cual es un poco divertido porque el estado siguiente viene en la entrada y el estado actual está en la salida. Puede resultar tal vez un poco contra intuitivo. Muy bien, entonces como dijimos antes 2 flip-flops nos alcanzan para representar hasta 4 estados distintos. El siguiente estado es función combinacional del estado presente. Este es mi estado presente en estado actual y la entrada W. Entonces estas tres cosas, estas dos cosas perdón, mi estado actual y mi entrada W entran en este bloque combinacional y generan mi estado siguiente y mi salida Z va a ser también una función combinacional de el estado y eso es lo que dice esa viñeta que está aquí. ¿Cómo asignamos los estados? Esa era pregunta que teníamos acá. porque dijimos que iba a haber dos variables de estado para definir o describir nuestros tres estados, pero cómo decimos que combinación Y1 e Y2 va a corresponder a la A, que combinación Y1 e Y2 va corresponder a la B y que combinación Y1 e Y2 va a corresponder a la C. Eso es lo que tratamos de respondernos con esta lámina. Entonces esta lámina aquí, el estado A estamos asignándole el valor 00 y al estado B le estamos asignándole valor de la variable de estado 01 y al estado C le estamos asignando los valores de variable de estado 10 y después tenemos otras posibilidades de valores de variable de estado que es 11 que nunca se da, porque en nuestro diagrama de estado tenemos solo tres, no cuatro estados. Por lo tanto como esto nunca se da, [INAUDIBLE] estas filas como no existieran. Muy bien. Esta tabla de verdad, es implementado usando circuitos combinacionales, que son los que nos permiten crear, aquí tenemos estado actual, aquí tenemos estado siguiente, entonces nosotros a partir del estado actual y mi entrada, tengo mi estado siguiente. Esto de aquí es un circuito combinacional, pero se puede implementar con un circuito combinacional, porque yo tengo mi estado actual y mi entrada y con esto genero mi estado siguiente. Claro, es una tabla de verdad, fíjate. Es una tabla de verdad que genera mi estado siguiente. Entonces aquí tenemos tablas de verdad y mapas de Karnaugh, para generar estados siguientes Y1 e Y2 y eso los podemos generar, ustedes you saben cómo, usando mapas de Karnaugh. Y tenemos otro mapa de Karnaugh, que es trivial, que es para generar la salida Z. En este caso la salida Z es simplemente Y2 y así aprovechamos los don't cares nos da trivial y podemos generar Y1 y podemos generar Y2. Generalmente usamos para este tipo de máquinas, para las máquinas secuenciales que estamos diseñando en esta forma a través de estados, usamos flip-flop D son las formas más directa de generar nuestro circuito. Por lo tanto vamos a utilizar flip-flop D, hacemos los mapas de y luego llegamos al circuito. Aquí está el circuito, el circuito tiene aquí estos dos flip-flops que guardan mis estados, tenemos estado actual, tenemos estado siguiente, estado siguiente es una combinación o más bien una función combinacional de mi estado actual y mi entrada. A través de circuitos combinacionales que obtuvimos de estos mapas de Karnaugh. que a su vez son los que salieron de esta tabla, porque esto al final es una tabla de verdad que me dice cómo es el estado siguiente a partir del estado actual. Y la salida como habíamos visto, es simplemente Y2, pero en términos más generales, la salida puede ser también un circuito combinacional, a partir de Y1 e Y2. Y aquí tenemos el diagrama de tiempo. El diagrama de tiempo nos muestra nuestro reloj aquí, nos muestra nuestros flancos de subida, entonces aquí son los flancos de subida, aquí nos muestra la entrada W nos muestra el estado actual y nos muestra la salida Z y vemos que cuando los flip-flops son gatillados por estos flancos de subida, vemos que cuando hay un flanco de subida, puede haber un cambio en un estado. Cierto, aquí hay un W, por lo tanto pasamos a este estado y aquí W bajo a 0, por lo tanto bajamos a ese estado, aquí hay dos W seguidos, por lo tanto pasamos a un estado, luego a otro estado y ahí aparece nuestra salida Z, muy bien. Vemos aquí un poquito distinto respecto a este diagrama de tiempo que habíamos mirado aquí, porque en realidad Z va a aparecer concurrente con el segundo período en el que aparece mi entrada uno o ¿no? No, está bien, está bien está perfecto, estaba perfecto como estaba, aquí hay dos entradas uno, una entrada uno y otra entrada uno. Aquí se activa el Y1, aquí se activa el Y2 y al activarse el Y2, aparece mi salida, entonces mi salida ocurre al ciclo después de haber recibido dos entradas igual a 1 y eso es en virtud de la máquina de Moore, porque la máquina de Moore, vamos a ver después tiene esta característica. Tenemos un pequeño retardo de señal W, ese pequeño retardo que hay aquí y ese pequeño retardo es producto de la lógica combinacional y nos va a beneficiar porque va a ayudar a respetar tiempos de setup y hold. Okey. Este es el resumen de los pasos de diseño. El primer paso es determinar las especificaciones deseadas del circuito. Después determinamos los estados de la máquina de los estados finitos y elaboramos este diagrama de estados, entonces vamos a ver cuántos estados necesitamos, podemos elaborar la tabla de estados, entre estos dos es prácticamente lo mismo, son distintas representaciones de lo mismo, pero primero elaboramos el diagrama de estados y luego de eso pasamos a la tabla de estado y en la tabla de estado podemos ver super fácilmente las tablas de verdad que generan el estado siguiente a partir del estado actual, luego revisamos y minimizamos el número de estado según algun procedimiento de minimización. Hacemos este procedimiento de asignación de estado, you vamos a ver más adelante ese procedimiento de minimización, luego determinamos el número de variables de estado necesarias para representar todos los estados y hacemos esta asignación de estado, después elegimos el tipo de flip-flops, el default es flip-flop tipo D porque es el más conveniente en general, porque es más directo y luego determinamos las expresiones combinacionales para el próximo estado y las salidas y finalmente hacemos la implementación del circuito. Muy bien. Hoy día aprendimos máquinas de Moore, aprendimos los pasos en general de diseño de un circuito secuencial, usando diagramas de estado, usando tablas de estado que se derivan del diagrama de estado y haciendo la síntesis del circuito secuencial y todo esto a través de un ejemplo. Gracias por ver esta clase. [AUDIO_EN_BLANCO]