-- Modelo de test de un contador basado en tabla
de verificación para autotest
-- La señal okq corresponde a la salida esperada
-- Declaración de la entidad
Entity testXTaula is
port (okq: out bit); -- Señal de salida: se activa cuando se produce error
end;
Architecture bhr of testXTaula is
type mostra is record --
Paso1: Registro de las señales de la tabla de test
enable, load: bit;
d, q: natural range 0 to 15;
end record;
type array_test is array (natural range
<>) of mostra; -- Paso 2: Creación
de un array de registros
constant test: array_test:=( -- Paso
3: Inicialización del array
('1','1', 5, 5), --carga
('1','0', 12, 6), --contar
('1','0', 12, 7), --contar
('1','0', 12, 7), --contar+error
('0','0', 12, 8), --mantener
('0','0', 12, 9), --mantener+error
('1','0', 14, 9), --contar
('1','1', 14, 14), --carga
('1','0', 14, 15), --contar
('1','0', 14, 0), --contar
('1','0', 14, 1) --contar
);
Component compt_x -- Declaración
del DUT, el contador
port (
ck, enable, load: in bit;
d: in natural range 0 to 15;
q: out natural range 0 to 15);
end component;
constant t: time := 2 ns; --
Constante temporal
constant delta: time := 1 ns;
signal ck, enable, load: bit:='1'; -- Señales
de interconexión
signal d, q, testq: natural range 0 to
15;
begin
compt: compt_x port map (ck, enable, load, d, q); -- Instanciación del DUT
ck <= not ck after t; -- Generación del reloj automática
process
beginfor i in test'range loop -- Bucle de aplicación de la tabla de verificación
enable <= test(i).enable; -- Aplicación de la señal de enable
load <= test(i).load; -- Aplicación de la señal de carga
d <= test(i).d; -- Entrada paralela
wait until ck'event and ck='1'; -- Aplicación del vector de verificación
testq <= test(i).q;
wait for delta; -- Después de un delta se comprueba la salidaend loop;
end process;
okq <= '0' when testq=q else '1'; -- Señal de comprobación de salida
end bhr;