GoGPT Best VPN GoSearch

OnWorks-Favicon

verilator_bin – Online in der Cloud

Führen Sie verilator_bin im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl verilator_bin, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


Verilator – Konvertieren Sie Verilog-Code in C++/SystemC

ZUSAMMENFASSUNG


verilator --help
verilator --version
verilator --cc [Optionen] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [Optionen] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [top_level.v]...

BESCHREIBUNG


Verilator konvertiert synthetisierbaren (nicht verhaltensbezogenen) Verilog-Code sowie etwas Synthese.
SystemVerilog und eine kleine Teilmenge von Verilog AMS-Assertionen in C++- oder SystemC-Code. Es
ist kein vollständiger Simulator, sondern ein Compiler.

Verilator wird mit ähnlichen Parametern wie GCC, Cadence Verilog-XL/NC-Verilog oder aufgerufen
VCS von Synopsys. Es liest den angegebenen Verilog-Code, lintet ihn und fügt optional hinzu
Abdeckungs- und Wellenformverfolgungscode. Für die Formate C++ und SystemC werden .cpp und .h ausgegeben
Dateien.

Die von Verilator erstellten Dateien werden dann mit C++ kompiliert. Der Benutzer schreibt ein wenig C++
Wrapper-Datei, die das Modul der obersten Ebene instanziiert und diesen Dateinamen an die übergeben
Befehlszeile. Diese C-Dateien werden in C++ kompiliert und mit den Verilated-Dateien verknüpft.

Die resultierende ausführbare Datei führt die eigentliche Simulation durch.

Um zu beginnen, springen Sie nach unten zu „BEISPIEL-C++-AUSFÜHRUNG“.

ARGUMENT ZUSAMMENFASSUNG


Dies ist eine kurze Zusammenfassung der Argumente gegenüber Verilator. Siehe die detaillierten Beschreibungen in
Weitere Informationen finden Sie in den nächsten Abschnitten.

{file.v} Verilog-Dateinamen der obersten Ebene
{file.c/cc/cpp} Optionale C++-Dateien zum Kompilieren
{file.a/o/so} Optionale C++-Dateien zum Verlinken

+1364-1995ext+ Verwenden Sie Verilog 1995 mit der Dateierweiterung
+1364-2001ext+ Verwenden Sie Verilog 2001 mit der Dateierweiterung
+1364-2005ext+ Verwenden Sie Verilog 2005 mit der Dateierweiterung
+1800-2005ext+ Verwenden Sie SystemVerilog 2005 mit der Dateierweiterung
+1800-2009ext+ Verwenden Sie SystemVerilog 2009 mit der Dateierweiterung
+1800-2012ext+ Verwenden Sie SystemVerilog 2012 mit der Dateierweiterung
--assert Aktiviert alle Behauptungen
--autoflush Streams nach allen $displays leeren
--bbox-sys Blackbox unbekannte $systemaufrufe
--bbox-unsup Nicht unterstützte Blackbox-Sprachfunktionen
--Behälter Überschreiben Sie die Verilator-Binärdatei
-CFLAGS C++-Compiler-Flags für Makefile
--cc C++-Ausgabe erstellen
--cdc Clock-Domain-Crossing-Analyse
--clk Markieren Sie das angegebene Signal als Takt
--compiler Optimieren Sie den angegebenen C++-Compiler
--converge-limit Passen Sie die Konvergenz-Einschwingzeit an
--coverage Aktiviert die gesamte Abdeckung
--coverage-line Leitungsabdeckung aktivieren
--coverage-toggle Aktivieren Sie das Umschalten der Abdeckung
--coverage-user SVL-Benutzerabdeckung aktivieren
--coverage-underscore Aktiviert die Abdeckung von _signalen
-D [= ] Präprozessordefinition festlegen
--debug Debuggen aktivieren
--debug-check Debug-Assertionen aktivieren
--debugi Aktivieren Sie das Debuggen auf einer bestimmten Ebene
--debugi- Aktivieren Sie das Debuggen einer Quelldatei auf einer Ebene
--Standardsprache Standardsprache zum Parsen
+definieren+ = Präprozessordefinition festlegen
--dump-tree Aktivieren Sie das Dumping von .tree-Dateien
--dump-treei Aktivieren Sie das Dumping von .tree-Dateien auf einer Ebene
--dump-treei- Aktivieren Sie das Dumping der .tree-Datei auf einer Quelldatei auf einer Ebene
-E Vorverarbeiten, aber nicht kompilieren
--error-limit Abbruch nach dieser Fehleranzahl
--exe Link zum Erstellen einer ausführbaren Datei
-F Parse-Optionen aus einer Datei, relativ
-F Optionen aus einer Datei analysieren
--gdb Verilator unter GDB interaktiv ausführen
--gdbbt Verilator unter GDB für Backtrace ausführen
--help Zeigt diese Hilfe an
-ICH Verzeichnis, nach dem gesucht werden soll, enthält
--if-Tiefe Passen Sie die IFDEPTH-Warnung an
+incdir+ Verzeichnis, nach dem gesucht werden soll, enthält
--inhibit-sim Funktion zum Ausschalten der Sim erstellen
--inline-mult Modul-Inlining optimieren
-LDFLAGS Linker-Vorobjekt-Flags für Makefile
-LDLIBS Linker-Bibliotheksflags für Makefile
--Sprache Standardsprachstandard zum Parsen
+libext+ +[ext]... Erweiterungen zum Finden von Modulen
--lint-only Lint, macht aber keine Ausgabe
--MMD Erstellt .d-Abhängigkeitsdateien
--MP Erstellt falsche Abhängigkeitsziele
--Mdir Name des Ausgabeobjektverzeichnisses
--mod-Präfix Name, der den unteren Klassen vorangestellt wird
--no-clk Verhindert, dass das angegebene Signal als Takt markiert wird
--no-pins64 Verwenden Sie vluint64_ts nicht für 33-64-Bit-Signaturen
--no-skip-identical Deaktiviert das Überspringen identischer Ausgaben
+notimingchecks Ignoriert
-O0 Optimierungen deaktivieren
-O3 Hochleistungsoptimierungen
-Ö Wählbare Optimierungen
-Ö Name der endgültigen ausführbaren Datei
--no-order-clock-delay Deaktiviert die Zuweisungen zur Aktivierung der Bestelluhr
--output-split Teilen Sie .cpp-Dateien in Teile auf
--output-split-cfuncs Teilen Sie .cpp-Funktionen
--output-split-ctrace Split-Tracing-Funktionen
-P Deaktivieren Sie Zeilennummern und Leerzeichen mit -E
--pins-bv Geben Sie Typen für Ports der obersten Ebene an
--pins-sc-uint Geben Sie Typen für Ports der obersten Ebene an
--pins-sc-biguint Geben Sie Typen für Ports der obersten Ebene an
--pins-uint8 Geben Sie Typen für Ports der obersten Ebene an
--pipe-filter Filtern Sie alle Eingaben über ein Skript
--Präfix Name der obersten Klasse
--profile-cfuncs Benennen Sie Funktionen für die Profilerstellung
--private Debuggen; siehe Dokumente
--public Debugging; siehe Dokumente
--report-unoptflat Zusätzliche Diagnose für UNOPTFLAT
--savable Aktivieren Sie das Speichern und Wiederherstellen des Modells
--sc SystemC-Ausgabe erstellen
--stats Statistikdatei erstellen
--stats-vars Stellt Statistiken zu Variablen bereit
-sv SystemVerilog-Analyse aktivieren
+systemverilogext+ Synonym für +1800-2012ext+
--top-module Name des Eingabemoduls der obersten Ebene
--trace Aktivieren Sie die Wellenformerstellung
--trace-tiefe Tiefe der Nachverfolgung
--trace-max-array Maximale Bitbreite für die Ablaufverfolgung
--trace-max-width Maximale Array-Tiefe für die Ablaufverfolgung
--trace-params Tracing-Parameter aktivieren
--trace-structs Aktivieren Sie die Verfolgung von Strukturnamen
--trace-underscore Aktiviert die Verfolgung von _signalen
-U Präprozessordefinition aufheben
--unroll-count Maximale Schleifeniterationen optimieren
--unroll-stmts Stellen Sie die maximale Größe des Schleifenkörpers ein
--unused-regexp Stimmen Sie unbenutzte Flusensignale ab
-V Ausführliche Version und Konfiguration
-v Verilog-Bibliothek
+verilog1995ext+ Synonym für +1364-1995ext+
+verilog2001ext+ Synonym für +1364-2001ext+
-Werror- Warnung in Fehler umwandeln
-WZukunft- Deaktivieren Sie Warnungen vor unbekannten Nachrichten
-Wnein- Warnung deaktivieren
-Wno-lint Deaktiviert alle Flusenwarnungen
-Wno-style Deaktiviert alle Stilwarnungen
-Wno-fatal Deaktiviert den fatalen Exit bei Warnungen
--x-assign Weisen Sie diesem Wert zunächst X zu
--x-initial-edge Aktiviert anfängliche X->0- und X->1-Flankentrigger
-y Verzeichnis zur Suche nach Modulen

ARGUMENTE


{file.v}
Gibt die Verilog-Datei an, die das oberste zu verilierende Modul enthält.

{file.c/.cc/.cpp/.cxx}
Gibt optionale C++-Dateien an, die mit dem Verilog-Code verknüpft werden sollen. Falls vorhanden, C++-Dateien
Werden auf diese Weise angegeben, fügt Verilator eine Make-Regel ein, die eine generiert Modulen
ausführbar. Ohne C++-Dateien stoppt Verilator bei Modulen__ALL.eine Bibliothek,
und gehen davon aus, dass Sie weiterhin mit Make-Regeln verlinken, die Sie selbst geschrieben haben. Siehe auch die
-CFLAGS-Option.

{file.a/.o/.so}
Gibt optionale Objekt- oder Bibliotheksdateien an, die mit dem Verilog-Code verknüpft werden sollen, als
Abkürzung für -LDFLAGS " ". Wenn Dateien auf diese Weise angegeben werden, wird Verilator
wird eine Make-Regel enthalten, die diese Dateien beim Verknüpfen verwendet Modulen ausführbar.
Dies ist im Allgemeinen nur dann sinnvoll, wenn es mit der Option --exe verwendet wird.

+1364-1995ext+ext
+1364-2001ext+ext
+1364-2005ext+ext
+1800-2005ext+ext
+1800-2009ext+ext
+1800-2012ext+ext
Gibt den Sprachstandard an, der mit einer bestimmten Dateinamenerweiterung verwendet werden soll. ext.

Zur Kompatibilität mit anderen Simulatoren siehe auch die Synonyme „+verilog1995ext+“ext,
„+verilog2001ext+“extund „+systemverilogext+“ext.

Für jede Quelldatei hat die durch diese Optionen angegebene Sprache Vorrang vor allen anderen
Sprache, die durch die Optionen „--default-Language“ oder „--Language“ angegeben wird.

Diese Optionen werden in der Reihenfolge wirksam, in der sie auftreten. So wäre das Folgende
Verwenden Sie Verilog 1995 für „av“ und Verilog 2001 für „bv“.

Verilator ... +1364-1995ext+v av +1364-2001ext+v bv

Diese Flags werden nur für ältere gemischtsprachige Designs empfohlen, da sie vorzuziehen sind
Die Option besteht darin, den Code zu bearbeiten, um neue Schlüsselwörter zu reparieren, oder entsprechende hinzuzufügen
„`begin_keywords“.

Hinweis „`begin_keywords“ ist ein SystemVerilog-Konstrukt, das angibt einzige die der
Satz von Schlüsselwörtern erkannt werden soll. Welcher Satz auch immer gewählt wird, die Semantik wird sein
die von SystemVerilog. Im Gegensatz dazu legen „+1364-1995ext+“ usw. sowohl die Syntax fest und
zu verwendende Semantik.

--behaupten
Aktivieren Sie alle Behauptungen.

Siehe auch --x-assign und --x-initial-edge; Einstellung „--x-assign unique“ und/oder
„--x-initial-edge“ kann wünschenswert sein.

--autoflush
Leeren Sie nach jedem $display oder $fdisplay den Ausgabestream. Dies stellt sicher
Meldungen werden sofort angezeigt, können jedoch die Leistung beeinträchtigen. für beste Leistung anrufen
„fflush(stdout)“ gelegentlich in der Haupt-C-Schleife. Standardmäßig deaktiviert, wodurch gepuffert wird
Ausgabe, wie sie von den normalen C-Standardaufrufen bereitgestellt wird.

--bbox-sys
Blackbox aller unbekannten $system-Aufgaben oder Funktionsaufrufe. Systemaufgaben werden einfach sein
NOPed und Systemfunktionen werden durch Nullen ohne Größe ersetzt. Argumente dazu
Funktionen werden analysiert, aber nicht anderweitig überprüft. Dies verhindert Fehler beim
Linting bei Vorliegen unternehmensspezifischer PLI-Aufrufe.

--bbox-unsup
Blackbox einige nicht unterstützte Sprachfunktionen, derzeit UDP-Tabellen und die CMOS und
Tran-Gate-Primitive. Dies kann dazu führen, dass der Rest des Designs auch dann fusselt
Es sind nicht unterstützte Konstrukte vorhanden.

--Behälter Dateinamen
Wird selten benötigt. Überschreiben Sie den Standarddateinamen für Verilator selbst. Wenn eine Abhängigkeit
(.d)-Datei erstellt wird, wird dieser Dateiname zu einer Quellabhängigkeit, sodass a
Eine Änderung in dieser Binärdatei führt dazu, dass die Ausgabedateien neu erstellt werden.

-CFLAGS Fahnen
Fügen Sie den generierten Makefiles die angegebenen C-Compiler-Flags hinzu. Wenn make auf dem ausgeführt wird
Im generierten Makefile werden diese an den C++-Compiler (gcc/g++/msvc++) übergeben.

--cc
Gibt C++ ohne SystemC-Ausgabemodus an; siehe auch --sc.

--CDC
Experimental. Führen Sie einige Überprüfungen der Taktdomänenüberschreitung durch und geben Sie entsprechende Warnungen aus
(CDCRSTLOGIC) und dann beenden; Wenn andere Warnungen als CDC-Warnungen erforderlich sind, erstellen Sie eine
zweiter Durchlauf mit --lint-only. Zusätzliche Warninformationen werden ebenfalls in die geschrieben
Datei {Präfix}__cdc.txt.

Überprüft derzeit nur einige Elemente, die andere CDC-Tools übersehen haben; wenn Sie Interesse daran haben
Wenn Sie weitere traditionelle CDC-Prüfungen hinzufügen möchten, wenden Sie sich bitte an die Autoren.

--clk Signalname
Manchmal ist es für Verilator ziemlich schwierig, Taktsignale von anderen zu unterscheiden
Datensignale. Gelegentlich können die Taktsignale in der Prüfliste von landen
Signale, die bestimmen, ob eine weitere Auswertung erforderlich ist. Dies wird sich stark verschlechtern
die Leistung des verilierten Modells.

Mit --clk , Der Benutzer kann die Root-Uhr in das Modell und dann in Verilator eingeben
markiert das Signal als Clocker und gibt das Clocker-Attribut automatisch an weiter
weitere daraus abgeleitete Signale. Auf diese Weise wird Verilator versuchen, die Einnahme zu vermeiden
Clocker-Signal in die Prüfliste.

Hinweis: Signalname wird durch den RTL-Hiarchiepfad angegeben. Zum Beispiel v.foo.bar. Wenn
Das Signal ist der Eingang zum Top-Modul, das direkt den Signalnamen enthält. Wenn Sie es finden
Wenn es schwierig ist, den genauen Namen zu finden, versuchen Sie, „/*verilator clocker*/“ in der RTL-Datei zu verwenden
Markieren Sie das Signal direkt.

- Compiler Compilername
Ermöglicht Optimierungen und Workarounds für den angegebenen C++-Compiler.

Klappern
Stimmen Sie auf Klang ab. Dies kann die Ausführungsgeschwindigkeit verringern, da mehrere Problemumgehungen möglich sind
um alberne, fest codierte Grenzen im Clang zu vermeiden. Dazu gehört auch das Aufbrechen tiefer Strukturen
wie für msvc wie unten beschrieben.

gcc Tune für Gnu C++, obwohl generierter Code auf fast jedem kompatiblen C++ funktionieren sollte
Compiler. Derzeit die Standardeinstellung.

msvc
Optimieren Sie für Microsoft Visual C++. Dies kann die Ausführungsgeschwindigkeit verringern, da dies möglich ist
Mehrere Problemumgehungen, um alberne fest codierte Grenzwerte in MSVC++ zu vermeiden. Das beinhaltet
Es ist zu vermeiden, tief verschachtelte Ausdrücke in Klammern in Unterausdrücke aufzuteilen
Fehler C1009 und Aufteilen tiefer Blöcke in Funktionen, um Fehler C1061 zu vermeiden.

--converge-limit
Wird selten benötigt. Gibt die maximale Anzahl von Laufzeititerationen vor dem Erstellen eines an
Modell konnte nicht konvergieren. Fehler. Der Standardwert ist 100.

--Abdeckung
Aktiviert alle Formen der Abdeckung, Alias ​​für „--coverage-line --coverage-toggle“.
--coverage-user".

--coverage-line
Gibt den grundlegenden Analysecode für die Blocklinienabdeckung an, der eingefügt werden soll.

Die Abdeckungsanalyse fügt an jedem Codefluss-Änderungspunkt Anweisungen hinzu
Zweige von IF- und CASE-Anweisungen, eine Obermenge der normalen Verilog Line Coverage. Bei
Bei jedem dieser Zweige wird ein eindeutiger Zähler erhöht. Am Ende eines Tests werden die Zähler angezeigt
zusammen mit dem Dateinamen und der Zeilennummer, die jedem Zähler entsprechen, werden hineingeschrieben
logs/coverage.pl.

Verilator deaktiviert automatisch die Abdeckung von Zweigen, die einen $stop enthalten
Es wird davon ausgegangen, dass $stop-Zweige eine Fehlerprüfung enthalten, die nicht stattfinden sollte. Ein /*verilator
cover_block_off*/ comment führt eine ähnliche Funktion für jeden Code in diesem Block aus
oder niedriger, oder /*verilator cover_on/coverage_off*/ deaktiviert die Abdeckung um Leitungen herum
von Code.

Hinweis: Verilator kann kombinatorische (nicht getaktete) Blöcke überzählen, wenn diese Blöcke vorhanden sind
Signale empfangen, bei denen die UNOPTFLAT-Warnung deaktiviert wurde; für die genaueste
Ergebnisse deaktivieren diese Warnung nicht, wenn die Abdeckung verwendet wird.

--coverage-toggle
Gibt an, dass der Signal-Toggle-Coverage-Analysecode eingefügt werden soll.

Für jedes Bit jedes Signals in einem Modul ist ein Zähler eingefügt. Der Zähler wird
Inkrementieren bei jedem Flankenwechsel des entsprechenden Bits.

Signale, die Teil von Tasks oder Anfangs-/Endblöcken sind, gelten als lokale Variablen und
sind nicht abgedeckt. Signale, die mit Unterstrichen beginnen, ganze Zahlen sind oder sehr breit sind
(>256 Bit Gesamtspeicher über alle Dimensionen) werden ebenfalls nicht abgedeckt.

Die Hierarchie wird komprimiert, sodass bei mehrfacher Instanziierung eines Moduls
Die Abdeckung wird für dieses Bit über ALLE Instanziierungen dieses Moduls hinweg summiert
gleichen Parametersatz. Ein Modul wird mit unterschiedlichen Parameterwerten instanziiert
werden als anderes Modul betrachtet und separat gezählt.

Verilator trifft eine minimal-intelligente Entscheidung über die Taktdomäne des Signals
geht zu und sucht nur nach Kanten in diesem Taktbereich. Das bedeutet, dass es Kanten geben kann
wird ignoriert, wenn bekannt ist, dass die Kante von der Empfangslogik nie gesehen werden konnte. Das
Der Algorithmus könnte sich in Zukunft verbessern. Das Nettoergebnis ist, dass die Deckung möglicherweise niedriger ist als
Was würde man sehen, wenn man sich die Spuren anschaut, aber die Abdeckung ist genauer
Darstellung der Reizqualität im Design.

Während sich das Modell stabilisiert, werden möglicherweise Kanten in der Nähe des Zeitpunkts Null gezählt. Es ist ein gutes
Üben Sie, die gesamte Abdeckung unmittelbar vor dem Loslassen des Resets auf Null zu setzen, um ein Zählen solcher Werte zu verhindern
Verhalten.

Ein Kommentarpaar /*verilator cover_off/on */ kann für Signale verwendet werden, die dies nicht tun
Sie benötigen eine Toggle-Analyse, z. B. RAMs und Registerdateien.

--coverage-underscore
Aktivieren Sie die Abdeckung von Signalen, die mit einem Unterstrich beginnen. Normalerweise sind diese Signale
nicht abgedeckt. Siehe auch --trace-underscore.

--coverage-user
Ermöglicht vom Benutzer eingefügte funktionale Abdeckung. Derzeit alle funktionalen Abdeckungspunkte
werden mithilfe von SVA angegeben, das separat mit --assert aktiviert werden muss.

Die folgende Anweisung fügt beispielsweise einen Abdeckungspunkt mit dem Kommentar hinzu
„DefaultClock“:

DefaultClock: Cover-Eigenschaft (@(posedge clk) cyc==3);

-Djung=Wert
Definiert das angegebene Präprozessorsymbol, ohne dies zuzulassen. Ähnlich wie +define; +definieren
ist in allen Verilog-Tools ziemlich Standard, während -D ein Alias ​​für GCC-Kompatibilität ist.

--debuggen
Wählen Sie das Debug-erstellte Image von Verilator aus (falls verfügbar) und aktivieren Sie weitere interne Funktionen
Behauptungen (entspricht „--debug-check“), Debugging-Meldungen (entspricht
„--debugi 4“) und Zwischenform-Dump-Dateien (entspricht „--dump-treei 3“).

--debug-check
Wird selten benötigt. Aktivieren Sie interne Debug-Assertionsprüfungen, ohne das Debug zu ändern
Ausführlichkeit. Wird automatisch aktiviert, wenn --debug angegeben wird.

--debugi
--debugi-
Wird selten benötigt – zur Verwendung durch Entwickler. Legen Sie die interne Debugging-Ebene global auf fest
angegebenen Debug-Level (1-10) oder setzen Sie die angegebene Verilator-Quelldatei auf die
angegebene Ebene (z. B. „--debugi-V3Width 9“). Höhere Ebenen erzeugen detailliertere Ergebnisse
Nachrichten.

--Standardsprache Wert
Wählen Sie die Sprache aus, die standardmäßig bei der ersten Verarbeitung jeder Verilog-Datei verwendet werden soll.
Der Sprachwert muss „1364-1995“, „1364-2001“, „1364-2005“, „1800-2005“ sein.
„1800-2009“ oder „1800-2012“.

Jede Sprache, die einer bestimmten Dateierweiterung zugeordnet ist (siehe die verschiedenen +langext+
Optionen) werden vorrangig gegenüber der durch --default-Language angegebenen Sprache verwendet.

Das Flag --default-Language wird nur für Legacy-Code empfohlen, der dasselbe verwendet
Sprache in allen Quelldateien, da die bevorzugte Option darin besteht, den zu reparierenden Code zu bearbeiten
neue Schlüsselwörter oder fügen Sie entsprechende „begin_keywords“ hinzu. Für ältere Designs mit gemischten Sprachen:
die verschiedenen +langext+-Optionen sollten verwendet werden.

Wenn keine Sprache angegeben ist, entweder durch dieses Flag oder +langext+ Optionen, dann die neueste
Es wird die SystemVerilog-Sprache (IEEE 1800-2012) verwendet.

+definieren+jung=Wert
+definieren+jung=Wert+var2=value2...
Definiert das angegebene Präprozessorsymbol oder mehrere Symbole, wenn sie durch Pluszeichen getrennt sind.
Ähnlich wie -D; +define ist in allen Verilog-Tools ziemlich Standard, während -D ein Alias ​​ist
für GCC-Kompatibilität.

--dump-tree
Wird selten benötigt. Aktivieren Sie das Schreiben von .tree-Debugdateien mit Dumping-Level 3, wodurch ein Dump ausgeführt wird
Standardkritische Phasen. Einzelheiten zum Format finden Sie in den Verilator-Interna
Handbuch. --dump-tree wird automatisch mit --debug aktiviert, also „--debug
--no-dump-tree“ kann nützlich sein, wenn die Dump-Dateien groß und unerwünscht sind.

--dump-treei
--dump-treei-
Wird selten benötigt – zur Verwendung durch Entwickler. Legen Sie die interne Baum-Dumping-Ebene global auf a fest
spezifische Dumping-Ebene oder setzen Sie die angegebene Verilator-Quelldatei auf die angegebene
Tree-Dumping-Level (z. B. „--dump-treei-V3Order 9“). Level 0 deaktiviert Dumps und ist
entspricht „--no-dump-tree“. Level 9 ermöglicht das Dumping jeder Stufe.

-E Den Quellcode vorverarbeiten, aber nicht kompilieren, wie bei „gcc -E“. Die Ausgabe wird geschrieben
zum Standard heraus. Achten Sie darauf, Debugging-Meldungen nicht zu aktivieren, da diese ebenfalls weitergeleitet werden
Standard aus.

--error-limit
Wenn diese Anzahl an Fehlern oder Warnungen auftritt, beenden Sie den Vorgang. Der Standardwert ist 50.

--exe
Generieren Sie eine ausführbare Datei. Sie müssen außerdem zusätzliche CPP-Dateien übergeben
Befehlszeile, die die Hauptschleife für Ihre Simulation implementiert.

-F Datei
Lies die angegebene Datei und handle so, als ob der gesamte Text darin als Befehl angegeben wurde
Linienparameter. Alle relativen Pfade beziehen sich auf das Verzeichnis, das die enthält
angegebene Datei. Siehe auch -f. Hinweis -F ist in allen Verilog-Tools ziemlich Standard.

-f Datei
Lies die angegebene Datei und handle so, als ob der gesamte Text darin als Befehl angegeben wurde
Linienparameter. Alle relativen Pfade beziehen sich auf das aktuelle Verzeichnis. Siehe auch
-F. Hinweis -f ist in allen Verilog-Tools ziemlich Standard.

Die Datei kann // Kommentare enthalten, die bis zum Ende der Zeile ignoriert werden. Beliebiger $VAR,
$(VAR) oder ${VAR} wird durch die angegebene Umgebungsvariable ersetzt.

--gdb
Führen Sie Verilator unter einer interaktiven GDB (oder einer VERILATOR_GDB-Umgebungsvariablen) aus
Wert) Sitzung. Siehe auch --gdbbt.

--gdbbt
Wenn --debug angegeben ist, führen Sie Verilator unter einem GDB-Prozess aus und drucken Sie einen Backtrace
beim Beenden, dann GDB sofort verlassen. Ohne --debug oder wenn GDB nicht zu funktionieren scheint,
Dieses Flag wird ignoriert. Gedacht für die einfache Erstellung von Backtraces durch Benutzer; ansonsten
siehe die Flagge --gdb.

--help
Zeigt diese Meldung und die Programmversion an und wird beendet.

-Idir
Siehe -y.

--if-Tiefe Wert
Wird selten benötigt. Legen Sie die Tiefe fest, bei der die IFDEPTH-Warnung ausgelöst wird. Der Standardwert ist 0
Dadurch wird diese Warnung deaktiviert.

+incdir+dir
Siehe -y.

--inhibit-sim
Wird selten benötigt. Erstellen Sie eine Funktion „inhibitSim(bool)“, um die Auswertung zu aktivieren und zu deaktivieren.
Dadurch kann eine Testbench auf höherer Ebene Module deaktivieren, die in einem nicht wichtig sind
gegebene Simulation, ohne dass die SystemC-Module neu kompiliert oder geändert werden müssen
instanziiert.

--inline-mult Wert
Optimieren Sie das Inlining von Modulen. Der Standardwert 2000 gibt an, dass bis zu 2000 neu sind
Operationen können dem Modell durch Inlining hinzugefügt werden, wenn mehr als diese Anzahl vorhanden ist
Operationen ergeben würden, ist das Modul nicht inline. Größere Werte oder ein Wert <= 1
wird alles einbinden, was zu längeren Kompilierungszeiten führt, aber möglicherweise schneller
Laufzeiten. Bei sehr kleinen Modulen wird diese Einstellung ignoriert; Das werden sie immer sein
inline, sofern zulässig.

-LDFLAGS Fahnen
Fügen Sie den generierten Makefiles die angegebenen C-Linker-Flags hinzu. Wenn make auf dem ausgeführt wird
Im generierten Makefile werden diese *nach* dem primären Linker an den C++-Linker (ld) übergeben
Datei, die verlinkt wird. Dieses Flag heißt -LDFLAGS, da dies der traditionelle Name in ist
Simulatoren; Es hätte besser LDLIBS heißen sollen, da es sich dabei um die Makefile-Variable handelt
es kontrolliert. (In Make steht LDFLAGS vor dem ersten Objekt, LDLIBS danach. -L
Bibliotheken müssen in der Make-Variablen LDLIBS und nicht in LDFLAGS enthalten sein.)

--Sprache Wert
Ein Synonym für „--default-langauge“, aus Kompatibilitätsgründen mit anderen Tools und früheren Versionen
Versionen von Verilator.

+libex+ext+ext...
Geben Sie die Erweiterungen an, die zum Suchen von Modulen verwendet werden sollen. Wenn zum Beispiel Modul
x wird referenziert, schau rein x.ext. Hinweis: +libext+ ist in Verilog ziemlich Standard
Werkzeug. Standardmäßig sind .v und .sv.

--lint-only
Überprüfen Sie die Dateien nur auf Lint-Verstöße und erstellen Sie keine anderen Ausgaben.

Möglicherweise möchten Sie auch die Option -Wall verwenden, um Nachrichten zu aktivieren, die als stilistisch gelten
und standardmäßig nicht aktiviert.

Wenn das Design nicht vollständig veriliert werden soll, sehen Sie sich auch die --bbox-sys und an
--bbox-unsup-Optionen.

--MMD
Aktivieren Sie die Erstellung von .d-Abhängigkeitsdateien, die zur Erkennung von Make-Abhängigkeiten verwendet werden, ähnlich wie
gcc -MMD-Option. Standardmäßig aktiviert, zum Deaktivieren verwenden Sie --no-MMD.

--MP
Erstellen Sie beim Erstellen von .d-Abhängigkeitsdateien mit --MMD falsche Ziele. Ähnlich wie gcc -MP
.

--Mdir Verzeichnis
Gibt den Namen des Make-Objektverzeichnisses an. Alle generierten Dateien werden platziert
in diesem Verzeichnis. Wenn nicht angegeben, wird „obj_dir“ verwendet. Das Verzeichnis wird erstellt, wenn
es existiert nicht und die übergeordneten Verzeichnisse sind vorhanden; Andernfalls erstellen Sie das Mdir manuell
bevor Sie Verilator anrufen.

--mod-Präfix Topname
Gibt den Namen an, der allen Klassen niedrigerer Ebene vorangestellt werden soll. Standardmäßig ist dasselbe wie
--Präfix.

--no-clk
Verhindern Sie, dass das angegebene Signal als Takt markiert wird. Siehe „--clk“.

--no-pins64
Abwärtskompatibler Alias ​​für „--pins-bv 33“.

--no-skip-identical
Wird selten benötigt. Deaktiviert das Überspringen der Ausführung von Verilator, wenn alle Quelldateien vorhanden sind
identisch und alle Ausgabedateien sind mit neuerem Datum vorhanden.

+notimingchecks
Aus Kompatibilitätsgründen mit anderen Simulatoren ignoriert.

-O0 Deaktiviert die Optimierung des Modells.

-O3 Ermöglicht langsame Optimierungen für den Code, den Verilator selbst generiert (im Gegensatz zu
„-CFLAGS -O3“, was die Optimierung des C-Compilers beeinflusst. -O3 kann die Simulation beeinträchtigen
Laufzeiten auf Kosten der Kompilierzeit. Dies setzt derzeit --inline-mult -1.

-OOptimierungsbrief
Wird selten benötigt. Aktiviert oder deaktiviert eine bestimmte Optimierung mit der Optimierung
anhand des bestandenen Schreibens ausgewählt. Ein Kleinbuchstabe deaktiviert eine Optimierung, an
Ein Großbuchstabe ermöglicht dies. Dies ist nur für Debugzwecke gedacht; siehe Quelle
Code für versionabhängige Zuordnungen von Optimierungen zu -O-Buchstaben.


Geben Sie den Namen für die endgültig erstellte ausführbare Datei an, wenn Sie --exe verwenden. Standardmäßig ist die
--prefix, falls nicht angegeben.

--no-order-clock-delay
Wird selten benötigt. Deaktiviert eine Fehlerbehebung für die verzögerte Reihenfolge der Taktfreigaben
Zuordnungen. Dieses Flag sollte nur verwendet werden, wenn es von den Entwicklern vorgeschlagen wird.

--output-split Bytes
Ermöglicht die Aufteilung der ausgegebenen .cpp/.sp-Dateien in mehrere Ausgaben. Wenn eine C++-Datei
die angegebene Anzahl an Vorgängen überschreitet, wird beim nächsten Mal eine neue Datei erstellt
Funktionsgrenze. Darüber hinaus werden alle langsamen Routinen in __Slow-Dateien abgelegt.
Dies beschleunigt die Kompilierung, da die Optimierung für die langsamen Routinen deaktiviert werden kann.
und die restlichen Dateien können auf parallelen Maschinen kompiliert werden. Verwenden von --output-split
sollte nur einen geringfügigen Einfluss auf die Leistung haben. Mit GCC 3.3 auf einem 2GHz Opteron,
--output-split 20000 führt zu einer Aufteilung in etwa eine Minute dauernde Kompilierung
Brocken.

--output-split-cfuncs Aussagen
Ermöglicht die Aufteilung von Funktionen in den Ausgabe-.cpp/.sp-Dateien in mehrere Funktionen.
Wenn eine generierte Funktion die angegebene Anzahl von Operationen überschreitet, wird eine neue Funktion erstellt
wird erstellt. Mit --output-split ermöglicht dies eine schnellere Kompilierung von GCC
kleiner Leistungsverlust, der sich mit abnehmenden Split-Werten verschlimmert. Beachten Sie, dass
Diese Option ist in dem Sinne stärker als --output-split, dass dies bei --output-split nicht der Fall ist
innerhalb einer Funktion aufteilen.

--output-split-ctrace Aussagen
Ermöglicht die Aufteilung von Ablaufverfolgungsfunktionen in den Ausgabe-.cpp/.sp-Dateien in mehrere
Funktionen. Standardmäßig ist die gleiche Einstellung wie bei --output-split-cfuncs.

-P Deaktivieren Sie mit -E die Generierung von Zeilenmarkierungen und Leerzeilen, ähnlich dem GCC-Flag -P.

--pins64
Abwärtskompatibler Alias ​​für „--pins-bv 65“. Beachten Sie, dass es sich um eine 65 und nicht um eine 64 handelt.

--pins-bv Breite
Gibt SystemC-Eingaben/Ausgaben größer oder gleich an Breite Bits breit sollten
Verwenden Sie sc_bvs anstelle von uint32/vluint64_ts. Der Standardwert ist „--pins-bv 65“. Versionen
Vor Verilator 3.671 war der Standardwert „--pins-bv 33“. Je mehr sc_bv verwendet wird, desto schlimmer
für Leistung. Verwenden Sie das Attribut „/*verilator sc_bv*/“, um bestimmte Ports auszuwählen
sei sc_bv.

--pins-sc-uint
Gibt an, dass SystemC-Eingaben/Ausgaben mit einer Breite von mehr als 2 Bit sc_uint verwenden sollen
zwischen 2 und 64. In Kombination mit der Kombination „--pins-sc-biguint“ ergibt sich das Ergebnis
wobei sc_uint zwischen 2 und 64 und sc_biguint zwischen 65 und 512 verwendet wird.

--pins-sc-biguint
Gibt an, dass SystemC-Eingaben/Ausgaben mit einer Breite von mehr als 65 Bit sc_biguint verwenden sollen
zwischen 65 und 512 und sc_bv ab 513 aufwärts. In Kombination mit dem
Die Kombination „--pins-sc-uint“ führt dazu, dass sc_uint zwischen 2 und 64 verwendet wird und
sc_biguint wird zwischen 65 und 512 verwendet.

--pins-uint8
Gibt SystemC-Eingänge/Ausgänge an, die kleiner als die Einstellung --pins-bv und 8 sind
Bits oder weniger sollten uint8_t anstelle von uint32_t verwenden. Ebenso Stifte der Breite 9-16
Verwenden Sie uint16_t anstelle von uint32_t.

--pipe-filter Befehl
Selten benötigt und experimentell. Verilator erzeugt den angegebenen Befehl als
Unterprozess-Pipe, damit der Befehl benutzerdefinierte Änderungen am Verilog-Code durchführen kann
bevor es Verilator erreicht.

Vor dem Lesen jeder Verilog-Datei übergibt Verilator den Dateinamen an den Unterprozess.
stdin mit 'read_verilog " "'. Der Filter kann dann die Datei lesen und ausführen
jede gewünschte Filterung und gibt die neuen Dateiinhalte auf stdout an Verilator zurück
mit 'Content-Length'. Die Ausgabe des Filters an stderr wird an Verilator weitergeleitet
stdout und wenn der Filter mit einem Status ungleich Null beendet wird, wird Verilator beendet. Siehe die
t/t_pipe_filter-Test für ein Beispiel.

Um die Ausgabe des Filters zu debuggen, versuchen Sie, die Option -E zu verwenden, um die vorverarbeitete Ausgabe anzuzeigen.

prefix Topname
Gibt den Namen der Top-Level-Klasse und des Makefiles an. Standardmäßig wird V vorangestellt
der Name des Schalters --top-module oder V vor dem ersten Verilog-Dateinamen
über die Kommandozeile übergeben.

--profile-cfuncs
Ändern Sie die erstellten C++-Funktionen, um die Profilerstellung zu unterstützen. Die Funktionen werden sein
minimiert, um eine „grundlegende“ Anweisung zu enthalten, im Allgemeinen einen einzelnen Always-Block oder eine einzelne Always-Verbindung
Stellungnahme. (Beachten Sie, dass dies die ausführbare Datei um ca. 5 % verlangsamt.) Darüber hinaus ist die
Dem Funktionsnamen werden der Basisname des Verilog-Moduls und die Zeilennummer angehängt
Die Aussage stammte von. Dadurch können gprof- oder oprofile-Berichte mit korreliert werden
die Originalaussagen der Verilog-Quelle.

--Privatgelände
Gegenteil von --public. Ist die Standardeinstellung; Diese Option dient der Abwärtskompatibilität.

--öffentlich
Dies ist nur für historische Debugzwecke gedacht. Die Verwendung kann zu Fehlsimulationen führen
erzeugte Uhren.

Erklärt alle Signale und Module als öffentlich. Dadurch werden Signaloptimierungen deaktiviert
wenn alle Signale einen /*verilator public*/ Kommentare und Inlining hätten. Auch das wird sich ändern
Off-Inlining, als ob alle Module ein /*verilator public_module*/ hätten, es sei denn, das Modul
Es wurde speziell mit /*verilator inline_module* aktiviert./.

--report-unoptflat
Zusätzliche Diagnose für UNOPTFLAT-Warnungen. Dazu gehören für jede Schleife die 10 breitesten
Variablen in der Schleife und die 10 am stärksten aufgefächerten Variablen in der Schleife. Diese sind
Kandidaten für die Aufteilung in mehrere Variablen, um die Schleife zu durchbrechen.

Darüber hinaus wird eine GraphViz DOT-Datei aller stark verbundenen Komponenten erstellt
innerhalb der Quelle, die jeder Schleife zugeordnet ist. Dies geschieht unabhängig davon, ob
--dump-tree ist gesetzt. Solche Diagramme können bei der Analyse des Problems hilfreich sein, können aber sehr hilfreich sein
wirklich groß.

Es gibt verschiedene Befehle zum Anzeigen und Bearbeiten von DOT-Dateien. Zum Beispiel die Punkt
Mit dem Befehl kann eine DOT-Datei zum Drucken in eine PDF-Datei konvertiert werden. Zum Beispiel:

dot -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot

generiert aus der DOT-Datei ein PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf.

--speicherbar
Aktivieren Sie die Aufnahme von Speicher- und Wiederherstellungsfunktionen in das generierte Modell.

Der Benutzercode muss dann ein VerilatedSerialize- oder VerilatedDeserialze-Objekt erstellen
Aufrufen der Operatoren << oder >> für das generierte Modell und alle anderen Daten des Prozesses
muss gerettet/restauriert werden. Zum Beispiel:

void save_model(const char* filenamep) {
VerilatedSave os;
os.open(filenamep);
os << main_time; // Benutzercode muss den Zeitstempel usw. speichern
os << *topp;
}
void restart_model(const char* filenamep) {
VerilatedRestore os;
os.open(filenamep);
os >> main_time;
os >> *topp;
}

--sc
Gibt den SystemC-Ausgabemodus an; siehe auch --cc.

--Statistiken
Erstellt eine Dump-Datei mit Statistiken zum Design in {prefix}__stats.txt.

--stats-vars
Erstellt detailliertere Statistiken, einschließlich einer Liste aller Variablen nach Größe (einfach).
--stats gibt nur eine Zählung an). Siehe --stats, was dadurch impliziert wird.

-sv Gibt an, dass SystemVerilog-Sprachfunktionen aktiviert werden sollen. äquivalent zu „--sprache
1800-2005". Diese Option ist standardmäßig ausgewählt und dient der Kompatibilität mit
andere Simulatoren.

+systemverilogext+ext
Ein Synonym für „+1800-2012ext+“ext.

--top-module Topname
Wenn das Eingabe-Verilog mehr als ein Modul der obersten Ebene enthält, wird der Name angegeben
Das Verilog-Modul der obersten Ebene wird zum obersten Modul und legt den Standardwert für if --prefix fest
ist nicht benutzt. Bei Standardausführungen mit nur einer Oberseite ist dies nicht erforderlich.

--verfolgen
Fügt dem Modell Wellenformverfolgungscode hinzu. Verilator generiert zusätzliche
{prefix}__Trace*.cpp-Dateien, die kompiliert werden müssen. Zusätzlich
verilated_vcd_sc.cpp (für SystemC-Traces) oder verilated_vcd_c.cpp (für beide) muss sein
kompiliert und eingebunden. Bei Verwendung der von Verilator generierten Makefiles werden diese verwendet
als Quellziele für Sie hinzugefügt. Wenn Sie die Verilator-Makefiles nicht verwenden, können Sie Folgendes tun
Sie müssen diese manuell zu Ihrem Makefile hinzufügen.

Das Einkompilieren der Ablaufverfolgung kann zu geringfügigen Leistungseinbußen führen, selbst wenn
Wellenformen werden während der Modellausführung nicht aktiviert.

--trace-tiefe Level
Geben Sie die Anzahl der Tiefenebenen an, um die Ablaufverfolgung zu aktivieren, zum Beispiel --trace-level 1 bis
nur die Signale der obersten Ebene sehen. Standardmäßig wird das gesamte Modell verwendet. Mit einer kleinen Zahl
verringert die Sichtbarkeit, verbessert jedoch die Laufzeit und die Größe der Trace-Datei erheblich.

--trace-max-array Tiefe
Wird selten benötigt. Geben Sie die maximale Array-Tiefe eines Signals an, das verfolgt werden kann.
Der Standardwert ist 32, da das Verfolgen großer Arrays die verfolgten Simulationen erheblich verlangsamen kann.

--trace-max-width Breite
Wird selten benötigt. Geben Sie die maximale Bitbreite eines Signals an, das verfolgt werden darf.
Der Standardwert ist 256, da das Verfolgen großer Vektoren die verfolgten Simulationen erheblich verlangsamen kann.

--no-trace-params
Deaktivieren Sie die Parameterverfolgung.

--trace-structs
Aktivieren Sie die Ablaufverfolgung, um den Namen der gepackten Struktur-, Unions- und gepackten Array-Felder anzuzeigen.
statt eines einfachen kombinierten vollgepackten Busses. Aufgrund von Einschränkungen im VCD-Dateiformat kann dies der Fall sein
Dies führt zu deutlich langsameren Trace-Zeiten und größeren Trace-Dateien.

--trace-underscore
Aktivieren Sie die Verfolgung von Signalen, die mit einem Unterstrich beginnen. Normalerweise sind diese Signale
wird beim Tracing nicht ausgegeben. Siehe auch --coverage-underscore.

-Ujung
Definiert das angegebene Präprozessorsymbol.

--unroll-count Schleifen
Wird selten benötigt. Gibt die maximale Anzahl von Schleifeniterationen an, die abgewickelt werden können.
Siehe auch BLKLOOPINIT-Warnung.

--unroll-stmts Aussagen
Wird selten benötigt. Gibt die maximale Anzahl von Anweisungen in einer Schleife für diese Schleife an
ausgerollt werden. Siehe auch BLKLOOPINIT-Warnung.

--unused-regexp regexp
Wird selten benötigt. Gibt einen einfachen regulären Ausdruck mit * und ? an. dass, wenn ein Signalname übereinstimmt
unterdrückt die UNUSED-Warnung. Standardmäßig ist „*unbenutzt*“. Wenn Sie es auf „“ setzen, wird die Funktion deaktiviert
passend.

-V Zeigt die ausführliche Version an, einschließlich der kompilierten Konfigurationsinformationen
Verilator. (Ähnlich wie perl -V.)

-v Dateinamen
Lesen Sie den Dateinamen als Verilog-Bibliothek. Alle Module in der Datei können dazu verwendet werden
Zelleninstanziierungen im Modul der obersten Ebene auflösen, andernfalls ignoriert. Beachten Sie, dass -v fair ist
Standard für alle Verilog-Tools.

+verilog1995ext+ext
+verilog2001ext+ext
Synonyme für „+1364-1995ext+“ext und „+1364-2001ext+“ext beziehungsweise

-Wand
Aktivieren Sie alle Warnungen, einschließlich Codestilwarnungen, die normalerweise von deaktiviert werden
default.

-Werror-Nachricht
Konvertieren Sie die angegebene Warnmeldung in eine Fehlermeldung. Dies gilt im Allgemeinen
Halten Sie Benutzer beispielsweise davon ab, wichtige Regeln für die gesamte Website zu verletzen
„-Werror-NOUNOPTFLAT“.

-WZukunft-Nachricht
Wird selten benötigt. Unterdrücken Sie unbekannte Verilator-Kommentare oder Warnmeldungen mit den angegebenen
Nachrichtencode. Dies wird verwendet, um das Schreiben von Code mit Pragmas für eine spätere Version von zu ermöglichen
Verilator läuft unter einer älteren Version; Fügen Sie -Wfuture- Argumente für jeden Nachrichtencode hinzu
oder kommentieren Sie, dass die neue Version unterstützt, was die ältere Version nicht unterstützt.

-Wnein-Nachricht
Deaktivieren Sie die angegebene Warnmeldung. Dadurch werden alle lint_on-Anweisungen in überschrieben
die Quelle, dh die Warnung wird trotzdem nicht gedruckt.

-Wno-lint
Deaktivieren Sie alle Flusen-bezogenen Warnmeldungen und alle Stilwarnungen. Das ist gleichwertig
zu „-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY
-Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH"
plus die für den Wno-Stil angezeigte Liste.

Es wird dringend empfohlen, dass Sie Ihren Code bereinigen, anstatt diese Option zu verwenden
Nur zur Verwendung bei der Ausführung von Testfällen mit Code gedacht, den wir von Dritten erhalten haben.

-Wno-Stil
Deaktivieren Sie alle Warnmeldungen im Zusammenhang mit dem Codestil (beachten Sie, dass dies standardmäßig bereits der Fall ist).
Behinderte). Dies entspricht „-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSED
-Wno-VARHIDDEN".

-Wno-tödlich
Wenn Warnungen erkannt werden, drucken Sie diese aus, verlassen Sie den Simulator jedoch nicht.

Warnmeldungen in Builds zu haben ist schlampig. Es wird dringend empfohlen, die Reinigung durchzuführen
Verwenden Sie in Ihrem Code inline lint_off oder die Flags -Wno-..., anstatt diese Option zu verwenden.

-Warnung-Nachricht
Aktiviert die angegebene Warnmeldung.

-Wwarn-lint
Aktivieren Sie alle Warnmeldungen im Zusammenhang mit Flusen (beachten Sie, dass diese standardmäßig bereits aktiviert sind).
haben jedoch keinen Einfluss auf Stilnachrichten. Dies entspricht „-Wwarn-ALWCOMBORDER
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PINMISSING -Wwarn-REALCVT
-Wwarn-UNSIGNED -Wwarn-WIDTH".

-Warn-Stil
Aktivieren Sie alle Warnmeldungen im Zusammenhang mit dem Codestil. Dies entspricht „-Wwarn“.
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN".

--x-assign 0
--x-assign 1
--x-assign fast (Standard)
--x-assign eindeutig
Steuert den Zwei-Zustand-Wert, der ersetzt wird, wenn eine Zuweisung an X auftritt.
--x-assign=fast, die Standardeinstellung, konvertiert alle Xs in das, was für die Leistung am besten ist.
--x-assign=0 wandelt alle X in Nullen um und ist außerdem schnell. --x-assign=0 konvertiert alle Xs in
1s, das ist fast so schnell wie 0, aber es ist wahrscheinlicher, dass Reset-Bugs als aktiv hoch erkannt werden
Logik wird ausgelöst. --x-assign=unique ruft eine Funktion auf, um den Wert this zu bestimmen
Ermöglicht die Randomisierung aller Xs, um Reset-Bugs zu finden, und ist die langsamste, aber sicherste Methode
Finden von Reset-Fehlern im Code.

Wenn Sie --x-assign unique verwenden, möchten Sie möglicherweise Ihren Zufallszahlengenerator mit einem Seed versehen, z
dass jeder Regressionslauf eine andere Randomisierungssequenz erhält. Nutzen Sie das System
srand48() oder für Windows sand() Funktion, um dies zu tun. Sie werden es wahrscheinlich auch wollen
Drucken Sie alle ausgewählten Seeds und den Code aus, um eine erneute Ausführung mit demselben Seed zu ermöglichen
Fehler reproduzieren.

Hinweis. Diese Option gilt nur für Variablen, die im explizit X zugewiesen sind
Verilog-Quellcode. Die Anfangswerte der Uhren werden auf 0 gesetzt, es sei denn, --x-initial-edge ist dies
angegeben. Die Anfangswerte aller anderen Zustandshaltevariablen werden wie folgt festgelegt
--x-assign unique wurde angegeben.

--x-initial-edge
Ermöglicht die Emulation ereignisgesteuerter Simulatoren, die im Allgemeinen eine Flanke an einem auslösen
Übergang von X nach 1 („posedge“) oder X nach 0 („negedge“). Daher der folgende Code:
Wenn „rst_n“ nicht initialisiert ist, wird „res_n“ auf „1'b1“ gesetzt, wenn „rst_n“ zum ersten Mal festgelegt wird
bis Null:

reg res_n = 1'b0;

immer @(negedge rst_n) beginnen
if (rst_n == 1'b0) begin
res_n <= 1'b1;
Ende
Ende

In Verilator erhalten nicht initialisierte Uhren standardmäßig den Wert Null, also das oben Gesagte
„Immer“-Block würde nicht ausgelöst.

Obwohl dies keine gute Praxis ist, gibt es einige Designs, die darauf basieren, dass XX 0 a auslöst
„Negedge“, insbesondere in Reset-Sequenzen. Die Verwendung von --x-initial-edge mit Verilator wird dies tun
reproduzieren Sie dieses Verhalten. Dadurch wird auch sichergestellt, dass XX 1 ein „Posedge“ auslöst.

Hinweis. Einige Benutzer haben berichtet, dass die Verwendung dieser Option die Konvergenz beeinträchtigen kann
Möglicherweise muss --converge-limit verwendet werden, um die Anzahl der Konvergenzen zu erhöhen
Iterationen. Dies kann ein weiterer Hinweis auf Probleme mit dem modellierten Design sein
sollten angesprochen werden.

-y dir
Fügen Sie das Verzeichnis zur Liste der Verzeichnisse hinzu, die nach Include-Dateien durchsucht werden sollen
oder Bibliotheken. Die drei Flags -y, +incdir und -I haben eine ähnliche Wirkung; +incdir und +y
sind in allen Verilog-Tools ziemlich Standard, während -I ein Alias ​​für GCC-Kompatibilität ist.

Verilator verwendet jedoch standardmäßig das aktuelle Verzeichnis („-y .“) und jedes angegebene --Mdir
Diese Standardpfade werden nach allen vom Benutzer angegebenen Verzeichnissen verwendet. Dies ermöglicht '-y
„$(pwd)“‘ wird verwendet, wenn absolute Dateinamen für Fehlermeldungen gewünscht werden
relativen Dateinamen.

BEISPIEL C + + EXECUTION


Wir werden dieses Beispiel in C++ kompilieren.

mkdir test_our
cd test_our

Katze < unsere.v
Modul unser;
Anfangsbeginn $display("Hello World"); $fertig; Ende
Endmodul
EOF

Katze < sim_main.cpp
#include „Vour.h“
#include „verilated.h“
int main(int argc, char **argv, char **env) {
Verilated::commandArgs(argc, argv);
Vour* oben = neues Vour;
while (!Verilated::gotFinish()) { top->eval(); }
oben löschen;
wunsch(0);
}
EOF

Wenn Sie Verilator aus Quellen oder einem Tarball installiert haben, jedoch nicht als Teil Ihres Betriebs
System (als RPM), zuerst müssen Sie auf das Kit zeigen:

export VERILATOR_ROOT=/path/to/where/verilator/was/installed
export PATH=$VERILATOR_ROOT/bin:$PATH

Jetzt führen wir Verilator in unserem kleinen Beispiel aus.

verilator -Wall --cc our.v --exe sim_main.cpp

Wir können den Quellcode im Verzeichnis „obj_dir“ sehen. Weitere Informationen finden Sie im Abschnitt DATEIEN weiter unten
Beschreibungen einiger der erstellten Dateien.

ls -l obj_dir

Wir können es dann kompilieren

cd obj_dir
make -j -f Vour.mk Vour

(Verilator enthielt eine Standardkompilierungsregel und eine Linkregel, da wir --exe verwendet und eine übergeben haben
.cpp-Datei in der Verilator-Befehlszeile. Sie können auch Ihre eigenen Kompilierungsregeln schreiben, z
Wir werden es im Abschnitt SYSTEMC zeigen.)

Und jetzt führen wir es aus

CD ..
obj_dir/Vour

Und wir bekommen als Ausgabe

Hallo Welt
- our.v:2: Verilog $finish

Eigentlich ist es besser, wenn Sie ein Makefile schreiben, das das alles für Sie erledigt. Dann, wenn Ihr
Wenn sich die Quelle ändert, werden alle diese Schritte automatisch ausgeführt. Siehe das Verzeichnis test_c in
die Verteilung als Beispiel.

BEISPIEL SYSTEMC EXECUTION


Dies ist ein ähnliches Beispiel wie oben, jedoch unter Verwendung von SystemC.

mkdir test_our_sc
cd test_our_sc

Katze < unsere.v
Modul our (clk);
Eingabe clk; // Uhr ist erforderlich, um die Erstaktivierung zu erhalten
immer @ (posedge clk)
begin $display("Hello World"); $fertig; Ende
Endmodul
EOF

Katze < sc_main.cpp
#include „Vour.h“
int sc_main(int argc, char **argv) {
Verilated::commandArgs(argc, argv);
sc_clock clk ("clk",10, 0.5, 3, true);
Vour* oben;
top = new Vour("top"); // SP_CELL (oben, Vour);
top->clk(clk); // SP_PIN (top, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
oben löschen;
wunsch(0);
}
EOF

Wenn Sie Verilator aus Quellen oder einem Tarball installiert haben, jedoch nicht als Teil Ihres Betriebs
System (als RPM), zuerst müssen Sie auf das Kit zeigen:

export VERILATOR_ROOT=/path/to/where/verilator/was/installed
export PATH=$VERILATOR_ROOT/bin:$PATH

Jetzt führen wir Verilator in unserem kleinen Beispiel aus.

verilator -Wall --sc our.v

Wir können es dann kompilieren

make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o

Und mit SystemC verknüpfen. Beachten Sie, dass Ihr Pfad zu den Bibliotheken je nach Datei variieren kann
Betriebssystem.

export SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
export LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Könnte erforderlich sein, wenn SystemC 2.3.0
export SYSTEMC_CXX_FLAGS=-pthread

g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verilated.o \
-o Dein -lsystemc

Und jetzt führen wir es aus

CD ..
obj_dir/Vour

Und wir erhalten die gleiche Ausgabe wie im C++-Beispiel:

Hallo Welt
- our.v:2: Verilog $finish

Eigentlich ist es besser, ein Makefile zu verwenden, das das alles für Sie erledigt. Dann, wenn Ihre Quelle
Wenn Sie Änderungen vornehmen, werden alle diese Schritte automatisch ausgeführt. Siehe das Verzeichnis test_sc im
Verteilung als Beispiel.

BENCHMARKIERUNG & OPTIMIERUNG


Um die beste Leistung zu erzielen, führen Sie Verilator mit den Flags „-O3 --x-assign=fast --noassert“ aus. Der
Das Flag -O3 erfordert längere Kompilierungszeiten und --x-assign=fast kann das Risiko erhöhen
Fehler im Tausch gegen Leistung zurücksetzen; Weitere Informationen zu diesen Flags finden Sie in der obigen Dokumentation.

Kleinere Änderungen am Verilog-Code können ebenfalls zu großen Gewinnen führen. Sie sollten kein UNOPTFLAT haben
Warnungen von Verilator. Die Behebung dieser Warnungen kann zu enormen Verbesserungen führen; ein Benutzer
Die eine UNOPTFLAT-Warnung wurde durch eine einfache Änderung an der zum Gate verwendeten Taktverriegelung behoben
Takte und erzielte eine Leistungssteigerung von 60 %.

Darüber hinaus hängt die Leistung eines Verilated-Modells hauptsächlich von Ihrem C++-Compiler ab
Größe der Caches Ihrer CPU.

Standardmäßig ist die Optimierung der Datei lib/verilated.mk deaktiviert. Dies ist für die
Ein Vorteil für neue Benutzer, da es die Kompilierzeiten auf Kosten der Laufzeit verbessert. Hinzufügen
Um die Optimierung als Standard festzulegen, legen Sie eine von drei Variablen fest: OPT, OPT_FAST oder OPT_SLOW
lib/verilated.mk. Oder verwenden Sie die Option -CFLAGS und/oder -LDFLAGS im Befehl verilator
Zeile, um die Flags direkt an den Compiler oder Linker zu übergeben. Oder, nur für einen Lauf, bestehen
sie auf der Befehlszeile, um Folgendes zu machen:

make OPT_FAST="-O2" -f Vour.mk Vour__ALL.a

OPT_FAST spezifiziert meist Optimierungen für die Programme, die Teil des Fast Path sind
Code, der in jedem Zyklus ausgeführt wird. OPT_SLOW gibt Optimierungen für Slow-Path-Dateien an
(plus Ablaufverfolgung), die nur selten ausgeführt werden, deren Kompilierung jedoch lange dauert
Optimierung auf. OPT gibt die Gesamtoptimierung an und wirkt sich auf alle Kompilierungen aus, einschließlich
Diese OPT_FAST und OPT_SLOW wirken sich aus. Für beste Ergebnisse verwenden Sie OPT="-O2" und verknüpfen Sie mit
"-statisch". Nahezu die gleichen Ergebnisse können mit viel besseren Kompilierungszeiten erzielt werden
OPT_FAST="-O1 -fstrict-aliasing". Eine höhere Optimierung wie „-O3“ kann hilfreich sein, aber gcc
Die Kompilierzeiten können unter O3 selbst bei mittelgroßen Designs übermäßig lang sein. Alternativ einige
Größere Designs melden bei Verwendung von „-Os“ eine bessere Leistung.

Leider kann die Verwendung des Optimierers mit SystemC-Dateien dazu führen, dass die Kompilierung dauert
einige Minuten. (Die SystemC-Bibliotheken verfügen über viele kleine Inline-Funktionen, die das steuern
Compilermuttern.)

Für beste Ergebnisse verwenden Sie GCC 3.3 oder neuer. GCC 3.2 und früher weisen Optimierungsfehler auf
Zeiger-Aliasing-Erkennung, die zu doppelten Leistungseinbußen führen kann.

Wenn Sie viele Simulationen auf einer einzigen Kompilierung ausführen, prüfen Sie die rückkopplungsgesteuerte Vorgehensweise
Zusammenstellung. Wenn Sie mit GCC -fprofile-arcs verwenden, ergibt sich -fbranch-probabilities
weitere 15 % oder so.

Moderne Compiler unterstützen auch die Link-Time-Optimierung (LTO), was insbesondere dann hilfreich sein kann, wenn
Sie verlinken im DPI-Code. Um LTO auf GCC zu aktivieren, übergeben Sie „-flto“ sowohl bei der Kompilierung als auch bei der Verknüpfung.
Hinweis: LTO kann bei großen Designs zu übermäßig langen Kompilierungszeiten führen.

Wenn Sie Ihre eigenen Makefiles verwenden, möchten Sie möglicherweise den Verilated-Code mit kompilieren
-DVL_INLINE_OPT=inline. Dies führt zu Inline-Funktionen, erfordert jedoch, dass alle cpp
Dateien können in einem einzigen Compilerlauf kompiliert werden.

Sie können weitere Optimierungsmöglichkeiten entdecken, indem Sie den Verilog-Code profilieren. Verwenden
--profile-cfuncs von Verilator, dann -g -pg von GCC. Sie können dann entweder oprofile oder ausführen
gprof, um zu sehen, wo im C++-Code die Zeit verbracht wird. Führen Sie die gprof-Ausgabe durch
verilator_profcfunc und es wird Ihnen sagen, auf welchen Verilog-Zeilennummern die meisten davon stehen
Zeit wird aufgewendet.

Wenn Sie fertig sind, teilen Sie dem Autor bitte die Ergebnisse mit. Ich behalte gerne im Auge, wie Verilator funktioniert
vergleichen und möglicherweise weitere Verbesserungen vorschlagen können.

Verwenden Sie verilator_bin online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad




×
Werbung
❤ ️Hier einkaufen, buchen oder kaufen – kostenlos, damit die Dienste kostenlos bleiben.