Cómo crear un banco de pruebas de autocomprobación
Un banco de pruebas de autocomprobación es un programa VHDL que verifica la corrección del dispositivo bajo prueba (DUT) sin depender de un operador para inspeccionar manualmente la salida. El banco de pruebas de autocomprobación se ejecuta por sí solo e imprime un mensaje de "OK" o "Error" al final.
Cada módulo VHDL debe tener un banco de pruebas de autocomprobación asociado. Es importante poder verificar que todos los módulos tengan el comportamiento previsto en cualquier momento. Por ejemplo, cuando realiza cambios en el DUT, un submódulo o un módulo de interfaz. Todos sabemos que las cosas pueden romperse y su mejor herramienta para detectar estos problemas es el banco de pruebas de autocomprobación.
El dispositivo bajo prueba
Entremos de inmediato y creemos un ejemplo de un banco de pruebas de autocomprobación. Primero, necesitamos algo para probar, un DUT. Para eso, he creado el módulo en el código a continuación. Es un convertidor de código binario a 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;
El código Gray es un esquema de codificación de números alternativo, diferente de la codificación binaria regular. La principal propiedad y propósito del código Gray es que solo cambia un bit al contar entre valores numéricos adyacentes.
Decimal
Binario
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
La tabla anterior muestra cómo el código Gray difiere del código binario.
El banco de pruebas
Comenzaremos creando el banco de pruebas básico e instanciando el DUT dentro de él. El siguiente código muestra el archivo del banco de pruebas con el DUT instanciado y todas las importaciones necesarias.
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;
Tenga en cuenta que estamos importando std.env.finish que requiere VHDL-2008. Si intenta compilar el banco de pruebas en ModelSim sin cambiar nada, obtendrá el siguiente error:
# ** Warning: gray_converter_tb.vhd(6): (vcom-1516)
Package "STD.ENV" does not exist in this language version.