Aller au contenu

Dépannage

Commencez toujours par la première erreur. Les suivantes sont souvent des conséquences.

Erreurs d'analyse et de type

« No declaration for … »

Vérifiez :

  • orthographe et portée ;
  • clauses library/use ;
  • paquetage analysé avant son utilisateur ;
  • signal déclaré dans la région déclarative ;
  • fichier configuré en VHDL-2008.

« Cannot resolve overloaded … »

Le compilateur voit plusieurs types ou opérateurs possibles. Rendez l'intention explicite :

count_s <= unsigned(raw_s) + to_unsigned(1, count_s'length);

Supprimez les anciens paquetages arithmétiques et gardez numeric_std.

Largeur incompatible

Vérifiez à la fois le type et la longueur :

wide_s <= resize(narrow_s, wide_s'length);

Pour conserver la retenue d'une addition, étendez les opérandes avant l'opération.

Incompatibilité signed/unsigned

Ne multipliez pas les conversions au hasard jusqu'à ce que le code compile. Décidez du sens numérique puis convertissez à la frontière.

Erreurs d'élaboration

Unité absente de la bibliothèque

  • Analyser la source avant le banc.
  • Vérifier la bibliothèque : xvhdl autonome utilise par défaut work, tandis qu'un projet Vivado emploie souvent xil_defaultlib.
  • Vérifier l'entité et l'architecture.
  • Contrôler l'ordre des dépendances.

Port ou générique incompatible

Les associations nommées rendent le problème visible. Comparez nom, direction, type et largeur.

Mauvais sommet de simulation

Le sommet doit être l'entité du banc sans port, pas l'entité de conception.

Problèmes de simulation

Signal bloqué à U

Causes possibles :

  • aucun pilote ;
  • processus pas encore réveillé ;
  • initialisation/reset absent ;
  • mauvais port map ;
  • test terminé trop tôt.

Signal à X

  • pilotes en conflit ;
  • entrée inconnue propagée ;
  • état non initialisé ;
  • contention de bus.

Recherchez la première inconnue en amont, pas seulement la sortie finale.

Sortie décalée d'un cycle

Demandez-vous :

  • la sortie est-elle volontairement enregistrée ?
  • le banc lit-il avant le cycle delta suivant le front ?
  • un étage de pipeline est-il prévu ?
  • une affectation de signal utilise-t-elle l'ancienne valeur ?

Simulation infinie

  • Ajouter std.env.finish.
  • Ajouter un watchdog.
  • Examiner les conditions wait et l'horloge.
  • N'utiliser xsim -R qu'avec un banc qui se termine ou une durée imposée.

Assertion affichée mais commande réussie

  • Vérifier la sévérité et les réglages d'arrêt.
  • Contrôler $LASTEXITCODE.
  • Injecter volontairement un mauvais résultat pour tester le lanceur.
  • En CI stricte, analyser le journal ou employer un framework.

Fichier de vecteurs introuvable

  • Le répertoire de travail diffère de celui des sources.
  • Fournir un chemin absolu normalisé par générique.
  • Vérifier présence et orthographe.
  • Afficher le chemin choisi au démarrage du test.

Problèmes de synthèse

Latch inféré

Une sortie combinatoire n'est pas affectée sur tous les chemins. Donnez des valeurs par défaut et couvrez chaque branche.

Pilotes multiples

Attribuez le signal interne depuis une seule source. Construisez un mux ou un arbitre explicite.

Logique supprimée

La synthèse ne voit aucun effet observable ou prouve une constante. Reliez le résultat à une sortie ou un registre, contrôlez les génériques et le sommet.

BRAM ou DSP non inféré

Le style de code, le reset, les largeurs ou le timing de lecture peuvent ne pas correspondre au patron d'inférence. Comparez avec les techniques de codage de la version Vivado utilisée.

Implémentation et timing

Horloge ou chemin non contraint

  • Ajouter create_clock sur le bon port.
  • Définir les horloges générées.
  • Ajouter les délais I/O valides.
  • Examiner report_clocks et les sélections d'objets.

Setup négatif

Vérifier d'abord les contraintes, puis chercher longue logique, fanout, routage, pipeline manquant ou relation d'horloge invalide.

Échec hold

Vérifier horloges et exceptions. N'ajoutez pas une chaîne de retard en RTL ; l'implémentation gère le délai physique une fois le modèle correct.

Avertissements CDC

Classer chaque traversée et employer synchroniseur, handshake, Gray ou FIFO. Ne supprimez pas tout le rapport.

Bitstream bloqué par les E/S

Chaque port utilisé doit avoir une broche et un I/O standard. Partez du XDC maître et alignez exactement les noms.

Différence entre carte et simulation

Vérifiez dans cet ordre :

  1. Bon bitstream et bon sommet.
  2. Alimentation et JTAG.
  3. Broches et polarités XDC.
  4. Horloge réelle et contrainte.
  5. Libération du reset.
  6. Synchronisation/anti-rebond.
  7. Timing d'implémentation.
  8. Largeur et signe.
  9. Observation par LED, UART ou ILA.

Causes typiquement physiques :

  • rebond ;
  • métastabilité/CDC dangereuse ;
  • mauvaise broche ou polarité active à zéro ;
  • violation temporelle ;
  • incompatibilité électrique ;
  • ancien bitstream programmé.

Carte non détectée

  • Utiliser un câble USB capable de transporter des données.
  • Vérifier alimentation et cavaliers.
  • Vérifier les pilotes.
  • Fermer les autres applications JTAG.
  • Rafraîchir le serveur matériel.

Informations à fournir pour demander de l'aide

  • Première erreur exacte et lignes voisines.
  • Version Vivado.
  • Composant FPGA.
  • Source/banc minimal.
  • Commande exécutée.
  • XDC lié au port ou à l'horloge.
  • Partie pertinente du rapport timing/CDC.
  • Résultat attendu et résultat observé.