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.
Chargement…
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.
Le débogueur montre l'état du logiciel ; l'ILA capture les signaux de la PL. Pour un défaut entre PS et PL, cherchez un événement observable des deux côtés.
Raccordez les sondes à l'ILA ou marquez les signaux avant l'implémentation. Largeur et profondeur consomment des ressources, notamment BRAM. Son horloge doit convenir aux signaux capturés ; un bus asynchrone peut donner une image incohérente.
VIO permet de lire ou de piloter de petits signaux internes, comme un mode de test. Vérifiez qu'un forçage de debug n'entre pas en conflit avec une autre commande.
Dans ce fragment, le processeur écrit un compteur dans AXI GPIO :
for (count = 0U; count < 256U; count++) {
XGpio_DiscreteWrite(&gpio, 1, count);
if (count == 0x85U) {
xil_printf("Special count reached\r\n");
}
}La valeur 0x85 sert de repère dans le code et dans la transaction AXI. Un point d'arrêt près de cette condition montre les variables, sous réserve de l'optimisation du binaire. Une variable peut être supprimée ou conservée uniquement dans un registre.
| 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 |
Le cross-trigger transmet un événement entre processeur et ressources PL, ou entre ILA. Configurez les signaux de déclenchement et d'acquittement dans le design et les outils.
Il corrèle les observations sans rendre les événements exactement simultanés : distribution, capture et arrêt ont une latence. Le processeur peut continuer avant que son arrêt devienne effectif.
Commencez par une hypothèse : écriture d'une adresse avec 0x85, réponse AXI en erreur ou interruption non acquittée. Pour une écriture, respectez l'indépendance des canaux d'adresse et de données ; leurs handshakes ne se produisent pas forcément au même cycle.
Une condition trop large remplit la capture trop tôt ; une condition trop stricte ne déclenche pas. Ajoutez les critères progressivement.
Placez une fenêtre avant et après l'événement pour voir cause et conséquence. Une séquence longue peut demander moins de sondes, plus de profondeur ou plusieurs captures.
Formulez l'invariant, identifiez ses représentations logicielle et matérielle, puis capturez un cas correct avant l'échec. Comparez adresses, données, réponses AXI et état du pilote. Cette méthode rend les deux vues complémentaires.
UG908 décrit le cross-trigger ILA et les sondes de debug.
Tester mes connaissances - Quiz du chapitre