Ing. Andrés Miguel Airabella.Ing. Facundo Aguilera.
Simulación Simulación avanzada con avanzada con
TestBench en HDLTestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 22
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Desc. del Problema
Descripción HDL
Synthesis
Place and Route / Fit
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 33
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 44
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 55
Every time you Every time you breath, you verify. breath, you verify.
Nizar Abdallah, Actel Corp. Nizar Abdallah, Actel Corp.
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 66
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Estímulos HDL
Desc. del Problema I/O Esperadas
Simulación
Simulación
Simulación
Descripción HDL
Synthesis
Place and Route / Fit
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 77
¿Qué es un ¿Qué es un TestBench?TestBench?
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 88
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 99
010010011101 101101100010
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1010
010010011101 101101100010
HDL
VHDL AMS
HDL
HDLo
VHDL AMS
VHDL AMS
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1111
TestBenchTestBench
UUT (o DUT)Full Adder
00000000 a_i 01101001 s_o
VHDLSecuencia
de 1 y 0
00110011 b_i01010101 c_i
00010111 c_o
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1212
TestBenchTestBench
UUTMultiplicador
32 bits x 32 bits
/32
VHDLSecuencia
de 1 y 0
/32
/
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1313
TestBenchTestBench
UUTMultiplicador
32 bits x 32 bits
/32
VHDLSecuencia
de 1 y 0
/32
/64
Posibles Combinaciones para las entradasPosibles Combinaciones para las entradas223232 * 2 * 23232 = 18.446.744.073.709.551.616 = 18.446.744.073.709.551.616
221414 * 2 * 21414 = 268.435.456 = 268.435.456
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1414
TestBenchTestBench
UUTMultiplicador
32 bits x 32 bits
/32
VHDLSecuencia
de 1 y 0
/32
/64
¿Por qué simular todos los valores?¿Por qué simular todos los valores?Mult
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1515
TestBenchTestBench
UUTMultiplicador
14 bits x 14 bits
/14
VHDLSecuencia
de 1 y 0
/14
Chequearesultados
/28
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1616
¿Qué hay dentro de ¿Qué hay dentro de un TestBench?un TestBench?
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1717
Entidad del TestBenchEntidad del TestBench
library IEEE;use IEEE.STD_LOGIC_1164.ALL;
entity fa_tb isend entity;
Ejemplo: Ejemplo: FullAdderFullAdder
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1818
Arquitectura del TestBench (I)Arquitectura del TestBench (I)architecture fa_arch_tb of fa_tb is
Defino el componentecomponent 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;...
Ejemplo: Ejemplo: FullAdderFullAdder
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 1919
Arquitectura del TestBench (II)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...
Ejemplo: Ejemplo: FullAdderFullAdder
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2020
Arquitectura del TestBench (III)Arquitectura del TestBench (III)...begin Instanciar el componente fafa1: 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;
Ejemplo: Ejemplo: FullAdderFullAdder
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2121
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2222
Generación de Estímulos - Asignaciones ManualesGeneració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 AirabellaFacundo Aguilera
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2323
Generación de Estímulos - Asignaciones ManualesGeneración de Estímulos - Asignaciones ManualesUncloked: process begin
D_i
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2424
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2525
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2626
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2727
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2828
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Loop
UUTseñal1(i)señal2(i)señal3(i)i++
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 2929
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Loop
UUT
ClockRetardo
señal1(i)señal2(i)señal3(i)i++
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3030
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
DUTLoop
a = ib = ji++j++
Sumador7 bitsb
asum
Esperados
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3131
rca
\7 S_o
C_iC_iC_o
\7
A_i
B_i
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3232
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.numeric_std.all;use std.textio.all;
entity rca_tb isend entity;
architecture rca_arch_tb of rca_tb is Defino el componentecomponent 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;
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
library IEEE;use IEEE.STD_LOGIC_1164.ALL;
entity fa_tb isend entity;
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3333
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 rcarca1: 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);
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3434
testeo:processvariable 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
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3535
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 Carryif 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;
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3636
Chequeo Sumaif 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;end loop;wait;
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Archivos rca*.*
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3737
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
a = ib = ji++j++
DUT
Esperados
...
k++
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3838
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
a = ib = ji++j++
DUT
Esperados
...
k++
Place and Route / Fit
Place and Route / Fit
SynthesisSynthesis
Descripción HDL
Descripción HDL1
2
3
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 3939
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Test 2
Test 1
Multiplicadorn bits
A(i,j) = 10101010
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4040
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4141
Bucles con vectores de pruebaBucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores para las entradas (op. para las salidas también).
A_i
Declaro Tipo Vector de Testtype 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;
B_i C_i S_o C_o
Declaración de Tipotest_vector
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4242
Bucles con vectores de pruebaBucles con vectores de prueba
- Genero un ARREGLO de VECTORES con valores para las entradas (op. para las salidas también).
0 0 0 0 0
Declaro Tipo Arreglo de Vectores de Testtype test_vector_array is array(natural range) of test_vector;
A_i B_i C_i S_o C_o
0 0 1 1 0
Posición n
Posición n + 1
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4343
Bucles con vectores de pruebaBucles 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'), . . .
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4444
Bucles con vectores de pruebaBucles 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
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4545
Bucles con vectores de pruebaBucles con vectores de prueba
- Veo los resultados en la forma de onda o chequeo directamente en el TestBench.
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4646
Bucles con vectores de pruebaBucles 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.
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4747
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4848
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Escenario realEscenario real
PLDSeñales
eléctricas ComunicaciónOtro
dispositivoPLD
PLD oComponente
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 4949
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
Escenario realEscenario real
Señaleseléctricas PLD ComunicaciónPLD
PLD oComponente
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5050
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
TestBenchTestBench
Componentevirtual (VHDL)
Estímulos DUTComunicación
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5151
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
CasoCaso
ADC
Estímulos
DUT
Clock
Procedimientos
AsignacionesEJEMPLOEJEMPLO
file:///home/andres/Documentos/UNSL/SASE%202011/Tutorial%20TB/modullar_oscilloscope_tbench_text.vhd
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5252
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5353
TestBenchTestBench
DUTLectura
ArchivosEscrituraArchivos
ReporteReporte
SalidaSalida
.txt, .dat.txt, .dat
......
EstimulosEstimulos
.txt, .dat.txt, .dat
......
Test
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5454
use std.textio.all;...
file vector_file : text is in "estimulos.txt";...
read(L: line, Valor: character, Valid: boolean);
LecturaArchivos
EstimulosEstimulos
.txt.txt
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5555
use std.textio.all;...
file vector_file : text is out "salida.txt";...
Write (L: line, Valor: character, Valid: boolean);
EscrituraArchivos
SalidaSalida
.txt.txt
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5656
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5757
RelojesRelojes- Manual- Manual
- Sentencia Concurrente- Sentencia Concurrente
- Módulo de Clock- Módulo de Clock
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5858
ManualManual wait for 50 ns; CLK_i
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 5959
ConcurrenteConcurrente CLK_i
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 6060
Módulo de ClockMódulo de Clockentity 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 isbegin P_main: process begin wait until active; while (active = true) loop clk_o
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 6161
AgendaAgenda- Generalidades- Generalidades- Generación de Estímulos- Generación de Estímulos - Asignaciones Manuales- Asignaciones Manuales - Bucle- Bucle - Bucle con vectores de prueba- Bucle con vectores de prueba - Módulo de prueba- Módulo de prueba- Escritura/Lectura de Archivos- Escritura/Lectura de Archivos- Relojes- Relojes- Conclusiones- Conclusiones
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 6262
cvbcbcvbcb
Esperados- Cálculo
- Tabla
- Módulo
Estímulos
DUTMódulo
Vectores, Loop, Manual
Clock ReporteReporteOndaOnda
Comparación
DUT
Simulación avanzada con Simulación avanzada con TestBench en HDL TestBench en HDL
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 6363
Archivos Archivos www.andresairabella.com.arwww.andresairabella.com.ar
http://www.andresairabella.com.ar/
A. M. Airabella - F. AguileraA. M. Airabella - F. Aguilera 6464
¡Gracias! ¡Gracias!
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64