Kann mir jemand sagen, was der Unterschied zwischen RTL und Verhaltens-Verilog-Code ist? Gibt es auf diesen beiden Ebenen eine klare Abgrenzung zwischen den Entwürfen?
Kann mir jemand sagen, was der Unterschied zwischen RTL und Verhaltens-Verilog-Code ist? Gibt es auf diesen beiden Ebenen eine klare Abgrenzung zwischen den Entwürfen?
Antworten:
Verhaltenscode ist übergeordnet und kann normalerweise nicht synthetisiert werden. Konstrukte wie Schleifen, Verzögerungen und "anfängliche" Anweisungen sind verhaltensbezogen.
RTL-Code ist niedriger und soll synthetisiert werden. Es definiert eine Schaltung als eine Kombination von miteinander verbundenen Registern und den Operationen, die an Signalen zwischen diesen Registern ausgeführt werden.
Entnommen aus Yahoo Answers und sofort bei Google gefunden!
Der Code "Registerübertragungsebene" ist ein Code, der in Form von Registern und kombinatorischer Logik beschrieben wird, die zwischen ihnen liegen und als Eingabe für ein Synthesewerkzeug verwendet werden sollen. Der Code bleibt bei einer synthetisierbaren Teilmenge [1] der Sprache. Es gibt keine expliziten Verzögerungen, alles Timing erfolgt in Taktflanken. Strukturen, die pegelgetriggerte Latches darstellen, werden im Allgemeinen vermieden. Register werden typischerweise von einer kleinen Anzahl von Takten getaktet, deren Details dem Zeitanalysator mitgeteilt werden können. Es wird normalerweise erwartet, dass sich die kombinatorische Logik [2] innerhalb eines einzelnen Taktzyklus einstellt, was ihre Komplexität begrenzt. Es ist höher als ein Gate-Level-Modell, definiert aber immer noch, welchen Wert jedes Register in jedem Taktzyklus hat.
"Verhaltenscode" ist im Allgemeinen Code, der das Verhalten auf einer höheren Ebene für die Verwendung in einer Simulation beschreibt, jedoch nicht als synthetisierbar gedacht ist. Es kann verwendet werden, um die Umgebung Ihres Entwurfs in einer Simulation zu beschreiben. Es kann als früher Schritt in einem Entwurf verwendet werden, um den Gesamtentwurf in Kraft zu setzen, bevor der detaillierte RTL-Entwurf der einzelnen Module überholt wird.
[1] Die genaue zulässige Teilmenge variiert zwischen den Synthesewerkzeugen.
[2] Wenn es sich nicht innerhalb eines einzelnen Zyklus einstellt, können Simulation und Synthese unterschiedliche Ergebnisse liefern, und der Timing-Analysator zeigt eine Verletzung an, es sei denn, es wird ausdrücklich darauf hingewiesen, dies nicht zu tun.
Eine allgemeinere Definition.
Verhaltenscode: Definitionsgemäß definiert er das Verhalten einer digitalen Komponente. Es gibt keine Informationen darüber, wie es in die tatsächliche HW (Synthese) implementiert wird. Es gibt keine Informationen darüber, wie Register und Gates implementiert werden, um die erforderliche Operation auszuführen. Es ist eher so, als würde man einen Algorithmus oder FSM in C schreiben.
RTL: Es ist eine präzisere Form einer digitalen Komponente. Es gibt Informationen darüber, wie Code als tatsächliche HW (nach der Synthese) implementiert wird. Außerdem erhalten Sie Informationen darüber, wie Daten zwischen Registern und Gates übertragen werden.
Es ist dieselbe Sprache, es werden jedoch unterschiedliche Stile verwendet. Mit der Erfahrung können Sie sie schnell auseinanderhalten, hier sind einige Merkmale von jedem:
Verhaltens-Verilog-Code ähnelt im Allgemeinen eher einem sequentiellen Computerprogramm, das innerhalb eines initial begin
Blocks von oben nach unten ausgeführt wird . Möglicherweise sind in Verhaltensmodulen der obersten Ebene keine Eingabe- / Ausgabeports definiert, da die Ausgabe möglicherweise an Simulatoreinrichtungen wie die Konsole $display()
oder das Dateisystem mit $open
oder den Wellenform-Dumper mit $dumpfile
und erfolgt $dumpvars
. Achten Sie auf Verzögerungen zwischen Anweisungen, die mit langen Wartezeiten für die Simulation implementiert wurden, z . B. dem #4000
Aufrufen von Aufgaben wishbone_master.checked_read(addr, value)
. Für diese übergeordneten Konstrukte ist es nicht offensichtlich, was das synthetisierte Technologieäquivalent wäre / sein könnte.
Verilog für die Synthese hat immer Eingangs- / Ausgangsanschlüsse, da das Modul ohne angeschlossene Anschlüsse keine Nebenwirkungen hat und eliminiert werden kann [1]. Verzögerungen werden wahrscheinlich durch Zählen der Zyklen eines bestimmten Takts implementiert. Beachten Sie, dass einige Verilog-Systemfunktionen $clog2(PARAMETER)
möglicherweise im Code für die Synthese zulässig sind, sodass das Vorhandensein von $function
in keiner Weise eine Garantie darstellt. Der Code für die Synthese umfasst in der Regel viele unabhängige "Prozesse" mit jeweils einer Sensitivitätsliste. Einige Technologien erlauben initial begin
Blöcke für die Speicherinitialisierung, was wiederum keine Garantie ist.
Letztendlich kennt der Designer den Zweck des Codes, den er schreibt, und ruft ihn mit dem Synthese-Toolset oder in einem Simulator entsprechend auf.
[1] mit Ausnahme bestimmter IP-Blöcke, die Back-Door-Verbindungen zu internen Chip-Einrichtungen herstellen können, z. B. JTAG