Tabla de contenido:

Cronómetro básico con placa VHDL y Basys3: 9 pasos
Cronómetro básico con placa VHDL y Basys3: 9 pasos

Video: Cronómetro básico con placa VHDL y Basys3: 9 pasos

Video: Cronómetro básico con placa VHDL y Basys3: 9 pasos
Video: Programación de un Fpga (Basys 3) 2024, Mes de julio
Anonim
Image
Image

Bienvenido al instructivo sobre cómo construir un cronómetro usando VHDL básico y tablero Basys 3. ¡Estamos emocionados de compartir nuestro proyecto contigo! Este fue un proyecto final para el curso CPE 133 (Diseño digital) en Cal Poly, SLO en el otoño de 2016. El proyecto que construimos es un simple cronómetro que inicia, reinicia y detiene el tiempo. Toma tres botones en la placa Basys3 como entradas, y la hora se muestra en la pantalla de siete segmentos de cuatro dígitos de la placa. El tiempo transcurrido se muestra en formato de segundos: centisegundos. Utiliza el reloj del sistema de la placa como entrada para realizar un seguimiento del tiempo transcurrido y envía el tiempo a los cuatro dígitos de la pantalla de siete segmentos.

Paso 1: Materiales

Configuración de entradas y salidas
Configuración de entradas y salidas

Los materiales que necesitará para este proyecto:

  • 1 computadora con Vivado Design Suite WebPack instalado desde Xilinx (prefiera la versión 2016.2)
  • 1 placa FPGA Digilent Basys3 Xilinx Artix-7
  • 1 cable de puerto USB

Paso 2: Configuración de entradas y salidas

La figura anterior muestra un diagrama de bloques de nivel superior del módulo de cronómetro principal. El cronómetro toma las entradas "CLK" (reloj), "S1" (botón de inicio), "S2" (botón de pausa) y "RST" (reinicio) y tiene una salida de 4 bits "Ánodos", una salida "segmento" y una salida de un solo bit "DP" (punto decimal). Cuando la entrada "S1" es alta, el cronómetro comienza a contar el tiempo. Cuando "S2" está bajo, el cronómetro detiene el tiempo. Cuando "RST" es alto, el cronómetro se detiene y reinicia la hora. Hay cuatro submódulos dentro del circuito: el divisor de reloj, el contador de dígitos, el controlador de pantalla de siete segmentos y el codificador de pantalla de siete segmentos. El módulo principal del cronómetro vincula todos los submódulos entre sí y con las entradas y salidas.

Paso 3: hacer relojes

Hacer relojes
Hacer relojes

El módulo divisor de reloj toma un reloj del sistema y usa una entrada de divisor para crear un reloj de cualquier velocidad no mayor que la del reloj del sistema. El cronómetro utiliza dos módulos de reloj diferentes, uno que crea un reloj de 500 Hz y otro que crea un reloj de 100 Hz. El esquema del divisor de reloj se muestra en la figura anterior. El divisor de reloj toma una entrada de un solo bit "CLK", una entrada de 32 bits "Divisor" y la salida de un solo bit "CLKOUT". "CLK" es el reloj del sistema y "CLKOUT" es el reloj resultante. El módulo también incluye una puerta NOT, que alterna la señal "CLKTOG" cuando la cuenta alcanza el valor del divisor.

Paso 4: contar hasta diez

Contando hasta diez
Contando hasta diez

El contador de dígitos cuenta cada dígito de 0 a 10 y crea otro reloj para que funcione el siguiente dígito que oscila cuando el conteo llega a 10. El módulo toma 3 entradas de un solo bit "S", "RST" y "CLK "y da como resultado una salida" N "de un solo bit y una salida" D "de 4 bits. La entrada "S" es la habilitación en la entrada. El reloj se enciende cuando "S" está alto y se apaga cuando "S" está bajo. "RST" es la entrada de reinicio, por lo que el reloj se reinicia cuando "RST" es alto. "CLK" es la entrada de reloj para el contador de dígitos. "N" es la salida del reloj que se convierte en el reloj de entrada para el siguiente dígito. La salida "D" presenta el valor binario del dígito en el que se encuentra el contador.

Paso 5: Visualización de números

Visualización de números
Visualización de números

El codificador de pantalla de siete segmentos codificará el número binario recibido del módulo controlador de pantalla de siete segmentos y lo convertirá en un flujo de bits que se interpretarán como valores '1' o '0' para cada segmento de la pantalla. El módulo recibe el número binario como el "dígito" de entrada de 4 bits y da como resultado los "segmentos" de salida de 7 bits. El módulo consta de un bloque de proceso de un solo caso que asigna un flujo específico de 7 bits para cada posible valor de entrada de 0 a 9. Cada bit en los flujos de siete bits representa uno de los siete segmentos de los dígitos en la pantalla. El orden de los segmentos en la secuencia es "abcdefg" con "0" que representan los segmentos que se iluminan para el número dado.

Paso 6: Cómo mostrar el cronómetro

Cómo visualizar el cronómetro
Cómo visualizar el cronómetro

En el módulo de controlador de pantalla de siete segmentos, hay cuatro entradas de 4 bits "D0", "D1", "D2" y "D3", cada una de las cuales representa los cuatro dígitos que se mostrarán. La entrada "CLK" es la entrada de reloj del sistema. La salida de un solo bit "DP" representa el punto decimal en la pantalla de siete segmentos. La salida de 4 bits "Ánodos" determina qué dígito se muestra en la pantalla de siete segmentos y la salida de 4 bits "temp" depende del estado de la entrada de control de 2 bits "SEL". El módulo utiliza 4 multiplexores para la entrada de control "SEL" y las tres salidas; "Ánodos", "temp" y "DP".

Paso 7: Reunirlo todo

Se utiliza un bloque de proceso 'si' que se ejecuta fuera del reloj de 500Hz para crear los botones de inicio y pausa. Luego, vincule todos los submódulos en el módulo principal del cronómetro declarando los componentes de cada submódulo individual y utilizando varias señales. Los submódulos de dígitos toman la salida de reloj del submódulo de dígitos anterior y el primero toma el reloj de 100Hz. Las salidas "D" de los submódulos de dígitos se convierten en las entradas "D" del módulo controlador de pantalla de siete segmentos. Y por último, la salida "temp" del módulo controlador de pantalla de siete segmentos se convierte en la entrada "temp" del módulo codificador de siete segmentos.

Paso 8: restricciones

Restricciones
Restricciones

Utilice 3 pulsadores (W19, T17 y U18) para las entradas "RST", "S1" y "S2". W19 es el botón de reinicio, T17 es el botón de inicio (S1) y U18 es el botón de pausa (S2). También se requiere una restricción para la entrada de entrada de reloj usando el puerto W5. Además, recuerde agregar esta línea a la restricción del reloj:

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}]

También vincule los ánodos y segmentos al tablero para que el cronómetro se muestre en la pantalla de siete segmentos como se ve en el archivo de restricciones.

Paso 9: prueba

Pruebas
Pruebas

Asegúrese de que su dispositivo funcione jugando con los tres botones: presionándolos y manteniéndolos en cada orden posible para encontrar posibles problemas con su código.

Recomendado: