Introducción al diseño de hardware con FPGA utilizando VHDL
Iván René Morales
Lab. Electrónica / Colaboración LAGO
Universidad de San Carlos de Guatemala
¿Qué es un FPGA?
Field
Programmable
Gate
Array Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 2
¿Qué contiene un FPGA? Lógica, interconexiones y ruteo programables
Bloques dedicados
Memoria
Control de relojes
Bloques DSP
Procesadores embebidos
Controladores de memoria
Controladores Ethernet
Controladores PCI-Express
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 4
¿Qué contiene un FPGA? Hasta 1200 I/O
Más de 40 estándares I/O. Diferenciales y «single-ended»
Más de 40,000 FFs y Tablas de Búsqueda (LUTs)
Soft core microprocessors
PLLs y DLLs
Impedancia y «output strenght» controlables
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 5
Arquitectura de un FPGA
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 6
Arquitectura de FPGA Spartan-6
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 7
Evolución de FPGAs Xilinx
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 8
Distribución de la lógica de un FPGA
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 9
Configuraciones de enrutamiento
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 10
Configuración de Ruteo + Lógica
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 11
Celdas configurables Tipos de celdas
SRAM
Flash
Flash + SRAM
Anti-Fuse
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 12
Comparación – Tipos de celdas SRAM Anti-Fuse Flash
Tecnología Última Antigua Antigua
Velocidad Lenta Rápida Lenta
Volatilidad Sí No No
Consumo de potencia Grande Bajo Medio
Densidad Buena La mejor Media
Tolerancia a radiación Pobre La mejor Media
Tamaño de celda 1 1/10 1/7
Reprogramable Sí No Sí
Encendido instantáneo No Sí Sí
Seguridad Pobre Muy Buena Muy Buena
Transistores de config. 6 Transistores Ninguno 2 Transistores
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 13
¿Cuál es el mejor FPGA? Todos los vendedores dicen que sus FPGA son los
mejores.
Pero al final, el usuario tiene la última palabra
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 14
Configurable Logic Blocks (CLB)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 16
Slices de un S6 SLICEM: Slice completo
LUT pueden ser usadas para memoria y SRL
Tiene muxes y cadenas de acarreo
SLICEL: Lógica y aritmética únicamente
LUT pueden ser usadas solo para lógica (no memoria)
Tiene muxes y cadenas de acarreo
SLICEX: Solamente lógica
LUT pueden ser usadas solo para lógica (no memoria)
Sin muxes ni cadenas de acarreo.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 18
Slice de un S6 Cuatro LUT Ocho elementos de memoria
Cuatro FF/Latches Cuatro FF
MULTIPLEXORES Interconectan salidas de
LUTs para crear funciones complejas
Sus salidas pueden manejar FF/Latches
Cadena de acarreo Conectada a las LUTs y a los
cuatro FF/Latches
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 20
LUT6 con salida doble de un S6 LUT de 6 entradas puede
convertirse en dos LUT de 5 entradas con entradas comunes. Puede implementarse
cualquier función con 6 entradas
También es posible implementar dos funciones independientes de 5 entradas
Opción de salida simple o doble
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 21
Look-Up Table (LUT)
La configuración de las LUT no es responsabilidad del diseñador
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 22
Características especiales de I/O en S6 Digital Controlled Impedance (DCI)
Drive Strenght
Slew Rate
Bus Hold (Bus keeper)
Pull-Up/Down
Differential Termination
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 25
Block RAM 18kb
Múltiples tamaños disponibles
Múltiples configuraciones
Dual-port, single-port
Byte-write enable
Modos de operación
Write first
Read first, then write
No change
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 27
Distintas configuraciones de tamaños de BRAM
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 28
Controlador de memoria externa en S6 Único FPGA de «bajo costo» con un controlador de
memoria en hardware
Soporta DDR, DDR2, DDR3 y LP DDR
Ancho de banda de hasta 12.8Mbps en cada controlador
Calibración automática
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 29
Rutas: Un vistazo más de cerca
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 32
Un ejemplo de rutas LAGO Guatemala
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 33
CMT (Clock Management Tile) Contiene 2 DCM y 1 PLL
Conectados directamente a las rutas dedicadas para relojes (clock distribution routes)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 35
DCM (Digital Clock Manager) Control digital
Elimina skew (desfase)
Cambio de fase de reloj Fijo
Variable
Multiplica y divide un reloj para síntesis de frecuencia
Reacondicionamiento del ciclo de trabajo a 50%
Síntesis de relojes diferenciales (espejo)
Síntesis de reloj para Spread Spectrum
Buffer de reloj Capaz de acoplarse a líneas con alto fan-out
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 36
Digital Clock Manager (DCM)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 37
Phase-Locked Loop (PLL) Síntesis de frecuencia de amplio rango
Filtro de jitter
Contraparte analógica del DCM
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 38
Phase-Locked Loop (PLL)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 39
Ventajas de un FPGA Paralelismo
Organización modular
Reconfiguración de pines
Soft-Cores
SoC (Fábrica + µP)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 41
Desventajas de un FPGA Costo
Consumo energético
Complejidad
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 42
Nexys 3 Spartan-6 XC6LX16-CS324 16Mbytes Cellular RAM 16MBytes SPI PCM non-volatile memory 16MBytes parallel PCM non-volatile memory 10/100 Ethernet PHY USB-UART USB-HOST Puerto VGA de 8 bits Oscilador CMOS de 100 MHz 72 I/Os en conectores PMOD y VHDC LEDs, Push-buttons, DIP-switches, 4x 7-segment displays
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 44
Lenguaje de ¿programación?
V ery high-speed ICs
H ardware
D escription
L anguage 47
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC
Lenguaje de Descripción de Hardware Utiliza instrucciones de alto nivel para implementar
hardware
Implementación por módulos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 48
VHDL no es un lenguaje de programación Es un lenguaje de descripción de hardware
Aún no tiene un nivel de abstracción tan alto como los lenguajes de programación. e.g. Python:
Existen plug-ins para Simulink y LabView que generan VHDL a partir de diagramas de bloques
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 49
¿Cómo inició VHDL? Documentar ASICs
Modelación y simulación de ASICs
Herramientas de síntesis iniciaron en los años ‘90
No todas las sentencias de VHDL son «sintetizables»
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 50
Cambio de mentalidad Para los que estamos acostumbrados a programar
microcontroladores y computadoras:
No existe un microprocesador mágico que ejecute las instrucciones dentro de un FPGA
El código ensambla hardware al momento de encender el FPGA.
El código es ejecutado de forma concurrente, a pesar de que se escriba de línea en línea
El código corresponde a la descripción de hardware, y no son una serie de instrucciones a ejecutar
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 51
Estructura de módulo VHDL
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 52
Estructura de módulo VHDL
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 53
¿Cómo sabemos si funciona? Test Bench
Incrustar el módulo a verificar (Unit Under Test) dentro de un módulo VHDL de simulación
Este módulo de simulación actuará sobre el UUT como si éste fuese una caja negra
Se insertan estímulos, y se verifica la respuesta a éstos
Similar a una «función de transferencia»
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 54
Elementos básicos del lenguaje
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 57
Antes de iniciar… Referencia de VHDL por parte de Xilinx (XAPP105):
http://www.xilinx.com/support/documentation/application_notes/xapp105.pdf
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 58
Identificadores Se utilizan las mismas reglas que en la mayoría de
lenguajes de programación
Solo pueden contener caracteres alfanuméricos (A-Z, a-z, 0-9) 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
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 59
Objetos de datos Variables
Constantes
Señales
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 60
Declaraciones implícitas de objetos de datos Existen algunas construcciones en VHDL que
establecen por defecto el tipo de objeto de dato
Puertos de una entidad: Señal
Genéricos de una entidad: Constante
Parámetros de funciones y procedimientos: Constantes o señales
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 61
Señales Contiene información sobre el valor/dato almacenado,
pero también almacena el tiempo en el cuál se obtiene un nuevo valor
Almacena el estado actual y posibles estados futuros Los valores almacenados en una señal pueden ser
modificados y leídos Utilizadas para interconectar elementos concurrentes (tal y
como si fuesen «cables») Muy importante: 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 declararlas
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 62
I/Os y señales Las señales transportan la información entre
arquitecturas/módulos
Los puertos I/O son también señales
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 63
Declaración de una señal Si la señal se utiliza dentro de una arquitectura:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 64
Nombre Tipo: • std_logic • std_logic_vector • unsigned • signed • integer • natural • real (no es sintetizable)
Declaración de una señal Si la señal se utiliza para declarar un puerto I/O:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 65
Nombre Tipo: • std_logic • std_logic_vector
Modo: • in • out • inout
Tipos de datos – Paquete estándar BIT
Valores posibles: ‘0’, ‘1’
BIT_VECTOR
Arreglo de BIT
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 66
Tipos de datos – Paquete estándar INTEGER
Valores posibles: Cualquier entero de 32 bits (con signo) -2,147,483,648 -> +2,147,483,647
NATURAL Valores posibles: Cualquier INTEGER positivo
0 -> +2,147,483,647
CHARACTER Valores posibles: Caracteres ASCII
STRING Arreglo de caracteres
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 67
Tipos de datos STD_LOGIC_1164 STD_LOGIC
9 valores posibles (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’)
‘1’: Lógico alto
‘0’: Lógico bajo
‘X’: Desconocido
‘Z’: Alta impedancia
‘U’: Indefinido
‘W’: Indefinido débil
‘H’: Lógico alto débil
‘L’: Lógico bajo débil
‘-’: No importa
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 68
Tipos de datos STD_LOGIC_1164 STD_LOGIC_VECTOR
Arreglo de STD_LOGIC
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 69
Modos de un puerto IN: No puede modificarse/escribirse un valor en él.
Solamente puede ser leído.
OUT: Solamente puede modificarse/escribirse un valor en él. No puede ser leído.
INOUT: Puede ser tanto modificado, como leído. Diseñado para ser utilizado en puertos I/O bidireccionales e.g. I²C, One-Wire, etc.
BUFFER: Es un OUT que puede ser leído. No utilizar este modo.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 70
Asignación simple de señales
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 71
Señal que recibirá el dato
Dato a escribir en la señal de destino
SIEMPRE se
utiliza <=
Señales utilizadas para interconectar
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 72
temp
Señales – Valor inicial No hay interpretación de hardware sintetizable que
represente un valor inicial para una señal. El sintetizador los ignora y muestra una advertencia.
Los valores iniciales al momento de la simulación sí son válidos. Hay que tener cuidado con esto.
El diseñador es el responsable de colocar los valores iniciales a las señales (normalmente es a través de un RESET)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 73
Más sobre señales No se actualizan inmediatamente
No pueden ser declaradas en funciones/procedimientos
Alcance: visible desde todos los procesos de la arquitectura
En un proceso combinacional se sintetizan como lógica combinacional
En un proceso secuencial se sintetizan como registros
Se utilizan para intercomunicar procesos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 74
¿Cómo asignar valores a señales? 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
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 75
Ejemplo – Asignación de valores Para una señal de un solo bit (std_logic):
Asumiendo que la señal fue declarada como:
Para asignarle un valor:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 76
Ejemplo – Asignación de valores Para señales de más de un bit
La señal fue declarada como:
Si se desea escribir en todos los bits de la señal
Si se desea escribir solamente en una porción de los bits
Si se desea modificar solo uno de los bits de la señal
Si se desea llenar con un solo valor todos los bits
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 77
Ejemplo – Asignación de valores Para una señal tipo integer o natural
La señal fue declarada así:
Se asigna un valor sin utilizar comillas:
Para operaciones aritméticas básicas y conversión de tipos es necesario incluir paquete numérico estándar de la librería de IEEE:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 78
Variables Almacena únicamente el dato asignado
Puede ser modificada/leída
Toma el valor asignado inmediatamente
Análogas a las variables en un lenguaje de programación convencional
Solamente son permitidas dentro de procesos, procedimientos y funciones
No necesitan ser inicializadas
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 79
Declaración de variables - Ejemplo Declaración puede tener o no un valor inicial
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 80
Asignación de datos a variables Para la asignación se utiliza ´:=´, en vez de ´<=´
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 81
Más sobre variables No tienen noción temporal
No tienen un análogo directo en hardware
No pueden ser utilizadas en bloques concurrentes
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 82
Señal vs Variable SEÑALES VARIABLES
Asignación <= :=
Alcance Global. Comunicación entre procesos
Local, únicamente
Comportamiento Se actualizan ÚNICAMENTE al salir del proceso que las modificó
Actualización inmediata
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 83
Ejemplo: Señal vs Variable
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 84
Ejemplo: Señal vs Variable
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 85
Constantes Almacenan un valor único de un tipo de dato
específico
Obtienen su valor al momento de ser declaradas, y éste no puede ser modificado
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 86
Declaración de constantes
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 87
Entidad y Arquitectura
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 88
Entidad Descripción de los puertos de un módulo VHDL
Debe asociarse a una arquitectura para obtener funcionalidad
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 89
Declaración de una Entidad
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 90
Arquitectura Debe estar asociada a una entidad
Una entidad puede tener más de una arquitectura asociada
Las sentencias de una arquitectura se ejecutan de forma concurrente
Estilos de arquitectura:
Behavioral: descripción de un diseño/funcionamiento
Structural: Interconexión de componentes/netlist
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 92
Arquitectura - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 93
Módulo VHDL: Entidad + Arquitectura
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 94
Ejemplo – Práctica 2 HELLO_WORLD.vhd
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 95
Tipos definidos por el usuario Permite al usuario crear un tipo de dato personalizado
Se respalda en usar un tipo ya existente
¿Para qué quiero tipos definidos?
Código más legible
Codificación de Máquinas de Estado Finitas (FSM)
Declaración de tipos definidos por el usuario
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 96
Types - Ejemplo Estados de una FSM para un módulo SPI Master
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 97
Arreglos Crea un tipo de dato multidimensional con un tipo de
dato existentes.
Debe asignarse a un objeto luego de haber sido creado
Normalmente utilizados para crear memorias
Sintaxis:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 98
Conversión de tipos (Casting) Es imperativo realizar conversión si se desea operar
señales/variables de distintos tipos.
Los puertos I/O de una entidad son (en la mayoría de los casos) STD_LOGIC o STD_LOGIC_VECTOR
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 100
Asignación concurrente Asignación de valores a señales, utilizando distintas
expresiones
Representa un conjunto de procesos que se ejecutan EN PARALELO.
Tres tipos de asignación concurrente
Asignación simple
Asignación condicional
Asignación selectiva
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 103
Asignación simple Sintaxis: <senial> <= <expresion>;
Ejemplo:
Pueden utilizarse paréntesis () para cambiar la jerarquía de las operaciones
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 104
Asignación condicional Sintaxis:
Ejemplo:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 105
Asignación selectiva Sintaxis:
Ejemplo:
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 106
Asignación selectiva Deben tomarse en cuenta todas las posibilidades
La expresión WHEN OTHERS evalúa todas las posibilidades que no hayan sido tomadas en cuenta
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 107
Asignación selectiva
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 108
¿Es necesaria la sentencia WHEN OTHERS?
Asignación selectiva Sí es necesaria
Recordar que la señal «sel» es de tipo STD_LOGIC
STD_LOGIC puede tener valores (‘0’, ‘1’, ‘H’, ‘L’, ‘Z’, etc.)
En la asignación solamente se tomó en cuenta ‘0’ y ‘1’
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 109
Asignación secuencial Permite describir el comportamiento de la arquitectura
como una secuencia de eventos relacionados
El orden de los enunciados es muy importante
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 111
Procesos Un procesos es como cualquier otra sentencia
concurrente: se ejecuta instantáneamente
Distintos procesos pueden coexistir en la misma arquitectura ejecutándose en paralelo
Se ejecutan solamente si se cumplen ciertas condiciones
Similar al disparo de una interrupción enmascarable en un microprocesador/microcontrolador
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 112
Comportamiento de un proceso El proceso puede estar en dos estados:
Ejecución
El código dentro de éste es ejecutado
Espera
El proceso se mantiene a la espera de que suceda una condición «de disparo». Pasará al estado de ejecución una vez esta suceda.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 113
Sintaxis de un proceso
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 114
Elementos de un proceso 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
Declaraciones
Declaración de tipos, funciones, procedimientos y variables
Todas las declaraciones son locales
Sentencias secuenciales
El código que será «ejecutado» al activarse el proceso Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 115
Señales y procesos Es MUY importante tener claro
Mientras un proceso se «ejecuta» todas las señales permanecen sin cambio
Durante la ejecución del proceso, las señales no cambiarán su valor, incluso si así lo indica el código
Las señales son actualizadas luego de haber finalizado el proceso
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 116
Señales y procesos Las señales son la interfaz entre la lógica concurrente y
los procesos secuenciales.
Uno puede intercomunicar procesos utilizando señales
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 117
Variables y procesos Mientras se ejecuta un proceso, las variables SÍ son
actualizadas inmediatamente
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 118
Procesos con reloj Son la base de toda lógica secuencial
Infieren todas las señales internas como FFs
Si se utilizan variables, hay que inicializarlas antes de ser leídas por primera vez
Además de inferir FFs, es posible que se sintetice lógica combinacional conectada a las entradas de éstos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 119
Proceso con reloj - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 120
d q
clk
Flip-Flop D
Procesos con reloj - RESET La mayoría de implementaciones requieren iniciar en
un estado conocido
Con RESET se colocan todas las señales al valor predeterminado de inicio
Dos tipos de RESET
Síncrono
Asíncrono
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 121
Tipos de RESET Síncrono Asíncrono
Ventajas • No crea condiciones de metaestabilidad
• No suceden RESETs indeseados.
• Asegura sincronización completa del sistema
• Ruta de RESET reservada para todos los FFs
• Rápido • Liviano (ocupa poco
espacio)
Desventajas • Relativamente lento • Ocupa más espacio
que el asíncrono
• Metaestabilidad durante «deassertion»
• RESETs indeseables causados por glitches
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 122
¿Entonces cuál uso? ¿Síncrono o asíncrono? Depende de varios factores
Frecuencia del sistema
Optimización de espacio
Fiabilidad
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 123
¿No hay otra opción? Sí, y es una combinación asíncrona-síncrona
El mayor problema del RESET asíncrono sucede al momento de «levantar» (deassert) el RESET.
La solución:
RESET asíncrono con desactivación síncrona
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 124
RESET Síncrono - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 125
RESET Asíncrono - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 126
RESET en Lista Sensitiva
Proceso combinacional Un proceso no debe depender necesariamente de un
reloj en su lista sensitiva
Todas las señales de entrada deben estar en la lista sensitiva
Si se olvida colocar alguna señal en la lista sensitiva, el comportamiento será distinto al deseado
Todas las salidas del proceso deben tener un valor asignado en todas las condiciones que éste se ejecute, de lo contrario se generará un latch indeseado.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 127
Proceso combinacional - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 128
a
b
sel
x
Asignación condicional en procesos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 129
Sentencia IF Pueden utilizarse ÚNICAMENTE dentro de procesos
Estos pueden ser secuenciales o concurrentes
Pueden ser anidados
Es buena práctica anidar la menor cantidad de sentencias IF posibles
Pueden contener más de una condición a evaluar, utilizando conectores lógicos (AND, OR, XOR, etc.)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 130
Sentencia IF Puede tener una o más ramas
Puede existir más de una instrucción secuencial en cada rama de IF, pero éstas se ejecutarán concurrentemente
Es buena práctica (y a veces necesario) colocar un «else» para no dejar de verificar ninguna condición
De lo contrario, es posible que se generen latches
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 132
Ejemplos – Práctica 3 counter.vhd
counter_ud.vhd
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 134
Asignación selectiva en procesos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 135
When-Case Similar a 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
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 136
User Constraints File (UCF) Archivo de restricciones del usuario
Las restricciones se aplican en la fase de implementación del diseño.
Case-sensitive
Tipos de restricciones Temporales
Lógicos (posicionamiento)
Físicas
IOB
Protocol (LV3v3CMOS, LVDS, etc)
Slew rate
Pull (UP/DOWN) Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 140
Test Bench Poderosa herramienta para simulación de hardware
Consiste en instanciar el módulo bajo prueba (UUT) en un módulo de mayor jerarquía
Se estimula al UUT y luego se analizan la respuesta a los estímulos
Basado en VHDL
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 141
ISE Design Suite Crear proyecto
Verificación de sintaxis
Síntesis
UCF
Creación de bitstream
Test bench
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 142
Ejemplos – Práctica 4 Crear un proyecto para el MUX de la práctica #2
Simular el MUX
Cargar el MUX al FPGA
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 143
loop Utilizado para repetir secciones de código VHDL
Un loop se repite indefinidamente While-loop se repite una cantidad indefinida de veces hasta
que la condición que lo controla es falsa For-loop se ejecuta un número determinado de veces
El objetivo es replicar varias veces bloques de hardware. No es como un ciclo en un lenguaje de programación
Importante: el único ciclo sintetizable es el FOR-LOOP y
solamente funciona dentro de un proceso. Las demás sentencias sirven únicamente para simulación.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 145
Declaración e instanciación de componentes
Módulo TOP
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 147
¿Por qué? Divide y vencerás
Cada componente (módulo) puede ser programado y probado (Test Bench) individualmente: ideal para el desarrollo de aplicaciones en grupos de trabajo ¿LAGO? <- Sí, así está trabajando
Es posible crear librerías de componentes
Existen componentes de terceros disponibles
Reutilización de código
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 148
Jerarquía En un diseño modular existen distintos componentes
individuales interconectados
El módulo VHDL donde se colocan e interconectan todos los componentes se llama TOP
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 149
ADC DRIVER
ADC FIFO
THRESHOLD MONITOR
TRIGGER
SERIALIZER
PRESSURE SENSOR DRIVER
TOP
Implementación en VHDL Cargar el componente en el área de declaraciones de la
arquitectura
Instanciar tantos componentes como sean necesarios dentro del área concurrente de la arquitectura
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 150
Módulo TOP Interconecta módulos instanciados a través de señales
Módulo de entrada y salida para las instancias de los componentes de jerarquía inferior
No debe albergar lógica, solamente interconexiones entre módulos y I/Os
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 151
Declaración de componentes El componente a instanciar debe estar en el mismo
proyecto que el módulo TOP
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 152
Módulo a insertar en TOP
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 153
Creación del componente en TOP
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 154
Instanciación de componentes Se instancian tantas réplicas de un componente como
sean necesarias
Es necesario asignar una etiqueta única a cada instancia
Los puertos deben asociarse a señales o puertos válidos
No es posible concatenar señales en la lista de asociación de puertos de los componentes
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 155
Instanciación - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 156
Instanciación En el Port Map, las señales de la izquierda son las
provenientes del componente instanciado
Las señales de la derecha en el Port Map son las de destino (hacia donde se conecta el componente instanciado)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 157
Puertos sin conexión Si hay algún puerto que SALE del componente instanciado,
y por alguna razón no se desea conectar (mala práctica), debe asignarse a open.
…..
Port Map(
port1 => open,
out1 => outputPort1,
in1 => inputPort1
);
….
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 158
Puertos sin conexión En cambio, si el puerto que se desea dejar flotante es
una entrada al componente instanciado, debe conectarse directamente a un valor lógico ‘0’ o ‘1’
…..
Port Map(
in1 => ‘0’,
out1 => outputPort1,
in2 => inputPort1
);
….
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 159
Sentencia generate Diseñado para realizar múltiples instancias de un
componente
Sentencia concurrente
Es equivalente a un macro
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 160
Sintaxis - for-generate <etiqueta> : FOR <identificador> IN <rango> GENERATE
BEGIN
<sentenciasConcurrentes>; --Instanciacion
END GENERATE <etiqueta>;
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 161
for-generate - Ejemplo
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 162
Ejemplos – Práctica 5 PWM.vhd
TOP_PWM.vhd
PWM_TB.vhd
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 163
Máquina de Estados Finitos (Finite State Machine)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 164
¿Qué es una FSM? Un circuito secuencial que está diseñado para realizar
ciertas acciones, dependiendo de el estado en el que se encuentre
Las FSM tienen un número definido de estados y comúnmente se les da un nombre a cada uno de ellos
Ya que VHDL no tiene una construcción formal para implementar FSMs, éstas se construyen con «TYPES»
Existen distintas estrategias para diseñar una FSM, y depende del diseñador cuál elegir para la solución
Hoy en día, las FSM son una gran herramienta para realizar el control y toma de decisiones en sistemas de lógica digital
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 165
¿Cómo crear una FSM? Entender el problema
Diseñar un diagrama de estados con I/Os
Crear un «enumerated type» (tipo definido por el usuario) correspondiente a la FSM con sus estados
Crear las señales de control de la FSM
Seleccionar un estilo de codificación
Programar la FSM
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 166
¿Qué se debe tomar en cuenta para diseñar una FSM? Estilo de codificación de FSM en VHDL
A, B, C, D, E
RESETs y comportamiento a prueba de errores
Codificación de estados Automatic
Binary
Gray
One-hot
Tipo de salidas Moore
Mealy
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 167
Estilos de codificación en VHDL Definen la distribución de la lógica de la máquina de
estados en distintos procesos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 168
Estilo de Codificación
Estado Actual Proceso CLK
Lógica de Estado Siguiente
Lógica de Salida
Estilo A
Estilo B
Estilo C
Estilo D
Estilo E
Procesos separados
Procesos combinados
Estilos de codificación en VHDL Los más utilizados
Estilo A
Recomendado por Xilinx
Es el más eficiente en términos de espacio y velocidad
Estilo B
El más fácil de programar
Xilinx no recomienda su uso: no existe traducción directa a nivel de RTL
Ocupa mucho más espacio que el estilo A
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 169
RESETs y Comportamiento a prueba de errores Debe implementarse un RESET ASÍNCRONO para el
proceso secuencial
La cláusula «when others» debe ser colocada para evitar caer en estados indefinidos
Si se utiliza RESET síncrono (o peor aún, ningún RESET), la FSM puede entrar en un estado sin declarar y quedar en un estado incierto permanentemente
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 170
Establecer codificación de FSMs Design Goals & Strategies @ ISE
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 171
Tipos de salidas de FSM Moore
Depende únicamente del estado actual de la FSM
Ninguna entrada cambia directamente ninguna salida.
Los cambios a la salida suceden en los flancos de reloj
Mealy
Depende de las entradas presentes y el estado actual de la FSM
Algunas entradas pueden cambiar algunas salidas de forma asíncrona
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 172
Creando una FSM
¿Qué valores pueden tomar las señales «currentState» y «nextState»?
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 173
FSM - Ejemplos Semaforo.vhd
SemaforoFSMA.vhd
SPI16bits.vhd
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 174
Atributos Es una forma de extraer información de un tipo, o de
algún valor de un tipo (variable, constante, señal, etc.)
Sintáxis
<objeto>’<atributo>;
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 176
Atributos de arreglos Comúnmente utilizados para extraer información de
tamaño, rango o índice
Útil cuando se codifica VHDL de forma genérica
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 177
Atributos de arreglos Atributos de Arreglos - Índices
A’left(valor) Devuelve el valor del índice correspondiente al límite izquierdo del rango especificado del arreglo.
A’right(valor) Devuelve el valor del índice correspondiente al límite derecho del rango especificado del arreglo.
A’high(value) Devuelve el valor del índice correspondiente al límite superior del rango especificado del arreglo.
A’low(value) Devuelve el valor del índice correspondiente al límite inferior del rango especificado del arreglo.
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 178
Atributos de arreglos Atributos de Arreglos - Valores
A’left Devuelve el límite izquierdo de un tipo o subtipo
A’right Devuelve el límite derecho de un tipo o subtipo
A’high Devuelve el límite superior de un tipo o subtipo
A’low Devuelve el límite inferior de un tipo o subtipo
A’length Devuelve la longitud del arreglo (cantidad de elementos)
A’ascending Devuelve un valor booleano si el objeto fue declarado en orden ascendente (a to b), en vez de (b downto a)
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 179
Atributos de arreglos Atributos de Arreglos - Rangos
A’range Devuelve el rango del arreglo
A’reverse_range Devuelve el rango del arreglo en orden inverso
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 180
Atributos de arreglos - Ejemplos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 181
Atributos de arreglos - Ejemplos
Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 182
Top Related