Tema 2. Lenguajes de Descripción de Hardware (VHDL)

Transcripción

Tema 2. Lenguajes de Descripción de Hardware (VHDL)
Tema 2. Lenguajes de Descripción de Hardware (VHDL)
http://www.unoweb-s.uji.es/IS36
Germán León Navarro
Octubre, 2003
VHDL
VHDL: VHSIC Hardware Descripción Language
VHSIC: Very High Speed Integrated Circuit
➤ Desarrollado a mediados de los 80 por el Departamento de Defensa
USA. (subset de ADA).
➤ Usado para modelado, simulación y sistemas de sistemas digitales.
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 2
▲
➤ Sólo un subconjunto del lenguaje es sintetizable.
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 3
▲
Flujo de Diseño
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 4
▲
Flujo de Diseño CPLD
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 5
▲
Flujo de Diseño- Herramientas
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 6
▲
Ejemplo: Sumador Completo
➲❏✘
Ejemplo: Sumador Completo(VHDL)
e n t i t y FULL_ADDER i s
Port ( A , B , CIN : i n BIT ;
SUM,COUT : out BIT ) ;
end FULL_ADDER ;
a r c h i t e c t u r e FA_MIXED of FULL_ADDER i s
component XOR2
port ( P1 , P2 : i n BIT ; PZ : out b i t ) ;
end component ;
s i g n a l S1 : BIT ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 7
▲
begin
➲❏✘
Ejemplo: Sumador Completo(VHDL)
X1 : XOR2 port map ( A , B , S1 ) ; −− e s t r u c t u r a l
process ( A , B , CIN )
−− a l g o r i t m i c o
v a r i a b l e T1 , T2 , T3 : BIT ;
begin
T1 : =A and B ; T2 : = B and CIN ;
T3 : = A and CIN ;
COUT < = T1 or T2 or T3 ;
end process ;
SUM < = S1 xor CIN ;
−−d a t a f l o w
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 8
▲
end FA_MIXED ;
➲❏✘
Tipos
➤ Tipos Elementales.
➭ Boolean,Character,Integer,Reat
➭ bit
➤ Definidos por el usuario
➭ Array (bit_vector),subtipo (Natural)
➭ Enumeración.
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 9
▲
➭ Estándar lógico (std_logic,std_ulogic)
➲❏✘
Constantes
constant CONST_NAME: < type_spec > : = < value > ;
−− Examples :
constant CONST_NAME : BOOLEAN : = TRUE;
constant CONST_NAME : INTEGER : = 3 1 ;
constant CONST_NAME : BIT_VECTOR ( 3 downto 0 ) : = " 0000 " ;
constant CONST_NAME : STD_LOGIC : = ’ Z ’ ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 10
▲
constant CONST: STD_LOGIC_VECTOR ( 3 downto 0 ) : = "0−0− " ;
➲❏✘
Arrays
s i g n a l A_BUS, Z_BUS : b i t _ v e c t o r ( 3 downto 0 ) ;
s i g n a l B_BUS : b i t _ v e c t o r ( 0 to 3 ) ;
Z_BUS < = A_BUS ;
B_BUS < = A_BUS ;
B_BUS (0)←−−−−−−A_BUS(3);
Z_BUS (1)←−−−−−−A_BUS(1);
B_BUS (1)←−−−−−−A_BUS(2);
Z_BUS (2)←−−−−−−A_BUS(2);
B_BUS (2)←−−−−−−A_BUS(1);
Z_BUS (3)←−−−−−−A_BUS(3);
B_BUS (3)←−−−−−−A_BUS(0);
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 11
▲
Z_BUS (0)←−−−−−−A_BUS(0);
➲❏✘
Agregar y concatenar arrays
s i g n a l A_BUS, B_BUS, Z_BUS : b i t _ v e c t o r ( 3 downto 0 ) ;
s i g n a l A_BIT , B_BIT , C_BIT , D_BIT : b i t ;
s i g n a l BYTE : b i t _ v e c t o r ( 7 downto 0 ) ;
Agregar
Z_BUS < = ( A_BIT , B_BIT , C_BIT , D_BIT ) ;
BYTE < = ( 7 = > ’ 1 ’ , 5 downto 1 = > ’ 1 ’ , 6 = > B_BIT , others = > ’ 0 ’ ) ;
Concatenar
Z_BUS < = A_BIT & B_BIT & C_BIT & D_BIT ;
Z_BUS < = A_BUS & B_BUS ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 12
▲
➲❏✘
Particionar arrays
BYTE ( 5 downto 2 ) < = A_BUS ;
Z_BUS ( 1 downto 0 ) < = ’ 0 ’ & B_BIT ;
B_BIT < = A_BUS ( 0 ) ;
Z_BUS <=BYTE ( 6 downto 3 ) ;
Z_BUS ( 0 to 1 ) < = ’ 0 ’ & B_BIT ;
▲
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 13
➲❏✘
Estándar lógico
type STD_ULOGIC i s ( ’ U ’ ,
’X ’ ,
’1 ’ ,
’0 ’ ,
’Z ’ ,
’W’ ,
’L ’ ,
’H ’ ,
’−’
−− N o i n i c i a l i z a d o
−− O o 1
−− 1 dominante
−− O dominante
−− A l t a impendancia
−−
−− O d e b i l
−− 1 d e b i l
−− no i m p o r t a ) ;
➤ std_logic: Es correcto Res <=A; Res<=B;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 14
▲
➤ std_ulogic: No es correcto Res <=A; Res<=B;
➲❏✘
Librería
➤ Definición : Una librería es un conjunto de elementos de VHDL.
Dentro de las librerias se incluyen package que es un conjunto de
funciones y tipos.
➤ Se utilizan:
l i l b a r y LIB_NAME ;
use LIB_NAME .PACKAGE_NAME. a l l ;
Para trabajar con el tipo std_logic se utiliza el siguiente package
l i b r a r y IEEE ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 15
▲
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
➲❏✘
STD_LOGIC_1164
CONSTANT r e s o l u t i o n _ t a b l e : s t d l o g i c _ t a b l e : = (
−−
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−−
|
−−
U
X
0
1
Z
W
L
H
−
|
|
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
( ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ , ’ U ’ ) , −− | U |
( ’ U ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ ) , −− | X |
( ’ U ’ , ’ X ’ , ’ 0 ’ , ’ X ’ , ’ 0 ’ , ’ 0 ’ , ’ 0 ’ , ’ 0 ’ , ’ X ’ ) , −− | 0 |
( ’ U ’ , ’ X ’ , ’ X ’ , ’ 1 ’ , ’ 1 ’ , ’ 1 ’ , ’ 1 ’ , ’ 1 ’ , ’ X ’ ) , −− | 1 |
( ’ U ’ , ’ X ’ , ’ 0 ’ , ’ 1 ’ , ’ Z ’ , ’W’ , ’ L ’ , ’ H ’ , ’ X ’ ) , −− | Z |
( ’ U ’ , ’ X ’ , ’ 0 ’ , ’ 1 ’ , ’W’ , ’W’ , ’W’ , ’W’ , ’ X ’ ) , −− | W |
( ’ U ’ , ’ X ’ , ’ 0 ’ , ’ 1 ’ , ’ L ’ , ’W’ , ’ L ’ , ’W’ , ’ X ’ ) , −− | L |
( ’ U ’ , ’ X ’ , ’ 0 ’ , ’ 1 ’ , ’ H ’ , ’W’ , ’W’ , ’ H ’ , ’ X ’ ) , −− | H |
( ’U’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ , ’ X ’ )
−− | − |
);
➤ CONV_INTEGER: STD_LOGIC_VECTOR ⇒ INTEGER.
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 16
▲
➤ CONV_STD_LOGIC_VECTOR (INTEGER,SIZE):
INTEGER ⇒ STD_LOGIC_VECTOR.
➲❏✘
Descripción estructural
component COMPONENT_NAME port ( < p o r t _ d e c l a r a t i o n > ) ;
end component ;
LABEL1 : COMPONENT_NAME port map
( PORT_NAME = > SIG_NAME,PORT_NAME = > SIG_NAME ) ;
f o r I i n < l o w e r _ l i m i t > to < u p p e r _ l i m i t > generate
<statement >
end generate ;
i f < c o n d i t i o n > generate
<statement >
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 17
▲
end generate ;
➲❏✘
Ejemplo sumador
G0 : f o r I i n 0 to 3 generate
G1 : i f I = 0 generate
HA : HALF_ADDER port map (
A = > X( I ) , B = > Y( I ) ,
S = > Z ( I ) , Co = > TMP( I + 1 ) ) ;
end generate ;
G2 : i f I > = 1 and I < = 3 generate
FA : FULL_ADDER port map (
A = > X( I ) , B = > Y( I ) , C = > TMP( I ) ,
S = > Z ( I ) , Co = > TMP( I + 1 ) ) ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 18
▲
end generate ; end generate ;
➲❏✘
Genericidad
e n t i t y ENTITY_NAME i s
generic ( parametro : t i p o : = v a l o r p o r d e f e c t o , . . . )
port ( < p o r t _ d e c l a r a t i o n s > ) ;
end ENTITY_NAME ;
component COMPONENT_NAME generic ( < g e n e r i c _ d e c l a r a t i o n >)
port ( < p o r t _ d e c l a r a t i o n > ) ;
end component ;
LABEL1 : COMPONENT_NAME
generic map ( parametro = > v a l o r ,
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 19
▲
port map ( PORT_NAME = > SIG_NAME,PORT_NAME = > SIG_NAME
➲❏✘
Descripción Dataflow
SIG_NAME <= < expression > ;
LABEL1 :
−− o p t i o n a l l a b e l
SIG_NAME <= < expression > when < c o n d i t i o n > else
< expression > when < c o n d i t i o n > else
< expression > ;
LABEL1 :
−− o p t i o n a l l a b e l
with < c h o i c e _ e x p r e s s i o n > s e l e c t
SIG_NAME <= < expression > when < choices > ,
< expression > when < choices > ,
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 20
▲
< expression > when others ;
➲❏✘
Ejemplos: Triestado y Multiplexor
➤ Driver Triestado.
S a l i d a < = Entrada when ( T = ’ 1 ’ ) else ( others = > ’Z ’ ) ;
➤ Multiplexor 4:1
with s e l s e l e c t
s1 < = e ( 3 ) when " 11 " ,
e ( 2 ) when " 10 " ,
e ( 1 ) when " 01 " ,
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 21
▲
e ( 0 ) when others ;
➲❏✘
Expresiones RTL
Expesiones normales: and ,or,xor,not
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
use IEEE . s t d _ l o g i c _ a r i t h . a l l ;
use IEEE . s t d _ l o g i c _ u n s i g n e d . a l l ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 22
▲
Tipos: Signed,Unsigned Nuevos operaciones:+,-,=,>,<,. . .
➲❏✘
Tipos: Signed, Unsigned
➤ La longitud de cualquier resultado
l i b r a r y IEEE ;
use IEEE . STD_LOGIC_1164 . ALL ;
use IEEE . STD_LOGIC_ARITH . ALL ;
e n t i t y vadd i s
Port ( A , B : i n UNSIGNED ( 7 downto 0 ) ;
es la del operando más extenso.
➤ Si uno de los operandos es de
tipo SIGNED, el resultado es de
C : i n SIGNED ( 7 downto 0 ) ;
D : i n s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;
S : out UNSIGNED ( 8 downto 0 ) ;
T : out SIGNED ( 8 downto 0 ) ;
U : out SIGNED ( 7 downto 0 ) ;
V : out s t d _ l o g i c _ v e c t o r ( 8 downto 0 ) ) ;
end vadd ;
a r c h i t e c t u r e B e h a v i o r a l of vadd i s
begin
tipo SIGNED; si no es
UNSIGNED.
➤ Si el resultado es asignado a un
elemento de tipo
STD_LOGIC_VECTOR entonces
S< = ( ’ 0 ’ & A) + ( ’ 0 ’ & B ) ;
T<=A+C;
U<=C+SIGNED(D ) ;
V<= C−UNSIGNED(D ) ;
el resultado UNSIGNED o
SIGNED se convierte a este tipo.
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 23
▲
end B e h a v i o r a l ;
➲❏✘
Descripción algoritmica
➤ Process: Especifica el comportamiento
siguiendo de un algoritmo secuencial.
➤ Lista de sensibilidad: Cuando cambia uno
elemento de la lista se evualará el process.
Serán las entradas del circuito especificado.
[ l a b e l ] : process ( l i s t a de s e n s i b i l i d a d )
< d e c l a r a c i o n de v a r i a b l e s >
begin
−− process [ l a b e l ]
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 24
▲
end process [ l a b e l ] ;
➲❏✘
if y case
case < expression > i s
when < choices > = >
<statements >
when < choices > = >
<statements >
when others = >
<statements >
i f < c o n d i t i o n > then
<statement >
e l s i f < c o n d i t i o n > then
<statement >
else
<statement >
end i f ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 25
▲
end case ;
➲❏✘
for
LABEL1 :
f o r I i n < l o w e r _ l i m i t > to < u p p e r _ l i m i t > loop
<statement >
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 26
▲
end loop ;
➲❏✘
Variables vs signals
➤ Variables: Sólo se pueden referencia dentro
del process. Las modificaciones son
inmediata.
➤ Signal: Sólo puede cambiar el valor al final
del process. Se puede referenciar en toda la
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 27
▲
arquitectura.
➲❏✘
Variables vs signals (cont)
s i g n a l A , B , C, Y , Z : UNSIGNED ( 7 downto 0 ) ;
s i g n a l A , B , C, Y , Z : UNSIGNED ( 7 downto 0 ) ;
begin
signal
begin
v a r i a b l e M,N : UNSIGNED ( 7 downto 0 ) ;
process ( A , B , C)
begin
begin
M: =A ;
M<=A ;
N: =B ;
N<=B ;
Z<=M+N;
Z<=M+N ;
M: =C;
M<=C ;
Y<=M+N;
Y<=M+N ;
▲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 28
end process ;
▲
end process ;
➲
process ( A , B , C)
M, N: UNSIGNED ( 7 downto 0 ) ;
➲❏✘
Inferir memoria
process ( GATE , DIN )
begin
i f GATE= ’ 1 ’ then
DOUT < = DIN ;
end i f ;
end process ;
▲
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 29
➲❏✘
Ejemplo propuestos
➤ Decodificador 1x2.
➤ Decodificador 2x4 (estructural).
➤ Codificador 4:2.
➤ Codificador Gray 4:2 (estructural).
➤ Codificador genérico.
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 30
▲
➤ Comparador genérico.
➲❏✘
Decodificador
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y dec1x2 i s
port (
I : i n STD_LOGIC ; E : i n STD_LOGIC ;
s0 : out STD_LOGIC ; s1 : out STD_LOGIC ) ;
end dec1x2 ;
a r c h i t e c t u r e dec1x2_arch of dec1x2 i s
begin
s0 < = e and ( not I ) ; s1 < = e and I ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 31
▲
end dec1x2_arch ;
➲❏✘
Decodificador
a r c h i t e c t u r e dec1x2_beh of dec1x2 i s
begin
s0 < = ’ 0 ’ when ( e = ’ 0 ’ ) else not ( I ) ;
s1 < = ’ 0 ’ when ( e = ’ 0 ’ ) else I ;
end dec1x2_beh ;
a r c h i t e c t u r e dec1x2_beh2 of dec1x2 i s
begin
pro : process ( i , e )
begin
s1 < = ’ 1 ’ ; s0 < = ’ 1 ’ ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 32
▲
i f ( e = ’ 1 ’ ) then
➲❏✘
Decodificador
i f ( i = ’ 0 ’ ) then s0 < = ’ 0 ’ ;
else s1 < = ’ 0 ’ ;
end i f ;
end i f ;
end process ;
end dec1x2_beh2 ;
c o nf i g u r a t i o n uno of dec1x2 i s
f o r dec1x2_beh2
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 33
▲
end f o r ; end c o n f i g u r a t i o n ;
➲❏✘
Decodificador
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y dec2x4 i s
port (
A : i n STD_LOGIC_VECTOR ( 1 downto 0 ) ;
S : out STD_LOGIC_VECTOR ( 3 downto 0 ) ; E : i n STD_LOGIC
);
end dec2x4 ;
a r c h i t e c t u r e dec2x4_arch of dec2x4 i s
s i g n a l h a b i l i t a c i o n : s t d _ l o g i c _ v e c t o r ( 1 downto 0 ) ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 34
▲
component dec1x2 port ( a , e : i n s t d _ l o g i c ; s0 , s1 : out s t d _ l o g i c )
➲❏✘
Decodificador
end component ;
begin
DecEnt : dec1x2 port map
(A( 1 ) ,E, h a b i l i t a c i o n ( 0 ) , h a b i l i t a c i o n ( 1 ) ) ;
S a l i : f o r I i n 0 to 1 generate
DecSal : dec1x2 port map
( A ( 0 ) , h a b i l i t a c i o n ( I ) , S(2 ∗ I ) , S(2 ∗ I + 1 ) ) ;
end generate ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 35
▲
end dec2x4_arch ;
➲❏✘
Codificador
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y code4a2 i s
port (
p e t i c i o n e s : i n STD_LOGIC_VECTOR ( 3 downto 0 ) ;
codigo : out STD_LOGIC_VECTOR ( 1 downto 0 ) ;
enable : i n STD_LOGIC ; alguno : out STD_LOGIC
);
end code4a2 ;
a r c h i t e c t u r e code4a2_arch of code4a2 i s
begin
x : process ( p e t i c i o n e s , enable )
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 36
▲
begin
➲❏✘
Codificador
alguno < = ’ 0 ’ ;
codigo <= " 00 " ;
i f ( enable = ’ 0 ’ ) then
alguno < = ’ 1 ’ ;
i f ( p e t i c i o n e s ( 3 ) = ’ 1 ’ ) then codigo <= " 11 " ;
e l s i f ( p e t i c i o n e s ( 2 ) = ’ 1 ’ ) then codigo <= " 10 " ;
e l s i f ( p e t i c i o n e s ( 1 ) = ’ 1 ’ ) then codigo <= " 01 " ;
e l s i f ( p e t i c i o n e s ( 0 ) = ’ 1 ’ ) then codigo <= " 00 " ;
else alguno < = ’ 0 ’ ;
end i f ;
end i f ;
end process x ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 37
▲
end code4a2_arch ;
➲❏✘
Codificador Gray
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y codegray i s
port (
p e t i c i o n e s : i n STD_LOGIC_VECTOR ( 3 downto 0 ) ;
codigo : out STD_LOGIC_VECTOR ( 1 downto 0 ) ;
alguno : out STD_LOGIC
);
end codegray ;
a r c h i t e c t u r e codegray_arch of codegray i s
s i g n a l uno : s t d _ l o g i c ;
s i g n a l code_tmp : s t d _ l o g i c _ v e c t o r ( 1 downto 0 ) ;
▲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 38
▲
(
➲
component code4a2 port
➲❏✘
Codificador Gray
p e t i c i o n e s : i n STD_LOGIC_VECTOR ( 3 downto 0 ) ;
codigo : out STD_LOGIC_VECTOR ( 1 downto 0 ) ;
enable : i n STD_LOGIC ;
alguno : out STD_LOGIC
) ; end component ;
begin
uno < = ’ 1 ’ ;
cd : code4a2 port map( p e t i c i o n e s , code_tmp , uno , alguno ) ;
with code_tmp s e l e c t
codigo < = " 11 " when " 10 " ,
" 10 " when " 11 " , code_tmp when others ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 39
▲
end codegray_arch ;
➲❏✘
Codificador Genérico
l i b r a r y IEEE ;
use IEEE . STD_LOGIC_1164 . ALL ;
use IEEE . STD_LOGIC_ARITH . ALL ;
use IEEE . STD_LOGIC_UNSIGNED . ALL ;
e n t i t y coden i s
generic (ANCHO : i n t e g e r : = 4 ) ;
Port (
s o l i c i t u d : i n s t d _ l o g i c _ v e c t o r ( ( 2 ∗∗ANCHO) − 1 downto 0 ) ;
codigo : out s t d _ l o g i c _ v e c t o r (ANCHO downto 0 ) ) ;
end coden ;
a r c h i t e c t u r e B e h a v i o r a l of coden i s
begin
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 40
▲
ab : process ( s o l i c i t u d )
➲❏✘
Codificador Genérico
begin
codigo < = ( others = > ’ 0 ’ ) ;
f o r i i n 0 to ( ( 2 ∗ ∗ ANCHO) − 1) loop
if
( s o l i c i t u d ( i ) = ’ 1 ’ ) then
codigo <=CONV_STD_LOGIC_VECTOR ( i , 5 ) ;
end i f ;
end loop ;
end process ab ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 41
▲
end B e h a v i o r a l ;
➲❏✘
Latchs y Biestables
l a t c h : process ( GATE , DIN )
begin
i f GATE= ’ 1 ’ then
DOUT < = DIN ;
end i f ;
end process l a t c h ;
b i e s t a b l e : process ( c l o c k )
begin
i f c l o c k ’ event and c l o c k = ’ 1 ’ then −− r i s i n g c l o c k edge
Q<=DIN ;
end i f ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 42
▲
end process b i e s t a b l e ;
➲❏✘
Biestable
< l a b e l > : process ( < c l o c k > , < r e s e t >)
begin
−− process < l a b e l >
i f < r e s e t > = ’ 0 ’ then
−− asynchronous r e s e t
( a c t i v e low )
e l s i f < c l o c k > ’ event and < c l o c k > = ’ 1 ’ then
i f < enable > = ’ 1 ’ then
−− synchronous l o a d
end i f ;
end i f ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 43
▲
end process < l a b e l > ;
➲❏✘
Registro de desplazamiento
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
entity regdsl is
port (
Entrada : i n STD_LOGIC ;
r e l o j : i n STD_LOGIC ;
S a l i d a : out STD_LOGIC
);
end r e g d s l ;
a r c h i t e c t u r e r e g d s l _ a r c h of r e g d s l i s
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 44
▲
s i g n a l estado , f u t u r o : s t d _ l o g i c _ v e c t o r ( 1 5 downto 0 ) ;
➲❏✘
Registro de desplazamiento
begin
−− < < e n t e r your st a t e me n t s here >>
s a l i d a < = estado ( 1 5 ) ;
−− f u t u r o <= estado ( 1 4 downto 0 ) & Entrada ;
process
begin
wait u n t i l ( r e l o j ’ event and r e l o j = ’ 1 ’ ) ;
estado < = estado ( 1 4 downto 0 ) & Entrada ;
end process ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 45
▲
end r e g d s l _ a r c h ;
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 46
▲
DECodificador BCD a 7 segmentos
➲❏✘
Registro de desplazamiento
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
entity regdesf is
port (
c l k : i n STD_LOGIC ;
D i r : i n STD_LOGIC ;
e n t : i n STD_LOGIC ;
s a l i d a : out STD_LOGIC_VECTOR ( 1 2 downto 0 )
);
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 47
▲
end r e g d e s f ;
➲❏✘
Registro de desplazamiento
a r c h i t e c t u r e r e g d e s b i d _ a r c h of r e g d e s f i s
signal in fo , info_tmp : s t d _ l o g i c _ v e c t o r
( 1 2 downto 0 ) ;
begin
−− < < e n t e r your s t a t e m e n t s here >>
ddcc : process ( d i r , e n t )
begin
i f ( d i r = ’ 1 ’ ) then
i n f o _ t m p < = e n t & i n f o _ t m p ( 1 2 downto 1 ) ;
else i n f o _ t m p <= i n f o _ t m p ( 1 1 downto 0 ) & e n t ;
end i f ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 48
▲
end process ddcc ;
➲❏✘
Registro de desplazamiento
dd : process ( c l k )
begin
i f ( c l k ’ event and c l k = ’ 1 ’ )
then
i n f o <= i n f o _ t m p ;
end i f ;
end process dd ;
s a l i d a <= i n f o ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 49
▲
end r eg d e s b i d _ ar c h ;
➲❏✘
Registro de desplazamiento
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
entity regdslpa is
port (
Entrada : i n STD_LOGIC ;
r e l o j : i n STD_LOGIC ;
p a r a l e l a : i n s t d _ l o g i c _ v e c t o r ( 1 5 downto 0 ) ;
load : in s t d _ l o g i c ;
S a l i d a : out STD_LOGIC ) ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 50
▲
end r e g d s l p a ;
➲❏✘
Registro de desplazamiento
a r c h i t e c t u r e r e g d s l _ a r c h of r e g d s l p a i s
s i g n a l estado , f u t u r o : s t d _ l o g i c _ v e c t o r ( 1 5 downto 0 ) ;
begin
−− < < e n t e r your st a t e me n t s here >>
s a l i d a < = estado ( 1 5 ) ;
−− f u t u r o <= estado ( 1 4 downto 0 ) & Entrada ;
f u t u r o < = p a r a l e l a when ( l o a d = ’ 1 ’ ) else estado ( 1 4 downto 0 ) & Ent
process
begin
wait u n t i l ( r e l o j ’ event and r e l o j = ’ 1 ’ ) ;
estado < = f u t u r o ;
end process ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 51
▲
end r e g d s l _ a r c h ;
➲❏✘
Contador hasta 5
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y c5 i s
port (
c l k , r e s e t : i n STD_LOGIC ;
Q : out STD_LOGIC_VECTOR ( 2 downto 0 )
);
end c5 ;
a r c h i t e c t u r e c5_arch of c5 i s
s i g n a l cuenta , masuno : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) ;
begin
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 52
▲
q < = cuenta ;
➲❏✘
Contador hasta 5
process ( cuenta )
begin
masuno<= " 000 " ;
Case cuenta i s
when " 000 " = > masuno <= " 001 " ;
when " 001 " = > masuno <= " 010 " ;
when " 010 " = > masuno < = " 011 " ;
when " 011 " = > masuno < = " 100 " ;
when " 100 " = > masuno < = " 101 " ;
when
" 101 " = > masuno < = " 000 " ;
when others = > NULL ;
end case ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 53
▲
end process ;
➲❏✘
Contador hasta 5
process ( c l k , r e s e t )
begin
i f ( r e s e t = ’ 1 ’ ) then cuenta < = ( others = > ’ 0 ’ ) ;
e l s i f ( c l k ’ event and c l k = ’ 1 ’ ) then
cuenta < = masuno ;
end i f ;
end process ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 54
▲
end c5_arch ;
➲❏✘
Contador génerico
l i b r a r y IEEE ;
use IEEE . STD_LOGIC_1164 . ALL ;
use IEEE . STD_LOGIC_ARITH . ALL ;
use IEEE . STD_LOGIC_UNSIGNED . ALL ;
e n t i t y contador is
generic (ANCHO: n a t u r a l : = 8 ) ;
Port ( enable : i n s t d _ l o g i c ;
c l k : in s t d _ l o g i c ;
resetz : in s t d _ l o g i c ;
resets : in s t d _ l o g i c ;
q : out s t d _ l o g i c _ v e c t o r (ANCHO−1 downto 0 ) ) ;
end c o n t a d o r ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 55
▲
a r c h i t e c t u r e B e h a v i o r a l of c o n t a d o r i s
➲❏✘
Contador génerico
s i g n a l cuenta , masuno : s t d _ l o g i c _ v e c t o r ( ANCHO−1 downto 0 ) ;
begin
masuno<=cuenta +1; q<=cuenta ;
process ( c l k , enable , r e s e t z , r e s e t s )
begin
i f ( r e s e t z = ’ 1 ’ ) then cuenta < = ( others = > ’ 0 ’ ) ;
e l s i f ( c l k ’ event and c l k = ’ 1 ’ ) then
i f ( r e s e t s = ’ 1 ’ ) then cuenta < = ( others = > ’ 0 ’ ) ;
e l s i f ( enable = ’ 1 ’ ) then cuenta <=masuno ;
end i f ;
end i f ;
end process ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 56
▲
end B e h a v i o r a l ;
➲❏✘
Comparador
l i b r a r y IEEE ;
use IEEE . STD_LOGIC_1164 . ALL ;
use IEEE . STD_LOGIC_ARITH . ALL ;
use IEEE . STD_LOGIC_UNSIGNED . ALL ;
e n t i t y comparador i s
generic (ANCHO : i n t e g e r : = 8 ;EOS: i n t e g e r : = 2 0 0 ;
SOB: i n t e g e r : = 2 1 0 ;EOB: i n t e g e r : = 2 2 0 ;EOL : i n t e g e r :=230
);
Port ( data : i n s t d _ l o g i c _ v e c t o r (ANCHO−1 downto 0 ) ;
c l k : in s t d _ l o g i c ;
resetz : in s t d _ l o g i c ;
o : out s t d _ l o g i c _ v e c t o r ( 1 to 3 ) ) ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 57
▲
end comparador ;
➲❏✘
Comparador
a r c h i t e c t u r e B e h a v i o r a l of comparador i s
s i g n a l f _ o : s t d _ l o g i c _ v e c t o r ( 1 to 3 ) ;
begin
f _ o ( 1 ) < = ’ 1 ’ when ( data > EOS ) else ’ 0 ’ ;
f _ o ( 2 ) < = ’ 1 ’ when ( data > SOB ) and ( data < EOB ) else ’ 0 ’ ;
f _ o ( 3 ) < = ’ 1 ’ when ( data=EOL ) else ’ 0 ’ ;
reg : process ( c l k , r e s e t z , f _ o )
begin
i f ( r e s e t z = ’ 1 ’ ) then o < = ( others = > ’ 0 ’ ) ;
e l s i f ( c l k ’ event and c l k = ’ 1 ’ ) then o <= f _ o ;
end i f ;
end process reg ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 58
▲
end B e h a v i o r a l ;
➲❏✘
Máquina de estados
type STATE_TYPE i s ( S1 , S2 , S3 , S4 ) ;
−−B o r r a r e s t a s dos í l n e a s para p e r m i t i r a l Express
−−d e t e r m i n a r l a c o d i f i c a c i o n
a t t r i b u t e ENUM_ENCODING : STRING ;
a t t r i b u t e ENUM_ENCODING of STATE_TYPE : type i s " 0001 0010 0100 1000 " ;
s i g n a l CS , NS : STATE_TYPE ;
−− Otra opcion elimando l o s comentarios s e r i a .
−− s i g n a l CS , NS : STD_LOGIC_VECTOR ( 1 downto 0 ) ;
−− c o n s t a n t S1 : s t d _ l o g i c _ v e c t o r ( 1 downto 0 ) : = " 0 0 "
−− I n s e r t a r l o s s i g u i e n t e despues de l a p a l a b r a c l a v e begin
SYNC_PROC : process ( CLOCK, RESET)
begin
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 59
▲
i f ( RESET= ’ 1 ’ ) then
➲❏✘
Máquina de estados
CS < = S1 ;
e l s i f ( CLOCK’ event and CLOCK = ’ 1 ’ ) then
CS < = NS;
end i f ;
end process ;
COMB_PROC : process ( CS, < o t r a s entradas >)
begin
case CS i s
when S1 = >
−−< a s i g n a r s a l i d a s íaqu>
i f ( < c o n d i c i o n e s > ) then
−−<ó a s i g n a c i n d e l s i g u i e n t e estado íaqu>
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 60
▲
end i f ;
➲❏✘
Máquina de estados
−− r e p e t i r para todos l o s estados .
end case ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 61
▲
end process ;
➲❏✘
Sumador serie
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y SS i s
port (
A : i n STD_LOGIC ;
B : i n STD_LOGIC ;
s : out STD_LOGIC ;
reset : in s t d _ l o g i c ;
c l k : i n STD_LOGIC
);
end SS ;
a r c h i t e c t u r e SS_arch of SS i s
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 62
▲
−−c o n s t a n t SINACARREO : STD_LOGIC : = ’ 0 ’ ;
➲❏✘
Sumador serie
−−c o n s t a n t CONACARREO : STD_LOGIC : = ’ 1 ’ ;
−− s i g n a l estado , sgte_estado : s t d _ l o g i c ;
type t i p o d e e s t a d o i s ( SINACARREO,CONACARREO) ;
s i g n a l estado , sgte_estado : t i p o d e e s t a d o ;
s i g n a l c l o c k , clock_tmp , d_s , tmp_S : s t d _ l o g i c ;
component i b u f port ( I : i n s t d _ l o g i c ; O : out s t d _ l o g i c ) ; end compone
component bufg port ( I : i n s t d _ l o g i c ; O : out s t d _ l o g i c ) ; end compone
begin
u0 : i b u f
port map ( c l k , clock_tmp ) ;
u1 : bufg
port map ( clock_tmp , c l o c k ) ;
CC : process ( estado , A , B)
begin
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 63
▲
case estado i s
➲❏✘
Sumador serie
when
SINACARREO=>
sgte_estado < = SINACARREO ;
tmp_S < = ’ 0 ’ ;
i f ( a / = b ) then tmp_S < = ’ 1 ’ ;
end i f ;
i f ( ( A = ’ 1 ’ ) and ( B = ’ 1 ’ ) ) then sgte_estado < = CONACAR
end i f ;
when CONACARREO = >
sgte_estado < = CONACARREO;
tmp_S < = ’ 1 ’ ;
i f ( a / = b ) then tmp_S < = ’ 0 ’ ;
end i f ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 64
▲
i f ( ( A = ’ 0 ’ ) and ( B = ’ 0 ’ ) ) then sgte_estado < = SiNACAR
➲❏✘
Sumador serie
end i f ;
when others = > NULL ;
end case ;
end process cc ;
r e l o j : process ( c l o c k , r e s e t )
begin
i f ( r e s e t = ’ 1 ’ ) then
estado <=SINACARREO ; s < = ’ 0 ’ ;
e l s i f ( c l o c k ’ event and c l o c k = ’ 1 ’ ) then
estado < = sgte_estado ; s < = tmp_S ;
end i f ;
end process r e l o j ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 65
▲
end SS_arch ;
➲❏✘
RAM 1x1
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y ram1x1 i s
port (
Enable : i n STD_LOGIC ; Read : i n STD_LOGIC ;
c l k : i n STD_LOGIC ;
Reset : i n STD_LOGIC ; Dato : i n STD_LOGIC ;
Sal : out STD_LOGIC
);
end ram1x1 ;
a r c h i t e c t u r e ram1x1_arch of ram1x1 i s
s i g n a l estado , sig_estado , s_temp : STD_LOGIC ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 66
▲
begin
➲❏✘
RAM 1x1
op : process ( Enable , Read , Dato )
begin
i f ( Enable = ’ 0 ’ ) then
s_temp <= ’Z ’ ;
e l s i f ( Read = ’ 1 ’ ) then
s_temp<=estado ;
else
sig_estado <=Dato ;
end i f ;
end process op ;
r e l o j : process ( c l k , r e s e t )
begin
i f ( r e s e t = ’ 1 ’ ) then
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 67
▲
sig_estado < = ’ 0 ’ ;
➲❏✘
RAM 1x1
estado < = ’ 0 ’ ;
sal <= ’0 ’;
s_temp < = ’ 0 ’ ;
e l s i f ( c l k ’ event and c l k = ’ 1 ’ ) then
estado <= s i g _ e s t a d o ;
s a l <=s_temp ;
end i f ;
end process r e l o j ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 68
▲
end ram1x1_arch ;
➲❏✘
RAM 1x1
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y ram1x1 i s
port (
Enable : i n STD_LOGIC ;
Read : i n STD_LOGIC ;
c l k : i n STD_LOGIC ;
Reset : i n STD_LOGIC ;
Dato : i n STD_LOGIC ;
Sal : out STD_LOGIC
);
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 69
▲
end ram1x1 ;
➲❏✘
RAM 1x1
a r c h i t e c t u r e ram1x1_arch of ram1x1 i s
s i g n a l estado , sig_estado , s_temp : STD_LOGIC ;
begin
op : process ( Enable , Read , Dato , estado )
begin
s i g _ e s t a d o < = estado ;
i f ( Enable = ’ 0 ’ ) then
s_temp <= ’Z ’ ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 70
▲
e l s i f ( Read = ’ 1 ’ ) then
➲❏✘
RAM 1x1
s_temp<=estado ;
else
s_temp <= ’Z ’ ;
sig_estado <=Dato ;
end i f ;
end process op ;
r e l o j : process ( c l k , r e s e t )
begin
i f ( r e s e t = ’ 1 ’ ) then
−−
sig_estado < = ’ 0 ’ ;
estado < = ’ 0 ’ ;
▲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 71
▲
sal <= ’0 ’;
➲
−−
➲❏✘
RAM 1x1
−−
s_temp < = ’ 0 ’ ;
e l s i f ( c l k ’ event and c l k = ’ 1 ’ ) then
estado <= s i g _ e s t a d o ;
end i f ;
end process r e l o j ;
s a l <=s_temp ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 72
▲
end ram1x1_arch ;
➲❏✘
l i b r a r y IEEE ;
use IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
e n t i t y ram16x2 i s
port (
D i r : i n STD_LOGIC_VECTOR ( 3 downto 0 ) ;
Read : i n STD_LOGIC ;
c l k : i n STD_LOGIC ;
Reset : i n STD_LOGIC ;
Dato : i n STD_LOGIC_VECTOR ( 0 to 1 ) ;
Sal : out STD_LOGIC_VECTOR ( 0 to 1 )
);
end ram16x2 ;
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 73
▲
a r c h i t e c t u r e ram16x2_arch of ram16x2 i s
➲❏✘
component ram1x1 port ( Enable : i n STD_LOGIC ;R : i n STD_LOGIC ; c l o c k : i n S
Res : i n STD_LOGIC ; Dat : i n STD_LOGIC ; S : out STD_
end component ;
component dec4x16 port (E : i n STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; S : out ST
end component ;
s i g n a l v e c t o r _ d i r : STD_LOGIC_VECTOR ( 0 to 1 5 ) ;
begin
u0 : dec4x16 port map( d i r , v e c t o r _ d i r ) ;
l a b e l 1 : f o r a i n 0 to 1 5 generate
wa : ram1x1 port map ( v e c t o r _ d i r ( a ) , Read , c l k , Reset , Dat
va : ram1x1 port map ( v e c t o r _ d i r ( a ) , Read , c l k , Reset , Dat
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 74
▲
end generate ;
➲❏✘
▲
➲
Tema 2. Lenguajes de Descripción de Hardware (VHDL) – 75
▲
end ram16x2_arch ;
➲❏✘
The End
c 2003 Germán León Navarro
Copyright c 2002-3 Sergio Barrachina ([email protected])
Made with the ujislides document class