Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε το FPGA για τον έλεγχο του εξωτερικού κυκλώματος LED. Θα υλοποιήσουμε τις ακόλουθες εργασίες
(Α) Χρησιμοποιήστε τα κουμπιά στο FPGA Cyclone IV DuePrologic για τον έλεγχο της λυχνίας LED.
(B) Ανάβει και σβήνει περιοδικά το LED φλας
Επίδειξη βίντεο
Μενού εργαστηρίου:
Βήμα 1: Δημιουργία ηλεκτρονικού κυκλώματος
Βήμα 2: Ελέγξτε το Pin Planner και Edit Verilog Code
Βήμα 3: Επεξεργασία κώδικα Verilog
Όταν αγοράζετε FPGA DueProLogic, θα πρέπει να λάβετε ένα DVD. Αφού ανοίξετε το "Projects_HDL", θα πρέπει να δείτε το αρχικό αρχείο κώδικα
Προσθέστε τον επισημασμένο κώδικα. Καταχωρεί τις θύρες εισόδου/εξόδου και εκχωρεί αριθμούς στις θύρες.
καλώδιο εξόδου [7: 0] XIO_1, // XIO-D2-D9
σύρμα εξόδου [5: 0] XIO_2, // XIO-D10-D12
σύρμα εξόδου [5: 0] XIO_3, // XIO-D22-D29
σύρμα εισόδου [5: 0] XIO_4, // XIO-D30-D37
σύρμα εισόδου [5: 0] XIO_5, // XIO-D38-D45
σύρμα εξόδου [4: 0] XIO_6_OUT, // XIO-D46-D53
σύρμα εισόδου [31: 5] XIO_6, // XIO-D46-D53
καλώδιο εξόδου [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
καλώδιο εισόδου UBA, // Διακόπτες κουμπιού ώθησης
καλώδιο εισόδου UBB // Διακόπτες πλήκτρων
εκχώρηση XIO_1 [3] = start_stop_cntrl;
εκχώρηση XIO_2 [1] = start_blinky; // LED φλας LED ενεργοποίηση και απενεργοποίηση
εκχώρηση XIO_2 [2] = 1'b1; // έξοδος Υ HIGHΗΛΗ
εκχώρηση XIO_2 [3] = ~ UBA; // Πατήστε το κουμπί A
εκχώρηση XIO_2 [4] = UBB; // Πατήστε το κουμπί Β
εκχώρηση c_enable = XIO_5 [2];
εκχώρηση LEDExt = XIO_5 [5];
Στη συνέχεια, πρέπει να ορίσουμε ένα χρονοδιακόπτη καθυστέρησης. Σχολιάστε τον αρχικό κωδικό χρονοδιακόπτη και γράψτε μια νέα λειτουργία χρονομέτρου
//-----------------------------------------------
// Έναρξη Blinky LED
//-----------------------------------------------
/*
πάντα @(posedge CLK_66 ή negedge RST)
να αρχίσει
αν (! RST)
start_blinky <= 1'b0;
αλλού
να αρχίσει
εάν (control_register [7: 4]> 0)
start_blinky <= 1'b1;
αλλού
start_blinky <= 1'b0;
τέλος
τέλος
*/
reg [31: 0] ex?
αρχική έναρξη
ex <= 32'b0;
start_blinky <= 1'b0;
τέλος
πάντα @(posedge CLK_66)
να αρχίσει
ex <= ex + 1'b1;
εάν (πρώην> 100000000) // αναβοσβήνει ενεργοποιημένο/απενεργοποιημένο ~ 1,6 δευτερόλεπτα, ρολόι 66MHz
να αρχίσει
start_blinky <=! start_blinky;
ex <= 32'b0;
τέλος
τέλος
//-----------------------------------------------
// Μετρητής χρονοδιακόπτη καθυστέρησης LED
//-----------------------------------------------
/*
πάντα @(posedge CLK_66 ή negedge RST)
να αρχίσει
αν (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
αλλού
να αρχίσει
εάν (κατάσταση [SELECT_MODE])
led_delay_counter <= timer_value;
αλλιώς εάν (κατάσταση [WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
τέλος
τέλος*/
Βήμα 4: Μεταγλώττιση κώδικα Verilog
Πατήστε "Έναρξη σύνταξης" στο Quartus, δεν πρέπει να δημιουργηθεί μήνυμα σφάλματος.
Εάν λάβετε μήνυμα σφάλματος για πολλές καρφίτσες. Μεταβείτε στις Εκχωρήσεις -> Συσκευή -> Επιλογές συσκευής και καρφίτσας -> Καρφίτσες διπλού σκοπού -> αλλάξτε την τιμή του κατάλληλου πείρου σε "Χρήση ως κανονικός I/O".
Μετά τη μεταγλώττιση, θα πρέπει να λάβετε απευθείας το αρχείο εξόδου pof. Εάν το λογισμικό σας δεν είναι ενημερωμένο, μπορείτε να λάβετε μόνο αρχείο sof. Όταν συμβεί, κάντε κλικ στο "Αρχείο" στο Quartus -> "μετατροπή αρχείων προγραμματισμού". Αλλάξτε τις ρυθμίσεις που επισημαίνονται με κόκκινα πλαίσια.
Βήμα 5: Ας το δοκιμάσουμε
Άλλωστε, πρέπει να δουλεύει !!! Η κίτρινη λυχνία LED είναι πάντα αναμμένη. Η κόκκινη λυχνία LED αναβοσβήνει. Η μπλε λυχνία LED απενεργοποιείται εάν πατήσετε το κουμπί Β. Η πράσινη λυχνία LED ανάβει εάν πατήσετε το κουμπί Α