Unidad 3 sl1
Un lenguaje de descripción de hardware (HDL, por sus siglas en inglés) es
un lenguaje especializado utilizado para modelar, diseñar y simular
circuitos electrónicos digitales. Estos lenguajes permiten describir el
comportamiento y la estructura de sistemas digitales como si fueran un
programa, pero con el propósito de implementarlos en hardware físico.
Uno de los lenguajes más populares es VHDL (VHSIC Hardware
Description Language).
Características principales de VHDL:
1. Descriptivo y flexible: Permite modelar desde comportamientos
abstractos hasta implementaciones detalladas de circuitos.
2. Concurrente: Los procesos en VHDL se ejecutan simultáneamente
(como en el hardware real), en contraste con los lenguajes de
programación secuenciales.
3. Jerárquico: Puedes diseñar componentes individuales y combinarlos
para construir sistemas complejos.
4. Independencia tecnológica: El diseño en VHDL no está ligado a una
tecnología específica (por ejemplo, FPGA o ASIC).
5. Portabilidad: Es ampliamente soportado por herramientas de
simulación y síntesis de diferentes fabricantes.
VHDL describe circuitos digitales a través de entidades y arquitecturas:
1. Entidad: Define la interfaz del componente, es decir,
sus entradas y salidas.
2. Arquitectura: Especifica el comportamiento o la estructura interna
del componente.
Ejemplo con una compuerta and
-- Definición de la interfaz (Entidad)
entity AND_GATE is
Port (
A : in std_logic; -- Entrada A
B : in std_logic; -- Entrada B
Y : out std_logic -- Salida Y
);
end AND_GATE;
-- Descripción del comportamiento (Arquitectura)
architecture Behavioral of AND_GATE is
begin
Y <= A and B; -- La salida es la conjunción de A y B
end Behavioral;
Herramientas típicas en el ambiente de VHDL:
1. Editores de texto:
Herramientas para escribir código, como VS Code, Vivado o Quartus.
2. Simuladores:
ModelSim, GHDL, o Vivado Simulator, para realizar simulaciones
funcionales y temporales.
3. Herramientas de síntesis:
Xilinx Vivado, Intel Quartus, o Synopsys Design Compiler, para convertir
el diseño en puertas lógicas.
4. Entorno de implementación:
Vivado (Xilinx) o Quartus (Intel), para asignar y rutear el diseño en un
FPGA.
5. Depuradores y analizadores de hardware:
Herramientas como Logic Analyzer para pruebas en hardware real.
Resumen del flujo de diseño
1. Diseño (Especificación, Modelado, Simulación).
2. Síntesis (Optimización del diseño lógico).
3. Implementación física (Asignación, ruteo y pruebas).
4. Verificación (Simulación y validación en hardware).
Tipos de datos
VHDL es un lenguaje de tipos fuertes (strong typing) como el Ada o Pascal. Esto
significa que no pueden asignarse valores a señales o variables que no sean del tipo
declarado para esa señal o variable. Para poder asignar un tipo diferente, el
programador debe llamar explícitamente a una función de conversión de tipo.
VHDL tiene solo unos cuantos tipos predefinidos. También está diseñado para que haya
mucha flexibilidad para definir nuevos tipos. En algunos casos los tipos más utilizados
no son los predefinidos sino tipos estándares definidos por el usuario. La tabla
presenta algunos de los tipos más utilizados.
Tipos más utilizados en VHDL
Tipo Comentario
bolean Tipo buleano, toma los valores TRUE o FALSE
carácter Contiene todos los caracteres ISO de 8 bits
integer Valores enteros. Como mínimo deben incluir los valores desde el
(- 231 + 1) hasta el (231-1)
real Usado para representar valores fraccionarios
time Usado para controlar tiempo en los modelos. Especialmente
importante durante las simulaciones.
Std_logic Usada para señales
Std_logic_vector Definido a partir de std_logic, permite tener señales de un ancho
de varios bits
Ejemplo simple sumador vhdl
-- Librerías necesarias
library IEEE; -- Declaración de la librería IEEE estándar.
use IEEE.std_logic_1164.all; -- Importa el paquete que contiene el tipo de dato
`std_logic`.
-- Entidad (interfaz del diseño)
entity SUMADOR is -- Define la entidad llamada "SUMADOR".
Port ( -- Lista de puertos (entradas y salidas).
A : in std_logic; -- Entrada A (bit 1).
B : in std_logic; -- Entrada B (bit 2).
Cin : in std_logic; -- Carry de entrada (bit de acarreo).
S : out std_logic; -- Salida de la suma.
Cout : out std_logic -- Carry de salida (bit de acarreo generado).
);
end SUMADOR; -- Finaliza la definición de la entidad.
-- Arquitectura (comportamiento del diseño)
architecture Behavioral of SUMADOR is
begin
-- Comportamiento del sumador
S <= A xor B xor Cin; -- La suma es el XOR de A, B y el Carry de entrada.
Cout <= (A and B) or (Cin and (A xor B)); -- El acarreo es la combinación lógica de AND
y OR.
end Behavioral; -- Finaliza la arquitectura del diseño.