Simulation VHDL sur Quartus
Les deux méthodes de simulation
Exemple : Porte AND
Objectifs
• Apprendre à simuler un code VHDL sur Quartus
• Comprendre les deux méthodes de simulation :
• Méthode 1 : Waveform Editor (éditeur graphique)
• Méthode 2 : Testbench (fichier VHDL de test)
• Visualiser les résultats de simulation
Étapes communes (avant simulation)
Étape 1 : Créer un nouveau projet
File → New Project Wizard → Choisir le dossier et nom du projet
Étape 2 : Créer le fichier VHDL
File → New → VHDL File → Écrire le code → Save as "porte_and.vhd"
Étape 3 : Compiler le projet
Processing → Start Compilation (ou Ctrl + L)
Vérifier qu'il n'y a pas d'erreurs (0 Errors)
Étape 4 : Choisir la méthode de simulation
→ Méthode 1 : Waveform Editor (graphique)
→ Méthode 2 : Testbench (code VHDL)
Code VHDL : Porte AND
Fichier : porte_and.vhd
library IEEE;
Schéma :
use IEEE.STD_LOGIC_1164.ALL;
entity porte_and is A
port (
A : in std_logic; S
B : in std_logic; AND
S : out std_logic B
);
end porte_and;
architecture arch of porte_and is
begin
Table de vérité :
S <= A and B; A B S
end arch;
0 0 0
0 1 0
1 0 0
1 1 1
Méthode 1
Waveform Editor
Simulation graphique avec l'éditeur de formes d'onde
Méthode 1 : Waveform Editor
Étape 1 : Créer un fichier Waveform
1. File → New → University Program VWF
2. Un éditeur de formes d'onde s'ouvre
3. Sauvegarder le fichier :
File → Save as → "porte_and.vwf"
💡 Remarque : VWF = Vector Waveform File (fichier de formes d'onde)
Méthode 1 : Waveform Editor
Étape 2 : Ajouter les signaux
1. Ajouter les signaux A, B, S (fenêtre a gauche clic droit → Insert Node or Bus)
2.
3. 2. Fenêtre "Insert Node or Bus" s'ouvre
4.
5. 3. Cliquer sur "Node Finder...“
6.
7. 4. Dans Node Finder :
8. • Filter : Pins (all)
9. • Cliquer "List"
10. • Sélectionner A, B, S
11. • Cliquer " > " pour ajouter
• Cliquer "OK"
Méthode 1 : Waveform Editor
Étape 3 : Configurer les entrées
1. Configurer le temps de simulation :
Edit → Set End Time → 1 us (ou 1000 ns)
2. Pour modifier le signal A :
• Sélectionner la ligne A
• Clic droit → Value → overwrite Clock
• Dans la fenêtre qui s'ouvre :
Period : 200 ns
Offset : 0 ns
Duty Cycle : 50%
3. Pour modifier le signal B :
• Sélectionner la ligne B
• Clic droit → Value → overwrite Clock
• Period : 400 ns
Méthode 1 : Waveform Editor
Étape 4 : Lancer la simulation
1. Sauvegarder le fichier VWF
2. Lancer la simulation :
Simulation → Run Functional Simulation
3. Observer les résultats :
→ La sortie S apparaît automatiquement
→ S = 1 seulement quand A = 1 ET B = 1
Résultat attendu :
A: ▁▁▁▁████▁▁▁▁████▁▁▁▁████▁▁▁▁████
B: ▁▁▁▁▁▁▁▁████████▁▁▁▁▁▁▁▁████████
S: ▁▁▁▁▁▁▁▁▁▁▁▁████▁▁▁▁▁▁▁▁▁▁▁▁████
Méthode 2
Testbench
Simulation avec un fichier VHDL de test
Méthode 2 : Testbench
Qu'est-ce qu'un Testbench ?
Un testbench est un fichier VHDL qui :
• Instancie le composant à tester (UUT : Unit Under Test)
• Génère les signaux d'entrée automatiquement
• Permet de vérifier les sorties
• Ne contient PAS de ports (entité vide)
Testbench
UUT (porte_and)
Méthode 2 : Testbench
Code du Testbench : tb_porte_and.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity tb_porte_and is
end tb_porte_and; -- Entité VIDE (pas de ports)
architecture test of tb_porte_and is
signal A_tb, B_tb, S_tb : std_logic;
component porte_and
port (A, B : in std_logic; S : out std_logic);
end component;
begin
Méthode 2 : Testbench
Ajouter le processus de stimulation
begin
UUT: porte_and port map(A_tb, B_tb, S_tb);
process -- Processus de stimulation
begin
A_tb <= '0'; B_tb <= '0'; -- Test 1
wait for 100 ns;
A_tb <= '0'; B_tb <= '1'; -- Test 2
wait for 100 ns;
A_tb <= '1'; B_tb <= '0'; -- Test 3
wait for 100 ns;
A_tb <= '1'; B_tb <= '1'; -- Test 4
wait for 100 ns;
wait; -- Arrêter la simulation
end process;
end test;
Méthode 2 : Testbench
Étapes pour simuler avec le Testbench
Résumé
Méthode 1 : Waveform Editor
• Créer fichier VWF → Ajouter signaux → Configurer entrées → Simuler
Méthode 2 : Testbench
• Créer fichier VHDL de test → Instancier composant → Générer stimuli → Simuler
Multiplexeur 2 vers 1 :
Testbench :
Compteur modulo 16 :
Testbench :
Compteur avec RST asynchrone :
1. Full Adder (fa) :
2. Additionneur 4 bits (add4) :
3. Testbench :