Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Neste tutorial, usaremos o FPGA para controlar o circuito externo de LED. Vamos implementar as seguintes tarefas
(A) Use os botões no FPGA Cyclone IV DuePrologic para controlar o LED.
(B) Flash LED acende e apaga periodicamente
Demonstração de vídeo
Menu do laboratório:
Etapa 1: construir o circuito eletrônico
Etapa 2: verifique o planejador de pinos e edite o código Verilog
Etapa 3: editar o código Verilog
Ao comprar o FPGA DueProLogic, você receberá um DVD. Depois de abrir "Projects_HDL", você deve ver o arquivo de código original
Adicione o código destacado. Ele registra as portas de E / S e atribui números às portas.
fio de saída [7: 0] XIO_1, // XIO - D2-D9
fio de saída [5: 0] XIO_2, // XIO - D10-D12
fio de saída [5: 0] XIO_3, // XIO - D22-D29
fio de entrada [5: 0] XIO_4, // XIO - D30-D37
fio de entrada [5: 0] XIO_5, // XIO - D38-D45
fio de saída [4: 0] XIO_6_OUT, // XIO - D46-D53
fio de entrada [31: 5] XIO_6, // XIO - D46-D53
fio de saída [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
fio de entrada UBA, // Interruptores de botão de pressão
fio de entrada UBB // Interruptores de botão de pressão
atribuir XIO_1 [3] = start_stop_cntrl;
atribuir XIO_2 [1] = start_blinky; // LED flash LED ligado e desligado
atribuir XIO_2 [2] = 1'b1; // output HIGH
atribuir XIO_2 [3] = ~ UBA; // Pressione o botão A
atribuir XIO_2 [4] = UBB; // Pressione o botão B
atribuir c_enable = XIO_5 [2];
atribuir LEDExt = XIO_5 [5];
Então, temos que definir um temporizador de atraso. Comente o código do temporizador original e escreva uma nova função do temporizador
//-----------------------------------------------
// LED Blinky start
//-----------------------------------------------
/*
sempre @ (posedge CLK_66 ou negedge RST)
começar
if (! RST)
start_blinky <= 1'b0;
outro
começar
if (control_register [7: 4]> 0)
start_blinky <= 1'b1;
outro
start_blinky <= 1'b0;
fim
fim
*/
reg [31: 0] ex;
começo inicial
ex <= 32'b0;
start_blinky <= 1'b0;
fim
sempre @ (posedge CLK_66)
começar
ex <= ex + 1'b1;
if (ex> 100000000) // flash on / off ~ 1,6 segundos, clock de 66 MHz
começar
start_blinky <=! start_blinky;
ex <= 32'b0;
fim
fim
//-----------------------------------------------
// LED Delay Timer Counter
//-----------------------------------------------
/*
sempre @ (posedge CLK_66 ou negedge RST)
começar
if (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
outro
começar
if (estado [SELECT_MODE])
led_delay_counter <= timer_value;
else if (estado [WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
fim
fim*/
Etapa 4: compilar o código Verilog
Pressione "Iniciar Compilação" no Quartus, nenhuma mensagem de erro deve ser gerada.
Se você receber uma mensagem de erro sobre vários pinos. Vá para Atribuições -> Dispositivo -> Opções de dispositivo e pino -> Pinos de dupla finalidade -> altere o valor do pino apropriado para "Usar como E / S regular".
Após a compilação, você deve obter o arquivo de saída pof diretamente. Se o seu software não estiver atualizado, você pode obter apenas o arquivo sof. Quando isso acontecer, clique em "Arquivo" no Quartus -> "converter arquivos de programação". Altere as configurações marcadas com caixas vermelhas.
Etapa 5: vamos tentar
Afinal, deve funcionar !!! O LED amarelo está sempre aceso. O LED vermelho está piscando. O LED azul é desligado se você pressionar o botão B. O LED verde é ligado se você pressionar o botão A