Ito ang command verilator na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator
PROGRAMA:
NAME
Verilator - I-convert ang Verilog code sa C++/SystemC
SINOPSIS
verilator --tulong
verilator --bersyon
verilator --cc [mga opsyon] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [mga opsyon] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [top_level.v]...
DESCRIPTION
Kino-convert ng Verilator ang synthesizable (hindi behavioral) Verilog code, kasama ang ilang Synthesis,
SystemVerilog at isang maliit na subset ng Verilog AMS assertions, sa C++ o SystemC code. Ito
ay hindi isang kumpletong simulator, ngunit isang compiler.
Ang Verilator ay ginagamit na may mga parameter na katulad ng GCC, Cadence Verilog-XL/NC-Verilog, o
Ang VCS ng Synopsys. Binabasa nito ang tinukoy na Verilog code, inililista ito, at opsyonal na nagdaragdag
coverage at waveform tracing code. Para sa mga format ng C++ at SystemC, naglalabas ito ng .cpp at .h
file.
Ang mga file na nilikha ng Verilator ay pinagsama-sama sa C++. Nagsusulat ang user ng kaunting C++
wrapper file, na nagpapakilala sa pinakamataas na antas ng module, at ipinapasa ang filename na ito sa
command line. Ang mga C file na ito ay pinagsama-sama sa C++, at naka-link sa mga Na-verify na file.
Ang resultang executable ay magsasagawa ng aktwal na simulation.
Upang makapagsimula, tumalon pababa sa "HALIMBAWA C++ EXECUTION".
ARGUMENTO BUOD
Ito ay isang maikling buod ng mga argumento sa Verilator. Tingnan ang mga detalyadong paglalarawan sa
ang mga susunod na seksyon para sa karagdagang impormasyon.
{file.v} Verilog top level filename
{file.c/cc/cpp} Mga opsyonal na C++ na file upang i-compile
{file.a/o/so} Mga opsyonal na C++ na file na mali-link
+1364-1995ext+ Gamitin ang Verilog 1995 na may extension ng file
+1364-2001ext+ Gamitin ang Verilog 2001 na may extension ng file
+1364-2005ext+ Gamitin ang Verilog 2005 na may extension ng file
+1800-2005ext+ Gamitin ang SystemVerilog 2005 na may extension ng file
+1800-2009ext+ Gamitin ang SystemVerilog 2009 na may extension ng file
+1800-2012ext+ Gamitin ang SystemVerilog 2012 na may extension ng file
--assert Paganahin ang lahat ng assertions
--autoflush Flush stream pagkatapos ng lahat ng $displays
--bbox-sys Blackbox na hindi kilalang $system call
--bbox-unsup Blackbox hindi suportadong mga tampok ng wika
--bin I-override ang binary ng Verilator
-CFLAGS Mga flag ng C++ Compiler para sa makefile
--cc Lumikha ng C++ na output
--cdc Clock domain crossing analysis
--clk Markahan ang tinukoy na signal bilang orasan
--compiler Tune para sa tinukoy na C++ compiler
--converge-limit Tune convergence settle time
--coverage Paganahin ang lahat ng coverage
--coverage-line Paganahin ang saklaw ng linya
--coverage-toggle Paganahin ang toggle coverage
--coverage-user Paganahin ang saklaw ng user ng SVL
--coverage-underscore Paganahin ang coverage ng _signals
-D [= ] Itakda ang preprocessor define
--debug Paganahin ang pag-debug
--debug-check Paganahin ang mga pahayag sa pag-debug
--debugi Paganahin ang pag-debug sa isang tinukoy na antas
--debugi- Paganahin ang pag-debug ng source file sa isang antas
--default na wika Default na wika upang i-parse
+define+ = Itakda ang preprocessor define
--dump-tree I-enable ang dumping .tree file
--dump-treei Paganahin ang pag-dumping ng mga .tree na file sa isang antas
--dump-treei- I-enable ang dumping .tree file sa isang source file sa isang level
-E Preprocess, ngunit huwag mag-compile
--error-limit I-abort pagkatapos ng bilang ng mga error na ito
--exe Link para gumawa ng executable
-F I-parse ang mga opsyon mula sa isang file, medyo
-f I-parse ang mga opsyon mula sa isang file
--gdb Patakbuhin ang Verilator sa ilalim ng GDB nang interactive
--gdbbt Patakbuhin ang Verilator sa ilalim ng GDB para sa backtrace
--help Ipakita ang tulong na ito
-ako Direktoryo na hahanapin kasama
--kung-lalim Tune IFDEPTH babala
+incdir+ Direktoryo na hahanapin kasama
--inhibit-sim Lumikha ng function upang i-off ang sim
--inline-mult Tune module inlining
-LDFLAGS Mga flag na pre-object ng linker para sa makefile
-LDLIBS Mga flag ng linker library para sa makefile
--wika Default na pamantayan ng wika upang i-parse
+libext+ +[ext]... Mga extension para sa paghahanap ng mga module
--lint-only Lint, ngunit huwag gumawa ng output
--MMD Lumikha ng mga .d dependency na file
--MP Lumikha ng mga huwad na target ng dependency
--Mdir Pangalan ng direktoryo ng output object
--mod-prefix Pangalan na ihahanda sa mga mas mababang uri
--hindi-clk Pigilan ang pagmamarka ng tinukoy na signal bilang orasan
--no-pins64 Huwag gumamit ng vluint64_t's para sa 33-64 bit sig
--no-skip-identical Huwag paganahin ang paglaktaw ng magkaparehong output
+notimingchecks Binalewala
-O0 Huwag paganahin ang mga pag-optimize
-O3 Mataas na pagganap ng mga pag-optimize
-O Mga mapipiling pag-optimize
-o Pangalan ng final executable
--no-order-clock-delay I-disable ang pag-order ng orasan paganahin ang mga takdang-aralin
--output-split Hatiin ang mga .cpp na file sa mga piraso
--output-split-cfuncs Hatiin ang mga function ng .cpp
--output-split-ctrace Hatiin ang pagsubaybay sa mga function
-P Huwag paganahin ang mga numero ng linya at mga blangko na may -E
--pins-bv Tukuyin ang mga uri para sa mga nangungunang antas ng port
--pins-sc-uint Tukuyin ang mga uri para sa mga nangungunang antas ng port
--pins-sc-biguint Tukuyin ang mga uri para sa mga nangungunang antas ng port
--pins-uint8 Tukuyin ang mga uri para sa mga nangungunang antas ng port
--pipe-filter I-filter ang lahat ng input sa pamamagitan ng isang script
--prefix Pangalan ng pinakamataas na antas ng klase
--profile-cfuncs Mga function ng Pangalan para sa pag-profile
--pribadong Pag-debug; tingnan ang mga doc
--pampublikong Pag-debug; tingnan ang mga doc
--report-unoptflat Mga karagdagang diagnostic para sa UNOPTFLAT
--savable Paganahin ang pag-save-restore ng modelo
--sc Lumikha ng SystemC output
--stats Lumikha ng statistics file
--stats-vars Magbigay ng mga istatistika sa mga variable
-sv Paganahin ang pag-parse ng SystemVerilog
+systemverilogext+ Kasingkahulugan ng +1800-2012ext+
--top-module Pangalan ng nangungunang antas ng input module
--trace Paganahin ang paggawa ng waveform
--trace-depth Lalim ng pagsubaybay
--trace-max-array Pinakamataas na lapad ng bit para sa pagsubaybay
--trace-max-width Pinakamataas na lalim ng array para sa pagsubaybay
--trace-params Paganahin ang pagsubaybay sa mga parameter
--trace-structs Paganahin ang pagsubaybay sa mga pangalan ng istraktura
--trace-underscore Paganahin ang pagsubaybay sa _signals
-U Undefine preprocessor define
--unroll-count I-tune ang maximum na mga pag-ulit ng loop
--unroll-stmts I-tune ang maximum na laki ng katawan ng loop
--hindi nagamit-regexp I-tune ang UNUSED lint signals
-V Verbose na bersyon at config
-v Verilog library
+verilog1995ext+ Kasingkahulugan ng +1364-1995ext+
+verilog2001ext+ Kasingkahulugan ng +1364-2001ext+
-Werror- I-convert ang babala sa error
-Whinaharap- Huwag paganahin ang hindi kilalang mga babala sa mensahe
-Wno- Huwag paganahin ang babala
-Wno-lint Huwag paganahin ang lahat ng lint na babala
-Wno-style Huwag paganahin ang lahat ng mga babala sa istilo
-Wno-fatal I-disable ang fatal exit sa mga babala
--x-assign Sa una, magtalaga ng mga X sa halagang ito
--x-initial-edge I-enable ang inisyal na X->0 at X->1 edge trigger
-y Direktoryo upang maghanap ng mga module
MGA PANGANGATWIRANG
{file.v}
Tinutukoy ang Verilog file na naglalaman ng nangungunang module na ma-verify.
{file.c/.cc/.cpp/.cxx}
Tinutukoy ang mga opsyonal na C++ na file na iuugnay sa Verilog code. Kung anumang C++ file
ay tinukoy sa ganitong paraan, ang Verilator ay magsasama ng isang panuntunan sa paggawa na bubuo ng a module
maipapatupad. Kung walang anumang C++ na file, titigil ang Verilator sa module__ALL.isang library,
at ipagpalagay na magpapatuloy ka sa pagli-link sa gumawa ng mga panuntunan na ikaw mismo ang sumulat. Tingnan din ang
-CFLAGS na opsyon.
{file.a/.o/.so}
Tinutukoy ang opsyonal na object o library file na iuugnay sa Verilog code, bilang a
shorthand para sa -LDFLAGS " ". Kung ang anumang mga file ay tinukoy sa ganitong paraan, Verilator
magsasama ng panuntunang gumawa na gumagamit ng mga file na ito kapag nagli-link sa module maipapatupad.
Ito sa pangkalahatan ay kapaki-pakinabang lamang kapag ginamit kasama ang --exe na opsyon.
+1364-1995ext+ext
+1364-2001ext+ext
+1364-2005ext+ext
+1800-2005ext+ext
+1800-2009ext+ext
+1800-2012ext+ext
Tinutukoy ang pamantayan ng wika na gagamitin sa isang partikular na extension ng filename, ext.
Para sa pagiging tugma sa iba pang mga simulator, tingnan din ang mga kasingkahulugan na "+verilog1995ext+"ext,
"+verilog2001ext+"ext, at "+systemverilogext+"ext.
Para sa anumang source file, ang wikang tinukoy ng mga opsyong ito ay nangunguna sa alinman
wikang tinukoy ng "--default-language" o "--language" na mga opsyon.
Ang mga opsyong ito ay magkakabisa sa pagkakasunud-sunod ng mga ito. Kaya ang mga sumusunod ay
gamitin ang Verilog 1995 para sa "av" at Verilog 2001 para sa "bv".
verilator ... +1364-1995ext+v av +1364-2001ext+v bv
Ang mga flag na ito ay inirerekomenda lamang para sa legacy na mga disenyo ng halo-halong wika, bilang mas gusto
Ang opsyon ay i-edit ang code upang ayusin ang mga bagong keyword, o magdagdag ng naaangkop
"`begin_keywords".
nota Ang "`begin_keywords" ay isang SystemVerilog construct, na tumutukoy lamang kung saan ang
hanay ng mga keyword ay dapat kilalanin. Anuman ang set ay pinili, ang semantics ay magiging
sa SystemVerilog. Sa kabaligtaran, tukuyin ng "+1364-1995ext+" atbp. ang parehong syntax at
semantika na gagamitin.
--igiit
Paganahin ang lahat ng assertions.
Tingnan din ang --x-assign at --x-initial-edge; setting na "--x-assign unique" at/o
Maaaring kanais-nais ang "--x-initial-edge".
--autoflush
Pagkatapos ng bawat $display o $fdisplay, i-flush ang output stream. Sinisiguro nito iyon
lalabas kaagad ang mga mensahe ngunit maaaring mabawasan ang pagganap; para sa pinakamahusay na pagganap ng tawag
"fflush(stdout)" paminsan-minsan sa pangunahing C loop. Naka-off ang mga default, na mag-buffer
output gaya ng ibinigay ng mga normal na C stdio na tawag.
--bbox-sys
Itim na kahon ang anumang hindi kilalang $system task o function na tawag. Ang mga gawain ng system ay magiging simple
NOPed, at ang mga function ng system ay papalitan ng unsized zero. Mga argumento sa mga ganyan
ipapa-parse ang mga function, ngunit hindi susuriin kung hindi man. Pinipigilan nito ang mga error kapag
linting sa pagkakaroon ng partikular na kumpanya ng mga tawag sa PLI.
--bbox-unsup
Itim na kahon ang ilang hindi sinusuportahang feature ng wika, kasalukuyang mga UDP table at ang cmos at
tran gate primitives. Ito ay maaaring paganahin ang linting sa natitirang bahagi ng disenyo kahit na kapag
may mga hindi sinusuportahang construct.
--bin filename
Bihirang kailangan. I-override ang default na filename para sa Verilator mismo. Kapag isang dependency
(.d) file ay nilikha, ang filename na ito ay magiging isang source dependency, tulad na a
Ang pagbabago sa binary na ito ay gagawing muli ang mga output file.
-CFLAGS flag
Magdagdag ng tinukoy na mga flag ng C compiler sa mga nabuong makefile. Kapag ang gumawa ay tumakbo sa
nabuong makefile ang mga ito ay ipapasa sa C++ compiler (gcc/g++/msvc++).
--cc
Tinutukoy ang C++ na walang SystemC output mode; tingnan din ang --sc.
--CDC
Pang-eksperimento. Magsagawa ng ilang clock domain crossing check at magbigay ng mga kaugnay na babala
(CDCRSTLOGIC) at pagkatapos ay lumabas; kung kailangan ang mga babala maliban sa mga babala ng CDC gumawa ng
pangalawang pagtakbo gamit ang --lint-only. Ang karagdagang impormasyon ng babala ay nakasulat din sa
file {prefix}__cdc.txt.
Kasalukuyang sinusuri lamang ang ilang mga item na hindi nakuha ng ibang mga tool ng CDC; kung may interes ka
pagdaragdag ng higit pang tradisyonal na mga pagsusuri sa CDC, mangyaring makipag-ugnayan sa mga may-akda.
--clk pangalan ng signal
Minsan medyo mahirap para sa Verilator na makilala ang mga signal ng orasan mula sa iba
mga signal ng data. Paminsan-minsan ang mga signal ng orasan ay maaaring mapunta sa checking list ng
mga signal na tumutukoy kung kailangan ng karagdagang pagsusuri. Ito ay labis na magpapababa
ang pagganap ng na-verify na modelo.
Kasama si --clk , maaaring tukuyin ng user ang root clock sa modelo, pagkatapos ay Verilator
ay mamarkahan ang signal bilang clocker at awtomatikong magpapalaganap ng clocker attribute sa
iba pang mga senyales na nagmula doon. Sa ganitong paraan, susubukan ng Verilator na iwasang kunin ang
signal ng orasan sa checking list.
Tandaan signal-name ay tinukoy ng RTL hiearchy path. Halimbawa, v.foo.bar. Kung
ang signal ay ang input sa top-module, ang direktang pangalan ng signal. Kung mahanap mo ito
mahirap hanapin ang eksaktong pangalan, subukang gamitin ang "/*verilator clocker*/" sa RTL file para
markahan ang signal nang direkta.
--compiler pangalan ng compiler
Pinapagana ang mga tuning at work-around para sa tinukoy na C++ compiler.
clang
Tune para sa clang. Maaari nitong bawasan ang bilis ng pagpapatupad dahil pinapagana nito ang ilang mga workaround
upang maiwasan ang mga hangal na hardcoded na limitasyon sa clang. Kabilang dito ang pagsira ng malalalim na istruktura
tulad ng para sa msvc tulad ng inilarawan sa ibaba.
gcc Tune para sa Gnu C++, kahit na ang nabuong code ay dapat gumana sa halos anumang sumusunod na C++
compiler. Sa kasalukuyan ang default.
msvc
Tune para sa Microsoft Visual C++. Maaari nitong bawasan ang bilis ng pagpapatupad habang pinapagana nito
ilang mga workarounds upang maiwasan ang mga hangal na hardcoded na limitasyon sa MSVC++. Kabilang dito ang
paghiwa-hiwalayin ang malalim na nested na panaklong expression sa mga sub-expression upang maiwasan
error C1009, at pagsira ng malalim na mga bloke sa mga function upang maiwasan ang error na C1061.
--converge-limit
Bihirang kailangan. Tinutukoy ang maximum na bilang ng mga runtime iteration bago gumawa ng a
Nabigo ang modelong mag-converge ng error. Default sa 100.
--saklaw
Pinapagana ang lahat ng anyo ng coverage, alias para sa "--coverage-line --coverage-toggle
--coverage-user".
--linya ng saklaw
Tinutukoy ang pangunahing code ng pagsusuri sa saklaw ng linya ng block na dapat ipasok.
Ang pagsusuri sa saklaw ay nagdaragdag ng mga pahayag sa bawat punto ng pagbabago ng daloy ng code, na kung saan ay ang
mga sangay ng IF at CASE statement, isang super-set ng normal na Verilog Line Coverage. Sa
ang bawat sangay na iyon ay isang natatanging counter ay dinadagdagan. Sa pagtatapos ng isang pagsubok, ang mga counter
kasama ang filename at numero ng linya na naaayon sa bawat counter ay nakasulat sa
logs/coverage.pl.
Awtomatikong hindi pinapagana ng Verilator ang saklaw ng mga sangay na mayroong $stop sa mga ito, dahil dito
ay ipinapalagay na ang mga sangay ng $stop ay naglalaman ng pagsusuri ng error na hindi dapat mangyari. Isang /*verilator
coverage_block_off*/ comment ay gagawa ng katulad na function sa anumang code sa block na iyon
o sa ibaba, o /*verilator coverage_on/coverage_off*/ ay idi-disable ang coverage sa paligid ng mga linya
ng code.
Tandaan Maaaring mag-overcount ang Verilator ng combinatorial (non-clocked) na mga bloke kapag na-block ang mga iyon
tumanggap ng mga senyales na hindi pinagana ang babala ng UNOPTFLAT; para sa pinaka tumpak
hindi pinapagana ng mga resulta ang babalang ito kapag gumagamit ng saklaw.
--coverage-toggle
Tinutukoy ang signal toggle coverage analysis code na dapat ipasok.
Ang bawat bit ng bawat signal sa isang module ay may nakalagay na counter. Gagawin ng counter
pagtaas sa bawat pagbabago sa gilid ng katumbas na bit.
Ang mga signal na bahagi ng mga gawain o pagsisimula/pagtatapos na mga bloke ay itinuturing na mga lokal na variable at
ay hindi sakop. Ang mga signal na nagsisimula sa mga underscore, ay integer, o napakalawak
(>256 bits kabuuang storage sa lahat ng dimensyon) ay hindi rin sakop.
Ang hierarchy ay na-compress, na kung ang isang module ay na-instantiate ng maraming beses,
pagsasama-samahin ang saklaw para sa kaunting iyon sa LAHAT ng instantiations ng module na iyon kasama ang
parehong set ng parameter. Ang isang module na na-instantiate na may iba't ibang mga halaga ng parameter ay
itinuturing na ibang module, at mabibilang nang hiwalay.
Gumagawa ang Verilator ng minimally-intelligent na desisyon tungkol sa kung anong domain ng orasan ang signal
papunta sa, at naghahanap lamang ng mga gilid sa domain ng orasan na iyon. Nangangahulugan ito na ang mga gilid ay maaaring
hindi pinansin kung alam na ang gilid ay hindi kailanman makikita ng tumatanggap na lohika. Ito
maaaring mapabuti ang algorithm sa hinaharap. Ang netong resulta ay ang saklaw ay maaaring mas mababa kaysa
kung ano ang makikita sa pamamagitan ng pagtingin sa mga bakas, ngunit ang saklaw ay mas tumpak
representasyon ng kalidad ng pampasigla sa disenyo.
Maaaring may mga gilid na binibilang malapit sa time zero habang nagpapatatag ang modelo. Ito ay isang mahusay
magsanay sa zero sa lahat ng saklaw bago ilabas ang pag-reset upang maiwasan ang pagbibilang ng ganoon
pag-uugali.
Maaaring gamitin ang isang /*verilator coverage_off/on */ pares ng komento sa mga signal na hindi
kailangan ng toggle analysis, gaya ng mga RAM at mga file ng pagrehistro.
--coverage-underscore
I-enable ang coverage ng mga signal na nagsisimula sa underscore. Karaniwan, ang mga senyas na ito ay
hindi sakop. Tingnan din ang --trace-underscore.
--tagasaklaw-gumagamit
Pinapagana ang inilagay ng user na functional coverage. Sa kasalukuyan, lahat ng functional coverage point
ay tinukoy gamit ang SVA na dapat hiwalay na paganahin sa --assert.
Halimbawa, ang sumusunod na pahayag ay magdaragdag ng coverage point, kasama ang komento
"DefaultClock":
DefaultClock: cover property (@(posedge clk) cyc==3);
-Day=halaga
Tinutukoy ang ibinigay na simbolo ng preprocessor, nang hindi pinapayagan. Katulad ng +define; + tukuyin
ay medyo pamantayan sa mga tool ng Verilog habang ang -D ay isang alias para sa pagiging tugma sa GCC.
--debug
Piliin ang debug built na imahe ng Verilator (kung available), at paganahin ang higit pang internal
assertions (katumbas ng "--debug-check"), mga mensahe sa pag-debug (katumbas ng
"--debugi 4"), at mga intermediate form na dump file (katumbas ng "--dump-treei 3").
--debug-check
Bihirang kailangan. I-enable ang internal na pag-debug ng assertion check, nang hindi binabago ang debug
verbosity. Awtomatikong pinagana kapag tinukoy ang --debug.
--debugi
--debugi-
Bihirang kailangan - para sa paggamit ng developer. Itakda ang panloob na antas ng pag-debug sa buong mundo sa
tinukoy na antas ng debug (1-10) o itakda ang tinukoy na Verilator source file sa
tinukoy na antas (hal. "--debugi-V3Width 9"). Ang mas mataas na antas ay gumagawa ng mas detalyado
mga mensahe.
--default na wika halaga
Piliin ang wikang gagamitin bilang default kapag unang pinoproseso ang bawat Verilog file.
Ang halaga ng wika ay dapat na "1364-1995", "1364-2001", "1364-2005", "1800-2005",
"1800-2009" o "1800-2012".
Anumang wika na nauugnay sa isang partikular na extension ng file (tingnan ang iba't ibang +langext+
mga opsyon) ay gagamitin bilang kagustuhan sa wikang tinukoy ng --default-language.
Ang --default-language flag ay inirerekomenda lamang para sa legacy code na gumagamit ng pareho
wika sa lahat ng source file, dahil ang mas mainam na opsyon ay i-edit ang code upang ayusin
mga bagong keyword, o magdagdag ng naaangkop na "`begin_keywords". Para sa mga legacy na may halong disenyo ng wika,
ang iba't ibang +langext+ na mga opsyon ang dapat gamitin.
Kung walang tinukoy na wika, alinman sa flag na ito o +langext+ na mga opsyon, pagkatapos ay ang pinakabago
Ginagamit ang wika ng SystemVerilog (IEEE 1800-2012).
+ tukuyin +ay=halaga
+ tukuyin +ay=halaga+var2=halaga2...
Tinutukoy ang ibinigay na simbolo ng preprocessor, o maramihang mga simbolo kung pinaghihiwalay ng mga plus.
Katulad ng -D; Ang +define ay medyo pamantayan sa mga tool ng Verilog habang ang -D ay isang alias
para sa GCC compatibility.
--dump-tree
Bihirang kailangan. I-enable ang pagsulat ng mga .tree debug file na may dumping level 3, na nagtatapon sa
pamantayang kritikal na yugto. Para sa mga detalye sa format tingnan ang Verilator Internals
manwal. Ang --dump-tree ay awtomatikong pinagana gamit ang --debug, kaya "--debug
--no-dump-tree" ay maaaring maging kapaki-pakinabang kung ang mga dump file ay malaki at hindi ninanais.
--dump-treei
--dump-treei-
Bihirang kailangan - para sa paggamit ng developer. Itakda ang internal tree dumping level sa buong mundo sa a
tiyak na antas ng dumping o itakda ang tinukoy na Verilator source file sa tinukoy
antas ng pagtatapon ng puno (hal. "--dump-treei-V3Order 9"). Level 0 disbles dumps at ay
katumbas ng "--no-dump-tree". Ang Antas 9 ay nagbibigay-daan sa paglalaglag ng bawat yugto.
-E Preprocess ang source code, ngunit huwag mag-compile, tulad ng sa 'gcc -E'. Ang output ay nakasulat
upang i-standard out. Mag-ingat sa pagpapagana ng mga mensahe sa pag-debug, dahil mapupunta rin ang mga ito
standard out.
--error-limit
Pagkatapos makatagpo ng ganitong bilang ng mga error o babala, lumabas. Default sa 50.
--exe
Bumuo ng isang maipapatupad. Kakailanganin mo ring magpasa ng mga karagdagang .cpp na file sa
command line na nagpapatupad ng pangunahing loop para sa iyong simulation.
-F file
Basahin ang tinukoy na file, at kumilos na parang ang lahat ng teksto sa loob nito ay tinukoy bilang command
mga parameter ng linya. Ang anumang mga kamag-anak na landas ay nauugnay sa direktoryo na naglalaman ng
tinukoy na file. Tingnan din ang -f. Ang Tandaan -F ay medyo pamantayan sa mga tool ng Verilog.
-f file
Basahin ang tinukoy na file, at kumilos na parang ang lahat ng teksto sa loob nito ay tinukoy bilang command
mga parameter ng linya. Ang anumang mga kamag-anak na landas ay nauugnay sa kasalukuyang direktoryo. Tingnan din
-F. Ang Note -f ay medyo pamantayan sa mga tool ng Verilog.
Ang file ay maaaring maglaman ng // mga komento na hindi pinapansin hanggang sa dulo ng linya. Anumang $VAR,
Ang $(VAR), o ${VAR} ay papalitan ng tinukoy na environment variable.
--gdb
Patakbuhin ang Verilator sa ilalim ng interactive na GDB (o VERILATOR_GDB environment variable
halaga) session. Tingnan din ang --gdbbt.
--gdbbt
Kung tinukoy ang --debug, patakbuhin ang Verilator sa ilalim ng proseso ng GDB at mag-print ng backtrace
sa labasan, pagkatapos ay lumabas kaagad sa GDB. Kung walang --debug o kung mukhang hindi gumagana ang GDB,
hindi pinapansin ang watawat na ito. Inilaan para sa madaling paglikha ng mga backtraces ng mga user; kung hindi
tingnan ang --gdb flag.
- Tumulong
Ipinapakita ang mensaheng ito at bersyon ng programa at paglabas.
-Idir
Tingnan -y.
--kung-lalim halaga
Bihirang kailangan. Itakda ang lalim kung saan gagana ang babala ng IFDEPTH, ang default ay 0
na hindi pinapagana ang babalang ito.
+incdir+dir
Tingnan -y.
--inhibit-sim
Bihirang kailangan. Gumawa ng function na "inhibitSim(bool)" upang paganahin at huwag paganahin ang pagsusuri.
Nagbibigay-daan ito sa isang upper level testbench na i-disable ang mga module na hindi mahalaga sa a
ibinigay na simulation, nang hindi kinakailangang muling i-compile o baguhin ang mga module ng SystemC
instantiated.
--inline-mult halaga
Ibagay ang inlining ng mga module. Ang default na halaga ng 2000 ay tumutukoy na hanggang 2000 bago
ang mga operasyon ay maaaring idagdag sa modelo sa pamamagitan ng pag-inlining, kung higit pa sa bilang na ito ng
Ang mga operasyon ay magreresulta, ang module ay hindi naka-inline. Mas malalaking value, o isang value <= 1
ay inline ang lahat, hahantong sa mas mahabang oras ng pag-compile, ngunit potensyal na mas mabilis
mga runtime. Binabalewala ang setting na ito para sa napakaliit na mga module; sila ay palaging magiging
inline, kung pinapayagan.
-LDFLAGS flag
Magdagdag ng mga tinukoy na C linker flag sa mga nabuong makefile. Kapag ang gumawa ay tumakbo sa
nabuong makefile ang mga ito ay ipapasa sa C++ linker (ld) *pagkatapos* ng primary
file na naka-link. Ang flag na ito ay tinatawag na -LDFLAGS dahil iyon ang tradisyonal na pangalan sa
mga simulator; ito ay mas mahusay na tinatawag na LDLIBS dahil iyon ang Makefile variable
kinokontrol nito. (Sa Make, ang LDFLAGS ay bago ang unang bagay, ang LDLIBS pagkatapos. -L
ang mga aklatan ay kailangang nasa Make variable LDLIBS, hindi LDFLAGS.)
--wika halaga
Isang kasingkahulugan para sa "--default-langauge", para sa pagiging tugma sa iba pang mga tool at mas nauna
mga bersyon ng Verilator.
+libext+ext+ext...
Tukuyin ang mga extension na dapat gamitin para sa paghahanap ng mga module. Kung halimbawa modyul
x ay tinutukoy, tingnan x.ext. Tandaan na ang +libext+ ay medyo karaniwan sa Verilog
mga kasangkapan. Default sa .v at .sv.
--lint-lamang
Suriin ang mga file para sa mga paglabag sa lint lamang, huwag lumikha ng anumang iba pang output.
Maaari mo ring gusto ang -Wall na opsyon upang paganahin ang mga mensahe na itinuturing na istilo
at hindi pinagana bilang default.
Kung ang disenyo ay hindi dapat ganap na Na-verify tingnan din ang --bbox-sys at
--bbox-unsup na mga opsyon.
--MMD
Paganahin ang paggawa ng mga .d dependency na file, na ginagamit para sa pagtukoy ng dependency, katulad ng
gcc -MMD na opsyon. Naka-on bilang default, gamitin ang --no-MMD para i-disable.
--MP
Kapag gumagawa ng mga .d dependency na file gamit ang --MMD, gumawa ng mga huwad na target. Katulad ng gcc -MP
pagpipilian.
--Mdir direktoryo
Tinutukoy ang pangalan ng direktoryo ng Make object. Lahat ng nabuong file ay ilalagay
sa direktoryong ito. Kung hindi tinukoy, "obj_dir" ang ginagamit. Ang direktoryo ay nilikha kung
wala ito at umiiral ang mga direktoryo ng magulang; kung hindi man ay manu-manong lumikha ng Mdir
bago tumawag sa Verilator.
--mod-prefix topname
Tinutukoy ang pangalan na ilalagay sa lahat ng mas mababang antas ng mga klase. Default sa kapareho ng
--prefix.
--hindi-clk
Pigilan ang tinukoy na signal na mamarkahan bilang orasan. Tingnan ang "--clk".
--walang-pin64
Paatras na katugmang alias para sa "--pins-bv 33".
--walang-laktawan-magkapareho
Bihirang kailangan. Hindi pinapagana ang paglaktaw sa pagpapatupad ng Verilator kung lahat ng source file ay
magkapareho, at lahat ng mga output file ay umiiral sa mas bagong mga petsa.
+notimingchecks
Hindi pinansin para sa pagiging tugma sa iba pang mga simulator.
-O0 Hindi pinapagana ang pag-optimize ng modelo.
-O3 Pinapagana ang mabagal na pag-optimize para sa mismong code na nabubuo ng Verilator (kumpara sa
"-CFLAGS -O3" na nakakaapekto sa pag-optimize ng C compiler. -O3 ay maaaring mabawasan ang simulation
runtime sa halaga ng oras ng pag-compile. Ito ay kasalukuyang nagtatakda ng --inline-mult -1.
-Ooptimization-liham
Bihirang kailangan. Pinapagana o hindi pinapagana ang isang partikular na pag-optimize, kasama ang pag-optimize
pinili batay sa liham na ipinasa. Ang isang maliit na titik ay hindi pinapagana ang isang pag-optimize, isang
ang upper case letter ay nagbibigay-daan dito. Ito ay inilaan para sa paggamit ng pag-debug lamang; tingnan ang pinagmulan
code para sa mga mapping na umaasa sa bersyon ng mga pag-optimize sa mga -O na titik.
-o
Tukuyin ang pangalan para sa panghuling executable na binuo kung gumagamit ng --exe. Default sa
--prefix kung hindi tinukoy.
--no-order-clock-delay
Bihirang kailangan. Hindi pinapagana ang pag-aayos ng bug para sa pag-order ng orasan kapag naantala
mga takdang-aralin. Dapat lang gamitin ang flag na ito kapag iminungkahi ng mga developer.
--output-split bytes
Pinapagana ang paghahati ng mga output .cpp/.sp file sa maraming output. Kapag ang isang C++ file
lumampas sa tinukoy na bilang ng mga operasyon, isang bagong file ang gagawin sa susunod
hangganan ng function. Bilang karagdagan, ang anumang mabagal na gawain ay ilalagay sa __Slow na mga file.
Pinapabilis nito ang pag-compile dahil maaaring hindi paganahin ang pag-optimize sa mabagal na gawain,
at ang natitirang mga file ay maaaring i-compile sa parallel machine. Gamit ang --output-split
dapat magkaroon lamang ng maliit na epekto sa pagganap. Sa GCC 3.3 sa isang 2GHz Opteron,
--output-split 20000 ay magreresulta sa paghahati sa humigit-kumulang isang minutong-compile
mga tipak
--output-split-cfuncs pahayag
Pinapagana ang paghahati ng mga function sa mga output na .cpp/.sp file sa maraming function.
Kapag ang isang nabuong function ay lumampas sa tinukoy na bilang ng mga operasyon, isang bagong function
ay malilikha. Sa --output-split, magbibigay-daan ito sa GCC na mag-compile nang mas mabilis, sa a
maliit na pagkawala sa performance na lumalala sa pagbaba ng mga split value. Tandaan na
ang pagpipiliang ito ay mas malakas kaysa sa --output-split sa kahulugan na --output-split ay hindi
hatiin sa loob ng isang function.
--output-split-ctrace pahayag
Pinapagana ang paghahati ng mga function ng trace sa mga output na .cpp/.sp file sa maramihang
mga function. Default sa parehong setting bilang --output-split-cfuncs.
-P Gamit ang -E, huwag paganahin ang pagbuo ng mga `line marker at blangkong linya, katulad ng GCC -P flag.
--pin64
Paatras na katugmang alias para sa "--pins-bv 65". Tandaan na iyon ay isang 65, hindi isang 64.
--pins-bv lapad
Tinutukoy ang mga input/output ng SystemC na mas malaki kaysa sa o katumbas ng lapad bits wide dapat
gumamit ng sc_bv's sa halip na uint32/vluint64_t's. Ang default ay "--pins-bv 65". Mga bersyon
bago ang Verilator 3.671 ay na-default sa "--pins-bv 33". Ang mas maraming sc_bv ay ginagamit, mas malala
para sa pagganap. Gamitin ang attribute na "/*verilator sc_bv*/" para pumili ng mga partikular na port sa
maging sc_bv.
--pins-sc-uint
Tinutukoy ang mga input/output ng SystemC na mas malaki sa 2 bits ang lapad ay dapat gumamit ng sc_uint
sa pagitan ng 2 at 64. Kapag isinama sa kumbinasyong "--pins-sc-biguint", nagreresulta ito
sa sc_uint na ginagamit sa pagitan ng 2 at 64 at sc_biguint na ginagamit sa pagitan ng 65 at 512.
--pins-sc-biguint
Tinutukoy ang mga input/output ng SystemC na higit sa 65 bits ang lapad ay dapat gumamit ng sc_biguint
sa pagitan ng 65 at 512, at sc_bv mula 513 pataas. Kapag pinagsama sa
"--pins-sc-uint" na kumbinasyon, nagreresulta ito sa paggamit ng sc_uint sa pagitan ng 2 at 64 at
Ginagamit ang sc_biguint sa pagitan ng 65 at 512.
--pins-uint8
Tinutukoy ang mga input/output ng SystemC na mas maliit kaysa sa --pins-bv na setting at 8
Ang mga bit o mas kaunti ay dapat gumamit ng uint8_t sa halip na uint32_t. Gayundin ang mga pin na may lapad na 9-16 ay
gumamit ng uint16_t sa halip na uint32_t.
--pipe-filter utos
Bihirang kailangan at pang-eksperimento. Ipapalabas ng Verilator ang tinukoy na utos bilang a
subprocess pipe, upang payagan ang command na magsagawa ng mga custom na pag-edit sa Verilog code
bago ito makarating sa Verilator.
Bago basahin ang bawat file ng Verilog, ipapasa ng Verilator ang pangalan ng file sa subprocess'
stdin na may 'read_verilog " "'. Maaaring basahin ng filter ang file at gumanap
anumang pag-filter na gusto nito, at ibinabalik ang mga bagong nilalaman ng file sa Verilator sa stdout
na may 'Content-Length'. Output sa stderr mula sa mga feed ng filter hanggang sa Verilator's
stdout at kung lalabas ang filter na may status na hindi zero na Verilator ay magwawakas. Tingnan ang
t/t_pipe_filter test para sa isang halimbawa.
Upang i-debug ang output ng filter, subukang gamitin ang -E na opsyon upang makita ang preprocessed na output.
--prefix topname
Tinutukoy ang pangalan ng pinakamataas na antas ng klase at makefile. Ang mga default sa V ay inilagay sa
ang pangalan ng --top-module switch, o V na inilagay sa unang Verilog filename
ipinasa sa command line.
--profile-cfuncs
Baguhin ang ginawang C++ function upang suportahan ang pag-profile. Ang mga pag-andar ay magiging
pinaliit upang maglaman ng isang "basic" na pahayag, sa pangkalahatan ay isang solong palaging block o wire
pahayag. (Tandaan na ito ay magpapabagal sa executable ng ~5%.) Higit pa rito, ang
Ang pangalan ng function ay lagyan ng suffix ng basename ng Verilog module at line number
nanggaling ang pahayag. Nagbibigay-daan ito sa mga ulat ng gprof o oprofile na maiugnay
ang orihinal na mga pahayag ng pinagmulan ng Verilog.
--pribado
Kabaligtaran ng --publiko. Ay ang default; ang pagpipiliang ito ay umiiral para sa pabalik na pagkakatugma.
--pampubliko
Ito ay para lamang sa makasaysayang paggamit ng pag-debug. Ang paggamit nito ay maaaring magresulta sa maling simulation ng
nabuong mga orasan.
Idinedeklarang pampubliko ang lahat ng signal at module. I-o-off nito ang mga pag-optimize ng signal bilang
kung ang lahat ng signal ay may /*verilator public*/ komento at inlining. Ito ay liliko din
off inlining na parang lahat ng module ay may /*verilator public_module*/, maliban kung ang module
partikular na pinagana ito gamit ang /*verilator inline_module*/.
--ulat-unoptflat
Mga karagdagang diagnostic para sa mga babala ng UNOPTFLAT. Kabilang dito ang para sa bawat loop, ang 10 pinakamalawak
mga variable sa loop, at ang 10 pinakapinapayag na mga variable sa loop. Ang mga ito ay
mga kandidato para sa paghahati sa maraming mga variable upang masira ang loop.
Bilang karagdagan, gumagawa ng GraphViz DOT file ng buong malakas na konektadong mga bahagi
sa loob ng pinagmulang nauugnay sa bawat loop. Ito ay ginawa nang hindi isinasaalang-alang kung
--dump-tree ay nakatakda. Ang ganitong mga graph ay maaaring makatulong sa pagsusuri ng problema, ngunit maaaring maging napaka
malaki talaga.
Mayroong iba't ibang mga utos para sa pagtingin at pagmamanipula ng mga file ng DOT. Halimbawa ang tuldok
Ang command ay maaaring gamitin upang i-convert ang isang DOT file sa isang PDF para sa pag-print. Halimbawa:
tuldok -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot
bubuo ng PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf mula sa DOT file.
--nailigtas
I-enable ang pagsama sa pag-save at pagpapanumbalik ng mga function sa nabuong modelo.
Ang user code ay dapat gumawa ng isang VerilatedSerialize o VerilatedDeserialze object pagkatapos
pagtawag sa << o >> operator sa nabuong modelo at anumang iba pang data sa proseso
kailangang i-save/ibalik. Halimbawa:
void save_model(const char* filenamep) {
VerilateSave os;
os.open(filename);
os << main_time; // user code ay dapat i-save ang timestamp, atbp
os << *topp;
}
void restore_model(const char* filenamep) {
VerilateRestore os;
os.open(filename);
os >> main_time;
os >> *topp;
}
--sc
Tinutukoy ang SystemC output mode; tingnan din ang --cc.
--stats
Gumagawa ng dump file na may mga istatistika sa disenyo sa {prefix}__stats.txt.
--stats-vars
Lumilikha ng mas detalyadong istatistika kabilang ang isang listahan ng lahat ng mga variable ayon sa laki (plain
--stats ay nagbibigay lamang ng isang bilang). Tingnan ang --stats, na ipinahihiwatig nito.
-sv Tinutukoy ang SystemVerilog na mga feature ng wika ay dapat paganahin; katumbas ng "--wika
1800-2005". Ang pagpipiliang ito ay pinili bilang default, ito ay umiiral para sa pagiging tugma sa
iba pang mga simulator.
+systemverilogext+ext
Isang kasingkahulugan para sa "+1800-2012ext+"ext.
--top-module topname
Kapag ang input na Verilog ay naglalaman ng higit sa isang nangungunang antas ng module, tinutukoy ang pangalan ng
ang pinakamataas na antas ng module ng Verilog upang maging tuktok, at itinakda ang default para sa if --prefix
ay hindi ginagamit. Hindi ito kailangan sa mga karaniwang disenyo na may isang tuktok lamang.
--bakas
Nagdaragdag ng waveform tracing code sa modelo. Ang Verilator ay bubuo ng karagdagang
{prefix}__Trace*.cpp file na kakailanganing i-compile. At saka
verilated_vcd_sc.cpp (para sa SystemC traces) o verilated_vcd_c.cpp (para sa pareho) ay dapat
pinagsama-sama at naka-link in. Kung gumagamit ng Verilator na binuong Makefiles, ang mga ito ay magiging
idinagdag bilang source target para sa iyo. Kung hindi mo ginagamit ang Verilator makefiles, ikaw
ay kailangang manu-manong idagdag ang mga ito sa iyong Makefile.
Ang pagkakaroon ng pagsubaybay na pinagsama-sama ay maaaring magresulta sa ilang maliit na pagkawala ng pagganap, kahit na kapag
hindi naka-on ang mga waveform sa panahon ng pagpapatupad ng modelo.
--trace-depth antas
Tukuyin ang bilang ng mga antas na malalim upang paganahin ang pagsubaybay, halimbawa --trace-level 1 hanggang
makita lamang ang mga signal ng pinakamataas na antas. Default sa buong modelo. Gamit ang maliit na numero
babawasan ang visibility, ngunit lubos na mapabuti ang runtime at bakas ang laki ng file.
--trace-max-array lalim
Bihirang kailangan. Tukuyin ang maximum na lalim ng array ng isang signal na maaaring masubaybayan.
Mga Default sa 32, dahil ang pagsubaybay sa malalaking array ay maaaring magpabagal nang husto sa mga sinusubaybayang simulation.
--trace-max-width lapad
Bihirang kailangan. Tukuyin ang maximum na bit width ng isang signal na maaaring masubaybayan.
Nagde-default sa 256, dahil ang pagsubaybay sa malalaking vector ay maaaring makapagpabagal nang husto sa mga sinusubaybayang simulation.
--walang-trace-params
Huwag paganahin ang pagsubaybay sa mga parameter.
--trace-structs
Paganahin ang pagsubaybay upang ipakita ang pangalan ng mga field ng naka-pack na istraktura, unyon, at naka-pack na array,
sa halip na isang simgle combined packed bus. Dahil sa mga hadlang sa format ng VCD file na ito ay maaaring
magreresulta sa makabuluhang mas mabagal na oras ng pagsubaybay at mas malalaking mga file ng pagsubaybay.
--trace-underscore
I-enable ang pagsubaybay sa mga signal na nagsisimula sa underscore. Karaniwan, ang mga senyas na ito ay
hindi output habang sinusubaybayan. Tingnan din ang --coverage-underscore.
-Uay
Hindi natukoy ang ibinigay na simbolo ng preprocessor.
--unroll-count mga loop
Bihirang kailangan. Tinutukoy ang maximum na bilang ng mga pag-ulit ng loop na maaaring ma-unroll.
Tingnan din ang babala ng BLKLOOPINIT.
--unroll-stmts pahayag
Bihirang kailangan. Tinutukoy ang maximum na bilang ng mga pahayag sa isang loop para sa loop na iyon
mabuksan. Tingnan din ang babala ng BLKLOOPINIT.
--hindi nagamit-regexp regexp
Bihirang kailangan. Tinutukoy ang isang simpleng regexp na may * at ? na kung magkatugma ang isang pangalan ng signal
ay sugpuin ang HINDI GINAMIT na babala. Default sa "*unused*". Hindi pinapagana ang pagtatakda nito sa "".
pagtutugma
-V Ipinapakita ang verbose na bersyon, kabilang ang impormasyon ng configuration na pinagsama-sama sa
Verilator. (Katulad ng perl -V.)
-v filename
Basahin ang filename bilang isang Verilog library. Maaaring gamitin ang anumang mga module sa file
lutasin ang mga instantiation ng cell sa tuktok na antas ng module, kung hindi ay hindi pinansin. Ang Note -v ay patas
pamantayan sa mga tool ng Verilog.
+verilog1995ext+ext
+verilog2001ext+ext
Mga kasingkahulugan para sa "+1364-1995ext+"ext at "+1364-2001ext+"ext buong galang
-Pader
Paganahin ang lahat ng mga babala, kabilang ang mga babala sa istilo ng code na karaniwang hindi pinagana ng
default.
-Werror-mensahe
I-convert ang tinukoy na mensahe ng babala sa isang mensahe ng error. Ito ay karaniwang sa
pigilan ang mga user na lumabag sa mahahalagang tuntunin sa buong site, halimbawa
"-Werror-NOUNOPTFLAT".
-Whinaharap-mensahe
Bihirang kailangan. Pigilan ang hindi kilalang mga komento ng Verilator o mga mensahe ng babala na may ibinigay
code ng mensahe. Ito ay ginagamit upang payagan ang code na nakasulat na may pragmas para sa isang mas huling bersyon ng
Ang Verilator ay tatakbo sa ilalim ng mas lumang bersyon; magdagdag ng -Wfuture- argumento para sa bawat code ng mensahe
o magkomento na sinusuportahan ng bagong bersyon na hindi sinusuportahan ng mas lumang bersyon.
-Wno-mensahe
Huwag paganahin ang tinukoy na mensahe ng babala. I-override nito ang anumang lint_on na mga direktiba sa
ang pinagmulan, ibig sabihin, ang babala ay hindi pa rin mai-print.
-Wno-lint
I-disable ang lahat ng lint related warning messages, at lahat ng style na babala. Ito ay katumbas
sa "-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"
kasama ang listahang ipinapakita para sa Wno-style.
Lubos na inirerekumenda na linisin mo ang iyong code sa halip na gamitin ang opsyong ito
nilayon lamang na gamitin kapag nagpapatakbo ng mga test-case ng code na natanggap mula sa mga third party.
-Wno-style
Huwag paganahin ang lahat ng mga mensahe ng babala na nauugnay sa istilo ng code (tandaan bilang default na mayroon na sila
may kapansanan). Ito ay katumbas ng "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSED
-Wno-VARHIDDEN".
-Wno-fatal
Kapag may nakitang mga babala, i-print ang mga ito, ngunit huwag lumabas sa simulator.
Ang pagkakaroon ng mga mensahe ng babala sa mga build ay palpak. Lubos na inirerekomenda sa iyo ang paglilinis
ang iyong code, gumamit ng inline na lint_off, o gumamit ng -Wno-... na mga flag sa halip na gamitin ang opsyong ito.
-Wwarn-mensahe
Pinapagana ang tinukoy na mensahe ng babala.
-Wwarn-lint
Paganahin ang lahat ng mga mensahe ng babala na nauugnay sa lint (tandaan bilang default na pinagana na ang mga ito),
ngunit hindi makakaapekto sa mga istilong mensahe. Ito ay katumbas ng "-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".
-Wwarn-style
Paganahin ang lahat ng mga mensahe ng babala na nauugnay sa istilo ng code. Ito ay katumbas ng "-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-magtalaga ng mabilis (default)
--x-magtalaga ng natatangi
Kinokontrol ang dalawang estado na halaga na papalitan kapag may nakatagpo na pagtatalaga sa X.
--x-assign=fast, ang default, kino-convert ang lahat ng X sa anumang pinakamainam para sa pagganap.
Kino-convert ng --x-assign=0 ang lahat ng Xs sa 0s, at mabilis din ito. --x-assign=1 kinukulit ang lahat ng Xs sa
1s, ito ay halos kasing bilis ng 0, ngunit mas malamang na makahanap ng mga reset na bug bilang aktibong mataas
magpapaputok ang lohika. --x-assign=unique ay tatawag ng isang function upang matukoy ang halaga, ito
nagbibigay-daan sa randomization ng lahat ng X na makahanap ng mga reset na bug at ito ang pinakamabagal, ngunit pinakaligtas para sa
paghahanap ng mga reset bug sa code.
Kung gumagamit ng --x-assign unique, maaaring gusto mong i-seed ang iyong random number generator tulad nito
na ang bawat regression run ay nakakakuha ng ibang randomization sequence. Gamitin ang sistema
srand48() o para sa Windows srand() function na gawin ito. Malamang na gusto mo rin
i-print ang anumang mga buto na napili, at code para paganahin ang muling pagtakbo gamit ang parehong binhi para magawa mo
magparami ng mga bug.
Tandaan. Nalalapat lang ang opsyong ito sa mga variable na tahasang itinalaga sa X sa
Verilog source code. Ang mga paunang halaga ng mga orasan ay nakatakda sa 0 maliban kung ang --x-initial-edge ay
tinukoy. Ang mga paunang halaga ng lahat ng iba pang mga variable na may hawak ng estado ay itinakda na parang
--x-assign unique ay tinukoy.
--x-initial-edge
Pinapagana ang pagtulad ng mga simulator na hinimok ng kaganapan na karaniwang nagti-trigger ng isang gilid sa a
paglipat mula X hanggang 1 ("posedge") o X hanggang 0 ("negedge"). Kaya ang sumusunod na code,
kung saan ang "rst_n" ay uninitialized ay magtatakda ng "res_n" sa "1'b1" kapag ang "rst_n" ay unang naitakda
sa zero:
reg res_n = 1'b0;
laging nagsisimula ang @(negedge rst_n).
kung magsisimula ang (rst_n == 1'b0).
res_n <= 1'b1;
dulo
dulo
Sa Verilator, bilang default, ang mga hindi nasimulang orasan ay binibigyan ng halagang zero, kaya ang nasa itaas
Hindi magti-trigger ang "laging" block.
Bagama't hindi ito magandang kasanayan, may ilang disenyo na umaasa sa XX 0 na nagpapalitaw ng a
"negedge", partikular sa mga reset sequence. Paggamit ng --x-initial-edge na may Verilator will
gayahin ang pag-uugaling ito. Titiyakin din nito na ang XX 1 ay magti-trigger ng "posedge".
Tandaan. Ang ilang mga gumagamit ay nag-ulat na ang paggamit ng pagpipiliang ito ay maaaring makaapekto sa convergence, at iyon
maaaring kailanganin na gumamit ng --converge-limit upang madagdagan ang bilang ng convergence
mga pag-ulit. Ito ay maaaring isa pang indikasyon ng mga problema sa modelong disenyo na
Dapat na naka-address.
-y dir
Idagdag ang direktoryo sa listahan ng mga direktoryo na dapat hanapin kasama ang mga file
o mga aklatan. Ang tatlong flag na -y, +incdir at -I ay may katulad na epekto; +incdir at +y
ay medyo pamantayan sa mga tool ng Verilog habang ang -I ay isang alias para sa pagiging tugma sa GCC.
Nagde-default ang Verilator sa kasalukuyang direktoryo ("-y .") at anumang tinukoy na --Mdir, bagaman
ang mga default na landas na ito ay ginagamit pagkatapos ng anumang tinukoy ng user na mga direktoryo. Ito ay nagpapahintulot sa '-y
"$(pwd)"' na gagamitin kung ang mga ganap na filename ay nais para sa mga mensahe ng error sa halip na
mga kamag-anak na filename.
Halimbawa C + + Pagpapatupad
Isasama namin ang halimbawang ito sa C++.
mkdir test_our
cd test_our
pusa < aming.v
module aming;
panimulang simula $display("Hello World"); $tapos; wakas
endmodule
EOF
pusa < sim_main.cpp
#include "Vour.h"
#include "verilate.h"
int main(int argc, char **argv, char **env) {
Verilate::commandArgs(argc, argv);
Vour* top = bagong Vour;
habang (!Verilated::gotFinish()) { top->eval(); }
tanggalin ang tuktok;
lumabas(0);
}
EOF
Kung nag-install ka ng Verilator mula sa mga mapagkukunan, o isang tarball, ngunit hindi bilang bahagi ng iyong pagpapatakbo
system (bilang isang RPM), kailangan mo munang ituro ang kit:
i-export ang VERILATOR_ROOT=/path/to/where/verilator/was/installed
i-export ang PATH=$VERILATOR_ROOT/bin:$PATH
Ngayon ay pinapatakbo namin ang Verilator sa aming maliit na halimbawa.
verilator -Wall --cc our.v --exe sim_main.cpp
Makikita natin ang source code sa ilalim ng "obj_dir" na direktoryo. Tingnan ang seksyong FILES sa ibaba para sa
mga paglalarawan ng ilan sa mga file na nilikha.
ls -l obj_dir
Pagkatapos ay maaari nating i-compile ito
cd obj_dir
gumawa -j -f Vour.mk Vour
(Kasama ng Verilator ang isang default na panuntunan sa pag-compile at panuntunan ng link, dahil ginamit namin ang --exe at nagpasa ng a
.cpp file sa Verilator command line. Maaari ka ring sumulat ng iyong sariling mga panuntunan sa pag-compile, bilang
ipapakita namin sa seksyong SYSTEMC.)
At ngayon pinapatakbo namin ito
cd ..
obj_dir/Vour
At nakukuha namin bilang output
Kamusta Mundo
- our.v:2: Verilog $finish
Talaga, mas mahusay kang magsulat ng isang Makefile upang gawin ang lahat ng ito para sa iyo. Pagkatapos, kapag ang iyong
mga pagbabago sa pinagmulan, awtomatiko nitong tatakbo ang lahat ng mga hakbang na ito. Tingnan ang test_c na direktoryo sa
ang pamamahagi para sa isang halimbawa.
Halimbawa SYSTEMC Pagpapatupad
Ito ay isang halimbawa na katulad sa itaas, ngunit gamit ang SystemC.
mkdir test_our_sc
cd test_our_sc
pusa < aming.v
module our (clk);
input clk; // Ang orasan ay kinakailangan upang makakuha ng paunang pag-activate
laging @ (posedge clk)
simulan ang $display("Hello World"); $tapos; wakas
endmodule
EOF
pusa < sc_main.cpp
#include "Vour.h"
int sc_main(int argc, char **argv) {
Verilate::commandArgs(argc, argv);
sc_clock clk ("clk",10, 0.5, 3, true);
Vour* tuktok;
tuktok = new Vour("top"); // SP_CELL (itaas, Vour);
itaas->clk(clk); // SP_PIN (itaas, clk, clk);
habang (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
tanggalin ang tuktok;
lumabas(0);
}
EOF
Kung nag-install ka ng Verilator mula sa mga mapagkukunan, o isang tarball, ngunit hindi bilang bahagi ng iyong pagpapatakbo
system (bilang isang RPM), kailangan mo munang ituro ang kit:
i-export ang VERILATOR_ROOT=/path/to/where/verilator/was/installed
i-export ang PATH=$VERILATOR_ROOT/bin:$PATH
Ngayon ay pinapatakbo namin ang Verilator sa aming maliit na halimbawa.
verilator -Wall --sc our.v
Pagkatapos ay maaari nating i-compile ito
gumawa -j -f Vour.mk Vour__ALL.a
gumawa -j -f Vour.mk ../sc_main.o napatunayan.o
At mag-link sa SystemC. Tandaan na ang iyong landas patungo sa mga aklatan ay maaaring mag-iba, depende sa
operating system.
i-export ang SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
i-export ang LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Maaaring kailanganin kung ang SystemC 2.3.0
i-export ang SYSTEMC_CXX_FLAGS=-pthread
g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verilated.o \
-o Vour -lsystemc
At ngayon pinapatakbo namin ito
cd ..
obj_dir/Vour
At nakakakuha kami ng parehong output bilang halimbawa ng C++:
Kamusta Mundo
- our.v:2: Verilog $finish
Talaga, mas mahusay kang gumamit ng Makefile upang gawin ang lahat ng ito para sa iyo. Tapos, kapag ang source mo
mga pagbabago, awtomatiko nitong tatakbo ang lahat ng mga hakbang na ito. Tingnan ang test_sc na direktoryo sa
pamamahagi para sa isang halimbawa.
BENCHMARKING & optimization
Para sa pinakamahusay na pagganap, patakbuhin ang Verilator gamit ang mga flag na "-O3 --x-assign=fast --noassert". Ang
-O3 flag ay mangangailangan ng mas mahabang oras ng pag-compile, at --x-assign=fast ay maaaring tumaas ang panganib ng
i-reset ang mga bug sa kalakalan para sa pagganap; tingnan ang dokumentasyon sa itaas para sa mga flag na ito.
Ang mga maliliit na pagbabago sa Verilog code ay maaari ding magbigay ng malalaking panalo. Hindi ka dapat magkaroon ng anumang UNOPTFLAT
mga babala mula sa Verilator. Ang pag-aayos sa mga babalang ito ay maaaring magresulta sa malalaking pagpapabuti; isang user
naayos ang kanilang isang UNOPTFLAT na babala sa pamamagitan ng paggawa ng isang simpleng pagbabago sa isang clock latch na ginamit sa gate
orasan at nakakuha ng 60% na pagpapabuti sa pagganap.
Higit pa riyan, ang pagganap ng isang Verilated na modelo ay kadalasang nakasalalay sa iyong C++ compiler at
laki ng mga cache ng iyong CPU.
Bilang default, ang lib/verilated.mk file ay naka-off ang pag-optimize. Ito ay para sa
benepisyo ng mga bagong user, dahil pinapabuti nito ang mga oras ng pag-compile sa halaga ng mga runtime. Magdagdag
optimization bilang default, itakda ang isa sa tatlong variable, OPT, OPT_FAST, o OPT_SLOW
lib/verilate.mk. O kaya, gamitin ang opsyong -CFLAGS at/o -LDFLAGS sa verilator command
linya upang direktang ipasa ang mga flag sa compiler o linker. O, para lamang sa isang pagtakbo, pumasa
ang mga ito sa command line upang gawin:
gumawa ng OPT_FAST="-O2" -f Vour.mk Vour__ALL.a
Tinukoy ng OPT_FAST ang mga pag-optimize para sa mga program na iyon na bahagi ng mabilis na landas, karamihan
code na isinasagawa sa bawat cycle. Tinutukoy ng OPT_SLOW ang mga pag-optimize para sa mga mabagal na landas na file
(kasama ang pagsubaybay), na bihira lamang isagawa, ngunit tumatagal ng mahabang panahon upang mai-compile
optimization sa. Tinutukoy ng OPT ang pangkalahatang pag-optimize at nakakaapekto sa lahat ng mga pinagsama-sama, kabilang ang
ang mga OPT_FAST at OPT_SLOW ay nakakaapekto. Para sa pinakamahusay na mga resulta, gamitin ang OPT="-O2", at i-link sa
"-static". Halos pareho ang mga resulta na maaaring makuha sa mas mahusay na mga oras ng pag-compile
OPT_FAST="-O1 -fstrict-aliasing". Maaaring makatulong ang mas mataas na pag-optimize gaya ng "-O3", ngunit gcc
Ang mga oras ng pag-compile ay maaaring labis sa ilalim ng O3 sa kahit na katamtamang laki ng mga disenyo. Bilang kahalili, ang ilan
ang mga malalaking disenyo ay nag-uulat ng mas mahusay na pagganap gamit ang "-Os".
Sa kasamaang palad, ang paggamit ng optimizer na may mga SystemC file ay maaaring magresulta sa pagkuha ng mga compiles
ilang minuto. (Ang mga aklatan ng SystemC ay may maraming maliit na inline na function na nagtutulak sa
compiler nuts.)
Para sa pinakamahusay na mga resulta, gamitin ang GCC 3.3 o mas bago. Ang GCC 3.2 at mas maaga ay may mga bug sa pag-optimize
pointer aliasing detection, na maaaring magresulta sa 2x na pagkawala ng performance.
Kung magpapatakbo ka ng maraming simulation sa iisang compile, siyasatin ang hinimok ng feedback
compilation. Sa GCC, gamit ang -fprofile-arcs, pagkatapos ay magbubunga ang -fbranch-probabilities
isa pang 15% o higit pa.
Sinusuportahan din ng mga modernong compiler ang link-time optimization (LTO), na makakatulong lalo na kung
link ka sa DPI code. Para paganahin ang LTO sa GCC, ipasa ang "-flto" sa compilation at link.
Tandaan na ang LTO ay maaaring magdulot ng labis na oras ng pag-compile sa malalaking disenyo.
Kung gumagamit ka ng sarili mong mga makefile, maaaring gusto mong i-compile ang Verilated code gamit ang
-DVL_INLINE_OPT=inline. Ito ay mag-inline ng mga function, gayunpaman ito ay nangangailangan na ang lahat ng cpp
ang mga file ay isasama sa isang solong compiler run.
Maaari mong tuklasin ang higit pang mga posibilidad sa pag-tune sa pamamagitan ng pag-profile sa Verilog code. Gamitin
Ang --profile-cfuncs ng Verilator, pagkatapos ay ang -g -pg ng GCC. Maaari mong patakbuhin ang alinman sa oprofile o
gprof upang makita kung saan sa C++ code ang oras ay ginugol. Patakbuhin ang output ng gprof
verilator_profcfunc at sasabihin nito sa iyo kung anong mga numero ng linya ng Verilog kung saan karamihan sa mga
ginugugol ang oras.
Kapag tapos na, mangyaring ipaalam sa may-akda ang mga resulta. Gusto kong subaybayan kung paano ang Verilator
naghahambing, at maaaring makapagmungkahi ng mga karagdagang pagpapabuti.
Gumamit ng verilator online gamit ang mga serbisyo ng onworks.net