Académique Documents
Professionnel Documents
Culture Documents
Test Bench
Cours 7
25 oct 2017
Banc de test- Test Bench
• Test bench = entité VHDL qui applique des stimuli
(les entrées) pour le circuit sous test
(DUT) et (éventuellement) vérifie les résultats
attendus.
• Le même banc d'essai peut être utilisé pour
tester plusieurs implémentations d'un même
circuit (architectures multiples)
• Les résultats peuvent être visualisés dans une
fenêtre chronogramme ou écrites dans un fichier.
Vecteurs de Test
Ensemble de paires: {Entrée i, Sortie désirée i}
Entrée 1, Sortie désirée1
Entrée 2, Sortie désirée 2
……………………………
Entrée N, Sortie désirée N
BEGIN
DUT: entity work.TestComp(dataflow) PORT MAP( -- Instantiations de
circuits sous test (DUTs));
testSequence: PROCESS
-- Input stimuli Génération des exemples
END PROCESS;
END behavioral;
TEST Bench XOR3
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY xor3_tb IS
END xor3_tb;
END PROCESS;
END behavioral;
utilisation de PROCESS sans liste de
sensibilité dans les Test benches
PROCESS avec une instruction WAIT
WAIT FOR vs WAIT
-- fichier du composant ET_2.vhd
library ieee;
use ieee.std_logic_1164.all;
begin
-- utilisation :
et1 : ET_2 port map ( e1, e2,S1) ;
et2 : ET_2 port map ( S1, e3,S) ;
End struct ;
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;
Exemples
ex1 ADD SUB
Additionneur –soustracteur
• On considère un circuit arithmétique simple qui
réalise les 2 opérations: (addition , soustraction).
• Un signal de contrôle , ctrl , spécifie l’opération
demandé.
ctrl opération
0 A+B
1 A-B
entity ALU is
port(A: in std_logic_vector(1 downto 0);
B: in std_logic_vector(1 downto 0);
Sel: in std_logic_vector(1 downto 0);
Res: out std_logic_vector(1 downto 0));
end ALU;
Architecture behv of ALU is
begin
process(A,B,Sel)
begin
case Sel is
when "00" =>
Res <= A + B;
when "01" =>
Res <= A + (not B) + 1;
when "10" =>
Res <= A and B;
when "11" =>
Res <= A or B;
when others =>
Res <= "XX";
end case;
end process;
end behv;
---- Le test bench
library IEEE;
use IEEE.std_logic_1164. all;
entity ALU_tb is
end ALU_tb;
architecture TB of ALU_tb is
component ALU
port(A: in std_logic_vector(1 downto 0);
B: in std_logic_vector(1 downto 0);
Sel: in std_logic_vector(1 downto 0);
Res: out std_logic_vector(1 downto 0)
);
end component;