Introducción al diseño de hardware con FPGA utilizando VHDLlabelectronica.weebly.com/uploads/8/1/9/2/8192835/presentación... · Introducción al diseño de hardware con FPGA utilizando

Post on 05-Feb-2018

230 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

Transcript

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 3

¿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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 15

Configurable Logic Blocks (CLB)

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 16

CLB de un Spartan-3

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 17

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

Slices de un S6

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 19

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

I/Os

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 23

S6 I/Os

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 24

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 26

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 30

Rutas

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 31

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

En un Spartan-6

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 34

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 40

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 43

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

Nexys 3

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 45

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 46

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

Test Bench

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 55

Test Bench

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 56

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

Entidad - Ejemplo

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 91

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

Arreglos - Ejemplo

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 99

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 101

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 102

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 110

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

Sintaxis de IF

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 131

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

IF - Ejemplo

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 133

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

Sintaxis When-Case

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 137

When-Case Ejemplo

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 138

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 139

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 144

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

For-loop - Ejemplo

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 146

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

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 175

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

Gracias a la colaboración de

Especialmente a la gente de MLAB, ICTP

y MSc. Cristian Sisterna

Iván René Morales - Colab. LAGO Guatemala / Laboratorio de Electrónica, USAC 183

top related