palabra clave impura VHDL

1

Tengo un código vhdl en este sentido (explicación a continuación):

architecture arc of anEntity is
  signal x1_sig : T;
  signal x2_sig : T2;

  function test(x1: T, x2: T2) return boolean is
  begin
    if complicatedConditionWith x1 and x2 then
        return true;
    else
        return false;
    end if;
  end function;
begin
  p1: process (...) is
    impure function test return boolean is
    begin
      return test(x1_sig,x2_sig);
    end function;
  begin
    ...
    if test then --occurs several times
    ...
  end process;
end architecture;

Para facilitar la escritura y la legibilidad, puse una condición complicada en una función. Ya que soy perezoso y siempre uso el mismo signals con esa función, agregué una taquigrafía al proceso donde uso esta función principalmente. Sin embargo, Modelsim se quejó de los accesos a una señal de una función pure , así que agregué el modificador impure . A mi entender, esto le dice al compilador que la función podría tener efectos secundarios, aunque, dado que solo accedo a todo lo que lee (en c, uno podría definir los parámetros de la función como const ) considero que mi función no tiene efectos secundarios. ¿La adición de impure tiene efectos secundarios negativos en el resultado de la síntesis?

    
pregunta ted

1 respuesta

4

Una función "pura", además de no tener efectos secundarios, también devuelve el mismo resultado cada vez que se evalúa con los mismos argumentos. La importancia de esto es permitir las optimizaciones: el compilador puede almacenar en caché el resultado, calcularlo fuera del bucle interno, reordenar los cálculos, etc. sin afectar la corrección.

Una función que lee una señal (si la estuvieras actualizando, ¡sería un efecto secundario!) devolverá los resultados dependiendo de ese valor de la señal, por lo tanto, no puede ser puro. Declararlo impuro es correcto y no afectará los resultados de la síntesis.

(Podría decirse que es mejor mantenerlo puro y pasar la señal como parámetro; sin embargo, si eso aumenta el desorden y dificulta la legibilidad, el enfoque actual es mejor)

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas