Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Dans ce tutoriel, nous allons utiliser le FPGA pour contrôler le circuit LED externe. Nous allons mettre en œuvre les tâches suivantes
(A) Utilisez les boutons-poussoirs du FPGA Cyclone IV DuePrologic pour contrôler la LED.
(B) Flash LED allumé et éteint périodiquement
Démo vidéo
Menu du laboratoire:
Étape 1: Construire un circuit électronique
Étape 2: Vérifiez le Pin Planner et modifiez le code Verilog
Étape 3: Modifier le code Verilog
Lorsque vous achetez FPGA DueProLogic, vous devriez recevoir un DVD. Après avoir ouvert "Projects_HDL", vous devriez voir le fichier de code d'origine
Ajoutez le code en surbrillance. Il enregistre les ports d'E/S et attribue des numéros aux ports.
fil de sortie [7:0] XIO_1, //XIO -- D2-D9
fil de sortie [5:0] XIO_2, //XIO -- D10-D12
fil de sortie [5:0] XIO_3, //XIO -- D22-D29
fil d'entrée [5:0] XIO_4, //XIO -- D30-D37
fil d'entrée [5:0] XIO_5, //XIO -- D38-D45
fil de sortie [4:0] XIO_6_OUT, //XIO -- D46-D53
fil d'entrée [31:5] XIO_6, //XIO -- D46-D53
fil de sortie [2:0] XIO_7, //XIO -- D69, D70, D71, D74, D75, D76
fil d'entrée UBA, //Commutateurs à bouton-poussoir
fil d'entrée UBB //Commutateurs à bouton-poussoir
assigner XIO_1[3] = start_stop_cntrl;
assigner XIO_2[1] = start_blinky; // LED flash LED allumé et éteint
affecter XIO_2[2] = 1'b1; //sortie HAUT
assigner XIO_2[3] = ~UBA; //Appuyez sur le bouton A
affecter XIO_2[4] = UBB; //Appuyez sur le bouton B
assigner c_enable = XIO_5[2];
affecter LEDExt = XIO_5[5];
Ensuite, nous devons définir une minuterie de retard. Commentez le code de minuterie d'origine et écrivez une nouvelle fonction de minuterie
//-----------------------------------------------
// LED clignotant démarrage
//-----------------------------------------------
/*
toujours @(posedge CLK_66 ou negedge RST)
commencer
si(!RST)
start_blinky <= 1'b0;
autre
commencer
if(control_register[7:4] > 0)
start_blinky <= 1'b1;
autre
start_blinky <= 1'b0;
finir
finir
*/
reg [31:0] ex;
début initial
ex <= 32'b0;
start_blinky <= 1'b0;
finir
toujours @(posedge CLK_66)
commencer
ex <= ex + 1'b1;
if(ex> 100000000) //flash on/off ~1.6 secondes, horloge 66MHz
commencer
start_blinky <= !start_blinky;
ex <= 32'b0;
finir
finir
//-----------------------------------------------
// Compteur de temporisation LED
//-----------------------------------------------
/*
toujours @(posedge CLK_66 ou negedge RST)
commencer
si(!RST)
led_delay_counter <= TIMER_LOW_LIMIT;
autre
commencer
if(état[SELECT_MODE])
led_delay_counter <= timer_value;
sinon si (état[WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
finir
finir*/
Étape 4: Compiler le code Verilog
Appuyez sur "Démarrer la compilation" dans Quartus, aucun message d'erreur ne devrait être généré.
Si vous recevez un message d'erreur concernant plusieurs broches. Accédez à Affectations -> Périphérique -> Options de périphérique et de broche -> Broches à double usage -> modifiez la valeur de la broche appropriée en "Utiliser comme E/S normales".
Après la compilation, vous devriez obtenir directement le fichier de sortie pof. Si votre logiciel n'est pas à jour, vous pouvez obtenir uniquement le fichier sof. Lorsque cela se produit, cliquez sur "Fichier" dans Quartus -> "convertir les fichiers de programmation". Modifiez les paramètres qui sont marqués par des cases rouges.
Étape 5: Essayons-le
Après tout, ça devrait marcher !!! La LED jaune est toujours allumée. La LED rouge clignote. La LED bleue s'éteint si vous appuyez sur le bouton B. La LED verte s'allume si vous appuyez sur le bouton A