Documente Academic
Documente Profesional
Documente Cultură
Denis Giacona
ENSISA
École Nationale Supérieure d'Ingénieurs Sud Alsace
12, rue des frères Lumière
68 093 MULHOUSE CEDEX
FRANCE
Tél. 33 (0)3 89 33 69 00
© D.Giacona
VHDL – Logique programmable 2/12 Partie 8 – Testbenches
1. Préambule
Un testbench VHDL est un code VHDL destiné à la vérification, par simulation, du bon fonctionnement
d’un système, lui-même décrit en VHDL
Dans l’industrie, les testbenches jouent un rôle très important ; ils sont intégrés dans les spécifications
d’un système
© D.Giacona
VHDL – Logique programmable 3/12 Partie 8 – Testbenches
2. Procédure de test
Banc de test
Simulateur
© D.Giacona
VHDL – Logique programmable 4/12 Partie 8 – Testbenches
Entité
Entrés,sorties
Architecture
Déclarations
Instructions
Architecture
Déclaration de composant du système à tester (UUT: Unit Under Test)
Déclaration des signaux de test (entrées et sorties de l'UUT)
© D.Giacona
VHDL – Logique programmable 5/12 Partie 8 – Testbenches
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity porte_xor is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
x : out STD_LOGIC);
end porte_xor;
begin
x <= a xor b;
end Behavioral;
© D.Giacona
VHDL – Logique programmable 6/12 Partie 8 – Testbenches
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY tb_after IS
END tb_after;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: porte_xor PORT MAP (
a => a,
b => b,
x => x
);
-- Generate stimuli
a <= '1' after 100 ns, '0' after 300 ns;
b <= '1' after 150 ns, '0' after 350 ns;
END;
© D.Giacona
VHDL – Logique programmable 7/12 Partie 8 – Testbenches
a <= '1' after 100 ns, '0' after 300 ns; -- à placer
b <= '1' after 150 ns, '0' after 350 ns; -- dans le corps d’architecture
stim_proc: process
begin
-- insérer des instructions séquentielles ici
end process;
© D.Giacona
VHDL – Logique programmable 8/12 Partie 8 – Testbenches
Remarques préliminaires
© D.Giacona
VHDL – Logique programmable 9/12 Partie 8 – Testbenches
L’instruction wait for est utilisée pour contrôler le processus. Elle permet de placer des points d’arrêt
momentanés.
© D.Giacona
VHDL – Logique programmable 10/12 Partie 8 – Testbenches
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
© D.Giacona
VHDL – Logique programmable 11/12 Partie 8 – Testbenches
stim_proc: process
begin
wait for 100 ns;
a <= '1';
wait for 50 ns;
b <= '1';
wait for 100 ns;
a <= '0';
wait for 50 ns;
b <= '0';
wait; -- suspension du processus
end process;
© D.Giacona
VHDL – Logique programmable 12/12 Partie 8 – Testbenches
boucle: process
begin
loop1: for i in 1 to n-1 loop
a <= '1';
wait for i*100 ns;
a <= '0';
wait for (n-i)*100 ns;
end loop;
end process;
© D.Giacona