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