Diseño de Sistemas Computacionales para
Aplicación Específica
Sesión 04: Introducción al
lenguaje VHDL
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
Temario:
- El lenguaje VHDL
- Características del lenguaje VHDL
- Concepto de código sintetizable
- Estructura del código en VHDL
- Librerías en VHDL
- Tipos de dato en VHDL
- Operadores en VHDL
- Estilos de código en VHDL
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.1.- VHDL
¿Qué es el lenguaje VHDL?
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.1.- VHDL
Como se indicó en la primera clase, la descripción formal de un circuito lógico en una síntesis
automatizada se realiza mediante un lenguaje de descripción de hardware (HDL). En la
actualidad existen 02 HDLs que son considerados estándares en la industria (alrededor del
mundo): Verilog y VHDL.
Las siglas VHDL son una abreviación de la abreviación VHSIC-HDL, que quiere decir Very
High Speed Integrated Circuit Hardware Description Language (Lenguaje de descripción de
hardware para circuitos integrados de muy alta velocidad).
El lenguaje VHDL (al igual que Verilog) es amplio y versátil, por lo cual es empleado en
diferentes etapas de diseño de un sistema digital. En la siguiente diapositiva se describen sus
principales aplicaciones.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.1.- VHDL
VHDL está diseñado para cubrir un número de necesidades dentro del proceso de diseño:
●
Primero: Permite la descripción de la estructura de un sistema, es decir, como éste se
encuentra compuesto de sub-sistemas y como estos sub-sistemas están interconectados.
●
Segundo: Permite la especificación de la funconalidad de un sistema usando formas de
lenguaje de programación familiares.
● Tercero: Permite el diseño de un sistema para ser simulado antes de ser fabricado, de
modo que los diseñadores puedan, rápidamente, comparar alternativas y hacer pruebas
para realizar correcciones sin el retraso y el costo de implementar el prototipo en hardware.
● Cuarto: Permite estructurar, de manera detallada, un diseño para ser sintetizado de una
especificación más abstracta, permitiendo a los diseñadores concentrarse en decisiones de
diseño más estratégicas y reduciendo el tiempo de desarrollo. En nuestro curso nos
enfocaremos en esta aplicación.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.2.- Característica del VHDL
Actualmente, el lenguaje de programación estándar en la industria de los sistemas embebidos
es el lenguaje C. Por esta razón, ese es el lenguaje que se enseña en todas las universidades
y es al que todos los estudiantes de ingeniería electrónica se encuentran acostumbrados.
Por lo expuesto anteriormente, el estudiante debe hacer un esfuerzo en adaptarse a las
características del lenguaje VHDL, las cuales difieren considerablemente de las
características del lenguaje C. Entre las más importantes tenemos:
● VHDL no hace uso de llaves para delimitar “bloques” de código.
● VHDL no distingue entre mayúsculas y minúsculas (No case-sensitive).
● VHDL solo permite realizar operaciones entre operandos del mismo tipo (strong typing).
● VHDL exige un código detallado y relativamente extenso (verbose)
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.3.- Código sintetizable
Anteriormente, se mencionó que VHDL es utilizado en diferentes etapas del desarrollo. Esto
es posible debido a que VHDL es un lenguaje muy amplio (gran cantidad de recursos).
Por otro lado, cuando se emplea el lenguaje VHDL para describir hardware con el objetivo de
realizar una síntesis, entonces solamente algunos comandos de VHDL están permitidos. El
código que utiliza estos comandos se conoce como código sintetizable.
El término “código sintetizable” quiere decir que el sintetizador puede interpretar
claramente la funcionalidad que el diseñador desea, y no requiere mayor información
para implementarla en el hardware disponible.
● Son ejemplos de código sintetizable el uso de sumas y multiplicaciones, en donde el
sintetizador sabe que debe implementar sumadores y multiplicadores en hardware (ambos
son circuitos combinacionales).
●
Son ejemplos de código no-sintetizable el uso del operador división y el uso de retardos
(comando “wait”), ya que una división requiere de múltiples pasos (máquina de estados
compleja) y la duración de un retardo depende de la frecuencia de reloj utilizada.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.3.- Estructura del código en VHDL
El código en VHDL tiene una estructura definida. Esta estructura esta compuesta por 03
bloques principales, que son los siguientes:
● Declaración de librerías
● Entidad
● Arquitectura
A continuación, detallaremos cada uno de estos bloques.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.4.- Librerías en VHDL
Al igual que en un programa en C, las librerías en VHDL están formadas por paquetes. Cada
paquete contiene recursos que facilitan las tareas al diseñador.
Dichos recursos pueden ser: funciones, procedimientos, componentes, constantes o tipos de
datos (ver imagen inferior).
Para este curso, nos enfocaremos en trabajar, principalmente, con 03 paquetes:
ieee.std_logic_1164 (de la librería ieee), standard (de la librería std) y work (de la librería
work).
Partes fundamentales de una librería.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.4.- Librerías en VHDL
Para hacer uso de los recursos de una librería, es necesario primero declarar la librería que se
requiere, mediante la palabra reservada LIBRARY. Luego, debe especificarse el paquete que
se desea utilizar, mediante la palabra reservada USE.
La imagen inferior ejemplifica la inclusión de librerías en VHDL.
Es importante mencionar que las librerías std y work se incluyen por defecto. Es decir, sus
recursos estarán siempre disponibles, por lo cual no hace falta declararlas.
Ejemplo de inclusión de librerías en VHDL.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.5.- Entidad
La entidad de un circuito lógico es la definición de la interfase entre el circuito que vamos a
diseñar y el resto del mundo. Expresado en terminos simples, indica las entradas y salidas
que tendrá un un circuito lógico en particular.
En la imagen inferior se muestra el formato para codificar la entidad de un circuito lógico en
VHDL.
Formato para de la entidad en un código VHDL.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.5.- Entidad
Se debe Verificar siempre que el nombre de la entidad coincida con el nombre del proyecto
creado en el software Quartus Prime (la razón de esto se explicará en su debido momento).
Debe definirse el nombre de cada señal de interfase, el modo (entrada o salida) y el tipo
(indica tamaño y formato).
En la imagen inferior se muestra la codificación de la entidad para una compuerta NAND.
Ejemplo de entidad para una compuerta NAND en VHDL.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.6.- Arquitectura
La arquitectura de un circuito lógico es la descripción del comportamiento del circuito mediante
el uso de código VHDL.
La imagen inferior muestra el formato para codificar la arquitectura de un circuito en VHDL.
El espacio indicado con la etiqueta [declarations] es empleado para declarar señales.
Hablaremos de las señales con detalle en clases posteriores.
Formato para la arquitectura en un código VHDL.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.6.- Arquitectura
La imagen inferior muestra la codificación de la arquitectura para la compuerta NAND indicada
en la entidad. Como se puede apreciar, el nombre de la arquitectura no necesariamente debe
ser igual al nombre de la entidad.
Para apreciar el panorama completo, en la siguiente diapositiva se muestra como ejemplo el
código VHDL completo de un flip-flop D con entrada Reset asíncrona.
Ejemplo de arquitectura para una compuerta NAND en VHDL.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.6.- Arquitectura
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
VHDL cuenta con tipos de datos “nativos”, propios de su librería estándar (std). Estos tipos de
datos son:
● BIT
● BOOLEAN
● INTEGER
●
REAL
Por otro lado, VHDL también contiene una serie de tipos de dato pre-definidos, especificados
en los estándares IEEE 1076 e IEEE 1164. Estos tipos de dato se encuentran definidos en sus
respectivos paquetes.
Para esta parte del curso, nos enfocaremos en los tipos de datos definidos en el paquete
std_logic_1164 y std_logic_arith de la librería ieee, los cuales son:
● STD_LOGIC
● STD_ULOGIC
● SIGNED
● UNSIGNED
A continuación, describiremos los tipos de datos que serán de nuestro principal interés.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
BIT y BIT_VECTOR
Un dato de tipo BIT puede tomar 02 posibles valores: ‘0’ ó ‘1’.
El tipo BIT_VECTOR se utiliza para representar datos con varios bits.
Ejemplos:
x es declarado como una señal de un dígito de tipo BIT SIGNAL x: BIT;
y es declarado como un vector de 04 bits,
siendo el bit de más a la izquierda el MSB SIGNAL y:
BIT_VECTOR (3 DOWNTO 0);
w es declarado como un vector de 04 bits,
siendo el bit de más a la derecha el MSB SIGNAL w:
BIT_VECTOR (0 TO 7);
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
BIT y BIT_VECTOR
Basándonos en los ejemplos proporcionados anteriormente, las siguientes asignaciones
estarían permitidas:
x es una señal de un solo bit, cuyo valor es ‘1’
Para el caso de bits individuales se usan comillas simples x <= ‘1’;
y es una señal de 04 bits, cuyo valor es “0111” (MSB = 0)
Para el caso de vectores se usan comillas dobles y <= “0111”;
w es una señal de 08 bits, cuyo valor es “01110001” (MSB = 1) W <= “01110001”;
NOTA: Para asignar un valor a una señal debe emplearse el operador “<=”.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
STD_LOGIC y STD_LOGIC_VECTOR
El tipo STD_LOGIC fue introducido por el estándar IEEE 1164. Un dato de tipo STD_LOGIC
puede tomar 08 posibles valores:
‘0’ → BAJO (lógica sintetizable ‘0’)
‘1’ → ALTO (lógica sintetizable ‘1’)
‘-’ → No importa (sintetizable no importa)
‘Z’ → Alta impedancia (sintetizable buffer tri-estado)
‘X’ → Desconocido
‘W’ → Desconocido débil
‘L’ → BAJO débil
‘H’ → ALTOdébil
De todos estos posibles valores, solo los 04 primeros son sintetizables.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
STD_LOGIC y STD_LOGIC_VECTOR
Ejemplos:
x es declarado como una señal SIGNAL x: de un dígito de tipo STD_LOGIC
STD_LOGIC;
y es declarado como un vector de 04 bits,
siendo el bit de más a la izquierda el MSB
El valor inicial (opcional) de y es “0001” SIGNAL y:
STD_LOGIC_VECTOR (3 DOWNTO 0) := “0001”;
El tipo STD_LOGIC es un sub-tipo de STD_ULOGIC. El primero funciona bien la mayor parte
del tiempo, pero no permite “resolver conflictos” cuando dos pines de salida se han conectado
juntos (corto circuito). Para evitar este tipo de problemas, en proyectos complejos se emplea
el tipo STD_ULOGIC, el cual cuenta con un valor adicional ‘U’.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
SIGNED y UNSIGNED
Estos tipos se encuentran definidos en el paquete std_logic_arith de la librería ieee. Ellos
tienen la apariencia de STD_LOGIC_VECTOR, pero aceptan operaciones aritméticas. La
sintaxis para estos tipos de datos se muestra a continuación:
x es una señal de tipo entero de 8 bits,
representada en formato complemento a 2 SIGNAL x:
SIGNED (7 DOWNTO 0);
y es una señal de tipo entero sin signo (natural) de 4 bits
representada en formato binario (orden invertida) SIGNAL y:
UNSIGNED (3 TO 0);
A estas alturas es conveniente resaltar dos cosas:
●
El tipo STD_LOGIC_VECTOR soporta operaciones lógicas (e.g. AND), pero no soporta
operaciones aritméticas (e.g. +).
●
Por otro lado, los tipos SIGNED y UNSIGNED soportan operaciones aritméticas, pero no
soportan operaciones lógicas.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.7.- Tipos de dato en VHDL
SIGNED y UNSIGNED
¿Cómo realizar operaciones aritméticas y lógicas con una misma señal?
De ser ese el caso, hay una manera de habilitar las operaciones aritméticas en el tipo
STD_LOGIC_VECTOR.
Para esto, la librería ieee proporciona dos paquetes, std_logic_signed y
std_logic_unsigned, los cuales permiten operaciones con datos de tipo
STD_LOGIC_VECTOR como si se tratara de datos del tipo SIGNED o UNSIGNED,
respectivamente.
Tarea para el estudiante:
Los paquetes std_logic_signed y std_logic_unsigned se están usando cada vez menos, debido
a que no son estándar y ya no cuentan con soporte (no se actualizan). Una alternativa más
actual es el paquete estándar numeric_std, ubicado en la librería ieee. Investigar el uso de
este paquete.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores de asignación
Son usados para asignar valores a señales, variables y constantes. Estos son:
<= Usado para asignar un valor a una señal (SIGNAL)
:= Usado para asignar un valor a una variable o constante. También usado para asignar
valores iniciales
=> Usado para asignar valores a elementos individuales de un vector o con la palabra
OTHERS.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores de asignación
Ejemplos:
Considerando los siguientes elementos:
SIGNAL x: STD_LOGIC;
VARIABLE y : STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL w: STD_LOGIC_VECTOR (0 TO 7);
Las siguientes asignaciones son válidas:
x <= ‘1’; ‘1’ es asignado a la SEÑAL x usando “<=”
y := “0000”; “0000” es asignado a la VARIABLE y usando “:=” w <= “10000000”;
LSB es ‘1’, los demás bits son ‘0’
w. <= (0 => ‘1’, OTHERS => ‘0’); LSB es ‘1’, los demás bits son ‘0’
x. <= w(1); El valor del bit 1 de w es asignado a x
w(2) <= ‘1’; El bit 2 es ‘1’, los demás bits permanecen sin cambio
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores lógicos
Son usados para llevar a cabo operaciones lógicas. Se pueden aplicar con datos del tipo BIT,
STD_LOGIC o STD_ULOGIC, así como sus expresiones en vectores (BIT_VECTOR,
STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR).
Estos operadores son:
NOT
AND
OR
NAND
NOR
XOR
XNOR
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores lógicos
Ejemplos:
y <= NOT a AND b; y = (a’.b)
y <= NOT (a and b); y = (a.b)’
y <= a NAND b; y = (a.b)’
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores aritméticos
Son usados para llevar a cabo operaciones aritméticas. Se pueden aplicar con datos del tipo
SIGNED o UNSIGNED (para obtener código sintetizable). Además, si se utilizan los
paquetes std_logic_signed o std_logic_unsigned, entonces estos operadores pueden
aplicarse directamente a datos del tipo STD_LOGIC_VECTOR para llevar a cabo operaciones
de adición y sustracción.
Estos operadores son:
+ Adición
- Sustracción
* Multiplicación
/ División
** Exponenciación
MOD Módulo
REM Residuo
ABS Valor absoluto
Solamente las 03 primeras operaciones son directamente sintetizables.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Operadores de relación
Empleados para hacer comparaciones. Los datos pueden ser de cualquiera de los tipos
mencionados anteriormente. Estos operadores son:
= Igual a
/= Diferente a
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.8.- Operadores en VHDL
Atributos de señales
Los únicos atributos sintetizables son los siguientes:
s’EVENT Retorna verdadero cuando ocurre un evento en s
s’STABLE Retorna verdadeero si no ha ocurrido ningún evento en s
Ejemplo:
Atributo EVENT usado con IF IF
(clk'EVENT AND clk='1')
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
1.- EL LENGUAJE VHDL
1.9.- Estilos de código en VHDL
Al utilizar VHDL para describir hadware sintetizable, es posible utilizar 03 estilos diferentes de
código. Cada estilo tiene sus ventajas, y el uso de cada uno depende de la aplicación y el
criterio del programador.
Descripción concurrente (Dataflow)
Todas los comandos se ejecutan de forma concurrente (en paralelo). Se utiliza para describir
circuitos combinacionacionales formados por compuertas lógicas.
Descripción secuencial (Behavioral)
Es similar al estilo empleado en los lenguajes de programación actuales, donde los comandos
se ejecutan en secuencia. Es ideal para describir circuitos secuenciales, aunque también se
pueden describir circuitos combinacionales.
Descripción estructural (Structure)
Se utiliza para interconectar módulos entre sí. Es particularmente útil en sistemas digitales
relativamente complejos que están compuestos por sub-sistemas.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
2.- EJERCICIOS
2.1.- Tipos de datos y operadores
Se tienen las siguientes declaraciones de señales:
SIGNAL a : BIT := ‘1’;
SIGNAL b : BIT:VECTOR (3 DOWNT 0) := “1100”;
O
SIGNAL c : BIT_VECTOR (3 DOWNT 0) := “0010”;
O
SIGNAL d : BIT_VECTOR (7 DOWNT 0);
O
SIGNAL e : UNSIGNED (7 DOWNTO 0);
SIGNAL f : SIGNED (7 DOWNTO 0)
Basándose en las declaraciones mostradas, resolver los ejercicios de las siguientes páginas.
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
2.- EJERCICIOS
2.1.- Tipos de datos y operadores
Completar los espacios en blanco:
x1 <= c AND b; → x1 <=
x2 <= b XOR c; → x2 <=
x3 <= a NOR b(3); → x3 <=
x4 <= b sll 2; → x4 <=
x5 <= b srl 2; → x5 <=
x6 <= a AND NOT b(0) AND NOT c(1); → x6 <=
d <= (5 => ‘0’, OTHERS => ‘1’); → d <=
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
2.- EJERCICIOS
2.1.- Tipos de datos y operadores
Verificar si las siguientes operaciones son válidas o no:
b(0) AND a;
a + d(7); NOT b
XNOR c;
c + d;
e f;
IF(b < c)...
IF(b >= a)...
IF(f /= e)...
IF(e>d)
b. srl 1
c. srl 2
f srl 3
f/4 e/3
d. <= c
d(6 DOWNTO 3) := b
e.<= d f
:= 100
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
3.- RESUMEN
Estructura de código VHDL
• Declaración de librerías → Librerías y paquetes que se utilizarán
• Entidad → Descripción de las señales de interfase
• Arquitectura → Descripción del comportamiento
Librerías y paquetes principales
librería std → paquete standard
librería work → paquete work
librería ieee → paquete std_lib_1164
Tipos de datos
• BIT, BIT_VECTOR
• STD_LOGIC, STD_LOGIC_VECTOR
• SIGNED, UNSIGNED
Operadores
• Lógicos
• Aritméticos
• Relacionales
• De asignación
Sesión 04 – El lenguaje VHDL MSc. Ántero C.
Diseño de Sistemas Computacionales para
Aplicación Específica
4.- PREGUNTAS
Sesión 04 – El lenguaje VHDL MSc. Ántero C.