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 stimuli a b Système à tester (ex. porte XOR) x

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; b <= '1' after 150 ns, '0' after 350 ns; -- à placer -- 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 begin : positive := 10; -- dans la zone de déclaration de l’architecture -- 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

Sign up to vote on this title
UsefulNot useful