Ist die Initialisierung notwendig?
In VHDL, ist die Initialisierung notwendig, wenn Sie erstellen ein signal oder ein Vektor?
Was passiert, wenn man vergisst Sie zu initialisieren, ein signal oder ein integer Wert?
- Für ASIC-design-es sollte sehr selten zu initialisieren Signale. Aber für FPGA-designs und-simulation, könnte es sinnvoll sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In simulation, wenn Sie nicht einen Anfangswert setzen, jedes element von Vektor erhalten die Standard Wert (dieser ist definiert durch den VHDL language specification). Für enum-Typen, dies ist das erste element definiert ist, die in der enumeration-Typ: Boolean wird
false
, std_logic wird 'U' (undefined). Beachten Sie, dass 'U' hat keine Bedeutung in elektrischen schaltungen. Es ist lediglich ein Hinweis für den Prüfingenieur, die Sie nicht wissen, welchen Wert ein flip-flop hat bei power-on.Nach Synthese: FPGA-Synthesizer verwenden Sie den ersten Wert, den Sie als "power on" - Wert des flip-flops und Erinnerungen , wenn der Ziel-Technologie unterstützt diese! Wenn die Technik nicht unterstützt wird gezwungen ursprünglichen Wert (und für ASICs), der erste Wert in der power-on ist nicht bekannt. Es könnte sein, 1 oder 0. (Siehe zum Beispiel: http://quartushelp.altera.com/11.0/mergedProjects/hdl/vhdl/vhdl_pro_power_up_state.htm)
Zwei mögliche Stile:
Wenn man mit der ersten Wahl, sicher sein, zu prüfen, ob Ihre Ziel-Technologie unterstützt dieser Stil!
In der simulation, alles in VHDL initialisiert beim start der "linken" element der Reihe, die Sie vertritt.
So,
std_logic
erhalten'U'
,boolean
erhaltenfalse
,integer
wird eine große negative Zahl. Alle enumerationstypen, die Sie definiert haben, sich init auf Ihre ersten Mitglied. etc.Können Sie überschreiben diese mit einer expliziten Initialisierung:
wird der simulator dann verwenden Ihre Initialisierung.
Wenn es um Ihren code zu synthetisieren, die in einem ASIC, explizite Initialisierungen bereinigen, welche werden ignoriert (es ist kein Silizium, um Sie zu unterstützen!), und alles initialisiert unvorhersehbar. So haben Sie eine reset-pin und expliziten code weist den Wert, den Sie wollen, wenn die pin-geltend gemacht wird.
Wenn Sie das Ziel einen FPGA und nicht explizit initialisieren, die meisten der Zeit, die Dinge initialisieren, um etwas 'wie zero', aber man kann sich auf Sie nicht verlassen (manchmal Wechselrichter geschoben, um und sehen die Dinge, wie Sie schon inited zu 'one'). So haben Sie eine reset-pin und expliziten code weist den Wert, den Sie wollen, wenn die pin-geltend gemacht wird.
Einige Sprachausgaben (XST mindestens) unterstützt die explizite Initialisierungen bereinigen, welche und geben Sie diese in die Netzliste, so dass Sie kann sich auf Sie verlassen. In diesem Fall können Sie immer noch eine reset-signal - das kann auch etwas anderes machen, also einen bestimmten flipflop könnte initialisieren, um einen Wert zurückzusetzen, zu einem anderen!
Es ist nicht unbedingt notwendig in VHDL, so wie es ist nicht notwendig in C/C++, aber ein ähnliches Ergebnis kann eintreten. Ohne initialisieren ein signal oder einen Vektor von Signalen, ein simulator wird in der Regel zu simulieren, dass er sich in einem unknown-Zustand sind (vorausgesetzt, Sie sind mit std_logic-Signale). Jedoch, eine Synthese-engine wählen Sie eine oder das andere als ein anfänglicher Wert seit Wann ein FPGA programmiert wird, werden alle Speicher-Elemente initialisiert, die eine oder andere Art (d.h. Sie werden nicht initialisiert, um einen unbekannten Zustand).
Einige Leute nicht initialisieren ein signal auf Erklärung, sondern stattdessen verwenden Sie Ihre Schaltung zum initialisieren des Speicher-element (z.B. reset-Logik, die zum initialisieren des Speicher-element). Andere initialisiert die Speicher-element, wenn es deklariert ist. Dies sind die design-Entscheidungen, die Ihre eigenen Nachteile.