Come viene sintetizzata una variabile VHDL con strumenti di sintesi


9

Conosco due modi in cui una variabile VHDL è sintetizzata dallo strumento di sintesi:

  • Variabile sintetizzata come logica combinatoria
  • Variabile sintetizzata involontariamente come Latch (quando una variabile non inizializzata viene assegnata a un segnale o un'altra variabile)

Quali sono gli altri modi in cui una variabile VHDL può essere sintetizzata? (Esempio: può essere interpretato come FF?)

Risposte:


8

Vorrei distinguere tre possibilità:

  1. Una variabile VHDL non ha alcuna rappresentazione hardware. Supponiamo il seguente esempio

    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 variabile varnon è affatto sintetizzata come logica combinatoria (supponendo che questo sia ciò che si intendeva nella domanda). È piuttosto il lato destro del compito a + bche viene sintetizzato in hardware. A rigor di termini una variabile non viene mai sintetizzata in logica combinatoria.

  2. Una variabile contiene semplicemente un risultato intermedio, che viene valutato nello stesso ciclo di clock -> nessun hardware sintetizzato (di nuovo 1)), oppure viene valutato nel successivo ciclo di clock -> un flipflop è sintetizzato.

  3. Uno di quei latch temuti viene dedotto in tali casi in cui esistono rami condizionali in cui alla variabile non viene assegnato né un nuovo valore (a seconda di alcuni segnali) né un valore predefinito. Di solito questo caso accade involontariamente :-)


Il "temuto latch" può avvenire solo al di fuori di un processo con clock e la maggior parte delle persone (secondo la mia esperienza) al giorno d'oggi non usano processi senza clock. Così il terrore fermo non è più un problema (IMHO) - esso deriva dai tempi antichi quando si doveva scrivere la logica combinatoria in un processo separato per il vostro infradito
Martin Thompson

4

Se si utilizza il valore in una variabile prima di memorizzarlo, si ottiene il valore archiviato l'ultima volta che il processo lo ha memorizzato (in un processo con clock, il valore di un precedente ciclo di clock). Questo è sintetizzato come un registro o FF.

Ovviamente, nel primo ciclo di clock ottieni spazzatura, a meno che tu non abbia inizializzato la variabile in una clausola di reset.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.