Ich möchte verstehen, wie verschiedene Konstrukte in VHDL-Code in RTL synthetisiert werden.
- Kann mir jemand den Unterschied zwischen If-Else- Konstrukt- und Case-Anweisungskonstrukten eines Prozesses in VHDL hinsichtlich der Art und Weise erklären, wie der Code vom Synthesetool in die RTL-Schaltung abgeleitet wird?
- Betrachten Sie den Fall mehrerer verschachtelter if-else und das Mischen von case-Anweisungen mit dem if-else- Konstrukt innerhalb eines Prozesses.
- Auch wann welches Konstrukt zu verwenden ist?
PS: Ich habe eine verwandte Frage "Mehrere if-Anweisungen in vhdl in Bearbeitung" gesehen, aber das beantwortet meine Frage sowieso nicht.
vhdl
code-design
rtl
nurabha
quelle
quelle
dec
/jz
Anweisungen ausführt , ist dies viel effizienter. Möglicherweise wird hier eine ähnliche Optimierung angewendet.Antworten:
Das
if-elsif-else
Konstrukt leitet ein Prioritäts-Routing-Netzwerk ab:simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
Dies entspricht
Das
case
Konstrukt hingegen leitet einen großen alten Mux ab:Dies entspricht
Offensichtlich handelt es sich hierbei um sehr vereinfachte Designs mit nur einem Werteausdruck, was zu einer Ausgabe führt.
Wie oben können Sie sehen, wie sie verschachteln / mischen würden.
Da die
if-else
Priorität abgeleitet wird, sollte sie verwendet werden, wenn mehr als eine Eingabebedingung auftreten kann. Die Verwendungcase
ist andererseits angemessen, wenn sich die Eingaben gegenseitig ausschließen.quelle
if-else
Konstrukts entsteht jedoch diese Kette. Die erste Bedingung muss fehlschlagen, damit die zweite Bedingung getestet werden kann. Dies ist für dascase
Konstrukt nicht der Fall , und deshalb konnte eineif-else
Aussage nicht als einzelner großer Mux synthetisiert werden.case
Anweisung kann auch sequentielle Logik erzeugen. Ich habe "Real World VHDL" gefunden , eine Reihe von Vorlesungsfolien der University of Glasgow, die für Sie hilfreich sein können.In diesem alten Blog-Beitrag hat der Autor zwei funktional äquivalente Versionen von VHDL-Code geschrieben und synthetisiert. Einer mit if-else, der andere mit case. Das Ergebnis:
Und sein Fazit:
Es gibt auch Dutzende von Posts zu diesem Thema auf Stack Overflow für jede denkbare Sprache. Die Schlussfolgerung ist im Allgemeinen dieselbe, dass es keinen Leistungsunterschied gibt. Gelegentlich kann ein Compiler bei einer großen Anzahl von Fällen intelligent genug sein, um eine Nachschlagetabelle zu erstellen, die eine etwas bessere Leistung liefert.
Ein VHDL-Synthesizer kann möglicherweise etwas Ähnliches tun. Aber Sie würden immer noch eine große Anzahl von Fällen benötigen. In diesem Fall (Wortspiel beabsichtigt) möchten Sie wahrscheinlich trotzdem eine case-Anweisung verwenden, da sie eine bessere Lesbarkeit bietet, wenn es eine große Anzahl von Optionen gibt.
quelle