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

Préambule  VHDL est à la fois un langage de synthèse. par simulation. les testbenches jouent un rôle très important . lui-même décrit en VHDL  Dans l’industrie. et de simulation  Un testbench VHDL est un code VHDL destiné à la vérification. ils sont intégrés dans les spécifications d’un système © D.Giacona . du bon fonctionnement d’un système.VHDL – Logique programmable 2/12 Partie 8 – Testbenches 1.

Procédure de test Banc de test Génération de stimuli a b Système à tester (ex. porte XOR) x Simulateur © D.VHDL – Logique programmable 3/12 Partie 8 – Testbenches 2.Giacona .

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.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.Giacona .

end porte_xor.STD_LOGIC_UNSIGNED. use IEEE.ALL. use IEEE.ALL.VHDL – Logique programmable 5/12 Partie 8 – Testbenches  Code du système à tester (une porte xor) library IEEE.Giacona . end Behavioral. use IEEE. architecture Behavioral of porte_xor is begin x <= a xor b.ALL.STD_LOGIC_ARITH. x : out STD_LOGIC). entity porte_xor is Port ( a : in STD_LOGIC.STD_LOGIC_1164. © D. b : in STD_LOGIC.

'0' after 350 ns. USE ieee.Instantiate the Unit Under Test (UUT) uut: porte_xor PORT MAP ( a => a.VHDL – Logique programmable 6/12 Partie 8 – Testbenches  Code du banc de test LIBRARY ieee.ALL. signal b : std_logic := '0'.Giacona . END COMPONENT.Generate stimuli a <= '1' after 100 ns. '0' after 300 ns.Signal Declaration signal a : std_logic := '0'. USE ieee. © D. x : OUT std_logic ). b => b. signal x : std_logic.ALL. BEGIN -.Component Declaration for the Unit Under Test (UUT) COMPONENT porte_xor PORT( a : IN std_logic.std_logic_unsigned. x => x ). ARCHITECTURE behavior OF tb_after IS -. END. -. USE ieee.numeric_std. b <= '1' after 150 ns.all.std_logic_1164. -. b : IN std_logic. ENTITY tb_after IS END tb_after.

dans le corps d’architecture  Les instructions d’appel de processus stim_proc: process begin -. '0' after 300 ns. b <= '1' after 150 ns.VHDL – Logique programmable 7/12 Partie 8 – Testbenches 4.Giacona . '0' after 350 ns. -.à placer -. © D.insérer des instructions séquentielles ici end process. Instructions concurrentes  L’instruction concurrente d’affectation à temps non nul : <= after a <= '1' after 100 ns.1. Instructions VHDL destinées à la génération de stimuli 4.

VHDL – Logique programmable 8/12 Partie 8 – Testbenches 4. il se réexécute toujours. arrivé à son mot clé final end process. 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).Giacona . © D. 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.2.

a <= '0'. begin -. end process.déclaration des signaux signal a : std_logic := '0'. b <= '1'. © D. signal b : std_logic := '0'. wait for 50 ns.Giacona .début du corps d’architecture stim_proc: process -. Elle permet de placer des points d’arrêt momentanés. wait for 50 ns.EXEMPLE 1 : entrées d’une porte xor -. a <= '1'. wait for 100 ns. -. b <= '0'.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.pas de liste de sensibilité begin wait for 100 ns.

-.EXEMPLE 2 : reset et horloge d’un compteur -. wait for clk_period/2.zone de déclaration signal clk : std_logic := '0'. constant clk_period : time := 100 ns. signal rst : std_logic := '1'. rst <= '0' after 125 ns. wait for clk_period/2. © D.début du corps d’architecture begin clk_process :process begin clk <= '0'. clk <= '1'.VHDL – Logique programmable 10/12 Partie 8 – Testbenches -. end process.Giacona .

b <= '0'. a <= '0'. a <= '1'. wait for 100 ns. wait for 50 ns.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. wait for 50 ns. © D. wait.Giacona . -.suspension du processus end process. b <= '1'.

dans la zone de déclaration de l’architecture -. © D.VHDL – Logique programmable 12/12 Partie 8 – Testbenches  L’instruction séquentielle d’itération : for loop constant n begin : positive := 10. a <= '0'. wait for (n-i)*100 ns.début du corps d’architecture boucle: process begin loop1: for i in 1 to n-1 loop a <= '1'.Giacona . end process. b <= '1' after 10 us. -. wait for i*100 ns. end loop.

Sign up to vote on this title
UsefulNot useful