Was ist der Unterschied zwischen:
ENTITY MyDemo is
PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo;
und
ENTITY MyDemo is
PORT(X: IN BIT; F: OUT BIT );
END MyDemo;
Was sind die Einschränkungen bei der Verwendung von BIT über STD_LOGIC und umgekehrt? Sind sie vollständig austauschbar? Ich verstehe, dass ich STD_LOGIC nicht mit einem BIT_Vector verwenden kann, um auf die Elemente im Array zuzugreifen, wenn ich STD_LOGIC definiert habe. Aber ich kann den Unterschied nicht erkennen.
Antworten:
Bit
ist ein vordefinierter Typ und kann nur den Wert0
oder haben1
. DerBit
Typ ist ein idealisierter Wert.std_logic
ist Teil desstd_logic_1164
Pakets und bietet eine realistischere Modellierung von Signalen innerhalb eines digitalen Systems. Es kann neun verschiedene Werte haben. Normalerweise innerhalb des Codes werden Sie nur verwenden0
,1
undZ
(High-Z). AberU
(Uninitialized) undX
(Unbekannt) ist auch sehr nützlich , wenn das System in einer Testumgebung zu modellieren.Das
std_logic_1164
Paket enthält auch Konvertierungsfunktionen zu konvertierenstd_logic
zuBit
.quelle
Die meisten Leute benutzen
std_logic
. Das erlaubtu
(undefiniert),x
(unbekannt) undz
(hochohmig), was Bit nicht tut. Während Sie möglicherweise nie in einem Chip tristieren und daher nicht benötigenz
,u
ist dies nützlich, um fehlende Resets zu finden.x
ist nützlich, um mehrere Treiber zu finden.quelle
X
, mehrere Treiber zu finden.std_logic
ist in der Tat der Industriestandardtyp für VHDL, aber es ist auch eines der am häufigsten missbrauchten Merkmale von VHDL.std_logic
ist ein aufgelöstes Signal, was bedeutet, dass eine Funktion verwendet wird, um den Wert des Signals bei mehreren Treibern aufzulösen. In den allermeisten Fällen sind jedoch mehrere Treiber ein Fehler. Wenn Sie einen solchen ungelösten Typ verwenden, wirdstd_ulogic
dies vom Compiler als Fehler markiert.std_ulogic
. Beachten Sie jedoch, dass viele Kerne mit geschrieben werden,std_logic
sodass Sie wahrscheinlich einige davon sehen werden.std_logic
ist in der Tat der häufigste Typ; Ich argumentiere nur, dass seine Verwendung nicht der ursprünglichen Absicht entspricht: Modellierung von Mehrzustandsignalen. Bei internen Designs berücksichtigen wir normalerweise nur1
oder0
und einen einzelnen Treiber. Eine ausführliche Diskussion zu diesem Thema finden Sie unter electronic.stackexchange.com/questions/17524/… .std_logic
hat eine AuflösungsfunktionAußerdem gibt es nicht nur
std_logic
nützlichere Zustände1
und0
auch eine definierte Auflösungsfunktion.Eine Auflösungsfunktion ist ein VHDL-Sprachkonzept. Es ist eine Funktion, die einem Typ zugeordnet ist und bestimmt, was passiert, wenn mehrere Werte dieses Typs auf ein einzelnes Signal angewendet werden. Die Syntax lautet:
Wo
std_ulogic
ist die ungelöste (und damit viel weniger nützliche) Version vonstd_logic
.Dies impliziert insbesondere schöne Dinge wie
0
und1
führt zuX
:Dies ist intuitiv sinnvoll, da wir verstehen
X
, dass mehrere inkompatible Werte auf einen einzelnen Draht angewendet werden.std_logic
weiß auch, wie jedes andere mögliche Paar von Eingangssignalen gemäß einer auf dem LRM vorhandenen Tabelle aufgelöst wird.bit
Auf der anderen Seite gibt es keine Auflösungsfunktion, und wenn wir sie im obigen Beispiel verwendet hätten, würde dies zu einem Simulationsfehler bei GHDL 0.34 führen.Die möglichen Werte von
std_logic
sind eine gute Wahl, da sie durch IEEE 1164 standardisiert sind und viele gängige Anwendungsfälle behandeln.quelle
std_logic ist reicher als Bit und sollte grundsätzlich die meiste Zeit verwendet werden.
Es gibt auch den booleschen Typ, der wie Bit zwei Werte hat. Dies ist der Ergebnistyp von Vergleichen, der Typ, der nach einem IF [bool] oder einem WHEN [bool] erwartet wird und häufig für Auswahlkonstanten verwendet wird:
constant ENABLE_DEBUG_INTERFACE : boolean := true;
Ein Ort, an dem Bit gegenüber std_logic bevorzugt werden kann, sind große Arrays und Speicher. Bei der Optimierung von Simulatoren belegt das Bit weniger Speicherplatz im Speicher des Simulators als std_logic . Und es kann wichtig sein, ob Ihr Design 1 GB RAM instanziiert.
Es kann auch für sehr große Designs schneller sein, z. B. für etwas, das automatisch aus einer Netzliste auf Gate-Ebene nach der Synthese generiert wird.
Natürlich ist dieser Leistungsaspekt nicht Teil der Sprache und hängt von der Implementierung des VHDL-Simulators ab.
quelle