verilator_bin_dbg - Online în cloud

Aceasta este comanda verilator_bin_dbg care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


Verilator - Convertiți codul Verilog în C++/SystemC

REZUMAT


verilator --ajutor
verilator --version
verilator --cc [opțiuni] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [opțiuni] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [top_level.v]...

DESCRIERE


Verilatorul convertește codul Verilog sintetizabil (nu comportamental), plus unele sinteze,
SystemVerilog și un mic subset de afirmații Verilog AMS, în cod C++ sau SystemC. Aceasta
nu este un simulator complet, ci un compilator.

Verilatorul este invocat cu parametri similari cu GCC, Cadence Verilog-XL/NC-Verilog sau
VCS de la Synopsys. Citește codul Verilog specificat, îl scame și opțional îl adaugă
acoperire și cod de urmărire a formei de undă. Pentru formatele C++ și SystemC, scoate .cpp și .h
fișiere.

Fișierele create de Verilator sunt apoi compilate cu C++. Utilizatorul scrie puțin C++
fișier wrapper, care instanțează modulul de nivel superior și transmite acest nume de fișier pe fișierul
Linie de comanda. Aceste fișiere C sunt compilate în C++ și sunt legate cu fișierele Verilated.

Executabilul rezultat va efectua simularea propriu-zisă.

Pentru a începe, săriți în jos la „EXEMPLU DE EXECUȚIE C++”.

ARGUMENT REZUMAT


Acesta este un scurt rezumat al argumentelor pentru Verilator. Vezi descrierile detaliate în
secțiunile următoare pentru mai multe informații.

{file.v} Nume de fișiere la nivel superior Verilog
{file.c/cc/cpp} Fișiere C++ opționale pentru compilare
{file.a/o/so} Fișiere C++ opționale la care să se conecteze

+1364-1995ext+ Utilizați Verilog 1995 cu extensia de fișier
+1364-2001ext+ Utilizați Verilog 2001 cu extensia de fișier
+1364-2005ext+ Utilizați Verilog 2005 cu extensia de fișier
+1800-2005ext+ Utilizați SystemVerilog 2005 cu extensia de fișier
+1800-2009ext+ Utilizați SystemVerilog 2009 cu extensia de fișier
+1800-2012ext+ Utilizați SystemVerilog 2012 cu extensia de fișier
--assert Activați toate aserțiunile
--autoflush Flush fluxuri după toate $displays
--bbox-sys Blackbox unknown $apeluri de sistem
--bbox-unsup Caracteristici de limbă neacceptate de Blackbox
--cos Suprascrierea binarului Verilator
-CFLAGS Steaguri compilatorului C++ pentru makefile
--cc Creați ieșire C++
--cdc Analiza de trecere a domeniului de ceas
--clk Marcați semnalul specificat ca ceas
--compilator Ajustați pentru compilatorul C++ specificat
--limită-converge Reglați timpul de stabilire a convergenței
--coverage Activați toată acoperirea
--coverage-line Activează acoperirea liniei
--coverage-toggle Activați comutarea acoperirii
--coverage-user Activați acoperirea utilizatorului SVL
--coverage-undercore Activează acoperirea _signals
-D [= ] Setați definirea preprocesorului
--debug Activați depanarea
--debug-check Activați afirmațiile de depanare
--debugi Activați depanarea la un nivel specificat
--debugi- Activați depanarea unui fișier sursă la un nivel
--limba implicita Limba implicită de analizat
+definiți+ = Setați definirea preprocesorului
--dump-tree Activați descărcarea fișierelor .tree
--dump-treei Activați descărcarea fișierelor .tree la un nivel
--dump-treei- Activați descărcarea fișierului .tree la un fișier sursă la un nivel
-E Preprocesează, dar nu compilați
--error-limit Anulați după acest număr de erori
--exe Link pentru a crea executabil
-F Analizați opțiunile dintr-un fișier, relativ
-f Analizați opțiunile dintr-un fișier
--gdb Rulați Verilatorul sub GDB în mod interactiv
--gdbbt Rulați Verilatorul sub GDB pentru urmărire înapoi
--help Afișează acest ajutor
-Eu Director pentru a căuta include
--dacă-adâncime Reglați avertismentul IFDEPTH
+incdir+ Director pentru a căuta include
--inhibit-sim Creare funcție pentru a opri sim
--inline-mult Tune modul inline
-LDFLAGS Steaguri pre-obiect de linker pentru makefile
-LDLIBS Steaguri de bibliotecă de linker pentru makefile
--limba Standard de limbă implicit de analizat
+libext+ +[ext]... Extensii pentru găsirea modulelor
--lint-only Lint, dar nu face ieșire
--MMD Creați fișiere de dependență .d
--MP Creați ținte de dependență false
--Mdir Numele directorului obiectelor de ieșire
--mod-prefix Nume pentru a preda claselor inferioare
--nu-clk Preveniți marcarea semnalului specificat ca ceas
--no-pins64 Nu folosiți vluint64_t pentru simboluri pe 33-64 de biți
--no-skip-identical Dezactivează ignorarea ieșirii identice
+notimingchecks Ignorat
-O0 Dezactivează optimizările
-O3 Optimizări de înaltă performanță
-O Optimizări selectabile
-o Numele executabilului final
--no-order-clock-delay Dezactivați asignarea de activare a ceasului de comandă
--ieșire-divizată Împărțiți fișierele .cpp în bucăți
--output-split-cfuncs Divizarea funcțiilor .cpp
--output-split-ctrace Divizarea funcțiilor de urmărire
-P Dezactivează numerele de rând și spațiile libere cu -E
--pins-bv Specificați tipuri pentru porturile de nivel superior
--pins-sc-uint Specificați tipurile pentru porturile de nivel superior
--pins-sc-biguint Specificați tipurile pentru porturile de nivel superior
--pins-uint8 Specificați tipurile pentru porturile de nivel superior
--teava-filtru Filtrați toate intrările printr-un script
--prefix Numele clasei de nivel superior
--profile-cfuncs Nume funcții pentru profilare
--Depanare privată; vezi documentele
--Depanare publica; vezi documentele
--report-unoptflat Diagnosticare suplimentară pentru UNOPTFLAT
--savable Activează salvarea-restaurarea modelului
--sc Creați ieșire SystemC
--stats Creați fișier cu statistici
--stats-vars Oferă statistici despre variabile
-sv Activați parsarea SystemVerilog
+systemverilogext+ Sinonim pentru +1800-2012ext+
--top-modul Numele modulului de intrare de nivel superior
--trace Activați crearea formei de undă
--urme-adâncime Adâncimea trasării
--trace-max-array Lățimea maximă a biților pentru urmărire
--trace-max-width Adâncimea maximă a matricei pentru urmărire
--trace-params Activați parametrii de urmărire
--trace-structs Activați urmărirea numelor structurilor
--trace-undercore Activează urmărirea semnalelor _
-U Undefine definire preprocesor
--unroll-count Reglați iterațiile maxime ale buclei
--unroll-stmts Reglați dimensiunea maximă a corpului buclei
--unused-regexp Reglați semnalele de scame NEUTILIZATE
-V Versiune și config
-v Biblioteca Verilog
+verilog1995ext+ Sinonim pentru +1364-1995ext+
+verilog2001ext+ Sinonim pentru +1364-2001ext+
-Weroare- Convertiți avertismentul în eroare
-Wfuture- Dezactivați avertismentele privind mesajele necunoscute
-Nu- Dezactivați avertismentul
-Wno-lint Dezactivează toate avertismentele de scame
-Wno-style Dezactivează toate avertismentele de stil
-Wno-fatal Dezactivează ieșirea fatală pe avertismente
--x-atribuie Inițial, atribuiți X acestei valori
--x-initial-edge Activează declanșatoarele inițiale X->0 și X->1
-y Director pentru a căuta module

ARGUMENTE


{file.v}
Specifică fișierul Verilog care conține modulul de sus care trebuie verificat.

{file.c/.cc/.cpp/.cxx}
Specifică fișierele C++ opționale pentru a fi conectate cu codul Verilog. Dacă există fișiere C++
sunt specificate în acest fel, Verilator va include o regulă make care generează a modul
executabil. Fără fișiere C++, Verilator se va opri la modul__ALL.o bibliotecă,
și presupuneți că veți continua conectarea cu regulile pe care le scrieți singur. Vezi și
-Opțiune CFLAGS.

{file.a/.o/.so}
Specifică obiecte opționale sau fișiere de bibliotecă pentru a fi conectate cu codul Verilog, ca a
prescurtare pentru -LDFLAGS " ". Dacă sunt specificate fișiere în acest fel, Verilator
va include o regulă de make care utilizează aceste fișiere atunci când conectați modul executabil.
Acest lucru este în general util numai atunci când este utilizat cu opțiunea --exe.

+1364-1995ext+ext
+1364-2001ext+ext
+1364-2005ext+ext
+1800-2005ext+ext
+1800-2009ext+ext
+1800-2012ext+ext
Specifică standardul de limbă care trebuie utilizat cu o anumită extensie de nume de fișier, ext.

Pentru compatibilitate cu alte simulatoare, consultați și sinonimele „+verilog1995ext+”ext,
„+verilog2001ext+”extși „+systemverilogext+”ext.

Pentru orice fișier sursă, limba specificată de aceste opțiuni are prioritate față de oricare
limba specificată de opțiunile „--default-language” sau „--language”.

Aceste opțiuni intră în vigoare în ordinea în care sunt întâlnite. Astfel ar fi următoarele
utilizați Verilog 1995 pentru „av” și Verilog 2001 pentru „bv”.

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

Aceste steaguri sunt recomandate numai pentru modelele vechi de limbi mixte, ca fiind de preferat
opțiunea este de a edita codul pentru a repara cuvinte cheie noi sau de a adăuga corespunzătoare
„`begin_keywords”.

notițe „`begin_keywords” este o construcție SystemVerilog, care specifică care
setul de cuvinte cheie trebuie recunoscut. Indiferent de set ales, semantica va fi
cele ale SystemVerilog. În schimb, „+1364-1995ext+” etc. specifică atât sintaxa si
semantică care trebuie utilizată.

--afirma
Activați toate afirmațiile.

Vezi și --x-assign și --x-initial-edge; setarea „--x-assign unique” și/sau
„--x-initial-edge” poate fi de dorit.

--autoflush
După fiecare $display sau $fdisplay, ștergeți fluxul de ieșire. Aceasta asigură că
mesajele vor apărea imediat, dar pot reduce performanța; pentru cea mai bună performanță apel
„fflush(stdout)” ocazional în bucla C principală. Opțiuni implicite dezactivate, care vor fi tamponate
ieșire așa cum este furnizată de apelurile normale C stdio.

--bbox-sys
Cutie neagră orice sarcină $system sau apeluri de funcție necunoscute. Sarcinile de sistem vor fi simple
NOP, iar funcțiile sistemului vor fi înlocuite cu zero nedimensionat. Argumente în acest sens
funcțiile vor fi analizate, dar nu vor fi verificate altfel. Acest lucru previne erorile când
linting în prezența apelurilor PLI specifice companiei.

--bbox-unsup
Cutia neagră unele caracteristici de limbă neacceptate, în prezent tabele UDP și CMOS și
primitive de poarta tran. Acest lucru poate permite ca restul designului, chiar și atunci când
sunt prezente constructe nesuportate.

--cos nume de fișier
Rar necesar. Suprascrieți numele de fișier implicit pentru Verilatorul însuși. Când o dependență
(.d) este creat, acest nume de fișier va deveni o dependență de sursă, astfel încât a
modificarea acestui binar va face să reconstruiască fișierele de ieșire.

-CFLAGS steaguri
Adăugați steaguri de compilator C specificate la fișierele make generate. Când make este rulat pe
fișierul make generat, acestea vor fi transmise compilatorului C++ (gcc/g++/msvc++).

--cc
Specifică C++ fără modul de ieșire SystemC; vezi și --sc.

--CDC
Experimental. Efectuați câteva verificări de trecere a domeniului de ceas și emiteți avertismente legate
(CDCRSTLOGIC) și apoi ieșiți; dacă sunt necesare alte avertismente decât avertismentele CDC, faceți a
a doua rulare cu --lint-only. Informații suplimentare de avertizare sunt, de asemenea, scrise la
fișier {prefix}__cdc.txt.

În prezent, verifică doar unele elemente pe care alte instrumente CDC le-au ratat; daca ai interes in
adăugând mai multe controale CDC tradiționale, vă rugăm să contactați autorii.

--clk nume-semnal
Uneori este destul de dificil pentru Verilator să distingă semnalele de ceas de altele
semnale de date. Ocazional, semnalele de ceas pot ajunge în lista de verificare a
semnale care determină dacă este necesară o evaluare suplimentară. Acest lucru se va degrada puternic
performanța modelului verificat.

Cu --clk , utilizatorul poate specifica ceasul root în model, apoi Verilator
va marca semnalul ca fiind ceasornic și va propaga automat atributul ceasornic către
alte semnale derivate din asta. În acest fel, Verilator va încerca să evite să ia
semnalul cronometrului în lista de verificare.

Rețineți că numele semnalului este specificat de calea ierarhiei RTL. De exemplu, v.foo.bar. Dacă
semnalul este intrarea la modulul de sus, direct numele semnalului. Daca il gasesti
dificil de găsit numele exact, încercați să utilizați „/*verilator clocker*/” în fișierul RTL pentru a
marcați semnalul direct.

--compilator nume-compilator
Activează reglaje și soluții pentru compilatorul C++ specificat.

zăngăni
Acordați zgomotul. Acest lucru poate reduce viteza de execuție, deoarece permite mai multe soluții
pentru a evita limitele prostesc codificate în clang. Aceasta include ruperea structurilor adânci
ca pentru msvc așa cum este descris mai jos.

gcc Tune pentru Gnu C++, deși codul generat ar trebui să funcționeze pe aproape orice C++ compatibil
compilator. Momentan, implicit.

msvc
Ajustați pentru Microsoft Visual C++. Acest lucru poate reduce viteza de execuție pe măsură ce o permite
mai multe soluții pentru a evita limitele prostești codificate în MSVC++. Aceasta include
ruperea expresiilor profund imbricate între paranteze în sub-expresii pentru a le evita
eroarea C1009 și împărțirea blocurilor profunde în funcții pentru a evita eroarea C1061.

--limită-converge
Rar necesar. Specifică numărul maxim de iterații de rulare înainte de a crea un
modelul nu a reușit să converge eroarea. Implicit la 100.

--acoperire
Activează toate formele de acoperire, alias pentru „--coverage-line --coverage-toggle
--acoperire-utilizator".

--linie-acoperire
Specifică codul de analiză a acoperirii liniei de bloc de bază care trebuie inserat.

Analiza acoperirii adaugă declarații la fiecare punct de schimbare a fluxului de cod, care sunt
ramuri ale instrucțiunilor IF și CASE, un super-set de acoperire normală a liniei Verilog. La
la fiecare astfel de ramură un contor unic este incrementat. La sfârșitul unui test, contoarele
împreună cu numele fișierului și numărul rândului corespunzător fiecărui contor sunt scrise în
busteni/acoperire.pl.

Verilator dezactivează automat acoperirea ramurilor care au un $stop în ele, așa cum este
se presupune că ramurile $stop conțin o verificare a erorilor care nu ar trebui să apară. Un /*verilator
coverage_block_off*/ comment va îndeplini o funcție similară pentru orice cod din acel bloc
sau mai jos, sau /*verilatorul coverage_on/coverage_off*/ va dezactiva acoperirea în jurul liniilor
de cod.

Notă Verilatorul poate depăși blocurile combinatorii (neclockate) atunci când acele blocuri
recepționați semnale care au dezactivat avertismentul UNOPTFLAT; pentru cele mai precise
rezultatele nu dezactivează acest avertisment atunci când utilizați acoperirea.

--acoperire-permutare
Specifică codul de analiză a acoperirii comutatorului semnalului care trebuie inserat.

Fiecare bit din fiecare semnal dintr-un modul are un contor introdus. Contorul va
increment la fiecare schimbare de muchie a bitului corespunzător.

Semnalele care fac parte din sarcini sau blocuri de început/sfârșit sunt considerate variabile locale și
nu sunt acoperite. Semnalele care încep cu caractere de subliniere, sunt numere întregi sau sunt foarte largi
(> 256 de biți de stocare totală pe toate dimensiunile) nu sunt, de asemenea, acoperite.

Ierarhia este comprimată, astfel încât, dacă un modul este instanțiat de mai multe ori,
acoperirea va fi însumată pentru acel bit în TOATE instanțiile acelui modul cu
același set de parametri. Un modul instanțiat cu valori diferite ale parametrilor este
considerat un modul diferit și va fi numărat separat.

Verilator ia o decizie minim-inteligentă cu privire la domeniul de ceas al semnalului
merge la și caută doar margini în acel domeniu de ceas. Aceasta înseamnă că marginile pot fi
ignorat dacă se știe că marginea nu ar putea fi niciodată văzută de logica receptoare. Acest
algoritmul se poate îmbunătăți în viitor. Rezultatul net este că acoperirea poate fi mai mică decât
ce s-ar vedea uitându-se la urme, dar acoperirea este mai precisă
reprezentarea calității stimulului în design.

Pot exista margini numărate aproape de timpul zero în timp ce modelul se stabilizează. E bine
exersați pentru a zero toată acoperirea chiar înainte de a elibera resetarea pentru a preveni numărarea acestora
comportament.

O pereche de comentarii /*verilator coverage_off/on */ poate fi folosită în jurul semnalelor care nu
trebuie să comuteți analiza, cum ar fi RAM-urile și fișierele de înregistrare.

--acoperire-subliniere
Activați acoperirea semnalelor care încep cu un caracter de subliniere. În mod normal, aceste semnale sunt
neacoperit. Vezi și --trace-undercore.

--acoperire-utilizator
Permite acoperirea funcțională introdusă de utilizator. În prezent, toate punctele de acoperire funcționale
sunt specificate folosind SVA care trebuie activat separat cu --assert.

De exemplu, următoarea declarație va adăuga un punct de acoperire, cu comentariul
„Ceas implicit”:

DefaultClock: proprietatea acoperirii (@(posedge clk) cyc==3);

-Da fost=valoare
Definește simbolul preprocesor dat, fără a permite. Similar cu +define; +defini
este destul de standard în instrumentele Verilog, în timp ce -D este un alias pentru compatibilitatea GCC.

--depanare
Selectați imaginea de depanare a Verilator (dacă este disponibilă) și activați mai multe interne
aserțiuni (echivalent cu „--debug-check”), mesaje de depanare (echivalent cu
„--debugi 4”) și fișiere dump de formulare intermediare (echivalent cu „--dump-treei 3”).

--verificare-depanare
Rar necesar. Activați verificările interne ale aserțiunilor de depanare, fără a modifica depanarea
verbozitatea. Activat automat când a fost specificat --debug.

--debugi
--debugi-
Este rar necesar - pentru utilizarea dezvoltatorilor. Setați nivelul de depanare intern la nivel global la
nivelul de depanare specificat (1-10) sau setați fișierul sursă Verilator specificat la
nivelul specificat (de ex. „--debugi-V3Width 9”). Nivelurile mai înalte produc mai multe detalii
mesaje.

--limba implicita valoare
Selectați limba care va fi folosită în mod implicit la prima procesare a fiecărui fișier Verilog.
Valoarea limbii trebuie să fie „1364-1995”, „1364-2001”, „1364-2005”, „1800-2005”,
„1800-2009” sau „1800-2012”.

Orice limbă asociată cu o anumită extensie de fișier (a se vedea diferitele +langext+
opțiuni) vor fi folosite de preferință față de limba specificată de --default-language.

Indicatorul --default-language este recomandat doar pentru codul vechi care folosește același
limba în toate fișierele sursă, deoarece opțiunea de preferat este editarea codului de reparat
cuvinte cheie noi sau adăugați „`begin_keywords” corespunzătoare. Pentru modelele moștenite cu limbi mixte,
diversele +langar trebui folosite opțiunile ext+.

Dacă nu este specificată nicio limbă, fie prin acest steag, fie prin +langopțiuni ext+, apoi cea mai recentă
Este folosit limbajul SystemVerilog (IEEE 1800-2012).

+definiți+a fost=valoare
+definiți+a fost=valoare+var2=valoare2...
Definește simbolul preprocesor dat sau mai multe simboluri dacă sunt separate prin plusuri.
Similar cu -D; +define este destul de standard în instrumentele Verilog, în timp ce -D este un alias
pentru compatibilitatea GCC.

--pom de gunoi
Rar necesar. Activați scrierea fișierelor de depanare .tree cu nivelul de descărcare 3, care aruncă fișierul
etape critice standard. Pentru detalii despre format, consultați Verilator Internals
manual. --dump-tree este activat automat cu --debug, deci „--debug
--no-dump-tree" poate fi util dacă fișierele dump sunt mari și nu sunt dorite.

--dump-treei
--dump-treei-
Este rar necesar - pentru utilizarea dezvoltatorilor. Setați nivelul de dumping intern al arborelui la nivel global la a
un anumit nivel de dumping sau setați fișierul sursă Verilator specificat la nivelul specificat
nivel de descărcare a arborelui (de ex. „--dump-treei-V3Order 9”). Nivelul 0 dezactivează depozitele și este
echivalent cu „--no-dump-tree”. Nivelul 9 permite descărcarea fiecărei etape.

-E Preprocesează codul sursă, dar nu compila, ca în cazul „gcc -E”. Ieșirea este scrisă
la standard out. Atenție la activarea mesajelor de depanare, deoarece vor merge și la
ieșire standard.

--error-limit
După ce se întâlnesc acest număr de erori sau avertismente, ieșiți. Implicit la 50.

--executabil
Generați un executabil. De asemenea, va trebui să treceți fișiere .cpp suplimentare pe fișierul
linia de comandă care implementează bucla principală pentru simulare.

-F fişier
Citiți fișierul specificat și acționați ca și cum tot textul din interiorul acestuia a fost specificat ca comandă
parametrii de linie. Orice căi relative sunt relative la directorul care conține
fișierul specificat. Vezi și -f. Notă -F este destul de standard în instrumentele Verilog.

-f fişier
Citiți fișierul specificat și acționați ca și cum tot textul din interiorul acestuia a fost specificat ca comandă
parametrii de linie. Orice căi relative sunt relative la directorul curent. Vezi si
-F. Notă -f este destul de standard în instrumentele Verilog.

Fișierul poate conține // comentarii care sunt ignorate până la sfârșitul rândului. Orice $VAR,
$(VAR) sau ${VAR} va fi înlocuit cu variabila de mediu specificată.

--gdb
Rulați Verilator sub o GDB interactivă (sau variabilă de mediu VERILATOR_GDB
valoare) sesiune. Vezi și --gdbbt.

--gdbbt
Dacă este specificat --debug, rulați Verilator sub un proces GDB și imprimați un backtrace
la ieșire, apoi ieșiți imediat din GDB. Fără --debug sau dacă GDB nu pare să funcționeze,
acest steag este ignorat. Destinat pentru crearea ușoară de backtraces de către utilizatori; in caz contrar
vezi steagul --gdb.

--Ajutor
Afișează acest mesaj și versiunea programului și iese.

-Idir
Ne vedem.

--dacă-adâncime valoare
Rar necesar. Setați adâncimea la care se va declanșa avertismentul IFDEPTH, implicit la 0
care dezactivează acest avertisment.

+incdir+dir
Ne vedem.

--inhibit-sim
Rar necesar. Creați o funcție „inhibitSim(bool)” pentru a activa și dezactiva evaluarea.
Acest lucru permite unui banc de testare de nivel superior să dezactiveze modulele care nu sunt importante într-un
simulare dată, fără a fi nevoie să recompilați sau să schimbați modulele SystemC
instanțiat.

--inline-mult valoare
Reglați integrarea modulelor. Valoarea implicită de 2000 specifică până la 2000 de noi
operațiunile pot fi adăugate la model prin inline, dacă mai mult decât acest număr de
ar rezulta operațiuni, modulul nu este aliniat. Valori mai mari sau o valoare <= 1
va integra totul, va duce la timpi de compilare mai mari, dar potenţial mai rapid
timpii de rulare. Această setare este ignorată pentru modulele foarte mici; vor fi mereu
aliniat, dacă este permis.

-LDFLAGS steaguri
Adăugați steaguri de linker C specificate la fișierele make generate. Când make este rulat pe
fișierul make generat, acestea vor fi transmise linkerului C++ (ld) *după* primar
fișierul fiind legat. Acest steag se numește -LDFLAGS deoarece acesta este numele tradițional în
simulatoare; ar fi fost mai bine numit LDLIBS deoarece aceasta este variabila Makefile
controlează. (În Make, LDFLAGS este înaintea primului obiect, LDLIBS după. -L
bibliotecile trebuie să fie în Variabila Make LDLIBS, nu LDFLAGS.)

--limba valoare
Un sinonim pentru „--default-langauge”, pentru compatibilitate cu alte instrumente și anterioare
versiuni de Verilator.

+libext+ext+ext...
Specificați extensiile care ar trebui utilizate pentru găsirea modulelor. Dacă de exemplu modul
x este referit, uită-te înăuntru x.ext. Notă +libext+ este destul de standard în Verilog
unelte. Implicit la .v și .sv.

--doar scame
Verificați fișierele numai pentru încălcări ale scamelor, nu creați nicio altă ieșire.

De asemenea, poate doriți ca opțiunea -Wall să activeze mesajele care sunt considerate stilistice
și nu este activat implicit.

Dacă designul nu trebuie să fie complet verificat, consultați și --bbox-sys și
--bbox-unsup opțiuni.

--MMD
Activați crearea fișierelor de dependență .d, utilizate pentru detectarea dependenței, similar cu
opțiunea gcc -MMD. Activat în mod implicit, utilizați --no-MMD pentru a dezactiva.

--MP
Când creați fișiere de dependență .d cu --MMD, faceți ținte false. Similar cu gcc -MP
opțiune.

--Mdir director
Specifică numele directorului de obiecte Make. Toate fișierele generate vor fi plasate
în acest director. Dacă nu este specificat, este folosit „obj_dir”. Directorul este creat dacă
nu există și directoarele părinte există; altfel creați manual Mdir-ul
înainte de a suna Verilatorul.

--mod-prefix topname
Specifică numele pe care trebuie să îl adăugați înaintea tuturor claselor de nivel inferior. Implicit la aceeași ca
--prefix.

--nu-clk
Preveniți marcarea semnalului specificat ca ceas. Vezi „--clk”.

--no-pini64
Alias ​​compatibil cu versiunea inversă pentru „--pins-bv 33”.

--no-salta-identic
Rar necesar. Dezactivează ignorarea execuției Verilator dacă toate fișierele sursă sunt
identice și toate fișierele de ieșire există cu date mai noi.

+verificări de timp
Ignorat pentru compatibilitate cu alte simulatoare.

-O0 Dezactivează optimizarea modelului.

-O3 Permite optimizări lente pentru codul pe care Verilatorul îl generează (spre deosebire de
„-CFLAGS -O3” care efectuează optimizarea compilatorului C. -O3 poate reduce simularea
runtime cu costul timpului de compilare. Acest lucru setează în prezent --inline-mult -1.

-Oscrisoare-optimizare
Rar necesar. Activează sau dezactivează o anumită optimizare, cu optimizarea
selectat pe baza scrisorii transmise. O literă mică dezactivează o optimizare, an
litera majusculă permite acest lucru. Aceasta este destinată numai utilizării de depanare; vezi sursa
cod pentru mapările dependente de versiune ale optimizărilor la litere -O.

-o
Specificați numele pentru executabilul final construit dacă utilizați --exe. Implicit la
--prefix dacă nu este specificat.

--fără-comandă-ceas-întârziere
Rar necesar. Dezactivează o remediere a erorilor pentru comandarea activării ceasului cu întârziere
sarcinile. Acest steag ar trebui folosit numai atunci când este sugerat de dezvoltatori.

--ieșire-divizată bytes
Permite împărțirea fișierelor .cpp/.sp de ieșire în mai multe ieșiri. Când un fișier C++
depășește numărul specificat de operațiuni, un fișier nou va fi creat la următoarea
limita funcției. În plus, orice rutine lente vor fi plasate în fișiere __Slow.
Acest lucru accelerează compilarea deoarece optimizarea poate fi dezactivată în rutinele lente,
iar fișierele rămase pot fi compilate pe mașini paralele. Folosind --output-split
ar trebui să aibă doar un impact trivial asupra performanței. Cu GCC 3.3 pe un Opteron de 2 GHz,
--output-split 20000 va avea ca rezultat împărțirea în compilare de aproximativ un minut
bucăți.

--output-split-cfuncs Declarații
Permite împărțirea funcțiilor din fișierele de ieșire .cpp/.sp în mai multe funcții.
Când o funcție generată depășește numărul specificat de operații, o nouă funcție
va fi creat. Cu --output-split, acest lucru va permite GCC să compileze mai rapid, la a
pierdere mică de performanță care se înrăutățește odată cu scăderea valorilor împărțite. Rețineți că
această opțiune este mai puternică decât --output-split, în sensul că --output-split nu va
împărțit în interiorul unei funcții.

--output-split-ctrace Declarații
Permite împărțirea funcțiilor de urmărire din fișierele de ieșire .cpp/.sp în mai multe
funcții. Setarea implicită este aceeași ca și --output-split-cfuncs.

-P Cu -E, dezactivați generarea de marcatori de linii și linii goale, similar cu steagul GCC -P.

--pini64
Alias ​​compatibil cu înapoi pentru „--pins-bv 65”. Rețineți că este un 65, nu un 64.

--pins-bv lățime
Specifică intrări/ieșiri SystemC mai mari sau egale cu lățime biți lați ar trebui
utilizați sc_bv în loc de uint32/vluint64_t. Valoarea implicită este „--pins-bv 65”. Versiuni
înainte ca Verilator 3.671 să fie implicit „--pins-bv 33”. Cu cât se folosește mai mult sc_bv, cu atât mai rău
pentru performanță. Utilizați atributul „/*verilator sc_bv*/” pentru a selecta anumite porturi către
fi sc_bv.

--pins-sc-uint
Specifică că intrările/ieșirile SystemC cu o lățime mai mare de 2 biți ar trebui să utilizeze sc_uint
între 2 și 64. Când este combinat cu combinația „--pins-sc-biguint”, rezultă
în sc_uint fiind folosit între 2 și 64 și sc_biguint fiind folosit între 65 și 512.

--pins-sc-biguint
Specifică că intrările/ieșirile SystemC cu o lățime mai mare de 65 de biți ar trebui să utilizeze sc_biguint
între 65 și 512 și sc_bv de la 513 în sus. Când este combinat cu
Combinația „--pins-sc-uint”, are ca rezultat utilizarea sc_uint între 2 și 64 și
sc_biguint fiind folosit între 65 și 512.

--pins-uint8
Specifică intrările/ieșirile SystemC care sunt mai mici decât setarea --pins-bv și 8
biți sau mai puțini ar trebui să folosească uint8_t în loc de uint32_t. La fel vor fi ace cu lățimea 9-16
utilizați uint16_t în loc de uint32_t.

--teava-filtru comandă
Rar necesar și experimental. Verilatorul va genera comanda specificată ca a
conducta de subproces, pentru a permite comenzii să efectueze editări personalizate asupra codului Verilog
înainte de a ajunge la Verilator.

Înainte de a citi fiecare fișier Verilog, Verilator va transmite numele fișierului subprocesului.
stdin cu „read_verilog” „'. Filtrul poate citi apoi fișierul și poate funcționa
orice filtrare dorește și trimite noul conținut al fișierului înapoi la Verilator pe stdout
cu „Lungimea conținutului”. Ieșirea la stderr de la filtru trece la Verilator
stdout și dacă filtrul iese cu starea diferită de zero Verilatorul se termină. Vezi
testul t/t_pipe_filter de exemplu.

Pentru a depana ieșirea filtrului, încercați să utilizați opțiunea -E pentru a vedea ieșirea preprocesată.

--prefix topname
Specifică numele clasei de nivel superior și makefile. Valoarea implicită este V înaintea
numele comutatorului --top-module sau V înaintea primului nume de fișier Verilog
transmis pe linia de comandă.

--profile-cfuncs
Modificați funcțiile C++ create pentru a suporta profilarea. Funcțiile vor fi
minimizat pentru a conține o declarație „de bază”, în general un singur bloc sau fir
afirmație. (Rețineți că acest lucru va încetini executabilul cu ~5%)
numele funcției va fi sufixat cu numele de bază al modulului Verilog și numărul liniei
declarația a venit de la. Acest lucru permite corelarea cu rapoartele gprof sau oprofile
declarațiile originale Verilog sursă.

--privat
Opusul lui --public. Este implicit; această opțiune există pentru compatibilitate inversă.

--public
Acest lucru este doar pentru utilizare istorică de depanare. Utilizarea acestuia poate duce la simularea greșită a
ceasuri generate.

Declara publice toate semnalele si modulele. Acest lucru va dezactiva optimizările semnalului ca
dacă toate semnalele ar avea un /*verilator public*/ comentarii și inline. Se va întoarce și acesta
off inlining ca și cum toate modulele ar avea un /*verilator public_module*/, cu excepția cazului în care modulul
l-am activat în mod special cu /*verilator inline_module*/.

--report-unoptflat
Diagnosticare suplimentară pentru avertismente UNOPTFLAT. Aceasta include pentru fiecare buclă, cea mai largă 10
variabilele din buclă și cele 10 cele mai populare variabile din buclă. Acestea sunt
candidați pentru împărțirea în mai multe variabile pentru a întrerupe bucla.

În plus, produce un fișier GraphViz DOT al întregii componente puternic conectate
în sursa asociată fiecărei bucle. Aceasta este produsă indiferent dacă
--dump-tree este setat. Astfel de grafice pot ajuta la analiza problemei, dar pot fi foarte
mare într-adevăr.

Există diverse comenzi pentru vizualizarea și manipularea fișierelor DOT. De exemplu cel punct
comanda poate fi folosită pentru a converti un fișier DOT într-un PDF pentru imprimare. De exemplu:

dot -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot

va genera un PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf din fișierul DOT.

--salvabil
Activați inclusiv funcțiile de salvare și restaurare în modelul generat.

Codul utilizatorului trebuie să creeze apoi un obiect VerilatedSerialize sau VerilatedDeserialze
apelând operatorii << sau >> pe modelul generat și orice alte date procesului
nevoile salvate/restaurate. De exemplu:

void save_model(const char* filenamep) {
VerilatedSave os;
os.open(filenamep);
os << main_time; // codul utilizatorului trebuie să salveze marcajul de timp etc
os << *topp;
}
void restore_model(const char* filenamep) {
VerilatedRestore os;
os.open(filenamep);
os >> main_time;
os >> *topp;
}

--sc
Specifică modul de ieșire SystemC; vezi si --cc.

--statistici
Creează un fișier dump cu statistici despre design în {prefix}__stats.txt.

--stats-vars
Creează statistici mai detaliate, inclusiv o listă a tuturor variabilelor în funcție de dimensiune (plat
--stats oferă doar o numărătoare). Vezi --stats, ceea ce este implicat de aceasta.

-sv Specifică ca caracteristicile limbajului SystemVerilog să fie activate; echivalent cu „--limba
1800-2005". Această opțiune este selectată implicit, există pentru compatibilitate cu
alte simulatoare.

+systemverilogext+ext
Un sinonim pentru „+1800-2012ext+”ext.

--top-modul topname
Când intrarea Verilog conține mai mult de un modul de nivel superior, specifică numele lui
modulul Verilog de nivel superior să devină primul și setează valoarea implicită pentru if --prefix
nu este folosit. Acest lucru nu este necesar în cazul modelelor standard cu un singur blat.

--urmă
Adaugă codul de urmărire a formei de undă la model. Verilatorul va genera suplimentar
{prefix}__Trace*.cpp fișiere care vor trebui compilate. în plus
verilated_vcd_sc.cpp (pentru urmele SystemC) sau verilated_vcd_c.cpp (pentru ambele) trebuie să fie
compilat și legat în. Dacă utilizați fișierele Makefile generate de Verilator, acestea vor fi
adăugată ca ținte sursă pentru dvs. Dacă nu utilizați fișierele de make Verilator, vă
va trebui să le adăugați manual la Makefile.

Compilarea urmăririi poate duce la unele mici pierderi de performanță, chiar și atunci când
formele de undă nu sunt activate în timpul execuției modelului.

--urme-adâncime nivelurile de
Specificați numărul de niveluri adânci pentru a activa urmărirea, de exemplu --trace-level 1 to
vezi doar semnalele de nivel superior. Implicit pentru întregul model. Folosind un număr mic
va scădea vizibilitatea, dar va îmbunătăți considerabil durata de rulare și dimensiunea fișierului de urmărire.

--trace-max-array adâncime
Rar necesar. Specificați adâncimea maximă a matricei a unui semnal care poate fi urmărit.
Valoarea implicită este 32, deoarece urmărirea matricelor mari poate încetini foarte mult simulările urmărite.

--trace-max-width lățime
Rar necesar. Specificați lățimea maximă de biți a unui semnal care poate fi urmărit.
Valoarea implicită este 256, deoarece urmărirea vectorilor mari poate încetini foarte mult simulările urmărite.

--no-trace-params
Dezactivați urmărirea parametrilor.

--urme-structuri
Activați urmărirea pentru a afișa numele câmpurilor de structură, unire și matrice împachetate,
mai degrabă decât un simplu autobuz împachetat. Din cauza constrângerilor de format de fișier VCD, acest lucru poate
rezultă în timpi de urmărire semnificativ mai lenți și fișiere de urmărire mai mari.

--urmă-subliniere
Activați urmărirea semnalelor care încep cu un caracter de subliniere. În mod normal, aceste semnale sunt
nu iese în timpul urmăririi. Vezi și --coverage-undercore.

-Ua fost
Nedefinește simbolul preprocesorului dat.

--unroll-count bucle
Rar necesar. Specifică numărul maxim de iterații în buclă care pot fi derulate.
Consultați și avertismentul BLKLOOPINIT.

--unroll-stmts Declarații
Rar necesar. Specifică numărul maxim de instrucțiuni dintr-o buclă pentru acea buclă
fi derulat. Consultați și avertismentul BLKLOOPINIT.

--unused-regexp expresie regulată
Rar necesar. Specifică o expresie regex simplă cu * și ? că dacă un nume de semnal se potrivește
va suprima avertismentul NEUTILIZAT. Setarea implicită este „*unused*”. Setarea la „” dezactivează
potrivire.

-V Afișează versiunea detaliată, inclusiv informațiile de configurare compilate în
Verilator. (Asemănător cu perl -V.)

-v nume de fișier
Citiți numele fișierului ca bibliotecă Verilog. Orice module din fișier pot fi folosite pentru
rezolvați instanțiile de celule din modulul de nivel superior, altfel ignorate. Notă -v este corect
standard pentru instrumentele Verilog.

+verilog1995ext+ext
+verilog2001ext+ext
Sinonime pentru „+1364-1995ext+”ext și „+1364-2001ext+”ext respectiv

-Perete
Activați toate avertismentele, inclusiv avertismentele de stil de cod care sunt dezactivate în mod normal de
Mod implicit.

-Weroare-mesaj
Convertiți mesajul de avertizare specificat într-un mesaj de eroare. Acest lucru este în general să
descurajați utilizatorii să încalce regulile importante la nivel de site, de exemplu
„-Werror-NOUNOPTFLAT”.

-Wfuture-mesaj
Rar necesar. Suprimați comentariile necunoscute de Verilator sau mesajele de avertizare cu date
codul mesajului. Acesta este folosit pentru a permite codul scris cu pragma pentru o versiune ulterioară a
Verilatorul să ruleze sub o versiune mai veche; adăugați argumente -Wfuture- pentru fiecare cod de mesaj
sau comentați că noua versiune acceptă ceea ce versiunea mai veche nu le acceptă.

-Nu-mesaj
Dezactivați mesajul de avertizare specificat. Aceasta va suprascrie orice directive lint_on în
sursa, adică avertismentul tot nu va fi tipărit.

-Wno-lint
Dezactivați toate mesajele de avertizare legate de scame și toate avertismentele de stil. Acesta este echivalent
la „-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY
-Wno-PIMISSING -Wno-SYNCASYNCNET -Wno-NESEMNAT -Wno-NEFOLOSIT -Wno-WITH"
plus lista afișată pentru stilul Wno.

Este recomandat să curățați codul în loc să utilizați această opțiune, așa este
destinat a fi utilizat numai atunci când rulează cazuri de testare a codului primit de la terți.

-Wno-stil
Dezactivați toate mesajele de avertizare legate de stilul codului (rețineți că în mod implicit sunt deja
dezactivat). Acesta este echivalent cu „-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNRIVEN -Wno-NEUTILIZAT
-Wno-VARHIDDEN”.

- Nu-fatal
Când sunt detectate avertismente, imprimați-le, dar nu părăsiți simulatorul.

A avea mesaje de avertizare în versiuni este neglijent. Se recomandă cu tărie să curățați
codul dvs., utilizați inline lint_off sau utilizați -Wno-... steaguri în loc să utilizați această opțiune.

-Wwarns-mesaj
Activează mesajul de avertizare specificat.

-Wwarn-lint
Activați toate mesajele de avertizare legate de scame (rețineți că în mod implicit sunt deja activate),
dar nu afectează mesajele de stil. Acesta este echivalent cu „-Wwarn-ALWCOMBORDER
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PIMISSING -Wwarn-REALCVT
-Wwarn-UNSIGNED -Wwarn-WIDTH".

-Wwarn-stil
Activați toate mesajele de avertizare legate de stilul de cod. Acesta este echivalent cu „-Wwarn
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-NEDRIVEN -Wwarn-NEUTILIZAT -Wwarn-VARHIDDEN".

--x-atribuiți 0
--x-atribuiți 1
--x-assign fast (implicit)
--x-assign unic
Controlează valoarea cu două stări care este înlocuită atunci când este întâlnită o atribuire la X.
--x-assign=rapid, implicit, convertește toate X-urile în ceea ce este cel mai bun pentru performanță.
--x-assign=0 convertește toate X-urile în 0 și este, de asemenea, rapidă. --x-assign=1 convertește toate X-urile în
1s, acesta este aproape la fel de rapid ca 0, dar este mai probabil să găsească erorile de resetare ca active ridicate
logica va declanșa. --x-assign=unique va apela o funcție pentru a determina valoarea, aceasta
permite randomizarea tuturor X-urilor pentru a găsi erori de resetare și este cea mai lentă, dar cea mai sigură pentru
găsirea erorilor de resetare în cod.

Dacă utilizați --x-assign unique, este posibil să doriți să generați un astfel de generator de numere aleatorii
că fiecare rulare de regresie primește o secvență de randomizare diferită. Folosește sistemul
srand48() sau pentru Windows srand() funcția pentru a face acest lucru. Probabil că și tu vei dori
imprimați toate semințele selectate și codați pentru a permite reluarea cu aceeași semință, astfel încât să puteți
reproduce bug-uri.

Notă. Această opțiune se aplică numai variabilelor care sunt atribuite explicit lui X în
Cod sursă Verilog. Valorile inițiale ale ceasurilor sunt setate la 0, cu excepția cazului în care --x-initial-edge este
specificat. Valorile inițiale ale tuturor celorlalte variabile care dețin starea sunt setate ca și cum
--x-assign unique a fost specificat.

--x-muchie-inițială
Permite emularea simulatoarelor bazate pe evenimente care, în general, declanșează un avantaj pe a
trecerea de la X la 1 ("posedge") sau X la 0 ("negedge"). Astfel, următorul cod,
unde „rst_n” este neinițializat ar seta „res_n” la „1’b1” atunci când „rst_n” este setat prima dată
la zero:

reg res_n = 1'b0;

întotdeauna @(negedge rst_n) începe
dacă (rst_n == 1'b0) începe
res_n <= 1'b1;
capăt
capăt

În Verilator, implicit, ceasurilor neinițializate au o valoare zero, deci cele de mai sus
Blocul „întotdeauna” nu s-ar declanșa.

Deși nu este o practică bună, există unele modele care se bazează pe declanșarea XX 0 a
„negedge”, în special în secvențele de resetare. Utilizarea --x-initial-edge cu Verilator va
replica acest comportament. De asemenea, se va asigura că XX 1 declanșează un „posege”.

Notă. Unii utilizatori au raportat că utilizarea acestei opțiuni poate afecta convergența și asta
poate fi necesar să folosiți --converge-limit pentru a crește numărul de convergență
iterații. Acesta poate fi un alt indiciu al problemelor cu designul modelat care
ar trebui să fie abordate.

-y dir
Adăugați directorul la lista de directoare care ar trebui căutate pentru fișierele includ
sau biblioteci. Cele trei steaguri -y, +incdir și -I au un efect similar; +incdir și +y
sunt destul de standard în instrumentele Verilog, în timp ce -I este un alias pentru compatibilitatea GCC.

Verilatorul folosește implicit directorul curent ("-y .") și orice --Mdir specificat, totuși
aceste căi implicite sunt folosite după orice directoare specificate de utilizator. Acest lucru permite „-y
„$(pwd)”” pentru a fi folosit dacă sunt dorite nume de fișiere absolute pentru mesajele de eroare în loc de
nume de fișiere relative.

EXEMPLU C ++ EXECUŢIE


Vom compila acest exemplu în C++.

mkdir test_our
cd test_our

pisica < nostru.v
modul nostru;
initial begin $display("Bună lume"); $termină; Sfârșit
endmodule
EOF

pisica < sim_main.cpp
#include „Vour.h”
#include „verilated.h”
int main(int argc, char **argv, char **env) {
Verilated::commandArgs(argc, argv);
Vour* top = nou Vour;
while (!Verilated::gotFinish()) { top->eval(); }
șterge partea de sus;
ieşire(0);
}
EOF

Dacă ați instalat Verilator din surse sau dintr-un tarball, dar nu ca parte a operațiunii dvs
sistem (ca RPM), mai întâi trebuie să indicați kit-ul:

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

Acum rulăm Verilator pe micul nostru exemplu.

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

Putem vedea codul sursă în directorul „obj_dir”. Consultați secțiunea FIȘIERE de mai jos pentru
descrieri ale unora dintre fișierele care au fost create.

ls -l obj_dir

Apoi îl putem compila

cd obj_dir
face -j -f Vour.mk Vour

(Verilatorul a inclus o regulă de compilare implicită și o regulă de legătură, deoarece am folosit --exe și am transmis un
.cpp pe linia de comandă Verilator. De asemenea, puteți scrie propriile reguli de compilare, ca
vom arăta în secțiunea SYSTEMC.)

Și acum îl rulăm

cd ..
obj_dir/Vour

Și obținem ca rezultat

Salut Lume
- our.v:2: Verilog $finish

Într-adevăr, ar fi mai bine să scrii un Makefile pentru a face toate acestea pentru tine. Apoi, când dvs
modificările sursei, va rula automat toți acești pași. Vedeți directorul test_c în
distribuția de exemplu.

EXEMPLU SYSTEMC EXECUŢIE


Acesta este un exemplu similar cu cel de mai sus, dar folosind SystemC.

mkdir test_our_sc
cd test_our_sc

pisica < nostru.v
modul nostru (clk);
clk de intrare; // Ceasul este necesar pentru a obține activarea inițială
întotdeauna @ (posege clk)
begin $display("Bună lume"); $termină; Sfârșit
endmodule
EOF

pisica < 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, adevărat);
Vour* top;
top = nou Vour("top"); // SP_CELL (sus, Vour);
sus->clk(clk); // SP_PIN (sus, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
șterge partea de sus;
ieşire(0);
}
EOF

Dacă ați instalat Verilator din surse sau dintr-un tarball, dar nu ca parte a operațiunii dvs
sistem (ca RPM), mai întâi trebuie să indicați kit-ul:

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

Acum rulăm Verilator pe micul nostru exemplu.

verilator -Wall --sc our.v

Apoi îl putem compila

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

Și conectați-vă cu SystemC. Rețineți că calea către biblioteci poate varia, în funcție de
sistem de operare.

export SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
export LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Poate fi necesar dacă SystemC 2.3.0
export SYSTEMC_CXX_FLAGS=-pthread

g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verificat.o
-o Vour -lsystemc

Și acum îl rulăm

cd ..
obj_dir/Vour

Și obținem aceeași ieșire ca exemplul C++:

Salut Lume
- our.v:2: Verilog $finish

Într-adevăr, ar fi mai bine să folosești un Makefile pentru a face toate acestea pentru tine. Apoi, când sursa ta
modificări, va rula automat toți acești pași. Vedeți directorul test_sc în
distribuția de exemplu.

BENCHMARKING & OPTIMIZAREA


Pentru o performanță optimă, rulați Verilator cu indicatoarele „-O3 --x-assign=fast --noassert”. The
-O3 flag va necesita timpi de compilare mai lungi, iar --x-assign=fast poate crește riscul de
resetează erorile din comerț pentru performanță; consultați documentația de mai sus pentru aceste steaguri.

Modificările minore ale codului Verilog pot oferi, de asemenea, câștiguri mari. Nu ar trebui să aveți niciun UNOPPTFLAT
avertismente de la Verilator. Remedierea acestor avertismente poate duce la îmbunătățiri uriașe; un utilizator
a remediat singurul lor avertisment UNOPTFLAT făcând o simplă modificare a unui zăvor de ceas folosit la poartă
ceasuri și a obținut o îmbunătățire a performanței cu 60%.

Dincolo de asta, performanța unui model Verilated depinde în principal de compilatorul dvs. C++ și
dimensiunea cache-urilor CPU.

În mod implicit, fișierul lib/verilated.mk are optimizarea dezactivată. Aceasta este pentru
beneficiul noilor utilizatori, deoarece îmbunătățește timpul de compilare în detrimentul timpilor de execuție. A adauga
optimizare ca implicită, setați una dintre cele trei variabile, OPT, OPT_FAST sau OPT_SLOW
lib/verilated.mk. Sau, utilizați opțiunea -CFLAGS și/sau -LDFLAGS din comanda verilator
linie pentru a transmite steagurile direct compilatorului sau linkerului. Sau, doar pentru o alergare, trece
pe linia de comandă pentru a face:

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

OPT_FAST specifică optimizări pentru acele programe care fac parte din calea rapidă, în principal
cod care este executat în fiecare ciclu. OPT_SLOW specifică optimizări pentru fișierele cu cale lentă
(plus urmărire), care se execută doar rar, dar durează mult timp pentru a compila
optimizare activată. OPT specifică optimizarea generală și afectează toate compilările, inclusiv
acele OPT_FAST și OPT_SLOW afectează. Pentru cele mai bune rezultate, utilizați OPT="-O2" și conectați-vă cu
"-static". Aproape aceleași rezultate pot fi obținute cu timpi de compilare mult mai buni
OPT_FAST="-O1 -fstrict-aliasing". O optimizare mai mare, cum ar fi „-O3”, poate ajuta, dar gcc
timpii de compilare pot fi excesivi sub O3 chiar și pe modelele de dimensiuni medii. Alternativ, unii
modelele mai mari raportează performanțe mai bune folosind „-Os”.

Din păcate, utilizarea optimizatorului cu fișiere SystemC poate duce la preluarea de compilare
cateva minute. (Bibliotecile SystemC au multe funcții mici integrate care conduc
nuci de compilator.)

Pentru cele mai bune rezultate, utilizați GCC 3.3 sau mai nou. GCC 3.2 și versiunile anterioare au erori de optimizare
detectarea aliasingului pointerului, care poate duce la pierderi de performanță de două ori.

Dacă veți rula mai multe simulări pe o singură compilare, investigați feedback-ul
compilare. Cu GCC, folosind -fprofile-arcs, apoi -fbranch-probabilities va da rezultate
inca 15% sau cam asa ceva.

Compilatoarele moderne acceptă, de asemenea, optimizarea timpului de legătură (LTO), care poate ajuta mai ales dacă
conectați în codul DPI. Pentru a activa LTO pe GCC, treceți „-flto” atât în ​​compilare, cât și în link.
Notă LTO poate cauza timpi de compilare excesivi pe modele mari.

Dacă utilizați propriile fișiere make, poate doriți să compilați codul Verilated cu
-DVL_INLINE_OPT=inline. Acest lucru va funcționa în linie, cu toate acestea, acest lucru necesită ca toate cpp
fișierele să fie compilate într-o singură rulare a compilatorului.

Puteți descoperi posibilități suplimentare de reglare prin profilarea codului Verilog. Utilizare
Verilatorul --profile-cfuncs, apoi GCC -g -pg. Apoi puteți rula fie oprofile, fie
gprof pentru a vedea unde este petrecut timpul în codul C++. Rulați ieșirea gprof prin
verilator_profcfunc și vă va spune ce numere de linie Verilog pe care majoritatea
se petrece timpul.

Când ați terminat, vă rugăm să spuneți autorului rezultatele. Îmi place să urmăresc cum Verilator
compară și poate sugera îmbunătățiri suplimentare.

Utilizați verilator_bin_dbg online folosind serviciile onworks.net



Cele mai recente programe online Linux și Windows