Sentencia Process

 VHDL presenta una estructura particular denominada process que define los límites de un dominio que se ejecutará (simulará) si y sólo si alguna de las señales de su lista de sensibilidad se ha modificado en el anterior paso de simulación. Un process tiene la siguiente estructura:

process (lista_de_sensibilidad) 
-- asignacion de variables 
-- opcional no recomendable 
begin 
-- Sentenicas condicionales 
-- Asignaciones end process; 


La sentencia process es una de las más utilizadas en programación con VHDL ya que tanto las sentencias condicionales como la descripción de HW secuencial se realiza dentro de él. Pero a la vez es, para aquellos que se acercan por primera vez a la simulación y síntesis con VHDL, el principal problema para un correcto diseño. Por eso a continuación se van a enumerar una serie de normas relacionadas directamente con las propiedades de la sentencia process, que serán de obligado cumplimiento para que el código generado simule y sintetice de manera correcta. 

Propiedad I: 

En una estructura process sólo se ejecutan las instrucciones internas en el instante 0 de simulación y cuando varía alguna de las señales de su lista de sensibilidad. 

Problema: El resultado de la simulación del circuito puede ser inesperada debido al efecto maligno de la lista de sensibilidad. 

Solución: En la lista de sensibilidad han de incluirse al menos todas las señales que se lean dentro del process (señal_escritura <= señal_lectura). 

------------------------- 
-- Efecto de la lista 
-- de sensibilidad 
------------------------- 
process (A) 
    begin 
    if B=’1’ then 
        C <= A; 
    end if; 
end process; -------------------------

Propiedad II: 
Las asignaciones a señales que se realizan dentro de un process tienen memoria. 

Problema: Si en un paso de simulación se entra dentro del process y debido a las sentencias internas se modifica el valor de la señal C, y en otro paso de simulación posterior se entra dentro del process pero no se modifica C, la señal C conservará el valor asignado con anterioridad. El resultado de la simulación del circuito puede ser inesperado debido al efecto maligno de la memoria del process.

Solución: Siempre que se escriba una sentencia condicional es obligatorio asegurar el valor que deben tener todas las señales en cada rama del árbol condicional. Además, excepto si la definición del diseño nos lo prohíbe (ver capítulo 5), toda condición debe tener su rama else.

---------------------------
-- Condicional completo
---------------------------
process (a, b)
begin
    if a = b then
         c <= a or b;
    elsif a<b then
         c <= b;
    else
         c <= “00”;
    end if;
end process;
--------------------------

--------------------------
-- Condicional incompleto
--------------------------
process (a, b)
begin
    if a = b then
        c <= a or b;
    elsif a<b then
        c <= b;
    end if;
end process;
--------------------------

En el primer código existe una rama else, lo que implica que en caso de que no se cumpla alguna de las dos condiciones existe un valor por defecto para C (en este caso en 5 ns). Sin embargo, en el segundo código la rama else ha desaparecido, eso hace que en el instante 5 ns para los mismos valores de A y de B se obtenga un resultado de C distinto (comparar resultados de caso 1 y caso 2 en el segundo código). Eso es debido a que los Introducción a la Programación en VHDL 26 F. Informática (UCM) process tienen memoria y como la relación entre A y B que se da en 5ns no está contemplada en el segundo código se guarda el valor obtenido con anterioridad. Obsérvese que en el ejemplo del condicional completo, el caso 1 y el caso 2 en 5ns tienen los mismos valores de A y B y se obtiene el mismo valor de C. 


https://eprints.ucm.es/id/eprint/26200/1/intro_VHDL.pdf

Comentarios

Entradas populares de este blog

ARREGLO LOGICO GENERICO (GAL)

Función "rising_edge" para VHDL

Señal del reloj en VHDL