time0 - Obijuan/Icestudio-Digital GitHub Wiki
Circuito 028-time0
| ⬅️ Prev | Navegar por los circuitos | Next ➡️ |
|---|
Contenido
- Ficha: Principio de start
- Descargas
- Descripción
- Configuración de la FPGA
- La señal time0
- El principio time0
- Cronograma
- Etiquetas reducidas
- Midiendo el nacimiento de la señal de reloj
- Circuito measure2
- Recursos
- Conceptos nuevos
- Enlaces
- Autor
- Licencia
Ficha: Principio time0
Descargas
Descripción
En este circuito se genera la señal time0, y la utilizamos para realizar una medición en los primeros ciclos del reloj, empezando desde el ciclo 0. Para medir cualquier circuito con el analizador lógico necesitamos una señal de referencia que indique cuándo comenzar la captura. La que vamos a utilizar es time0, que indica el momento exacto en el que la señal de reloj nace. Es nuestro origen de tiempo (t=0)
La señal time0 nos indica cuándo comienza el tiempo (t=0), y está expresada en lógica negativa. Es decir, que cuando vale 1 NO está activa (la FPGA está todavía en estado de configuración) y cuando se pone a 0 es que la FPGA está en funcionamiento. Esta señal sale por el pin D0. Por el pin D1 se saca la señal de reloj, para medirla y comprobar que efectivamente ese es el instante en el que nace. A este nacimiento lo denominamos Bit-Bang (En alusión al Big-Bag, momento de nuestro universo donde nació todo, incluso el propio tiempo)
Siempre que necesitemos tomar mediciones con el analizador lógico comenzando en el ciclo 0, tendremos que utilizar la señal time0
Configuración de la FPGA
Para comprender mejor el origen del tiempo dentro de la FPGA necesitamos primero entender el proceso de configuración. Al alimentar la placa, el reloj del sistema arranca. Pero el circuito de la FPGA todavía no. Este circuito en realidad se encuentra descrito por su bitstream, que está almacenado en la Memoria flash
Los pines de la FPGA, en este momento, están en estado de alta impedancia. Es decir, están desconectados. Pero si los leemos externamente veremos que están a estado 1
La FPGA tiene un circuito controlador interno que lo primero que hace es acceder a la memoria Flash y cargar el bitstream en la propia FPGA, para configurarla. Para hacer esto usa el reloj del sistema, que es externo a la FPGA. Este circuito genera una señal interna, que hemos denominado RUN. Cuando está en modo configuración, RUN es 0 y los pines se configuran como se ha indicado
En esta figura se muestran todos los elementos, cuando estamos en el estado de configuración
Durante el proceso de configuración, los pines de la FPGAs han permanecido en alta impendacia. Esto es, que se leen a 1 con el analizador.
En el momento exacto en el que finaliza la configuración, el reloj del sistema se conecta al pin de entrada clk de la FPGA, por lo que comienza el tiempo en su interior (¡Bit-bang!). También, en ese mismo momento, el resto de pines dejan de estar en alta impedancia y se comportan de manera acorde a su configuración (como entradas o como salidas). Nuestro circuito emerge dentro del a FPGA y empieza a funcionar. La señal RUN está ahora a 1, y los pines se han configurado acorde a este valor
En esta figura se muestra la FPGA ya configurada, con el circuito de esta lámina
Por D0 sale la señal time0 y por D1 clk
La señal time0
¿Cómo podemos saber cuándo ha terminado el proceso de configuración de la FPGA y nuestro circuito está arrancado? Lo que hacemos es generar la señal time0, que simplemente es una señal que conectamos a la constante bit-0. De esta manera, durante la configuración, esta señal, que sale por uno de los pines, está a 1. Recordemos que todos los pines están a 1 durante la configuración. PERO en el momento exacto en el que se terminal esta configuración time0 pasa a valor 0
Por tanto, es este flanco de bajada el que nos indica el instante exacto en el que el circuito arranca. Es decir, que utilizaremos el flanco de bajada de time0 para determinar el arranque del sistema. Y será también en ese instante cuando indicaremos al analizador lógico que comience la captura de datos
Siempre que tengamos que medir el tiempo desde el ciclo 0, es necesario generar la señal time0 como se indica en este circuito
El Principio time0
En esta lámina se describe el principio time0 que afirma:
Para realizar una medición con el analizador lógico comenzando desde el ciclo 0, tenemos que generar la señal time0 conectándola al valor constante ´0´. El flanco de baja de ´time0´ es el que indica cuándo empezar la captura
Cronograma
En el cronograma de la lámina se muestran los valores de ambas sañales: time0 y clk. En rojo se destaca la zona donde la FPGA NO ESTÁ CONFIGURADA, y por tanto ambas señales son constantes y de valor 1. A partir del bit-bang la señal time0 se mantiene con valor constante a 0 y el reloj empieza a funcionar
Etiquetas reducidas
Dado que la señal de reloj se usa mucho, solemos usar una etiqueta. En Icestudio las etiquetas ocupan un tamaño relativamente grande
Sin embargo, en los esquemas presentados en las láminas nos puede interesar reducir el tamaño de las etiquetas para mejorar la legibilidad, y sobre todo, tener más espacio disponible para dibujar circuitos más complejos
Por ello utilizaremos etiquetas reducidas, que se dibujan con un tamaño menor, aunque en Icestudio se muestran con su tamaño completo
Midiendo el nacimiento de la señal de reloj
Para comprobar que efectivamente en el bit-bang nace la señal de reloj, y que se trata del ciclo 0, vamos a realizar una medición con el analizador lógico. Por un lado necesitamos la señal time0 para conocer el momento exacto en el que el analizador comenzará a capturar datos
Por otro lado aplicamos el circuito clk para obtener por D1 la señal de reloj. Necesitamos por tanto 3 cables de conexión entre la placa Alhambra-II y el analizador lógico:
- GND: Señal de masa
- time0: Señal de arranque. Se saca en la FPGAj por
D0y se conecta al canal 0 del analizador - clk: Señal de reloj. Se saca por
D1y se conecta al canal 1 el analizador
Este es el escenario:
No sólo nos interesa ver lo que ocurre a partir de ciclo 0 (instante t=0), sino lo que ocurre un poco antes para comprobar que efectivamente antes del bit-bang NO HAY SEÑAL DE RELOJ dentro de la FPGA, y que su pin D0, como representante del resto de pines, está a 1
Esto lo hacemos configurando el pre-trigger captura ratio con un valor del 10%. Significa que antes del disparo, que se produce en el flanco de bajada de time0, se capturan un 10% del total de muestra. Como lo tenemos configurado para capturar 100 muestras, en total se capturan 10 muestras antes del disparo, y luego 100 tras el disparo. Esto nos permite observar lo que ha ocurrido unos instantes antes de la activación de time0

Para realizar la captura configuramos la frecuencia de muestreo a 24Mhz (El doble de la frecuencia del reloj de la Alhambra), y tomamos 100 muestras. Hay que configurar la señal time0 para que la captura comience en su flanco de bajada

Para realizar la captura pinchamos en RUN en el PulseView y luego en el botón de reset de la Alhambra-II. El analizador realiza la captura, y este es el resultado. Hemos añadido un decodificador que muestra el número de ciclos. Es el decodificador counter, que cuenta los flancos de reloj de la señal de reloj
Este es el resultado de la captura

Comprobamos cómo efectivamente, inicialmente tanto la señal time0 como clk están a 1. En cuanto se ha terminado la inicialización, time0 se pone a 0 y la señal de reloj se pone a oscilar, comenzando el ciclo 0
Circuito MEASURE2
Este es el nombre asignado a un circuito abstracto en el que medimos al menos 2 señales. Típicamente las señales a medir serán time0, que es necesaria para empezar la captura en el instante t=0, y la señal de reloj, `clk, que nos permite saber en qué ciclo estamos
Recursos
| Recurso | Cantidad | Máximo | Descripcioin |
|---|---|---|---|
| LC | 2 | 7680 | Celdas lógicas |
| IO | 3 | 256 | Bloques de E/S |
Conceptos nuevos
- Bit-Bang: Momento en el que el sistema áparece, y el tiempo empieza a contar (t=0)
- Señal time0: Señal que indica el origen temporal en el flanco de bajada
- Principio time0: Para realizar una medición con el analizador lógico comenzando desde el ciclo 0, tenemos que generar la señal time0 conectándola al valor constante ´0´. El flanco de baja de ´time0´ es el que indica cuándo empezar la captura
- Etiquetas reducidas: Las etiquetas mostradas en los esquemas de las láminas se muestra con un tamaño menor al real, para que los circuitos sean más legibles y se puedan hacer otros más complejos
- Circuito MEASURE2: Circuito para realizar mediciones de 2 señales. Se generan las señales
time0yclktípicamente
Enlaces
- Colección iceK: Colección para Icestudio. Constantes
Autor
- Juan González-Gómez (Obijuan)