Sie sind auf Seite 1von 30

Captulo.

2 - Fundamentos del Lenguaje VHDL


VHDL (VHSIC Hardware Description Language) VHSIC Very High Speed Integrated Circuit

Cap.2 - Fundamentos del Lenguaje VHDL

Departamento de la Defensa de los E.U.A.


Desarrollo de Lenguajes para Descripcin de Hardware Programa: Very High Speed Integrated Circuits (VHSIC) 1970s

IDL/IBM, HDL/TI, ZEUS/GE Desarrollo en rea Industrial


AHPL, DDL, CDL, ISPS Desarrollo en rea Acadmica 1980s AHDL, ABEL, CUPL

1983 VHDL Desarrollo: IBM, Texas Instruments e Intermetrics 1987 VHDL87 Estndar IEEE -1076 1993 VHDL93 Estndar IEEE -1164

VHDL y Verilog

Cap.2 - Fundamentos del Lenguaje VHDL

Ventajas del VHDL

Notacin Estandarizada
Disponibilidad al Pblico Independencia del Sistema de Desarrollo Independencia de la Metodologa de Diseo (PLDs, ASICs, FPGAs) Independencia de la Tecnologa y Proceso de Fabricacin (CMOS, Bipolar, BiCMOS) Reutilizacin de Cdigo

Capacidad descriptiva del comportamiento del sistema en distintos niveles de abstraccin: Algortmico, RTL (Register Transfer Logic) o concurrente, estructural (Lgico), Netlist.
Facilitar la Verificacin/Prueba y puesta a punto del sistema a disear. Adicin de la extensin analgica (IEEE1076.1) que permite la especificacin, simulacin y sntesis de sistemas digitales, analgicos y mixtos

Cap.2 - Fundamentos del Lenguaje VHDL

Elementos sintcticos del VHDL Comentarios


Se consideran comentarios despus de dos guiones medios seguidos --.

Smbolos especiales
Identificadores Nmeros Caracteres Cadenas Cadenas de bits Palabras reservadas

Existen caracteres especiales sencillos como (&, #, +, *, =) o dobles como ( :=, <=).
Es lo que se usa para dar nombre a los diferentes objetos del lenguaje. Se considera que se encuentra en base 10, se admite la notacin cientfica convencional es posible definir nmeros en otras bases utilizando el smbolo # : 2#11000100# Es cualquier letra o carcter entre comillas simples: 3, t Son un conjunto de caracteres englobados por comillas dobles: hola Los tipos bit y bit_vector son en realidad tipo carcter y arreglo de caracteres respectivamente, se coloca un prefijo para indicar la base : O126, XFE Son las instrucciones, rdenes y elementos que permiten definir sentencias.

Cap.2 - Fundamentos del Lenguaje VHDL

Identificadores Nombres o etiquetas que se usan para referirse a: Variables, Constantes, Seales, Procesos, Entidades, etc. Estn formados por nmeros, letras (maysculas o minsculas) y guin bajo _ con las reglas especificadas en la tabla siguiente. Longitud (Nmero de Caracteres): Sin restricciones Palabras reservadas por VHDL no pueden ser identificadores En VHDL, un identificador en maysculas es igual a su contraparte en minsculas

Reglas para especificar un identificador Segundo carcter no puede ser un guin bajo ( _ )

Incorrecto S_4bits

Correcto

Primer carcter debe ser siempre una letra mayscula o minscula 4Suma Dos guiones bajos no son permitidos
Un identificador no puede utilizar smbolos especiales

Suma4
S4_bits

Resta__4
Clear#8

Resta_4_
Clear_8

Cap.2 - Fundamentos del Lenguaje VHDL

Lista de palabras reservadas en VHDL

Cap.2 - Fundamentos del Lenguaje VHDL

Mayor Precedencia de operadores


** ABS NOT

*
+ (signo) + = AND

/
- (signo) /= OR

MOD

REM

& < NAND <= NOR > XOR <= XNOR

Menor

La precedencia de operadores se encuentran ordenados de mayor (arriba) a menor (abajo), los operadores que se encuentran en la misma fila tienen la misma precedencia y sern evaluados siguiendo el orden de izquierda a derecha.

Cap.2 - Fundamentos del Lenguaje VHDL

Objetos y Tipos de Datos

Booleano (False, True) Objetos Tipo Datos Enumerated (Enumerados)


Bit (0, 1) Character (Carcter) String (Cadena-Caracteres) std_ulogic std_logic Objetos VHDL Constantes Escalares Integer (Enteros)
(U,X,0,1,Z,W,L,H,-)

Enteros [-(231-1) a (231-1)] Positive (No-Cero y No-Negativos)

Variables
Seales File Floating Point (Punto Flotante) Physical (Fsicos) Array (Arreglos)
No soportado por herramientas de Sntesis

Natural (No-Negativos)
Real Time (Tiempo) Bit_Vector Std_ulogic_vector Std_logic_vector Record (Registro) Access (Acceso) Compuestos

Unsigned
Signed

Cap.2 - Fundamentos del Lenguaje VHDL

Objetos de Datos

Un objeto de datos en VHDL es un elemento que toma un valor de algn tipo de dato determinado, segn sea el tipo de dato, el objeto poseer un conjunto de propiedades. En VHDL los objetos de datos son generalmente una de las tres clases siguientes:
Constantes
Una constante es un elemento que puede tomar un nico valor de un tipo dato, las constantes pueden ser declaradas dentro de entidades, arquitecturas, procesos y paquetes.

Variables
Las variables pueden ser modificadas cuando sea necesario, pueden ser declaradas solamente dentro de los procesos y subprogramas.

CONSTANT identidicador : tipo := valor;


Ejemplo CONSTANT byte: integer := 8;

VARIABLE identidicador : tipo [:= valor];


Ejemplo VARIABLE aux1, aux2: bit;

Seales Las seales si pueden almacenar o pasar valores lgicos, por lo tanto, representan elementos de memoria o conexiones y si pueden ser sintetizadas. Son declaradas en las arquitecturas antes del BEGIN.

SIGNAL identidicador : tipo [:= valor]; Ejemplo SIGNAL A, B : bit := 0; SIGNAL dato: bit_vector (7 downto 0);

Cap.2 - Fundamentos del Lenguaje VHDL

Estructura de VHDL

Estructura General de un Programa VHDL Unidades de Diseo (design units)

Cada uno formado por declaraciones o instrucciones que definen, estructuran, analizan y evalan el comportamiento de un sistema digital

Declaracin de Entidad (entity declaration)

Configuracin (configuration)

Declaracin de Paquete (package declaration)

Unidad Primaria

Unidad Primaria

Unidad Primaria

Arquitectura (architecture) Unidad Secundaria

Unidades indispensables en la descripcin de un sistema

Cuerpo del Paquete (package body) Unidad Secundaria

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Qu es?

entidad (entity) Bloque elemental de diseo Circuitos elementales digitales que forman de manera individual o en conjunto un sistema digital Ejemplos: Compuertas, Flip-Flops, Sumadores/Restadores, Multiplexores, Contadores, Multiplicadores, ALUs, Neurona-Digital, etc.
Ejemplo-1: Sumador

Cin Puertos de Entrada A B Entidad Sumador

Cout Puertos de Salida SUMA

Declaracin de una entidad Consiste en la descripcin de los puertos de entrada o salida de un circuito, el cual es identificado como una entidad (entity) Importante! No se describe cmo ser realizado o implementado el circuito, es decir, su Arquitectura

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Cmo se describe a un Puerto?

Descripcin de un Puerto

Nombre Identificador in = Entrada out = Salida inout

Modo

Tipo de Dato
Conjuntos de Valores que se les ha asignado un nombre (p.ej. bit, boolean, bit_vector, etc), de tal forma que un objeto (p.ej. una Seal) de un determinado Tipo (p.ej. el tipo bit_vector) pueda tomar cualquier valor dentro del conjunto de valores que define al Tipo especificado.

Puerto de Entrada (Lectura) y Salida (Escritura) El valor ledo (Entrada) es aqul que llega al puerto, y no el valor que se le asigna (Salida), en caso de existir.

bit (pkg.standard) boolean


(pkg.standard)

Valores de 0 o 1 Lgico Define valores de cierto o falso de acuerdo con una expresin Conjunto de bits que representa a un grupo de seales de ent. o sal. Nmeros enteros

buffer
Similar al Puerto de Salida (Escritura), pero adems puede ser ledo. El valor ledo (Entrada) es el mismo valor asignado (Salida) al puerto.

bit_vector
(pkg.standard)

integer
(pkg.standard) Paquete (pkg.) en el cual es definido el tipo. Ver: Uso de Libreras y Paquetes

std_logic
(pkg.std_logic_1164)

Valores U, X, 0, 1, Z, W, L, H, - Arreglos de std_logic

std_logic_vector
(pkg.std_logic_1164)

Ms tipos
Se irn introduciendo conforme avance el curso

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Ejemplo: Sumador Completo

Ejemplo-2: Sumador
Cin Puertos de Entrada A B Entidad Sumador Cout Puertos de Salida SUMA

(entity) Inicia declaracin de la entidad (--) Indica Comentario

Identificador de la entidad

Nombres de los puertos

Lnea N. 1 2 3 4 5

Sumador-completo de dos datos con longitudes de 1-bit (Declaracin de Entidad) --Declaracin de la entidad de un circuito sumador entity sumador is port (A, B, Cin: in bit; SUMA, Cout: out bit); end sumador;
Modo de Operacin Tipo de Dato

(;) Finaliza declaracin o subdeclaracin (end) Finaliza declaracin de la entidad

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Ejemplo: Detector A

Ejemplo-3

a3 b3 a2 b2 a1 b1 a0 b0 F

Lnea N. 1 2

Detector Uso de dos datos con longitudes de 4-bit (Declaracin de Entidad) --Declaracion de la entidad entity circuito is

3
4 5

port (a3, b3, a2, b2, a1, b1, a0, b0: in bit;
F: out bit); end circuito;

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Uso de Vectores

Ejemplo-4 Cin vector_A vector_B vector_SUMA = [A3, A2, A1, A0] = [B3, B2, B1, B0] = [S3, S2, S1, S0] Entidad Sumador Cout

Declaracin de Puertos Tipo-Vector port (vector_A, vector_B: in bit_vector (3 downto 0); vector_SUMA: out bit_vector (3 downto 0)); Sumador-completo de dos datos con longitudes de 4-bit (Declaracin de Entidad Uso de Vectores)
Para ordenar en forma ascendente utilizar to en lugar de downto (p.ej. 0 to 3)

entity sumador is
port (A, B: in bit_vector (3 downto 0); Cin: in bit; Cout: out bit; SUMA: out bit_vector (3 downto 0));

end sumador;

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Ejemplo: Detector A (Uso de Vectores)

Ejemplo-5

a3 b3 a2 b2 a1 b1 a0 b0 F

Lnea N. 1 2

Detector Uso de dos datos con longitudes de 4-bit (Declaracin de Entidad Uso de Vectores) --Declaracion de la entidad entity circuito is

3
4 5

port (a, b: in bit_vector (3 downto 0);


F: out bit); end circuito;

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Uso de Libreras y Paquetes

user

work
comps_dsp

Biblioteca (library)
Lugar donde se almacenan los Paquetes definidos por el fabricante de la herramienta de desarrollo o el usuario. Lugar donde se permite almacenar resultados de la compilacin de diseos, con el fin de utilizarlos en otros.

xc

Paquetes
std_logic_arith std_logic_1164

ieee

Un paquete contiene: Declaraciones de Tipos y Subtipos de Datos Definiciones de Constantes Definiciones de Funciones y Procedimientos Declaraciones de Componentes (Sumadores, Restadores, Contadores, Multiplicadores, etc) Un Paquete = Macro-Unidad de Diseo

Objetivo: Facilitar el diseo

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Uso de Libreras y Paquetes

Bibliotecas

Paquetes

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Uso de Libreras y Paquetes

Para llamar un paquete es necesario llamar a la librera/biblioteca que lo contiene (donde ha sido compilado)

Sintaxis: use nombre_librera.nombre_paquete.all;

Ejemplo: use ieee.std_logic_1164.all;

Uso del paquete std_logic_1164 incluido en la biblioteca ieee

Permite el uso de todos los componentes almacenados en el paquete

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Uso de Libreras y Paquetes

Paquetes predefinidos comnmente utilizados Standard standard IEEE std_logic_1164 numeric_bit


Define los tipos: std_logic, std_ulogic, std_logic_vector, std_ulogic_vector Define funciones de conversin basadas sobre estos tipos. Define tipos de vectores signados y no-signados basados en el tipo bit y todos los operadores aritmticos sobre estos tipos. Define funciones extendidas y de conversin para dichos tipos. Contiene tipos bsicos: bit, bit_vector, integer Paquete incluido por omisin.

numeric_std
Synopsys std_logic_arith

Define tipos de vectores signados y no-signados basados en el tipo std_logic. Paquete equivalente al Paquete std_logic_arith
Define tipos de vectores signados y no-signados, y todos los operadores aritmticos sobre estos tipos. Define funciones extendidas y de conversin para dichos tipos.

std_logic_unsigned
std_logic_signed std_logic_misc

Define operadores aritmticos sobre el tipo std_ulogic_vector y los considera como operadores no-signados.
Define operadores aritmticos sobre el tipo std_logic_vector y los considera como operadores signados. Define tipos, subtipos, constantes y funciones complementarios para el paquete std_logic_1164.

Cap.2 - Fundamentos del Lenguaje VHDL

Entidad - Ejemplo: Multiplicador

Ejemplo-6
X0 Z0 Circuito Multiplicador

X1
Y0 Y1

Z1
Z2 Z3

Multiplicador de dos datos con longitudes de 2-bit (Declaracin de Entidad Uso de Biblioteca y Paquete) library ieee; use ieee.std_logic_1164.all; entity multiplica is port (X0, X1, Y0, Y1: in std_logic;

Z3, Z2, Z1, Z0: out std_logic);


end multiplica;

Cap.2 - Fundamentos del Lenguaje VHDL

Arquitectura - Qu es?

arquitectura (architecture)
Unidad de Diseo Secundaria que describe el comportamiento interno de una entidad.

Cmo? - A travs de la programacin de varios procedimientos que permitan que la


entidad (entity) cumpla con las condiciones de operacin o comportamiento deseadas.

Niveles de Descripcin utilizados Nivel Algoritmo

Estilo de descripcin o Modelizacin Funcional

Nivel de Transferencia entre Registros (RTL)


Flujo de Datos

Nivel Lgico

Nivel Compuerta Nivel Transistor (Topologa / Layout)

Estructural

Cap.2 - Fundamentos del Lenguaje VHDL

Ejemplo general- MUX

Ejemplo-7: MUX --Entidad ENTITY mux IS PORT (a, b, sel: IN bit; sal: out bit);

END mux;

--Arquitectura Estructural
ARCHITECTURE estructural OF mux IS SIGNAL ax, bx, nosel :bit; BEGIN U0: ENTITY inv PORT MAP (e=>sel, y=>nosel); U1: ENTITY and2 PORT MAP (e1=>a, e2=>nosel, y=>ax); U2: ENTITY and2 PORT MAP (b, sel, bx); U3: ENTITY or2 PORT MAP (e1=>ax, e2=>bx, y=>sal); END estructural ;

Cap.2 - Fundamentos del Lenguaje VHDL

Ejemplo general- MUX

Ejemplo-7: MUX (continuacin)

--Arquitectura concurrente o RTL


ARCHITECTURE flujo1 OF mux IS SIGNAL ax, bx, nosel : bit; BEGIN nosel <= NOT sel; ax <= a AND nosel; bx <= b AND sel; sal <= ax OR bx; END flujo1;

--Arquitectura comportamental o funcional


ARCHITECTURE comportamental OF mux IS BEGIN PROCESS (a, b, sel) - - Lista sensible BEGIN IF (sel=0) THEN sal <= a; ELSE sal <= b; END IF; END PROCESS; END comportamental;

--Arquitectura concurrente o RTL


ARCHITECTURE flujo2 OF mux IS BEGIN sal <= a WHEN sel =0 ELSE b; END flujo2;

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin - Funcional

Funcional - En este caso, se


describen las relaciones entre las entradas y salidas, sin importar la estructura o implementacin fsica del sistema o circuito.

Lnea N
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits


--Ejemplo de una descripcin abstracta (funcional) library ieee; use ieee.std_logic_1164.all; entity comp is port (a,b: in bit_vector (1 downto 0); c: out bit); end comp; architecture funcional of comp is begin compara: process (a,b) begin if a = b then c <= 1; else c <= 0; end if; end process compara; end funcional;

Ejemplo-8 a

Comparador

Uso de if-then-else (construccin secuencial) si si a = b entonces c = 1 a b entonces c = 0

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin - Funcional

Ejemplo-9

Lnea N
f1

Arquitectura - Compuerta OR de dos entradas


--Ejemplo de una descripcin abstracta (funcional) library ieee; use ieee.std_logic_1164.all; entity com_or is port (a,b: in std_logic; f1: out std_logic); end com_or; architecture funcional of com_or is begin process (a,b) begin if (a = 0 and b=0) then f1 <= 0; else f1 <= 1; end if; end process; end funcional;

a b

a
0 0 1

b
0 1 0

f1
0 1 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin Flujo de Datos

Flujo de Datos - En este caso, se describe la forma en la que los datos se pueden transferir entre
los diferentes mdulos operativos que constituyen la entidad (sistema o circuito)

La construccin when-else

Ejemplo-10 Comparador (Ejemplo-8)

Lnea N
1 2 3 4 5 6 7 8 9 10 11 12

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits


--Ejemplo de una arquitectura usando when-else library ieee; use ieee.std_logic_1164.all; entity comp is port (a,b: in bit_vector (1 downto 0); c: out bit); end comp; architecture f_datos of comp is begin c <= 1 when (a = b) else 0; end f_datos;

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin Flujo de Datos

Uso de ecuaciones booleanas


Ejemplo-11 Comparador (Ejemplo-8) Lnea N
1 2 3 4 5 6 7 8 9 10 11 12

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits


--Ejemplo de una arquitectura usando ecs. booleanas library ieee; use ieee.std_logic_1164.all; entity comp is port (a,b: in bit_vector (1 downto 0); c: out bit); end comp; architecture booleana of comp is begin c <= (a(1) xnor b(1)) and (a(0) xnor b(0)); end booleana;

a b Comparador

a0 b0 a1 b1

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin Estructural

Estructural - En este caso, el comportamiento de un sistema o circuito es descrito mediante modelos


lgicos establecidos de los componentes que conforman al sistema o circuito, como son: Compuertas, Sumadores, Contadores, etc.

Modelos lgicos pueden ser: Diseados por el Usuario Predefinidos por el Fabricante

Almacenados en Paquetes contenidos en las bibliotecas de la Herramienta de Desarrollo

Cap.2 - Fundamentos del Lenguaje VHDL

Estilo de Modelizacin Estructural


a0 b0 a1 b1

Ejemplo-12
Comparador (Ejemplo-8)

U0 U1

x0 U2 x1

Lnea N
1 2 3 4 5 6 7 8 9 10 11 12 13 14

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits


library ieee; use ieee.std_logic_1164.all; use work.compuertas.all; entity comp is port (a,b: in bit_vector (0 to 1); c: out bit); end comp; architecture estructural of comp is signal x: bit_vector (0 to 1); begin U0: xnor2 port map (a(0), b(0), x(0)); U1: xnor2 port map (a(1), b(1), x(1)); U2: and2 port map (x(0), x(1), c); end estructural;