Un banc d'essai d'auto-vérification est un programme VHDL qui vérifie l'exactitude de l'appareil testé (DUT) sans compter sur un opérateur pour inspecter manuellement la sortie. Le banc de test d'auto-vérification fonctionne entièrement de lui-même et affiche un message "OK" ou "Échec" à la fin.
Chaque module VHDL doit avoir un banc de test d'auto-vérification associé. Il est important de pouvoir vérifier que tous les modules ont le comportement prévu à tout moment. Par exemple, lorsque vous apportez des modifications au DUT, à un sous-module ou à un module d'interfaçage. Nous savons tous que des choses peuvent casser, et votre meilleur outil pour détecter ces problèmes est le banc d'essai d'auto-vérification.
L'appareil testé
Passons directement à l'action et créons un exemple de banc d'essai d'auto-vérification. Tout d'abord, nous avons besoin de quelque chose à tester, un DUT. Pour cela j'ai créé le module dans le code ci-dessous. C'est un convertisseur de code binaire en code Gray.
library ieee;
use ieee.std_logic_1164.all;
entity gray_converter is
port (
bin : in std_logic_vector;
gray : out std_logic_vector
);
end gray_converter;
architecture rtl of gray_converter is
begin
process(bin) is
begin
gray(gray'high) <= bin(bin'high);
for i in bin'high - 1 downto bin'low loop
gray(i) <= bin(i + 1) xor bin(i);
end loop;
end process;
end architecture;
Le code Gray est un schéma de codage numérique alternatif, différent du codage binaire ordinaire. La principale propriété et le but du code Gray sont qu'un seul bit change lors du comptage entre des valeurs numériques adjacentes.
Décimal
Binaire
Gris
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
11
1011
1110
12
1100
1010
13
1101
1011
14
1110
1001
15
1111
1000
Le tableau ci-dessus montre en quoi le code Gray diffère du code binaire.
Le banc d'essai
Nous allons commencer par créer le banc de test de base et instancier le DUT en son sein. Le code ci-dessous montre le fichier testbench avec le DUT instancié et toutes les importations nécessaires.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use std.env.finish;
entity gray_converter_tb is
end gray_converter_tb;
architecture sim of gray_converter_tb is
signal bin : std_logic_vector(3 downto 0) := (others => '0');
signal gray : std_logic_vector(3 downto 0);
begin
DUT : entity work.gray_converter(rtl)
port map (
bin => bin,
gray => gray
);
end architecture;
Notez que nous importons std.env.finish qui nécessite VHDL-2008. Si vous essayez de compiler le testbench dans ModelSim sans rien changer, vous obtiendrez l'erreur suivante :
# ** Warning: gray_converter_tb.vhd(6): (vcom-1516)
Package "STD.ENV" does not exist in this language version.