Vérification de systèmes intégrés - ENSEIRB _________________________________________
B. LE GAL
Vérification – Code coverage
L’environnement logiciel utilisé pour ce TP est ModelSim avec le langage de description matériel VHDL. L’objectif de ce TP est d’analyser l’intérêt d’outils de type code coverage.
Rappel : code coverage analyse non statique (stimuli obligatoire)
Les différents fichiers .vhd utilisés se trouvent sur le le serveur WEB de l’école et plus particulièrement sur le site pédagogique de votre enseignant dans la partie « TP de Test ».
http://uuu.enseirb.fr/~legal/download/Electronique/Test_Verification/
Créez un répertoire sur votre compte et copiez les fichiers.
Partie 1 : prise en main, généralités
1) Créer un projet modelsim, compiler les fichiers compteur.vhd et bench_compteur.vhd (test- bench du compteur) et lancer la simulation (bench_compteur) pour vérifier le bon fonctionnement du compteur.
2) Maintenant, compilez les fichiers en mode coverage (instrumentation du code) : vcom -coverAll compteur.vhd bench_compteur.vhd
Remarque: il est possible de spécifier le mode coverage en cliquant du bouton droit sur les fichiers puis en sectionnant les cases adéquates dans l’onglet proprieties.
charger la simulation de l’entity bench_compteur : vsim –coverage bench_compteur
puis lancer la simulation : run –all
Note : il est bien entendu possible d’analyser pas à pas la simulation (run [-…])
Analyser les différents outils de code coverage disponibles sous ModelSim.
====================================
Différents types de code coverage sont possibles avec ModelSim.
L’outil renseigne directement le code source quant au nombre d’exécutions de chaque instruction (placer la souris sur l’instruction)
La fenêtre « missed coverage » renseigne spécifiquement sur les structures (statement, branch,
…) non exécutées. (cliquer sur la ligne affichée dans missed coverage pour avoir des informations (Details) sur la non-exécution de la structure en question)
Vérification de systèmes intégrés - ENSEIRB _________________________________________
La fenêtre « instance coverage » indique les différents taux de couverture.
Il est également possible d’avoir le détail des basculements des signaux (toggle coverage) : Ouvrir une fenêtre objects (view>objects)
Afficher (tools>toggle coverage>add>signals in design) (à faire avant de lancer la simulation)
3) Le fichier compteur précédent ne permet pas d’exploiter le « condition coverage ». Créer un nouveau projet, compiler les fichiers composent.vhd et sim_composent.vhd en mode coverage et lancer la simulation. Analyser les résultats du coverage. Observer les « missed conditions » entre autre. Modifier le testbench pour avoir les plus grands taux de couverture (100%) sans pour autant exécuter toutes les combinaisons des données d’entrée.
Vérification de systèmes intégrés - ENSEIRB _________________________________________
Partie 2 : la vérification, « c’est pas un problème !»
Le fichier C2.vhd correspond au schéma ci-dessous.
Vérifier le fonctionnement de C2 par une simulation en mode normal (sans code coverage) en complétant le fichier test-bench c2_sim.vhd.
Modifier C2.vhd si nécessaire pour que C2 fonctionne (soit simulable).
Peut-on garantir que C2 fonctionne bien avec les quelques stimulus utilisés ? Passer en mode coverage et observer entre autre les taux de couverture. Un taux de couverture de 100% signifie- t-il que tout à été vérifié ?
Partie 3 : la vérification, « c’est pas un problème » (bis)
Le fichier Operateur_3.vhd correspond à un multiplieur en format flottant IEEE-754 32 bits (A*B).
Pour ce rendre compte de la complexité de l’étape de vérification (peut-on vraiment dire que ce qui a été développé est fonctionnellement correct ?), on se propose d’analyser ce fichier.
On ne possède malheureusement pas de modèle de référence exécutable du multiplieur flottant mais seulement de quelques valeurs pour la vérification (voir dernière page de ce document) et des quelques informations ci-dessous concernant le format flottant.
Quelques erreurs ont été faites lors du codage (Operateur_3), (mais on suppose qu’on ne le sait pas).
On veut vérifier qu’Opérateur_3 est fonctionnellement correct. Créer un fichier de test_bench avec quelques stimuli pour cela. Vérifier les valeurs résultats et bien sur faire une analyse code coverage.
* +
B 8
16
T1
T4
T5
Cd
8
16
16
Clk
Vérification de systèmes intégrés - ENSEIRB _________________________________________
================================================
Quelques informations sur les flottants : Principe :
22
Format flottant IEEE 754 -1985
Représentation biais ée de l’exposant ( bias : 127)
23
Format flottant IEEE 754 -1985
Domaine de repr ésentation et valeurs particuli ères :
24
Format flottant IEEE 754 -1985
25
Format flottant IEEE 754 -1985
Calculs :
Exemple : multiplication Soient A = sa.2 ea-bias.ma
B = sb.2 eb-bias.mb P=A.B=sp.2 ep-bias.mp avec sp= sa xor sb
ep= ea+eb- bias mp= ma .mb
Toujours penser à : gérer les exceptions, si besoin : renormaliser la mantisse (+ intervenir sur l ’exposant), arrondir (+ renormaliser ?)
Voir documents compl émentaires sur le format flottant sur disque r éseau ogam\ !enssat \Elec\TP Enssat \FPU…
+ site internet sur le format flottant d ’Alain Guyot :
http://tima -cmp.imag.fr/~guyot/Cours/Oparithm/francais/Op_Ar2.htm
Vérification de systèmes intégrés - ENSEIRB _________________________________________ FlottantBinaireFlottantBinaireFlottantBinaire 1.0001111111000000000000000000000001.0001111111000000000000000000000001.000111111100000000000000000000000 1.11001111111000111000010100011110111.11001111111000111000010100011110111.232100111111100111011011010101110100 1.11111111001111111000111000111000111001001.11111111001111111000111000111000111001001.2345700111111100111100000011001010011 1.42001111111011010111000010100011111.35001111111010110011001100110011011.91700111111111101010110000001000001 1.25001111111010000000000000000000001.567001111111100100010010011011101011.9587500111111111110101011100001010010 1.5001111111100000000000000000000001.5001111111100000000000000000000002.2501000000000100000000000000000000 1.5001111111100000000000000000000001.987001111111111111001010110000001002.980501000000001111101100000010000011 6.250100000011001000000000000000000094.12501000010101111000100000000000000588.28101000100000100110001001000000000 1.000111111100000000000000000000000-1.010111111100000000000000000000000-1.010111111100000000000000000000000 -1.0101111111000000000000000000000001.000111111100000000000000000000000-1.010111111100000000000000000000000 -1.010111111100000000000000000000000-1.0101111111000000000000000000000001.000111111100000000000000000000000 6.23299110000001100011101110100101001114.12991100000010000100001010000010010025.741601000001110011011110111011011001 1.99101111111111111010111000010100102.13110000000000100001010001111011004.238701000000100001111010001101101111 7.131100000011100100001010001111011097.111111000010110000100011100011100010692.40201000100001011010001100110111101 Env. 000000000100000000000000000000000Env. 0000000010000000000000000000000000X0000000000000000000000000000000 Env. +Inf01111110000000000000000000000000Env. +Inf01111110000000000000000000000000+Inf01111111100000000000000000000000 0X000000000000000000000000000000011311000010111000100000000000000000000000000000000000000000000000000 113110000101110001000000000000000000X0000000000000000000000000000000000000000000000000000000000000000 +Inf011111111000000000000000000000000X0000000000000000000000000000000NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX -Inf111111111000000000000000000000000X0000000000000000000000000000000NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX 0X0000000000000000000000000000000+Inf01111111100000000000000000000000NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX 0X0000000000000000000000000000000-Inf11111111100000000000000000000000NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX?NaNX11111111XXXXXXXXXXXXXXXXXXXXXXX ?NaNX11111111XXXXXXXXXXXXXXXXXXXXXXXNaNX11111111XXXXXXXXXXXXXXXXXXXXXXX NaNX11111111XXXXXXXXXXXXXXXXXXXXXXXNaNX11111111XXXXXXXXXXXXXXXXXXXXXXXNaNX11111111XXXXXXXXXXXXXXXXXXXXXXX -Inf11111111100000000000000000000000-Inf11111111100000000000000000000000+Inf01111111100000000000000000000000 +Inf01111111100000000000000000000000-Inf11111111100000000000000000000000-Inf11111111100000000000000000000000 -Inf11111111100000000000000000000000+Inf01111111100000000000000000000000-Inf11111111100000000000000000000000 +Inf01111111100000000000000000000000?+Inf01111111100000000000000000000000 ?+Inf01111111100000000000000000000000+Inf01111111100000000000000000000000 -Inf11111111100000000000000000000000?-Inf11111111100000000000000000000000 ?-Inf11111111100000000000000000000000-Inf11111111100000000000000000000000
Vérification des exceptions sortantes. Vérification des exceptions entrantes.
Vérification du calcul de la mantisse sans considérer la retenue, l'arrondi, et la normalisation. Vérification de la Normalisation (sans l'arrondi). Vérification du calcul du signe Vérification de la gestion de l'arrondi.
Nombre ANombre BResultat (C=A*B) Remarques