Introducción al VHDL
Ing. Arturo Miguel de [email protected]
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 VelocidadHDL = 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 SystemVerilogestá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 dispararvarios 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
Funcional
Estructural
GeométricoAlgoritmo
Lenguaje RTL
Ecuación Booleana
Ecuación DiferencialTrazado de figuras
Macroceldas
Celdas estándares
Plano de bloques
Procesador
RTL:ALU, regisroPuerta lógica, flipflop
Transistor
Mayor abstracción Menor abstracción
Chip, PCP, MCM
MicrocomputadorEspecificaciones
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 apartir 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
EntidadArquitectura
Paquete
Configuración
Cuerpo dePaquete
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ñoRequerimientos Especificaciones
Arquitectura
ModelamientoRTL, Funcional
Síntesis
Modelo de Puertas
Modelo de Retardos
Ubicación y Conexión
Banco de Pruebas
FPLD, ASIC Simulación
Verificación
Simulación
Simulación
Rediseño
Entidad y Arquitectura – Tipos de datosSeñales y variables – Asignaciones – Procesos
Sentencia IF ELSE – Sentencia CASE
Sintaxis VHDL
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
ENTITY ejemplo ISPORT ( a, b : in BIT;
c, d : out BIT);END ejemplo;
Entradas
Salidas
Puerto
Nombre de la Entidad
Tipo de dato
IN: entrada
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 ISBEGIN
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 example IS
PORT ( a : in BIT;b : out BIT);
END example;
ARCHITECTURE pld OF example ISBEGIN
b <= a;END pld;
ENTITY define los puertos (interfaz) del diseño.
ARCHITECTURE define laimplementación.
ENTITY y ARCHITECTUREconforman un par enlazado mediante un nombre.
VHDL no es sensitivo al tipo de carácter
Puertos, Señales y Variables
• Los puertos se especifican en la entidad:IN Puerto de entradaOUT Puerto de salidaINOUT 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
– pebbles <= “11111111”;
• Un bit de un bus– dino (3) <= ‘1’;
• 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 );
La dirección del subrango debe ser igual como en la declaración del vector
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
• Condicional
• Selectiva
a <= r or t;b <= ((r or t) and not(g xor h));
q <= ‘0’ WHEN clr = ‘0’ ELSE‘1’ WHEN set = ‘1’ ELSE ‘X’ ;
WITH sel SELECTq <= a WHEN ‘0’,
b WHEN ‘1’;
Estas asignaciones no se emplean dentro de los procesos
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 ANDd <= e; -- conecta dos nodosx <= y + z; -- suma y con z, luego asigna el
-- resultado a x
ENTITY EjmAsgSimple ISPORT ( a, b, e : IN BIT;
c, d : OUT BIT );END EjmAsgSimple;
ARCHITECTURE maxpld OF EjmAsgSimple ISBEGIN
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 ISBEGIN
f <= a WHEN s = '0' ELSE b;END Mux2a1;
Ejemplo: Codificador con prioridad
ENTITY condsigm ISPORT( high, mid, low : IN BIT;
q : OUT INTEGER RANGE 0 TO 3 );END condsigm;ARCHITECTURE maxpld OF condsigm ISBEGINq <= 3 WHEN high = '1' ELSE -- prioridad más alta
2 WHEN mid = '1' ELSE -- media prioridad1 WHEN low = '1' ELSE -- prioridad más baja0; -- no hay señal activa
END maxpld;
Asignación SelectivaLista alternativas disponibles para cada valor de una expresión.
ENTITY selsig ISPORT(
d0, d1, d2, d3: IN BIT;s : IN INTEGER RANGE 0 TO 3;q : OUT BIT);
END selsig;
ARCHITECTURE maxpld OF selsig ISBEGINWITH s SELECT
output <= d0 WHEN 0,d1 WHEN 1,d2 WHEN 2,d3 WHEN 3;
END maxpld;
Multiplexor 4 a 1
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.
• Usando lista de sensibilidad (Sensitivity List):
• Este proceso se ejecuta luego de un cambio en cualquier señal de la lista de sensibilidad.
La Sentencia Process
PROCESS (a, b, c, d)BEGIN
-- sentencia secuencial #1-- ...-- sentencia secuencial #N
END PROCESS;
• Usando la sentencia Wait:
• Este proceso se ejecuta cuando la condición WAIT es verdadera
La Sentencia Process
PROCESSBEGIN
WAIT condición-- sentencia secuencial #1-- ...-- sentencia secuencial #N
END PROCESS;
La Sentencia Process• Utilice etiquetas para la organización de varios procesos:
• La etiqueta (label) identifica procesos específicos en una arquitectura de múltiples procesos
abcd: PROCESS (a, b, c, d)BEGIN
-- sentencia secuencial #1-- ...-- sentencia secuencial #N
END PROCESS abcd;
Ejemplo: Función OR
entity PuertaOR isport (A,B : in bit;
Z : out bit);end PuertaOR;
architecture comb of PuertaOR isbegin
OR_FUNC: process (A,B)begin
if (A='1' or B='1') thenZ <= '1';
elseZ <= '0';
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
sentencia;
sentencia;
ELSE
sentencia;
sentencia;
END IF;
IF expresion THEN
sentencia;
sentencia;
ELSIF expresion THEN
sentencia;
sentencia;
ELSIF expresion THEN
sentencia;
sentencia;
ELSE
sentencia;
sentencia;
END IF;
IF expresion THEN
sentencia;
sentencia;
END IF;
IF expresion THEN
sentencia;
sentencia;
ELSIF expresion THEN
sentencia;
sentencia;
ELSIF expresion THEN
sentencia;
sentencia;
END IF;
Sentencia if : Ejemplo
ENTITY if_ex ISPORT (sel, a, b : IN BIT;
y : OUT BIT);END if_ex;
ARCHITECTURE if_ex OF if_ex ISBEGINPROCESS (sel, a, b) BEGINIF sel = '1' THEN
y <= a;ELSE
y <= b;END IF;
END PROCESS;END if_ex;
Esta descripción resulta en un multiplexor dos a uno.
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 val ISWHEN “00” =>
q <= i0;WHEN “01” =>
q <= i1;WHEN OTHERS =>
q <= ‘X’;END CASE;
CASE expresion IS
WHEN valor_constante =>
sentencia;
sentencia;
WHEN valor_constante =>
sentencia;
sentencia;
WHEN OTHERS =>
sentencia;
sentencia;
END CASE;
Construcciones VHDL para una
AND
asignacióndirecta
asignacióncondicional
asignaciónselectiva
proceso conif - else
proceso concase