Simulaciєn avanzada con TestBench en HDL

Anuncio
Simulación
avanzada con
TestBench en HDL
Ing. Andrés Miguel Airabella.
Ing. Facundo Aguilera.
Simulación avanzada con
TestBench en HDL
Desc. del Problema
Descripción HDL
Synthesis
Place and Route / Fit
A. M. Airabella - F. Aguilera
2
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
3
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
4
Simulación avanzada con
TestBench en HDL
Every time you
breath, you verify.
Nizar Abdallah, Actel Corp.
A. M. Airabella - F. Aguilera
5
Simulación avanzada con
TestBench en HDL
Desc. del Problema
I/O Esperadas
Descripción HDL
Estímulos HDL
Synthesis
Simulación
Place and Route / Fit
Simulación
Simulación
A. M. Airabella - F. Aguilera
6
Simulación avanzada con
TestBench en HDL
¿Qué es un
TestBench?
A. M. Airabella - F. Aguilera
7
Simulación avanzada con
TestBench en HDL
A. M. Airabella - F. Aguilera
8
Simulación avanzada con
TestBench en HDL
010010011101
101101100010
A. M. Airabella - F. Aguilera
9
Simulación avanzada con
TestBench en HDL
HDL
010010011101
HDL
HDL
101101100010
o
VHDL AMS
VHDL AMS
VHDL AMS
A. M. Airabella - F. Aguilera
10
Simulación avanzada con
TestBench en HDL
VHDL
Secuencia
de 1 y 0
00000000 a_i
00110011 b_i
01010101 c_i
TestBench
UUT (o DUT)
Full Adder
01101001 s_o
00010111 c_o
A. M. Airabella - F. Aguilera
11
Simulación avanzada con
TestBench en HDL
TestBench
VHDL
Secuencia
de 1 y 0
/
32
/
32
UUT
Multiplicador
/
32 bits x 32 bits
A. M. Airabella - F. Aguilera
12
Simulación avanzada con
TestBench en HDL
TestBench
VHDL
Secuencia
de 1 y 0
/
32
/
32
UUT
Multiplicador
32 bits x 32 bits
/
64
Posibles Combinaciones para las entradas
232 * 232 = 18.446.744.073.709.551.616
214 * 214 = 268.435.456
A. M. Airabella - F. Aguilera
13
Simulación avanzada con
TestBench en HDL
TestBench
VHDL
Secuencia
de 1 y 0
/
32
/
32
UUT
Multiplicador
32 bits x 32 bits
/
64
¿Por qué simular todos los valores?
Mult <= A * B;
Sum <= A + B;
A. M. Airabella - F. Aguilera
14
Simulación avanzada con
TestBench en HDL
TestBench
VHDL
Secuencia
de 1 y 0
/
14
/
14
Chequea
resultados
UUT
Multiplicador
14 bits x 14 bits
A. M. Airabella - F. Aguilera
/
28
15
Simulación avanzada con
TestBench en HDL
¿Qué hay dentro de
un TestBench?
A. M. Airabella - F. Aguilera
16
Simulación avanzada con
TestBench en HDL
Entidad del TestBench
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity fa_tb is
end entity;
Ejemplo:
FullAdder
A. M. Airabella - F. Aguilera
17
Simulación avanzada con
TestBench en HDL
Arquitectura del TestBench (I)
architecture fa_arch_tb of fa_tb is
­­ Defino el componente
component fa is
port (
A_i : in std_logic;
B_i : in std_logic;
C_i : in std_logic;
S_o : out std_logic;
C_o : out std_logic
);
end component;
...
A. M. Airabella - F. Aguilera
Ejemplo:
FullAdder
18
Simulación avanzada con
TestBench en HDL
Arquitectura del TestBench (II)
...
­­ Defino Señales de Interconexion.
signal A_i : std_logic;
signal B_i : std_logic;
signal C_i : std_logic;
signal S_o : std_logic;
signal C_o : std_logic;
­­ Otras Declaraciones
...
A. M. Airabella - F. Aguilera
Ejemplo:
FullAdder
19
Simulación avanzada con
TestBench en HDL
Arquitectura del TestBench (III)
...
begin
­­ Instanciar el componente fa
fa1: fa port map
(
A_i => A_i, B_i => B_i,
C_i => C_i, S_o => S_o,
C_o => C_o);
­­ Aplicamos los vectores de prueba, ­­ asignaciones manuales, ­­ archivo de test...
end architecture fa_arch_tb; A. M. Airabella - F. Aguilera
Ejemplo:
FullAdder
20
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
21
Simulación avanzada con
TestBench en HDL
Generación de Estímulos - Asignaciones Manuales
- Manualmente escribo los valores (y su duración en el
tiempo) de las entradas (opc. de las salidas).
- Ejecuto el TestBench para un tiempo específico.
- Veo los resultados en la forma de onda o por consola.
Andrés Miguel Airabella
A. M.
AirabellaAguilera
- F. Aguilera
Facundo
22
Simulación avanzada con
TestBench en HDL
Generación de Estímulos - Asignaciones Manuales
Uncloked: process begin
D_i <= '0'; RESET_i <= '1'; wait for 230 ns; ­­ Reset
RESET_i <= '0'; wait for 170 ns; ­­ No Reset
D_i <= '1'; wait for 160 ns;
D_i <= '0'; wait for 260 ns; ­­ ...
A. M. Airabella - F. Aguilera
23
Simulación avanzada con
TestBench en HDL
A. M. Airabella - F. Aguilera
24
Simulación avanzada con
TestBench en HDL
A. M. Airabella - F. Aguilera
25
A. M. Airabella - F. Aguilera
26
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
27
Simulación avanzada con
TestBench en HDL
Loop
i++
señal1(i)
señal2(i)
señal3(i)
UUT
A. M. Airabella - F. Aguilera
28
Simulación avanzada con
TestBench en HDL
Retardo
Clock
<
Loop
i++
señal1(i)
señal2(i)
señal3(i)
UUT
A. M. Airabella - F. Aguilera
29
Simulación avanzada con
TestBench en HDL
Loop
DUT
j++
i++
a=i
b=j
a
b
Sumador
7 bits
sum
Esperados
A. M. Airabella - F. Aguilera
30
Simulación avanzada con
TestBench en HDL
\
7
\
7
A_i
B_i
rca
C_i
A. M. Airabella - F. Aguilera
S_o
C_o
31
Simulación avanzada con
TestBench en HDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use std.textio.all;
entity rca_tb is
end entity;
architecture rca_arch_tb of rca_tb is
­­ Defino el componente
component rca is
generic (size : integer :=2);
port ( A_i : in std_logic_vector(size ­ 1 downto 0);
B_i : in std_logic_vector(size ­ 1 downto 0);
C_i : in std_logic;
S_o : out std_logic_vector(size ­ 1 downto 0);
C_o : out std_logic);
end component;
A. M. Airabella - F. Aguilera
32
Simulación avanzada con
TestBench en HDL
­­ Defino Seniales de Interconexion.
signal A_i : std_logic_vector(6 downto 0);
signal B_i : std_logic_vector(6 downto 0);
signal C_i : std_logic;
signal S_o : std_logic_vector(6 downto 0);
signal C_o : std_logic;
begin
­­ Instanciar el componente rca
rca1: rca generic map (7)
port map(
A_i => A_i,
B_i => B_i,
C_i => C_i,
S_o => S_o,
C_o => C_o);
A. M. Airabella - F. Aguilera
33
Simulación avanzada con
TestBench en HDL
testeo:
process
variable suma_integer : integer := 0;
variable suma_unsigned : unsigned (7 downto 0);
variable s : line;
variable errors : boolean := false;
begin
for i in 0 to 2**7 ­1 loop
for j in 0 to 2**7 ­1 loop
for k in 0 to 1 loop
A_i <= std_logic_vector(to_unsigned(i,7));
B_i <= std_logic_vector(to_unsigned(j,7));
if k = 1 then C_i <= '1';
else C_i <= '0';
end if;
A. M. Airabella - F. Aguilera
wait for 50 ns;
34
Simulación avanzada con
TestBench en HDL
suma_unsigned := to_unsigned(i + j + k, 8);
suma_integer := i + j + k;
write(s, string'("Sumando ")); write(s, i); write(s, string'(" + ")); write(s, j); write(s, string'(" con Carry ")); write(s, k); writeline(output,s);
­­ Chequeo Carry
if C_o = std_logic(suma_unsigned(7)) then
write(s, string'("Carry Ok"));
writeline(output,s);
else write(s, string'("Error de Carry. Se esperaba ")); write(s, k);
writeline(output,s);
errors := true;
end if;
A. M. Airabella - F. Aguilera
35
Simulación avanzada con
TestBench en HDL
­­ Chequeo Suma
if std_logic_vector(suma_unsigned(6 downto 0)) = S_o then
write(s, string'("Suma Ok"));
writeline(output,s);
else write(s, string'("Error de Suma. Se esperaba ")); write(s, suma_integer); writeline(output,s);
errors := true;
end if;
if errors then exit; end if;
end loop;
if errors then exit; end if;
end loop;
if errors then exit; end if;
A. M. Airabella - F. Aguilera
end loop;
wait;
Archivos rca*.*36
Simulación avanzada con
TestBench en HDL
k++
j++
i++
a=i
b =j
...
DUT
Esperados
A. M. Airabella - F. Aguilera
37
Simulación avanzada con
TestBench en HDL
Descripción
1 Descripción
HDL
HDL
k++
j++
2 Synthesis
Synthesis
i++
a=i
b =j
...
Place
and
Place
3 Route /and
Route /Fit
Fit
DUT
Esperados
A. M. Airabella - F. Aguilera
38
Simulación avanzada con
TestBench en HDL
Test 1
j++
i++
A(i,j) = 10101010<<i
B(i,j) = 10101010<<j
Multiplicador
Test 2
j++
i++
n bits
A(i,j)=test2(i,j)
B(i,j)=test2(i,j)
A. M. Airabella - F. Aguilera
39
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
40
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores
para las entradas (op. para las salidas también).
Declaración de Tipo
test_vector
A_i B_i C_i S_o C_o
­­ Declaro Tipo Vector de Test
type test_vector is record
A_i : std_logic;
B_i : std_logic;
C_i : std_logic;
S_o : std_logic;
C_o : std_logic;
end record; A. M. Airabella - F. Aguilera
41
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores
para las entradas (op. para las salidas también).
­­ Declaro Tipo Arreglo de Vectores de Test
type test_vector_array is array(natural range<>) of test_vector;
A_i B_i C_i S_o C_o
0
0
0
0
0
Posición n
0
0
1
1
0
Posición n + 1
A. M. Airabella - F. Aguilera
42
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores
para las entradas (op. para las salidas también).
­­ Declaro y lleno un arreglo constante de valores.
constant t_v : test_vector_array := (
­­ Formo todas las combinaciones posibles para las E/S
(A_i => '0', B_i => '0', C_i => '0', S_o => '0', C_O => '0'),
(A_i => '0', B_i => '0', C_i => '1', S_o => '1', C_O => '0'),
.
.
.
A. M. Airabella - F. Aguilera
43
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- En un for in loop recorro todos los valores del
ARREGLO y se los voy asignando al UUT (o DUT).
for i in t_v'range loop
­­ Leer el valor del vector i
vector := t_v(i);
­­ Asigno a las seniales correspondientes
A_i <= vector.A_i;
B_i <= vector.B_i;
C_i <= vector.C_i;
.
.
.
A. M. Airabella - F. Aguilera
44
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- Veo los resultados en la forma de onda o chequeo
directamente en el TestBench.
A. M. Airabella - F. Aguilera
45
Simulación avanzada con
TestBench en HDL
Bucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores
para las entradas (op. para las salidas también).
- En un for in loop recorro todos los valores del
ARREGLO y se los voy asignando al UUT (o DUT).
- Veo los resultados en la forma de onda o chequeo
directamente en el TestBench.
A. M. Airabella - F. Aguilera
46
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
47
Simulación avanzada con
TestBench en HDL
Escenario real
Señales
eléctricas
PLD o
PLD
Componente
Otro
Comunicación
A. M. Airabella - F. Aguilera
dispositivo
48
Simulación avanzada con
TestBench en HDL
Escenario real
Señales
eléctricas
PLD o
PLD
Componente
Comunicación
A. M. Airabella - F. Aguilera
49
Simulación avanzada con
TestBench en HDL
TestBench
Componente
Estímulos
DUT
Comunicación
A. M. Airabella - F. Aguilera
virtual
(VHDL)
50
Simulación avanzada con
TestBench en HDL
Estímulos
Caso
Clock
Procedimientos
DUT
Asignaciones
ADC
EJEMPLO
EJEMPLO
A. M. Airabella - F. Aguilera
51
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
52
Simulación avanzada con
TestBench en HDL
TestBench
Salida
.txt, .dat
...
DUT
Estimulos
.txt, .dat
Lectura
Escritura
...
Archivos
Archivos
Reporte
Test
A. M. Airabella - F. Aguilera
53
Simulación avanzada con
TestBench en HDL
Estimulos
Lectura
.txt
Archivos
use std.textio.all;
.
.
.
file vector_file : text is in "estimulos.txt";
.
.
.
read(L: line, Valor: character, Valid: boolean);
A. M. Airabella - F. Aguilera
54
Simulación avanzada con
TestBench en HDL
use std.textio.all;
.
.
.
Escritura
Archivos
Salida
.txt
file vector_file : text is out "salida.txt";
.
.
.
Write (L: line, Valor: character, Valid: boolean);
A. M. Airabella - F. Aguilera
55
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
56
Simulación avanzada con
TestBench en HDL
Relojes
- Manual
- Sentencia Concurrente
- Módulo de Clock
A. M. Airabella - F. Aguilera
57
Simulación avanzada con
TestBench en HDL
wait for 50 ns; CLK_i <= '1';
Manual
wait for 25 ns; RESET_i <= '1';
wait for 25 ns; CLK_i <= '0';
wait for 50 ns; CLK_i <= '1';
wait for 50 ns; CLK_i <= '0';
wait for 50 ns; CLK_i <= '1';
wait for 25 ns; RESET_i <= '0';
wait for 25 ns; CLK_i <= '0';
wait for 25 ns;
A. M. Airabella - F. Aguilera
58
Simulación avanzada con
TestBench en HDL
Concurrente
CLK_i <= not (CLK_i) after 50 ns; A. M. Airabella - F. Aguilera
59
Módulo de Clock
entity tb_simple_clock is
port (
CLK_PERIOD: in
time;
-- := 20 ns;
CLK_DUTY:
in
real;
-- := 50.0;
active:
in
boolean;
clk_o:
out
std_logic
);
end entity tb_simple_clock ;
architecture beh of tb_simple_clock is
begin
P_main: process
begin
wait until active;
while (active = true) loop
clk_o <= '0';
wait for CLK_PERIOD * (100.0 - clk_Duty)/100.0;
clk_o <= '1';
wait for CLK_PERIOD * clk_Duty/100.0;
end loop;
clk_o <= '0';
wait;
Clock
end process;
A. M. Airabella - F. Aguilera
end architecture beh;
60
Simulación avanzada con
TestBench en HDL
- Generalidades
- Generación de Estímulos
Agenda
- Asignaciones Manuales
- Bucle
- Bucle con vectores de prueba
- Módulo de prueba
- Escritura/Lectura de Archivos
- Relojes
- Conclusiones
A. M. Airabella - F. Aguilera
61
Simulación avanzada con
TestBench en HDL
cvbcb
Estímulos
Clock
Reporte
Onda
DUT
Módulo
Vectores,
Loop,
Manual
Esperados
Comparación
- Cálculo
- Tabla
- Módulo
A. M. Airabella - F. Aguilera
62
Archivos
www.andresairabella.com.ar
A. M. Airabella - F. Aguilera
63
¡Gracias!
A. M. Airabella - F. Aguilera
64
Descargar