Académique Documents
Professionnel Documents
Culture Documents
VHDL
Introduccin al Lxico y la
Sintaxis del Lenguaje
<
>
**
=>
:=
/=
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
P
package
port
postponed
procedural
procedure
process
protected
pure
&
--
A
abs
access
after
alias
all
and
architecture
array
assert
attribute
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
985327
10E3
16#B5#
8#265#
2#1011_0101#
1768953.207692
1_768_953.207_692
8#25.3#e+2
25.3E-2
Literales
5TG$#&(=)+;|?
B1011_0110
XFf
Xe7
O7320
10.5 seg
22 Kohm
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.
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.
Tipos de Datos
Tipos de Datos
Tipos de Datos
Tipos de Datos
10
12
Tipos de Datos
Tipos de Datos
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)
13
Tipos de Datos
Ejemplos:
Luego veremos como se declaran los objetos en VHDL, pero
supongamos que el objeto ROM1 (Read Only Memory), se declara
como tipo memoria.
15
Objetos y su Declaracin
14
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
Objetos y su Declaracin
Objetos y su Declaracin
adicional - un subtipo).
El smbolo := seguido por una expresin permite opcionalmente especificar un
valor inicial por omisin (default).
17
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).
Menor
Clase
**, ABS, NOT
Multiplicacin
*, /, MOD, REM
Signo
+, -
Adicin
+, -, &
Relacional
Lgico
Grupo
Aritmtico
(binarios)
Aritmtico
(monarios)
Operador
Diversa
19
Lgico
(binarios)
Operadores Predefinidos
Relacional
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
Complemento
20
Operadores Predefinidos
Grupo
Smbolo
Concatenacin
&
Desplazamiento
Funcin
Tipo de datos
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).
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
21
23
Paquete IEEE.STD_LOGIC_1164
Paquete IEEE.STD_LOGIC_1164
22
De
aqu
en
adelante,
usaremos
los
tipos
resueltos
STD_LOGIC
24
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
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
25
O
O
O
O
Z;
Z;
Z;
Z;
O1
O2
O3
Funciones de Conversin
Z
W
27
ELSE
ELSE
ELSE
ELSE
E0=1
E1=1
E2=1
E3=1
WHEN
WHEN
WHEN
WHEN
O0
28
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
30
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
LIBRARY IEEE;
USE IEEE.NUMERIC_STD.ALL;
31
Sintaxis bsica
ENTITY nombre_entidad IS
PORT (nombres_seal : modo
nombres_seal : modo
.....
nombres_seal : modo
END ENTITY nombre_entidad;
tipo_seal);
33
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:
tipo_seal;
tipo_seal;
tipo_seal);
34
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
35
Sentencias Concurrentes
Sintaxis:
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.
37
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.
39
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
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.
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
42
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.
44
45
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;
sensibilidad del proceso, as cada vez que ocurra un evento en una seal a la
[Etiqueta:] -- Es opcional
LOOP
La tercera forma especifica una condicin que debe ser verdadera (true) antes
46
La segunda forma incluye una lista de seales que sern los canales de
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;
....
sentencia secuencial;
47
48
49
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.
Sintaxis 1
NEXT [Etiqueta_loop];
Sintaxis 2
Sintaxis 1
50
Sintaxis 2
NEXT [Etiqueta_loop] WHEN exp_booleana;
51
52
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;
53
Sentencia IF anidada
Sintaxis
54
Sentencia CASE
Sintaxis
55
Estructural
Sentencias de Declaracin e
Instanciacin de Componentes
Sentencia COMPONENT
Sintaxis de Declaracin: (dentro del cuerpo de la arquitectura y antes de BEGIN)
COMPONENT nombre_componente IS
PORT (nombre_seal : modo tipo_seal;
nombre_seal : modo tipo_seal;
....
nombre_seal : modo tipo_seal);
END COMPONENT nombre_componente;
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);
Estilo explcito:
Etiqueta: nombre_componente PORT MAP (port1=>seal1, .. ,portm=>sealm);
UTN-FRBA - TCNICAS DIGITALES I
57
58
Estilo explcito:
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.
59
60
Ejecucin Concurrente
Apndice
Ejecucin Concurrente
en la Simulacin
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.
Valor actual
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).
driver
PROCESOS FUENTE
PROCESOS DESTINO
Valores proyectados
63
64
Ejecucin Concurrente
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.
65
Ejecucin Concurrente
Ejecucin Concurrente
sentencia
2),
proyectando
el
driver
de
F2
con
[1,(15+2)].
Este
67
F1
F1
F2
B=1
C=0
F3
F2
F3
15 nS
16nS
66