A partir de esta semana vamos a ver unos nuevos tipos de circuitos, los circuitos secuenciales que requieren de unas técnicas de diseño a bajo nivel distintas de las vistas hasta ahora. Antes de ver que es un circuito secuencial, veamos algunas de las limitaciones de los circuitos combinacionales que hemos estudiado hasta ahora. Los circuitos combinacionales no nos permiten por ejemplo realizar una serie de acciones en el tiempo de una manera autónoma, como por ejemplo encender una luz verde, a continuación abrir la puerta del parking, esperar dos minutos y si no se ha desactivado el sistema de seguridad poner en marcha una alarma sonora por ejemplo. De la misma manera no podemos construir un circuito que detecte por ejemplo si una persona ha pulsado las teclas 1 5 5 7 en un teclado y abrir la puerta si lo ha hecho correctamente. ¿Por qué? Porque cuando el usuario pulse el 5, el circuito ya no recordará, no tiene posibilidad de recordar que previamente había pulsado un 1. O cosas aparentemente tan sencillas, como me esta llegando una secuencia de 0s y 1s, quiero que cuando me llegue un 1 0 0 0, por ejemplo me avises o incluso cosas también como simplemente avísame cada 10 segundos, avísame cada un determinado intervalo de tiempo. Para poder realizar estas tareas necesitamos un nuevo tipo de circuitos que son los circuitos secuenciales. Básicamente los circuitos secuenciales son circuitos que pueden recordar cosas, este es el punto clave de los circuitos secuenciales. Si queremos detectar que el usuario ha pulsado por ejemplo el código 1 5 5 7 que decíamos antes, necesitamos que cuando le llegue el 7 al circuito, este sea capaz de recordar que previamente el usuario había pulsado un 5 y antes un 5 y antes un 1. En los circuitos combinacionales decíamos que las salidas en un instante de tiempo t dependen de las entradas en el mismo instante de tiempo t. Aquí las salidas nos van a depender de las entradas en los instantes de tiempo anteriores, sin especificar cuantos. Por ejemplo, si queremos detectar la secuencia 0 1 1 0 y generar un 1 en el instante de tiempo t en que detecto que me ha llegado esta secuencia, para poder hacerlo he de poder recordar que en el instante de tiempo t me ha llegado un 0 pero en t-1 me ha llegado un 1, en t-2 me ha llegado otro 1 y en t-3 me ha llegado un 0. O situaciones en las que se le pedirá al circuito que genere una cierta secuencia independientemente de las entradas sin entradas que me genere por ejemplo, la secuencia 0 1 1 0 1. En t, en el instante de tiempo t, que me devuelva un 0, en t+1 que me devuelva un 1, en t+2 que me devuelva un 1, etc. Aquí el circuito, para saber en t+3 que ha de devolver un 0 necesita recordar que previamente ha generado un 1 y antes otro 1 y antes un 0. ¿Cómo podemos hacer esto? Pues lo que vamos a hacer es partir de un circuito combinacional como los que ya conocemos y le vamos a poner una especie de prótesis, le vamos a añadir un bloque de memoria conectado de este modo, de forma que las salidas "y" dependerán en cada instante de tiempo de las entradas y además del valor que tengamos guardado en la memoria. A su vez el propio circuito secuencial podrá modificar el contenido de la memoria lanzando el nuevo valor por las salidas q_0, q_(m-1). El problema ahora de reconocer la secuencia 1 5 5 7 que decíamos antes, se podría resolver de la siguiente manera: Llega un 1 en el instante de tiempo t, el circuito combinacional mira el valor que tiene almacenado en memoria, que en principio no lo conocemos pero es irrelevante, ve que la secuencia que le ha llegado no es el 1 5 5 cinco cinco, y el responde con un 0 en el instante de tiempo t. Pero además se guarda en memoria un código binario que nosotros vamos a llamar por ejemplo c1, indicando que ya le ha llegado un 1. En el siguiente instante de tiempo el usuario pulsa el 5, le llega un 5 al circuito y el circuito dice ... me está llegando un 5 en este instante de tiempo y por el contenido de memoria sé que anteriormente me había llegado un 1. Bueno, todavía no he detectado la secuencia, devuelvo un 0 pero voy a cambiar el contenido de la memoria y voy a poner un código, por ejemplo c15, que me estará indicando que ya han llegado un 1 y un 5 por las entradas. Lo mismo en t=2, le llega el siguiente 5, el circuito interpreta "me está llegando un 5 y anteriormente me había llegado un 1 5, por lo tanto voy bien, pero todavía no he reconocido la secuencia completa". Devuelvo un 0 por las salidas y me apunto en la memoria que me ha llegado ya un 1 5 5. Todo esto, insisto son códigos binarios, 0s y 1s, unos, que aquí los llamemos de esta manera es simplemente para hacerlo más entendible. Finalmente en t=3, si me llega un 7 el circuito combinacional dice "me está llegando un 7", la memoria me dice que antes me había llegado un 1 5 5, por lo tanto acabo de detectar la secuencia correcta y lanzo un 1 para abrir la puerta o para ejecutar la acción que se tenga que ejecutar, ¿entendido? Bueno todo esto lo iremos refinando más adelante, por supuesto, pero ahora quedémonos con un concepto muy importante: Al valor almacenado en el bloque de memoria y que estamos viendo por las salidas q se le da el nombre del ESTADO del circuito secuencial. Ahora ya estamos en condiciones de definir un poco mejor lo que es un circuito secuencial. Un circuito secuencial es un circuito formado por un bloque combinacional más un bloque de memoria. El estado de la memoria, el contenido de la memoria recibe el nombre de ESTADO ACTUAL. Por contra el nuevo valor que el circuito combinacional quiere guardar sobre la memoria recibe el nombre de ESTADO SIGUIENTE. Y las entradas y salidas del circuito reciben el nombre de ENTRADAS y SALIDAS EXTERNAS. El circuito secuencial, en función de las entradas en un instante de tiempo t y de la historia pasada que viene guardada, empaquetada en el estado actual, calcula unas salidas externas y genera un código que se guarda en memoria y que hemos llamado estado siguiente. Nos queda sin embargo una cuestión por aclarar. ¿A qué nos referimos cuando hablamos de t, t-1, t-2, etc? ¿Qué significan realmente los instantes de tiempo? Significa -1, el instante t menos un segundo,... o menos un minuto, ... exactamente ¿qué significa t-1? En los circuitos secuenciales síncronos que son con los que vamos a trabajar, los instantes de tiempo los define una señal cuadrada como esta, que recibe el nombre SEÑAL DE RELOJ, o simplemente RELOJ. Los elementos que forman la memoria del circuito secuencial, están diseñados de manera que sólo son capaces de cambiar de valor, es decir, sólo son capaces de almacenar un nuevo estado cuando la señal de reloj pasa de 0 a 1, es decir, en estos instantes de tiempo. Estos instantes de tiempo en que la señal está cambiando de 0 a 1 se les llama los FLANCOS POSITIVOS DE RELOJ, o simplemente flancos de reloj. Si suponemos que éste es el instante t, el instante t-1 es el instante en el cual llegó el anterior flanco de reloj, el instante t-2 es este, el instante t+1 es este, etc. El ciclo de la señal de reloj es la unidad de tiempo de los circuitos secuenciales. Aquí vemos representados algunos de los parámetros y conceptos con los que trabajaremos habitualmente. Vale la pena que nos familiaricemos con ellos. En primer lugar está el concepto de flancos de reloj que hemos definido como el instante de tiempo en el cual la señal de reloj pasa de 0 a 1, estos son los flancos, reciben el nombre de, hemos dicho, "flancos positivos", "flancos de subida" o simplemente "flancos" de la señal de reloj. Por otro lado la señal de reloj está compuesta por infinidad de ciclos de reloj que se repiten continuamente. A la duración del ciclo de reloj se le llama PERIODO y se mide en unidades de tiempo, en microsegundos, nanosegundos, segundos, etc. La inversa del periodo es la FRECUENCIA de la señal de reloj y se mide en hertzios o en sus múltiplos o sub múltiplos. Finalmente decir que los intervalos de tiempo en los cuales la señal de reloj permanece a 1 reciben el nombre de PULSOS POSITIVOS y los intervalos de tiempo en los cuales la señal de reloj está a 0, reciben el nombre de PULSOS NEGATIVOS. Aquí tenéis por si acaso como recordatorio los múltiplos y sub múltiplos de las unidades de frecuencia y de las unidades de tiempo. Os dejo un pequeño quiz y continuamos con prácticamente la última transparencia. Y ya para finalizar aquí podéis ver el circuito secuencial al completo: Un circuito secuencial formado por un bloque combinacional y por la memoria. La memoria almacena el estado actual y el circuito combinacional genera los valores del estado siguiente que se cargan a continuación en el siguiente flanco de reloj en la memoria y las entradas y salidas externas. Sincronizando el funcionamiento del circuito secuencial y permitiendo por tanto los cambios de estado, tenemos una señal de reloj o señal CK, que es como la veremos representada más habitualmente. Como resumen de esta lección, corta pero muy importante para entender los circuitos secuenciales, hemos visto la necesidad de otros tipos de circuitos además de los combinacionales. Hemos definido lo que es un circuito secuencial y hemos definido, hemos introducido dos conceptos muy importantes: El concepto de estado de un circuito como el contenido de la memoria, es decir, el estado del circuito es la información que tenemos en la memoria y el concepto de sincronización. La existencia de una señal de reloj que define exactamente en qué momentos podemos cambiar la información de la memoria, es decir, que define exactamente los momentos en los cuales se van a producir cambios de estado.