tutoriel: simulation de base avec quartus iitutoriel : simulation avec quartus ii version...

15
Tutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC 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. Roberge- Bisaillon). 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 :

Upload: others

Post on 02-Jan-2021

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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. Roberge-Bisaillon). 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 :

Page 2: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

1. Écrire le code VHDL 2. Faire la synthèse (voir s’il y a des « warning » ou des erreurs) 3. Faire le placement/routage. 4. Créer le fichier .WVF pour stimuler votre circuit 5. 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.

Page 3: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 4: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 5: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Cliquez dans cette région avec bouton de droite

Page 6: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 7: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

Figure 5. Comment obtenir la liste des signaux disponibles (partie #2)

Page 8: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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à. Mettez-vous vis-à-vis le signal clk. Cliquez avec le bouton de droite et sélectionnez Value->Clock comme l’indique la Figure 8.

Page 9: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

Figure 7. Signaux examinés durant la simulation

Page 10: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 11: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 12: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 13: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

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.

Page 14: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

Figure 12. Résultats de la simulation (Partie #1)

Page 15: Tutoriel: Simulation de base avec QUARTUS IITutoriel : Simulation avec QUARTUS II Version préliminaire H. T. Bui DSA/UQAC Figure 1. Synthèse et Placement/Routage 4. A ce point-ci,

Tutoriel : Simulation avec QUARTUS II Version préliminaire

H. T. Bui DSA/UQAC

Figure 13. Résultats de la simulation (Partie #2)