Está en la página 1de 40

Introducción al VHDL

Ing. Arturo Miguel de Priego


amigueldepriego@yahoo.com

Parte de este material está basado en


presentaciones de Altera, de cursos que
preparé en la PUCP, y de fuentes en Internet.
¿Qué significa VHDL?
VHDL = VHSIC + HDL.
VHSIC = Very High Speed Integrated Circuit
Circuitos Integrados de Muy Alta Velocidad
HDL = Hardware Description Language
Lenguaje de Descripción de Hardware

VHDL es un lenguaje textual de alto nivel que


se utiliza para la descripción del hardware de los
sistemas digitales.
Las herramientas CAD toman descripciones VHDL
para simular, sintetizar y verificar circuitos digitales.
¿Qué es VHDL?
• VHDL es un lenguaje estándar que se emplea para la
documentación, simulación, síntesis y verificación de
sistemas digitales.
• Los lenguajes de descripción de hardware, como el
VHDL, facilitan la descripción de circuitos integrados
digitales complejos.
¿Por qué VHDL?
• Lenguaje estándar.
• Soporte de las principales compañías proveedoras de
herramientas CAD y EDA.
• Flexibilidad de implementación en circuitos integrados:
código VHDL es portable entre herramientas, aunque
normalmente es necesario hacer ajustes según el
dispositivo o la tecnología.
• Es un lenguaje popular cuyo número de usuarios sigue
aumentando.
• Ventajas
– Proceso de desarrollo más confiable y automatizado
– Reducción de costo y tiempo de salida al mercado
VHDL: Orígenes y evolución
• Desarrollado en los comienzos de los 80’s como un
método para la descripción de sistemas electrónicos para
el Departamento de Defensa de EE.UU. Su sintáxis es
similar al lenguaje de programación Ada.
• Fue estandarizado en 1987, bajo la norma IEEE 1076. En
1993 salió una revisión con algunas nuevas capacidades,
manteniendo la compatibilidad con la norma original.
• Es utilizado ampliamente en la industria y academia, sin
embargo, otros lenguajes como SystemC y SystemVerilog
están ganando mayor atención y popularidad.
¿Para qué sirve VHDL?
• Comienzos de los 90’s : diseño de ASICs complejos,
empleando herramientas de síntesis.
• Mediados de los 90’s: diseño con lógica programable.
• Se utiliza en la documentación así como en la simulación
del sistema, y además se emplea para sintetizar la parte
hardware del sistema digital.
• Actualmente se emplea en el modelamiento de todo el
sistema digital (hardware y software.)
• Las herramientas de síntesis permiten implementar los
circuitos sobre ASICs y FPLDs.
Limitaciones de VHDL
• No permite describir sistemas analógicos. Sin embargo,
ya se están desarrollando versiones análogas y mixtas.
• No existe un estilo de descripción normalizado. Para
síntesis se requiere ajustar los estilos disponibles a la
capacidad de las herramientas CAD.
• Es posible sintetizar lógica solo de un subconjunto del
lenguaje. Las herramientas de síntesis no soportan los
mismos subconjuntos, y existen a veces diferencias al
mudar de herramientas.
Conceptos Fundamentales
• CONCURRENCIA => Actividades concurrentes son sucesos que
ocurren en paralelo. En el hardware los eventos suelen disparar
varios procesos al mismo tiempo. Modela la activación de los
bloques de un sistema digital, donde las señales se presentan sobre
las entradas de los bloques y producen resultados en las salidas
• ESTRUCTURA=> Ordenamiento de bloques en una jerarquía.
Cada bloque se puede describir en estilo RTL, comportamental o
mixto.
• SECUENCIA => Las sentencias secuenciales se ejecutan una
después de otra, como en lenguajes de software con un solo
microprocesador.
• TIEMPO => VHDL permite modelar el concepto de tiempo.
Simulación dirigida por eventos. Un evento es producido por un
cambio en una señal en un determinado tiempo de simulación. La
respuesta de un modelo a un evento puede provocar nuevos
eventos.
Niveles de Abstracción
• La abstracción define cuanto detalle debe ser descrito acerca del
diseño.
• Existen cuatro niveles principales de abstracción:
– Layout (Trazado): descripción en el nivel geométrico o físico. Especifica la
disposición física de los dispositivos en el chip. Puede incluir información
sobre temporización y efectos analógicos.
– Lógico: Especifica la conexión de puertas lógicas y registros. Informa
detalladamente la función, arquitectura, tecnología y temporización.
– Transferencia de Registros (RTL): Define cada registro en el diseño y la
lógica entre ellos. Contiene información de la arquitectura pero no detalla la
tecnología. No especifica los retardos de tiempo absolutos.
– Comportamental: Describe la función de un diseño sin especificar la
arquitectura de registros. Puede requerir información de tiempos de retardos.
• En VHDL se utilizan los estilos RTL y Comportamental
Carta Y de Gajski & Kahn
RTL:ALU, regisro
Puerta lógica, flipflop
Estructural Procesador
Transistor
Microcomputador
Especificaciones
Algoritmo
Lenguaje RTL
Geométrico
Ecuación Booleana
Trazado de figuras Ecuación Diferencial
Celdas estándares
Macroceldas Funcional
Plano de bloques
Chip, PCP, MCM

Mayor abstracción Menor abstracción


Estilos RTL y Comportamental
• La mayoría de las herramientas de síntesis requieren que el código
se exprese en el nivel RTL. En este nivel el diseñador debe
especificar la arquitectura de los registros y puertas en el diseño.
– Camino de datos (datapath) modelado estructuralmente.
• Las herramientas de síntesis comportamental generan
automáticamente el circuito en el nivel de puertas y flipflops a
partir de la codificación de un algoritmo.
– Sección de control (i.e. máquinas de estados) descrito funcionalmente.
• La descripción comportamental se emplea también para modelar
estímulos y respuestas (testbenchs), documentar partes y detallar las
especificaciones del hardware.

• NOTA:
– Algunos CADs permiten mezclar descripciones HDL con descripciones
esquemáticas.
Unidades de Diseño en VHDL

Arquitectura
Entidad
Cuerpo de
Paquete
Paquete

Configuración
Paquetes
• En un paquete se colocan definiciones comunes para
varias entidades de diseño. Ello facilita el trabajo de
equipos.
• Puede contener declaraciones de:
– Valores constantes
– Tipos definidos por el usuario
– Componentes
• Un Cuerpo de Paquete es otra unidad de diseño, que
incluye subprogramas
• En el curso vamos a emplear esta característica del
lenguaje para compartir información y archivos de diseño.
VHDL Metodología de Diseño
Requerimientos Especificaciones

Arquitectura Banco de Pruebas

Modelamiento
Simulación
RTL, Funcional
Verificación Rediseño
Síntesis

Modelo de Puertas Simulación

Ubicación y Conexión

FPLD, ASIC Modelo de Retardos Simulación


Sintaxis VHDL

Entidad y Arquitectura – Tipos de datos


Señales y variables – Asignaciones – Procesos
Sentencia IF ELSE – Sentencia CASE
Entidades y Arquitecturas

• Entidad => Indica QUE es el diseño.


– Define la interfaz de un bloque, sin definir su comportamiento.
Equivale a un símbolo en un diagrama esquemático.
• Arquitectura => Indica COMO trabaja el diseño.
– Modela el comportamiento o estructura del circuito. Puede
contener elementos RTL o comportamentales.
– Una entidad puede contener varias arquitecturas.
• Entidad + Arquitecturas = opciones de diseño, diferentes
soluciones para un mismo problema.
Entidad
• Define la interfaz con el mundo exterior (i.e., pines de
entrada y salida)
• Funciona como un símbolo esquemático, con la diferencia
que se usa texto en vez de símbolos gráficos

Entradas
ENTITY ejemplo IS
Puerto PORT ( a, b : in BIT; Tipo de dato
c, d : out BIT);
END ejemplo;
Salidas
IN: entrada
Nombre de la Entidad
OUT: salida
INOUT: bidireccional
Arquitectura
• Define la implementación del diseño.
• La arquitectura puede definirse mediante asignaciones de
expresiones lógicas, interconexiones de componentes y
sentencias de alto nivel.
• Funciona como un circuito esquemático.

ARCHITECTURE pld OF ejemplo IS


BEGIN
c <= a AND b;
d <= a OR b;
END pld; Todas las sentencias se
colocan entre BEGIN y END.
Ejemplo de un diseño completo

ENTITY define los puertos


(interfaz) del diseño.
ENTITY example IS

PORT ( a : in BIT; ENTITY y ARCHITECTURE


b : out BIT); conforman un par enlazado
END example; mediante un nombre.

ARCHITECTURE pld OF example IS


BEGIN
b <= a;
ARCHITECTURE define la
END pld;
implementación.

VHDL no es sensitivo al tipo de carácter


Puertos, Señales y Variables
• Los puertos se especifican en la entidad:
IN Puerto de entrada
OUT Puerto de salida
INOUT Puerto bidireccional
• Las señales y variables se usan en la arquitectura

SIGNAL Se declara antes del BEGIN de la arquitectura y se puede


usar en cualquier lugar de ella. Si va en un proceso su valor se
actualiza al salir de él. La asignación usa el símbolo <=

VARIABLE Se declara y utiliza en un proceso y actualiza


inmediatamente su valor asignado. La asignación usa el símbolo
:=
Tipos de Datos
• Cada señal debe tener un tipo de dato asociado que se indica
cuando la señal es declarada. Tipos diferentes de datos no pueden
asignarse unos a otros. Todos los puertos, señales y variables
deben ser de algún tipo de dato. Existen tipos ya construidos pero
también pueden crearse nuevos.
• TIME => 10 ns 2.5 ps
• BIT => ‘0’ ‘1’
• BIT_VECTOR => grupo de bits “00101101” “0101”
• STD_LOGIC = {‘0’, ‘1’, ‘X’, ‘Z’} más 5 otros tipos no
usados para síntesis.
– ‘X’ (no ´x´) es valor de no importa.
– ‘Z’ (mayúscula) es valor de tres-estados.
• STD_LOGIC_VECTOR => p.e. “0Z1X011”
• Carácter => ‘A’ ‘x’ ‘7’
• Cadenas => “VHDL”
• Real => 1.23 -9.8
Tipo de Dato INTEGER
• Se comporta como un entero en álgebra
• El rango es especificado por el usuario o por defecto por
el compilador.
– El usuario puede especificar cualquier subrango:

pablo :INTEGER range 0 TO 255;


vilma :INTEGER range 200 DOWNTO 54;

– Si el rango no es especificado será el rango por defecto


determinado por el compilador.

doctorRajuela :INTEGER;
Buses

• VHDL ofrece tipos vectores para crear buses


• Tipos de vectores comunes:
– BIT_VECTOR, STD_LOGIC_VECTOR
• Ejemplos
– SIGNAL pablo :bit_vector(7 downto 0);
– SIGNAL betty :std_logic_vector(3 downto 0);
– SIGNAL bambam :std_logic_vector(1 to 3);

El MSB queda indicado por el índice de la


izquierda: pablo(7), betty(3) bambam(1)
El LSB queda indicado por el índice de la
derecha: pablo(0), betty(0) bambam(3)
Asignación de Buses
• Bus completo La dirección del
– pebbles <= “11111111”; subrango debe ser
• Un bit de un bus igual como en la
– dino (3) <= ‘1’; declaración del vector
• Una parte del bus
– SIGNAL picapiedras :bit_vector(7 downto 0);
– picapiedras (3 downto 2) <= “11”;
• Encadenación
– SIGNAL mas :bit_vector (8 downto 0);
– mas <= a(1) & b(3 downto 0) & ‘0’ & “010”;
• Agregado
– mas(3 downto 0) <= ( a(1), b(3), ‘0’, ‘1’);
– maz <= ( 3=> ‘1’, 1 downto 0 => ‘1’, 2 => L );
– max <= ( 3=> ‘1’, OTHERS => N );
Tipos Enumerados
• Los tipos enumerados son tipos creados por el usuario.
• Se emplean principalmente para las máquinas de
estado.
• Los tipos se enumeran en una secuencia binaria,
comenzando desde cero e incrementándose de uno en
uno.
• Ejemplos
– TYPE pais IS (Alemania, Italia, Japon);
– TYPE luces IS (rojo, verde, ambar,
negro);
Asignaciones de Señales Concurrentes
• Simple
a <= r or t;
b <= ((r or t) and not(g xor h));

• Condicional q <= ‘0’ WHEN clr = ‘0’ ELSE


‘1’ WHEN set = ‘1’ ELSE
Estas asignaciones no se ‘X’ ;
emplean dentro de los procesos

WITH sel SELECT


• Selectiva q <= a WHEN ‘0’,
b WHEN ‘1’;
Especifican los valores de las señales para cualquier combinación
de las entradas.
La síntesis crea puertas y conexiones lógicas. No se crean latches ni
flipflops.
Asignación múltiple
• Cuando más una señal recibe dos asignaciones de señales
separadas, se dice que es manejada por múltiples fuentes.
• En esos casos, se necesita una Función de Resolución. Si
no existe una función de resolución la asignación múltiple
resulta ilegal.
• El tipo std_ulogic no soporta asignación múltiple, pero si
el tipo std_logic.

• VHDL para síntesis de MAX+plus II no permite


asignaciones múltiples en asignaciones concurrentes.
Asignación simple

• Es una asignación directa, como en una función booleana


o matemática:
c <= a AND b; -- crea una puerta AND
d <= e; -- conecta dos nodos
x <= y + z; -- suma y con z, luego asigna el
-- resultado a x

ENTITY EjmAsgSimple IS
PORT ( a, b, e : IN BIT;
c, d : OUT BIT );
END EjmAsgSimple;

ARCHITECTURE maxpld OF EjmAsgSimple IS


BEGIN
c <= a AND b;
d <= e;
END maxpld;
Asignación Condicional

• Lista una serie de expresiones que son asignadas a una


señal luego de una evaluación positiva de una o más
expresiones booleanas. Cada expresión booleana se
valida en el orden escrito.

-- Multiplexor 2 a 1: f <= a si s = ‘0’, b si s = ‘1’


ARCHITECTURE mux OF Mux2a1 IS
BEGIN
f <= a WHEN s = ' 0'ELSE b;
END Mux2a1;
Ejemplo: Codificador con prioridad

ENTITY condsigm IS
PORT( high, mid, low : IN BIT;
q : OUT INTEGER RANGE 0 TO 3 );
END condsigm;
ARCHITECTURE maxpld OF condsigm IS
BEGIN
q <= 3 WHEN high = ' 1'ELSE -- prioridad más alta
2 WHEN mid = ' 1'ELSE -- media prioridad
1 WHEN low = ' 1'ELSE -- prioridad más baja
0; -- no hay señal activa
END maxpld;
Asignación Selectiva
Lista alternativas disponibles para cada valor de una expresión.

ENTITY selsig IS
PORT(
d0, d1, d2, d3: IN BIT;
s : IN INTEGER RANGE 0 TO 3;
q : OUT BIT);
END selsig;
ARCHITECTURE maxpld OF selsig IS
BEGIN
WITH s SELECT
output <= d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2, Multiplexor 4 a 1
d3 WHEN 3;
END maxpld;
Procesos
• Un proceso define sentencias que se ejecutan en la
secuencia descrita.
• Una sentencia Wait o una Lista de Sensibilidad describe
las condiciones para ejecutar la sentencia Process
(Proceso).
• Dentro del proceso, las sentencias se ejecutan
secuencialmente.
• Los procesos se comunican entre sí concurrentemente
mediante señales.
• En un proceso pueden existir asignación de variables, de
señales, llamadas a procedimientos, sentencias IF,
sentencias CASE, y sentencias iterativas.
• Una arquitectura puede contener más de un proceso.
La Sentencia Process
• Usando lista de sensibilidad (Sensitivity List):

PROCESS (a, b, c, d)
BEGIN
-- sentencia secuencial #1
-- ...
-- sentencia secuencial #N
END PROCESS;

• Este proceso se ejecuta luego de un cambio en cualquier


señal de la lista de sensibilidad.
La Sentencia Process
• Usando la sentencia Wait:

PROCESS
BEGIN
WAIT condición
-- sentencia secuencial #1
-- ...
-- sentencia secuencial #N
END PROCESS;

• Este proceso se ejecuta cuando la condición WAIT es


verdadera
La Sentencia Process
• Utilice etiquetas para la organización de varios procesos:

abcd: PROCESS (a, b, c, d)


BEGIN
-- sentencia secuencial #1
-- ...
-- sentencia secuencial #N
END PROCESS abcd;

• La etiqueta (label) identifica procesos específicos en una


arquitectura de múltiples procesos
Ejemplo: Función OR

architecture comb of PuertaOR is


begin
OR_FUNC: process (A,B)
begin
entity PuertaOR is if (A=' 1'or B='
1') then
port (A,B : in bit; Z <= ' 1'
;
Z : out bit); else
Z <= ' 0'
;
end PuertaOR; end if;
end process OR_FUNC;
end comb;
Sentencia if
• Elige una acción basada en una condición. Permite las palabras
ELSIF, ELSE. Debe estar dentro de una sentencia Process
IF expresion THEN
IF expresion THEN sentencia;
sentencia; IF expresion THEN sentencia;
sentencia; sentencia; ELSIF expresion THEN
END IF; sentencia; sentencia;
ELSIF expresion THEN sentencia;
IF expresion THEN sentencia; ELSIF expresion THEN
sentencia; sentencia; sentencia;
sentencia; ELSIF expresion THEN sentencia;
ELSE sentencia; ELSE
sentencia; sentencia; sentencia;
sentencia; END IF; sentencia;
END IF;
END IF;
Sentencia if : Ejemplo

ENTITY if_ex IS
PORT (sel, a, b : IN BIT;
y : OUT BIT);
END if_ex;

ARCHITECTURE if_ex OF if_ex IS


BEGIN
PROCESS (sel, a, b)
BEGIN
IF sel = '1' THEN
y <= a;
ELSE
y <= b; Esta descripción resulta en
END IF;
END PROCESS; un multiplexor dos a uno.
END if_ex;
Sentencias Case
• Ejecuta sentencias de acuerdo al valor de una expresión.
• When Others sirve para indicar que sentencias deben
ejecutarse si el valor de la expresión no coincide con los
casos anteriores.
CASE expresion IS
WHEN valor_constante =>
sentencia;
CASE val IS sentencia;
WHEN “00” =>
WHEN valor_constante =>
q <= i0;
WHEN “01” => sentencia;
q <= i1; sentencia;
WHEN OTHERS => WHEN OTHERS =>
q <= ‘X’; sentencia;
END CASE; sentencia;
END CASE;
Construcciones
VHDL para una
AND
proceso con
case

asignación proceso con


directa if - else

asignación
condicional

asignación
selectiva