SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO ENTIDAD: ARQUITECTURA: ENTITY <nombre_ent> IS PORT <señai1 >: <modo> <tipo> <señai1>: <modo> <tipo> END <nombre ent>; <modo> = IN / OUT / IN OUT ARCHITECTURE <nombre_arch> OF <nombre_ent> IS <declaraciones1 > <sentencias concurrentes> <PROCESS (<lista de señales>) <declaraciones2> END PROCESS;> END <nombre_arch>; <declaraciones1 > = <declaraciones2> = declaraciones de tipos declaraciones de señales, constantes declaraciones de subprogramas declaraciones de tipos declaraciones de variables, constantes declaraciones de subprogramas OBJETOS DE LA DESCRIPCIÓN: Señales (SIGNAL): Variables (VARIABLE): Constantes (CONSTANT): globales en la descripción locales en cada proceso según dónde se declaren TIPOS DE DATOS: Escalares Estándar bit : ( 0, 1 ) Estándar boolean : (false, true) Estándar integer : <range n to m ó range m downto n> Estándar positive : (integer = 1) Estándar natural : (integer = 0) def. por usuario enumerados : <definidos por el usuario> type colores is (blanco, rojo, azul) IEEE.std.logic.1164 std_iogic : ( U, X, 0, W, L, H, Z, - ) Pág. 1
Arrays Estándar bit_vector : (m to n); (n downto m) IEEE.std.logic.1164 std_iogic_vector : (m to n); (n downto m) def. por usuario arrays : type int_array is array (7 downto 0) of integer; Definición de tipos: TYPE mio IS (t1, t2, t3), Declaración de constantes. señales v variables: CONSTANT c1 : bit_vector( 3 downto O) := "0000"; SIGNAL s1 : mio; VARIABLE v1 : bit; OPERADORES: Tipo Datos entrada Devuelve Operadores Lógicos Bit, bolean, std_logic Bit, Boolean std_logic Not, and, or, nand, Nor, xor Relación Cualquiera Bolean =, /=, <, <=, >, >= Aritméticos Integer Positive, natural Integer Positive, natural +, -, /, *. ** ABS, MOD, REM Concatenación Cualquiera (homogéneo) Array de elementos & ATRIBUTOS: <signal> 'EVENT: devuelve true cuando la señal cambia de valor ej: clk='1' and clk'event (cierto cuando hay un flanco de subida en clk) <array> 'RANGE: devuelve el rango del vector ej: signal A: std_iogic_vector (7 downto O) for i in A'range loop es equivalente a: for i in 7 downto 0 loop SENTENCIAS CONCURRENTES: Asignación simple de señal: <señal destino> <= <señal_1> <Señal destino> <= <expresión> Asignación condicional: <señal_destino> <= <señal1> WHEN <condición 1> ELSE <señal2> WHEN <condición2> ELSE <señaln>; Asignación selectiva: WITH <señal_cond> SELECT <señal_destino> <= <señal1> WHEN <value 1>, <señal2> WHEN <value 2>, <señaln> WHEN OTHERS; Pág. 2
SENTENCIAS SECUENCIALES (dentro de procesos, funciones o procedimientos): if_then_else: IF <cond1> THEN <sentencias 1 > ; ELSIF <cond2> THEN END IF; case_is_when: CASE <expresión> IS WHEN <valor 1> => <sentencias1>; WHEN <valorn> => <sentenciasn>; END CASE; for_loop: FOR <indice> IN <rango> LOOP <sentencias> END LOOP; (el índice de los bucles for no tiene que declararse) asignación de señal: <señal_destino> <= <expresión>; asignación de variable <var_destino> := <expresión>; PROCESOS: <nomb_proceso>: PROCESS (<lista de sensibilidad>) END PROCESS <nombre_proceso>; Pág. 3
PROCEDIMIENTOS: PROCEDURE <nom_procedimiento> (<parámetros>) IS <declaraciones> END <nom_procedimiento>; FUNCIONES: FUNCTION <nom_función> (<parámetros>) RETURN <tipo> IS <declaraciones> RETURN <valor retorno>; END <nom_función>; SENTENCIAS ESTRUCTURALES: COMPONENT: COMPONENT <nom_componente> PORT ( <señai1 >:-<modo> <tipo>; <señai1>: <modo> <tipo> ); END COMPONENT; <nom-copia-componente> : <nom-componente> POR MAP (<asignaciones); Pág. 4
GENERATE: COMPONENT <nom_componente> PORT ( <señai1 >:-<modo> <tipo>; <señai1>: <modo> <tipo> ); END COMPONENT; <nom-elemento> : FOR <indice> IN <rango> GENERATE nom-subelemento>: <nom-componente> PORT MAP (<asignaciones señales>); END GENERATE <nom-elemento>; SENTENCIAS DE ESPERA: AFTER: en asignaciones concurrentes o secuenciales <señal><= <valor1> AFTER <tiempo1>ns, <valor2> AFTER <tiempo2>ns ; WAIT: sentencia secuencial WAIT FOR <tiempo>ns; WAIT UNTIL <condicion>; WAIT ON <lista de sensibilidad>; Pág. 5
BIBLIOTECAS DE TIPOS Y FUNCIONES STD_LOGIC_1164 ( Use ieee.std_logic_1164.all ) TIPOS: STD_ULOGIG; STD_ULOGIC_VECTOR; STD_LOGIC; STD_LOGIC_VECTOR; X01; X01Z; UX01; FUNCIONES: TO_BIT (STD_ULOGIC) RETURN BIT TO_STDULOGIC (BIT) RETURN STD_ULOGIC TO_BITVECTOR (STD_LOGIC_VECTOR) RETURN BIT_VECTOR TO_STDLOGICVECTOR(BIT_VECTOR) RETURN STD_LOGIC_VECTOR TO_BITVECTOR (STD_ULOGIC_VECTOR) RETURN BIT_VECTOR TO_STDULOGICVECTOR(BIT_VECTOR) RETURN STD_ULOGIC_VECTOR TO_STDLOGICVECTOR(STD_ULOGIC_VECTOR) RETURN STD_LOGIC_VECTOR TO_STDULOGICVECTOR(STD_LOGIC_VECTOR) RETURN STD_ULOGIC_VECTOR STD_LOGIC_ARITH ( Use ieee.std_logic_arith.all ) TIPOS UNSIGNED SIGNED FUNCIONES CONV_INTEGER (UNSIGNED) RETURN INTEGER CONV_UNSIGNED (INTETER, INTEGER) RETURN UNSIGNED Pág. 6
CONV_STD_LOGIC_VECTOR (ARG: INTEGER, SIZE: INTEGER) RETURN STD_LOGIC_VECTOR CONV_STD_LOGIC_VECTOR (ARG: UNSIGNED, SIZE: INTEGER) RETURN STD_LOGIC_VECTOR STD_LOGIC_TEXTIO ( Use ieee.std_logic_textio.all ) TIPOS LINE TEXT FILE FUNCIONES WRITE (<variable> : LINE, <señal>) WRITELINE (OUTPUT, <variable>: LINE) WRITELINE (<variable>: FILE, <veriable> : LINE) ARCHITECTURE <nom_architecture> OF <nom_entity> IS SIGNAL A1, A2: BIT; PROCESS <nombre_proceso> VARIABLE lout: LINE; FILE fichero: TEXT is OUT salida.txt ; WRITE(lout, A1); WRITE(lout, ); WRITE(lout, A2); WRITELINE (OUTPUT, lout); WRITELINE(fichero, lout); END PROCESS; END <nom_architecture>; Pág. 7