Documente Academic
Documente Profesional
Documente Cultură
Introducci
on al VHDL
22 de abril de 2010
1 / 53
Introducci
on al VHDL
22 de abril de 2010
2 / 53
Entidad de diseno
La entidad de dise
no es equivalente al encapsulado de los circuitos
integrados.
Define cuales son sus puertos y los modos de dichos puertos.
Ejemplos de encapsulados:
DIP
SMD
Introducci
on al VHDL
PLCC
22 de abril de 2010
3 / 53
Ejemplo de diseno
Introducci
on al VHDL
22 de abril de 2010
4 / 53
CONT2
RST
Q1
CLK
Q0
e n t i t y cont2
port (
rst :
clk :
q0
:
q1
:
end ;
in
bit
in
bit
buffer
buffer
;
;
bit ;
bit );
C
odigo VHDL
Diagrama
is
Introducci
on al VHDL
22 de abril de 2010
5 / 53
Pasos a seguir
Indentificar la entidad con un nombre.
Definir parametros de construcci
on generic.
Indentificar y declarar los puertos de acceso port.
Definir los modos de los puertos in, out, inout, etc.
Introducci
on al VHDL
22 de abril de 2010
6 / 53
Introducci
on al VHDL
22 de abril de 2010
7 / 53
Diagrama en bloque
Q0
D
CLK
CK
Q1
CK
CLR
CLR
RST
Introducci
on al VHDL
22 de abril de 2010
8 / 53
D0
Q0
D
CLK
CK
Q1
CK
CLR
CLR
RST
Introducci
on al VHDL
22 de abril de 2010
9 / 53
D0
D1
Q0
D
CLK
CK
Q1
CK
CLR
CLR
RST
Introducci
on al VHDL
22 de abril de 2010
9 / 53
D0
D1
Q0
FFD0
D
CLK
CK
CLR
Q1
CK
CLR
RST
Introducci
on al VHDL
22 de abril de 2010
10 / 53
D0
D1
Q0
FFD0
D
CLK
CK
CLR
CK
CLR
FFD1
RST
Q1
Introducci
on al VHDL
22 de abril de 2010
10 / 53
Compuertas y componentes
Introducci
on al VHDL
22 de abril de 2010
11 / 53
Zocalos
Introducci
on al VHDL
22 de abril de 2010
12 / 53
Declaracion de componentes
Introducci
on al VHDL
bit
bit
bit
bit
;
;
;
);
22 de abril de 2010
13 / 53
a r c h i t e c t u r e nombre o f e n t i d a d i s
C o n j u n t o de d e c l a r a c i o n e s
begin
C o n j u n t o de i n s t r u c c i o n e s
end ;
Introducci
on al VHDL
22 de abril de 2010
14 / 53
Introducci
on al VHDL
22 de abril de 2010
15 / 53
Pasos a seguir
Introducci
on al VHDL
22 de abril de 2010
16 / 53
is
in
bit
in
bit
buffer
buffer
;
;
bit ;
bit );
a r c h i t e c t u r e mix o f c o n t 2 i s
s i g n a l d0 , d1 : b i t ;
component f f d
port (
c l r : in
bit ;
ck
: in
bit ;
d
: in
bit ;
q
: ou t b i t ) ;
end component ;
begin
f f d 0 : f f d p o r t map ( r s t , c l k , d0 , q0 ) ;
f f d 1 : f f d p o r t map ( r s t , c l k , d1 , q1 ) ;
d0 <= no t q0 ;
d1 <= q0 x o r q1 ;
end ;
Miguel Angel Sagreras ()
Introducci
on al VHDL
22 de abril de 2010
17 / 53
Entity cont2
Architecture
mix
D0
not
Q0
D1
FFD0
D0
CLK
in
CLK
FFD
CK
CLR
RST
in
Q0
Q0
xor
buffer
Q1
FFD1
Q
Q0
D1
CLK
component
instantiation
RST
FFD
Q1
Q1
buffer
CK
CLR
RST
Introducci
on al VHDL
component
instantiation
22 de abril de 2010
18 / 53
Introducci
on al VHDL
22 de abril de 2010
19 / 53
FFD
D
Q
CK
CLR
entity ffd is
port (
c l r : in
ck
: in
d
: in
q
: ou t
end ;
;
;
;
);
C
odigo VHDL
Diagrama
bit
bit
bit
bit
Introducci
on al VHDL
22 de abril de 2010
20 / 53
a r c h i t e c t u r e beh o f f f d i s
begin
p r o c e s s ( ck , c l r )
begin
i f c l r = 1 then
q <= 0 ;
e l s i f ck e v e n t and ck = 1 then
q <= d ;
end i f ;
end p r o c e s s ;
end ;
Introducci
on al VHDL
22 de abril de 2010
21 / 53
Entidad de simulacion
entity testbench i s
end ;
architecture simul
signal clock :
signal reset :
signal tstq0 :
signal tstq1 :
of
bit
bit
bit
bit
testbench i s
;
;
;
;
component c o n t 2
port (
rst : in bit ;
clk : in bit ;
q0
: buffer bit ;
q1
: buffer bit );
end component ;
begin
r e s e t <= 1 , 0 a f t e r 30 n s ;
c l o c k <= no t c l o c k a f t e r 50 n s ;
t e s t c o n t 2 : c o n t 2 p o r t map ( r e s e t , c l o c k , t s t q 0 , t s t q 1 ) ;
end ;
Introducci
on al VHDL
22 de abril de 2010
22 / 53
Diagrama de tiempos
entity testbench
/testbench/reset
/testbench/clock
/testbench/tstq0
/testbench/tstq1
component testcont2
/testbench/testcont2/rst
/testbench/testcont2/clk
/testbench/testcont2/q0
/testbench/testcont2/q1
/testbench/testcont2/d0
/testbench/testcont2/d1
component ffd0
/testbench/testcont2/ffd0/clr
/testbench/testcont2/ffd0/ck
/testbench/testcont2/ffd0/d
/testbench/testcont2/ffd0/q
component ffd1
/testbench/testcont2/ffd1/clr
/testbench/testcont2/ffd1/ck
/testbench/testcont2/ffd1/d
/testbench/testcont2/ffd1/q
100
200
300
400
500
141 ns
Entity:testbench Architecture:simul Date: Thu Aug 17 15:49:27 ART 2006 Row: 1 Page: 1
Introducci
on al VHDL
22 de abril de 2010
23 / 53
return
wait
asignaci
on de se
nales
asignaci
on de variables
llamadas a procedimientos
Introducci
on al VHDL
22 de abril de 2010
24 / 53
Instruccion process
Introducci
on al VHDL
22 de abril de 2010
25 / 53
Instruccion process
Bloque de instrucciones
Introducci
on al VHDL
22 de abril de 2010
26 / 53
Instrucciones secuenciales
if-then-else
Introducci
on al VHDL
22 de abril de 2010
27 / 53
Instrucciones secuenciales
Ejemplo de uso de la instrucci
on if-then-else
X1
X3
00
00
01
01
11
11
10
Miguel Angel Sagreras ()
10
1
1
Introducci
on al VHDL
1
22 de abril de 2010
28 / 53
FUN
X0
X1
X2
X3
e n t i t y FUN
port (
x0
x1
x2
x3
o
end ;
Introducci
on al VHDL
is
:
:
:
:
:
in
in
in
in
out
bit
bit
bit
bit
bit
;
;
;
;
);
22 de abril de 2010
29 / 53
X0
X2 X1 0 0
X3
00
01
01
11
1
1
11
10
Introducci
on al VHDL
10
1
1
22 de abril de 2010
30 / 53
Instrucciones secuenciales
Instrucci
on case
Introducci
on al VHDL
22 de abril de 2010
31 / 53
Declaracion de tipos
Introducci
on al VHDL
22 de abril de 2010
32 / 53
Tipos enumerados
Indica los valores que puede tomar un objeto : signal, variable, constant,
declarado con dicho tipo.
Sintaxis:
Introducci
on al VHDL
22 de abril de 2010
33 / 53
Declaracion de variables
Se declaran en la parte declarativa de las instrucciones cuyo bloque solo pueden
tener instrucciones secuenciales. Ejemplo : process, function, procedure.
Sintaxis :
variable declaration :==
variable idenifier list : subtype indication [ := expression ] ;
identifier list es la lista de variables a declarar. Ej : aux1, aux2.
subtype indication indica el tipo de dato que tendran las variables de datos
declaradas. Ej : bit .
:= expression inicializa la lista de variables con el valor de la expresion. Ej :
:= 1
Ejemplo :
variable aux : bit := 1;
Miguel Angel Sagreras ()
Introducci
on al VHDL
22 de abril de 2010
34 / 53
Asignacion de variables
Introducci
on al VHDL
22 de abril de 2010
35 / 53
C
O
M
B
I
N
A
C
I
O
N
A
L
n+1
M
E
M
O
R
I
A
Introducci
on al VHDL
22 de abril de 2010
36 / 53
X/O
0/1
SEQMLY
X
CLK
A
1/0
0/0
e n t i t y seqmly
port (
clk :
x
:
o
:
end ;
is
in
bit ;
in
bit ;
out b i t ) ;
1/0
C
1/0
0/0
Introducci
on al VHDL
22 de abril de 2010
37 / 53
X
q
A ,1
B ,0
C ,0
B ,0
A ,0
B ,0
22 de abril de 2010
38 / 53
C
O
M
B
I
N
A
C
I
O
N
A
L
n+1
C
O
M
B
I
N
A
C
I
O
N
A
L
M
E
M
O
R
I
A
Introducci
on al VHDL
22 de abril de 2010
39 / 53
SEQ
00
Q(0)
CLK
Q(1)
11
01
0
e n t i t y seq
port (
clk
x
q
end ;
is
: in
bit ;
: in
bit ;
: out b i t v e c t o r ( 0 t o 1 ) ) ;
Introducci
on al VHDL
1
10
22 de abril de 2010
40 / 53
X
q
00
01
11
01
10
00
10
11
01
11
00
10
22 de abril de 2010
41 / 53
c
o
m
b
i
n
a
c
i
o
n
a
l
retardos
Miguel Angel Sagreras ()
Introducci
on al VHDL
22 de abril de 2010
42 / 53
ASINC
XY
00
01
11
10
Y
Z
entity asinc is
port (
x : in
bit ;
y : in
bit ;
z : out b i t ) ;
end ;
Introducci
on al VHDL
22 de abril de 2010
43 / 53
entity asinc is
port (
x : in
bit ;
y : in
bit ;
z : out b i t ) ;
end ;
when o t h e r s =>
null ;
end c a s e ;
when 01 =>
case estado i s
when a =>
e s t a d o <= b ;
when d =>
e s t a d o <= c ;
when o t h e r s =>
null ;
end c a s e ;
when 11 =>
case estado i s
when b =>
e s t a d o <= c ;
when o t h e r s =>
null ;
end c a s e ;
when 10 =>
i f e s t a d o = d then
e s t a d o <= a ;
end i f ;
end c a s e ;
end p r o c e s s ;
a r c h i t e c t u r e beh o f a s i n c i s
type e s t a d o s i s ( a , b , c , d ) ;
si gn al estado : estados ;
begin
process (x , y , estado )
begin
case estado i s
when a | b =>
z <= 0 ;
when c | d =>
z <= 1 ;
end c a s e ;
c a s e b i t v e c t o r ( 0 t o 1 ) ( x&y ) i s
when 00 =>
case estado i s
when b =>
e s t a d o <= a ;
when c =>
e s t a d o <= d ;
Miguel Angel Sagreras ()
end ;
Introducci
on al VHDL
22 de abril de 2010
44 / 53
Instruccion loop
loop statement ::=
[ loop label : ] [ iteration scheme ] loop
sequence of statement
end loop ;
Introducci
on al VHDL
22 de abril de 2010
45 / 53
Instruccion next
Introducci
on al VHDL
22 de abril de 2010
46 / 53
etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
next;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;
Introducci
on al VHDL
22 de abril de 2010
47 / 53
Instruccion next
etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
next etiqueta1;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;
Introducci
on al VHDL
22 de abril de 2010
48 / 53
Instruccion exit
Introducci
on al VHDL
22 de abril de 2010
49 / 53
etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
exit;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;
Introducci
on al VHDL
22 de abril de 2010
50 / 53
etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
exit etiqueta1;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;
Introducci
on al VHDL
22 de abril de 2010
51 / 53
Descripcion de la sintaxis
Los nombres en min
usculas se usan para indicar una categora sint
actica. Por ejemplo:
expression
Las palabras escritas en negritas simbolizan palabras claves. Por ejemplo :
array, port, entity, . . . .
Una expresi
on sint
actica consiste de un lado izquierdo, el smbolo ::= que se puede leer
como se reemplaza por, y un lado derecho. El lado izquierdo es una categora sint
actica,
el lado derecho es la regla que lo reemplaza.
Los corchetes [ ] encierran items opcionales. Las siguientes expresiones son equivalentes.
return statement ::= return [ expression ] ;
return statement ::= return ; return expression ;
Introducci
on al VHDL
22 de abril de 2010
52 / 53