Objetivos del Lenguaje Descriptor de Hardware Especificar circuitos electrónicos Simular el circuito previo a su construcción Utilizar las ventajas que brinda un compilador en el control de errores en la construcción del circuito. Ejemplos : Conectar dos salidas a un mismo nodo. Interfaces eléctricas incompatibles. ´1´ => 2.8V < Vout < 3.5V ´0´ => 0V < Vout < 0.8V Miguel Angel Sagreras () Vin < 1V => ´0´ Vin > 4V => ´1´ Introducción al VHDL 22 de abril de 2010 1 / 53 El Lenguaje Descriptor de Hardware VHDL VHDL sigla que significa VHSIC Hardware Description Language. VHSIC significa Very High Speed Integrated Circuit. Fue un programa gubernamental del Departamento de Defensa de EE.UU. Su especificación se encuentra en la NORMA IEEE-1076. Objetivos: Normalizar la descripción de los circuitos integrados de aplicación especı́fica o A.S.I.C provistos al DoD. Especificar el comportamiento de circuitos digitales pero no su construcción. Permite la descripción de los circuitos en base a tres modelos Comportamiento Estructural Data Flow Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 2 / 53 Entidad de diseño La entidad de diseño es equivalente al encapsulado de los circuitos integrados. Define cuáles son sus puertos y los modos de dichos puertos. Ejemplos de encapsulados: DIP Miguel Angel Sagreras () SMD Introducción al VHDL PLCC 22 de abril de 2010 3 / 53 Ejemplo de diseño Contador de dos bits de flanco ascendente y con una entrada de reset asincronica que cuando tenga el valor 1 las salidas deben ponerse en ’0’ Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 4 / 53 Encapsulado y entidad de diseño 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ódigo VHDL Diagrama Miguel Angel Sagreras () is Introducción al VHDL 22 de abril de 2010 5 / 53 Descripción de la Entidad de diseño Pasos a seguir Indentificar la entidad con un nombre. Definir parámetros de construcción generic. Indentificar y declarar los puertos de acceso port. Definir los modos de los puertos in, out, inout, etc. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 6 / 53 Descripción de modelos estructural y data flow Las instrucciones que se utilizan en estos modelos se llaman concurrentes. La secuencia en que se escriben no afecta el comportamiento del circuito especificado. Modelo estructural : se interconectan componentes por medio de las señales. Modelo data-flow : se asigna un valor a una señal mediante una expresión. Tambien se la conoce como Lenguaje de Transferencia de Registro o RTL. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 7 / 53 Diagrama en bloque Q0 D CLK Q D CK Q Q1 CK CLR CLR RST Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 8 / 53 Identificación de los nodos de interconexión D0 Q0 D CLK Q D CK Q Q1 CK CLR CLR RST Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 9 / 53 Identificación de los nodos de interconexión D0 D1 Q0 D CLK Q D CK Q Q1 CK CLR CLR RST Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 9 / 53 Identificación de unidades de los componentes D0 D1 Q0 FFD0 D CLK Q CK CLR D Q Q1 CK CLR RST Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 10 / 53 Identificación de unidades de los componentes D0 D1 Q0 FFD0 D CLK Q CK CLR D Q CK CLR FFD1 RST Miguel Angel Sagreras () Q1 Introducción al VHDL 22 de abril de 2010 10 / 53 Compuertas y componentes Las compuertas se pueden describir directamente con expresiones lógicas del propio lenguaje por medio de los operadores not, and, or, xor, nor, nand. Los componentes son los equivalentes de los zocalos en donde luego se conectarán los circuitos integrados representados por la entidad de diseño. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 11 / 53 Zócalos Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 12 / 53 Declaración de componentes En el diagrama se tienen dos unidades de un flip-flop D. Se debe declarar un componente cuyo nombre arbitrario será ffd que luego se referirá a una entidad que cumpla con la función de dicho flip-flop. component f f d port ( c l r : in ck : i n d : in q : out end component ; Miguel Angel Sagreras () Introducción al VHDL bit bit bit bit ; ; ; ); 22 de abril de 2010 13 / 53 Sintaxis del Cuerpo de arquitectura 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 ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 14 / 53 Cuerpo de arquitectura del contador de 2 bits 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 b i t ; ck : i n b i t ; d : in b i t ; q : out 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 <= not q0 ; d1 <= q0 xor q1 ; end ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 15 / 53 Pasos a seguir Realizar un diagrama en bloque. Identificar los nodos de interconexión. Declarar los componentes a utilizar. Declarar las señales que representan los nodos de interconexión. Interconectar los componentes a través de dichas señales. Realizar las asignaciones de señales para generar las compuertas necesarias que acompañen el circuito. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 16 / 53 Especificación completa del contador de dos bits e n t i t y cont2 port ( rst : clk : q0 : q1 : end ; 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ón al VHDL 22 de abril de 2010 17 / 53 Diagrama en bloque completo del contador de dos bits Entity cont2 Architecture mix D0 not Q0 D1 FFD0 D0 CLK in CLK D FFD CK CLR RST in Miguel Angel Sagreras () Q0 Q0 xor buffer Q1 FFD1 Q Q0 D1 CLK component instantiation RST D FFD Q1 Q1 buffer CK CLR RST Introducción al VHDL Q component instantiation 22 de abril de 2010 18 / 53 Diseño por modelo de comportamiento El circuito se especifica en base a una secuencia de instrucciones que indica como sus salidas se modifican en base al valor y/o cambio de sus entradas. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 19 / 53 Entidad de diseño del flip-flop D FFD D Q CK CLR entity ffd is port ( c l r : in ck : in d : in q : ou t end ; ; ; ; ); Código VHDL Diagrama Miguel Angel Sagreras () bit bit bit bit Introducción al VHDL 22 de abril de 2010 20 / 53 Descripción por comportamiento Cuerpo de arquitectura del flip-flop D 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 ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 21 / 53 Entidad de simulación 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 ; Miguel Angel Sagreras () Introducción 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 0 100 200 300 400 500 141 ns Entity:testbench Architecture:simul Date: Thu Aug 17 15:49:27 ART 2006 Row: 1 Page: 1 Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 23 / 53 Descripción por comportamiento El circuito digital se describe en base a una secuencia de instrucciones que se llaman secuenciales Las instrucciones secuenciales solo pueden ir dentro de un bloque que permita su uso. Dichos bloques solo permiten este tipo de instrucciones y se encuentran en las instrucciones process, function, procedure Las instrucciones secuenciales son las siguientes : if-then-else case loop next exit Miguel Angel Sagreras () return wait asignación de señales asignación de variables llamadas a procedimientos Introducción al VHDL 22 de abril de 2010 24 / 53 Instrucción process Es una instrucción concurrente. Su bloque de instrucciones permite la descripción de circuitos en base al modelo de comportamiento. Sintaxis : [ etiqueta : ] process [ ( lista de sensibilidad ) ] declaraciones begin instrucciones end process ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 25 / 53 Instrucción process Bloque de instrucciones Pueden ir todas instrucciones secuenciales excepto por la instrucción return. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 26 / 53 Instrucciones secuenciales if-then-else [ etiqueta: ] if condición then secuencia de instrucciones secuenciales { elsif condición then secuencia de instrucciones secuenciales } [ else secuencia de instrucciones secuenciales ] end if ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 27 / 53 Instrucciones secuenciales Ejemplo de uso de la instrucción if-then-else Descripción por medio del modelo de comportamiento el circuito lógico correspondiente al siguiente mapa de Karnaugh: X0 X2 X1 X3 00 00 01 1 1 01 11 1 1 11 10 Miguel Angel Sagreras () 10 1 1 Introducción al VHDL 1 22 de abril de 2010 28 / 53 Ejemplo de uso de la instrucción if-then-else Entidad de diseño FUN X0 X1 X2 O X3 Miguel Angel Sagreras () e n t i t y FUN port ( x0 x1 x2 x3 o end ; Introducción al VHDL is : : : : : in in in in out bit bit bit bit bit ; ; ; ; ); 22 de abril de 2010 29 / 53 Descripción por comportamiento a r c h i t e c t u r e compt o f f u n i s begin p r o c e s s ( x0 , x1 , x2 , x3 ) begin o <= ’ 0 ’ ; i f x0 = ’0 ’ t h e n i f x2 = ’0 ’ i f x3 = ’0 ’ t h e n o <= ’ 1 ’ ; e l s i f x1 = ’1 ’ t h e n ; o <= ’ 1 ’ ; end i f ; e l s i f x3 = ’0 ’ and x1 = ’0 ’ t h e n o <= ’ 1 ’ ; end i f ; else i f x1 = ’1 ’ t h e n i f x2 = ’0 ’ and x3 = ’1 ’ t h e n o <= ’ 1 ’ ; e l s i f x2 = ’1 ’ and x3 = ’0 ’ t h e n o <= ’ 1 ’ ; end i f ; e l s i f x2 = ’1 ’ and x3 = ’1 ’ t h e n o <= ’ 1 ’ ; end i f ; end i f ; end p r o c e s s ; end ; Miguel Angel Sagreras () X0 X2 X1 0 0 X3 00 1 01 01 11 1 1 1 11 10 Introducción al VHDL 10 1 1 1 22 de abril de 2010 30 / 53 Instrucciones secuenciales Instrucción case — — [ etiqueta : ] case expresión is when value { value } => secuencia de instrucciones secuenciales { when value { value } => secuencia de instrucciones secuenciales } end case ; value puede ser others en referencia el resto de los casos no enumerados. Ejemplo : case x i s when ” 00 ” | ” 11 ” => z <= ’ 1 ’ ; when o t h e r s => z <= ’ 0 ’ ; end c a s e ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 31 / 53 Declaración de tipos Un tipo se caracteriza por un conjunto de valores y un conjunto de operaciones. Por ejemplo el tipo bit permite tener solo dos valores el ’1‘ y el ’0‘. Un tipo más concreto permitirı́a poseer otros valores como por ejemplo 0 débil, 1 débil, etc. Dos tipos distintos podrı́an caracterizar dos interfaces electricas diferentes. Los tipos se declaran en la parte declarativa de cualquier instrucción. Miguel Angel Sagreras () Introducción 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: — type identifier is ( emumeration literal {, emumeration literal } ) emumeration literal ::= identifier character literal identifier es una de las alternativas posibles que puede tener dicho tipo descripto como un identificador. Ej: TRUE, FALSE character literal es otra forma de representar una alternativa como un caracter. Ej: ’1‘, ’0‘. Ejemplos : type bit is ( ’0‘, ’1’) ; type boolean is ( FLASE, TRUE ) ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 33 / 53 Declaración de variables Se declaran en la parte declarativa de las instrucciones cuyo bloque sólo 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 tendrán las variables de datos declaradas. Ej : bit . := expression inicializa la lista de variables con el valor de la expresión. Ej : := ’1‘ Ejemplo : variable aux : bit := ’1’; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 34 / 53 Asignación de variables variable assignment statement :== [ label : ] target := expression ; target es el nombre de la variable que se quiere asignar. Ej : aux. expression es una expresión cuyo valor se asignará en la variable. Ej : cols*rows Ejemplo : aux := cols*rows ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 35 / 53 Diagrama en bloque de un circuito de Mealy X Q n C O M B I N A C I O N A L O Q n+1 M E M O R I A Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 36 / 53 Ejemplo de un circuito de Mealy Entidad de diseño y Diagrama de estados X/O 0/1 SEQMLY X O 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 B 1/0 0/0 Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 37 / 53 Ejemplo de un circuito de Mealy Cuerpo de arquitectura y tabla de transiciones a r c h i t e c t u r e beh o f s e q m l y i s begin process ( clk , x ) type e s t a d o s i s ( a , b , c ) ; variable estado : estados ; begin i f c l k = ’1 ’ and c l k ’ e v e n t t h e n i f x = ’0 ’ t h e n case estado i s when a => e s t a d o := a ; when b => e s t a d o := c ; when c => e s t a d o := a ; end c a s e ; else e s t a d o := b ; end i f ; end i f ; i f x = ’0 ’ t h e n case estado i s when a => o <= ’ 1 ’ ; when o t h e r s => o <= ’ 0 ’ ; end c a s e ; else o <= ’ 0 ’ ; end i f ; end p r o c e s s ; end ; Miguel Angel Sagreras () Introducción al VHDL X q 0 1 A A ,1 B ,0 B C ,0 B ,0 C A ,0 B ,0 22 de abril de 2010 38 / 53 Diagrama en bloque de un circuito de Moore C O M B I N A C I O N A L X Q n Miguel Angel Sagreras () Q n+1 C O M B I N A C I O N A L M E M O R I A Introducción al VHDL O 22 de abril de 2010 39 / 53 Ejemplo de un circuito de Moore Entidad de diseño y diagrama de estados SEQ 00 X Q(0) 1 1 0 CLK Q(1) 0 11 01 0 e n t i t y seq port ( clk x q end ; 0 is : in bit ; : in bit ; : out b i t v e c t o r ( 0 t o 1 ) ) ; Miguel Angel Sagreras () 1 Introducción al VHDL 1 10 22 de abril de 2010 40 / 53 Ejemplo de un circuito de Moore Cuerpo de arquitectura y tabla de transiciones a r c h i t e c t u r e beh o f s e q i s begin process ( clk ) v a r i a b l e e s t a d o : b i t v e c t o r ( 1 downto 0 ) ; begin i f c l k = ’1 ’ and c l k ’ e v e n t t h e n i f x = ’0 ’ t h e n case estado i s when ” 00 ” => e s t a d o := ” 01 ” ; when ” 01 ” => e s t a d o := ” 10 ” ; when ” 10 ” => e s t a d o := ” 11 ” ; when ” 11 ” => e s t a d o := ” 00 ” ; end c a s e ; else case estado i s when ” 00 ” => e s t a d o := ” 11 ” ; when ” 01 ” => e s t a d o := ” 00 ” ; when ” 10 ” => e s t a d o := ” 01 ” ; when ” 11 ” => e s t a d o := ” 10 ” ; end c a s e ; end i f ; q <= e s t a d o ; end i f ; end p r o c e s s ; Miguel Angel Sagreras () Introducción al VHDL X q 0 1 00 01 11 01 10 00 10 11 01 11 00 10 22 de abril de 2010 41 / 53 Diagrama en bloque de un circuito asincrónico X y c o m b i n a c i o n a l Z Y retardos Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 42 / 53 Ejemplo de un circuito asincrónico Entidad de diseño y diagrama de estados ASINC XY 00 01 11 10 a b a a 0 a b c −− 0 d c c c 1 d c −− a 1 Y Z Z X entity asinc is port ( x : in bit ; y : in bit ; z : out b i t ) ; end ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 43 / 53 Ejemplo de un circuito asincrónico Cuerpo de arquitectura 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ón al VHDL 22 de abril de 2010 44 / 53 Instrucción loop loop statement ::= [ loop label : ] [ iteration scheme ] loop sequence of statement end loop ; — iteration scheme ::= while condition for identifier in discrete range discrete range indica un rango de valores. Ej : 0 to 9. Los rangos también pueden ser identificadores que representen un discrete range. identifier es el nombre de un ı́ndice que puede referenciarse luego dentro del loop. Alcanza los valores especificados por discrete range. Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 45 / 53 Instrucción next [ label : ] next [ loop label ] [ when condition ] ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 46 / 53 Instrucción next : Ejemplo I etiqueta1: loop etiqueta2: loop secuencia_de_instrucciones If ...... then next; end if; secuencia_de_instrucciones end loop; secuencia_de_instrucciones end loop; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 47 / 53 Instrucción next etiqueta1: loop etiqueta2: loop secuencia_de_instrucciones If ...... then next etiqueta1; end if; secuencia_de_instrucciones end loop; secuencia_de_instrucciones end loop; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 48 / 53 Instrucción exit [ label : ] exit [ loop label ] [ when condition ] ; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 49 / 53 Instrucción exit : Ejemplo I etiqueta1: loop etiqueta2: loop secuencia_de_instrucciones If ...... then exit; end if; secuencia_de_instrucciones end loop; secuencia_de_instrucciones end loop; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 50 / 53 Instrucción exit : Ejemplo II etiqueta1: loop etiqueta2: loop secuencia_de_instrucciones If ...... then exit etiqueta1; end if; secuencia_de_instrucciones end loop; secuencia_de_instrucciones end loop; Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 51 / 53 Descripción de la sintaxis Los nombres en minúsculas se usan para indicar una categorı́a sintáctica. Por ejemplo: expression Las palabras escritas en negritas simbolizan palabras claves. Por ejemplo : array, port, entity, . . . . — Una expresión sintáctica consiste de un lado izquierdo, el sı́mbolo ::= que se puede leer como “se reemplaza por”, y un lado derecho. El lado izquierdo es una categorı́a sintáctica, el lado derecho es la regla que lo reemplaza. — — La barra vertical ” ”separa alternativas a menos que ocurra inmediatamente después de la apertura de una llave ”{”, en ese caso significa él mismo. letter or digit ::= letter digit choices ::= chioce { choice } — Los corchetes [ ] encierran items opcionales. Las siguientes expresiones son equivalentes. return statement ::= return [ expression ] ; return statement ::= return ; return expression ; — Las llaves { } encierran items que se repiten en el lado derecho de la expresión. Los items pueden aparecer cero o más veces. Las siguientes expresiones son equivalentes. term ::= factor multiplying operator factor term ::= factor { multiplying operator factor Miguel Angel Sagreras () Introducción al VHDL 22 de abril de 2010 52 / 53