-- Modelo de test de un contador basado en tabla de test

- Declaración de la entidad
Entity testXTaula is
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: 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','0', 12), --contar
('1','0', 12), --contar
('0','0', 12), --mantener
('1','0', 13), --contar
('1','1', 13), --carga
('1','0', 13), --contar
('1','0', 13) --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
signal ck, enable, load: bit:='1'; -- Señales de interconexión e inicialización
signal d, q: natural range 0 to 15 := 14;
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
begin

for 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='0'; -- Las señales se envian al DUT en el flanco negativo

end loop;

end process;

end bhr;


WcN - Joan Oliver. Diseño de circuitos digitales con VHDL