TP de Vérification (VHDL).docx »

Transcription

TP de Vérification (VHDL).docx »
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 (testbench 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.
Vérification de systèmes intégrés - ENSEIRB
_________________________________________
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% signifiet-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.
Vérification de systèmes intégrés - ENSEIRB
_________________________________________
================================================
Quelques informations sur les flottants :
Principe :
Format flottant IEEE 754 -1985
Représentation biais ée de
l’exposant ( bias : 127)
22
Format flottant IEEE 754 -1985
Domaine de repr ésentation et valeurs particuli ères :
23
Vérification de systèmes intégrés - ENSEIRB
_________________________________________
Format flottant IEEE 754 -1985
24
Format flottant IEEE 754 -1985
Calculs :
 Exemple : multiplication
Soient
A = s a.2 ea-bias .m a
B = sb.2 eb-bias .m b
P=A.B=s p.2 ep-bias .mp
avec
sp = s a xor sb
ep = e a +eb - bias
mp = m a .m b

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
25
1 .1 1
1 .1 1 1 1 1 1 1 1
1 .3 5
1 .5 6 7
1 .5
1 .9 8 7
00111111100011100001010001111011
00111111100011100011100011100100
00111111101101011100001010001111
00111111101000000000000000000000
00111111110000000000000000000000
00111111110000000000000000000000
1 .1 1
1 .1 1 1 1 1 1 1 1
1 .4 2
1 .2 5
1 .5
1 .5
-1 .0
4 .1 2 9 9
2 .1 3
9 7 .1 1 1 1
En v . 0
En v . + In f
113
0
0
0
+ In f
-In f
10111111100000000000000000000000
11000000110001110111010010100111
10111111111111101011100001010010
11000000111001000010100011110110
00000000100000000000000000000000
01111110000000000000000000000000
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11000010111000100000000000000000
01111111100000000000000000000000
11111111100000000000000000000000
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 .0
6 .2 3 2 9 9
1 .9 9
7 .1 3
En v . 0
En v . + In f
0
113
+ In f
-In f
0
0
01111111100000000000000000000000
+ In f
?
-In f
11111111100000000000000000000000
?
11111111100000000000000000000000
-In f
-In f
?
+ In f
-In f
+ In f
01111111100000000000000000000000
+ In f
?
-In f
NaN
11111111100000000000000000000000
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
NaN
-In f
NaN
?
?
1 .0
10111111100000000000000000000000
-1 .0
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
-1 .0
00111111100000000000000000000000
NaN
9 4 .1 2 5
01000000110010000000000000000000
1 .0
6 .2 5
1 .0
00111111100000000000000000000000
Flottant
1 .0
Flottant
Nombre A
Binaire
11111111100000000000000000000000
01111111100000000000000000000000
01111111100000000000000000000000
11111111100000000000000000000000
11111111100000000000000000000000
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
11111111100000000000000000000000
01111111100000000000000000000000
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11000010111000100000000000000000
01111110000000000000000000000000
00000001000000000000000000000000
11000010110000100011100011100010
11000000000010000101000111101100
11000000100001000010100000100100
10111111100000000000000000000000
00111111100000000000000000000000
10111111100000000000000000000000
01000010101111000100000000000000
00111111111111100101011000000100
00111111110000000000000000000000
00111111110010001001001101110101
00111111101011001100110011001101
00111111100011100011100011100100
00111111100011100001010001111011
00111111100000000000000000000000
Nombre B
Binaire
-In f
-In f
+ In f
+ In f
-In f
-In f
+ In f
NaN
NaN
NaN
NaN
NaN
NaN
NaN
0
0
+ In f
0
6 9 2 .4 0 2
4 .2 3 8 7
2 5 .7 4 1 6
1 .0
-1 .0
-1 .0
5 8 8 .2 8 1
2 .9 8 0 5
2 .2 5
1 .9 5 8 7 5
1 .9 1 7
1 .2 3 4 5 7
1 .2 3 2 1
1 .0
Flottant
Vérification de systèmes intégrés - ENSEIRB
_________________________________________
11111111100000000000000000000000
11111111100000000000000000000000
01111111100000000000000000000000
01111111100000000000000000000000
11111111100000000000000000000000
11111111100000000000000000000000
01111111100000000000000000000000
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
X1 1 1 1 1 1 1 1 XXXXXXXXXXXXXXXXXXXXXXX
00000000000000000000000000000000
00000000000000000000000000000000
01111111100000000000000000000000
X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
01000100001011010001100110111101
01000000100001111010001101101111
01000001110011011110111011011001
00111111100000000000000000000000
10111111100000000000000000000000
10111111100000000000000000000000
01000100000100110001001000000000
01000000001111101100000010000011
01000000000100000000000000000000
00111111111110101011100001010010
00111111111101010110000001000001
00111111100111100000011001010011
00111111100111011011010101110100
00111111100000000000000000000000
Resultat (C=A*B)
Binaire
Vérification des
exceptions entrantes.
Vérification des
exceptions sortantes.
Vérification de la
gestion de l'arrondi.
Vérification du calcul
du signe
Vérification de la
Normalisation (sans
l'arrondi).
Vérification du calcul
de la mantisse sans
considérer la retenue,
l'arrondi, et la
normalisation.
Remarques