[MÚSICA] Hola, continuamos con la siguiente video-lección, Máquina de Moore. Entonces you habíamos hablado de máquinas de estado finito y ahora vamos a irnos directo a cómo diseñar una máquina de Moore. Vamos a hacerlo con un ejemplo, vamos a diseñar un circuito que va a tener estas especificaciones. Queremos que el circuito tenga una entrada w, aquí está y una salida z. Los cambios en la salida del circuito es z van a ocurrir durante el flanco positivo del reloj, eso you inmediatamente nos da una idea, bueno si ocurre un flanco positivo del reloj, seguramente vamos a usar Flip-Flops. que tienen sensibilidad flanco positivo. La salida z y aquí vienen las especificaciones de como es las salidas, la salida z es 1 si durante dos ciclos precedentes anteriores del reloj, la entrada w fue 1. En cualquier otro caso, la salida a z va a ser igual a 0. Entonces esto requiere conocer la historia de las entradas, porque solamente cuando hay dos entradas 1, mi salida al ciclo siguiente va a ser 1. Entonces a partir de estas especificaciones inferimos que la salida no depende solamente de w de la entrada, sino que en realidad depende del estado anterior, es decir el circuito es secuencial y tiene estado tiene memoria y podemos comprobarlo con esta secuencia, entonces en esta secuencia mostramos, esta no es una tabla de verdad, esta es una secuencia mostrada en una tabla, muestra la entrada y muestra la salida y fíjense que cuando hay dos entradas seguidas, recién ahí el siguiente estado vale 1. Y dos entradas seguidas y ahí el siguiente estado vale, perdón la siguiente salida. Aquí hay dos entradas seguidas nuevamente, la siguiente salida vale 1. Cualquier otro caso, la salida vale 0. Entonces eso es el circuito que queremos diseñar, ¿cómo lo diseñamos? Bueno, tenemos que hacer un diagrama de estados. Ese diagrama de estados responde a dos preguntas, Martin, la elaboración debe responder primero a dos preguntas. ¿Cuántos estados tiene esta máquina de estados finitos? Esa es la primera pregunta y la segunda pregunta es, ¿qué transiciones entre estados son posibles? Y eso nos permite hacer este diagrama de estados que está aquí, que es un diagrama de estados muy genérico y que lo que nos muestra es los estados y las transiciones. No hay un procedimiento único pero es más facil si uno parte con un estado inicial, por ejemplo podemos partir con el estado de reset, siempre es un buen momento, es decir cuando yo reseteo el circuito. Cuando establezco todos los Flip-Flops es cero, ahí voy a aparecer en estado inicial y ese estado inicial le puedo llamar un nombre A, estado A perfecto. Entonces parto con el estado A, en el estado A estado inicial, la salida va a ser 0. Entonces yo puedo anotar allí. Estado A slash salida 0 perfecto. Después está el estado B, que indica que la entrada you fue 1 una vez, este es el estado B, la salida sigue siendo 0, pero yo solamente puedo moverme al estado B, si es que la entrada fue 1. Entonces lo que me indican estas flechas, es como yo me muevo entre estados en función de las entradas. Si yo estoy en el estado A, en que ninguna entrada nunca había sido 1 y la entrada sigue siendo 0, yo vuelvo al estado A. En cambio si estoy en el estado A y la entrada vale 1, mi estado siguiente va a ser el estado B, perfecto. Y hay un tercer estado C, que indica que la entrada you fue 1, dos veces seguidas, entonces este es mi estado C, en este estado C, yo solo paso al estado C, si mi entrada fue 1 una segunda vez. Si que yo estoy en el estado B que you mi entrada fue 1 y mi entrada siguiente es 0, you deje de contar 1s y tengo que volver al estado inicial, al estado A. Entonces de esta forma, uno puede hacer diagramas de estados, en forma super, super, sistemática. [TOS] En este, bueno you lo expliqué de alguna forma, pero vamos a verlo ahora con cierta formalidad. Existen en un diagrama de estados estos nodos, que son estos círculos, que son los que definen el estado, cada nodo corresponde a un estado. Están las transiciones entre estados que son estas flechas, yo les llame flechas, el nombre correcto es arcos. Estos arcos tienen, muestran las transiciones, entonces en nuestro ejemplo tenemos 3 estados A, B y C y tenemos un montón de transiciones entre estados. Cada estado en el circuito digital, está representado por variables de estados, entonces yo digo este es mi estado A, yo a mi A le puedo asignar un número digital y ese número digital binario, va a ser mi variable de estado para el estado A, lo mismo para el estado B, lo mismo para el estado C. En un nodo, aquí esta mi nodo, indicamos el nombre del estado y su salida también. recuerden que estamos hablando de máquina de Moore. En la máquina de Moore, el estado tiene asociado una salida, entonces nosotros dentro del círculo, dentro del nodo, del estado ponemos el nombre del estado y ponemos también cuanto es la salida. Esa salida puede ser del número de bits que queramos, no tienen que ser de un solo bits y en un arco, nosotros indicamos que entradas son necesarias para movernos entre estados y puede ser que nos movamos entre estados y puede ser que volvamos al mismo estado, por ejemplo en este caso si estamos en C y la entrada es 1, volvemos al estado C. Entonces ahí hacemos una tabla de estados. Un diagrama de estado, nos describe el comportamiento de este circuito secuencial, con este diagrama de estado nosotros you sabemos cómo se va a comportar y para implementar el circuito, igual es bueno tener esta tabla de estados, entonces en esta tabla de estados, indicamos todas las transiciones desde cada estado actual, hasta el estado siguiente o siguiente estado, según diferentes entradas. Entonces en este caso, tenemos el estado actual A, estado actual B, estado actual C. Si mi entrada es w igual 0 y estoy en estado A, voy a seguir en el estado A. Si w igual 1, voy a pasar al estado B. Entonces de esta forma, hacemos nuestra tabla de estados. En caso de la máquina de Moore, vimos además que el estado tiene asociado una salida, por lo tanto en esta misma tabla podemos decir, cuando mi estado es A, mi salida es 0. Cuando mi estado es B, mi salida es 0 y cuando mi estado es C, mi salida es 1. El estado C indica que you hubo antes dos 1s seguidos. Y la señal de reset, va a definir mi estado inicial, entonces nosotros entramos en el primer estado. ¿Cómo asignamos los estados ahora? Porque yo les puse nombres A, B y C. Podrían haber sido nombres de ningún, ninguna entrada anterior es 1, una entrada anterior es 1, dos entradas anteriores es 1. Pero esos son nombres muy largos, entonces mejor ponemos los nombres cortos, pero ahora tenemos que llevar esos a lenguaje digital. ¿Cómo llevamos eso a lenguaje digital? Eso es lo que se llama la asignación de estados. Entonces en estos estados, en esta tabla de estados definimos tres estados A, B y C y cada estado está representado por una combinación de valores de estas variables de estados. [TOS] ¿Cuántas variables de estado necesitamos.? O, ¿cuántos bits de variables de estados necesitamos, para representar tres estados? Bueno lo haremos en base 2, de 3, menor que 2, por lo tanto estamos con 2. Si tenemos 2 bits, podemos representar hasta 2 elevado a 2, 4 estados, por lo tanto con 2 bits nos alcanza para representar los estados A, B y C. Entonces eso 2 bits, que son nuestras variables de estado, les vamos a llamar y1 e y2. Podemos llamarles como queramos, pero eso son 2 bits. Y vamos a almacenar esos 2 bits en Flip-Flops, entonces you empezamos a tener una idea de como va nuestro diagrama del circuito. Aquí hay un Flip-Flop para y1, cierto nosotros no estamos dibujando todos los detalles, pero ustedes saben que esto es D, tiene Q y Q negado, Q negado no está representado aquí y esto es para y1 y tenemos otra para y2. Entonces esto que está aca, guarda nuestro estado. El siguiente estado, es el estado al que yo voy a moverme después del estado actual, que es el estado presente, estado actual o estado presente, entonces el siguiente estado es función combinacional del estado presente y de la entrada w. Entonces yo voy hacer un circuito combinacional, que toma como entrada mi w, mi entrada y toma como entrada también, el estado actual. De esa forma yo creo el estado siguiente, entonces este es el estado siguiente y este es el estado actual o estado presente. Es un poco divertido, porque el estado siguiente está siguiéndole esto de izquierda a derecha y el estado siguiente está a la izquierda, está antes del estado actual. Pero es porque asi es que funcionan los Flip-Flops, mi entrada que está a la izquierda, es lo que yo voy a presentar en el siguiente ciclo del reloj. En este circuito como es una máquina de Moore, la salida z depende únicamente del estado presente, no depende. Desde la entrada y puede ser representado generado como un circuito combinacional, entonces, este circuito combinacional me va a generar Z. Bien, pues. Entonces, aquí tenemos esta tabla de verdad, donde hemos asignado, le pusimos nombre al estado, A, B, C y le asignamos valores a cada uno de esos estados, entonces, el estado siguiente en función del estado actual o presente y la entrada, y la salida en función del estado presente. Esta tabla de verdad, esta puede ser implementada con circuitos combinacionales, ¿cierto? Aquí nosotros vemos que aquí si la entrada es cero, pasamos acá, entonces ahí you tenemos inmediatamente circuito combinacional, una parte del circuito combinacional que genera mi estado siguiente. Si estoy en B y mi entrada es uno, voy a moverme a C, ¿cierto? Aquí nos movimos a C. Esto es A, esto es B, esto es C, y nos vamos moviendo entre estados y la salida va asociada al estado. ¿Qué pasa con este último estado? Aquí pusimos un estado uno, uno, ese estado uno, uno, no existe, yo no le tengo un nombre al estado uno, uno. No hay un estado D. Entonces, es un estado de don't care. Si llego al estado uno, uno, por alguna razón, ¿cuál va a ser el siguiente estado? Me da lo mismo, realmente, porque yo espero nunca llegar al estado uno, uno, y mi salida da lo mismo porque yo espero nunca estar en el estado uno, uno. Ahora, ¿cómo le pusimos, por qué decimos cero, cero, para el estado A, cero, cero, para el estado B, podíamos haber elegido uno, uno, para el estado B, podríamos haberlo hecho, por qué no lo hicimos? you veremos. you veremos por qué. you veremos cómo asignar los estados. Entonces, nosotros luego podemos elegir los flip flops y derivar el siguiente estado y la salida. Entonces, aquí tenemos Y1 que es la que, si no fijamos en la anotación, las mayúsculas son el siguiente estado, y las minúsculas son el estado actual. Entonces, aquí vemos que Y1 va a ser el estado siguiente, que va a ser función de mi entrada y mi estado actual. Podemos hacer fácilmente un mapa de Karnaugh, podemos hacer una tabla de verdad, que you la hicimos, podemos describir esto también en [INCOMPRENSIBLE], también hacemos un mapa de Karnaugh para Y2, y podemos hacer un mapa de Karnaugh para Z. Entonces, este mapa y este mapa, nos va a servir para implementar este circuito. En cambio, este mapa que está acá, que es para la salida, nos va a servir para implementar este circuito. Entonces, you vemos que empezamos a armar un circuito combinacional. Si ignoramos los don't cares, esto serían nuestras expresiones, si aprovechamos los don't cares, llegamos a estas otras expresiones. Al elegir flip flops D, ¿qué pasa? Asignamos estados siguientes en forma directa, o sea, no tenemos que crear lógica adicional para decir cuál es mi estado siguiente, el flip flop D, su salida es igual a la entrada, entonces, asignamos estado en forma directa. Es mucho menos intuitivo usar otro flip flops para este tipo de máquina de estado finito, aprovechamos mapas de Karnaugh, y aprovechamos los don't cares en el mapa de Karnaugh. Entonces, finalmente llegamos a este circuito, en este circuito esta es la máquina combinacional que habíamos mostrado antes para obtener el estado siguiente que es Y2 y Y1, y esto que está acá, la salida, vimos que no hay máquina secuencial, que no hay máquina combinacional, la salida es directamente Y2. En este caso, Y2 nos entrega el bit de salida y ese es un diseño, un diseño sencillo, no es único, podríamos haber hecho algo distinto, entonces, es un diseño que resuelve el problema. Podemos hacer también un diagrama de tiempo. Podemos notar que los flip flops, en este caso, son gatillados por flancos de subida. Entonces, vamos a mirar los flancos de subida de los reloj, y vamos a ver que ahí ocurren cosas. Solo en flanco de subida yo voy a tener que hay cambios en mi estado o en mi salida. Aquí por ejemplo, este cambio de subida, produjo que Y2 cambiara, y cuando Y2 cambia la salida cambia consecuentemente. La entrada puede ser síncrona o asíncrona, en este caso, la entrada está entrando un poquito después del reloj, pero perfectamente podría haber sido asíncrona. Si se fijan, hay un pequeño retardo en la señal W, que es un producto de la lógica combinacional, y nos va a beneficiar porque nos ayuda eventualmente a respetar tiempos de hold del flip flop. Bien, pues, ¿cuáles son entonces los pasos? [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO]