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