5 votos

Funciones VHDL con genéricas o "variables en tiempo de ejecución", problemas de síntesis

He estado pensando en las funciones en VHDL. Si tenemos una función podríamos tener tanto una función donde pasamos un "genérico" (es decir, un parámetro fijo conocido en tiempo de compilación) como una variable/señal (cuyo contenido se conoce en tiempo de "ejecución").

Así que lo que estaba considerando era si en una función pasamos como entrada un "parámetro genérico" y sólo dicho parámetro significa que básicamente dicha función es una expresión cuyo resultado es determinista, de lo contrario porque la entrada podría variar en cualquier momento.

¿Cómo afecta esta situación a una síntesis? ¿Sintetizaría el compilador un registro con el resultado de la evaluación de la expresión? o ¿intentaría sintetizar también alguna lógica extra?

Como ejemplo supongamos que tenemos una entidad (habrá algún error de sintaxis a propósito)

entity ent
 generic(n : unsigned);
 port(x : in unsigned; ...);
end entity;

architecture arch of ent is
  function my_f(i : unsigned) return unsigned is
    variable k : unsigned;
  begin
    -- something
    return k;
  end function;
begin
  --body
  -- end body
end architecture arch;

¿Cuál es la diferencia (en términos de síntesis si la hay) si se hace una llamada como

y <= my_f(n); -- i'm using a generic

en lugar de

y <= my_f(x); -- i'm using the input

El parámetro n no cambiaría en tiempo de ejecución, sino que x (como estímulo) podría cambiar en cualquier momento. Así que la herramienta de síntesis sintetizaría toda la lógica necesaria para manipular n en el primer caso? o ¿sería inteligente y simplemente evaluaría la función y sustituiría el resultado en una posible asignación?

Espero que ahora esté mejor.

6voto

GSerg Puntos 33571

Las herramientas de síntesis se esfuerzan por evaluar todo lo que pueden en tiempo de compilación. Para todo lo demás, sintetizan la lógica, incluidas las llamadas a funciones, suponiendo que la función sea sintetizable (algunas no lo son).

Por lo tanto, la respuesta a su pregunta es: "depende". No importa si el parámetro real de la función es un genérico o una señal (puerto) - si el valor es conocido en tiempo de compilación, la herramienta de síntesis evaluará la función en tiempo de compilación y utilizará el resultado. La única diferencia es que un genérico es conocido por definición en tiempo de compilación, mientras que una señal puede serlo o no.

Si la función necesita ser evaluada en tiempo de ejecución, la herramienta de síntesis generará la lógica necesaria para hacerlo, asumiendo que no se han utilizado construcciones no sintetizables en el cuerpo de la función.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X