Wie wird eine VHDL-Variable mit Synthesewerkzeugen synthetisiert?


9

Ich kenne zwei Möglichkeiten, wie eine VHDL-Variable mit einem Synthesewerkzeug synthetisiert wird:

  • Variable als kombinatorische Logik synthetisiert
  • Unbeabsichtigt als Latch synthetisierte Variable (wenn eine nicht initialisierte Variable einem Signal oder einer anderen Variablen zugewiesen wird)

Auf welche andere Weise kann eine VHDL-Variable synthetisiert werden? (Beispiel: Kann es als FF interpretiert werden?)

Antworten:


8

Ich würde drei Möglichkeiten unterscheiden:

  1. Eine VHDL-Variable hat überhaupt keine Hardwaredarstellung. Nehmen Sie das folgende Beispiel an

    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;

    Die Variable varwird überhaupt nicht wirklich als kombinatorische Logik synthetisiert (vorausgesetzt, dies war in der Frage gemeint). Es ist eher die rechte Seite der Aufgabe a + b, die in Hardware synthetisiert wird. Genau genommen wird eine Variable niemals zu einer kombinatorischen Logik synthetisiert.

  2. Eine Variable enthält lediglich ein Zwischenergebnis, das entweder im selben Taktzyklus ausgewertet wird -> keine Hardware synthetisiert (dies ist wieder 1)) oder im folgenden Taktzyklus ausgewertet wird -> ein Flipflop wird synthetisiert.

  3. Einer dieser gefürchteten Latches wird in solchen Fällen abgeleitet, in denen bedingte Verzweigungen existieren, in denen der Variablen weder ein neuer Wert (abhängig von einigen Signalen) noch ein Standardwert zugewiesen wird. Normalerweise passiert dieser Fall unbeabsichtigt :-)


Der "gefürchtete Latch" kann jedoch nur außerhalb eines getakteten Prozesses auftreten, und die meisten Leute (meiner Erfahrung nach) verwenden heutzutage keine nicht getakteten Prozesse. Die Latch-Angst ist also kein Problem mehr (IMHO) - sie stammt aus alten Zeiten, als Sie Ihre kombinatorische Logik in einem separaten Prozess zu Ihren Flip-Flops schreiben mussten
Martin Thompson

4

Wenn Sie den Wert in einer Variablen verwenden, bevor Sie ihn speichern, erhalten Sie den Wert, der zuletzt gespeichert wurde, als der Prozess ihn gespeichert hat (in einem getakteten Prozess den Wert aus einem vorherigen Taktzyklus). Das wird als Register oder FF synthetisiert.

Natürlich erhalten Sie im ersten Taktzyklus Müll, es sei denn, Sie haben die Variable in einer Reset-Klausel initialisiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.