Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
In diesem Tutorial werden wir den FPGA verwenden, um eine externe LED-Schaltung zu steuern. Folgende Aufgaben werden wir umsetzen
(A) Verwenden Sie die Drucktasten des FPGA Cyclone IV DuePrologic, um die LED zu steuern.
(B) Blinkt LED periodisch ein und aus
Videodemo
Labormenü:
Schritt 1: Elektronische Schaltung aufbauen
Schritt 2: Überprüfen Sie den Pin-Planer und bearbeiten Sie den Verilog-Code
Schritt 3: Verilog-Code bearbeiten
Wenn Sie FPGA DueProLogic kaufen, sollten Sie eine DVD erhalten. Nachdem Sie "Projects_HDL" geöffnet haben, sollten Sie die ursprüngliche Codedatei sehen
Fügen Sie den markierten Code hinzu. Es registriert die I/O-Ports und weist den Ports Nummern zu.
Ausgangsleitung [7:0] XIO_1, //XIO -- D2-D9
Ausgangsleitung [5:0] XIO_2, //XIO -- D10-D12
Ausgangsleitung [5:0] XIO_3, //XIO -- D22-D29
Eingangsleitung [5:0] XIO_4, //XIO -- D30-D37
Eingangsleitung [5:0] XIO_5, //XIO -- D38-D45
Ausgangsleitung [4:0] XIO_6_OUT, //XIO -- D46-D53
Eingangsleitung [31:5] XIO_6, //XIO -- D46-D53
Ausgangsleitung [2:0] XIO_7, //XIO -- D69, D70, D71, D74, D75, D76
Eingangskabel UBA, // Drucktastenschalter
Eingangsdraht UBB // Drucktastenschalter
zuweisen XIO_1[3] = start_stop_cntrl;
zuweisen XIO_2[1] = start_blinky; // LED-Blitz-LED an und aus
zuweisen XIO_2[2] = 1'b1; // Ausgang HIGH
zuweisen XIO_2[3] = ~UBA; //Taste A. drücken
zuweisen XIO_2[4] = UBB; //Taste B. drücken
c_enable zuweisen = XIO_5[2];
zuweisen LEDExt = XIO_5[5];
Dann müssen wir einen Verzögerungstimer einstellen. Kommentieren Sie den ursprünglichen Timer-Code und schreiben Sie eine neue Timer-Funktion
//-----------------------------------------------
// LED Blinky start
//-----------------------------------------------
/*
immer @(posege CLK_66 oder negge RST)
Start
wenn(!RST)
start_blinky <= 1'b0;
anders
Start
if(control_register[7:4] > 0)
start_blinky <= 1'b1;
anders
start_blinky <= 1'b0;
Ende
Ende
*/
reg [31:0] ex;
anfänglicher Anfang
ex <= 32'b0;
start_blinky <= 1'b0;
Ende
immer @(posege CLK_66)
Start
ex <= ex + 1'b1;
if (ex > 1000000000) // Blitz ein/aus ~ 1,6 Sekunden, Takt 66MHz
Start
start_blinky <= !start_blinky;
ex <= 32'b0;
Ende
Ende
//-----------------------------------------------
// LED-Verzögerungs-Timer-Zähler
//-----------------------------------------------
/*
immer @(posege CLK_66 oder negge RST)
Start
wenn(!RST)
led_delay_counter <= TIMER_LOW_LIMIT;
anders
Start
if(state[SELECT_MODE])
led_delay_counter <= Timer_Wert;
sonst if(state[WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
Ende
Ende*/
Schritt 4: Verilog-Code kompilieren
Drücken Sie in Quartus auf "Kompilierung starten", es sollte keine Fehlermeldung generiert werden.
Wenn Sie eine Fehlermeldung über mehrere Pins erhalten. Gehen Sie zu Zuweisungen -> Gerät -> Geräte- und Pinoptionen -> Dual-Purpose-Pins -> ändern Sie den Wert des entsprechenden Pins auf "Als reguläre E/A verwenden".
Nach der Kompilierung sollten Sie die pof-Ausgabedatei direkt erhalten. Wenn Ihre Software nicht auf dem neuesten Stand ist, erhalten Sie möglicherweise nur die sof-Datei. Wenn es passiert, klicken Sie in Quartus auf "Datei" -> "Programmdateien konvertieren". Ändern Sie die Einstellungen, die durch rote Kästchen gekennzeichnet sind.
Schritt 5: Versuchen wir es
Schließlich sollte es funktionieren!!! Die gelbe LED leuchtet immer. Die rote LED blinkt. Die blaue LED wird ausgeschaltet, wenn Sie die Taste B drücken. Die grüne LED wird eingeschaltet, wenn Sie die Taste A drücken