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

8

Sé de dos maneras en que una herramienta de síntesis sintetiza una variable VHDL:

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

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

    
pregunta nurabha

2 respuestas

8

Distinguiría tres posibilidades:

  1. Una variable VHDL no tiene ninguna representación de hardware. 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 var no se sintetiza realmente como lógica combinatoria (asumiendo que esto es lo que se quería decir en la pregunta). Es más bien el lado derecho de la asignación a + b que se sintetiza en el hardware. Estrictamente hablando, una variable nunca se sintetiza en lógica combinatoria.

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

  3. Se infiere uno de esos temibles latches en los casos en que existen ramas condicionales en las que a la variable no se le asigna un nuevo valor (según algunas señales) ni un valor predeterminado. Por lo general, este caso sucede involuntariamente :-)

respondido por el damage
4

Si usa el valor en una variable antes de almacenarlo, obtendrá 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.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas