VHDL
¿Qué es?
VHDL son las siglas de VHSIC Hardware Description Language (Lenguaje de Descripción
de Hardware para Circuitos Integrados de Muy Alta Velocidad). Es un lenguaje de
descripción de hardware estándar IEEE que se utiliza para diseñar y simular circuitos
digitales, como los que se encuentran en computadoras, microcontroladores y otros
dispositivos electrónicos.
Además en VHDL se puede describir el comportamiento de un circuito complejo utilizando
un lenguaje de texto, de forma similar a como se escribiría en un programa de
computadora. Luego, un programa especial llamado sintetizador puede tomar esta
descripción en VHDL y convertirla en un diseño de circuito real que se puede implementar
en un chip.
VHDL se utiliza para una variedad de propósitos, incluyendo:
Diseño de circuitos integrados (ASIC y FPGA): VHDL Es una herramienta fundamental
para el diseño de circuitos integrados personalizados, tanto los ASIC (Circuitos Integrados
de Aplicación Específica) como los FPGA (Arrays de Puertas Programables en Campo).
Simulación de circuitos: VHDL permite simular el comportamiento de un circuito antes de
construirlo físicamente, lo que ayuda a detectar errores y optimizar el diseño.
Documentación de circuitos: El código VHDL sirve como documentación del diseño del
circuito, lo que facilita su comprensión y modificación en el futuro.
Estructura de la programación
1. Encabezado (Library y Use)
Antes de la entidad y la arquitectura, se suelen incluir directivas library y use. Estas líneas
permiten acceder a bibliotecas de código predefinido que contienen tipos de datos,
funciones y componentes útiles.
library ieee; -- Biblioteca estándar IEEE
use ieee.std_logic_1164.all; -- Paquete con tipos de datos y funciones lógicas
2. Entidad (Entity)
La entidad define la interfaz externa del circuito. Especifica las entradas y salidas, sus tipos
y modos (entrada, salida o bidireccional).
entity nombre_entidad is
port (
entrada1 : in std_logic;
entrada2 : in std_logic;
salida : out std_logic
);
end entity;
3. Arquitectura (Architecture)
La arquitectura describe el funcionamiento interno del circuito. Contiene la lógica que
relaciona las entradas con las salidas. Puede haber múltiples arquitecturas para una misma
entidad, representando diferentes implementaciones.
architecture nombre_arquitectura of nombre_entidad is
begin
-- Sentencias concurrentes que describen el comportamiento del circuito
salida <= entrada1 and entrada2; -- Ejemplo: una puerta AND
end architecture;
4. Palabras Reservadas
VHDL tiene palabras reservadas que tienen un significado especial dentro del lenguaje. No
se pueden utilizar como identificadores (nombres de señales, variables, etc.). Ejemplos:
entity, architecture, port, in, out, signal, variable, constant, process, if, else, for, while, case,
when, select, with, library, use.
5. Tipos de Datos
VHDL ofrece una variedad de tipos de datos para representar diferentes tipos de
información:
std_logic: Representa un valor lógico con múltiples estados (0, 1, desconocido, alta
impedancia, etc.). Es el tipo de dato más utilizado en VHDL para modelar señales digitales.
bit: Representa un valor binario (0 o 1).
boolean: Representa un valor lógico (verdadero o falso).
integer: Representa un número entero.
real: Representa un número real.
time: Representa un valor de tiempo.
array: Permite crear conjuntos de datos del mismo tipo.
record: Permite crear conjuntos de datos de diferentes tipos.
6. Variables, Constantes y Señales
Señales (Signals): Representan conexiones físicas en el circuito. Su valor puede cambiar
con el tiempo y se utilizan para comunicar información entre diferentes partes del diseño.
Se declaran dentro de la arquitectura.
signal señal_interna : std_logic;
Variables (Variables): Se utilizan dentro de los procesos para almacenar valores temporales.
Su valor se asigna de forma secuencial dentro del proceso. Se declaran dentro de los
procesos.
variable variable_temporal : integer
Constantes (Constants): Almacenan valores fijos que no pueden cambiar durante la
ejecución del programa. Se declaran dentro de la arquitectura o de un paquete.
constant valor_maximo : integer := 100;