Chap 3 Vérification fonctionnelle 2) Couverture avec System Verilog INF8500 SE: Conception et vérification Plan • Introduction (modèle de progrès couverture) • Couverture structurelle • Couverture fonctionnelle • Groupe, sondes et couverture croisées • Exemples et 2 INF8500 SE: Conception et vérification 1 Modèle de progrès • Bien que le plan de vérification cible qu’est-ce qui doit être vérifié et comment il doit être vérifié, il est nécessaire de pouvoir aussi mesurer le progrès. • Pour la simulation, nous avons trois classes de métriques de couverture: – Ad hoc – Structurelles (e.g. code) – Fonctionnelles (e.g. fonctionnalités) INF8500 SE: Conception et vérification Modèle de progrès INF8500 SE: Conception et vérification 2 Modèle de progrès INF8500 SE: Conception et vérification Couverture Ad hoc • Détection de bugs • Temps de simulation après la découverte du dernier bug • Le nombre total de cycles de simulation • Ces métriques ne donnent aucune information qualitative sur le pourcentage de la spécification non vérifié. INF8500 SE: Conception et vérification 3 Couverture structurelle • La couverture de code (en anglais code coverage) est une mesure utilisée en génie logiciel pour décrire le taux de code source testé d'un programme. • Ceci permet de mesurer la qualité des tests effectués. • Seulement le code pour le DUTdoit être couvert. • Le code du testbenches doit être tracé pour confirmer qu’il a été exécuté (une portion du code non exécutée va conduire à une partie du DUT non vérifiée). INF8500 SE: Conception et vérification Exemple de couverture de code • • • • • • • • • Statement coverage Toggle Coverage State machine coverage Visited State coverage Event Coverage Branch coverage Expression Coverage Path Coverage Signal Coverage • See ModelSim(Questa) INF8500 SE: Conception et vérification 4 Venant de wikipedia • Couverture des fonctions (Function coverage) - Chaque fonction dans le programme ont-elles été appelée? • Couverture des instructions (Statement Coverage) - Chaque ligne du code a-t-elle été exécutée et vérifiée ? • Couverture des points de tests (Condition Coverage) - Chaque point d'évaluation (tel que le test d'une variable) a-t-il été exécuté et vérifié ? (Le point de test teste-t-il ce qu'il faut ?) • Couverture des chemins d'exécution (Path Coverage) - Chaque parcours possible (par exemple les 2 cas vrai et faux d'un test) a-t-il été exécuté et vérifié ? INF8500 SE: Conception et vérification Exemples pour instructions, chemins d’exécution et expressions INF8500 SE: Conception et vérification 5 Couverture fonctionnelle • La couverture fonctionnelle est une métrique qui reflète le degré de vérification de chaque fonctionalité. • Autrement dit on veut s’assurer chaque fonctionnalité a été vérifiée par au moins un cas de test. INF8500 SE: Conception et vérification Couverture fonctionnelle – Métriques typiques • • • • • Espace d’adressage Code d’opération Niveau d’occupation d’un FIFO Le jeu de données pour une opération donnée Assertion (décrit un peu plus loin) – La couverture fonctionnelle est fonction du contexte. INF8500 SE: Conception et vérification 6 Couverture fonctionnelle • La couverture fonctionnelle ne prouve pas que la conception est correctement exécuté, juste qu'il a été exercé. C'est le travail du banc d'essai pour prouver la bonne exécution (scoreboard). • Métrique plus complexe à identifier et à analyser que la couverture structurelle. INF8500 SE: Conception et vérification Couverture fonctionnelle • L'expérience a montré une corrélation étroite entre la couverture fonctionnelle et la métrique déverminage (bogues / semaine). INF8500 SE: Conception et vérification 7 Limitations de la couverture fonctionnelle • La connaissance du fonctionnement pour vérifier est limitée par la spécification et la connaissance de la conception. • Il n'y a pas une liste définie à 100% de la fonctionnalité et par conséquent il peut y avoir une fonctionnalité qui n'est pas dans la liste. • Il n'y a pas de véritable moyen de vérifier qu'un modèle de couverture est correcte sauf la vérification manuelle. • L'efficacité de la couverture fonctionnelle est limitée à la connaissance du designer. 15 INF8500 SE: Conception et vérification Interprétation des métriques (Measuring Completeness) Il faut peut être revoir votre plan de vérification Il faut peut être voir du coté de la vérification formelle INF8500 SE: Conception et vérification 8 Couverture fonctionnelle en SV • Il y a 3 constructions pour la couverture fonctionnelle en SV: covergroup, coverpoint et cross • Un modèle de couverture en SV est une construction hiérarchique à deux niveaux: un groupe de couverture (covergroup) rassemble les sondes (coverpoint). Les sondes se rapportent à des variables tandis que les groupes définit les conditions d’observation. • Il est possible de former des mesures croisées (cross) entre plusieurs groupes ou sondes. INF8500 SE: Conception et vérification Le Covergroup • Le covergroup intègre la spécification d’un modèle de couverture. • Il s’agit d’un type user-defined • Le type est défini et plusieurs instances peuvent être crées dans différents contexte. • Similaire à une classe, une fois défini, une instance de covergroup peut être créé en utilisant l’opérateur new. • Un covergroup peut être défini dans: – – – – Module, Program Interface Class INF8500 SE: Conception et vérification 9 Le Covergroup • Chaque spécification de covergroup peut inclure les éléments suivants – Un événement de synchronisation qui synchronise l'échantillonnage des points de couverture • On peut synchroniser le groupe de couverture sur un évènement particulier, e.g. sur un front montant d’horloge, au moyen de l’opérateur @ • Demander explicitement l’échantillonnage en appelant la méthode sample définie pour chaque groupe – Un ensemble de points de couverture – La couverture croisée entre les points de couverture – Options de couverture INF8500 SE: Conception et vérification Le Covergroup • Synchronisation sur un évènement: • Demande explicite de sample: INF8500 SE: Conception et vérification 10 Le Coverpoint (sondes) • Peut être une variable ou une expression • Chaque couverture contient un ensemble de boites (bins) associé à un ensemble de valeurs ou de transition. – Au moins une occurrence doit être trouvée par boite. – Les boites (bins) peuvent être définis par le concepteur ou générés par l’outil. INF8500 SE: Conception et vérification Coverage example program automatic test(busifc.TB ifc); class Transaction; rand bit [31:0] data; rand bit [ 2:0] port; // Eight port numbers endclass covergroup CovPort; coverpoint tr.port; // Measure coverage endgroup (suite) initial begin Transaction tr; CovPort ck; ck = new(); // Instantiate group tr = new(); repeat (32) begin / / Run a few cycles assert(tr.randomize); // Create a transaction ifc.cb.port <= tr.port; // and transmit ifc.cb.data <= tr.data; // onto interface ck.sample(); // Gather coverage @ifc.cb; // Wait a cycle end end endprogram INF8500 SE: Conception et vérification 11 Coverage report example (VCS) La couverture est complète si, pour chaque covertpoint (sonde), au moins une occurrence de chaque valeur ou intervalle de valeurs a été observée. Seul le port 0 n’est pas exercé donc 78 de la couverture est atteinte. INF8500 SE: Conception et vérification Coverage report example (VCS) Avec 1 itérations de plus on arrive à 100% de couverture INF8500 SE: Conception et vérification 12 Bins (Boîtes) • SystemVerilog divise en un maximum de boites: auto_bin_max_bins • La valeur de défaut de auto_max_bins est 64 • Par exemple, une variable 16 bits (65,536 possibilités) offrira 64 bins de 1,024 valeurs. • On peut modifier le défaut: On a ici 2 boîtes: 0 à 3 et 4 à 7 INF8500 SE: Conception et vérification Autres exemples de bins bit [15:0] i; covergroup cg_Short @(posedge Clock); c : coverpoint i; endgroup //The simulator could potentially create 216 bins for the coverpoint. //(In fact, there is a //default of a maximum of 64 automatically created bins.) // It would probably be more useful to define some bins to hold specific values or ranges of values: covergroup cg_Short @(posedge Clock); coverpoint i { bins zero = { 0 }; bins small = { [1:100] }; bins hunds[3] = { 200,300,400,500,600,700,800,900 }; bins large = { [1000:$] }; bins others[] = default; Tous les autres valeurs non énumérées plus haut. }; Attention à vérifier si default entre dans le rapport de couverture endgroup INF8500 SE: Conception et vérification 13 Autres exemples de bins INF8500 SE: Conception et vérification Autres exemples de bins Ignorer dans les statistiques Message d’erreur reporter et exit • Si une occurrence apparait dans une boite illégale, un message d’erreur est émis au simulateur • Répartition uniforme: ici les valeurs 0 à 99 sont réparties dans 10 boîtes INF8500 SE: Conception et vérification 14 Couverture conditionnelle • On utilise iff pour ajouter une condition au point de couverture covergroup CoverPort; coverpoint port iff (!bus_if.reset); Endgroup • Utilisation des fonctions start et stop: intial begin CovPort ck=new; #1ns bus_if.reset=1; ck.stop(); #100ns bus_if.reset=0; ck.start(); … end INF8500 SE: Conception et vérification Couverture de transition INF8500 SE: Conception et vérification 15 Couverture croisée (cross) Tel que mentionné précédemment, il est possible de former des mesures croisées (cross) entre plusieurs groupes, sondes ou même boites. INF8500 SE: Conception et vérification Rapport de couverture croisée Même si tous les valeurs de kind et port values ont été générées, environ 1/8 des combinaisons croisées n’ont pas été visitées. Systemverilog s’attend à un total de 128 (8X16) bins: INF8500 SE: Conception et vérification 16 Rapport de couverture croisée • 4 premiers résultats des 128 possibilités: INF8500 SE: Conception et vérification Autre exemple INF8500 SE: Conception et vérification 17 Exemple de Doulos* enum {Red, Green, Blue} Colour; covergroup cg_Colour @(posedge Clock); coverpoint Colour; endgroup cg_Colour = new cg_inst; * http://www.doulos.com/knowhow/sysverilog/tutorial/constraints/ INF8500 SE: Conception et vérification Exemple de Doulos avec transitions enum {Idle, State1, State2} State; covergroup cg_State @(posedge Clock); states : coverpoint State; state_trans : coverpoint State { bins legal[] = ( Idle => State1, State2 ), ( State1, State2 => Idle); bins idle[] = ( Idle [* 2:4] ); bins illegal = default sequence; } endgroup Toutes les transitions qui ne sont pas couvertes plus haut. Attention! Ces valeurs ne sont pas prises en compte dans le rapport de couverture même avec un bin qui ne serait pas illegal ou ignore. Réf. http://www.doulos.com/knowhow/sysverilog/tutorial/constraints/ et http://www.asic-world.com/systemverilog/coverage10.html INF8500 SE: Conception et vérification 18 Boîtes de couverture croisée(Binof) • • • c1 mesure l’occurrence simultanée de a0 et b0 c2 mesure le croisement de l’ensemble a1 et b1 (i.e. le complément de c1) c3 mesure les occurrences de a incluse dans l’intervalle [0:10] INF8500 SE: Conception et vérification Résumé des options de couverture • Voir la table 19-1—Instance-specific coverage options du SystemVerilog LRM (IEEE 1800 – 2009) pour les coverage option: – – – – – – – – – – weight= number goal=number name=string comment=string at_least=number detect_overlap=boolean auto_bin_max=number cross_num_print_missing= Number per_instance=boolean get_inst_coverage=boolean INF8500 SE: Conception et vérification 19 Pilotage du test par la couverture • La couverture peut être mesurée de façon globale, à la fin de la simulation. Mais il est également possible de connaître le pourcentage de couverture à tout instant. • Cette possibilité ouvre la voie au pilotage des tests par la mesure de couverture. • Dans ce qui suit, voici deux exemples. INF8500 SE: Conception et vérification Relever les compteurs Résultats: Global: 73.437500 Tous les groupes: 73.437500 Une sonde: 71.87500 INF8500 SE: Conception et vérification 20 Relever les compteurs • $get_coverage: fournit une information globale sur l’ensemble des groupes de couverture présents dans la simulation • get_coverage: fournit une mesure relative à une classe de groupes ou une sonde de cette classe. La valeur retournée est une moyenne de toutes les instances de la classe. • get_inst_coverage: fournit une mesure de couverture relative à une instance de groupe ou de sonde. La valeur retournée concerne cette seule instance. INF8500 SE: Conception et vérification Arrêter un test quand la couverture est atteinte Résultats: Durée de simulation: 2665 ns INF8500 SE: Conception et vérification 21 SystemVerilog Checks and Coverage Construct Usage Overview INF8500 SE: Conception et vérification Exemple: commutateur ATM • Une suite de tests a été développé pour la couverture de la switch ATM. Nous avons obtenu un taux de couverture de 100%: - Pour une génération complètement pseudo-aléatoire: 708 transactions - En travaillant avec la couverture fonctionelle: 229 transactions Test 3 Test 2 Test 1 100 Taux de Couverture 80 60 40 20 0 0 100 200 300 400 500 Transactions appliquées INF8500 SE: Conception et vérification 600 700 Sébastien Regimbal, École Polytechnique de Montréal 22
© Copyright 2024 ExpyDoc