Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Ce tutoriel vous guide dans l'utilisation des cœurs Integrated Logic Analyzer (ILA) et Virtual Input/Output (VIO) de Xilinx Vivado pour déboguer et surveiller des conceptions VHDL directement sur la puce. À la fin, vous saurez comment insérer des sondes, configurer des déclencheurs et capturer le comportement précis des signaux sans équipement externe.

Vue d'ensemble

Tout au long de l'article, nous ferons référence à des captures d'écran de Vivado. Cliquez sur chaque image pour l'agrandir. Utilisez la barre latérale ou la navigation contextuelle mobile pour un accès rapide.

ILA et VIO

L'IP ILA permet de sonder les signaux internes du FPGA en temps réel, tandis que l'IP VIO permet de piloter des signaux internes depuis Vivado. Les deux sont gratuits, hautement configurables et s'intègrent parfaitement au flux de travail Vivado.

Prérequis

  1. Une carte d'évaluation FPGA Xilinx
  2. La suite Vivado Design Suite (version 2020.2 ou ultérieure)
  3. Connaissances de base en VHDL

Nous utiliserons le kit d'évaluation Kintex‑7 KC705 dans les exemples, mais les étapes s'appliquent à tout FPGA Xilinx moderne.

Télécharger le projet exemple

Téléchargez l'archive ZIP contenant la conception exemple et les fichiers VHDL. Ouvrez ila_tutorial.xpr dans Vivado pour explorer la conception, ou continuez la lecture pour la créer à partir de zéro.

Créer un projet avec Vivado

Lancez Vivado et cliquez sur Create Project sur l'écran d'accueil.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Suivez l'assistant : nommez le projet ila_tutorial (sans espaces), sélectionnez RTL Project, et ajoutez les sources counter.vhdl et counter_top.vhdl. Activez Copy sources into project et continuez.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Ajoutez le fichier de contraintes top.xdc en le copiant dans le projet. Adaptez les broches d'horloge et de LED à votre carte, et définissez la période d'horloge correcte.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Sélectionnez votre carte dans la liste et cliquez sur Finish pour ouvrir le projet.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Présentation de la conception exemple

L'exemple consiste en deux compteurs 4 bits chaînés. counter.vhdl implémente un compteur qui s'incrémente lorsqu'il est activé et affirme une sortie trigger 1 bit entre les valeurs 12 et 15.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Déclaration d'entité :

 ---------------------------------------------------------------------------- -- DÉCLARATION D'ENTITÉ. ---------------------------------------------------------------------------- ENTITY counter IS PORT(clk : IN STD_LOGIC; -- Horloge principale reset : IN STD_LOGIC; -- Reset, actif haut enable : IN STD_LOGIC; -- Active le compteur suivant trigger : OUT STD_LOGIC -- Déclenche le compteur suivant ); END ENTITY; 

Signaux internes :

Utilisation d'attributs (expliquée plus loin) :

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

Logique séquentielle :

 seq_proc: PROCESS (reset, clk) BEGIN -- for seq_proc IF (reset = '1') THEN count <= (OTHERS => '0'); trigger_o <= '0'; ELSIF rising_edge(clk) THEN IF (enable = '1') THEN count <= count + 1; IF (count > x"B" AND count <= x"F") THEN trigger_o <= '1'; ELSE trigger_o <= '0'; END IF; END IF; END IF; END PROCESS; 

counter_top.vhdl instancie deux compteurs. counter_1_inst est toujours activé et horloge counter_2_inst via sa sortie trigger. Par conséquent, counter_2_inst s'incrémente seulement quatre fois par cycle de 16 coups d'horloge de counter_1_inst.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Créer un cœur VIO pour RESET

Nous allons générer un VIO qui pilote l'entrée reset de la conception, permettant une bascule manuelle depuis Vivado.

Ouvrez le Catalogue IP, recherchez VIO, double-cliquez sur VIO (Virtual Input/Output), et renommez-le en vio_reset. Réglez Input Probe Count à 0 et Output Probe Count à 1.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Configurez la sonde de sortie : largeur = 1, valeur initiale = 0x1, puis cliquez sur OK et Generate.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Après la synthèse, déclarez un composant dans counter_top.vhdl et instanciez-le. N'oubliez pas de régler flatten_hierarchy sur None avant de relancer la synthèse.

 COMPONENT vio_reset PORT( clk : IN STD_LOGIC; probe_out0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) ); END COMPONENT; 

Insérer des sondes de débogage

Les signaux peuvent être sondés via trois méthodes :

  1. Depuis le source VHDL (via les attributs MARK_DEBUG).
  2. Depuis le netlist ou le schéma (clic droit Mark Debug).
  3. Depuis un fichier XDC/TCL (non couvert ici).

Insertion depuis le fichier VHDL

Déclarez l'attribut MARK_DEBUG une fois par fichier, puis appliquez-le aux signaux souhaités :

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

Dans la conception synthétisée, count apparaîtra sous Unassigned Debug Nets avec une icône de bug.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Insertion depuis le netlist

Naviguez vers Netlist ou Schematic, localisez le net trigger, clic droit, et choisissez Mark Debug pour les deux compteurs.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Créer le cœur de débogage ILA

Ouvrez Set Up Debug depuis le Catalogue IP. Vivado listera tous les nets de débogage et leurs domaines d'horloge. Conservez les quatre signaux pour ce tutoriel.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Configurez la profondeur FIFO de l'ILA (1024 suffit) et activez Capture control. Terminez l'assistant ; Vivado génère un cœur ILA et un fichier de contraintes.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Sauvegardez les contraintes sous ila_core.xdc. Ce fichier applique les attributs de débogage, crée le cœur ILA, configure chaque sonde, et instancie un dbg_hub qui relie le cœur à Vivado. Mettez à jour la fréquence d'horloge du hub pour qu'elle corresponde à votre conception.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Relancez la synthèse, puis l'implémentation, et générez le bitstream. Ouvrez le Hardware Manager, connectez-vous automatiquement, et programmez le dispositif ainsi que le fichier de sondes .ltx.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Configurer les déclencheurs ILA

Après la programmation, le tableau de bord ILA apparaît. Activez l'onglet VIO et supprimez les fenêtres inutiles. Ajoutez la sonde reset au VIO pour pouvoir la basculer pendant la capture.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Configurez un déclencheur sur counter_1_inst/trigger avec une condition de front montant et une fenêtre de pré-déclenchement de 32 échantillons.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Exécuter l'ILA avec un déclencheur

Armez le déclencheur (le statut passe à waiting for trigger) et mettez reset à 0. Une fois le déclencheur activé, l'ILA enregistre 32 échantillons avant l'événement et continue jusqu'à ce que le FIFO soit plein.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

En dézoomant, on observe également le comportement de counter_2_inst.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Exécuter l'ILA avec plusieurs déclencheurs

Pour les scénarios complexes, chaînez plusieurs déclencheurs. Par exemple, déclenchez lorsque counter_1_inst/count == 9 et counter_2_inst/count > 2, en divisant le FIFO en quatre fenêtres.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Mode de ré-déclenchement automatique

Activez Auto re‑trigger pour capturer des événements sporadiques ou à haute fréquence. Configurez un seul déclencheur, définissez la profondeur FIFO, et armez le cœur.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Mode de capture

Le mode capture n'enregistre que les échantillons satisfaisant une condition globale. Par exemple, capturer lorsque counter_1_inst/trigger == 1 ET counter_2_inst/trigger == 0 simultanément.

Maîtriser Xilinx Vivado : Analyseur de logique intégré (ILA) et Entrée/Sortie virtuelle (VIO) pour le débogage

Conclusion

L'ILA et le VIO sont des outils puissants et gratuits pour le débogage sur puce. En exploitant les sondes, les déclencheurs multiples et les modes de capture, vous pouvez surveiller et contrôler précisément des conceptions FPGA complexes directement depuis Vivado.

VHDL

  1. Maîtriser VHDL et Verilog : écrire une logique combinatoire et séquentielle propre
  2. Élargir les horizons cloud : nouvelles zones, conteneurs, et stratégies multicloud
  3. Fondamentaux C# : Entrées et sorties essentielles
  4. Maîtriser l'entrée/sortie en C++ : Guide pratique
  5. Maîtriser l'entrée/sortie en C : scanf() et printf() expliqués
  6. Maîtriser les E/S et l'importation de modules en Python : Guide pratique
  7. Maîtriser l'entrée/sortie Java : Afficher, lire et formater vos données
  8. Maîtriser les verrous D : Conception, Fonctionnement et Différences Clés
  9. Maîtriser les entrées/sorties en C : Fonctions standards et fichiers