Anda di halaman 1dari 78

VHDL

1
Introduccin
VHDL (Hardware Description Language)
Lenguaje orientado a la descripcin o modelado de
sistemas digitales.
Permite:
1. Describir
2. Analizar
3. Evaluar
el comportamiento de un sistema electrnico digital.

2
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Introduccin

VHDL permite la integracin de sistemas digitales


1. Sencillos
2. Elaborados
3. Ambos
en un dispositivo lgico programable, sea de baja
capacidad de integracin como una GAL, o de
mayor capacidad como los CPLD y FPGA.

3
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Unidades bsicas de diseo
La estructura general de un programa en VHDL est formado
por mdulos o unidades de diseo; cada uno est compuesto
por un conjunto de declaraciones e instrucciones que:
Definen
Describen
Estructuran
Analizan
Evalan
el comportamiento de un sistema digital.
4
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Tipos de unidades en VHDL

Existen cinco tipos de unidades de diseo en VHDL:


1. Declaracin de entidad (entity declaration).
2. Arquitectura (architecture).
3. Configuracin (configuration).
4. Declaracin del paquete (package declaration).
5. Cuerpo del paquete (package body).

5
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Unidades de diseo
indispensables

De las cinco unidades de diseo, dos son indispensables


en la estructuracin de un programa:
1. Entity.
2. Architecture.

Unidades primarias: entidad, paquete y


configuracin.
Unidades secundarias: arquitectura y cuerpo del
paquete.
6
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Conociendo el lenguaje VHDL
Creado especficamente para el diseo de hardware.
Permite implementar multitud de circuitos lgicos,
tanto combinacionales como secuenciales.
Permite crear elementos ms complejos, como CPU's,
manejar ficheros, etc.
Permite simular los elementos creados.
NO PERMITE IMPLEMENTARLOS.
Este curso se centra en el VHDL sintetizable, es decir,
con el que se puede llegar a grabar un dispositivo lgico
programable.

7
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Un programa en VHDL

Consta de dos partes:


1. La entidad (entity), sirve para relacionar el
diseo con el mundo exterior. Se puede ver como
una "caja negra", de la que slo se conoce sus
entradas, sus salidas y la disposicin de las
mismas.
2. La arquitectura (architecture), que describe lo que
el programa va a hacer con las entradas para
transformarlas en salidas.

8
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Definiciones elementales
Concurrencia si se da algn cambio en una
parte del circuito, se produce una variacin (en
algunos casos casi instntanea) de otras seales.

Secuencial son ms bien propios de los SDL


(soft design lenguage) en los que la
programacin tiene un flujo natural
secuencializado, siendo propio de este tipo se
eventos las sentencias case, if, while, loop, etc
ms propias de estas sintaxis.

9
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Concurrencia y Secuencial
Construcciones concurrentes del lenguaje por
ejemplo una arquitectura tiene una naturaleza
eminentemente concurrente (es decir que est
activo todo el tiempo)

Secuencial el cuerpo de un process es en


pincipio eminentemente secuencial. La
asignacion de eventos secuenciales dentro de
una estructura concurrente se ejecutar de forma
concurrente, es decir, al mismo tiempo que las
dems sentencias.
10
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Tipos de objetos bsicos
Variables
Defincin
Constantes

Seales

11
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Variables, Constantes y Seales

Como las variables y las seales pueden variar


su valor mientras ejecutamos un programa, sern
stas las encargadas de almacenar dichos datos,
asimismo sern los portadores de la informacin.

nicamente las seales pueden tener la


connotacin de globalidad dentro de un
programa, es decir, que pueden ser
empleadas dentro de cualquier parte del
programa a diferencia de las variables que solo
tienen sentido en el interior de un process.
12
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Process

Los process estructuras concurrentes,


constituidas por sentencias de ejecucin
secuencial, eso ser lo que har que dentro de un
process nos encontremos con sentencias
similares a las de los SDL (lenguajes de
descripcin de software) que nos llevan a
emplear VHDL como si de otro lenguaje comn
se tratara. Dentro de un process nos podemos
encontrar con la declaracin y utilizacin de las
variables como parmetros locales al process .

13
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Process
De ejecucin secuencial, las variables evaluan su
valor dentro del cuerpo del proceso de forma
inmediata, sin consumir tiempo de ejecucin,
pero como estn dentro de un process, que es
una estructura concurrente, este valor no ser
asumido, sino hasta el final de la ejecucin de
dicho process.

14
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo

w<= not a;
x <= a and
b;
y <= c and
w;
z <= x or
Al producirse
y; un cambio en la parte derecha de la
estructura de asignacin (<= a;) de alguna de las
sentencias, la expresin es evaluada de nuevo en su
totalidad, y asignado el nuevo valor a la seal de la
izquierda. Mltiples asignaciones en el cuerpo de una
arquitectura se activan simultneamente.

15
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Entity (Entidad)
En la declaracin de una entidad (entity) se definen
las entradas y salidas del chip, especificando:

Cantidad (cuntas son)


Tamao (de 0 a n bits)
Modo (entrada, salida, ...)
Tipo (integer, bit,...)

16
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Declaracin de una Entidad
(entity)
Ejemplo
entity programa Cabecera del programa
is
port( Se indica que a continuacin viene los
puertos (o grupos seales) de entrada
y/o salida
-- puertos de Aqu se declaran las entradas y/o
salidas. Las lneas empezadas por dos
entradas
guiones marcan comentarios. El
-- puertos de compilador no distingue las maysculas
salidas de las minsculas
-- puertos de
I/O
-- puertos de
17 buffers
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Se indica que se ha acabado la
Entity

Cada seal en una declaracin de entidad (entity)


est referida a un puerto (o grupo de seales), el
cual es anlogo a uno (s) pin(es) del smbolo
esquemtico.

Un puerto es un objeto de informacin, el cual,


puede ser usado en expresiones y al cual se le
pueden asignar valores. A cada puerto se le debe
asignar un nombre vlido.

18
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Declaracin de puertos

nombre_variable: modo Forma genrica de designar un


puerto
tipo;
puertoa: in bit; El primer puerto es un bit de
entrada, y su nombre es "puertoa"

puertob: in bit_vector(0 El segundo puerto es un vector de 8


bits de entrada siendo el MSB el
to 7);
puertob(0) y el LSB el puertob(7)
puertoc: out bit_vector(3 El tercer puerto es un vector de 4
bits de salida siendo el MSB el
downto 0);
puertoc(3) y el LSB el puertoc(0)
puertod: buffer bit; El cuarto puerto es un buffer de un
solo bit, cuyo nombre es "puertod"

puertoe: inout std_logic; El quinto puerto es una


entrada/salida del tipo estndar logic
de un solo bit
19
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Declaracin de puertos

Seguido del nombre del puerto y separado de ste


por dos puntos, viene:

El tipo de puerto.
El modo, describe la direccin en la cual la
informacin es transmitida a travs del puerto.
stos slo pueden tener cuatro valores: in, out,
buffer e inout.
Si no se especifica nada, se asume que el puerto
es del modo in.

20
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Modos
Modo in: Un puerto es de modo in si la informacin
del mismo, solamente debe entrar a la entidad,
soliendo ser usado para relojes, entradas de control
(como las tpicas load, reset y enable), y para datos
de entrada unidireccionales.

Modo out: Un puerto es de modo out si la


informacin fluye hacia fuera de la entidad. Este
modo no permite realimentacin, ya que al declarar
un puerto como out, estamos indicando al compilador
que el estado lgico en el que se encuentra no es
leble. Esto le da una cierta desventaja, pero a
cambio consume menos recursos de nuestros
dispositivos lgicos programables.

21
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Modos
Modo buffer: Es usado para una realimentacin interna
(es decir, para usar este puerto como un driver dentro de
la entidad). Este modo es similar al modo out, pero
adems, permite la realimentacin. Este puerto no es
bidireccional, y solo puede ser conectado directamente a
una seal interna, o a un puerto de modo buffer de otra
entidad. Una aplicacin muy comn de este modo es la de
salida de un contador, ya que debemos saber la salida en
el momento actual para determinar la salida en el
momento siguiente.
Modo inout: Es usado para seales bidireccionales, es
decir, si necesitamos que por el mismo puerto fluya
informacin tanto hacia dentro como hacia afuera de la
entidad. Este modo permite la realimentacin interna. Este
modo puede reemplazar a cualquiera de los modos
anteriores, pudindose usar este modo para todos los
puertos, pero reduciremos la lectura posterior del cdigo
22 porL otra persona, y reduciendo losInstituto
recursos disponibles
Dr. Oscar Prez Castaeda Tecnolgico de Tehuacn de
la cpsula.
Modos

VHDL slo admite cuatro modos para los puertos,


pero puede haber tantos tipos de seales como lo
requiera la aplicacin, ya que pueden ser creados
por el usuario.

VHDL incorpora varios tipos de forma estndar (por


haber sido creado as), pudiendo usar otros
mediante libreras normalizadas, y los creados
por el usuario.

23
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Modos, norma IEEE 107693
La norma internacional IEEE 1076/93 define cuatro
tipos que son nativos para VHDL como son:

1. Tipo boolean: puede tomar uno de dos valores:


verdadero/true o falso/false. Un ejemplo tpico
es la salida de un comparador que da
verdadero si los nmeros comparados son
iguales y falso si no lo son.

2. Tipo bit: Puede tomar uno de dos valores: 0 1


( o tambin "low" o "high", segn se prefiera). Es
el tipo ms usado de los nativos.
24
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Modos, norma IEEE
107693

3. Tipo bit_vector: Es un vector de bits. Tener cuidado


al definir el peso de los bits que lo integran, ya que
segn se ponga la palabra reservada downto o to
se estar diciendo que el bit ms significativo es el
nmero ms alto o el ms bajo del vector,
respectivamente.

4. Tipo integer: Para manejar nmeros enteros. Hay


que advertir que el uso de enteros consume
muchos recursos de cpsula, siempre y cuando sea
sintetizable, ya que est prcticamente creado para
la simulacin.
25
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Modos, norma IEEE 107693
Ejemplos de modos nativos

temperatura:out boolean; Slo puede tomar dos


valores: verdadero o falso, y
es de salida.
Salida_adc : bit_vector (0 El MSB es Salida_adc(0) y
to 7); Salida_adc(7) el LSB
Salida_adc : bit_vector (7 El MSB es Salida_adc(7) y
downto 0); Salida_adc(0) el LSB

26
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Norma IEEE 1164
Ante la necesidad de ampliar la operatividad del
tipo bit, la norma IEEE 1164, definicin un nuevo
tipo llamado std_logic, std_ulogic, y sus
derivados tales como std_logic_vector y
std_ulogic_vector.

Como su nombre pretende indicar, es el tipo de tipo


lgico estndar, que es el ms usado en la
actualidad.

27
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Norma IEEE
1164
A continuacin se incluye la declaracin de entidades
de un multiplexor de 2x1 de cuatro bits, con entrada
de habilitacin o enable. El multiplexor necesita las
entradas de informacin, la seal de seleccin, la
de enable y las salidas de informacin.

enable

select Multiplexor 2 x 1 out1


de
in1 cuatro bits
in2

28
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo
entity multi is port ( multi es el nombre de la entidad

enable: in bit; enable es un bit de entrada (suficiente


selec: in bit; para habilitar).

in1: in bit_vector(3 selec es otro bit de entrada, que


selecciona la entrada in1 o in2, ambas de
downto 0); 4 bits.
in2: in bit_vector(3 out1 es de salida, que lgicamente, debe
downto 0); ser de la misma longitud que in1 e in2.
out1:out bit_vector(3 Ntese que el ltimo puerto no lleva punto
downto 0) y coma al final de la lnea. Si lo llevase
estara incorrecto.

); Fin de la entidad multi.


end multi;

29
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de un comparador
ent_a(3..0)

comparador
igual
ent_b(3..0)

entity comparador is Cabecera de la entidad, cuyo nombre


port ( es comparador.

ent_a, ent_b: in ent_a y ent_b son las entradas de


bit_vector(3 downto cuatro bits.
igual es la salida de un slo bit.
0);
igual: out bit;
); Se finaliza la entidad con la palabra
end comparador; clave end y el nombre de la misma
(comparador).
30
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de sumador de 1 bit
Cin
Cout
A
Entidad sumador
B SUMA

1 -- Declaracin de la entidad de un circuito sumador


2 entity sumador is
3 port (A,B,Cin: in bit;
4 SUMA, Cout: out bit);
5 end sumador;

31
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de sumador de 4 bits
Cin
Cout
A[3:0]
Entidad sumador
B[3:0] SUMA[3:0]

1 -- Declaracin de la entidad de un circuito sumador de 4 bits


2 entity sumador is
3 port (A,B: in bit_vector (3 downto 0);
4 Cin: in bit;
5 Cout: out bit;
6 SUMA: out bit_vector (3 downto 0));
7 end sumador;

32
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Consideraciones sobre los nombres

VHDL no distingue las letras maysculas de las


minsculas, por lo que un puerto llamado "EnTraDA"
ser equivalente a otro que se llame "ENTRADA" o
"entrada".
El primer carcter de un puerto slo puede ser una letra,
nunca un nmero. As mismo, no pueden contener
caracteres especiales como $, %, ^, @, ... y dos
caracteres de subrayado seguidos.
Estos dos detalles a tener en cuenta surgieron del
comit que cre este lenguaje.

33
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Arquitectura (architecture)

La arquitectura indica lo que se debe hacer con las seales


recibidas por los puertos de entrada y as generar la salida a
travs del puerto de salida.
En la declaracin de entidades es donde reside todo el
funcionamiento de un programa, ya que es ah donde se
indica qu hacer con cada entrada, para obtener la salida. Si la
entidad es vista como una "caja negra", para la cual lo nico
importante son las entradas y las salidas, entonces, la
arquitectura es el conjunto de detalles interiores de la caja
negra.

34
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Declaracin de una arquitectura
architecture archpro of Cabecera de la arquitectura. archpro
es un nombre cualquiera (suele
programa is
empezar por "arch", aunque no es
necesario) y programa es el nombre
de una entidad (entity) existente en
el mismo fichero.
-- declaracin de seales Declaraciones de apoyo, que se vern
en la pgina siguiente.
y otros accesorios
begin Inicio del programa.

-- ncleo del programa Conjunto de sentencias, bucles,


procesos, funciones,... que dan
operatividad al programa.

end archpro; Fin de la arquitectura archprog.

35
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de un multiplexor
architecture archimulti Cabecera de la arquitectura. En esta ocasin el
of multi is nombre de la arquitectura es archimulti, y el de
la entidad es multi, la cual est definida
anteriormente.
-- seales En este programa no vamos a necesitar seales.
begin Se da comienzo al programa.
process(enable,in1,in2) Sentencias que hacen que la entidad definida
begin como multiplexor hagan la funcin propia de su
if enable='0' then nombre. Slo hay que entender la estructura de
out1<="1111"; las arquitecturas en estos momentos, por lo que
elsif enable='1' then este cdigo no debe ser objeto de preocupacin.
if(selec = '0') then
out1<=in1;
elsif(selec = '1') then
out1<=in2;
end if;
end if;
end process;
end archimulti; Fin del programa
36
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Seales y variables

VARIABLES.- Es similar al concepto de variable en


otros lenguajes. Su valor puede ser alterado en
cualquier instante y se le puede asignar un valor
inicial. Las variables slo se declaran en los
procesos o subprogramas.
Utilizadas en ejecuciones en serie.
Seales y variables

SEALES.- Se declaran igual que las constantes y


variables. La diferencia es que pueden ser normal,
register y bus. Si no se especifica nada en la
declaracin el compilador entender que es del
tipo normal. Se puede decir que la seal tiene dos
partes una donde se escribe y otra donde se lee.
Las seales pueden ser declaradas slo en las
arquitecturas, paquetes (PACKAGE) o en bloques
concurrentes (BLOCK).
Utilizadas en ejecuciones concurrentes.

38
Seales y variables
--Uso correcto de las seales
--Uso incorrecto de las seales
ARCHITECTURE ejem1 OF entidad IS
ARCHITECTURE ejem1 OF entidad IS
SIGNAL a, b, x, y : INTEGER;
SIGNAL a, b, c, x, y : INTEGER;
BEGIN
BEGIN
P1: PROCESS (a,b)
P1: PROCESS (a,b,c)
VARIABLE c: INTEGER;
BEGIN
BEGIN
c<= a; --Se ignora
c:= a; --Inmediato
x<=c+2;
x<=c+2;
c<=b; --Se mantiene
c:=b; --Inmediato
y<=c+2;
y<=c+2;
END PROCESS p1;
END PROCESS p1;
END ejem1
END ejem1

39
Programacin de Estructuras Bsicas
Diseo (Programacin) de una
Estructura Bsica Combinatoria

Biblioteca (s)
Sintaxis:
Declaracin ARCHITECTURE nombre_arquitectura OF nombre_entidad IS
Entidad {Declarativas de Bloque} Se analizarn posteriormente
BEGIN
Declaracin
Arquitectura {Enunciados Concurrentes}
END [nombre_arquitectura]

Enunciado Concurrente.
Unidad de Cmputo/Clculo que realiza lo siguiente:
Lectura de Seales.
Realiza clculos basados en los valores de las Seales.
Asigna los valores calculados a Seales especficas.
Enunciados Concurrentes
Tipos de Enunciados Concurrentes.
Asignacin de Seal Permite asignar un valor calculado a una seal o
puerto.
Proceso (process) Permite definir un algoritmo secuencial que lee
valores de Seales y calcula nuevos valores que son
asignados a otras Seales.
Bloque (block) Grupo de enunciados concurrentes.

Llamada a un Componente predefinido


Llamada a un Procedimiento (procedure) Llama a un algoritmo que calcula y asigna valores
a Seales

Asignacin de Seales

Tipos:
Asignaciones Condicionales de Seales La construccin when-else
Asignaciones de Seales mediante Ecuaciones Booleanas
Asignaciones de Seales por Seleccin La construccin with-select-when

Nota: Se puede utilizar el trmino Estructura de


Control, en lugar del trmino Construccin
Operadores Lgicos
Operadores Lgicos
and, or, nand, xor, xnor, not
Tipos de Operandos permisibles: bit, boolean y arreglos unidimensionales (del
tipo bit o boolean)
Operandos deben tener la misma longitud, excepto para el operador not, el cual
se aplica por lo general a un solo operando.
Si una expresin incluye varios de estos operadores (p.ej. AND, NOT, XNOR)
es necesario utilizar parntesis para evaluarla correctamente.

Ejemplos:

Ecuacin Booleana Expresin VHDL


q a ( x y) q = a or (x and y)
y a (b c ) d y = a or (not b and not c) or d
Asignacin de Seales
Asignaciones Condicionales de Seales - La construccin when-else
a Entidad f(a,b,c)
b L Ejemplo N 1 - Uso de la construccin when-else
c Tabla 1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity tabla is
a b c f 4 port (a,b,c: in std_logic;
0 0 0 1 5 f: out std_logic);
6 end tabla;
0 0 1 0
7 architecture arq_tabla of tabla is
0 1 0 0 8 begin
0 1 1 1 9 f <= 1 when (a = 0 and b=0 and c=0) else
1 0 0 0 10 1 when (a = 0 and b=1 and c=1) else
11 1 when (a = 1 and b=1 and c=0) else
1 0 1 0
12 1 when (a = 1 and b=1 and c=1) else
1 1 0 1 13 0;
1 1 1 1 14 end arq_tabla;

La construccin when-else permite definir paso a paso el comportamiento de un sistema. Para esto, es necesario
declarar los valores que se le deben asignar a una determinada seal (o grupo) en funcin de las diferentes
condiciones de entrada posibles. El orden en el que se declaren las condiciones de entrada, no es importante.
when-else
A B C D F
L Ejemplo N 2 - Uso de la construccin when-else
0 0 0 0 1
1 library ieee;
0 0 0 1 0
2 use ieee.std_logic_1164.all;
0 0 1 0 0
3 entity funcion is
0 0 1 1 0 4 port (A,B,C,D: in std_logic;
0 1 0 0 0 5 F: out std_logic);
0 1 0 1 1 6 end funcion;
0 1 1 0 1 7 architecture a_func of funcion is
0 1 1 1 0 8 begin
9 F <= 1 when (A = 0 and B=0 and C=0 and D=0) else
1 0 0 0 0
10 1 when (A = 0 and B=1 and C=0 and D=1) else
1 0 0 1 0
11 1 when (A = 0 and B=1 and C=1 and D=0) else
1 0 1 0 0 12 1 when (A = 1 and B=1 and C=1 and D=1) else
1 0 1 1 0 13 0;
1 1 0 0 0 14 end a_func;
1 1 0 1 0
1 1 1 0 0
1 1 1 1 1
Asignaciones de Seales mediante Ecuaciones Booleanas
a x1
b

c x2
d
x3
e
f
L Ejemplo N 3 Asignaciones de Seales Uso de Ecs. Booleanas
1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity logica is
4 port (a,b,c, d, e, f: in std_logic;
5 x1, x2, x3: out std_logic);
6 end logica;
7 architecture booleana of logica is
En este tipo de
asignaciones, cada
8 begin
funcin de salida es 9 x1 <= a xnor b;
descrita mediante su
ecuacin booleana 10 x2 <= ((c and d) or (a xnor b)) nand ((e xor f) and (c and d));
correspondiente, lo
cual implica el uso de 11 x3 <= (e xor f) and (c and d);
operadores lgicos.
12 end booleana;
Asignaciones de Seales mediante Ecuaciones Booleanas

L Ejemplo N 4 Asignaciones de Seales Uso de Ecs. Booleanas


A B C X Y Z 1 library ieee;
0 0 0 1 0 1 2 use ieee.std_logic_1164.all;
3 entity logica is
0 0 1 1 1 0
4 port (A,B,C: in std_logic;
0 1 0 0 0 1
5 X,Y,Z: out std_logic);
0 1 1 1 0 1 6 end logica;
1 0 0 0 0 0 7 architecture a_log of logica is
1 0 1 0 1 0 8 begin
1 1 0 0 1 0 9 X <= (not A and not B and not C) or (not A and not B and C)
1 1 1 1 0 0 10 or (not A and B and C) or (A and B and C);
11 Y <= (not A and not B and C) or (A and not B and C)
12 or (A and B and not C);
13 Z <= (not A and not B and not C) or (not A and B and not C)
14 or (not A and B and C);
15 end a_log;
X A B C A B C A BC ABC
Y A B C AB C ABC
Z A B C A BC A BC
with-select-when

L Ejemplo N 5 Uso de la construccin with-select-when


a(1) a(0) C
1 library ieee;
0 0 1
2 use ieee.std_logic_1164.all;
0 1 0 3 entity circuito is
1 0 1 4 port (a: in std_logic_vector (1 downto 0);
1 1 1 5 C: out std_logic);
6 end circuito;
7 architecture arq_cir of circuito is
8 begin nicamente, se utiliza la coma (,), el
punto y coma (;) se utiliza cuando se
9 with a select finaliza la construccin with-select
10 C <= 1 when 00,
11 0 when 01,
12 1 when 10,
13 1 when others;
14 end arq_cir;

La estructura with-select-when se utiliza para asignar un valor (de varios posibles) a una seal o grupo de seales con base a los
diferentes valores de otra seal o grupo de seales previamente seleccionada(o).
Por lo general, un grupo de seales forman un vector, como en el ejemplo descrito a(1) y a(0) forman el vector a.
Procesos (process)
Tipos de Enunciados Concurrentes.
Asignacin de Seal Permite asignar un valor calculado a una seal o
puerto.
Proceso (process) Permite definir un algoritmo secuencial que lee
valores de Seales y calcula nuevos valores que son
asignados a otras Seales.
Bloque (block) Grupo de enunciados concurrentes.

Llamada a un Componente predefinido


Llamada a un Procedimiento (procedure) Llama a un algoritmo que calcula y asigna valores
a Seales

Proceso (process)

Cada proceso es conformado por un conjunto de enunciados secuenciales.


Enunciados Secuenciales stos son interpretados por la herramienta de
sntesis en forma secuencial, es decir, uno por uno; por lo que el orden en el
cual son declarados tiene un efecto significativo en la lgica que se intenta
describir o sintetizar.
Procesos (process)

Enunciados de Asignacin de Variables

Proceso (process) Enunciados de Asignacin de Seales


Enunciados if
Enunciados case
Enunciados loop
Enunciados Secuenciales Enunciados next
Enunciados exit
Enunciados de Subprogramas
Enunciados return
Nota importante:
Una seal que se vea involucrada dentro de un proceso no recibe Enunciados wait
inmediatamente el valor asignado, slo hasta el final del mismo.
Una variable que sea utilizada dentro de un proceso s recibe el
valor de forma inmediata. Enunciados null
Procesos (process)
Enunciados if: if la_condicin_es_cierta then

La construccin if-then-else {ejecuta grupo-1 de enunciados secuenciales};


else
{ejecuta grupo-2 de enunciados secuenciales};
end if;

Enunciados if: if la_condicin-1_se_cumple then


{ejecuta grupo-1 de enunciados secuenciales};
La construccin if-then-elsif-then-else
elsif la_condicin-2_se_cumple then
{ejecuta grupo-2 de enunciados secuenciales};
else
{ejecuta grupo-3 de enunciados secuenciales};
end if;
Procesos (process)
Enunciados CASE:

La construccin case - when ejecuta una o


varias instrucciones secuenciales que
dependen del valor de una sola expresin.

SINTAXIS
case expression is
when choices => { sequential_statement }
when choices => { sequential_statement }
end case;

DESCRIPCION
expression: evala a un entero, o tipo enumerado.
sequential_statement: uno o mas enunciados secuenciales.
choices: opciones.
La ltima opcin puede ser others (valor por omisin del resto de
las opciones).
Procesos (process)
Operadores Relacionales
Caractersticas.
Uso: Para fines de comparacin de datos.
Operadores incluidos en los paquetes: std_numeric y std_logic_arith
Los operadores de Igualdad y Desigualdad (= , /=) utilizan todos los tipos
de datos.
Los operadores (<, <=, >, >=) son definidos para los tipos escalar y
arreglos unidimensionales de tipos de datos enumerados o enteros.
Operador Significado
= Igual
/= Diferente
< Menor
<= Menor o Igual
> Mayor
>= Mayor o Igual
Procesos (process)
La construccin: if-then-else
L Ejemplo N 7 - La construccin if-then-else
Comparador de dos palabras con long. de 2-bits
1 library ieee;
2 use ieee.std_logic_1164.all;
La construccin if-then-else sirve para 3 entity comp is
seleccionar una operacin con base al
anlisis (evaluacin lgica Cierto o Falso) 4 port (a,b: in std_logic_vector (1 downto 0);
de una condicin.
5 c: out std_logic);
6 end comp;
a
c 7 architecture funcional of comp is
b Comparador 8 begin
9 compara: process (a,b)
10 begin
11 if a = b then
12 c <= 1;
Lista-Sensitiva
13 else
Seales (incluyendo puertos) ledas por el proceso.
14 c <=0;
15 end if;
16 end process compara;
17 end funcional;
Procesos (process)
La construccin:if-then-elsif-then- L Ejemplo N 8 - La construccin if-then-elsif-then-else
else Comparador de Magnitud 2-Words de 4-bits
1 library ieee;
2 use ieee.std_logic_1164.all;
La construccin if-then-elsif-then-else se
3 entity comp4 is
utiliza cuando se requiere analizar ms de 4 port (a,b: in std_logic_vector (3 downto 0);
una condicin de entrada.
5 x,y,z: out std_logic);
6 end comp4;
a=b x
a[3:0] 7 architecture arq_comp4 of comp4 is
8 begin
y
a>b 9 process (a,b)
z 10 begin
b[3:0] a<b 11 if (a = b) then
12 x <= 1;
13 elsif (a > b) then
Qu circuito es inferido?
Qu valores tienen las otras 14 y <=1;
salidas en este instante?
15 else
16 z <=1;
17 end if;
18 end process;
19 end arq_comp4;
Procesos (process)
Ejemplo N 9 - La construccin if-then-elsif-then-else
A1 A0 B1 B0 Z1 Z0 Comparador de Magnitud 2-Words de 2-Bits / Salida Codificada
0 0 0 0 1 1 library ieee;
0 0 0 1 0 1 use ieee.std_logic_1164.all;
0 0 1 0 0 1 entity comp is
0 0 1 1 0 1 port (A,B: in std_logic_vector (1 downto 0);
Z: out std_logic_vector (1 downto 0));
0 1 0 0 1 0
end comp;
0 1 0 1 1 1
architecture a_comp of comp is
0 1 1 0 0 1 begin
0 1 1 1 0 1 process (A,B)
1 0 0 0 1 0 begin
1 0 0 1 1 0 if (A = B) then Operacin deseada:
Z <= 11;
1 0 1 0 1 1 Si: A = B entonces Z = 11
elsif (A < B) then
1 0 1 1 0 1 Si: A < B entonces Z = 01
Z <= 01;
1 1 0 0 1 0 else Si: A > B entonces Z = 10
1 1 0 1 1 0 Z <= 10; Ecs. Booleanas:
1 1 1 0 1 0 end if; Z1 A0 A1 B0 B1 A1B0 A1B1 A0 B1
1 1 1 1 1 1 end process; Z0 A0 A1 B0 B1 A0B1 A1B1 A1B0
end a_comp;
Otras Estructuras Bsicas
Buffer-Salida de 3-Estados
Ejemplo N 10 Buffer Salida de 3-Estados
habilitar (enable) library ieee;
use ieee.std_logic_1164.all;
entrada salida entity tri_est is
port (enable, entrada: in std_logic;
salida: out std_logic);
end tri_est;
Tipos Lgicos Estndares
architecture arq_buffer of tri_est is
U Valor No-Inicializado begin
X Valor Fuerte Desconocido process (enable, entrada)
0 0 Fuerte begin
1 1 Fuerte if (enable = 0) then El tipo de dato bit no soporta el valor
Z, por lo que se debe utilizar el tipo
salida <= Z;
Z Alta Impedancia std_logic, que si lo soporta.

else
W Valor Dbil Desconocido
salida <= entrada;
L 0 Dbil end if;
H 1 Dbil end process;
- No Importa (Dont Care) end arq_buffer;
Otras Estructuras Bsicas
Multiplexores: Mux 4 a 1 (2-Bits)
Ejemplo N 11 Multiplexor 4 a 1 / Uso de with-select-when
library ieee;
use ieee.std_logic_1164.all;
entity mux is
a[1:0] port (a, b, c, d: in std_logic_vector (1 downto 0);
00
b[1:0] s: in std_logic_vector (1 downto 0);
01 Mux z[1:0]
c[1:0] z: out std_logic_vector (1 downto 0));
10 end mux;
d[1:0] architecture arqmux of mux is
11
begin
s[1:0] with s select
z <= a when 00,
b when 01,
c when 10,
d when others;
end arqmux;
Otras Estructuras Bsicas
Multiplexores:Mux 4 a 1 (2-Bits)
Ejemplo N 12 Multiplexor 4 a 1 / Uso de Ecs. Booleanas
library ieee;
a[1:0] use ieee.std_logic_1164.all;
00
b[1:0] entity mux_eb is
01 Mux z[1:0]
c[1:0] port (a, b, c, d: in std_logic_vector (1 downto 0);
10 s: in std_logic_vector (1 downto 0);
d[1:0]
z: out std_logic_vector (1 downto 0));
11
end mux_eb;
s[1:0] architecture arqmux_eb of mux_eb is
begin
z(1) <= (a(1) and not s(1) and not s(0)) or
(b(1) and not s(1) and s(0)) or
(c(1) and s(1) and not s(0)) or
(d(1) and s(1) and s(0));
z(0) <= (a(0) and not s(1) and not s(0)) or
(b(0) and not s(1) and s(0)) or
(c(0) and s(1) and not s(0)) or
(d(0) and s(1) and s(0));
end arqmux_eb;
Otras Estructuras Bsicas
Sumadores: Sumador Paralelo 4-Bits
Ejemplo N 15 Sumador Paralelo 4-Bits
S0 library ieee;
A0 use ieee.std_logic_1164.all;
C0
B0 entity suma is
port (A, B: in std_logic_vector (3 downto 0);
S1 S: out std_logic_vector (3 downto 0);
A1 Cout: out std_logic);
C1
B1 end suma;
architecture arqsuma of suma is
S2 signal C: std_logic_vector (2 downto 0);
A2 begin
C2
B2 S(0) <= A(0) xor B(0);
C(0) <= A(0) and B(0);
S3 S(1) <= (A(1) xor B(1)) xor C(0);
A3
Cout C(1) <= (A(1) and B(1)) or (C(0) and (A(1) xor B(1)));
B3 S(2) <= (A(2) xor B(2)) xor C(1);
C(2) <= (A(2) and B(2)) or (C(1) and (A(2) xor B(2)));
Declaraciones de Seales (signal): Especifican seales que S(3) <= (A(3) xor B(3)) xor C(2);
permiten conectar los diferentes tipos de enunciados
concurrentes (asignacin de seales, bloques, procesos y Cout <= (A(3) and B(3)) or (C(2) and (A(3) xor B(3)));
llamadas a componentes o procedimientos) de que consta
una arquitectura. end arqsuma;
Estilos de arquitectura
Para describir una arquitectura existen cuatro estilos,
teniendo cada uno, su propio nivel de abstraccin. Los
estilos son:
Estilo behavioral o comportamiento: Este estilo se
caracteriza por incluir las sentencias y rdenes tpicas de
un lenguaje de programacin (if, then, case,...), sin
importarnos cmo quedar la distribucin de puertas
lgicas. Es necesario un proceso (process) al ser una
estructura secuencial. El siguiente fragmento de cdigo
describe un comparador (usando una entidad descrita en
este mismo tutorial)escrito con el estilo behavioral o
de comportamiento.
60
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Comparador estilo behavioral

architecture Se utilizan los clsicos if


behavioral of compa then else de cualquier
lenguaje de programacin,
is
y adems las asignaciones
begin
son secuenciales. Esto es lo
comp: process (a, que hace esta arquitectura
b) de comportamiento o
begin behavioral.
if a= b then
igual<='1';
else
igual<='0';
end if;
end process comp;
end behavioral;

61
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Estilo dataflow

Estilo dataflow o flujo de datos: Se puede encontrar


de dos formas similares, pero ambas implican cmo la
informacin ser transferida de seal a seal y de la
entrada a la salida sin el uso de asignaciones secuenciales.
Es decir, en este estilo no se pueden usar los procesos
(process). El comparador descrito de forma behavioral
o de comportamiento se puede escribir usando el
estilo dataflow de cualquiera de las dos formas
siguientes:

62
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplos en estilo dataflow
architecture Esta arquitectura es del
dataflow1 of compa estilo dataflow porque se
especifica cmo la
is
informacin pasar a la
begin
salida sin usar sentencias
igual<='1' when secuenciales
(a=b) else '0';
end dataflow1;

architecture dataflow2 Aqu de nuevo las


of compa is asignaciones son
begin concurrentes, no
igual<= not(a(0) xor secuenciales.
b(0))
and not(a(1) xor
b(1))
and not(a(2) xor
b(2))
and not(a(3) xor
b(3));
end dataflow2;
63
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Estilo structural
Estilo structural (estructural): en l, se describe un
"netlist" de VHDL, en los cuales los componentes son
conectados y evaluados instantneamente con seales. No
se suele usar este estilo nicamente en una arquitectura ya
que resulta muy difcil de modificar, siendo de verdadera
utilidad cuando debemos crear una estructura grande y
deseamos descomponerla en partes para manejarla mejor,
y para hacer la simulacin de cada parte ms sencilla. Se
suele requerir el uso de seales auxiliares, y adems
paquetes y libreras accesorios, lo cual, recordemos, debe
estar declarado al comienzo de la entidad.

64
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de estilo netlist
architecture struct of Aqu slo se interconexionan salidas
compa is con entradas de componentes. La
signal x: bit_vector(0 to salida viene dada por la
operatividad de los componentes, la
3);
cual no se puede saber si no
begin conocemos el paquete del cual ha
u0: xnor2 port map sido leda.
(a(0),b(0),x(0));
u1: xnor2 port map
(a(1),b(1),x(1));
u2: xnor2 port map
(a(2),b(2),x(2));
u3: xnor2 port map
(a(3),b(3),x(3));
u4: and4 port map
(x(0),x(1),x(2),x(3),igual)
;
end struct;

65
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Estilo mixto
Estilo mixto: Es el estilo que est compuesto en mayor o
menor medida de dos o ms de los estilos descritos
anteriormente.

66
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Conclusiones sobre estilos
El cdigo de VHDL que se escribe no siempre va a describir una
funcin optimizada, la cual no siempre va a poder ser reducida por
la herramienta de compilacin, que se traduce en un poco
aprovechamiento de los recursos de las PLD's. Por lo tanto,
diferentes diseos producen diferentes, aunque equivalentes,
ecuaciones de diseo, pudindose dar, sin embargo, disposiciones
diferentes de los recursos.
Es habitual usar el estilo structural para descomponer un diseo
en unidades manejables, para ser creado por partes por equipos de
trabajo distintos. el estilo structural se usa adems para tener un
grado de control alto sobre la sntesis.
Para concluir el apartado dedicado a las arquitecturas, recordar
que tanto la entity y la architecture deben ir unidas en el
mismo fichero, ya que una parte carece de sentido sin la otra.
67
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Package (paquete)
Los packages (paquetes) permiten agrupar un
conjunto de declaraciones para que puedan ser usadas
por varios dispositivos sin ser repetidas en la declaracin
de cada uno.

Un diseador de Hardware que utilice frecuentemente la


misma tecnologa de diseo puede generar un conjunto
de procedures, funciones, puertas y, en general, de
componentes que emplear con frecuencia para re-
utilizar sus diseos.

68
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Estructura bsica de un package
La estructura bsica en la declaracin de un paquete est
dividida en dos partes claramente diferenciadas:
1. La declaracin del paquete, package: donde se obtiene
una visin externa y simplista del componente. La
declaracin del paquete va precedida por la palabra
reservada package y finaliza con end. En el cuerpo de
la declaracin nos encontramos con procedures,
funciones, componentes, etc. tal y como apareceran en
la parte de la declaracin de una entidad.
2. La declaracin del cuerpo del paquete, package body:
especifica el funcionamiento y cualidades que permiten
su implementacin, de forma similar a la arquitectura.
Debe llevar las palabras reservadas package body.
69
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo de declaracin de un package
package body Esta parte se corresponde
nombre_del_package con una arquitectura.
is
-- definicin de
procedures
-- definicin de
funciones
-- definicin de
tipos, etc.
end
nombre_del_package;

Todo esto hace posible que una vez declarados los


subprogramas dentro de un package, se puedan utilizar
haciendo nicamente uso de una llamada al proceso,
asignndole un nombre y la lista de parmetros
necesarios.
70
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Llamada a un package
Para llamar a un package que ha sido definido
anteriormente, se debe incluir la clusula use antes del
cuerpo de la arquitectura.

use work.nombre del package.nombre del componente;

Para esto se deben especificar tres cosas:


1. El nombre de la librera donde se encuentra el paquete.
2. El nombre del paquete.
3. El nombre del componente que se desee habilitar.

71
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Habilitacin de todos los componentes
Cuando se desea habilitar todos los componentes
declarados en un paquete, ya sea por comodidad o por
no saber exactamente donde se encuentra el recurso que
se desea usar utilizar la palabra all de la siguiente
forma:

use work.nombre del package.all;

Cuando se crea una arquitectura debe tenerse presente


que los puertos de entrada y salida declarados en la
entidad, deben ser tratados como seales.
72
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Libreras

Una mencin aparte merece la librera llamada LPM


System Library, en la cual se ofrecen mltiples mdulos,
ya creados, que facilitan el trabajo, ya que incluyen desde
el generador de constantes ms sencillo hasta contadores
y multiplicadores con todas las caractersticas opcionales
posibles.

73
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Lista de componentes

Nombre del paquete Nombre del componente

MCCSTNT Mdulo de constantes

MINV Mdulo de inversores

MAND Mdulo de AND's

MOR Mdulo de OR's

MXOR Mdulo de XOR's

MBUSTRI Mdulo de bus triestado

MMUX Mdulo de multiplexores

74
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Lista de componentes
Nombre del paquete Nombre del componente

MADD_SUB Mdulo de
sumadores/restadores
MCOMPARE Mdulo de comparadores
MMULT Mdulo de multiplicadores
MCOUNTER Mdulo de contadores
MLATCH Mdulo de latches
MFF Mdulo de flip-flops
MSHFTREG Mdulo de registros

Para usar cualquiera de estos mdulos, solamente se debe


incluir en el archivo de cdigo la siguiente lnea, encima
de la declaracin de entidades y de arquitecturas:
use work.lpmpkg.all;
75
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo ...
Se crear un multiplicador de 4 bits (a y b), cuyo resultado,
obviamente, debe ser de 8 bits (p), y que adems sume otro
nmero de ocho bits (s) al resultado. Para ello se debe invocar
previamente a la librera lpmpkg.

Este ejemplo utiliza el mdulo mmult, el cual exige no slo


introducir las seales con las cuales operar, con la sentencia port
map sino tambin su dimensin, con la sentencia generic map.
Como cada mdulo tiene unas especificaciones de entradas, salida
y dimensiones distintas.

Consultar el manual de la librera lpmpkg, para conocer que entradas y salidas necesita cada
mdulo.

76
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
Ejemplo library ieee;
use
ieee.std_logic_1164.all; Llama a lpmpkg
use work.lpmpkg.all;
Multiplicar a y b
entity multi_lpm is port( Sumar s
a,b: in El resultado es p
std_logic_vector(3 downto
0);
s: in std_logic_vector(7
downto 0);
p: out std_logic_vector(7 Llama a lpmpkg
downto 0)
);
Usa el mdulo mmult
end multi_lpm;

use work.lpmpkg.all;
architecture archimulti of
multi_lpm is
begin
a0: mmult generic
map(4,4,8,8)
77 port map(a,b,s,p);
Dr. Oscar L Prez Castaeda Instituto Tecnolgico de Tehuacn
end archimulti;
FIN DEL CURSO
Agradezco su asistencia y participacin a
este curso, esperando les sea de utilidad.

Dr. Oscar L Prez Castaeda

Instituto
Tecnolgico
Tehuacn

78 E L E CT R N I C A

Anda mungkin juga menyukai