Es scheint, dass die Welt entschieden hat, dass std_logic
(und std_logic_vector
) die Standardmethode zur Darstellung von Bits in VHDL sind. Die Alternative wäre std_ulogic
, was nicht gelöst ist.
Das überrascht mich, weil Sie normalerweise keinen Bus beschreiben , also nicht mehrere Fahrer wollen und kein Signal auflösen müssen. Der Vorteil std_ulogic
wäre, dass der Compiler Sie frühzeitig warnt, wenn Sie mehrere Treiber haben.
Frage: Ist das nur eine kulturelle/historische Sache oder gibt es noch technische Gründe, std_logic zu verwenden?
Std_logic ist ein Untertyp von std_ulogic und hat genau eine zusätzliche Eigenschaft: Es wird aufgelöst, wenn mehrere Treiber vorhanden sind.
Unabhängig von der gängigen Praxis ist std_ulogic der richtige Typ für nicht aufgelöste Signale, die eine 9-wertige Logik benötigen. (Oft ist die Verwendung von „Bit“ sogar noch richtiger – zum Beispiel bei einigen FPGA-Architekturen, die kein „X“ oder „U“ haben).
Grundsätzlich ist es am besten, den richtigen Typ für den Job zu verwenden. Oft werden schlechte Praktiken von Leuten verbreitet, die nur den Stil nachplappern, den sie bei anderen sehen, ohne zu verstehen, warum.
Meine Geschichte ist diese:
Ich habe angefangen (um 1999 IIRC), die std_ulogic*
ganze Zeit zu benutzen - weil es das Richtige ist, aus genau den Gründen, die Sie beschreiben.
Dann musste ich eine Schnittstelle zu einer Reihe von vom Assistenten generierten Anbieter-IPs herstellen, die alle std_logic
über die gesamte Schnittstelle verfügten. Das bedeutete Konvertierungen in den Port-Mappings (für die _vector
Elemente), und ich wurde faul und wechselte zur Verwendung von std_logic*
.
Allerdings scheine ich sehr wenige "Doppelfahrer"-Fehler zu machen, also habe ich nicht std_ulogic
so viel verpasst, wie ich gedacht hätte. Und der Befehl von Modelsim drivers
macht es sehr einfach zu finden, "wer was fährt", wenn ich es gelegentlich tun muss ...
*vector
müssen noch konvertiert werdenstd_ulogic_vector
zu std_logic_vector
zu wechseln, wenn es für Sie damals möglich gewesen wäre, VHDL-2008 zu verwenden, hätte das Problem nicht existiert, ist das richtig?IIRC das berühmte Reuse Methodology Manual empfohlen std_logic(_vector)
, also verbreiten Methodikgruppen in Unternehmen usw. das in Form von (obligatorischen) Codierungsleitfäden weiter. Persönlich +1 für die Verwendung, std_ulogic
wenn möglich.
Ich weiß, es ist eine schrecklich farbige ppt-Diashow, aber es erklärt den Unterschied ziemlich gut:
wjl
Philipp
wjl