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