¿Cómo se sintetiza una variable VHDL mediante herramientas de síntesis?

9

Conozco dos formas en que una variable VHDL es sintetizada por la herramienta de síntesis:

  • Variable sintetizada como lógica combinacional
  • Variable sintetizada como un Latch involuntariamente (cuando una variable no inicializada se asigna a una señal u otra variable)

¿Cuáles son las otras formas en que se puede sintetizar una variable VHDL? (Ejemplo: ¿se puede interpretar como un FF?)

nurabha
fuente

Respuestas:

8

Distinguiría tres posibilidades:

  1. Una variable VHDL no tiene representación de hardware en absoluto. Supongamos el siguiente ejemplo

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    La variable varno se sintetiza realmente como lógica combinatoria (suponiendo que esto es lo que se quería decir en la pregunta). Es más bien el lado derecho de la tarea a + bque se sintetiza en el hardware. Estrictamente hablando, una variable nunca se sintetiza en la lógica combinatoria.

  2. Una variable simplemente contiene un resultado intermedio, que se evalúa en el mismo ciclo de reloj -> sin hardware sintetizado (esto es 1) nuevamente, o se evalúa en el siguiente ciclo de reloj -> se sintetiza un flipflop.

  3. Uno de esos temidos pestillos se infiere en los casos en que existen ramas condicionales en las que a la variable no se le asigna un nuevo valor (dependiendo de algunas señales) ni un valor predeterminado. Por lo general, este caso ocurre sin querer :-)

andrsmllr
fuente
Sin embargo, el "pestillo temido" solo puede ocurrir fuera de un proceso cronometrado y la mayoría de las personas (en mi experiencia) en estos días no están utilizando procesos no cronometrados. Entonces, el temor al pestillo ya no es un problema (en mi humilde opinión), se deriva de los viejos tiempos cuando tenía que escribir su lógica combinatoria en un proceso separado para sus chanclas
Martin Thompson
4

Si usa el valor en una variable antes de almacenarlo, obtiene el valor que se almacenó la última vez que el proceso lo almacenó (en un proceso cronometrado, el valor de un ciclo de reloj anterior). Eso se sintetiza como un registro o FF.

Por supuesto, en el primer ciclo de reloj obtienes basura, a menos que hayas inicializado la variable en una cláusula de reinicio.

Brian Drummond
fuente