Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SENTENCIAS
Las Sentencias: => Tipos de sentencia: - Sentencias concurrentes: - Se ejecutan al mismo tiempo (en paralelo). - No hay prioridad entre unas y otras. - Describen paralelismo. - El comportamiento es independiente del orden en el que son escritas. - Las sentencias concurrentes equivalen a procesos. - Forman el cuerpo de las arquitecturas y bloques y pueden aparecer en las entidades. - Sentencias secuenciales: - Se ejecutan ordenadamente, una despus de otra. - El orden de las sentencias es relevante. - Las sentencias que se encuentran dentro de los procesos son secuenciales. => Palabras clave de VHDL k son como se agrupan y tal (No puesto en los apuntes)
- Palabra clave:
No soportada en sntesis
- Palabra clave:
Ignorada en sntesis
* Aadidas en VHDL 93
1. SENTENCIAS SECUENCIALES
- Permiten describir un modelo de forma algortmica. - Slo pueden utilizarse en procesos o en los cuerpos de subprogramas. - Se ejecutan secuencialmente, una sentencia se ejecuta completamente antes de pasar a la siguiente. - VER AL FINAL DE ESTE APARTADO EL FUNCIONAMIENTO DE UN PROCESO Sentencias Secuenciales: Wait Asignaciones: De seal. De variable. Sentencias de control: If Case loop, next,exit. Assert Report
1.2 Asignaciones
- Asignar un valor a una seal es darle un valor a la misma Sintaxis:
nombre_seal <= [ transport] forma_de_onda {after expresion tiempo};
Se puede indicar la cantidad de tiempo que debe transcurrir antes de que la seal tome el valor. Este retardo puede modelarse de tres formas distintas: Delta: Modo por defecto si no se especifica ningn tiempo. Transporte: indica el retardo de propagacin solamente. Inercial: indica el retardo de propagacin y la anchura de pulso mnima. 1) Retardo delta. Es el modo de retardo de propagacin en las asignaciones a seal por defecto La seal toma el valor aplicado despus de un retardo delta. Delta es una unidad de tiempo infinitesimal. Las asignaciones de seal NO tienen lugar inmediatamente. Un retardo delta no implica actualizar el tiempo de simulacin pero si realizar un nuevo ciclo de simulacin. Da soporte al modelado de ejecucin concurrente. Permite obtener el valor que toman las seales independientemente del orden de ejecucin de los procesos. Output <= not Input; 2) Retardo transporte. El retardo transporte debe especificarse explcitamente por medio de la palabra clave transport. La seal tomar el nuevo valor despus del tiempo indicado. Output <= transport not (Input) after 10 ns; 3) Retardo inercial. Se indica el tiempo de propagacin y la anchura del pulso: seal <= [reject expresin_temporal] inertial forma_de_onda;
- Ejemplo de inversor con inercia menor que el retardo de propagacin Output <= reject 5 ns inertial not (Input) after 10 ns;
El inversor tiene un tiempo de propagacin de 10 ns eliminando los pulsos deduracin inferior a 5 ns. En sintesis: - After y Transport se ignoran - Reject y Inertial no estn soportados
- Bucle con while Sintaxis: while condicin_booleana loop secuencia_de_sentencias end loop; El bucle se ejecuta mientras la condicin booleana sea cierta. No resulta ventajoso respecto a for-loop.
Sentencia exit. Sintaxis: [label:] exit [etiqueta_bucle ] [ when condicin ] ; Permite finalizar la ejecucin de un bucle. Si existen varios bucles anidados exit sale del bucle ms interno en el que se encuentre o del bucle cuya etiqueta se especifique. Se puede utilizar en cualquiera de los tres tipos de bucles. Sentencia next. Sintaxis. [label:] next [etiqueta_bucle ] [ when condicin ] ; Permite saltar a la siguiente iteracin dentro de un bucle. Se puede utilizar en cualquiera de los tres tipos de bucles. La condicin y la etiqueta tienen el mismo uso que en exit.
- El nivel de severidad: note, warning, error, failure (error por defecto) - Segn el grado de severidad se puede interrumpir la simulacin. - S no se usa report el mensage es Assertion violation
C <= A after t_delay when (S='0') else B after t_delay; assert (S='0' or S='1') report Valor desconocido en S" severity error;
1.6 PROCESOS
Son sentencias concurrentes que definen su comportamiento a travs de sentencias secuenciales. Las instrucciones dentro del proceso se ejecutan secuencialmente, una detrs de otra, pero sin dar lugar a que avance el tiempo durante su ejecucin
[etiqueta: ] [postponed] process [( lista_sensibilidad) ] [ is ] declaracin_subprogramas cuerpo_subprogramas declaracion_tipos declaracion_subtipos declaracin_constantes declaracin_variables declaracin_ficheros declaracin_alias declaracion_atributos especificacion_atributos clausula use declaracin_plantilla_grupos declaracin_grupos begin {sentencias_secuenciales}; end [postponed] process [ etiqueta] ;
Los procesos se disparan (su cdigo se ejecuta) cuando cambia alguna de las seales en su lista de sensibilidad Conjunto de seales que al producirse un evento en ellas puede lanza el proceso - El tiempo slo avanza cuando el proceso se suspende, es decir, cuando termina o llega a un wait. La sentencia wait suele fijar las condiciones para despertar al proceso. No pueden coexistir la lista de sensibilidad y la sentencia wait - Cuando un proceso se suspende: Se vuelve a ejecutar cuando haya otro evento en una de sus seales de la lista de sensibilidad o cuando se cumpla la condicin del wait (se sigue ejecutando a partir del wait) - Las seales modelan hilos del circuito, slo pueden cambiar de valor si se deja que avance el tiempo y como el tiempo solo pasa cuando se suspende un proceso Las seales solo pueden cambiar cuando se suspende el proceso
Una arquitectura puede tener tantos procesos como queramos, y todos se van a ejecutar en paralelo - Esta es la manera que tiene VHDL de expresar la concurrencia inherente al hardware - Los simuladores VHDL slo trabajan con procesos. Las declaraciones realizadas en los procesos son locales. - Las variables declaradas en un proceso no pierden su valor una vez finalizado el proceso. - Las variables slo se inicializan al comienzo de la simulacin. - Lista de sensibilidad: Conjunto de seales que pueden despertar al proceso cuando se produce un evento en alguna de ellas. - En modelos de circuitos combinacionales se deben incluir todas las seales de entrada. - En circuitos secuenciales se deben incluir la seal de reloj y las seales asncronas. Si la lista de sensibilidad est incompletamente definida los resultados de simulacin y sntesis pueden ser distintos.
2. SENTENCIAS CONCURRENTES
Permiten modelar el paralelismo del hardware. Tipos: Asignaciones concurrentes a seal. Procesos (ya estudiados). Instanciacin de componentes. Sentencia generate. Bloques. Sentencia assert concurrente.
- Ejemplo sumador elemental s<= a xor b xor c_in; c_out<= (a and b) or (a and c_in) or (b and c_in); => Asignaciones a seal en la sntesis. Las asignaciones concurrentes de seal tienen restricciones: Toda clusula after ser ignorada. No se permiten mltiples formas de onda. No se permiten especificaciones de deteccin de flancos de reloj. La clusula unaffected no est soportada. Las clusulas transport, guarded y otros mecanismos de retardo se ignoran. Se permiten asignaciones concurrentes: Condicionales: equivalen a un proceso con sentencias if. Con seleccin: equivalen a un proceso con sentencias case. => Asignacin a seal concurrente condicional: Asigna el valor a la seal cuando se cumple la condicin booleana Se usa mediante when nombre_seal <= [ transport] {forma_de_onda when expresin_booleana else} [forma_de_onda when expresin_booleana ]; => Asignacin a seal concurrente con seleccin. Asigna el valor a la seal cuando se cumple la expresion Se usa mediante when with expresin select nombre_seal <= [ transport] forma_de_onda when valor forma_de_onda when valor; Cuando valor = expresin asigna la forma de onda correspondientes
2.2 Componentes
Representa una entidad declarada en un diseo o librera. Para poder utilizar la entidad es necesario llamar a la librera y al paquete dentro del cual se encuentra. Permiten realizar descripciones estructurales. Sintaxis de la declaracin de componentes. component identificador [is] [ genenic (lista_genricos);] [ port (lista_puertos);] end component [identificador]; - Sirve para declarar una entidad que vamos a usar de otra librera para luego instanciarla => Instanciacin: Una vez declarado el componente de una entidad de una librera, podemos utilizar dicha entidad en nuestro cdigo instancindola cuantas veces queramos (Descripcin estructural) Instanciacin de componentes: Es una instruccin concurrente que especifica la interconexin de las seales del componente dentro del diseo en el que est siendo utilizado. Sintaxis. etiqueta_referencia: nombre_componente [ genenic map lista_asociacin]; [ port map lista_asociacin]; - Ejemplo:
- VHDL- 93 permite referenciar un componente sin haberlo declarado con anterioridad. No hace falta declarar la entidad con la sentencia component Para ello escribimos: a1: entity puerta_y generic map (14 ns); port map (s2,din,ctrla);
Ejemplo:
2.4 BLOQUES. La sentencia block es una forma de reunir o agrupar sentencias concurrentes. Proporcionan un mecanismo de particionar una arquitectura. Favorecen la legibilidad y estructuracin de los diseos. Los objetos slo son visibles por las sentencias englobadas en la sentencia block. Los bloques se pueden anidar para definir una particin jerrquica. Sintaxis: identificador: block [condicion_guarda] [is] [parte_declarativa] begin {sentencias concurrentes} end block [ indentificador]; Ejemplo:
10
3. SUBPROGRAMAS
- Se utilizan para escribir algoritmos reutilizables. - Permite agrupar cdigo para no repetirlo muchas veces. - Ayudan a mejorar la descripcin y legibilidad de los modelos. - Son similares a los subprogramas de los lenguajes software. - Pueden estar en los paquetes y en la parte declarativa de las arquitecturas. - Tipos: Funciones. Procedimientos.
3.1 FUNCIONES
No se pueden modificar seales o variables externas a la funcin. Slo puede leer los parmetros que se le pasan. Siempre han de devolver un valor. Se ejecutan en tiempo nulo No transcurre tiempo entre la llamada a la funcin y la devolucin del resultado. Los parmetros se asocian por posicin. Puede contener mltiples sentencias return. En la parte declarativa se declaran constantes y variables. Cuando se ejecuta la funcin se inicializan las variables. Sintaxis. Declaracion de la funcin. function nombre_funcin [(lista_parametros)]return tipo_retorno; Definicin del cuerpo de la funcin. function nombre_funcin [(lista_parametros)]return tipo_retorno is;
{parte declarativa} begin {sentencias secuenciales} end [function][nombre_funcion];
Ejemplo: function add_bits (a, b : in bit) return bit is variable result : bit; begin result := (a xor b); return result; end add_bits2;
11
3.2 PROCEDIMIENTOS
Pueden modificar datos (parmetros o datos externos). Puede retornar mltiples valores. Los parmetros formales que se pasan pueden ser de tres tipos: In solo pueden leerse. Out (seales y variables) slo se puede hacer una asignacin sobre ellos. Inout (seales y variables) se pueden leer y variar su valor. En la parte declarativa se declaran constantes y variables. Cuando se ejecuta el procedimiento se inicializan. Asociacin de parmetros por posicin o nombre. Pueden utilizar return, sin ir acompaado de una expresin. Sintaxis. - Declaracion del procedimiento. procedure nombre_procedimiento [(lista_parametros)] ; - Definicin del cuerpo del procedimiento procedure nombre_ procedimiento [(lista_parametros)] is; {parte declarativa} begin {sentencias secuenciales} end [procedure ][nombre_ procedimiento ]; - Ejemplo
12
3.3 SOBRECARGA DE SUBPROGRAMAS. Dos subprogramas estn sobrecargados cuando tienen el mismo nombre y diferentes perfiles (nmero, orden y tipo de sus parmetros). Ejemplo: FUNCTION "and" ( l,r : std_logic_vector ) RETURN std_logic_vector; FUNCTION "and"( l,r : std_ulogic_vector ) RETURN std_ulogic_vector; function "+" (A, B: integer) return integer; function "+" (A, B: bit_vector) return bit_vector; VHDL permite declarar varios subprogramas con diferentes parmetros Se dice que el subprograma est sobrecargado El lenguaje usa un subprograma u otro, dependiendo de los parmetros y tipos usados. Todos los operadores predefinidos estn sobrecargados. VHDL no permite que se realicen mltiples asignaciones concurrentes a una seal OBVIO !! - Si pueden ser mltiples asignaciones secuenciales. VHDL permite definir seales que pueden tomar su valor de diferentes fuentes (resolved signals). Son las que tienen una funcin de resolucin (resolution function).
- Una funcin de resolucin es aquella que: 1- Toma como entrada un vector unidimensional no restringido con los valores de todas las fuentes de la seal resuelta y 2 - devuelve el valor que debe recibir la seal. Cada vez que se hace una asignacin a esa seal se llama a la funcin. El nmero de elementos del vector es igual al nmero de fuentes que tenga la seal. Las fuentes de una seal vienen determinadas por las sentencias de asignacin y por las salidas de los componentes conectados a la seal.
13
- Se puede asignar una funcin de resolucin a un subtipo de datos, de forma que las seales de este subtipo no deben especificar la funcin de resolucin.
14