Débogage système et cross-trigger
Observer le processeur et la logique programmable dans une même expérience de débogage avec ILA, VIO, points d'arrêt et déclenchements croisés.
Deux mondes à observer
Le débogueur logiciel montre les registres du processeur, la mémoire, la pile et les variables C. L'Integrated Logic Analyzer, ou ILA, est un analyseur logique intégré dans la PL. Il enregistre des signaux internes à chaque front d'horloge. Un défaut à l'interface PS vers PL exige souvent les deux observations.
Pour illustrer le débogage croisé, nous proposons un scénario précis. Un compteur logiciel écrit sa valeur dans un AXI GPIO et affiche un message lorsqu'il atteint 0x85. Cette valeur apparaît dans le code C et dans la transaction AXI observée par l'ILA. Elle sert donc de repère commun aux deux captures.
Préparer le matériel
Les signaux utiles doivent être connectés à une ILA ou marqués pour le débogage avant l'implémentation. La profondeur de capture consomme de la BRAM. La largeur des sondes augmente aussi le coût.
Une ILA doit utiliser une horloge représentative des signaux observés. Une sonde asynchrone par rapport à cette horloge peut produire une capture trompeuse.
Le Virtual Input Output, ou VIO, est une autre IP de débogage. Elle permet de lire ou de forcer de petits signaux internes, par exemple un reset ou un mode de test.
Débogage logiciel
Après le lancement de la configuration de débogage, Vitis charge l'ELF et place le point d'arrêt demandé dans main. L'ingénieur peut alors examiner les variables. Pour un défaut d'optimisation, il faut comparer le binaire construit et les options de compilation. Une variable peut être supprimée ou gardée dans un registre.
for (count = 0U; count < 256U; count++) {
XGpio_DiscreteWrite(&gpio, 1, count);
if (count == 0x85U) {
xil_printf("Special count reached\r\n");
}
}Un point d'arrêt sur la condition count == 0x85U arrête le processeur. Une ILA indépendante peut capturer les écritures AXI, mais les deux chronologies ne sont pas encore liées.
Cross-trigger
Le cross-trigger, ou déclenchement croisé, transmet un événement entre les ressources de débogage. Une ILA peut arrêter le processeur, un point d'arrêt logiciel peut lancer une capture et plusieurs ILA peuvent se synchroniser.
Cette fonction répond à deux questions différentes.
| Déclencheur | Résultat | Usage |
|---|---|---|
| Point d'arrêt processeur | Capture ILA | Voir les transactions juste avant une ligne C |
| Condition ILA | Arrêt processeur | Examiner le logiciel quand le matériel observe une anomalie |
| ILA A | ILA B | Corréler deux domaines matériels |
Les signaux de trigger et d'acquittement doivent être configurés dans le Block Design et dans les outils de débogage. Le protocole évite de perdre un événement lorsque plusieurs ressources doivent se synchroniser.
Construire une condition utile
Une bonne condition répond à une hypothèse précise. Pour un périphérique AXI-Lite, on peut détecter une écriture vers l'adresse de données avec la valeur 0x85. Pour un DMA, on peut détecter une réponse AXI en erreur. Pour une interruption, on peut capturer l'activation de la ligne et son acquittement.
Une condition trop générale remplit le buffer avant l'événement. Une condition trop stricte ne se produit jamais. Commencer par un trigger simple puis ajouter une contrainte à la fois.
Fenêtre avant et après déclenchement
L'ILA conserve des échantillons avant et après le trigger. Placer le trigger au centre permet de voir la cause et la conséquence. Pour une séquence longue, il faut adapter la profondeur, réduire le nombre de sondes ou utiliser plusieurs fenêtres.
Le processeur peut continuer quelques cycles avant que l'arrêt soit visible. Le cross-trigger n'efface pas les latences de distribution et de capture. Il fournit une corrélation exploitable, pas une simultanéité mathématique.
Méthode de diagnostic
Formuler d'abord l'invariant attendu. Identifier ensuite un signal logiciel et un signal matériel qui le représentent. Construire le trigger le plus simple. Capturer une exécution correcte avant d'étudier l'échec. Comparer enfin les adresses, les données, les réponses AXI et l'état du pilote.
Références officielles
Le guide Vivado Programming and Debugging UG908 décrit le cross-trigger avec ILA et la méthode pour sonder une conception.
À retenir
Le débogueur logiciel explique l'état du processeur. L'ILA explique les signaux de la PL. Le cross-trigger relie les événements. Une capture utile part d'une hypothèse et d'une condition précise.
Tester mes connaissances - Quiz du chapitre