unary‐ii‐wait - Obijuan/Icestudio-Digital GitHub Wiki
Circuito 042-unary-ii-wait
⬅️ Prev | Navegar por los circuitos | Next ➡️ |
---|
Contenido
- Ficha: Contador unario de 2 marcas con espera en I
- Descargas
- Descripción
- Barra de progreso
- Ruta de datos y control
- Evolución del estado
- Concepto de reset
- Diagrama de estado
- Cronograma
- Medición con el analizador lógico
- Recursos
- Conceptos nuevos
- Importancia del circuito
- Enlaces
- Autor
- Licencia
Ficha: Contador unario de 2 marcas con espera en I
- Circuito Icestudio: Caso de estudio: unary-ii-wait.ice
- Ficha circuito: (SVG) (PDF) (PNG)
Descripción
Este circuito es un contador unario de 2 marcas, que funciona de manera similar a unary-ii. Pero es capaz de detenerse en la cuenta I mientras que el pulsador SW1 está apretado. Es decir, que es un contador que realiza una espera en la cuenta I, hasta que se ponga a 1
la señal del pulsador SW1
Esta cuenta la representamos de la siguiente manera:
- Cuenta: (sin marca), 🟢 (wait), 🟢🟢
Cuando el contador alcanza la cuenta I, en el ciclo 1, entra un estado de espera, que denominamos wait. El circuito permanece en este estado indefinidamente, mientras que SW sea 0
. En el momento en el que SW1 se activa, el circuito evoluciona hacia el siguiente estado: 🟢🟢
Este estado de wait se logra gracias a una And de habilitación, presentada en el circuito enable. La entrada enable de esta AND se controla mediante el pulsador. Cuando el pulsador NO está apretado, la entrada enable
vale 0
. Y por tanto los bits 1 NO pasan desde el biestable iquierdo al derecho. Se quedan bloqueados
Pero cuando SW es 1
, la puerta AND se habilita, y deja pasar los 1s hacia la derecha
Por otro lado, cuando el contador está en el estado 🟢🟢, si se suelta el pulsador SW1
, el biestable de la derecha se pone a 0
. Es decir, que se reinicia a su valor inicial. ¡Lo hemos reseteado!. Decimos que hemos hecho un reset
Barra de progreso
Un contador unario se comporta como una barra de progreso discreta, en la que se van añadiendo marcas hacia la derecha. El circuito de esta lámina tiene sólo 2 marcas, por lo que representa a una barra de progreso de 2 posiciones, que es muy pequeña
Hasta ahora no se había presentado este concepto porque los contadores unarios que hemos visto hasta ahora funcionan a la velocidad del reloj del sistema. Es decir, que ¡cuentan muy rápido!. Por ello el concepto barra de progreso no tiene sentido porque los humanos no lo podemos apreciar
Sin embargo, en este circuito la evolución de la barra de progreso es apreciable por el ojo humano. Es el primer circuito que funciona mucho más lento, y podemos apreciar su evolución con el ojo
En esta animación vemos el funcionamiento de este contador, suponiendo que el usuario aprieta el pulsador SW1 cuando la cuenta es 🟢
Ruta de datos y control
Ya sabemos que los bits se mueven entre los biestables. En el caso de los contadores unarios, este movimiento es como el de una barra de progreso, en el que los biestables se activan a 1
de izquierda a derecha. Una vez que un biestable se pone a 1
, permanece en ese estado. Este bit se propaga hacia la derecha, y va avanzando
Este tablero de juego por donde se mueven los biestables es lo que conocemos con el nombre ténico de Ruta de datos. Es la parte del circuito por donde se mueven los bits que consideramos como nuestros Datos. En el caso del contador unario, los datos son las marcas del contador, que representan su valor
En un contador unario genérico, como el presentado en unary-n, los bits se mueven y ya está. Sólo hay ruta de datos. Sin embargo, en el circuito presentado en esta ficha hay una señal de control, que determina cómo se produce este movimiento de las fichas en el tablero de juego
El circuito que genera estas señales de control se denomina Circuito de control. En este circuito la señal de control es manual, generada por el propio usuario con el pulsador SW1
En esta figura se muestra el esquema del circuito, dividido en sus dos partes: Ruta de datos y Circuito de control
En la ruta de dato se colocan elementos de control, como una puerta AND de habilitación, que dejan pasar los datos o NO en función de la señal de control generada en el circuito de control
La ruta de datos, que es nuestro tablero de juegos, lo podemos ver como las calles de una ciudad, por donde se mueven los coches (bits). En las calles hay unos elmentos de control como semáforos, señales de tráfico, policías... que regulan el tráfico, parando o dejando pasar los coches. El circuito que gobierta estos semáforos sería nuestro circuito de control
Evolución del estado
El circuito tiene 2 biestables, cuyos valores iniciales son 0
. En el ciclo 0, el estado es 00
. En el ciclo 1 se activa el biestable de la izquierda. Si suponemos que en pulsador NO está apretado inicialmente, cuando se está en el ciclo 1 la puerta AND está deshabilitada. Debido a esto el 1
del biestable izquierdo NO se transmite al biestable de la derecha. Cuando se llega al ciclo 2 por la entrada del biestable derecho llega 0
, por lo que este biestable sigue en su estado inicial.
El resultado es que NO HAY EVOLUCIÓN del estado. Y por eso llamamos al estado 10
como estado de espera. Es un estado que no evoluciona hasta que se produzca una condición. En este caso es que SW
se ponga a 1
para que se habilite la AND
En este estado se permanece un número de ciclos (N). Cuando el usuario aprieta el pulsador (pongamos como referencia que lo hace en el ciclo N-1), la puerta AND se habilita y ahora ya sí que el estado puede evolucionar en el siguiente ciclo, alcanzándose el estado 11
. Se permanece en ese estado mientras SW esté pulsado
Por tanto, la evolución del estado la podemos controlar manualmente con el pulsador SW1
. Y por ello el estado ya no evoluciona a la máxima velocidad, sino a la determinada por SW1
Concepto de reset
La puerta AND de habilitación es la que permite que el bit 1 de la izquierda paso al biestable de la derecha. Es decir, que es el que habilita que el contador unario siga contando, y que pase del estado 🟢 al estado 🟢🟢
PERO también se puede ver del modo contrario. Supongamos que la cuenta ha llegado a su máximo (🟢🟢) y por tanto el biestable derecha está a 1
. Si ahora soltamos el pulsador SW1, la AND de habilitación se desactiva y por su salida saca un 0
, por lo que en el siguiente ciclo el biestable derecho se pone a 0
. Es decir, que vuelve a su estado inicial de 0. Decimos que se ha hecho un reset
Cuando un biestable vuelve a su estado inicial, decimos que se ha reseteado (o que se le ha hecho un reset)
Hasta ahora, en los circuitos que hemos visto el biestable pasa del estado inicial a otro, y permanece en él hasta el final. En este circuito podemos inicializar el biestable derecho y retroceder al estado 🟢
Esta idea de reset, aunque en este circuito es poco útil, es muy potente y la utilizaremos más adelante
Diagrama de estado
Toda la información sobre la evolución del estado se resume en este diagrama de estados
Se comienza en el estado inicial (init) cuyo valor es 00
. En el ciclo 1 se pasa automáticamente al estado 10
. HAsta aquí es todo igual que en los circuitos anteriores, donde cada ciclo nuevo supone un cambio de estado hasta llegar al estado final
Sin embargo el estado 10
(wait) ya NO está controlado por los ciclos del sistema, sino por la señal de control SW1. Cada vez que llega un ciclo nuevo, si esta señal es 0
, el estado NO CAMBIA. Decimos que permanecemos en el mismo estado. Sin embargo, al llegar un ciclo nuevo y la señal de control está a 1
(botón apretado) se cambia al estado siguiente, que es 11
El estado 11
está también gobernado por la señal de control, y NO por los ciclos. Este estado representa la cuenta máxima, y se permanece en él mientra el botón esté apretado. Sin embargo, si se suelta el botón, al llegar el siguiente ciclo el circuito cambia al estado anterior. Como el biestable derecho vuelve a tener el valor 0
, decimos que se ha hecho un reset
Pbservando el diagrama vemos que este contador en realidad NO tiene un estado final, sino que alterna entre los estados 10
(cuenta i) y 11
(cuenta ii) según el valor del pulsador. ¡Nosotros controlamos el estado del circuito manualmente!
Cronograma
En este cronograma se muestra la evolución de las señales de salida de los biestables, cuando se aprieta el pulsador en el ciclo N-1
Hay que hacer una observación importante. El cambio de estado es siempre síncrono. Si se produce, se hace en el cambio de ciclo. Sin embargo, la señal SW1 es asíncrona. Se puede producir en cualquier momento, con independencia de cuándo se cambie el ciclo. Es decir, que no NO ESTÁ SINCRONIZADA con el relog. Es la voluntad del usuario la que prima
En el cronograma se ha representando SW1 como que en la mitad del ciclo N-1 se activa. Por tanto, no se tiene en cuenta hasta que llegue el flanco de reloj del cambio de ciclo
Medición con el analizador lógico
Vamos a realizar diferentes mediciones. La primera la realizamos al arrancar el circuito, sin tener el pulsador SW1 apretado. Sabemos que en este caso el circuito debe evolucionar el estado 10
y quedarse ahí (wait)
Lo comprobamos con la medición:
Efectivamente el estado inicial, tras el Bit-bang es 00
. En el siguiente ciclo se pasa directamente al estado 10
(b1=1, b0=0), y PERMANECE AHÍ. Con esto comprobamos que efectivamente este es un estado de espera
Si repetimos la medición con el pulsador SW1 apretado desde el ciclo 0, el resultado es exactamente el mismo que el circuito unary-ii. Se realiza la cuenta hasta II y permanece en ese estado
En la medión lo comprobamos. El sistema evoluciona automáticamente, en cada ciclo, por los estados 00
, 10
y 11
. El contador unario cuenta con normalidad
En la siguiente medición empezamos a medir cuándo se aprieta el pulsador, y NO desde el ciclo 0
Aunque en la captura aparecen los números de ciclos, pero son relativos al momento de comenzar la captura (que es ligeramente anterior a apretar el pulsador). En esta captura YA NO VEMOS el Bit-Bang!, sino unos ciclos N desde el comienzo. Comprobamos que efectivamente, el estado era 10
, y al apretar el pulsador, el estado evoluciona a 11
Y ya por último, la última medición es comprobar el Reset: lo que ocurre al liberar el pulsador
Efectivamente el estado evoluciona de 11
hacia 10
. Es decir, el biestable de la derecha (b0) se ha reseteado
Recursos
Recurso | Cantidad | Máximo | Descripcioin |
---|---|---|---|
LC | 4 | 7680 | Celdas lógicas |
IO | 4 | 256 | Bloques de E/S |
Conceptos nuevos
- Estado de espera: Estado del circuito que NO evoluciona automáticamente en el siguiente ciclo, sino que permanece en ese mismo estado hasta que se activa alguna señal
- Wait: Es el nombre que usamos para denominar a los estados de espera
- Barra de progreso: Así denominamos a la cuenta unaria, cuando se realiza a una velocidad que los humanos podemos ver. El resultado es unas "luces" que avanzan de izquierda a derecha, similar a una barra de progreso o un vúmetro digital de LEDs
- Ruta de datos: Es la parte del circuito por donde se mueven los datos (fichas). Es lo que hasta ahora hemos conocido como tablero de juego
- Señal de control: Es una señal especial de 1 bit que sirve para establecer cómo se debe comportar un bit de datos. Decimos que esta señal controla ese dato (Ej. dejándolo pasar o no)
- Circuito de control: Es el circuito que genera las señales de control
- Elementos de control: Componentes de la ruta de datos que son gobernados por las señales de control, y que son los que físicamente modifican el comportamiento del dato
- Concepto de reset: Decimos que un biestable se ha inicializado, que se ha reseteado o que recibe un reset cuándo vuelve a su estado inicial
- Señal asíncrona: Son las señales que se generan con independencia del reloj del sistema. Por ejemplo las señales que se activan por la voluntad del usuario (como los pulsadores)
Importancia del circuito
El circuito Unary-ii-wait es otro circuito clave, que abre muchas posibilidades nuevas
- Es el primer circuito que NO funciona a la velocidad del sistema, sino de manera más lenta. Esto es debido a que su funcionamiento depende de lo que haga el usuario. Por tanto funciona a velocidad humana
- Este es el primer circuito que reacciona a un evento. Aquí por reaccionar nos referimos a cambiar de estado
Con este circuito se empiezan a abordar problemas planteados anteriormente:
- Problema de la cuenta de eventos: Todavía no se ha solucionado, PERO este circuito evoluciona de un estado a otro SOLO cuando se produce el evento de apretar el pulsador
- Problema de la alta velocidad: Usando esta misma idea de los estados de espera, logramos un circuito que NO funciona a la máxima velocidad. Esto nos da pistas para solucionarlo por completo: hay que introducir estados de espera
- Problema del almacenamiento persistente: Si bien todavía NO está resuelto, ya tenemos pistas de cómo lograrlo... también con estados de espera
Enlaces
- Colección iceK: Colección para Icestudio. Constantes
- Colección iceFF: Colección para Icestudio. Biestables
- Cuaderno ténico CT18 de FPGAs Libres: Fundamentos. Sistema unario
Autor
- Juan González-Gómez (Obijuan)