Aller au contenu

Vérification avancée

VHDL simple et XSim suffisent à de nombreux projets universitaires. Les frameworks deviennent utiles avec beaucoup de bancs, de configurations, de composants de vérification réutilisables ou de résultats CI.

VUnit

VUnit est piloté par Python et offre :

  • découverte et sélection des tests ;
  • bibliothèques de vérification et journalisation ;
  • configurations paramétrées ;
  • exécution parallèle ;
  • résultats xUnit XML ;
  • intégration depuis un script Python.

Point de compatibilité : la documentation actuelle cite GHDL, NVC, ModelSim/Questa, Riviera-PRO et Active-HDL, mais pas Vivado XSim.

Méthode recommandée :

  • conserver les scripts XSim natifs de cette bibliothèque ;
  • utiliser GHDL ou un simulateur pris en charge si vous adoptez VUnit ;
  • recompiler les conceptions importantes avec XSim lorsque l'accord avec le flux constructeur est nécessaire.

OSVVM

OSVVM fournit :

  • RandomPkg pour le pseudo-aléatoire contraint ;
  • CoveragePkg pour la couverture fonctionnelle ;
  • des scoreboards ;
  • AlertLogPkg pour contrôles et rapports ;
  • utilitaires d'horloge, reset et transactions ;
  • scripts de régression et sorties CI.

Le projet OSVVM Scripts indique encore que la prise en charge de XSim est en développement/débogage. Utilisez donc de préférence GHDL ou Questa pour un usage sérieux d'OSVVM et considérez XSim comme expérimental dans ce cadre.

GHDL

GHDL est un simulateur VHDL libre adapté à :

  • tests rapides en ligne de commande ;
  • apprentissage de VUnit et OSVVM ;
  • CI sans installation Vivado ;
  • contrôle de portabilité entre simulateurs.

Vivado reste nécessaire pour synthèse, implémentation et analyse temporelle sur Artix-7.

Aléatoire contraint

Générez des transactions légales tout en privilégiant :

  • longueurs proches des minima et maxima ;
  • motifs de backpressure ;
  • reset en activité ;
  • FIFO presque pleine ou vide ;
  • limites de signe et overflow.

Enregistrez graine et configuration. La couverture permet de savoir quelles situations ont réellement été rencontrées.

Couverture fonctionnelle

La couverture de code demande quelles structures ont été exécutées. La couverture fonctionnelle demande quelles situations de la spécification ont eu lieu :

  • chaque état et transition ;
  • chaque commande ;
  • tailles minimale, typique et maximale ;
  • croisement opération × overflow × backpressure ;
  • reset au repos et pendant l'activité.

La couverture ne prouve pas la correction ; elle mesure le plan exercé.

Scoreboards

Un scoreboard :

  1. reçoit les transactions prévues ;
  2. reçoit les transactions observées ;
  3. les associe par ordre ou identifiant ;
  4. vérifie champs et délais ;
  5. signale sorties absentes, inattendues, tardives ou différentes.

Pour une exécution hors ordre, associez par identifiant et non par position dans une file.

Types protégés

Les types protégés VHDL gèrent un état partagé de manière contrôlée. Ils conviennent aux files, bases de couverture et synchronisations de banc de test, contrairement aux variables partagées sans protection.

Méthodes formelles

La vérification formelle explore tous les comportements d'un modèle mathématique. Exemples de propriétés :

  • une FIFO ne sous-déborde jamais sous usage légal ;
  • une requête reçoit une réponse sous N cycles ;
  • deux sorties mutuellement exclusives ne sont jamais actives ensemble ;
  • une FSM ne se bloque pas.

Les assertions et invariants écrits aujourd'hui préparent ce raisonnement.

Quand adopter un framework ?

Restez en VHDL/XSim simple lorsque quelques petits bancs et scripts donnent un verdict clair.

Adoptez VUnit ou OSVVM lorsque :

  • beaucoup de tests doivent être découverts, filtrés ou parallélisés ;
  • le code de journalisation devient dominant ;
  • couverture et aléatoire contraint sont importants ;
  • la CI exige un format de résultats ;
  • les composants de vérification doivent être réutilisés.

Comprenez d'abord assertions, pilotes, moniteurs, modèles et scoreboards : le framework les organise, il ne les remplace pas.