Sie sind auf Seite 1von 12

VHDL – Logique programmable 1/12 Partie 8 – Testbenches

VHDL - Réseaux programmables


Cours – partie 8
Testbenches

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

 VHDL est à la fois un langage de synthèse, et de simulation

 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

Génération de Système à tester


a x
stimuli (ex. porte XOR)
b

Simulateur

© D.Giacona
VHDL – Logique programmable 4/12 Partie 8 – Testbenches

3. Le code VHDL d'un banc de test

 Structure du fichier pour le système à tester

Entité
Entrés,sorties
Architecture
Déclarations
Instructions

 Structure du fichier pour le banc de test

Entité (ni entrée ni sortie)

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)

Instruction d'instanciation de l'UUT


Instructions de génération de stimuli (entrées de l'UUT)

© D.Giacona
VHDL – Logique programmable 5/12 Partie 8 – Testbenches

 Code du système à tester (une porte xor)

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;

architecture Behavioral of porte_xor is

begin

x <= a xor b;

end Behavioral;

© D.Giacona
VHDL – Logique programmable 6/12 Partie 8 – Testbenches

 Code du banc de test

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;

ARCHITECTURE behavior OF tb_after IS


-- Component Declaration for the Unit Under Test (UUT)
COMPONENT porte_xor
PORT(
a : IN std_logic;
b : IN std_logic;
x : OUT std_logic
);
END COMPONENT;
-- Signal Declaration
signal a : std_logic := '0';
signal b : std_logic := '0';
signal x : std_logic;

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

4. Instructions VHDL destinées à la génération de stimuli


4.1. Instructions concurrentes

 L’instruction concurrente d’affectation à temps non nul : <= after

a <= '1' after 100 ns, '0' after 300 ns; -- à placer
b <= '1' after 150 ns, '0' after 350 ns; -- dans le corps d’architecture

 Les instructions d’appel de processus

stim_proc: process
begin
-- insérer des instructions séquentielles ici

end process;

© D.Giacona
VHDL – Logique programmable 8/12 Partie 8 – Testbenches

4.2. Instructions séquentielles d’un processus

 Remarques préliminaires

o Un processus destiné à la génération de stimuli n’a pas de liste de sensibilité


o Un processus est cyclique (durée de vie = durée de simulation); arrivé à son mot clé final end
process, il se réexécute toujours, sauf si auparavant il est endormi avec une instruction
d’attente inconditionnelle
o Un processus contient des instructions d’affectation de valeur et obligatoirement des
instructions de contrôle de type wait

 L’instruction séquentielle d’affectation à temps non nul : <= after

Elle joue le même rôle que l’instruction concurrente de même nom.

© D.Giacona
VHDL – Logique programmable 9/12 Partie 8 – Testbenches

 L’instruction séquentielle d’attente conditionnelle : wait for

L’instruction wait for est utilisée pour contrôler le processus. Elle permet de placer des points d’arrêt
momentanés.

-- EXEMPLE 1 : entrées d’une porte xor


-- déclaration des signaux
signal a : std_logic := '0';
signal b : std_logic := '0';

begin -- début du corps d’architecture


stim_proc: process -- pas de liste de sensibilité
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';
end process;

© D.Giacona
VHDL – Logique programmable 10/12 Partie 8 – Testbenches

-- EXEMPLE 2 : reset et horloge d’un compteur


-- zone de déclaration
signal clk : std_logic := '0';
signal rst : std_logic := '1';

constant clk_period : time := 100 ns;

-- début du corps d’architecture


begin

clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;

rst <= '0' after 125 ns;

© D.Giacona
VHDL – Logique programmable 11/12 Partie 8 – Testbenches

 L’instruction séquentielle d’attente inconditionnelle : wait

L’instruction wait suspend indéfiniment le processus à partir de l’instant où le simulateur l’exécute.

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

 L’instruction séquentielle d’itération : for loop

constant n : positive := 10; -- dans la zone de déclaration de l’architecture

begin -- début du corps d’architecture

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;

b <= '1' after 10 us;

© D.Giacona