Wenn Sie in Simulation nicht einen Anfangswert festlegen, erhält jedes Element Ihres Vektors den Standard -Wert (dies ist definiert durch die VHDL-Sprachspezifikation). Für Enumerationstypen ist dies das erste Element, das im Aufzählungstyp definiert ist: booleans ist false
, std_logic wird 'U' (undefiniert). Beachten Sie, dass "U" in elektrischen Schaltungen keine Bedeutung hat. Es ist lediglich ein Hinweis für den Verifikationsingenieur, dass Sie nicht wissen, welchen Wert das Flipflop beim Einschalten hat.
Nach Synthese : FPGA-Synthesizer verwenden den Anfangswert, den Sie als "Power on" -Wert der Flip-Flops und Speicher festlegen, wenn die Zieltechnologie dies unterstützt ! Wenn die Technologie einen erzwungenen Anfangswert (und für ASICs) nicht unterstützt, ist der Anfangswert beim Einschalten nicht bekannt. Es könnte 1 oder 0 sein. (Siehe zum Beispiel Ссылка )
Zwei mögliche Stile:
Wenn Sie mit der ersten Wahl gehen, überprüfen Sie, ob Ihre Zieltechnologie diesen Stil unterstützt!
In der Simulation wird alles in VHDL am Anfang zum "ganz links" -Element des Bereichs initialisiert, der sie repräsentiert.
Also, std_logic
bekommt 'U'
, boolean
bekommt false
, integer
bekommt eine große negative Zahl. Alle aufgezählten Typen, die Sie selbst definiert haben, initiieren ihr erstes Mitglied. usw.
Sie können dies mit einer expliziten Initialisierung überschreiben:
%Vor%Der Simulator verwendet dann Ihre Initialisierung.
Wenn es darum geht, Ihren Code zu synthetisieren, werden in einem ASIC explizite Initialisierungen ignoriert (es gibt keinen Silizium, um sie zu unterstützen!), und alles initialisiert unvorhersehbar. Sie haben also einen Reset-Pin und einen expliziten Code, der den gewünschten Wert zuweist, wenn dieser Pin aktiviert ist.
Wenn Sie ein FPGA anvisieren und nicht explizit initialisieren, initiieren sich die Dinge meist zu etwas wie "Null", aber Sie können sich nicht darauf verlassen (manchmal werden Inverter herumgeschubst und die Dinge sehen so aus) auf "eins" gesetzt). Sie haben also einen Reset-Pin und einen expliziten Code, der den gewünschten Wert zuweist, wenn dieser Pin aktiviert ist.
Einige Synthesizer (zumindest XST) werden explizite Initialisierungen unterstützen und sie an die Netzliste übergeben, damit Sie sich darauf verlassen können. In diesem Fall können Sie immer noch ein Reset-Signal haben - was etwas anderes bewirken kann, so dass ein bestimmtes Flip-Flop auf einen Wert initialisiert und auf einen anderen zurückgesetzt werden kann!
Dies ist in VHDL nicht unbedingt notwendig, genauso wie es in C / C ++ nicht notwendig ist, aber ein ähnliches Ergebnis kann auftreten. Ohne ein Signal oder einen Vektor von Signalen zu initialisieren, simuliert ein Simulator typischerweise, dass er sich in einem unbekannten Zustand befindet (unter der Annahme, dass Sie std_logic-Signale verwenden). Eine Synthese-Engine wählt jedoch das eine oder das andere als Anfangswert, da, wenn ein FPGA programmiert wird, alle Speicherelemente auf die eine oder andere Weise initialisiert werden (d. H. Sie werden nicht auf einen unbekannten Zustand initialisiert).
Einige Leute werden kein Signal bei der Deklaration initialisieren, sondern verwenden stattdessen ihre Schaltung, um das Speicherelement zu initialisieren (z. B. eine Rücksetzlogik zum Initialisieren des Speicherelements zu erzeugen). Other initialisiert das Speicherelement, wenn es deklariert wird. Dies sind Design-Entscheidungen, die ihre eigenen Kompromisse haben.
Tags und Links vhdl