Vous êtes sur la page 1sur 17

Comentarios Delimitadores - Identificadores

Comentarios: Si en una lnea de cdigo VHDL se colocan dos guiones


consecutivos (--), todo el texto que va a continuacin se interpreta como un
comentario, hasta la prxima secuencia de control de carro (CR-LF). Los
comentarios son tiles para documentar claramente la descripcin.
Smbolos especiales (delimitadores): Son smbolos de uno o dos caracteres,
con una aplicacin especfica.

VHDL

Introduccin al Lxico y la
Sintaxis del Lenguaje

<

>

**

=>

:=

/=

Palabras Reservadas en VHDL

B
begin
block
body
buffer
bus
C
case
component
configuration
constant

D
disconnect
downto
E
else
elsif
end
entity
exit
F
file
for
function
G
generate
generic
group
guarded

I
if
impure
in
inertial
inout
is

N
nand
new
next
nor
not
null

L
label
library
linkage
literal
loop

O
of
on
open
or
others
out

M
map
mod

UTN-FRBA - TCNICAS DIGITALES I

P
package
port
postponed
procedural
procedure
process
protected
pure

&

>= <= <>

--

Identificadores: Son nombres que se usan para designar a los diferentes


elementos del lenguaje (p.e.: seales, variables, entidades, puertos (ports) de
entrada y salida, etc.). Los nombres se forman con letras (no distingue
maysculas de minsculas), nmeros y el guin bajo (_), con las siguientes
restricciones:
Deben comenzar siempre con una letra.
No puede haber dos guiones bajos seguidos, ni terminar con uno.
No pueden incluir smbolos especiales (salvo que se delimiten con \ \).
No pueden coincidir con las palabras reservadas del lenguaje que estn
destinadas a instrucciones, rdenes y elementos para definir sentencias.
UTN-FRBA - TCNICAS DIGITALES I

A
abs
access
after
alias
all
and
architecture
array
assert
attribute

Ing. Pablo Caldirola

Literales

R
range
record
reference
register
reject
rem
report
return
rol
ror

T
then
to
transport
type

S
select
severity
signal
shared
sla
sli
sra
srl
subtype

V
variable

U
unaffected
units
until
use

W
wait
when
while
with
X
xnor
xor

Ing. Pablo Caldirola

Literales: Un literal es un smbolo cuyo valor resulta evidente inmediatamente


a partir de su representacin.

Literal entero (integer literal)


4

985327

10E3

16#B5#

8#265#

2#1011_0101#

Literal en punto flotante (floating point literal)


0.28

1768953.207692

1_768_953.207_692

8#25.3#e+2

25.3E-2

El literal en punto flotante siempre lleva un punto (.), el literal entero no y


ambos pueden expresarse en bases 2 hasta 16. Ambos literales admiten
exponentes en base 10 pero solo el literal en punto flotante puede tener
exponente negativo. Se puede usar un guin bajo para separar dgitos
adyacentes y mejorar la legibilidad (no todos los sintetizadores lo admiten).

Literal caracter (character literal)


a

Es cualquier caracter ASCII imprimible encerrado entre comillas simples.

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Objetos y Tipos de Datos

Literales

Literal cadena (string literal)


DIF

5TG$#&(=)+;|?

Es cualquier secuencia de caracteres ASCII encerrada entre comillas dobles.

Literal cadena de bit (bit string literal)


B10110110

B1011_0110

XFf

Xe7

O7320

Es una secuencia de caracteres tomados de los conjuntos 0 hasta 9, a


hasta f y A hasta F, encerrada entre comillas dobles y precedida por una
letra que indica la base (B por binario puede omitirse, O por octal y X por
hexadecimal). Se pueden separar dgitos con el guin bajo (no todos los
sintetizadores lo admiten).

Literal fsico (physical literal)


12 m

10.5 seg

22 Kohm

Consiste de un literal entero o de punto flotante ms un identificador que


representa un factor de escala o unidad de medida. Un simple identificador de
unidad de medida es un literal fsico en s mismo (se asume precedido por el
literal entero 1).
UTN-FRBA - TCNICAS DIGITALES I

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Entero
Fsico
Enumerado

Numricos

Real
Tipos en
VHDL

Arreglo
Compuestos
Registro
Archivo
Acceso

La
figura
muestra
la
clasificacin general de los
tipos disponibles en VHDL
(solo veremos los que estn
resaltados).
Para los tipos numricos estn
definidas las operaciones de
suma, resta, multiplicacin,
divisin, mdulo, etc.
Antes de poder usar un objeto
de
un
determinado
tipo,
previamente se debe declarar
el tipo.

La forma general para todas las declaraciones de tipo es:


TYPE identificador IS definicin del tipo;
En color se resaltan las palabras reservadas TYPE e IS.
El identificador es el nombre que se va a dar al tipo.
En la definicin se especifica la clase del tipo a declarar y su rango de valores.
Al final de la lnea, el delimitador (;) indica el final de la instruccin.
UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Tipos de Datos

Tipos de Datos

Escalares

Objeto (Object)
En VHDL algo que pueda contener un valor es un objeto.
Hay tres clases de objetos:
Seales (incluye a los ports)
Variables
Constantes
Tipo (Type)
9 Cada objeto tiene un tipo, que determina el conjunto de valores que ese
objeto puede contener y las operaciones que pueden realizarse sobre el.
9 El tipo de un objeto se establece en la declaracin del objeto.
9 En VHDL cualquier asignacin que se haga a un objeto debe hacerse
respetando la compatibilidad de tipo.
Algunas reglas de compatibilidad:
o
El tipo de una expresin asignada a un objeto, debe ser el mismo que el
tipo del objeto.
o
Los operandos de muchos operadores predefinidos (aritmticos,
relacionales, etc.) deben ser del mismo tipo.
o
En las descripciones estructurales debe asegurarse que el tipo de una seal
o port, sea el mismo que el tipo declarado para el port del componente al
cual est conectado.

Ing. Pablo Caldirola

Tipos escalares (scalar types)


Un tipo escalar es un tipo cuyos valores no pueden descomponerse en valores
ms pequeos. Los valores de un tipo escalar pueden ordenarse a lo largo de
una simple escala. Un objeto declarado como tipo escalar, puede contener a lo
sumo un solo valor en cualquier instante.
Tipo entero (Integer Type)
En el tipo entero la definicin de tipo es una restriccin de rango, que
consiste de la palabra reservada RANGE y una especificacin de rango. La
forma ms simple de la especificacin de rango consiste de dos
expresiones y una direccin. La direccin es TO para un rango ascendente
y DOWNTO para un rango descendente. Los valores que estn fuera del
rango no son valores lcitos para el objeto de ese tipo. Ejemplos:
TYPE byte_cca2 IS RANGE -128 TO 127;
TYPE byte_mag IS RANGE 0 TO 255;
TYPE indice IS RANGE 31 DOWNTO 0;
TYPE posicion_bit IS RANGE 7 DOWNTO 0;
TYPE cuenta_desc IS RANGE 31 DOWNTO 0;
-- El siguiente es un tipo predefinido (no requiere ser declarado)
TYPE integer IS RANGE -2147483648 TO 2147483648; -- con 32 bits
Note que a pesar de tener el mismo rango, indice y cuenta_desc son tipos
diferentes.
UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Tipos de Datos

Tipos de Datos

Tipo fsico (physical type)


Para el tipo fsico, la definicin de tipo especifica una restriccin de rango,
una unidad fundamental y ninguna o varias unidades secundarias, siendo
cada unidad secundaria un mltiplo entero de la fundamental.
TYPE resistencia IS RANGE 1 TO 10E9
UNITS
ohm;
-- La unidad fundamental
Kohm=1000 ohm; -- Unidad secundaria, mltiplo de la fundamental
END UNITS;
-- El siguiente es el nico tipo fsico predefinido.
TYPE time IS RANGE (2**31-1) TO (2**31-1)
UNITS
-15
segundo)
fs;
-- femtosegundo (10
ps=1000 fs;
-- picosegundo
ns=1000 ps;
-- nanosegundo
us=1000 ns;
-- microsegundo
ms=1000 us;
-- milisegundo
sec=1000 ms;
-- segundo
min=60 sec;
-- minuto
hr=60 min;
-- hora
END UNITS;
El valor calculado para un objeto de tipo time, debe ser un mltiplo de fs.

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Tipo enumarado (enumeration type)


La definicin de tipo para el tipo enumerado es una lista encerrada entre
parntesis de una enumeracin de literales, siendo cada uno de los
literales bien un identificador o un literal caracter. Cada identificador o
literal caracter puede aparecer una sola vez en una dada definicin de tipo
enumerado, pero un identificador o literal caracter particular se puede usar
en la definicin de varios tipos enumerados diferentes. Esto se conoce
como sobrecarga overload es decir, VHDL permite que un determinado
literal enumerado tenga mltiples significados. El significado concreto en
cada caso lo determina el sintetizador a partir del contexto local de ese
literal. Ejemplos:
TYPE bit IS (0, 1); -- Es un tipo predefinido
TYPE tres_estados IS (0, 1, Z);
TYPE cuatro_estados IS (X, 0, 1, Z);
TYPE estados_internos IS (inicio, est1, est2, est3);
TYPE severity_level IS (note, warning, error, failure); -- Es un tipo predefinido
TYPE boolean IS (false, true); -- Es un tipo predefinido
Otro ejemplo de tipo predefinido que combina identificadores y literales
caracter es el TYPE character.
(ver el archivo: ..\xilinx\11.1\ise\vhdl\src\std\standard.vhd)

UTN-FRBA - TCNICAS DIGITALES I

Tipos de Datos

Un tipo compuesto es aquel cuyos valores pueden descomponerse en valores


atmicos ms pequeos.

Ing. Pablo Caldirola

Tipos de Datos

Tipos compuestos (composite types)

10

2) Mediante una indicacin de subtipo, que consiste en el nombre de un


tipo seguido opcionalmente por una restriccin.
Ejemplo:

Tipo registro (record type)

-- Se declaran dos tipos enteros, columna y fila

Es un tipo heterogneo, es decir los elementos de un record pueden ser de


varios tipos.

TYPE columna IS RANGE 1 TO 80;

Tipo arreglo (array type)

TYPE fila IS RANGE 1 TO 12;

Es un tipo homogneo, es decir los elementos de un array son todos del


mismo tipo. Los arrays pueden tener una, dos o ms dimensiones
(ndices). Cada dimensin tiene un tipo y ese tipo debe ser un tipo discreto
(tipo entero o enumerado). La definicin de tipo de un array puede ser
restringida (se especifican los lmites del array en la misma declaracin) o
no restringida (no se especifican los lmites en la declaracin del tipo; los
mismos se fijan posteriormente en la declaracin del objeto de ese tipo).

-- Se declara el tipo array matriz de dos dimensiones donde las

En la definicin de un array restringido, el tipo y rango de cada dimensin


se especifican mediante un rango discreto. Hay dos formas de hacerlo:

-- con restricciones de rango adicionales; los lmites del array resultante

1) Mediante una simple especificacin de rango.


El tipo palabra es un array unidimensional (vector) de 32 bits.
11

-- y columna (sin restricciones !!).


TYPE matriz IS ARRAY (fila, columna) OF boolean;
-- Se declara el tipo array matriz_reduc de dos dimensiones donde las
-- indicaciones de subtipo son los nombres de los tipos fila y columna
-- son de 1 a 6 y de 1 a 40.
TYPE matriz_reduc IS ARRAY

TYPE palabra IS ARRAY (31 DOWNTO 0) OF bit;

UTN-FRBA - TCNICAS DIGITALES I

-- indicaciones de subtipo son directamente los nombres de los tipos fila

Ing. Pablo Caldirola

(fila RANGE 1 TO 6, columna RANGE 1 TO 40) OF boolean;

UTN-FRBA - TCNICAS DIGITALES I

12

Ing. Pablo Caldirola

Tipos de Datos

Tipos de Datos

En la definicin de un array no restringido, se da el tipo de cada dimensin


pero el rango exacto y la direccin de cada dimensin (es decir el tamao
del array) se dejan sin especificar (usando la notacin RANGE <>).
-- Los siguientes son los nicos tipos de arrays no restringidos predefinidos
TYPE string IS ARRAY (positive RANGE <>) OF character;
TYPE bit_vector IS ARRAY (natural RANGE <>) OF bit;

Tambin es posible que una de las dimensiones del array sea otro array.
TYPE dato IS ARRAY (15 DOWNTO 0) OF bit; -- Array de (1d)
TYPE memoria IS ARRAY (0 TO 1023) OF dato; -- Array de (1dx1d)
-- En este caso, memoria no es estrictamente un array de dos dimensiones
-- (2d) sino de una dimensin por una dimensin (1dx1d)

-- A su vez, los tipos positive y natural estn predefinidos as:


TYPE integer IS RANGE -2147483647 TO 2147483647; -- Con 32 bits
SUBTYPE natural IS integer RANGE 0 TO 2147483647;
SUBTYPE positive IS integer RANGE 1 TO 2147483647;
-- Un subtipo de un tipo base (integer en este caso) es bsicamente un tipo
-- con rango restringido

Otra forma equivalente sera:


TYPE memoria IS ARRAY
(0 TO 1023) OF bit_vector (15 DOWNTO 0); -- Array de (1dx1d)

El siguiente ejemplo muestra la fijacin del rango al declarar objetos de


tipo bit_vector:
....
PORT (cod_ent: IN bit_vector (3 DOWNTO 0);
cod_sal: OUT bit_vector (3 DOWNTO 0 ));
....
UTN-FRBA - TCNICAS DIGITALES I

13

Para que el tipo memoria sea realmente de dos dimensiones, en la


definicin de tipo las dimensiones deben ser escalares:
TYPE memoria_2d IS ARRAY
(0 TO 1023, 15 DOWNTO 0) OF bit; -- Array de (2d)

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Tipos de Datos

Un objeto completo de tipo array, se referencia con el nombre


identificador del array.

Un elemento individual, se referencia con el identificador del array


seguido por los correspondientes ndices entre parntesis y
separados por comas.

Ejemplos:
Luego veremos como se declaran los objetos en VHDL, pero
supongamos que el objeto ROM1 (Read Only Memory), se declara
como tipo memoria.

Para acceder a la sexta palabra de la ROM1, indicamos:


ROM1 (5)
El ndice 0 se asocia a la primera palabra.
Para acceder al octavo bit de esa palabra a partir del LSB, indicamos:
ROM1 (5) (7)
Si ahora se declara un objeto ROM2 como tipo memoria_2d, para
acceder al mismo bit de la misma palabra, indicamos:
ROM2 (5,7)

15

Ing. Pablo Caldirola

Objetos y su Declaracin

Referencias a objetos de tipo array

UTN-FRBA - TCNICAS DIGITALES I

14

Ing. Pablo Caldirola

En VHDL, los objetos son los elementos usados para contener valores y
bsicamente hay tres clases de objetos:
Seales (incluye a los ports)
Variables
Constantes
Tanto a una seal como a una variable se les puede asignar una sucesin de
valores, mientras que a una constante se le asigna un valor por nica vez
(cuando se la declara).
Hay una diferencia fundamental entre una seal y una variable, ya que el
valor asignado a una seal no se convierte en el valor actual hasta que
transcurra cierto tiempo, mientras que el valor asignado a una variable se
convierte inmediatamente en el valor actual. Adems, las seales tienen un rol
anlogo a los cables en un circuito, pero en el sentido que las seales son los
nexos que interconectan los distintos procesos usados en la descripcin. Las
variables en cambio, no tienen ninguna vinculacin con el hardware y su
utilidad se hace importante en la descripcin por comportamiento (o
algortmica).
La visibilidad de una constante o una seal es global en todo el cdigo usado
para la descripcin mientras que, una variable tiene una visibilidad local dentro
de una parte secuencial del cdigo (PROCESS, FUNCTION o PROCEDURE) y
su valor nunca puede extraerse directamente.
UTN-FRBA - TCNICAS DIGITALES I

16

Ing. Pablo Caldirola

Objetos y su Declaracin

Objetos y su Declaracin

Forma general para declarar un objeto:

Declaracin de una constante


CONSTANT ROM_size : integer := 16#1000#; -- Tamao de la ROM en bits
CONSTANT BUS_size : integer := 16; -- Tamao del mltiple de conexin

[clase de objeto] <lista de identificadores> : (indicacin de tipo) [:=expresin] ;

CONSTANT MSB : integer := (BUS_size 1); -- Nro. de bit, del MSB


CONSTANT Z : character := Z; -- Sinnimo para el valor de alta impedancia

La clase de objeto puede ser: CONSTANT, VARIABLE o SIGNAL.

CONSTANT DEMORA : time := 10 ns; -- Un ejemplo de uso de tipo fsico

La lista de identificadores es uno o varios identificadores separados por comas.


La indicacin de tipo especifica el tipo de los objetos declarados (puede
simplemente designar un tipo o bien especificar un tipo con una restriccin

CONSTANT MASCARA : bit_vector (7 DOWNTO 0) := 11001100;

Declaracin de una seal


SIGNAL SELECT: bit_vector (1 DOWNTO 0);
SIGNAL ENABLE1, ENABLE2: bit := 0; -- Inicialmente, ambas inactivas
SIGNAL SALIDA_INT : bit_vector (7 DOWNTO 0);

Declaracin de una variable


VARIABLE CUENTA : natural := 0;
VARIABLE SAL_TEMP : bit_vector (0 TO 15);
VARIABLE CONTROL : bit_vector (3 DOWNTO 0) := (0, 1, 1, 0);

adicional - un subtipo).
El smbolo := seguido por una expresin permite opcionalmente especificar un
valor inicial por omisin (default).

UTN-FRBA - TCNICAS DIGITALES I

17

Ing. Pablo Caldirola

UTN-FRBA - TCNICAS DIGITALES I

Operadores Predefinidos y Expresiones

VHDL provee una serie de operadores predefinidos para la construccin de


expresiones que calculan valores. Se distinguen cuatro grupos de operadores:
aritmticos, relacionales, lgicos y concatenacin.

Por omisin, cada operador se puede usar con ciertos tipos de datos (el usuario
puede hacer que los operadores trabajen con cualquier tipo a travs de la
definicin de una funcin sobrecarga de los operadores).

La siguiente tabla muestra la precedencia relativa de los operadores (los


operadores que estn en la misma fila, tienen igual precedencia). En las
expresiones deben usarse parntesis para indicar el orden buscado de las
operaciones.
Precedencia
Mayor

Menor

Clase
**, ABS, NOT

Multiplicacin

*, /, MOD, REM

Signo

+, -

Adicin

+, -, &

Relacional

=, /=, <, <=, >, >=

Lgico

AND, OR, NAND, NOR, XOR, XNOR

UTN-FRBA - TCNICAS DIGITALES I

Grupo

Aritmtico
(binarios)

Aritmtico
(monarios)

Operador

Diversa

19

Lgico
(binarios)

Ing. Pablo Caldirola

Ing. Pablo Caldirola

Operadores Predefinidos

Relacional

PRECEDENCIA RELATIVA DE LOS OPERADORES

18

Lgico
(monarios)

Smbolo
+
*
/
mod
rem
**
+
abs
=
/=
<
>
<=
>=
AND
OR
NAND
NOR
XOR
XNOR
NOT

Funcin

Tipo de datos

Suma
Resta
Multiplicacin
Divisin
Mdulo
Resto
Potenciacin
Signo ms
Signo Menos
Valor absoluto
Igual
Distinto
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Funcin Y
Funcin O
Funcin NO-Y
Funcin NO-O
Funcin O Exclusiva
Funcin NO-O Exclusiva

Cualquier tipo numrico


Cualquier tipo numrico
Entero, real
Entero, real
Enteros ambos
Enteros ambos
Entero, real (exp. Entero)
Cualquier tipo numrico
Cualquier tipo numrico
Cualquier tipo numrico
Cualquier tipo, pero ambos
deben ser del mismo tipo

Complemento

dem a Lgico (binarios)

UTN-FRBA - TCNICAS DIGITALES I

20

Cualquier tipo escalar o


array unidimensional
con elementos de tipo
discreto (entero, enum.)
Tipo bit, boolean y array
unidimensional de bit o
boolean

Ing. Pablo Caldirola

Operadores Predefinidos
Grupo

Smbolo

Concatenacin

&

Desplazamiento

Funcin

Tipo de datos

Una Biblioteca VHDL es el lugar donde el sintetizador VHDL almacena


informacin de un proyecto de diseo particular, incluyendo un conjunto de
archivos usados para el anlisis, la simulacin y la sntesis del diseo.

Por omisin, la biblioteca de diseo se denomina WORK y es la nica


modificable. En ISE (Xilinx) se asigna automticamente el directorio (carpeta)
del proyecto en curso, como biblioteca WORK.

Las bibliotecas WORK y STD son siempre visibles al diseo, por lo que no es
necesario invocarlas explcitamente (STD es la biblioteca donde estn los
elementos predefinidos vistos).

Normalmente, WORK no contiene toda la informacin necesaria para un diseo


y es imprescindible recurrir a otras bibliotecas (ya sean creadas previamente
por el diseador o bien bibliotecas estndar como la IEEE).

Las bibliotecas estn organizadas en Paquetes que son archivos conteniendo


la definicin de elementos que pueden usar otras descripciones. La clase de
elementos incluidos en un paquete pueden ser: seales, tipos, constantes,
funciones, declaracin de componentes, etc.

Para usar paquetes de otras bibliotecas, tenemos que hacerlos visibles al


diseo empleando las sentencias LIBRARY y USE.

Arrays unidimensionales
del mismo tipo

Concatenacin

SLL

Desplazamiento lgico
a izquierda

SRL

Desplazamiento lgico
a derecha

SLA

Desplazamiento aritmtico
a izquierda

SRA

Desplazamiento aritmtico
a derecha

ROL

Rotacin a izquierda

ROR

Rotacin a derecha

UTN-FRBA - TCNICAS DIGITALES I

Bibliotecas (Libraries) y Paquetes (Packages)

21

El operando a la izquierda del


operador debe ser de tipo
BIT_VECTOR y el operando a
la derecha del operador debe
ser entero (admite usar + o -)

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Para simular adecuadamente el comportamiento de un circuito digital, no basta


con disponer de solo dos estados lgicos (0 y 1).

En la revisin de 1993, el IEEE introdujo el paquete STD_LOGIC_1164,


(conocido como Paquete de Lgica Multivaluada) que aplica el concepto de
fuerza lgica (la capacidad de entrega o absorcin de corriente en un nodo,
independientemente de su nivel de tensin).

El paquete STD_LOGIC_1164, define un nuevo tipo enumerado de datos,


cuyos literales, representan a nueve estados lgicos diferentes:
TYPE STD_ULOGIC IS ( -- la U es por Unresolved Lgica no resuelta
U,
-- estado no inicializado (uninitialized)
X,
-- desconocido fuerte (strong unknown)
0,
-- 0 fuerte (strong 0)
1,
-- 1 fuerte (strong 1)
Z,
-- alta impedancia (high impedance)
W,
-- desconocido dbil (weak unknown)
L,
-- 0 dbil (weak 0)
H,
-- 1 dbil (weak 1)

-- indiferente (dont care)


);
UTN-FRBA - TCNICAS DIGITALES I

23

Ing. Pablo Caldirola

Ing. Pablo Caldirola

Paquete IEEE.STD_LOGIC_1164

Paquete IEEE.STD_LOGIC_1164

22

Tambin declara el tipo STD_LOGIC, como un subtipo resuelto del tipo


STD_ULOGIC.

Como veremos luego, se requiere un tipo de dato resuelto cuando dos o ms


procesos le asignan valores simultneamente a una misma seal.

De

aqu

en

adelante,

usaremos

los

tipos

resueltos

STD_LOGIC

STD_LOGIC_VECTOR en reemplazo de los tipos BIT y BIT_VECTOR.

Para que el diseo vea el paquete STD_LOGIC_1164, se deben especificar al


comienzo del archivo de diseo (extensin .vhd), las siguientes instrucciones:
LIBRARY IEEE; -- Se invoca la biblioteca IEEE
USE IEEE.STD_LOGIC_1164.ALL;
La palabra reservada ALL, le indica al sintetizador que use todas las
definiciones incluidas en el paquete (tambin es posible indicar algn elemento
particular del paquete, pero generalmente se usa todo).

UTN-FRBA - TCNICAS DIGITALES I

24

Ing. Pablo Caldirola

Asignacin Mltiple a una Seal

Concepto de Tercer Estado Alta Impedancia (Z)


1

IN

La figura muestra la implementacin de un


Buffer Controlado, en base a conmutadores
ideales.

Cuando la seal OE (OUTPUT ENABLE) est


activada
(OE=1),
los
conmutadores
seleccionan la seal de entrada IN y, la
seal de salida OUT=IN.

E3

E2

E1

E0

I3

I2

I1

I0

O3

O2

O1

O0

HI-Z

HI-Z

HI-Z

HI-Z

HI-Z

I0

HI-Z

HI-Z

HI-Z

E0

HI-Z

HI-Z

HI-Z

I1

Cuando la seal OE est desactivada


(OE=0), los conmutadores seleccionan
C1=0
y
C2=1
dejando
a
los
conmutadores de salida en el estado de no
conduccin y la seal de salida OUT queda
en un estado que no es 0 ni 1, es decir,
adopta un tercer estado llamado de Alta
Impedancia Z.

HI-Z

HI-Z

HI-Z

E1

HI-Z

HI-Z

HI-Z

I2

HI-Z

HI-Z

HI-Z

E2

HI-Z

HI-Z

HI-Z

I3

HI-Z

HI-Z

HI-Z

E3

HI-Z

HI-Z

HI-Z

<=
<=
<=
<=

I0
I1
I2
I3

C1
0

OE

OUT
1

C2
0

OE

C1

C2

OUT

HI-Z

IN

IN

IN

IN

OUT

La figura muestra la tabla lgica de un circuito formado por cuatro buffers 3S,
con sus salidas unidas para formar un BUS de tres estados llamado O. Para que
esta conexin sea factible, solo debe estar habilitado un buffer a la vez. Se
trata de un multiplexor distribuido de cuatro canales con salida 3S.

OE

Una salida con tres estados (3S) se indica


con un tringulo invertido () dentro del
smbolo del dispositivo.

UTN-FRBA - TCNICAS DIGITALES I

25

O
O
O
O

Z;
Z;
Z;
Z;

O1

O2
O3

En la descripcin VHDL se presenta un conflicto,


ya que deben hacerse cuatro asignaciones de
procesos concurrentes sobre la misma seal de
salida O. La nica forma de lograrlo, es
declarando a la seal O de tipo STD_LOGIC (un
tipo resuelto)
26

Ing. Pablo Caldirola

Funciones de Conversin

(ver el archivo: ..\xilinx\11.1\ise\vhdl\src\ieee\std_logic_1164.vhd)


U

Z
W

27

ELSE
ELSE
ELSE
ELSE

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Como se anticip, el paquete STD_LOGIC_1164 define el tipo de datos


STD_ULOGIC con nueve literales, asociados cada uno a un estado lgico
diferente. Las seales declaradas con este tipo, son no resueltas (no admiten
asignacin mltiple).
El tipo de datos STD_LOGIC es un subtipo del tipo STD_ULOGIC, que incluye la
Funcin de Resolucin resolved.
Las seales declaradas como STD_LOGIC son resueltas y, admiten ms de una
asignacin concurrente (mltiples drivers).
En caso de conflicto por asignacin mltiple a una seal, la Funcin de
Resolucin FUNCTION resolved aplica la siguiente Tabla de Resolucin:

UTN-FRBA - TCNICAS DIGITALES I

E0=1
E1=1
E2=1
E3=1

Esto no puede sintetizarse


dentro de un CPLD o FPGA !!

Seales Resueltas (Funcin de Resolucin)

WHEN
WHEN
WHEN
WHEN

O0

Ing. Pablo Caldirola

VHDL es un lenguaje que est fuertemente orientado al tipo de datos.


El lenguaje provee la posibilidad de convertir un tipo de seal en otro. Sin
embargo, es recomendable siempre que sea posible trabajar con un mismo
tipo de datos.
El paquete IEEE.STD_LOGIC_1164 tiene integradas varias de estas Funciones
de Conversin, pero no incluye a todas las que podran ser tiles.
Frecuentemente se necesita hacer la conversin desde el tipo
STD_LOGIC_VECTOR a su correspondiente valor entero y viceversa; estas
funciones no estn incluidas en IEEE.STD_LOGIC_1164.
La biblioteca IEEE tiene paquetes adicionales (IEEE.STD_LOGIC_UNSIGNED e
IEEE.STD_LOGIC_SIGNED) para poder hacer operaciones aritmticas con
objetos de tipo STD_LOGIC_VECTOR.
Por ejemplo, la funcin de conversin CONV_INTEGER definida en el paquete
IEEE.STD_LOGIC_UNSIGNED, usando como argumento un objeto de tipo
STD_LOGIC_VECTOR, devuelve el valor de la magnitud del mismo.
Para poder usar esta funcin de conversin, debe hacerse visible al diseo el
paquete requerido, con la clusula USE.
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
Actualmente el IEEE aconseja usar el paquete IEEE.NUMERIC_STD en lugar
de los mencionados, en el que se definen dos nuevos tipos de datos (SIGNED Y
UNSIGNED).
UTN-FRBA - TCNICAS DIGITALES I

28

Ing. Pablo Caldirola

Paquetes Numricos

Conversin de Tipos

IEEE.STD_LOGIC_UNSIGNED
Contiene un conjunto de funciones aritmticas, de conversin y comparacin
para objetos de tipo STD_LOGIC_VECTOR (considerados como nmeros sin
signo magnitudes) y entre estos y magnitudes constantes.
IEEE.STD_LOGIC_SIGNED
Es similar al anterior para objetos de tipo STD_LOGIC_VECTOR considerados
como nmeros con signo en cdigo de complemento a 2.
IEEE.STD_LOGIC_ARITH
Dispone bsicamente de las mismas funciones que los anteriores pero
extendidas a operandos de tipo mixto (signed y unsigned definidos en el
mismo paquete).
IEEE.NUMERIC_STD (Normalizado)
En contenido es similar al STD_LOGIC_ARITH, la diferencia radica en que
NUMERIC_STD est normalizado por el IEEE. Define los tipos:
TYPE UNSIGNED IS ARRAY (NATURAL range <>) OF STD_LOGIC;
TYPE SIGNED IS ARRAY (NATURAL range <>) OF STD_LOGIC;
En valores de estos tipos, el MSB corresponde siempre al limite izquierdo del
rango especificado en la declaracin del array.
De aqu en ms, siempre usaremos este paquete cuando se necesiten realizar
operaciones aritmticas o relacionales. Se lo hace visible al diseo con:
LIBRARY IEEE;
USE IEEE.NUMERIC_STD.ALL;
UTN-FRBA - TCNICAS DIGITALES I

29

Ing. Pablo Caldirola

En trminos generales, en VHDL no se pueden asignar valores entre objetos de


diferente
tipo.
Sin
embargo,
en
los
paquetes
normalizados
(IEEE.STD_LOGIC_1164 e IEEE.NUMERIC_STD) se incluyen varias funciones
de conversin para facilitar las descripciones.
Clases de conversin de tipos
Explcita
Es cuando se invoca el uso de alguna funcin de conversin incluida en el
paquete declarado. Por ejemplo (para el IEEE.NUMERIC_STD.ALL):
FUNCTION TO_INTEGER(arg: UNSIGNED) RETURN NATURAL;
Implcita (Casting)
Es cuando no se requiere de una funcin de conversin por tratarse de
tipos de datos prximos, ya sea porque proceden del mismo tipo base
(subtipo) o son arrays del mismo tamao, cuyos elementos tienen el
mismo tipo base (por ej.: STD_LOGIC) y los ndices tienen el mismo tipo
base (por ej.: INTEGER). Por ejemplo (para el IEEE.NUMERIC_STD.ALL):
Si las seales A y B son vectores del mismo tamao (igual cantidad de
elementos), pero A es de tipo STD_LOGIC_VECTOR y B es de tipo
UNSIGNED (ambos definidos para el mismo tipo base STD_LOGIC), se
puede hacer la siguiente asignacin:
A <= STD_LOGIC_VECTOR(B); -- El tipo UNSIGNED se amolda al tipo
-- STD_LOGIC_VECTOR
UTN-FRBA - TCNICAS DIGITALES I

30

Ing. Pablo Caldirola

Paquete IEEE.NUMERIC_STD
Conversiones de Tipo Disponibles
U

TO_UNSIGNED(+I,N)

UNSIGNED

STD_LOGIC_VECTOR(U)

UNSIGNED(V)

TO_INTEGER(U)

Instrucciones - Sintaxis
I

UNSIGNED(S)

SIGNED(U)

INTEGER

TO_SIGNED(I,N)

TO_INTEGER(S)

V
STD_LOGIC_VECTOR

STD_LOGIC_VECTOR(S)

SIGNED(V)

SIGNED

Ref.:
+I=Natural
N= Cantidad de bits

UTN-FRBA - TCNICAS DIGITALES I

LIBRARY IEEE;
USE IEEE.NUMERIC_STD.ALL;

31

Ing. Pablo Caldirola

Declaracin de Entidad (ENTITY)

Sintaxis bsica
ENTITY nombre_entidad IS
PORT (nombres_seal : modo
nombres_seal : modo
.....
nombres_seal : modo
END ENTITY nombre_entidad;

tipo_seal);

33

Declaracin de ENTITY incluyendo GENERIC


ENTITY nombre_entidad IS -- GENERIC antes de PORT!!
GENERIC (nombres_constante : tipo_constante [:= valor_inicial];
nombres_constante : tipo_constante [:= valor_inicial];
.....
nombres_constante : tipo_constante [:= valor_inicial]);

tipo_seal;
tipo_seal;

Donde:
nombre_entidad: es el identificador elegido para dar nombre a la entidad.
nombres_seal: es una lista separada por comas de uno o ms
identificadores elegidos para dar nombre a las seales de interfaz externa.
modo: es una de cuatro palabras reservadas que indican la direccin de la
seal:

IN La seal es una entrada a la entidad.

OUT La seal es una salida de la entidad (su valor no se puede leer


dentro de la arquitectura de la entidad, pero s por otras entidades que la
usen).

BUFFER La seal es una salida de la entidad y su valor se puede leer


dentro de la arquitectura de la entidad (no se recomienda su utilizacin).

INOUT La seal se puede usar como una entrada o una salida de la


entidad (se usa generalmente para terminales bidireccionales de tres
estados).
tipo_seal: un tipo de seal incorporado o bien, uno definido por el usuario.
UTN-FRBA - TCNICAS DIGITALES I

Declaracin de Entidad (ENTITY)

Ing. Pablo Caldirola

PORT (nombres_seal : modo


nombres_seal : modo
.....
nombres_seal : modo
END ENTITY nombre_entidad;

tipo_seal;
tipo_seal;
tipo_seal);

La clusula GENERIC permite incluir parmetros constantes genricos dentro


de una entidad. Los parmetros genricos son tiles ya que en conjuncin con
la sentencia GENERATE permiten el modelado de estructuras regulares de
cualquier tamao (modelos parametrizados) usando rangos genricos. Los
genricos tambin pueden usarse para dimensionar arrays y parametrizar
demoras (tpLH, tpHL, etc.) para realizar simulaciones.
Nota: En Descripciones Estructurales, el uso de GENERIC permite declarar y
especificar parmetros constantes para la descripcin de un circuito, cuyos
valores se pueden sobrescribir al instanciar (invocar) el circuito como un
componente dentro de un diseo jerrquico.
UTN-FRBA - TCNICAS DIGITALES I

34

Ing. Pablo Caldirola

Definicin de Arquitectura (ARCHITECTURE)

Sintaxis
ARCHITECTURE nombre_arquitectura OF nombre_entidad IS
declaracin de tipos
declaracin de seales
declaracin de constantes
[definicin de funciones]
[definicin de procedimientos]
declaracin de componentes

Flujo de Datos

BEGIN

sentencia concurrente
sentencia concurrente
....
sentencia concurrente

END ARCHITECTURE nombre_arquitectura;


Donde:
nombre_arquitectura: es el identificador elegido para dar nombre a la
arquitectura (puede o no ser el mismo que el de la entidad).
nombre_entidad: debe ser el mismo que el dado previamente en la
declaracin de entidad.
La arquitectura hereda las seales de interfaz externa a partir de la declaracin
de port hecha en la declaracin de entidad.
Una arquitectura tambin puede incluir declaraciones de seales, tipos, etc.,
que son locales a esa arquitectura (no son vistas por otras entidades).
UTN-FRBA - TCNICAS DIGITALES I

35

Ing. Pablo Caldirola

Sentencias Concurrentes

Elementos de Diseo Flujo de Datos

Elementos de Diseo Flujo de Datos

Sentencia de Asignacin a Seal Concurrente

Sentencia de Asignacin a Seal Condicional


Sintaxis:

Sintaxis:

nombre de seal <= expresin WHEN exp_booleana ELSE

nombre de seal <= expresin;

expresin WHEN exp_booleana ELSE


....

En la sintaxis, se interpreta que nombre de seal adquiere expresin.

expresin WHEN exp_booleana ELSE

El tipo usado para expresin debe ser compatible con el de nombre de seal (o
bien son del mismo tipo o el tipo de expresin es un subtipo de nombre de
seal).

expresin;
En la sentencia, se verifica cada expresin booleana en el orden que fueron
escritas despus de cada clusula WHEN. La asignacin se realiza para la
primera de ellas que se haga verdadera (con lo cual, todas las anteriores
fueron falsas) y las siguientes clusulas WHEN no afectan el valor de la seal
asignada.
Note que la asignacin obedece a la jerarqua dada a expresin booleana.
Adems, las expresiones booleanas no deben ser mutuamente exclusivas, ya
que se impone una prioridad a cada una de ellas.
La ltima expresin (sin WHEN) debe incluir el resto de las expresiones
booleanas que no fueron cubiertas.

UTN-FRBA - TCNICAS DIGITALES I

37

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Elementos de Diseo Flujo de Datos

Sintaxis:
WITH expresin SELECT
nombre de seal <= valor de seal WHEN opciones,
valor de seal WHEN opciones,
....
valor de seal WHEN opciones;
Se evala la expresin dada y cuando el valor iguala a una de las opciones, se
asigna el valor de seal correspondiente a nombre de seal.
Las opciones en cada clusula WHEN pueden ser un nico valor de expresin
o una lista de valores separados por barras verticales (|).
Las opciones para la sentencia completa deben ser mutuamente exclusivas y
todas inclusivas.
Se debe usar la palabra reservada OTHERS en la ltima clusula WHEN, para
indicar todos los valores de expresin que no hayan sido cubiertos.

UTN-FRBA - TCNICAS DIGITALES I

39

Ing. Pablo Caldirola

Ing. Pablo Caldirola

Elementos de Diseo Flujo de Datos

Sentencia de Asignacin a Seal Seleccionada

38

Sentencia GENERATE
Muchos circuitos tiles se pueden describir repitiendo un nmero dado de
veces una o varias expresiones lgicas, dada su Estructura Regular.
En VHDL, la sentencia concurrente GENERATE permite describir estructuras
regulares y consiste de un esquema de generacin que abarca a un conjunto
de sentencias concurrentes.
Sintaxis general:
Etiqueta: -- Es obligatoria !!
esquema_generacin GENERATE
sentencia concurrente;
....
sentencia concurrente;
END GENERATE [Etiqueta]; -- Aqu la etiqueta es opcional
Donde:
esquema_generacin: puede ser un esquema_FOR para ejecucin repetida o
un esquema_IF para ejecucin condicional del conjunto de sentencias
concurrentes que abarca.
Nota : Ms adelante veremos que estas estructuras regulares se pueden
describir con el Estilo Estructural, instanciando (invocando) una cantidad de
veces el mismo componente, conectado segn un patrn regular.
UTN-FRBA - TCNICAS DIGITALES I

40

Ing. Pablo Caldirola

Elementos de Diseo Flujo de Datos

Elementos de Diseo Flujo de Datos

Sentencia FOR .. IN .. GENERATE


Sintaxis:
Etiqueta: -- Es obligatoria !!
FOR identificador IN rango GENERATE
sentencia concurrente;
....
sentencia concurrente;
END GENERATE [Etiqueta]; -- Aqu la etiqueta es opcional
Donde:
identificador: es un parmetro que acta como una constante (en el sentido
de que su valor puede ser ledo pero no puede ser asignado). Adems, el
parmetro no est definido fuera de la sentencia GENERATE. El identificador
no tiene que ser declarado (est implcitamente declarado en la sentencia
GENERATE con un tipo compatible al usado en rango).
rango: es un rango discreto esttico.

Donde:
exp_booleana: Combina trminos booleanos individuales mediante los
operadores booleanos integrados de VHDL (AND, OR, NOT, etc.). Los
trminos booleanos pueden ser variables booleanas o resultados de
comparaciones usando los operadores relacionales =, /=, >, >=, < y <=.
Si exp_booleana es verdadera (true) se ejecuta el bloque de sentencias
concurrentes, si es falsa no.

Nota: No hay sentencias concurrentes anlogas a las sentencias secuenciales


EXIT y NEXT (ver ms adelante), por lo que la sentencia concurrente GENERATE
con un esquema_FOR siempre iterar para todos los valores del rango discreto.

UTN-FRBA - TCNICAS DIGITALES I

41

Sentencia IF .. GENERATE
Las estructuras regulares casi siempre presentan alguna irregularidad en sus
extremos. La sentencia IF .. GENERATE permite manejar convenientemente
estas irregularidades.
Sintaxis:
Etiqueta: -- Es obligatoria !!
IF exp_booleana GENERATE
sentencia concurrente;
....
sentencia concurrente;
END GENERATE [Etiqueta]; -- Aqu la etiqueta es opcional

Nota: A diferencia de la sentencia secuencial IF (ver ms adelante), la sentencia


IF .. GENERATE no puede tener derivaciones ELSE o ELSIF.
UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

42

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

Comportamiento
Sentencias Secuenciales

Sentencia PROCESS
Sintaxis
[Etiqueta_Process:] -- Es opcional
PROCESS (nombre_seal, nombre_seal, . . . nombre_seal)
Declaracin de tipos
Declaracin de variables -- No se pueden declarar seales !!
Declaracin de constantes
[Definicin de funciones]
[Definicin de procedimientos]
BEGIN
sentencia secuencial;
....
sentencia secuencial;
END PROCESS [Etiqueta_Process];
Es fundamental para la descripcin por comportamiento de Sistemas Digitales
Secuenciales, los que no pueden describirse usando sentencias concurrentes.

Un proceso es una coleccin de sentencias secuenciales que en la simulacin,


se ejecuta en paralelo con otras sentencias concurrentes y otros procesos.

Permite especificar complejas interacciones de seales y eventos que se


ejecutan en un tiempo de simulacin prcticamente nulo, originando un
circuito sintetizado (combinacional o secuencial) que realiza la operacin
modelada.
UTN-FRBA - TCNICAS DIGITALES I

44

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

La sentencia PROCESS se puede usar en cualquier parte que pueda emplearse


una instruccin concurrente.
La sentencia PROCESS puede ver los tipos, constantes, seales, etc.
declarados en la Arquitectura de la que forma parte; sin embargo tambin se
pueden definir tipos, constantes, variables, etc. (excepto seales) que sean
locales al proceso.
En cada instante durante la simulacin, un proceso puede estar en ejecucin
(running) o suspendido.
La lista de seales en la definicin de PROCESS, es la lista de sensibilidad y
determina cuando se ejecuta el proceso.
Inicialmente el proceso est suspendido, pero cuando cualquier seal de su
lista de sensibilidad cambia de valor (evento), se reanuda la ejecucin
comenzando con su primera sentencia secuencial y hasta el final del proceso.
Si cualquier seal en la lista de sensibilidad tiene un evento como resultado de
la ejecucin del proceso, ste se ejecuta nuevamente. Esta operacin contina
hasta que el proceso se ejecuta sin eventos en las seales de su lista de
sensibilidad (todo esto ocurre en un tiempo de simulacin nulo).
En VHDL hay varios tipos de sentencias secuenciales que veremos en algunos
ejemplos; la primera es la sentencia secuencial de asignacin a seal :

Elementos de Diseo Descripcin por Comportamiento

nombre_seal <= expresin;


La sintaxis es igual a la de asignacin concurrente, pero sta se aplica dentro
de un Proceso, con lo cual la asignacin se realiza en el orden dado.
UTN-FRBA - TCNICAS DIGITALES I

45

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

La primera forma de la sentencia WAIT da lugar a que un proceso se


suspenda indefinidamente es decir, una vez alcanzada la sentencia WAIT el
proceso no se activar nuevamente durante la simulacin.

Sintaxis 1
[Etiqueta_Wait:] -- Es opcional
WAIT;

Sintaxis 2
[Etiqueta_Wait:] -- Es opcional
WAIT ON (nombre_seal, nombre_seal, . . . , nombre_seal,);

Sintaxis 3
[Etiqueta_Wait:] -- Es opcional
WAIT UNTIL condicin;

Sintaxis 4
[Etiqueta_Wait:] -- Es opcional
WAIT FOR expresin de tiempo;

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Sentencia LOOP (Lazo infinito)


Es una sentencia de control iterativo, que permite ejecutar una o varias
instrucciones de asignacin secuencial en forma indefinida, dentro de una
construccin secuencial (PROCESS).
Sintaxis

sensibilidad del proceso, as cada vez que ocurra un evento en una seal a la

[Etiqueta:] -- Es opcional

cual el proceso es sensible, ste se reactivar.

LOOP

La tercera forma especifica una condicin que debe ser verdadera (true) antes

46

Elementos de Diseo Descripcin por Comportamiento

La segunda forma incluye una lista de seales que sern los canales de

que el proceso pueda reactivarse.

Sentencia WAIT
En la sentencia PROCESS, la lista de sensibilidad es opcional. En caso de no
existir esta lista de seales, el proceso se ejecutara una y otra vez durante la
simulacin. En esas condiciones, la sentencia WAIT permite controlar la
ejecucin de un proceso.
La sentencia tiene cuatro formas posibles y tres de ellas incluyen condiciones
que permiten establecer cuando se reactiva un proceso y, pueden emplearse
por separado o combinadas para obtener el resultado buscado.

sentencia secuencial;
....

Para interrumpir el lazo debe usarse


alguna forma de la clusula EXIT.

sentencia secuencial;

En la cuarta forma se proporciona un tiempo de demora mximo durante el

END LOOP [Etiqueta];

cual el proceso permanece suspendido; transcurrida dicha demora, se reanuda


Nota: Tiene aplicacin en test bench para generar una seal peridica.

la ejecucin del proceso.

Si la sentencia PROCESS tiene especificada una lista de sensibilidad, no se


puede usar la sentencia WAIT en ninguna de sus formas dentro del proceso.

UTN-FRBA - TCNICAS DIGITALES I

47

Ing. Pablo Caldirola

UTN-FRBA - TCNICAS DIGITALES I

48

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

Elementos de Diseo Descripcin por Comportamiento

Sentencia WHILE .. LOOP


Es una sentencia de control iterativo, que permite ejecutar una o varias
instrucciones de asignacin secuencial siempre que se cumpla una condicin,
dentro de una construccin secuencial (PROCESS).
Sintaxis
[Etiqueta:] -- Es opcional
WHILE exp_booleana LOOP
sentencia secuencial;
....
sentencia secuencial;
END LOOP [Etiqueta];
Antes de cada iteracin, se evala exp_booleana; el lazo solo se ejecuta si el
valor de exp_booleana es verdadero (true), si es falso se sale del lazo.

Sentencia FOR .. IN .. LOOP


Es una sentencia de control iterativo, que permite ejecutar una o varias
instrucciones de asignacin secuencial una cantidad determinada de veces,
dentro de una construccin secuencial (PROCESS).
Sintaxis
[Etiqueta:] -- Es opcional
FOR identificador IN rango LOOP
sentencia secuencial;
....
sentencia secuencial;
END LOOP [Etiqueta];
Donde:
identificador: es un parmetro discreto (enumerado o entero) que no
necesita ser declarado; la sentencia LOOP incluye una declaracin implcita
para el mismo con un tipo compatible al usado en rango. Este parmetro
cambia su valor en una unidad por cada ejecucin del lazo dentro del rango
especificado (de izquierda a derecha) y puede usarse dentro de las sentencias
secuenciales incluidas en el lazo.
rango: puede ser cualquier rango discreto.

Nota: FOR .. IN .. LOOP es similar a FOR .. IN .. GENERATE, pero la segunda permite


ejecutar una o varias instrucciones de asignacin concurrente una cantidad dada de
veces, dentro de una construccin concurrente.
UTN-FRBA - TCNICAS DIGITALES I

49

Elementos de Diseo Descripcin por Comportamiento

Sentencia EXIT dentro de LOOP (en cualquiera de sus formas)


La sentencia tiene dos formatos generales y permite abandonar la ejecucin de
un lazo antes de su finalizacin.

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Sentencia NEXT dentro de LOOP (en cualquiera de sus formas)


La sentencia tiene dos formatos generales y permite saltar hasta la siguiente
iteracin dentro de un lazo, alterando la secuencia de ejecucin.

EXIT [Etiqueta_loop];
Cuando se ejecuta la sentencia, sta transfiere el control a la sentencia que
est
inmediatamente
despus
de
END
LOOP,
interrumpiendo
incondicionalmente el lazo.

EXIT [Etiqueta_loop] WHEN exp_booleana;

Sintaxis 1
NEXT [Etiqueta_loop];

Cuando se ejecuta la sentencia, sta transfiere el control al final del lazo


indicado opcionalmente en [Etiqueta_loop], y el lazo comienza la siguiente
iteracin, alterndose incondicionalmente la secuencia de ejecucin.

Sintaxis 2

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

Sintaxis 1

50

Sintaxis 2
NEXT [Etiqueta_loop] WHEN exp_booleana;

La sentencia se ejecuta solo si exp_booleana es verdadera (true) y, en ese


caso se transfiere el control a la sentencia que est inmediatamente despus
de END LOOP, interrumpiendo condicionalmente el lazo.

La sentencia se ejecuta solo si exp_booleana es verdadera (true) y, en ese


caso se transfiere el control al final del lazo indicado opcionalmente en
[Etiqueta_loop], y el lazo inicia la siguiente iteracin, alterndose
condicionalmente la secuencia de ejecucin.

En ambos casos, [Etiqueta_loop] es opcional, pero en caso de lazos anidados


permite indicar de cual de los lazos (debidamente etiquetados) se debe salir.

En ambos casos, [Etiqueta_loop] es opcional, pero en caso de lazos anidados


permite indicar a cual de los lazos (debidamente etiquetados) se debe saltar.

UTN-FRBA - TCNICAS DIGITALES I

51

Ing. Pablo Caldirola

UTN-FRBA - TCNICAS DIGITALES I

52

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

Elementos de Diseo Descripcin por Comportamiento

Sentencia IF
Sintaxis

IF exp_booleana THEN
sentencias secuenciales;
Las exp_booleanas no tienen que ser
ELSIF exp_booleana THEN
mutuamante exclusivas (es decir, varias
pueden ser verdaderas simultneamente),
sentencias secuenciales;
pero solo se ejecutarn las sentencias
....
secuenciales de la primera exp_booleana
ELSIF exp_booleana THEN
que resulte verdadera.
sentencias secuenciales;
ELSE
sentencias secuenciales; -- Por omisin
END IF;

IF exp_booleana THEN
sentencias secuenciales;
ELSE
sentencias secuenciales;
END IF;

Se trata de una sentencia condicional secuencial.

Se evala la expresin booleana y si el valor de la expresin es verdadero


(true), se ejecuta una lista de una o ms sentencias secuenciales; en caso
contrario (false), se ejecuta otra lista de sentencias secuenciales.

Si se la compara con la sentencia condicional concurrente (WHEN .. ELSE), IF


permite ejecutar ms de una sentencia para una u otra condicin de
exp_ booleana.

La sintaxis en su forma ms simple, omite ELSE.

UTN-FRBA - TCNICAS DIGITALES I

53

Ing. Pablo Caldirola

Sentencia IF anidada
Sintaxis

La clusula secuencial ELSIF


se ejecuta si su expresin booleana es
verdadera y todas las expresiones booleanas anteriores fueron falsas. Se
establece cuales sentencias se ejecutarn en base a la jerarqua otorgada a
cada exp_booleana.

La ltima clusula secuencial ELSE se ejecuta si todas las expresiones


booleanas precedentes fueron falsas y siempre hay que indicar las sentencias
que deben ejecutarse bajo esa condicin (sentencias por omisin).

UTN-FRBA - TCNICAS DIGITALES I

54

Ing. Pablo Caldirola

Elementos de Diseo Descripcin por Comportamiento

Sentencia CASE
Sintaxis

Las opciones deben ser mutuamante


exclusivas y todas inclusivas.
CASE expresin IS
WHEN opciones => sentencias secuenciales;
....
WHEN opciones => sentencias secuenciales;
WHEN OTHERS => sentencias secuenciales; -- Por omisin
END CASE;

Se trata de una sentencia de seleccin secuencial.


La sentencia evala la expresin dada, encuentra un valor igual en una de las
opciones y ejecuta las sentencias secuenciales correspondientes.
Las opciones pueden ser una sola o varias separadas por barras verticales (|).
Adems, las opciones deben ser mutuamente exclusivas (no puede haber dos
o ms opciones iguales) e incluir todos los valores del tipo de expresin.
Si no se conocen a priori todas las opciones posibles de expresin, se debe
usar la clusula OTHERS como ltima opcin para sealar todos los valores
que an no fueron cubiertos y as ejecutar el grupo de sentencias secuenciales
por omisin.
Si se la compara con la sentencia de seleccin concurrente (WITH .. SELECT),
CASE permite ejecutar ms de una sentencia para las opciones indicadas.
UTN-FRBA - TCNICAS DIGITALES I

55

Ing. Pablo Caldirola

Estructural
Sentencias de Declaracin e
Instanciacin de Componentes

Elementos de Diseo Descripcin Estructural

Elementos de Diseo Descripcin Estructural

Sentencia COMPONENT
Sintaxis de Declaracin: (dentro del cuerpo de la arquitectura y antes de BEGIN)

El nombre del componente es el nombre de una entidad definida previamente,


que va a emplearse (instanciarse) dentro de la arquitectura actual.
Se crea una ocurrencia (instancia) de la entidad especificada, por cada
sentencia de instanciacin de componente que invoca su nombre.

COMPONENT nombre_componente IS
PORT (nombre_seal : modo tipo_seal;
nombre_seal : modo tipo_seal;
....
nombre_seal : modo tipo_seal);
END COMPONENT nombre_componente;

A cada ocurrencia se le asigna un nico rtulo o etiqueta.


La sentencia PORT MAP introduce una lista que asocia los ports de la entidad
designada (el componente) con las seales de la arquitectura actual (cada
identificador formal del componente se asocia al correspondiente identificador
local de la arquitectura).

Sintaxis de Instanciacin - o invocacin del componente: (despus de BEGIN)

En el estilo posicional, las seales se asocian con el mismo orden que aparecen
en la declaracin del componente.

Estilo posicional:
Etiqueta: nombre_componente PORT MAP (seal1, seal2, .. ,sealm);

En el estilo explcito (recomendado), cada uno de los ports del componente se


conecta a una seal mediante el smbolo =>. En este caso, la asociacin puede

Estilo explcito:
Etiqueta: nombre_componente PORT MAP (port1=>seal1, .. ,portm=>sealm);
UTN-FRBA - TCNICAS DIGITALES I

57

hacerse en cualquier orden.

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Elementos de Diseo Descripcin Estructural


declarar (sentencia COMPONENT) en la parte de declaracin de la arquitectura

En una revisin de la norma IEEE, se incorpor una forma ms simple de


instanciar componentes sin necesidad de declararlos dentro del cuerpo de la
arquitectura, es decir, sin usar la clusula COMPONENT.

La sintaxis de instanciacin (despus de BEGIN) es:

parte de declaracin de ports de una entidad.


Si se busca instanciar un componente parametrizado (su entidad define
parmetros genricos con GENERIC), se debe anteponer al PORT MAP la

Ing. Pablo Caldirola

Elementos de Diseo Descripcin Estructural


Otra Forma de Instanciar Componentes (VHDL 93)

Antes de invocar a un componente dentro de la arquitectura, se lo debe


(antes de BEGIN). La sintaxis de declaracin de un componente es similar a la

58

Estilo explcito:

sentencia GENERIC MAP donde se asignan valores a los parmetros


(sobrescribiendo si existieran - los valores indicados por omisin, en la
declaracin de entidad del componente).

Etiqueta: ENTITY nombre_biblioteca . nombre_entidad (nombre_arquitectura)


PORT MAP (port1=>seal1, .. ,portm=>sealm);

Los componentes usados en una arquitectura pueden ser los que fueron
definidos previamente como parte de un diseo o bien pueden ser parte de una
Biblioteca de Componentes.

Donde:
nombre_biblioteca es la biblioteca donde reside el componente a instanciar.
En general se usa la biblioteca por omisin donde estn guardadas la entidad y
la arquitectura del componente, cuyo nombre es work.
nombre_entidad es el nombre de la entidad del componente a instanciar.
nombre_arquitectura es el nombre de la arquitectura del componente a
instanciar.

UTN-FRBA - TCNICAS DIGITALES I

59

Ing. Pablo Caldirola

UTN-FRBA - TCNICAS DIGITALES I

60

Ing. Pablo Caldirola

Ejecucin Concurrente

En los lenguajes de alto nivel para software, las sentencias se ejecutan en


secuencia y en el orden en que estn escritas (Ej.: C, C++, etc.).

Dado que en un circuito, todas sus partes estn activas simultneamente


interactuando entre s, un lenguaje de alto nivel para software no permite
describir su comportamiento real durante la simulacin.

Un lenguaje de alto nivel para hardware debe poder ejecutar sentencias


(procesos) en forma concurrente (simultnea) sin importar el orden en que
estn escritas, a fin de describir el comportamiento durante la simulacin.

Si el hardware es discreto (digital) los simuladores (VHDL Verilog) funcionan


en base a colas de eventos discretos a fin de poder manejar la ejecucin
concurrente; es decir, el avance del tiempo de simulacin y la evolucin del
modelo dependen de los eventos que se generan en las seales (una seal
tiene un evento, cuando cambia su valor).

Apndice
Ejecucin Concurrente
en la Simulacin

UTN-FRBA - TCNICAS DIGITALES I

Ing. Pablo Caldirola

Ejecucin Concurrente

Ejecucin Concurrente

62

En VHDL, una seal es un objeto de datos que tiene asociada una fuente
(driver) a saber, una lista de pares [valor, tiempo] ordenados por el
componente tiempo. As, el driver representa los valores que tomar la seal
en diferentes instantes. Cada par ordenado constituye una transaccin. La
siguiente figura ilustra el concepto de seal.

La instruccin bsica de la ejecucin concurrente, es la asignacin entre


seales, gobernada por el smbolo <=. Una sentencia de asignacin a seal es
sensible a los cambios en cualquiera de las seales que estn a la derecha del
smbolo <=, y slo se ejecuta si hay eventos en dichas seales. Por ejemplo,
si A, B e Y son seales, la siguiente sentencia es un proceso concurrente:

Valor actual

Y <= (A AND B) AFTER 5 nS;

seal
... <= ... seal ...
... := ... seal ...

t0

t1

t2

...

tn

V0

V1

V2

...

Vn

que se ejecutar siempre que A y/o B cambien (por accin de otro proceso o
por ser seales de entrada de control del circuito).

seal <= ...

driver
PROCESOS FUENTE

PROCESOS DESTINO

Los diferentes procesos empleados en una descripcin o programa VHDL se


comunican a travs de las seales. Cada proceso proyecta los valores para las
seales usando la sentencia de asignacin a seal.

En la asignacin anterior, la palabra reservada AFTER permite incluir una


demora inercial de 5 nS en la seal asignada Y. Es decir, si hay un evento en A
en el instante t0, en el driver de Y se proyecta una actualizacin en (t0+5 nS),
siempre que en ese lapso no ocurra otro evento en A, en cuyo caso la demora
ser ignorada (transaccin eliminada).

Valores proyectados

Una cola de eventos es un conjunto de pares [valor, tiempo] que se


implementa inicialmente a partir de los drivers de todas las seales del diseo,
al comienzo de la simulacin. El ncleo (kernel) de simulacin analiza en cada
instante de simulacin las seales que deben ser actualizadas (las que
experimentaron eventos), y proyecta (schedule) los nuevos pares [valor,
tiempo] generados por las asignaciones actuales.

UTN-FRBA - TCNICAS DIGITALES I

63

Ing. Pablo Caldirola

UTN-FRBA - TCNICAS DIGITALES I

64

Ing. Pablo Caldirola

Ejecucin Concurrente

Si no existiera la demora cmo hace el simulador para respetar la secuencia


de eventos en todas las seales?.

El siguiente ejemplo, muestra cmo interviene en la simulacin.


Cronograma para B=1 y C=0
A

Cola de eventos
Retardo (delta delay) entre la asignacin de un valor a una seal y su
actualizacin en un instante de tiempo real de simulacin.

El simulador VHDL divide el tiempo en intervalos muy pequeos (del orden de


femtosegundos (10-15 seg) permitiendo una alta resolucin en el tiempo de
simulacin. El delta delay () es una cantidad infinitesimalmente pequea de
tiempo de simulacin.

UTN-FRBA - TCNICAS DIGITALES I

65

Ing. Pablo Caldirola

Ejecucin Concurrente

El lenguaje introduce dos elementos fundamentales para la actualizacin de las


seales y la ejecucin de procesos, a saber:

Ejecucin Concurrente

Las tres sentencias son concurrentes (se ejecutan simultneamente). Cuando


hay un evento en alguna de las seales de entrada, el simulador las ejecuta en
base a los sucesos producidos en las seales, y no avanza el tiempo de
simulacin hasta que todos los eventos se hayan resuelto.
Si el tiempo de simulacin avanza en incrementos de 1 nS y en el instante 15
nS las entradas cambian de ABC=110 a ABC=010, hay un suceso en A que
pasa de 10 y se ejecuta la sentencia 1) proyectndose el par [1,(15+)] en
el driver de la seal F1 (F1 pasa de 01 en el instante (15+)); las sentencias
2) y 3) no se ejecutan pues no son sensibles a A. Una vez que el simulador
actualiza todos eventos en el instante 15 nS, avanza la simulacin hasta el
instante (15+) donde se produce el evento en F1, que provoca la ejecucin de
la

sentencia

2),

proyectando

el

driver

de

F2

con

[1,(15+2)].

Este

procedimiento se repite hasta que se hayan resuelto todos los eventos,


consumiendo todos los retardos necesarios, pero el simulador no avanzar el
tiempo real de simulacin mientras queden eventos por resolver.

UTN-FRBA - TCNICAS DIGITALES I

67

Ing. Pablo Caldirola

F1

F1

F2

B=1
C=0

F3
F2

F3
15 nS

(15+) (15+2) (15+3)

16nS

Bsicamente hay tres sentencias de asignacin:


1) F1 <= NOT A;
2) F2 <= F1 AND B;
3) F3 <= F2 OR C;
UTN-FRBA - TCNICAS DIGITALES I

66

Ing. Pablo Caldirola

Vous aimerez peut-être aussi