Diseño de Hardware con VHDL Facultad de Ingenierı́a Laboratorio Electrónica Segundo Semestre, 2015 Field Programmable Gate Array (FPGA) • De una manera superficial podemos decir que las FPGA son chips de silicio reprogramables. Utilizando bloques de lógica pre-construidos y recursos para ruteo programables, podemos configurar estos chips para implementar funcionalidades personalizadas en hardware. • El uso de FPGA en la industria ha sido impulsada por el hecho de que estos combinan lo mejor de los ASICs y de los sistemas basados en procesadores. Ofrecen velocidades temporizadas por hardware y fiabilidad, pero sin requerir altos volúmenes de recursos para compensar el gran gasto que genera un diseño personalizado de ASIC. • La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema combinacional hasta complejos sistemas en un chip. 2 de 52 Ventajas y Desventajas Ventajas • Rendimiento (Paralelismo y Algoritmos) • Tiempo en llegar al mercado • Precio • Fiabilidad • Mantenimiento a largo plazo • Hardware a la medida 3 de 52 Desventajas • Precio • Entornos de desarrollo de propietarios • Lenguaje Complejo FPGA vs Micro ¿Por qué utilizar una FPGA y no un Microcontrolador? 4 de 52 Aplicaciones 5 de 52 FPGA 6 de 52 Elbert V2 - Spartan 3A • FPGA: Spartan XC3S50A • 16 Mb SPI flash memory. • USB 2.0 interface for On-board flash programming. • ELBERT V2 es una FPGA simple pero versátil para el aprendizaje y desarrollo. • Una excelente opción para aprender y experimentar en el diseño de sistemas con FPGA. • FPGA configuration via JTAG and USB • 8 LEDs ,6 Push Buttons, 3 Seven Segment Displays, DIP switch. • VGA output, Stereo audio out, Micro SD card adapter. • 39 IOs for user defined purposes • On-board voltage regulators. 7 de 52 Very high-speed ICs Hardware Description Language (VHDL) VHDL es un lenguaje definido por el IEEE usado por ingenieros para describir circuitos digitales. VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware Description Language. 8 de 52 Origen VHDL VHDL surge a principios de los ’80 de un proyecto DARPA (Agencia de investigación del Departamento de Defensa de los EE.UU.) llamado VHSIC. Aparece como una manera de describir circuitos integrados debido a la crisis del ciclo de vida del Hardware; ya que cada dı́a los circuitos integrados eran más complicados, y el coste de reponerlos cada vez era mayor, porque no estaban correctamente documentados. VHDL nació como una manera estándar de documentar los circuitos y al mismo tiempo, se vio que la expresividad de VHDL permitirı́a reducir el tiempo de diseño de los circuitos, porque se podrı́an crear directamente de su descripción: utilidad de la sı́ntesis En 1987 el trabajo fue cedido al IEEE, y a partir de ese momento es un estándar abierto. 9 de 52 ¿Para qué sirve VHDL? VHDL nos permite modelar sistemas digitales los cuales nos permiten: • Simular: Verificar que tiene la funcionalidad deseada. • Sintetizar: Crear un circuito que funciona como el modelo. 10 de 52 Sistemas Digitales 11 de 52 Estructura de un modulo VHDL Prueba.vhdl 12 de 52 Prueba.vhdl Estructura de un modulo VHDL 13 de 52 IEEE 1164 El estándar IEEE 1164 define un paquete de diseño de unidad que contiene las declaraciones que soportan la representacion uniforme de un valor lógico en la descripción de hardware brindada por VHDL. 14 de 52 Entidad Se inicia la declaracion de puertos con el comando: • Port( Se termina la declaracion de puertos con: • ); La sintaxis es la siguiente: • Nombre: modo TIPO; Modo: • in: Una señal que entra en la entidad y no sale. La señal puede ser leı́da pero no escrita. • out: Una señal que entra en la entidad y no sale. La señal puede ser leı́da pero no escrita. • inout: Una señal que es bidireccional, entrada/salida de la entidad. 15 de 52 Flip Flop.vhdl 16 de 52 Identificadores • Se utilizan las mismas reglas que en la mayorı́a de lenguajes de programación • Solo pueden contener caracteres alfanuméricos (AZ, az, 09) y el sı́mbolo de guión bajo ( ) • Deben iniciar con una letra • No deben finalizar con guión bajo • No deben existir dos guiones bajos consecutivos • VHDL NO ES CASE-SENSITIVE • No se permiten espacios en blanco 17 de 52 Objetos de datos: • Variables • Constantes • Señales Señales • Contiene información sobre el valor/dato almacenado. • Los valores almacenados en una señal pueden ser modificados y leı́dos • Utilizadas para interconectar elementos concurrentes (tal y como si fuesen ((cables))) • En un proceso no obtendrán el valor asignado inmediatamente, sino hasta salir de éste • Nunca hay que asignar valor inicial a las señales al momento de declararla • Las señales transportan la información entre arquitecturas/módulos • Los puertos I/O son también señales 18 de 52 Si la señal se utiliza dentro de una arquitectura: Tipo: • std logic • std logic vector • unsigned • signed • integer 19 de 52 Asignación de señales flag <= bandera; tiempo <= 0; RST <= ‘1’; 20 de 52 Dependiendo del tipo de dato, ası́ será el formato para asignar el valor. Se utiliza comilla simple (‘ ‘) para: • std logic Se utiliza comilla doble (“ ”) para: • std logic vector • unsigned • signed No se utiliza ninguna comilla para: • integer • natural 21 de 52 Ruteo 22 de 52 Crear Nuevo Proyecto 23 de 52 Configuración del Dispositivo 24 de 52 Agregar un Módulo 25 de 52 Seleccion Módulo VHDL 26 de 52 Modulo para Sintetización 27 de 52 Ejemplo 1 28 de 52 User Constraints File UCF Este archivo contiene las señales/pines que deben ser mapeadas a una localidad especifica debido a la forma en que la tarjeta esta posicionada. 29 de 52 Agregando el UCF 30 de 52 Agregando el UCF 31 de 52 Configuración del UCF Los pasos para la configuración son los siguientes: • Dejar comentado todos los pines que NO vamos a usar. • Des-comentar el pin a utilizar. • Agregar al pin el nombre de las entradas/salidas que declaramos en la entidad. 32 de 52 UCF Configurado 33 de 52 Sintetización Procesos • A: View RTL Schematic: Una vez ya se ha Sintetizado (Corriendo Synthesize - XST) se prosigue a generar el esquemático usando esta opción. • B: Check Syntax: Verificar que no hayan errores de sintaxis • C: Implement Design: Una vez configurado el UCF se prosigue a implementar el diseño para el dispositivo • D: Generate Programming File: Genera el bitstream que se programara en la tarjeta de desarrollo. 34 de 52 Clase 2 35 de 52 Type Casting 36 de 52 Importante Para realizar el type casting es necesario usar la libreria: • Use IEEE.numeric std.all; 37 de 52 Procesos Un proceso describe el comportamiento de un circuito. • Su estado puede variar cuando cambian ciertas señales • Puede utilizar construcciones muy expresivas: if, else, case, for, while, etc. 38 de 52 Elementos de un proceso 1. Lista Sensitiva ◦ Lista de señales que disparan el proceso. ◦ Cualquier evento (cambio) en cualquiera de las señales de la lista sensitiva causará que el proceso se ejecute. 2. Declaraciones ◦ Declaración de tipos, funciones, procedimientos y variables. ◦ Todas las declaraciones son locales 3. Sentencias Secuenciales ◦ El código que será ejecutado al activarse el proceso. 39 de 52 Ejemplo Procesos 40 de 52 Condicional IF 1. Pueden utilizarse ÚNICAMENTE dentro de procesos ◦ Estos pueden ser secuenciales o concurrentes 2. Pueden ser anidados ◦ Es buena práctica anidar la menor cantidad de sentencias IF posibles. 3. Pueden contener más de una condición a evaluar, utilizando conectores lógicos (AND, OR, XOR, etc.) 41 de 52 Sintaxis Condicional IF 42 de 52 Clase 3 43 de 52 Procesos para contar tiempo Podemos fácilmente utilizar un proceso para llevar el calculo del tiempo haciendo un contador de flancos de subida; para esto usaremos la siguiente formula x = T (s) ∗ fosc (1) Tomar en cuenta: • El numero 0 es tomado en cuenta en el contador, por tanto el valor a ingresar sera x-1; 44 de 52 Ejemplo Blinking Led 45 de 52 Multiplexores Los multiplexores son circuitos combinacionales con varias entradas y una única salida de datos, están dotados de entradas de control capaces de seleccionar una, y sólo una, de las entradas de datos para permitir su transmisión desde la entrada seleccionada hacia dicha salida. 46 de 52 Diagrama 47 de 52 Condicional When • Similar a la condicional IF, pero depende solamente de una expresión • Es muy importante colocar la última opción WHEN OTHERS, con el fin de abarcar todas las posibilidades, si lo obviamos tendremos un error en la sintetizacion. 48 de 52 Sintaxis 49 de 52 Ejemplo Multiplexor 50 de 52 Banderas (Flags) En programación, la bandera o flag se refiere a uno o más bits que se utilizan para almacenar un valor binario o código que tiene asignado un significado. Las banderas se utilizan mayoritariamente para controlar o indicar el estado intermedio o final o el resultado de diferentes operaciones 51 de 52 Ejemplo Multiplexar Displays 52 de 52