Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
În acest tutorial, vom folosi FPGA pentru a controla circuitul LED extern. Vom implementa următoarele sarcini
(A) Utilizați butoanele de pe FPGA Cyclone IV DuePrologic pentru a controla LED-ul.
(B) LED-ul blițului este pornit și oprit periodic
Demo video
Meniul laboratorului:
Pasul 1: Construiți un circuit electronic
Pasul 2: Verificați Pin Planner și Editați codul Verilog
Pasul 3: Editați codul Verilog
Când cumpărați FPGA DueProLogic, ar trebui să primiți un DVD. După ce deschideți „Projects_HDL”, ar trebui să vedeți fișierul de cod original
Adăugați codul evidențiat. Înregistrează porturile I / O și atribuie numere porturilor.
fir de ieșire [7: 0] XIO_1, // XIO - D2-D9
fir de ieșire [5: 0] XIO_2, // XIO - D10-D12
fir de ieșire [5: 0] XIO_3, // XIO - D22-D29
fir de intrare [5: 0] XIO_4, // XIO - D30-D37
fir de intrare [5: 0] XIO_5, // XIO - D38-D45
fir de ieșire [4: 0] XIO_6_OUT, // XIO - D46-D53
fir de intrare [31: 5] XIO_6, // XIO - D46-D53
fir de ieșire [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
cablu de intrare UBA, // Comutatoare cu buton
cablu de intrare UBB // Comutatoare cu buton
atribui XIO_1 [3] = start_stop_cntrl;
assign XIO_2 [1] = start_blinky; // LED-ul LED-ului flash și aprins
atribui XIO_2 [2] = 1'b1; // ieșire HIGH
atribui XIO_2 [3] = ~ UBA; // Apăsați butonul A
atribui XIO_2 [4] = UBB; // Apăsați butonul B
assign c_enable = XIO_5 [2];
atribui LEDExt = XIO_5 [5];
Apoi trebuie să setăm un temporizator de întârziere. Comentează codul temporizator original și scrie o nouă funcție de temporizator
//-----------------------------------------------
// Start LED intermitent
//-----------------------------------------------
/*
întotdeauna @ (posedge CLK_66 sau negedge RST)
începe
dacă (! RST)
start_blinky <= 1'b0;
altceva
începe
if (control_register [7: 4]> 0)
start_blinky <= 1'b1;
altceva
start_blinky <= 1'b0;
Sfârșit
Sfârșit
*/
reg [31: 0] ex;
început inițial
ex <= 32'b0;
start_blinky <= 1'b0;
Sfârșit
mereu @ (posedge CLK_66)
începe
ex <= ex + 1'b1;
dacă (ex> 100000000) // bliț pornit / oprit ~ 1,6 secunde, ceas 66MHz
începe
start_blinky <=! start_blinky;
ex <= 32'b0;
Sfârșit
Sfârșit
//-----------------------------------------------
// Contor cu temporizator LED
//-----------------------------------------------
/*
întotdeauna @ (posedge CLK_66 sau negedge RST)
începe
dacă (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
altceva
începe
if (stare [SELECT_MODE])
led_delay_counter <= timer_value;
else if (state [WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
Sfârșit
Sfârșit*/
Pasul 4: Compilați codul Verilog
Apăsați „Start Compilation” în Quartus, nu ar trebui să apară niciun mesaj de eroare.
Dacă primiți un mesaj de eroare despre mai mulți pini. Accesați Teme -> Dispozitiv -> Opțiuni dispozitiv și pin -> Pinuri cu dublu scop -> modificați valoarea pinului corespunzător în „Utilizați ca I / O obișnuite”.
După compilare, ar trebui să obțineți direct fișierul de ieșire pof. Dacă software-ul dvs. nu este actualizat, este posibil să obțineți numai fișier sof. Când se întâmplă, faceți clic pe „Fișier” în Quartus -> „convertiți fișiere de programare”. Schimbați setările marcate cu casete roșii.
Pasul 5: Să încercăm
La urma urmei, ar trebui să funcționeze !!! LED-ul galben este întotdeauna aprins. LED-ul roșu clipește. LED-ul albastru se stinge dacă apăsați butonul B. LED-ul verde este aprins dacă apăsați butonul A