unary‐n - Obijuan/Icestudio-Digital GitHub Wiki

Circuito 041-unary-n

⬅️ Prev Navegar por los circuitos Next ➡️

Contenido

Ficha: Contador unario de ciclos de N marcas

Descripción

Este circuito es en realidad un esquema de circuito, que generaliza la idea de un contador unario de N marcas. Si queremos contar hasta N, necesitamos conectar en serie N biestables D del sistema. Ya sabemos construir contadores genéricos de N marcas, que cuentan hasta el ciclo N

De esta manera, con este esquema podemos construir cualquier contador unario. Esto es muy útil porque significa que ya podemos medir, en principio, cualquier intervalo de tiempo a partir del ciclo 0

Contando hasta el ciclo N

Como tenemos N biestables, sólo podemos representar N marcas y por tanto sólo podemos contar hasta N. En esta figura se representa la evolución del estado a medida que transcurren los ciclos. En vez de los valores 1 y 0 se utiliza la marca 🟢️ y su ausencia

La salida del último biestable se conecta al LED0. Si pudiésemos ver el funcionamiento del circuito a cámara lenta, veríamos cómo la marca se va desplazando hacia la derecha, por las casillas (Biestables D) hasta que llega al último y se enciende el LED. Esta es la señal que nos indica que se ha alcanzado el valor máximo. A partir de ahí sabemos que han transcurrido al menos N ciclos

En esta animación veríamos esta cuenta:

Observamos cómo se produce la cuenta unaria. En cada ciclo aparece una marca nueva, hasta que en el ciclo N se genera la marca N, y se enciende el LED. En los ciclos sucesivos el LED permanece encendido

Mirando el LED0 sabemos cuánto se ha alcanzado el final de la cuenta, y por tanto sabemos cuánto tiempo ha pasado desde el inicio del circuito. ¡Lo que tenemos es un cronómetro unario!

Diagrama de estados

Este es el diagrama de estado del circuito unary-n. El estado inicial es 000...0 (Hay N 0s, que representa la cuenta 0 (ciclo 0)
Es una generalización de los diagramas que hemos visto en los circuitos unary-ii y unary-iii

A partir del ciclo N, el estado siempre es 111...1, y no se producen más cambios: Ya no hay movimiento de marcas en el tablero

Cronograma

Cuando tomamos la salida del último biestable (el del extremo derecho) del circuito unary-n, lo que se obtiene es la función step-N: Un escalón en el ciclo N. Esta es la señal que se utiliza como arranque o inicialización de otros circuitos

Circuito STEP-N

El circuito STEP-N es un circuito que cuenta en unario ciclos y que enciende el LED a su salida cuánto se ha alcanzado el ciclo N

El tiempo que está la señal a nivel bajo, que es el mismo tiempo que tarda en activarse, lo representanmos mediante D. Es un tiempo igual a N ciclos

Midiendo el tiempo

Este circuito genera una señal de arranque que tarda un tiempo D en activarse desde que se enciende el circuito. Este tiempo, medido en ciclos es N. Pero si lo medimos en tiempo, la duración D en segundos es de:

$$ D = N.T = \frac{N}{F_{sys}}$$

Donde N es el número de biestables del contador unario y T es el periodo de cada ciclo. Este periodo es la inversa de la frecuencia del reloj del sistema $F_{sys}$

Esta fórmula es muy importante porque nos permite determinar cuántos biestables necesitamos para esperar un tiempo D, o a la inversa, conocer cuánto tiempo tarda un contador de N biestables

Caso de estudio: Contador unario de 12 Biestables

Vamos a estudiar el caso particular de un contador unario de 12 biestables D del sistema. Como tiene 12 biestables, nos permite contar hasta el ciclo 12. Aplicando la fórmula anterior, podemos calcular la duración de esta señal. Como se está utilizando la placa Alhambra-II, sabemos que $F_{sys}=12Mhz$, y al tener 12 biestables escribimos que $N=12$

Sustituyendo en la fórmula tenemos que:

$$D = \frac{N}{F_{sys}} = \frac{12}{12Mhz} = \frac{1}{10^6} = 10^{-6} = {1µs}$$

Este circuito activa la señal (o enciende el LED) transcurridos exactamente 1µs (un micro-segundo)

Este es el primer circuito con el que podemos medir este tiempo de 1µs. Esta es la pinta que tiene en Icestudio:

Para comprobar su funcionamiento realizamos las mediciones con el analizador lógico. Incluimos las señales de time0, para deterctar el Bit-Bang y el reloj

Desde el analizador vemos que efectivamente la señal se pone a 1 en el ciclo 12. Midiendo el tiempo con el propio analizador vemos que efectivamente la señal step-12 está a 0 durante 1µs (En la captura del analizador la señal se llama s_1us)

Recursos

En cada celda lógica hay un biestable D. Por tanto para implementar un contador unario de N biestables necesitamos al menos N celdas lógicas. Debido a la inclusión de la constante 1, necesitamos un bloque adicional, porque lo que, de manera general (y aproximada) el número celdas lógicas utilizadas por un contador unario de N marcas es de N+1

Recurso Cantidad Máximo Descripcioin
LC 4 7680 Celdas lógicas
IO 4 256 Bloques de E/S

Limitaciones en la cuenta y el tiempo medido

¿Cuál es la cuenta máxima ($N_{max}$) a la que podemos llegar? Dado que es un contador unario de $N_{max}$ marcas, necesitamos $N_{max}$ biestables (+1 adicional). Sabiendo que en total tenemos 7680 celdas lógicas en la placa Alhambra-II, llegamos a la conclusión de que como mucho podríamos contar hasta 7680 ciclos (sería uno menos, pero lo redondeamos)

Si esto lo pasamos a tiempo (calculando $$D_{max}$$), tenemos que el tiempo máximo que se puede medir es:

$$D_{max} = \frac{N_{max}}{F_{sys}} = \frac{7680}{12Mhz} = 640x10^{-6} = 640µs$$

¡¡Sólo podmeos medir un tiempo igual a 640µs (aprox.)!!

Problemas a resolver

Ya sabemos hacer circuitos para contar. Y más concretamente para contar ciclos. PERO nos encontramos con la limitación de que sólo podemos contar hasta 7680, que en tiempo es igual a 640µs

Además, esta cuenta se realiz una única vez, comenzando en el Bit-Bang. Pero una vez alcanzado el valor máximo, ya NO PODEMOS VOLVER A CONTAR

Así que nos surgen los siguientes PROBLEMAS:

  • Problema de la cuenta única: ¿Cómo hacer para que una cuenta se pueda repetir más de una vez?
  • Problema de la cuenta máxima: ¿Cómo hacer para aumentar nuestra cuenta?

Son problemas generales, pero de momento como lo único que sabemos es contar tiempo, estos problemas los aplicamos a la medida del tiempo, y los podemos reformular de la siguiente manera:

  • Problema del tiempo relativo: ¿Cómo podemos medir un intervalo de tiempo? (y no sólo absoluto, desde el Bit-Bang)
  • Problema del tiempo máximo: ¿Cómo podemos hacer para medir un tiempo mayor a 640µs?

Añadimos, además, otros problemas importantes:

  • Problema del almacenamiento persistente: ¿Cómo podemos hacer para que un biestble almacena la misma información durante más de un ciclo?. Su comportamiento es capturar el dato de la entrada en cada ciclo del sistema...
  • Problema de la cuenta de eventos: ¿Cómo podemos contar otras cosas que no sea ciclos?
  • Problema de la alta velocidad: ¿Cómo hacer circuitos que funcionen más lentamente para que los humanos podamos ver su evolución?

Y de manera más concreta, nos podemos hacer las siguientes preguntas (son aplicación de lo anterior):

  • Problema del segundo: ¿Cómo podemos medir un intervalo de tiempo de 1 segundo?
  • Problema de la señal de 1Hz: ¿Cómo podemos generar una señal de frecuencia 1Hz? (Periodo total de 1 segundos. Medio seugundo a nivel alto y medio a nivel bajo, que se repita indefinidamente)

Si hacemos un cálculo rápido para entender el problema del segundo, con lo que sabemos ahora, tendríamos que utilizar 12 millones de Biestables D para construir un contador unario que active una señal al cabo de 1 segundo

Estos problemas aparecen porque la cuenta unaria es muy limitada. Es muy sencilla y fácil de implementar, pero tiene esta limitación de que NO ESCALA. Se necesitan muchísimos biestables para realizar cuentas grandes. Aunque el sistema unario lo seguiremos usando, por su simplicidad, necesitamos nuevas ideas para superar estas limitaciones

Conceptos nuevos

Al generalizar el contador unario de 2 y 3 marcas, nos encontramos con que *aparecen problemas nuevos, que de momento no podemos resolver con lo que tenemos:

  • Problema de la cuenta única: ¿Cómo hacer para que una cuenta se pueda repetir más de una vez?
  • Problema de la cuenta máxima: ¿Cómo hacer para aumentar nuestra cuenta?
  • Problema del almacenamiento persistente: ¿Cómo podemos hacer para que un biestble almacena la misma información durante más de un ciclo?
  • Problema de la cuenta de eventos: ¿Cómo podemos contar otras cosas que no sea ciclos?
  • Problema de la alta velocidad: ¿Cómo hacer circuitos que funcionen más lentamente para que los humanos podamos ver su evolución?

Enlaces

Autor

Licencia