Tutoriel: Simulation de base avec QUARTUS II

Transcription

Tutoriel: Simulation de base avec QUARTUS II
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Tutoriel: Simulation de base avec QUARTUS II
Dans ce tutoriel, on va voir comment simuler un circuit conçu avec le VHDL a l’aide de
l’outil QUARTUS II de la compagnie Altera. Il y a 2 grandes méthodes pour simuler :
avec les fichiers de type Waveform Vector File (.WVF) qui est la façon de base et la
façon plus avancée qui est d’utiliser les bancs d’essais. Avec les bancs d’essais, il faut
créer d’AUTRES fichiers VHDL qui vont être utilisés pour stimuler le fichier VHDL
initial. C’est une technique un peu plus avancée et que vous devriez apprendre si vous
voulez faire des circuits plus avancés. Dans ce tutoriel, on va se contenter des fichiers
.WVF.
Dans ce tutoriel, on va utiliser un compteur de 4 bits (inspiré du code de M. RobergeBisaillon). Je vais inclure le code ici au cas où vous voudriez vous y référer :
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY horloge3 IS
PORT (
clk :IN STD_LOGIC;
rst_an :IN STD_LOGIC;
s_counter_out :OUT STD_LOGIC_VECTOR (3 downto 0)
);
END horloge3;
ARCHITECTURE RTL OF horloge3 IS
signal s_counter :STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS (clk , rst_an)
BEGIN
IF rst_an ='0' THEN
s_counter <= (OTHERS => '0');
ELSIF clk'EVENT AND clk = '1' THEN
IF s_counter=15 THEN
s_counter <= (OTHERS => '0');
ELSE
s_counter<= s_counter + 1;
END IF;
END IF;
END PROCESS;
s_counter_out <= s_counter;
END;
Si on veut simuler, on devrait suivre les étapes suivantes :
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
1.
2.
3.
4.
5.
Version préliminaire
Écrire le code VHDL
Faire la synthèse (voir s’il y a des « warning » ou des erreurs)
Faire le placement/routage.
Créer le fichier .WVF pour stimuler votre circuit
Simuler
Description des étapes
Étape 1 : Ca devrait être facile à comprendre. Vous écrivez le code.
Étape 2 : On veut maintenant convertir notre code en portes logiques. Pour ce faire,
l’outil QUARTUS va être sévère avec la façon que vous écrivez votre code VHDL. Il va
vous dire si le style de votre code VHDL n’est pas compréhensible (ou ne correspond pas
aux normes). C’est à vous a modifier votre code pour qu’il soit heureux.
Étape 3 : Après la synthèse, on a transforme notre code VHDL en une série de portes
logiques. Cependant, on ne sait pas ou se trouvent ces portes logiques dans le FPGA. Le
placement/routage est l’étape qui va déterminer ca. Pourquoi c’est important? Ca va aider
à déterminer le délai de façon plus précise.
Étape 4 : On va ensuite commencer a créer le stimulus pour votre circuit. Vous savez, par
exemple, que vous avez une horloge a l’entrée et un signal reset (rst_an). Comment se
comporte votre horloge? Quelle fréquence a-t-elle? Et le reset? Quand sera-t-il actif? Ce
sont tous des choses à spécifier dans le stimulus.
Étape 5 : On va ensuite faire rouler la simulation et regarder les résultats.
Manipulations
1. Commencez par ouvrir QUARTUS II.
2. Créez votre projet et entrez le code VHDL.
3. Faites la première synthèse et le placement/routage en une seule étape en entrant
dans TOOLS -> Compiler Tool. Cliquez sur le bouton START pour amorcer le
processus (Figure 1). Vous devriez, en théorie, déjà connaitre toutes ces étapes.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 1. Synthèse et Placement/Routage
4. A ce point-ci, vous avez transforme votre VHDL en portes logiques, vous savez
aussi ou ces portes sont placées. La prochaine étape est de créer un fichier .WVF
pour stimuler votre circuit. Entrez dans File->New. Choisissez OTHER ->
WAVEFORM VECTOR FILE. Référez-vous à la Figure 2.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 2. Comment générer le fichier de stimulation
5. Le résultat de ces commandes devrait nous donner une fenêtre comme a la Figure
3. Notre prochaine étape c’est de dire à Quartus quels signaux on aimerait
stimuler et quels signaux on aimerait regarder. L’outil nous donne l’option de
regarder des signaux « internes ». Notre compteur est très simple alors on n’a pas
vraiment besoin de regarder autre chose que les entrées et les sorties. Imaginez,
cependant, la conception d’un microprocesseur. Si on ne regardait que les entrées
et les sorties, on n’aurait pas beaucoup d’informations. Dans ce cas-la, on pourrait
décider de regarder les signaux internes : la sortie du Arithmetic Logic Unit
(ALU) ou du décodeur d’instructions en mémoire, par exemple. Revenons à ce
qu’on faisait : on veut spécifier les signaux a stimuler et a regarder. Déplacez
votre souris dans la région sous l’indicateur NAME, cliquez avec votre bouton de
droite et choisissez Insert Node or Bus. Ceci est démontré dans la Figure 3.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Cliquez
dans cette
région avec
bouton de
droite
Figure 3. Comment ajouter les signaux
6. Une petite fenêtre devrait apparaitre. L’outil nous demande le NOM des signaux
auxquels on aimerait avoir accès. A la place de l’entrer manuellement, on va
demander à l’outil de nous fournir une liste et on choisira. Cliquez sur Node
Finder comme le montre la Figure 4.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 4. Comment obtenir la liste des signaux disponibles (partie #1)
7. Une autre fenêtre devrait apparaitre (Figure 5). Pour une sélection facile vous
pouvez simplement cliquer sur LIST. Une liste de signaux devrait apparaitre dans
la colonne de gauche et vous pourriez sélectionner en double-cliquant sur les
signaux qui vous intéressent. Pour notre tutoriel, on va utiliser clk, rst_an et
s_count_out (Figure 6). Ces signaux devraient se retrouver dans la colonne de
droite une fois sélectionné. Cliquez sur OK.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 5. Comment obtenir la liste des signaux disponibles (partie #2)
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 6. Signaux à sélectionner
8. Vous vous retrouverez de nouveau avec la petite fenêtre. Cliquez sur OK.
9. Vous devriez avoir une fenêtre comme celle de la Figure 7 devant vous.
Remarquez que le nom des signaux que vous aviez sélectionnés est là. Mettezvous vis-à-vis le signal clk. Cliquez avec le bouton de droite et sélectionnez
Value->Clock comme l’indique la Figure 8.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 7. Signaux examinés durant la simulation
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 8. Comment spécifier un signal d’horloge
10. On change la valeur de la période à 20ns comme à la Figure 9. Cliquez sur OK.
Le signal clk devrait changer à une onde carrée.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 9. Paramètres du signal d’horloge
11. On va ensuite définir le signal rst_an. On va vouloir le mettre-à-zéro (reset) au
début pendant 25ns (chiffre inventé). On va donc devoir mettre le signal a 0
pendant 25ns et ensuite qu’il devienne 1. La façon que je décide de la faire, c’est
d’appliquer un signal 1 pour toute la durée et ensuite, changer la valeur à 0 pour
les 25ns du début. On clique sur rst_an avec notre bouton de droite : Value>Forcing High(1). En faisant ceci, on devrait voir que la valeur de rst_an est
monte à 1.
12. On va ensuite sélectionner les premières 25ns du signal rst_an avec le bouton de
gauche. Une des façons de faire est de placer la souris au temps 0 à côté du
rst_an. On clique avec le bouton de gauche et on laisse le doigt dessus en
l’amenant vers 25ns. En faisant ça, on sélectionne cette région et la sélection
devrait devenir bleue pale. Il y a d’autres façons de faire, comme par exemple,
commencer la sélection a 25ns et le ramener vers 0s. Ça marche aussi.
13. Une fois que c’est sélectionné, cliquez sur la sélection (section bleue) avec votre
bouton de droite : Value->Forcing Low (0). Le résultat de tout ca devrait être un
signal rst_an qui est 0 de 0 à 25ns et ensuite monter à 1. Ceci est illustré à la
Figure 10.
14. On a enfin fini. On sauvegarde et on lui donne un nom comme horloge3.wvf. On
ne touche pas au signal s_counter_out puisque c’est notre signal de sortie. C’est le
circuit qui va réagir aux signaux clk et rst_an et va imposer ses propres valeurs.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 10. Spécification du signal rst_an
15. Il est maintenant temps de simuler. Allez dans Tools->Simulator Tool. Une
fenêtre devrait ouvrir (Figure 11). Assurez-vous que Simulation Mode est de type
Timing et que Simulation Input est le nom du fichier .WVF que vous venez de
créer.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 11. Fenêtre pour faire la simulation
16. On clique sur START pour amorcer la simulation.
17. A la fin de la simulation, cliquez sur REPORT. Une erreur courante c’est de
cliquer sur OPEN en pensant que c’est le résultat. OPEN nous donne simplement
le fichier .WVF. C’est REPORT qui va nous donner la sortie de la simulation
(Figure 12).
18. Trois choses que j’aimerais vous faire remarquer :
a. Le compte augmente à chaque coup d’horloge, c’est le fun.
b. Au premier coup d’horloge, le reset était encore actif. Le compte n’a pas
augmente : c’est un bon signe.
c. Avançons dans le temps pour voir si le compteur retourne bien à 0 après le
compte de 15. En regardant la Figure 13, on voit que le signal retourne bel
et bien à 0.
19. Ce serait bien de retourner relire les étapes rapidement pour voir que la procédure
est en fait TRÈS simple : coder, synthétiser et placement/routage, définir .WVF,
simuler et on a fini.
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 12. Résultats de la simulation (Partie #1)
H. T. Bui
DSA/UQAC
Tutoriel : Simulation avec QUARTUS II
Version préliminaire
Figure 13. Résultats de la simulation (Partie #2)
H. T. Bui
DSA/UQAC