Está en la página 1de 40

Introduccin 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 Descripcin de Hardware

VHDL es un lenguaje textual de alto nivel que se utiliza para la descripcin 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 estndar que se emplea para la documentacin, simulacin, sntesis y verificacin de sistemas digitales. Los lenguajes de descripcin de hardware, como el VHDL, facilitan la descripcin de circuitos integrados digitales complejos.

Por qu VHDL?
Lenguaje estndar. Soporte de las principales compaas proveedoras de herramientas CAD y EDA. Flexibilidad de implementacin en circuitos integrados: cdigo VHDL es portable entre herramientas, aunque normalmente es necesario hacer ajustes segn el dispositivo o la tecnologa. Es un lenguaje popular cuyo nmero de usuarios sigue aumentando. Ventajas
Proceso de desarrollo ms confiable y automatizado Reduccin de costo y tiempo de salida al mercado

VHDL: Orgenes y evolucin


Desarrollado en los comienzos de los 80s como un mtodo para la descripcin de sistemas electrnicos para el Departamento de Defensa de EE.UU. Su sintxis es similar al lenguaje de programacin Ada. Fue estandarizado en 1987, bajo la norma IEEE 1076. En 1993 sali una revisin 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 estn ganando mayor atencin y popularidad.

Para qu sirve VHDL?


Comienzos de los 90s : diseo de ASICs complejos, empleando herramientas de sntesis. Mediados de los 90s: diseo con lgica programable. Se utiliza en la documentacin as como en la simulacin del sistema, y adems 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 sntesis permiten implementar los circuitos sobre ASICs y FPLDs.

Limitaciones de VHDL
No permite describir sistemas analgicos. Sin embargo, ya se estn desarrollando versiones anlogas y mixtas. No existe un estilo de descripcin normalizado. Para sntesis se requiere ajustar los estilos disponibles a la capacidad de las herramientas CAD. Es posible sintetizar lgica solo de un subconjunto del lenguaje. Las herramientas de sntesis 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 activacin de los bloques de un sistema digital, donde las seales se presentan sobre las entradas de los bloques y producen resultados en las salidas ESTRUCTURA=> Ordenamiento de bloques en una jerarqua. Cada bloque se puede describir en estilo RTL, comportamental o mixto. SECUENCIA => Las sentencias secuenciales se ejecutan una despus de otra, como en lenguajes de software con un solo microprocesador. TIEMPO => VHDL permite modelar el concepto de tiempo. Simulacin dirigida por eventos. Un evento es producido por un cambio en una seal en un determinado tiempo de simulacin. La respuesta de un modelo a un evento puede provocar nuevos eventos.

Niveles de Abstraccin
La abstraccin define cuanto detalle debe ser descrito acerca del diseo. Existen cuatro niveles principales de abstraccin:
Layout (Trazado): descripcin en el nivel geomtrico o fsico. Especifica la disposicin fsica de los dispositivos en el chip. Puede incluir informacin sobre temporizacin y efectos analgicos. Lgico: Especifica la conexin de puertas lgicas y registros. Informa detalladamente la funcin, arquitectura, tecnologa y temporizacin. Transferencia de Registros (RTL): Define cada registro en el diseo y la lgica entre ellos. Contiene informacin de la arquitectura pero no detalla la tecnologa. No especifica los retardos de tiempo absolutos. Comportamental: Describe la funcin de un diseo sin especificar la arquitectura de registros. Puede requerir informacin de tiempos de retardos.

En VHDL se utilizan los estilos RTL y Comportamental

Carta Y de Gajski & Kahn


Estructural
Microcomputador RTL:ALU, regisro Procesador Puerta lgica, flipflop Transistor Especificaciones Algoritmo Lenguaje RTL Ecuacin Booleana Ecuacin Diferencial

Geomtrico
Trazado de figuras Celdas estndares Macroceldas Plano de bloques Chip, PCP, MCM

Funcional

Mayor abstraccin

Menor abstraccin

Estilos RTL y Comportamental


La mayora de las herramientas de sntesis requieren que el cdigo se exprese en el nivel RTL. En este nivel el diseador debe especificar la arquitectura de los registros y puertas en el diseo.
Camino de datos (datapath) modelado estructuralmente.

Las herramientas de sntesis comportamental generan automticamente el circuito en el nivel de puertas y flipflops a partir de la codificacin de un algoritmo.
Seccin de control (i.e. mquinas de estados) descrito funcionalmente.

La descripcin comportamental se emplea tambin para modelar estmulos y respuestas (testbenchs), documentar partes y detallar las especificaciones del hardware. NOTA:
Algunos CADs permiten mezclar descripciones HDL con descripciones esquemticas.

Unidades de Diseo en VHDL

Entidad

Arquitectura Cuerpo de Paquete Configuracin

Paquete

Paquetes
En un paquete se colocan definiciones comunes para varias entidades de diseo. 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 diseo, que incluye subprogramas En el curso vamos a emplear esta caracterstica del lenguaje para compartir informacin y archivos de diseo.

VHDL Metodologa de Diseo


Requerimientos Especificaciones Banco de Pruebas Simulacin Rediseo Simulacin Arquitectura Modelamiento RTL, Funcional Verificacin Sntesis Modelo de Puertas Ubicacin y Conexin FPLD, ASIC Modelo de Retardos Simulacin

Sintaxis VHDL
Entidad y Arquitectura Tipos de datos Seales y variables Asignaciones Procesos Sentencia IF ELSE Sentencia CASE

Entidades y Arquitecturas
Entidad => Indica QUE es el diseo.
Define la interfaz de un bloque, sin definir su comportamiento. Equivale a un smbolo en un diagrama esquemtico.

Arquitectura => Indica COMO trabaja el diseo.


Modela el comportamiento o estructura del circuito. Puede contener elementos RTL o comportamentales. Una entidad puede contener varias arquitecturas.

Entidad + Arquitecturas = opciones de diseo, diferentes soluciones para un mismo problema.

Entidad
Define la interfaz con el mundo exterior (i.e., pines de entrada y salida) Funciona como un smbolo esquemtico, con la diferencia que se usa texto en vez de smbolos grficos
Entradas Puerto

ENTITY ejemplo IS PORT ( a, b : in BIT; c, d : out BIT); END ejemplo;


Nombre de la Entidad

Tipo de dato

Salidas

IN: entrada OUT: salida INOUT: bidireccional

Arquitectura
Define la implementacin del diseo. La arquitectura puede definirse mediante asignaciones de expresiones lgicas, interconexiones de componentes y sentencias de alto nivel. Funciona como un circuito esquemtico.
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 diseo completo


ENTITY define los puertos (interfaz) del diseo. ENTITY y ARCHITECTURE conforman un par enlazado mediante un nombre.

ENTITY example IS PORT ( END example; a : in BIT; b : out BIT);

ARCHITECTURE pld OF example IS BEGIN b <= a; END pld;

ARCHITECTURE define la implementacin.

VHDL no es sensitivo al tipo de carcter

Puertos, Seales y Variables


Los puertos se especifican en la entidad:
IN OUT INOUT Puerto de entrada Puerto de salida Puerto bidireccional

Las seales 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 asignacin usa el smbolo <= VARIABLE Se declara y utiliza en un proceso y actualiza inmediatamente su valor asignado. La asignacin usa el smbolo :=

Tipos de Datos
Cada seal debe tener un tipo de dato asociado que se indica cuando la seal es declarada. Tipos diferentes de datos no pueden asignarse unos a otros. Todos los puertos, seales y variables deben ser de algn tipo de dato. Existen tipos ya construidos pero tambin 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} ms 5 otros tipos no usados para sntesis.
X (no x) es valor de no importa. Z (mayscula) es valor de tres-estados.

STD_LOGIC_VECTOR => p.e. 0Z1X011 Carcter => 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)

Asignacin de Buses
Bus completo
pebbles <= 11111111;

Un bit de un bus
dino (3) <= 1;

La direccin del subrango debe ser igual como en la declaracin del vector

Una parte del bus


SIGNAL picapiedras :bit_vector(7 downto 0); picapiedras (3 downto 2) <= 11;

Encadenacin
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 mquinas de estado. Los tipos se enumeran en una secuencia binaria, comenzando desde cero e incrementndose de uno en uno. Ejemplos
TYPE pais IS (Alemania, Italia, Japon); TYPE luces IS (rojo, verde, ambar, negro);

Asignaciones de Seales Concurrentes


Simple
a <= r or t; b <= ((r or t) and not(g xor h));

Condicional
Estas asignaciones no se emplean dentro de los procesos

q <= 0 WHEN clr = 0 ELSE 1 WHEN set = 1 ELSE X ; WITH sel SELECT q <= a WHEN 0, b WHEN 1;

Selectiva

Especifican los valores de las seales para cualquier combinacin de las entradas. La sntesis crea puertas y conexiones lgicas. No se crean latches ni flipflops.

Asignacin mltiple
Cuando ms una seal recibe dos asignaciones de seales separadas, se dice que es manejada por mltiples fuentes. En esos casos, se necesita una Funcin de Resolucin. Si no existe una funcin de resolucin la asignacin mltiple resulta ilegal. El tipo std_ulogic no soporta asignacin mltiple, pero si el tipo std_logic. VHDL para sntesis de MAX+plus II no permite asignaciones mltiples en asignaciones concurrentes.

Asignacin simple
Es una asignacin directa, como en una funcin booleana o matemtica:
c <= a AND b; d <= e; x <= y + z; -- crea una puerta AND -- conecta dos nodos -- 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;

);

Asignacin Condicional
Lista una serie de expresiones que son asignadas a una seal luego de una evaluacin positiva de una o ms expresiones booleanas. Cada expresin 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 ms alta 2 WHEN mid = ' 1' ELSE -- media prioridad 1 WHEN low = ' 1' ELSE -- prioridad ms baja 0; -- no hay seal activa END maxpld;

Asignacin Selectiva
Lista alternativas disponibles para cada valor de una expresin.

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, 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 seales. En un proceso pueden existir asignacin de variables, de seales, llamadas a procedimientos, sentencias IF, sentencias CASE, y sentencias iterativas. Una arquitectura puede contener ms 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 seal de la lista de sensibilidad.

La Sentencia Process
Usando la sentencia Wait:
PROCESS BEGIN WAIT condicin -- sentencia secuencial #1 -- ... -- sentencia secuencial #N END PROCESS;

Este proceso se ejecuta cuando la condicin WAIT es verdadera

La Sentencia Process
Utilice etiquetas para la organizacin de varios procesos:

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

La etiqueta (label) identifica procesos especficos en una arquitectura de mltiples procesos

Ejemplo: Funcin OR

entity PuertaOR is port (A,B : in bit; Z : out bit); end PuertaOR;

architecture comb of PuertaOR is begin OR_FUNC: process (A,B) begin if (A=' 1' or B=' 1' ) then Z <= ' 1' ; else Z <= ' 0' ; end if; end process OR_FUNC; end comb;

Sentencia if
Elige una accin basada en una condicin. Permite las palabras ELSIF, ELSE. Debe estar dentro de una sentencia Process
IF expresion THEN IF expresion THEN sentencia; sentencia; END IF; 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; END IF; sentencia; sentencia; ELSIF expresion THEN sentencia; sentencia; ELSIF expresion THEN sentencia; sentencia; ELSE sentencia; sentencia; END IF;

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

ARCHITECTURE if_ex OF if_ex IS BEGIN PROCESS (sel, a, b) BEGIN IF sel = '1' THEN y <= a; ELSE y <= b; Esta descripcin resulta en END IF; un multiplexor dos a uno. END PROCESS; END if_ex;

Sentencias Case
Ejecuta sentencias de acuerdo al valor de una expresin. When Others sirve para indicar que sentencias deben ejecutarse si el valor de la expresin no coincide con los casos anteriores.
CASE expresion IS WHEN valor_constante =>

CASE val IS WHEN 00 => q <= i0; WHEN 01 => q <= i1; WHEN OTHERS => q <= X; END CASE;

sentencia; sentencia; WHEN valor_constante => sentencia; sentencia; WHEN OTHERS => sentencia; sentencia; END CASE;

Construcciones VHDL para una AND


proceso con case

asignacin directa

proceso con if - else

asignacin condicional asignacin selectiva

También podría gustarte