Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
En este tutorial, usaremos la FPGA para controlar el circuito LED externo. Vamos a implementar las siguientes tareas
(A) Utilice los botones pulsadores del FPGA Cyclone IV DuePrologic para controlar el LED.
(B) Flash LED encendido y apagado periódicamente
Video de demostración
Menú de laboratorio:
Paso 1: Construya el circuito electrónico
Paso 2: verifique el planificador de pines y edite el código de Verilog
Paso 3: Edite el código de Verilog
Cuando compre FPGA DueProLogic, debería recibir un DVD. Después de abrir "Projects_HDL", debería ver el archivo de código original
Agrega el código resaltado. Registra los puertos de E / S y asigna números a los puertos.
cable de salida [7: 0] XIO_1, // XIO - D2-D9
cable de salida [5: 0] XIO_2, // XIO - D10-D12
cable de salida [5: 0] XIO_3, // XIO - D22-D29
cable de entrada [5: 0] XIO_4, // XIO - D30-D37
cable de entrada [5: 0] XIO_5, // XIO - D38-D45
cable de salida [4: 0] XIO_6_OUT, // XIO - D46-D53
cable de entrada [31: 5] XIO_6, // XIO - D46-D53
cable de salida [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
cable de entrada UBA, // Interruptores de botón pulsador
cable de entrada UBB // Interruptores de botón pulsador
asignar XIO_1 [3] = start_stop_cntrl;
asignar XIO_2 [1] = start_blinky; // LED flash LED encendido y apagado
asignar XIO_2 [2] = 1'b1; // salida ALTA
asignar XIO_2 [3] = ~ UBA; // Pulsar el botón A
asignar XIO_2 [4] = UBB; // Pulsador B
asignar c_enable = XIO_5 [2];
asignar LEDExt = XIO_5 [5];
Entonces tenemos que configurar un temporizador de retardo. Comente el código del temporizador original y escriba una nueva función de temporizador
//-----------------------------------------------
// LED de inicio parpadeante
//-----------------------------------------------
/*
siempre @ (posedge CLK_66 o negedge RST)
empezar
si (! RST)
start_blinky <= 1'b0;
demás
empezar
si (control_register [7: 4]> 0)
start_blinky <= 1'b1;
demás
start_blinky <= 1'b0;
fin
fin
*/
reg [31: 0] ex;
comienzo inicial
ex <= 32'b0;
start_blinky <= 1'b0;
fin
siempre @ (posedge CLK_66)
empezar
ex <= ex + 1'b1;
if (ex> 100000000) // flash encendido / apagado ~ 1,6 segundos, reloj 66MHz
empezar
start_blinky <=! start_blinky;
ex <= 32'b0;
fin
fin
//-----------------------------------------------
// Contador de temporizador de retardo LED
//-----------------------------------------------
/*
siempre @ (posedge CLK_66 o negedge RST)
empezar
si (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
demás
empezar
si (indica [SELECT_MODE])
led_delay_counter <= valor_temporizador;
si no (indica [WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
fin
fin*/
Paso 4: compile el código Verilog
Presione "Iniciar compilación" en Quartus, no se debe generar ningún mensaje de error.
Si recibe un mensaje de error sobre varios pines. Vaya a Asignaciones -> Dispositivo -> Opciones de dispositivo y pin -> Pines de doble propósito -> cambie el valor del pin apropiado a "Usar como E / S normal".
Después de la compilación, debe obtener el archivo de salida pof directamente. Si su software no está actualizado, es posible que solo obtenga el archivo sof. Cuando suceda, haga clic en "Archivo" en Quartus -> "convertir archivos de programación". Cambie la configuración que está marcada con cuadros rojos.
Paso 5: Probémoslo
Después de todo, ¡debería funcionar! El LED amarillo está siempre encendido. El LED rojo parpadea. El LED azul se apaga si presiona el botón B. El LED verde se enciende si presiona el botón A