Ini adalah perintah verilator_bin yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa stasiun kerja online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
Verilator - Konversikan kode Verilog ke C++/SystemC
RINGKASAN
verilator --membantu
pemeriksa --versi
verilator --cc [opsi] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [opsi] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [tingkat_atas.v]...
DESKRIPSI
Verilator mengubah kode Verilog yang dapat disintesis (bukan perilaku), ditambah beberapa Sintesis,
SystemVerilog dan sebagian kecil dari pernyataan AMS Verilog, ke dalam kode C++ atau SystemC. Dia
bukan simulator lengkap, tetapi kompiler.
Verilator dipanggil dengan parameter yang mirip dengan GCC, Cadence Verilog-XL/NC-Verilog, atau
VCS Synopsys. Ia membaca kode Verilog yang ditentukan, lints, dan opsional menambahkan
cakupan dan kode pelacakan bentuk gelombang. Untuk format C++ dan SystemC, ini menghasilkan .cpp dan .h
file.
File yang dibuat oleh Verilator kemudian dikompilasi dengan C++. Pengguna menulis sedikit C++
wrapper file, yang membuat instance modul tingkat atas, dan meneruskan nama file ini pada
garis komando. File C ini dikompilasi dalam C++, dan ditautkan dengan file Verilated.
Eksekusi yang dihasilkan akan melakukan simulasi yang sebenarnya.
Untuk memulai, lompat ke "CONTOH EKSEKUSI C++".
ARGUMEN RINGKASAN
Ini adalah ringkasan singkat dari argumen untuk Verilator. Lihat deskripsi detailnya di
bagian berikutnya untuk informasi lebih lanjut.
{file.v} Verilog nama file tingkat atas
{file.c/cc/cpp} File C++ opsional untuk dikompilasi
{file.a/o/so} File C++ opsional untuk ditautkan
+1364-1995ext+ Gunakan Verilog 1995 dengan ekstensi file
+1364-2001ext+ Gunakan Verilog 2001 dengan ekstensi file
+1364-2005ext+ Gunakan Verilog 2005 dengan ekstensi file
+1800-2005ext+ Gunakan SystemVerilog 2005 dengan ekstensi file
+1800-2009ext+ Gunakan SystemVerilog 2009 dengan ekstensi file
+1800-2012ext+ Gunakan SystemVerilog 2012 dengan ekstensi file
--assert Aktifkan semua pernyataan
--autoflush Flush stream setelah semua $displays
--bbox-sys Blackbox tidak dikenal $panggilan sistem
--bbox-unsup Fitur bahasa Blackbox tidak didukung
--tempat sampah Ganti biner Verilator
-CFLAGS C++ Compiler flag untuk makefile
--cc Buat keluaran C++
--cdc Analisis penyeberangan domain jam
--clk Tandai sinyal yang ditentukan sebagai jam
--penyusun Tune untuk kompiler C++ yang ditentukan
--konvergen-batas Menyetel waktu penyelesaian konvergensi
--coverage Aktifkan semua cakupan
--coverage-line Aktifkan cakupan garis
--coverage-toggle Aktifkan beralih cakupan
--coverage-user Aktifkan cakupan pengguna SVL
--coverage-underscore Aktifkan cakupan _signals
-D [= ] Setel definisi praprosesor
--debug Aktifkan debugging
--debug-check Aktifkan pernyataan debug
--debugi Aktifkan debugging pada level tertentu
--debugi- Aktifkan debugging file sumber di level
--default-bahasa Bahasa default untuk diurai
+tentukan+ = Setel definisi praprosesor
--dump-tree Mengaktifkan pembuangan file .tree
--dump-treei Aktifkan pembuangan file .tree pada tingkat
--dump-treei- Aktifkan dumping file .tree di file sumber di tingkat
-E Praproses, tetapi jangan dikompilasi
--batas-kesalahan Batalkan setelah jumlah kesalahan ini
--exe Tautan untuk membuat yang dapat dieksekusi
-F Opsi parsing dari file, relatif
-F Opsi parsing dari file
--gdb Jalankan Verilator di bawah GDB secara interaktif
--gdbbt Jalankan Verilator di bawah GDB untuk penelusuran balik
--help Tampilkan bantuan ini
-SAYA Direktori untuk mencari termasuk
--jika-kedalaman Setel peringatan IFDEPTH
+incdir+ Direktori untuk mencari termasuk
--inhibit-sim Buat fungsi untuk mematikan sim
--inline-multi Tune modul sebaris
-LDFLAGS Bendera pra-objek penautan untuk makefile
-LDLIBS Bendera perpustakaan tautan untuk makefile
--bahasa Standar bahasa default untuk diurai
+libex+ +[ext]... Ekstensi untuk menemukan modul
--lint-only Lint, tetapi tidak menghasilkan keluaran
--MMD Buat file ketergantungan .d
--MP Buat target ketergantungan palsu
--Mdir Nama direktori objek keluaran
--mod-awalan Nama untuk ditambahkan ke kelas bawah
--no-clk Cegah menandai sinyal yang ditentukan sebagai jam
--no-pins64 Jangan gunakan vluint64_t untuk sinyal 33-64 bit
--no-skip-identical Nonaktifkan melewatkan keluaran identik
+pemeriksaan pemberitahuan Diabaikan
-O0 Nonaktifkan pengoptimalan
-O3 Optimalisasi kinerja tinggi
-HAI Pengoptimalan yang dapat dipilih
-Hai Nama executable akhir
--no-order-clock-delay Nonaktifkan jam pemesanan, aktifkan tugas
--output-split Pisahkan file .cpp menjadi beberapa bagian
--output-split-cfuncs Pisahkan fungsi .cpp
--output-split-ctrace Membagi fungsi pelacakan
-P Nonaktifkan nomor baris dan kosong dengan -E
--pin-bv Tentukan jenis untuk port tingkat atas
--pins-sc-uint Tentukan jenis untuk port tingkat atas
--pins-sc-biguint Tentukan jenis untuk port tingkat atas
--pins-uint8 Tentukan jenis untuk port tingkat atas
--pipa-filter Filter semua input melalui skrip
--awalan Nama kelas tingkat atas
--profile-cfuncs Nama fungsi untuk pembuatan profil
-- Debugging pribadi; lihat dokumen
-- Debugging publik; lihat dokumen
--report-unoptflat Diagnostik ekstra untuk UNOPTFLAT
--savable Aktifkan model save-restore
--sc Buat keluaran SystemC
--stats Buat file statistik
--stats-vars Menyediakan statistik tentang variabel
-sv Aktifkan penguraian SystemVerilog
+sistemverilogext+ Sinonim untuk +1800-2012ext+
--top-modul Nama modul input tingkat atas
--trace Aktifkan pembuatan bentuk gelombang
--trace-kedalaman Kedalaman penelusuran
--trace-max-array Lebar bit maksimum untuk penelusuran
--trace-max-width Kedalaman larik maksimum untuk penelusuran
--trace-params Aktifkan parameter pelacakan
--trace-structs Aktifkan nama struktur pelacakan
--trace-underscore Aktifkan pelacakan _signals
-U Undefine preprocessor define
--unroll-count Tune iterasi loop maksimum
--buka gulungan-stmts Tune ukuran tubuh loop maksimum
--tidak digunakan-regexp Setel sinyal serat yang TIDAK DIGUNAKAN
-V Versi dan konfigurasi Verbose
-v Perpustakaan Verilog
+verilog1995ext+ Sinonim untuk +1364-1995ext+
+verilog2001ext+ Sinonim untuk +1364-2001ext+
-Kesalahan- Ubah peringatan menjadi kesalahan
-Masa Depan- Nonaktifkan peringatan pesan tidak dikenal
-Tidak- Nonaktifkan peringatan
-Wno-lint Nonaktifkan semua peringatan serat
-Wno-style Nonaktifkan semua peringatan gaya
-Wno-fatal Nonaktifkan fatal exit pada peringatan
--x-tugaskan Awalnya tetapkan X ke nilai ini
--x-initial-edge Mengaktifkan pemicu tepi X->0 dan X->1 awal
-y Direktori untuk mencari modul
ARGUMEN
{berkas.v}
Menentukan file Verilog yang berisi modul teratas yang akan Diverifikasi.
{file.c/.cc/.cpp/.cxx}
Menentukan file C++ opsional untuk ditautkan dengan kode Verilog. Jika ada file C++
ditentukan dengan cara ini, Verilator akan menyertakan aturan make yang menghasilkan a modul
dapat dieksekusi. Tanpa file C++, Verilator akan berhenti di modul__ALL.sebuah perpustakaan,
dan anggap Anda akan terus menautkan dengan membuat aturan yang Anda tulis sendiri. Lihat juga
-Pilihan CFLAGS.
{berkas.a/.o/.so}
Menentukan objek opsional atau file perpustakaan untuk ditautkan dengan kode Verilog, sebagai
singkatan untuk -LDFLAGS " ". Jika ada file yang ditentukan dengan cara ini, Verilator
akan menyertakan aturan make yang menggunakan file-file ini saat menautkan modul dapat dieksekusi.
Ini umumnya hanya berguna bila digunakan dengan opsi --exe.
+1364-1995lanjut+ext
+1364-2001lanjut+ext
+1364-2005lanjut+ext
+1800-2005lanjut+ext
+1800-2009lanjut+ext
+1800-2012lanjut+ext
Menentukan standar bahasa yang akan digunakan dengan ekstensi nama file tertentu, ext.
Untuk kompatibilitas dengan simulator lain, lihat juga sinonim "+verilog1995ext+"ext,
"+verilog2001ext+"ext, dan "+systemverilogext+"ext.
Untuk file sumber apa pun, bahasa yang ditentukan oleh opsi ini lebih diutamakan daripada bahasa apa pun
bahasa yang ditentukan oleh opsi "--default-language" atau "--language".
Opsi-opsi ini berlaku dalam urutan yang mereka temui. Jadi berikut ini akan
gunakan Verilog 1995 untuk "av" dan Verilog 2001 untuk "bv".
verifikasi ... +1364-1995ext+v av +1364-2001ext+v bv
Bendera ini hanya direkomendasikan untuk desain bahasa campuran lama, sebagai pilihan
pilihannya adalah mengedit kode untuk memperbaiki kata kunci baru, atau menambahkan yang sesuai
"`mulai_kata kunci".
Note "`begin_keywords" adalah konstruksi SystemVerilog, yang menentukan hanya yang
set kata kunci harus dikenali. Set apa pun yang dipilih, semantiknya adalah
orang-orang dari SystemVerilog. Sebaliknya "+1364-1995ext+" dll. tentukan kedua sintaksnya dan
semantik yang akan digunakan.
--menegaskan
Aktifkan semua pernyataan.
Lihat juga --x-assign dan --x-initial-edge; pengaturan "--x-assign unique" dan/atau
"--x-initial-edge" mungkin diinginkan.
--penyiraman otomatis
Setelah setiap $display atau $fdisplay, siram aliran output. Ini menjamin bahwa
pesan akan segera muncul tetapi dapat mengurangi kinerja; untuk panggilan kinerja terbaik
"fflush(stdout)" kadang-kadang di loop C utama. Default off, yang akan buffer
output seperti yang disediakan oleh panggilan C stdio normal.
--bbox-sys
Kotak hitam panggilan tugas atau fungsi $ sistem yang tidak diketahui. Tugas sistem akan sederhana
NOPed, dan fungsi sistem akan diganti dengan nol yang tidak berukuran. Argumen seperti itu
fungsi akan diuraikan, tetapi tidak dicentang. Ini mencegah kesalahan ketika
linting di hadapan panggilan PLI khusus perusahaan.
--bbox-berhenti makan
Kotak hitam beberapa fitur bahasa yang tidak didukung, saat ini tabel UDP dan cmos dan
gerbang tran primitif. Ini memungkinkan linting sisa desain bahkan ketika
konstruksi yang tidak didukung hadir.
--tempat sampah nama file
Jarang dibutuhkan. Ganti nama file default untuk Verilator itu sendiri. Ketika ketergantungan
(.d) file dibuat, nama file ini akan menjadi ketergantungan sumber, sehingga a
perubahan dalam biner ini akan membuat kembali file output.
-CFLAG bendera
Tambahkan flag compiler C yang ditentukan ke makefile yang dihasilkan. Ketika make dijalankan pada
makefile yang dihasilkan ini akan diteruskan ke kompiler C++ (gcc/g++/msvc++).
--cc
Menentukan C++ tanpa mode keluaran SystemC; lihat juga --sc.
--CDC
Eksperimental. Lakukan beberapa pemeriksaan penyeberangan domain jam dan berikan peringatan terkait
(CDCRSTLOGIC) dan kemudian keluar; jika peringatan selain peringatan CDC diperlukan, buat
dijalankan kedua dengan --lint-only. Informasi peringatan tambahan juga ditulis ke
file {awalan}__cdc.txt.
Saat ini hanya memeriksa beberapa item yang terlewatkan oleh alat CDC lainnya; jika Anda memiliki minat dalam
menambahkan lebih banyak pemeriksaan CDC tradisional, silakan hubungi penulis.
--kk nama-sinyal
Terkadang cukup sulit bagi Verilator untuk membedakan sinyal clock dari yang lain
sinyal data. Kadang-kadang sinyal jam dapat berakhir di daftar periksa
sinyal yang menentukan apakah evaluasi lebih lanjut diperlukan. Ini akan sangat menurun
kinerja model yang diverifikasi.
Dengan --clk , pengguna dapat menentukan jam root ke dalam model, lalu Verilator
akan menandai sinyal sebagai clocker dan menyebarkan atribut clocker secara otomatis ke
sinyal lain yang berasal dari itu. Dengan cara ini, Verilator akan mencoba untuk menghindari mengambil
sinyal clocker ke dalam daftar periksa.
Catatan nama sinyal ditentukan oleh jalur hierarki RTL. Misalnya, v.foo.bar. Jika
sinyal input ke top-modul, langsung nama sinyal. Jika Anda menemukannya
sulit untuk menemukan nama yang tepat, coba gunakan "/*verilator clocker*/" dalam file RTL untuk
menandai sinyal secara langsung.
--penyusun nama-kompiler
Mengaktifkan penyetelan dan penyelesaian untuk kompiler C++ yang ditentukan.
dentang
Tune untuk dentang. Ini dapat mengurangi kecepatan eksekusi karena memungkinkan beberapa solusi
untuk menghindari batasan hardcode yang konyol di dentang. Ini termasuk menghancurkan struktur dalam
adapun msvc seperti yang dijelaskan di bawah ini.
gcc Tune untuk Gnu C++, meskipun kode yang dihasilkan harus bekerja pada hampir semua C++ yang sesuai
penyusun. Saat ini default.
msvc
Tune untuk Microsoft Visual C++. Ini dapat mengurangi kecepatan eksekusi karena memungkinkan
beberapa solusi untuk menghindari batasan hardcode yang konyol di MSVC++. Ini termasuk
memecah ekspresi tanda kurung yang sangat bersarang menjadi sub-ekspresi untuk dihindari
kesalahan C1009, dan memecah blok dalam menjadi fungsi untuk menghindari kesalahan C1061.
--konvergen-batas
Jarang dibutuhkan. Menentukan jumlah maksimum iterasi runtime sebelum membuat a
model gagal untuk menyatukan kesalahan. Default ke 100.
--cakupan
Mengaktifkan semua bentuk cakupan, alias untuk "--coverage-line --coverage-toggle
--cakupan-pengguna".
--garis cakupan
Menentukan kode analisis cakupan garis blok dasar harus dimasukkan.
Analisis cakupan menambahkan pernyataan pada setiap titik perubahan aliran kode, yang merupakan
cabang dari pernyataan IF dan CASE, satu set super dari Cakupan Garis Verilog normal. Pada
setiap cabang seperti itu, penghitung unik bertambah. Di akhir tes, penghitung
bersama dengan nama file dan nomor baris yang sesuai dengan setiap penghitung ditulis menjadi
log/cakupan.pl.
Verilator secara otomatis menonaktifkan cakupan cabang yang memiliki $stop di dalamnya, karena
diasumsikan $stop cabang berisi pemeriksaan kesalahan yang seharusnya tidak terjadi. /*verilator
coverage_block_off*/ komentar akan melakukan fungsi serupa pada kode apa pun di blok itu
atau lebih rendah, atau /*verilator coverage_on/coverage_off*/ akan menonaktifkan cakupan di sekitar garis
dari kode.
Catatan Verilator mungkin menghitung lebih banyak blok kombinatorial (non-clocked) ketika blok tersebut
menerima sinyal yang peringatan UNOPTFLAT dinonaktifkan; untuk paling akurat
hasil tidak menonaktifkan peringatan ini saat menggunakan cakupan.
--coverage-beralih
Menentukan kode analisis cakupan sinyal toggle harus dimasukkan.
Setiap bit dari setiap sinyal dalam modul memiliki penghitung yang dimasukkan. Penghitung akan
kenaikan pada setiap perubahan tepi bit yang sesuai.
Sinyal yang merupakan bagian dari tugas atau blok awal/akhir dianggap sebagai variabel lokal dan
tidak tertutup. Sinyal yang dimulai dengan garis bawah, adalah bilangan bulat, atau sangat lebar
(> 256 bit total penyimpanan di semua dimensi) juga tidak tercakup.
Hirarki dikompresi, sehingga jika modul dipakai beberapa kali,
cakupan akan dijumlahkan untuk bit itu di SEMUA instantiasi modul itu dengan
set parameter yang sama. Modul yang dibuat dengan nilai parameter yang berbeda adalah
dianggap sebagai modul yang berbeda, dan akan dihitung secara terpisah.
Verilator membuat keputusan yang sangat cerdas tentang domain jam apa yang menjadi sinyal
pergi ke, dan hanya mencari tepi dalam domain jam itu. Ini berarti bahwa tepi mungkin
diabaikan jika diketahui bahwa tepi tidak pernah dapat dilihat oleh logika penerima. Ini
algoritma dapat meningkatkan di masa depan. Hasil akhirnya adalah cakupan mungkin lebih rendah dari
apa yang akan terlihat dengan melihat jejak, tetapi cakupannya lebih akurat
representasi kualitas stimulus ke dalam desain.
Mungkin ada tepi yang dihitung mendekati waktu nol saat model stabil. Ini bagus
berlatih ke nol semua cakupan sebelum melepaskan reset untuk mencegah penghitungan seperti itu
tingkah laku.
A /*verilator coverage_off/on */ comment pair dapat digunakan di sekitar sinyal yang tidak
perlu analisis toggle, seperti RAM dan file register.
--liputan-garis bawah
Aktifkan cakupan sinyal yang dimulai dengan garis bawah. Biasanya, sinyal-sinyal ini adalah
tidak tertutupi. Lihat juga --trace-underscore.
--cakupan-pengguna
Memungkinkan cakupan fungsional yang disisipkan pengguna. Saat ini, semua titik cakupan fungsional
ditentukan menggunakan SVA yang harus diaktifkan secara terpisah dengan --assert.
Misalnya, pernyataan berikut akan menambahkan titik cakupan, dengan komentar
"Jam Default":
DefaultClock: tutup properti (@(posedge clk) cyc==3);
-Dadalah=nilai
Mendefinisikan simbol preprocessor yang diberikan, tanpa mengizinkan. Mirip dengan +menentukan; + tentukan
cukup standar di seluruh alat Verilog sementara -D adalah alias untuk kompatibilitas GCC.
--debug
Pilih gambar yang dibuat debug dari Verilator (jika tersedia), dan aktifkan lebih banyak internal
pernyataan (setara dengan "--debug-check"), pesan debug (setara dengan
"--debugi 4"), dan file dump bentuk perantara (setara dengan "--dump-treei 3").
--debug-cek
Jarang dibutuhkan. Aktifkan pemeriksaan pernyataan debug internal, tanpa mengubah debug
verbositas. Diaktifkan secara otomatis ketika --debug ditentukan.
--debugi
--debugi-
Jarang dibutuhkan - untuk penggunaan pengembang. Setel tingkat debug internal secara global ke
tingkat debug yang ditentukan (1-10) atau atur file sumber Verilator yang ditentukan ke
tingkat tertentu (misalnya "--debugi-V3Width 9"). Level yang lebih tinggi menghasilkan lebih detail
pesan.
--default-bahasa nilai
Pilih bahasa yang akan digunakan secara default saat pertama kali memproses setiap file Verilog.
Nilai bahasa harus "1364-1995", "1364-2001", "1364-2005", "1800-2005",
"1800-2009" atau "1800-2012".
Bahasa apa pun yang terkait dengan ekstensi file tertentu (lihat berbagai +langex+
options) akan digunakan dalam preferensi untuk bahasa yang ditentukan oleh --default-language.
Bendera --default-language hanya direkomendasikan untuk kode lama menggunakan yang sama
bahasa di semua file sumber, karena opsi yang lebih disukai adalah mengedit kode untuk diperbaiki
kata kunci baru, atau tambahkan "`begin_keywords" yang sesuai. Untuk desain bahasa campuran lama,
berbagai +langopsi ext+ harus digunakan.
Jika tidak ada bahasa yang ditentukan, baik dengan tanda ini atau +langopsi ext+, lalu yang terbaru
Bahasa SystemVerilog (IEEE 1800-2012) digunakan.
+tentukan+adalah=nilai
+tentukan+adalah=nilai+var2=value2...
Mendefinisikan simbol praprosesor yang diberikan, atau beberapa simbol jika dipisahkan dengan tanda tambah.
Mirip dengan -D; +define cukup standar di seluruh alat Verilog sementara -D adalah alias
untuk kompatibilitas GCC.
--dump-pohon
Jarang dibutuhkan. Aktifkan penulisan file debug .tree dengan dumping level 3, yang membuang
tahap kritis standar. Untuk detail tentang format, lihat Verilator Internals
manual. --dump-tree diaktifkan secara otomatis dengan --debug, jadi "--debug
--no-dump-tree" mungkin berguna jika file dump berukuran besar dan tidak diinginkan.
--dump-treei
--dump-treei-
Jarang dibutuhkan - untuk penggunaan pengembang. Setel tingkat pembuangan pohon internal secara global ke a
tingkat pembuangan tertentu atau atur file sumber Verilator yang ditentukan ke yang ditentukan
tingkat pembuangan pohon (misalnya "--dump-treei-V3Order 9"). Level 0 menonaktifkan dump dan adalah
setara dengan "--no-dump-tree". Level 9 memungkinkan pembuangan setiap tahap.
-E Praproses kode sumber, tetapi jangan dikompilasi, seperti pada 'gcc -E'. Keluaran ditulis
untuk standar keluar. Berhati-hatilah saat mengaktifkan pesan debug, karena mereka juga akan pergi ke
standar keluar.
--batas-kesalahan
Setelah jumlah kesalahan atau peringatan ini ditemukan, keluar. Default ke 50.
--exe
Menghasilkan executable. Anda juga harus meneruskan file .cpp tambahan di
baris perintah yang mengimplementasikan loop utama untuk simulasi Anda.
-F fillet
Baca file yang ditentukan, dan bertindak seolah-olah semua teks di dalamnya ditetapkan sebagai perintah
parameter garis. Setiap jalur relatif relatif terhadap direktori yang berisi
file yang ditentukan. Lihat juga -f. Catatan -F cukup standar di seluruh alat Verilog.
-f fillet
Baca file yang ditentukan, dan bertindak seolah-olah semua teks di dalamnya ditetapkan sebagai perintah
parameter garis. Setiap jalur relatif relatif terhadap direktori saat ini. Lihat juga
-F. Catatan -f cukup standar di seluruh alat Verilog.
File mungkin berisi // komentar yang diabaikan hingga akhir baris. $VAR apa saja,
$(VAR), atau ${VAR} akan diganti dengan variabel lingkungan yang ditentukan.
--gdb
Jalankan Verilator di bawah GDB interaktif (atau variabel lingkungan VERILATOR_GDB
nilai) sesi. Lihat juga --gdbbt.
--gdbbt
Jika --debug ditentukan, jalankan Verilator di bawah proses GDB dan cetak backtrace
saat keluar, lalu segera keluar dari GDB. Tanpa --debug atau jika GDB tampaknya tidak berfungsi,
bendera ini diabaikan. Ditujukan untuk memudahkan pembuatan backtrace oleh pengguna; sebaliknya
lihat bendera --gdb.
--membantu
Menampilkan pesan ini dan versi program dan keluar.
-Idir
Lihat -y.
--jika-kedalaman nilai
Jarang dibutuhkan. Atur kedalaman di mana peringatan IFDEPTH akan menyala, default ke 0
yang menonaktifkan peringatan ini.
+termasuk+dir
Lihat -y.
--menghambat-sim
Jarang dibutuhkan. Buat fungsi "inhibitSim(bool)" untuk mengaktifkan dan menonaktifkan evaluasi.
Ini memungkinkan testbench tingkat atas untuk menonaktifkan modul yang tidak penting dalam a
simulasi yang diberikan, tanpa perlu mengkompilasi ulang atau mengubah modul SystemC
dipakai.
--inline-multi nilai
Tune inlining modul. Nilai default 2000 menetapkan bahwa hingga 2000 baru
operasi dapat ditambahkan ke model dengan inlining, jika lebih dari jumlah ini
operasi akan dihasilkan, modul tidak sebaris. Nilai yang lebih besar, atau nilai <= 1
akan menyejajarkan semuanya, akan menyebabkan waktu kompilasi yang lebih lama, tetapi berpotensi lebih cepat
runtime. Pengaturan ini diabaikan untuk modul yang sangat kecil; mereka akan selalu begitu
sebaris, jika diizinkan.
-LDFLAG bendera
Tambahkan flag linker C yang ditentukan ke makefile yang dihasilkan. Ketika make dijalankan pada
makefile yang dihasilkan ini akan diteruskan ke tautan C++ (ld) *setelah* yang utama
file yang ditautkan. Bendera ini disebut -LDFLAGS karena itulah nama tradisionalnya
simulator; itu akan lebih baik disebut LDLIBS karena itu adalah variabel Makefile
itu mengontrol. (Dalam Make, LDFLAGS sebelum objek pertama, LDLIBS setelahnya. -L
perpustakaan harus dalam variabel Make LDLIBS, bukan LDFLAGS.)
--bahasa nilai
Sinonim untuk "--default-langauge", untuk kompatibilitas dengan alat lain dan sebelumnya
versi Verilator.
+libex+ext+ext...
Tentukan ekstensi yang harus digunakan untuk menemukan modul. Jika misalnya modul
x dirujuk, lihat di x.ext. Catatan +libext+ cukup standar di Verilog
peralatan. Default ke .v dan .sv.
--hanya serat
Periksa file untuk pelanggaran lint saja, jangan buat output lain.
Anda mungkin juga ingin opsi -Wall untuk mengaktifkan pesan yang dianggap gaya
dan tidak diaktifkan secara default.
Jika desainnya tidak sepenuhnya Diverifikasi, lihat juga --bbox-sys dan
--bbox-unsup opsi.
--MMD
Aktifkan pembuatan file ketergantungan .d, digunakan untuk membuat deteksi ketergantungan, mirip dengan
opsi gcc -MMD. Aktif secara default, gunakan --no-MMD untuk menonaktifkan.
--MP
Saat membuat file ketergantungan .d dengan --MMD, buat target palsu. Mirip dengan gcc -MP
.
--Mdir direktori
Menentukan nama direktori objek Make. Semua file yang dihasilkan akan ditempatkan
dalam direktori ini. Jika tidak ditentukan, "obj_dir" digunakan. Direktori dibuat jika
itu tidak ada dan direktori induk ada; jika tidak, buat Mdir . secara manual
sebelum memanggil Verilator.
--mod-awalan nama atas
Menentukan nama untuk ditambahkan ke semua kelas tingkat yang lebih rendah. Defaultnya sama dengan
--awalan.
--no-clk
Cegah sinyal yang ditentukan agar tidak ditandai sebagai jam. Lihat "--clk".
--no-pin64
Alias kompatibel mundur untuk "--pins-bv 33".
--no-skip-identik
Jarang dibutuhkan. Menonaktifkan melewatkan eksekusi Verilator jika semua file sumber adalah
identik, dan semua file keluaran ada dengan tanggal yang lebih baru.
+pemeriksaan pemberitahuan
Diabaikan untuk kompatibilitas dengan simulator lain.
-O0 Menonaktifkan optimasi model.
-O3 Mengaktifkan optimasi lambat untuk kode yang dihasilkan Verilator sendiri (berlawanan dengan
"-CFLAGS -O3" yang memengaruhi pengoptimalan kompiler C. -O3 dapat mengurangi simulasi
runtime dengan mengorbankan waktu kompilasi. Ini saat ini menetapkan --inline-mult -1.
-Ooptimasi-surat
Jarang dibutuhkan. Mengaktifkan atau menonaktifkan pengoptimalan tertentu, dengan pengoptimalan
dipilih berdasarkan surat yang lulus. Huruf kecil menonaktifkan pengoptimalan, dan
huruf besar memungkinkannya. Ini dimaksudkan untuk penggunaan debugging saja; lihat sumbernya
kode untuk pemetaan pengoptimalan yang bergantung pada versi ke huruf -O.
-Hai
Tentukan nama untuk executable final yang dibangun jika menggunakan --exe. Default untuk
--prefix jika tidak ditentukan.
--tidak ada-pesanan-jam-penundaan
Jarang dibutuhkan. Nonaktifkan perbaikan bug untuk pemesanan jam yang diaktifkan dengan penundaan
tugas. Bendera ini hanya boleh digunakan jika disarankan oleh pengembang.
--pemisahan keluaran byte
Memungkinkan pemisahan file .cpp/.sp keluaran menjadi beberapa keluaran. Ketika file C++
melebihi jumlah operasi yang ditentukan, file baru akan dibuat di berikutnya
batas fungsi. Selain itu, rutinitas lambat apa pun akan ditempatkan ke dalam file __Slow.
Ini mempercepat kompilasi karena pengoptimalan dapat dinonaktifkan pada rutinitas lambat,
dan file yang tersisa dapat dikompilasi pada mesin paralel. Menggunakan --output-split
seharusnya hanya berdampak kecil pada kinerja. Dengan GCC 3.3 pada Opteron 2GHz,
--output-split 20000 akan menghasilkan pemisahan menjadi kompilasi sekitar satu menit
potongan.
--output-split-cfuncs Laporan
Mengaktifkan fungsi pemisahan dalam file .cpp/.sp keluaran menjadi beberapa fungsi.
Ketika fungsi yang dihasilkan melebihi jumlah operasi yang ditentukan, fungsi baru
akan dibuat. Dengan --output-split, ini akan memungkinkan GCC untuk mengkompilasi lebih cepat, pada a
kerugian kecil dalam kinerja yang semakin buruk dengan penurunan nilai split. Perhatikan bahwa
opsi ini lebih kuat dari --output-split dalam artian --output-split tidak
membagi di dalam suatu fungsi.
--output-split-ctrace Laporan
Mengaktifkan pemisahan fungsi jejak dalam file .cpp/.sp keluaran menjadi beberapa
fungsi. Default ke pengaturan yang sama seperti --output-split-cfuncs.
-P Dengan -E, nonaktifkan pembuatan `penanda baris dan baris kosong, mirip dengan flag GCC -P.
--pin64
Alias kompatibel mundur untuk "--pins-bv 65". Perhatikan itu 65, bukan 64.
--pin-bv lebar
Menentukan input/output SystemC lebih besar dari atau sama dengan lebar bit lebar seharusnya
gunakan sc_bv sebagai ganti uint32/vluint64_t. Standarnya adalah "--pins-bv 65". Versi
sebelum Verilator 3.671 default ke "--pins-bv 33". Semakin banyak sc_bv digunakan, semakin buruk
untuk kinerja. Gunakan atribut "/*verilator sc_bv*/" untuk memilih port tertentu untuk
menjadi sc_bv.
--pin-sc-uint
Menentukan input/output SystemC dengan lebar lebih dari 2 bit harus menggunakan sc_uint
antara 2 dan 64. Ketika dikombinasikan dengan kombinasi "--pins-sc-biguint", hasilnya
di sc_uint digunakan antara 2 dan 64 dan sc_biguint digunakan antara 65 dan 512.
--pins-sc-biguint
Menentukan input/output SystemC dengan lebar lebih dari 65 bit harus menggunakan sc_biguint
antara 65 dan 512, dan sc_bv dari 513 ke atas. Ketika digabungkan dengan
kombinasi "--pins-sc-uint", hasilnya sc_uint digunakan antara 2 dan 64 dan
sc_biguint digunakan antara 65 dan 512.
--pin-uint8
Menentukan input/output SystemC yang lebih kecil dari pengaturan --pins-bv dan 8
bit atau kurang harus menggunakan uint8_t bukan uint32_t. Demikian juga pin dengan lebar 9-16 akan
gunakan uint16_t alih-alih uint32_t.
--pipa-filter Command
Jarang dibutuhkan dan eksperimental. Verilator akan menelurkan perintah yang ditentukan sebagai
pipa subproses, untuk memungkinkan perintah melakukan pengeditan khusus pada kode Verilog
sebelum mencapai Verilator.
Sebelum membaca setiap file Verilog, Verilator akan meneruskan nama file ke subproses'
stdin dengan 'read_verilog " "'. Filter kemudian dapat membaca file dan melakukan
penyaringan apa pun yang diinginkan, dan memasukkan konten file baru kembali ke Verilator di stdout
dengan 'Panjang Konten'. Keluaran ke stderr dari filter diumpankan ke Verilator's
stdout dan jika filter keluar dengan status bukan nol, Verilator berakhir. Lihat
tes t/t_pipe_filter sebagai contoh.
Untuk men-debug output filter, coba gunakan opsi -E untuk melihat output yang telah diproses sebelumnya.
--awalan nama atas
Menentukan nama kelas tingkat atas dan makefile. Default ke V diawali dengan
nama sakelar --top-module, atau V ditambahkan ke nama file Verilog pertama
diteruskan pada baris perintah.
--profil-cfuncs
Ubah fungsi C++ yang dibuat untuk mendukung pembuatan profil. Fungsinya akan menjadi
diminimalkan untuk memuat satu pernyataan "dasar", umumnya satu selalu blok atau kawat
penyataan. (Perhatikan ini akan memperlambat eksekusi sebesar ~5%.) Selanjutnya,
nama fungsi akan diberi akhiran dengan nama dasar modul Verilog dan nomor baris
pernyataan itu berasal. Ini memungkinkan laporan gprof atau oprofile dikorelasikan dengan
pernyataan sumber Verilog asli.
--pribadi
Kebalikan dari --publik. Apakah default; opsi ini ada untuk kompatibilitas mundur.
--publik
Ini hanya untuk penggunaan debug historis. Menggunakannya dapat menyebabkan kesalahan simulasi
jam yang dihasilkan.
Mendeklarasikan semua sinyal dan modul publik. Ini akan mematikan pengoptimalan sinyal sebagai
jika semua sinyal memiliki /*verilator public*/ komentar dan inlining. Ini juga akan berubah
off inlining seolah-olah semua modul memiliki /*verilator public_module*/, kecuali modul
secara khusus mengaktifkannya dengan /*verilator inline_module*/.
--laporan-unoptflat
Diagnostik ekstra untuk peringatan UNOPTFLAT. Ini termasuk untuk setiap loop, 10 terluas
variabel dalam loop, dan 10 variabel yang paling menyebar di loop. Ini adalah
kandidat untuk dipecah menjadi beberapa variabel untuk memutus loop.
Selain itu menghasilkan file GraphViz DOT dari seluruh komponen yang terhubung kuat
dalam sumber yang terkait dengan setiap loop. Ini diproduksi terlepas dari apakah
--dump-tree diatur. Grafik seperti itu dapat membantu dalam menganalisis masalah, tetapi bisa sangat
besar memang.
Berbagai perintah ada untuk melihat dan memanipulasi file DOT. Misalnya dot
perintah dapat digunakan untuk mengonversi file DOT ke PDF untuk dicetak. Sebagai contoh:
titik -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot
akan menghasilkan PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf dari file DOT.
--dapat diselamatkan
Aktifkan termasuk simpan dan pulihkan fungsi dalam model yang dihasilkan.
Kode pengguna harus membuat objek VerilatedSerialize atau VerilatedDeserialze kemudian
memanggil operator << atau >> pada model yang dihasilkan dan data lain apa pun sebagai prosesnya
kebutuhan disimpan/dipulihkan. Sebagai contoh:
void save_model(const char* nama file) {
TerverifikasiSimpan os;
os.open(nama file);
os << main_time; // kode pengguna harus menyimpan stempel waktu, dll
os<< *atas;
}
void restore_model(const char* nama file) {
VerilatedRestore os;
os.open(nama file);
os >> main_time;
os >> *atas;
}
--sc
Menentukan mode keluaran SystemC; lihat juga --cc.
--statistik
Membuat file dump dengan statistik desain di {prefix}__stats.txt.
--statistik-vars
Membuat statistik yang lebih rinci termasuk daftar semua variabel berdasarkan ukuran (polos
--stats hanya memberi hitungan). Lihat --stats, yang tersirat oleh ini.
-sv Menentukan fitur bahasa SystemVerilog harus diaktifkan; setara dengan "--bahasa
1800-2005". Opsi ini dipilih secara default, tersedia untuk kompatibilitas dengan
simulator lainnya.
+sistemverilogext+ext
Sinonim untuk "+1800-2012ext+"ext.
--top-modul nama atas
Ketika input Verilog berisi lebih dari satu modul tingkat atas, tentukan nama
modul Verilog tingkat atas menjadi yang teratas, dan menetapkan default untuk if --prefix
tidak digunakan. Ini tidak diperlukan dengan desain standar dengan hanya satu atasan.
--jejak
Menambahkan kode penelusuran bentuk gelombang ke model. Verilator akan menghasilkan tambahan
{prefix}__Trace*.cpp file yang perlu dikompilasi. Tambahan
verilated_vcd_sc.cpp (untuk jejak SystemC) atau verilated_vcd_c.cpp (untuk keduanya) harus
dikompilasi dan ditautkan. Jika menggunakan Makefile yang dibuat oleh Verilator, ini akan menjadi
ditambahkan sebagai target sumber untuk Anda. Jika Anda tidak menggunakan makefile Verilator, Anda
perlu menambahkan ini ke Makefile Anda secara manual.
Memiliki pelacakan yang dikompilasi dapat mengakibatkan beberapa kerugian kinerja kecil, bahkan ketika
bentuk gelombang tidak diaktifkan selama eksekusi model.
--trace-kedalaman adalah ide yang bagus
Tentukan jumlah level dalam untuk mengaktifkan pelacakan, misalnya --trace-level 1 hingga
hanya melihat sinyal tingkat atas. Default untuk seluruh model. Menggunakan angka kecil
akan mengurangi visibilitas, tetapi sangat meningkatkan runtime dan melacak ukuran file.
--trace-max-array kedalaman
Jarang dibutuhkan. Tentukan kedalaman array maksimum dari sinyal yang dapat dilacak.
Default ke 32, karena menelusuri array besar dapat sangat memperlambat simulasi yang dilacak.
--jejak-lebar maksimal lebar
Jarang dibutuhkan. Tentukan lebar bit maksimum dari sinyal yang dapat dilacak.
Default ke 256, karena menelusuri vektor besar dapat sangat memperlambat simulasi yang dilacak.
--tidak ada-jejak-param
Nonaktifkan pelacakan parameter.
--trace-struct
Aktifkan penelusuran untuk menampilkan nama bidang struktur yang dikemas, gabungan, dan larik yang dikemas,
daripada bus dikemas gabungan simgle. Karena kendala format file VCD ini mungkin
menghasilkan waktu pelacakan yang jauh lebih lambat dan file jejak yang lebih besar.
--trace-garis bawah
Aktifkan pelacakan sinyal yang dimulai dengan garis bawah. Biasanya, sinyal-sinyal ini adalah
tidak output selama pelacakan. Lihat juga --coverage-underscore.
-Uadalah
Tidak menentukan simbol praprosesor yang diberikan.
--unroll-hitung loop
Jarang dibutuhkan. Menentukan jumlah maksimum iterasi loop yang dapat dibuka gulungannya.
Lihat juga peringatan BLKLOOPINIT.
--buka gulungan-stmts Laporan
Jarang dibutuhkan. Menentukan jumlah maksimum pernyataan dalam satu loop untuk loop itu ke
dibuka gulungannya. Lihat juga peringatan BLKLOOPINIT.
--tidak digunakan-regexp regexp
Jarang dibutuhkan. Menentukan regexp sederhana dengan * dan ? bahwa jika nama sinyal cocok
akan menekan peringatan UNUSED. Default ke "* tidak digunakan *". Menyetelnya ke "" menonaktifkan
cocok.
-V Menampilkan versi verbose, termasuk informasi konfigurasi yang dikompilasi menjadi
Verilator. (Mirip dengan perl -V.)
-v nama file
Baca nama file sebagai perpustakaan Verilog. Setiap modul dalam file dapat digunakan untuk
menyelesaikan instantiasi sel di modul tingkat atas, jika tidak diabaikan. Catatan -v cukup
standar di seluruh alat Verilog.
+verilog1995ext+ext
+verilog2001ext+ext
Sinonim untuk "+1364-1995ext+"ext dan "+1364-2001ext+"ext masing-masing
-Dinding
Aktifkan semua peringatan, termasuk peringatan gaya kode yang biasanya dinonaktifkan oleh
standar.
-Kesalahan-pesan
Ubah pesan peringatan yang ditentukan menjadi pesan kesalahan. Ini umumnya untuk
mencegah pengguna melanggar aturan penting di seluruh situs, misalnya
"-Kesalahan-NOUNOPTFLAT".
-Masa Depan-pesan
Jarang dibutuhkan. Menekan komentar Verilator yang tidak dikenal atau pesan peringatan dengan yang diberikan
kode pesan. Ini digunakan untuk mengizinkan kode yang ditulis dengan pragma untuk versi yang lebih baru dari
Verilator untuk dijalankan di bawah versi yang lebih lama; tambahkan -Wfuture- argumen untuk setiap kode pesan
atau berkomentar bahwa versi baru mendukung yang tidak didukung oleh versi lama.
-Tidak-pesan
Nonaktifkan pesan peringatan yang ditentukan. Ini akan menimpa semua arahan lint_on di
sumbernya, yaitu peringatan tetap tidak akan dicetak.
-Tak ada serat
Nonaktifkan semua pesan peringatan terkait lint, dan semua peringatan gaya. Ini setara
ke "-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Tanpa-CMPCONST -Tanpa-ENDLABEL -Tanpa-IMPLICIT -Tanpa-LITENDIAN -Tanpa-PINCONNECTEMPTY
-Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH"
ditambah daftar yang ditampilkan untuk gaya-Wno.
Sangat disarankan Anda membersihkan kode Anda daripada menggunakan opsi ini, ini
hanya dimaksudkan untuk digunakan saat menjalankan uji kasus kode yang diterima dari pihak ketiga.
-Gaya-Wno
Nonaktifkan semua pesan peringatan terkait gaya kode (perhatikan secara default mereka sudah
dengan disabilitas). Ini setara dengan "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Tak-PINCONNECTEMPTY -Tak-PINNOCONNECT -Tak-SYNCASYNCNET -Tak-TIDAK DIPAKAI -Tak-TIDAK DIGUNAKAN
-Wno-VARHIDDEN".
-Tidak-fatal
Saat peringatan terdeteksi, cetaklah, tetapi jangan keluar dari simulator.
Memiliki pesan peringatan dalam build itu ceroboh. Sangat disarankan Anda membersihkan
kode Anda, gunakan inline lint_off, atau gunakan flag -Wno-... daripada menggunakan opsi ini.
-Peringatkan-pesan
Mengaktifkan pesan peringatan yang ditentukan.
-Peringatan-serat
Aktifkan semua pesan peringatan terkait serat (perhatikan secara default pesan tersebut sudah diaktifkan),
tetapi tidak memengaruhi pesan gaya. Ini setara dengan "-Wwarn-ALWCOMBORDER
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PINMISSING -Wwarn-REALCVT
-Wwarn-TIDAK TANDA TANGAN -Wwarn-WIDTH".
-Warn-style
Aktifkan semua pesan peringatan terkait gaya kode. Ini setara dengan "-Wwarn
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-TIDAK DIGUNAKAN -Wwarn-VARHIDDEN".
--x-tetapkan 0
--x-tetapkan 1
--x-assign cepat (default)
--x-menetapkan unik
Mengontrol nilai dua keadaan yang diganti saat penugasan ke X ditemukan.
--x-assign=fast, default, mengonversi semua X menjadi apa pun yang terbaik untuk kinerja.
--x-assign=0 mengonversi semua X menjadi 0, dan juga cepat. --x-assign=1 mengonversi semua X menjadi
1s, ini hampir secepat 0, tetapi lebih mungkin untuk menemukan bug reset sebagai aktif tinggi
logika akan menyala. --x-assign=unique akan memanggil fungsi untuk menentukan nilainya, ini
memungkinkan pengacakan semua X untuk menemukan bug yang disetel ulang dan merupakan yang paling lambat, tetapi paling aman untuk
menemukan bug reset dalam kode.
Jika menggunakan --x-assign unique, Anda mungkin ingin menyemai generator nomor acak Anda seperti
bahwa setiap lari regresi mendapat urutan pengacakan yang berbeda. Gunakan sistem
pasir48() atau untuk Windows pasir() fungsi untuk melakukan ini. Anda mungkin juga ingin
cetak benih apa pun yang dipilih, dan kode untuk mengaktifkan menjalankan kembali dengan benih yang sama sehingga Anda bisa
mereproduksi bug.
Catatan. Opsi ini hanya berlaku untuk variabel yang secara eksplisit ditetapkan ke X di
Kode sumber Verilog. Nilai awal jam diatur ke 0 kecuali --x-initial-edge adalah
ditentukan. Nilai awal dari semua variabel pemegang status lainnya ditetapkan seolah-olah
--x-assign unique telah ditentukan.
--x-awal-tepi
Mengaktifkan emulasi simulator yang digerakkan oleh peristiwa yang umumnya memicu keunggulan pada a
transisi dari X ke 1 ("posedge") atau X ke 0 ("negedge"). Jadi kode berikut,
di mana "rst_n" tidak diinisialisasi akan mengatur "res_n" menjadi "1'b1" ketika "rst_n" pertama kali disetel
ke nol:
reg res_n = 1'b0;
selalu @(negedge rst_n) dimulai
jika (rst_n == 1'b0) dimulai
res_n <= 1'b1;
akhir
akhir
Di Verilator, secara default, jam yang tidak diinisialisasi diberi nilai nol, jadi di atas
blok "selalu" tidak akan memicu.
Meskipun ini bukan praktik yang baik, ada beberapa desain yang mengandalkan pemicu XX 0 a
"negedge", terutama dalam urutan reset. Menggunakan --x-initial-edge dengan Verilator akan
meniru perilaku ini. Ini juga akan memastikan bahwa XX 1 memicu "posedge".
Catatan. Beberapa pengguna telah melaporkan bahwa menggunakan opsi ini dapat memengaruhi konvergensi, dan itu
mungkin perlu menggunakan --converge-limit untuk meningkatkan jumlah konvergensi
iterasi. Ini mungkin merupakan indikasi lain dari masalah dengan desain model yang
harus ditangani.
-y dir
Tambahkan direktori ke daftar direktori yang harus dicari termasuk file
atau perpustakaan. Tiga flag -y, +incdir dan -I memiliki efek yang sama; +incdir dan +y
cukup standar di seluruh alat Verilog sementara -I adalah alias untuk kompatibilitas GCC.
Verilator default ke direktori saat ini ("-y .") dan yang ditentukan --Mdir, meskipun
jalur default ini digunakan setelah direktori yang ditentukan pengguna. Ini memungkinkan '-y
"$(pwd)"' untuk digunakan jika nama file absolut diinginkan untuk pesan kesalahan, bukan
nama file relatif.
CONTOH C + + EKSEKUSI
Kami akan mengkompilasi contoh ini ke dalam C++.
mkdir test_our
cd test_our
kucing < kami.v
modul kami;
awal mulai $display("Halo Dunia"); $selesai; akhir
endmodule
EOF
kucing < sim_main.cpp
#sertakan "Vour.h"
#sertakan "verilated.h"
int utama(int argc, char **argv, char **env) {
Diverifikasi::commandArgs(argc, argv);
Vour* atas = Vour baru;
while (!Verilated::gotFinish()) { top->eval(); }
hapus atas;
keluar(0);
}
EOF
Jika Anda menginstal Verilator dari sumber, atau tarball, tetapi bukan sebagai bagian dari operasi Anda
sistem (sebagai RPM), pertama-tama Anda harus menunjuk ke kit:
ekspor VERILATOR_ROOT=/path/to/where/verilator/was/diinstal
ekspor PATH=$VERILATOR_ROOT/bin:$PATH
Sekarang kita menjalankan Verilator pada contoh kecil kita.
verilator -Dinding --cc our.v --exe sim_main.cpp
Kita dapat melihat kode sumber di bawah direktori "obj_dir". Lihat bagian FILE di bawah untuk
deskripsi dari beberapa file yang dibuat.
ls -l obj_dir
Kami kemudian dapat mengkompilasinya
cd obj_dir
make -j -f Vour.mk Vour
(Verilator menyertakan aturan kompilasi dan aturan tautan default, karena kami menggunakan --exe dan meneruskan a
.cpp file pada baris perintah Verilator. Anda juga dapat menulis aturan kompilasi Anda sendiri, sebagai
akan kami tampilkan di bagian SISTEM.)
Dan sekarang kita menjalankannya
cd ..
obj_dir/Vour
Dan kita dapatkan sebagai output
Hello Dunia
- our.v:2: Verilog $selesai
Sungguh, Anda lebih baik menulis Makefile untuk melakukan semua ini untuk Anda. Kemudian, ketika Anda
perubahan sumber itu akan secara otomatis menjalankan semua langkah ini. Lihat direktori test_c di
distribusi sebagai contoh.
CONTOH SISTEM EKSEKUSI
Ini adalah contoh yang mirip dengan di atas, tetapi menggunakan SystemC.
mkdir test_our_sc
cd test_our_sc
kucing < kami.v
modul kami (clk);
masukan clk; // Jam diperlukan untuk mendapatkan aktivasi awal
selalu @ (posege clk)
mulai $display("Halo Dunia"); $selesai; akhir
endmodule
EOF
kucing < sc_main.cpp
#sertakan "Vour.h"
int sc_main(int argc, char **argv) {
Diverifikasi::commandArgs(argc, argv);
sc_clock clk("clk",10, 0.5, 3, benar);
Vour* atas;
atas = new Vour("atas"); // SP_CELL (atas, Vour);
atas->clk(clk); // SP_PIN (atas, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
hapus atas;
keluar(0);
}
EOF
Jika Anda menginstal Verilator dari sumber, atau tarball, tetapi bukan sebagai bagian dari operasi Anda
sistem (sebagai RPM), pertama-tama Anda harus menunjuk ke kit:
ekspor VERILATOR_ROOT=/path/to/where/verilator/was/diinstal
ekspor PATH=$VERILATOR_ROOT/bin:$PATH
Sekarang kita menjalankan Verilator pada contoh kecil kita.
verilator -Dinding --sc our.v
Kami kemudian dapat mengkompilasinya
make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o diverifikasi.o
Dan link dengan SystemC. Perhatikan jalur Anda ke perpustakaan dapat bervariasi, tergantung pada
sistem operasi.
ekspor SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
ekspor LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Mungkin diperlukan jika SystemC 2.3.0
ekspor SYSTEMC_CXX_FLAGS=-pthread
g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o diverifikasi.o \
-o Anda -lsystemc
Dan sekarang kita menjalankannya
cd ..
obj_dir/Vour
Dan kami mendapatkan output yang sama dengan contoh C++:
Hello Dunia
- our.v:2: Verilog $selesai
Sungguh, Anda lebih baik menggunakan Makefile untuk melakukan semua ini untuk Anda. Kemudian, ketika sumber Anda
perubahan itu akan secara otomatis menjalankan semua langkah ini. Lihat direktori test_sc di
distribusi sebagai contoh.
PEMBENTUKAN & OPTIMALISASI
Untuk kinerja terbaik, jalankan Verilator dengan tanda "-O3 --x-assign=fast --noassert". NS
-O3 flag akan membutuhkan waktu kompilasi yang lebih lama, dan --x-assign=fast dapat meningkatkan risiko
reset bug dalam perdagangan untuk kinerja; lihat dokumentasi di atas untuk flag-flag ini.
Perubahan kode Verilog kecil juga dapat memberikan kemenangan besar. Anda seharusnya tidak memiliki UNOPTFLAT
peringatan dari Verilator. Memperbaiki peringatan ini dapat menghasilkan peningkatan besar; satu pengguna
memperbaiki satu peringatan UNOPTFLAT mereka dengan membuat perubahan sederhana pada kait jam yang digunakan untuk gerbang
jam dan memperoleh peningkatan kinerja 60%.
Di luar itu, kinerja model Verilated sebagian besar bergantung pada kompiler C++ Anda dan
ukuran cache CPU Anda.
Secara default, file lib/verilated.mk telah menonaktifkan pengoptimalan. Ini untuk
menguntungkan pengguna baru, karena meningkatkan waktu kompilasi dengan mengorbankan runtime. Menambahkan
optimasi sebagai default, atur salah satu dari tiga variabel, OPT, OPT_FAST, atau OPT_SLOW
lib/verilated.mk. Atau, gunakan opsi -CFLAGS dan/atau -LDFLAGS pada perintah verilator
baris untuk meneruskan flag langsung ke compiler atau linker. Atau, hanya untuk sekali lari, lulus
mereka di baris perintah untuk membuat:
buat OPT_FAST="-O2" -f Vour.mk Vour__ALL.a
OPT_FAST menentukan pengoptimalan untuk program-program yang merupakan bagian dari jalur cepat, sebagian besar
kode yang dieksekusi setiap siklus. OPT_SLOW menentukan pengoptimalan untuk file jalur lambat
(ditambah penelusuran), yang jarang dieksekusi, namun membutuhkan waktu lama untuk dikompilasi
pengoptimalan aktif. OPT menentukan pengoptimalan keseluruhan dan memengaruhi semua kompilasi, termasuk
pengaruh OPT_FAST dan OPT_SLOW tersebut. Untuk hasil terbaik, gunakan OPT="-O2", dan tautkan dengan
"-statis". Hasil yang hampir sama dapat diperoleh dengan waktu kompilasi yang jauh lebih baik dengan
OPT_FAST="-O1 -fstrict-aliasing". Pengoptimalan yang lebih tinggi seperti "-O3" dapat membantu, tetapi gcc
waktu kompilasi mungkin berlebihan di bawah O3 bahkan pada desain berukuran sedang. Atau, beberapa
desain yang lebih besar melaporkan kinerja yang lebih baik menggunakan "-Os".
Sayangnya, menggunakan pengoptimal dengan file SystemC dapat mengakibatkan pengambilan kompilasi
beberapa menit. (Perpustakaan SystemC memiliki banyak fungsi inline kecil yang mendorong
kacang kompiler.)
Untuk hasil terbaik, gunakan GCC 3.3 atau yang lebih baru. GCC 3.2 dan sebelumnya memiliki bug pengoptimalan di sekitar
deteksi aliasing pointer, yang dapat mengakibatkan kerugian kinerja 2x.
Jika Anda akan menjalankan banyak simulasi pada satu kompilasi, selidiki umpan balik yang didorong
kompilasi. Dengan GCC, menggunakan -fprofile-arcs, maka -fbranch-probability akan menghasilkan
15% atau lebih.
Kompiler modern juga mendukung pengoptimalan waktu tautan (LTO), yang dapat membantu terutama jika:
Anda menautkan dalam kode DPI. Untuk mengaktifkan LTO di GCC, berikan "-flto" di kompilasi dan tautan.
Catatan LTO dapat menyebabkan waktu kompilasi yang berlebihan pada desain besar.
Jika Anda menggunakan makefile Anda sendiri, Anda mungkin ingin mengkompilasi kode Verilated dengan
-DVL_INLINE_OPT=sebaris. Ini akan inline fungsi, namun ini mengharuskan semua cpp
file dikompilasi dalam menjalankan kompiler tunggal.
Anda dapat menemukan kemungkinan penyetelan lebih lanjut dengan membuat profil kode Verilog. Menggunakan
--profile-cfuncs Verilator, lalu -g -pg GCC. Anda kemudian dapat menjalankan oprofile atau
gprof untuk melihat di mana dalam kode C++ waktu dihabiskan. Jalankan output gprof melalui
verilator_profcfunc dan itu akan memberi tahu Anda apa nomor baris Verilog di mana sebagian besar
waktu sedang dihabiskan.
Setelah selesai, beri tahu penulis hasilnya. Saya suka mengawasi bagaimana Verilator
membandingkan, dan mungkin dapat menyarankan perbaikan tambahan.
Gunakan verilator_bin online menggunakan layanan onworks.net