این دستور verilator_bin است که می تواند در ارائه دهنده میزبانی رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
Verilator - کد Verilog را به C++/SystemC تبدیل کنید
خلاصه
verilator -- کمک
verilator --نسخه
verilator --cc [گزینه ها] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [options] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [top_level.v]...
شرح
Verilator کد Verilog قابل سنتز (نه رفتاری) را به اضافه مقداری سنتز تبدیل می کند.
SystemVerilog و زیرمجموعه کوچکی از اظهارات Verilog AMS، به کد C++ یا SystemC. آی تی
یک شبیه ساز کامل نیست، بلکه یک کامپایلر است.
Verilator با پارامترهای مشابه GCC، Cadence Verilog-XL/NC-Verilog یا
VCS Synopsys. کد Verilog مشخص شده را می خواند، آن را پر می کند و به صورت اختیاری اضافه می کند
کد ردیابی پوشش و شکل موج برای فرمت های C++ و SystemC، cpp. و .h را خروجی می دهد
فایل های.
فایل های ایجاد شده توسط Verilator سپس با C++ کامپایل می شوند. کاربر کمی C++ می نویسد
فایل wrapper، که ماژول سطح بالا را نمونهسازی میکند و این نام فایل را روی آن ارسال میکند
خط فرمان. این فایل های C در C++ کامپایل شده و با فایل های Verilated پیوند داده شده اند.
فایل اجرایی حاصل شبیه سازی واقعی را انجام خواهد داد.
برای شروع، به «EXAMPLE C++ EXECUTION» بروید.
بحث و جدل خلاصه
این خلاصه ای کوتاه از استدلال های Verilator است. توضیحات مفصل را در
بخش های بعدی برای اطلاعات بیشتر
{file.v} نام فایل های سطح بالای Verilog
{file.c/cc/cpp} فایلهای C++ اختیاری برای کامپایل
{file.a/o/so} فایلهای C++ اختیاری برای پیوند دادن
+1364-1995ext+ از Verilog 1995 با پسوند فایل استفاده کنید
+1364-2001ext+ از Verilog 2001 با پسوند فایل استفاده کنید
+1364-2005ext+ از Verilog 2005 با پسوند فایل استفاده کنید
+1800-2005ext+ از SystemVerilog 2005 با پسوند فایل استفاده کنید
+1800-2009ext+ از SystemVerilog 2009 با پسوند فایل استفاده کنید
+1800-2012ext+ از SystemVerilog 2012 با پسوند فایل استفاده کنید
--assert همه ادعاها را فعال کنید
--autoflush Flush استریم ها بعد از همه نمایش های $
--bbox-sys Blackbox ناشناخته $system فرا می خواند
--bbox-unsup ویژگی های زبان پشتیبانی نشده Blackbox
--صندوقچه باینری Verilator را لغو کنید
-CFLAGS پرچم کامپایلر C++ برای makefile
--cc خروجی C++ ایجاد کنید
تجزیه و تحلیل تقاطع دامنه ساعت --cdc
--کلیک کنید علامت مشخص شده به عنوان ساعت
--کامپایلر برای کامپایلر C++ مشخص شده تنظیم کنید
-- همگرا - حد زمان تسویه همگرایی را تنظیم کنید
--coverage تمام پوشش را فعال کنید
--coverage-line پوشش خط را فعال کنید
--coverage-toggle پوشش ضامن را فعال کنید
--coverage-user پوشش کاربر SVL را فعال کنید
--coverage-underscore پوشش سیگنال های _ را فعال کنید
-D [= ] تعریف پیش پردازنده را تنظیم کنید
--debug اشکال زدایی را فعال کنید
--debug-check فعال کردن ادعاهای اشکال زدایی
--debugi اشکال زدایی را در یک سطح مشخص فعال کنید
--debugi- اشکال زدایی یک فایل منبع را در یک سطح فعال کنید
--زبان پیش فرض زبان پیشفرض برای تجزیه
+define+ = تعریف پیش پردازنده را تنظیم کنید
--dump-tree تخلیه فایل های .tree را فعال کنید
--dump-treei تخلیه فایل های درختی را در یک سطح فعال کنید
--dump-treei- تخلیه فایل .tree را در یک فایل منبع در یک سطح فعال کنید
-E پیش پردازش کنید، اما کامپایل نکنید
-- error-limit بعد از این تعداد خطا لغو کنید
--exe لینک برای ایجاد فایل اجرایی
-اف تجزیه گزینه ها از یک فایل، نسبتا
-ف گزینه ها را از یک فایل تجزیه کنید
--gdb Verilator را تحت GDB به صورت تعاملی اجرا کنید
--gdbbt Verilator را در زیر GDB برای ردیابی اجرا کنید
--help نمایش این راهنما
-من دایرکتوری برای جستجو شامل
--اگر-عمق هشدار IFDEPTH را تنظیم کنید
+incdir+ دایرکتوری برای جستجو شامل
--inhibit-sim عملکردی برای خاموش کردن سیم کارت ایجاد کنید
--inline-mult ماژول داخلی را تنظیم کنید
-LDFLAGS پرچمهای پیشابجکت پیوند دهنده برای makefile
-LDLIBS پرچم های کتابخانه پیوند دهنده برای makefile
--زبان استاندارد زبان پیش فرض برای تجزیه
+libext+ +[ext]... برنامه های افزودنی برای یافتن ماژول ها
--lint-only Lint، اما خروجی ایجاد نکنید
--MMD فایل های وابستگی .d ایجاد کنید
--MP ایجاد اهداف وابستگی ساختگی
--Mdir نام دایرکتوری شی خروجی
- پیشوند mod نامی که باید به طبقات پایین تر اضافه شود
--بدون کلیک از علامت گذاری سیگنال مشخص شده به عنوان ساعت جلوگیری کنید
--no-pins64 از vluint64_t برای سیگ های 33-64 بیتی استفاده نکنید
--no-skip-identical پرش خروجی یکسان را غیرفعال کنید
+notimingchecks نادیده گرفته شد
-O0 بهینه سازی ها را غیرفعال کنید
-O3 بهینه سازی عملکرد بالا
-O بهینه سازی های قابل انتخاب
-o نام فایل اجرایی نهایی
--no-order-clock-delay غیرفعال کردن تکالیف فعال کردن سفارش ساعت
--خروجی-تقسیم فایل های cpp. را به قطعات تقسیم کنید
--output-split-cfuncs تقسیم توابع cpp
--output-split-ctrace توابع ردیابی تقسیم
-P شماره خطوط و جاهای خالی را با -E غیرفعال کنید
--pins-bv انواع پورت های سطح بالا را مشخص کنید
--pins-sc-uint انواع پورت های سطح بالا را مشخص کنید
--pins-sc-biguint انواع پورت های سطح بالا را مشخص کنید
--pins-uint8 انواع پورت های سطح بالا را مشخص کنید
---لوله-فیلتر تمام ورودی ها را از طریق یک اسکریپت فیلتر کنید
-- پیشوند نام کلاس سطح بالا
--profile-cfuncs نام توابع برای پروفایل
--خصوصی اشکال زدایی. اسناد را ببینید
- اشکال زدایی عمومی؛ اسناد را ببینید
--report-unoptflat تشخیص اضافی برای UNOPTFLAT
--savable فعال کردن مدل save-restore
--sc خروجی SystemC ایجاد کنید
--stats فایل آماری ایجاد کنید
--stats-vars ارائه آمار در مورد متغیرها
-sv تجزیه SystemVerilog را فعال کنید
+systemverilogext+ مترادف +1800-2012ext+
-- بالا ماژول نام ماژول ورودی سطح بالا
--trace ایجاد شکل موج را فعال کنید
-- ردیابی عمق عمق ردیابی
--trace-max-array حداکثر عرض بیت برای ردیابی
--trace-max-width حداکثر عمق آرایه برای ردیابی
--trace-params پارامترهای ردیابی را فعال کنید
--trace-structs نام ساختارهای ردیابی را فعال کنید
--trace-Underscore ردیابی _signals را فعال کنید
-U Undefine تعریف پیش پردازنده
-- unroll-count حداکثر تکرارهای حلقه را تنظیم کنید
--unroll-stmts حداکثر اندازه بدنه حلقه را تنظیم کنید
--unused-regexp سیگنال های لینت استفاده نشده را تنظیم کنید
نسخه و پیکربندی -V Verbose
-v کتابخانه Verilog
+verilog1995ext+ مترادف +1364-1995ext+
+verilog2001ext+ مترادف +1364-2001ext+
-خطا- تبدیل هشدار به خطا
-آینده- اخطارهای پیام ناشناس را غیرفعال کنید
-نه- غیرفعال کردن هشدار
-Wno-lint همه هشدارهای پرز را غیرفعال کنید
-Wno-style همه هشدارهای سبک را غیرفعال کنید
-Wno-fatal خروج کشنده را در اخطارها غیرفعال کنید
--x-تخصیص در ابتدا Xs را به این مقدار اختصاص دهید
--x-initial-edge محرک های اولیه لبه X->0 و X->1 را فعال کنید
-y دایرکتوری برای جستجوی ماژول ها
ادله
{file.v}
فایل Verilog حاوی ماژول بالایی که باید Verilated شود را مشخص می کند.
{file.c/.cc/.cpp/.cxx}
فایلهای C++ اختیاری را مشخص میکند تا با کد Verilog پیوند داده شوند. اگر فایل های C++ وجود دارد
به این ترتیب مشخص شده اند، Verilator یک قانون ساخت را شامل می شود که a را ایجاد می کند واحد
قابل اجرا بدون هیچ فایل ++C، Verilator در واحد__ALL.یک کتابخانه،
و فرض کنید به پیوند با قوانینی که خودتان می نویسید ادامه خواهید داد. را نیز ببینید
گزینه -CFLAGS.
{file.a/.o/.so}
شیء یا فایل های کتابخانه اختیاری را مشخص می کند تا با کد Verilog پیوند داده شوند
مخفف -LDFLAGS " اگر فایلی به این شکل مشخص شده باشد، Verilator
شامل یک قانون ساخت می شود که از این فایل ها هنگام پیوند دادن استفاده می کند واحد قابل اجرا
این به طور کلی فقط زمانی مفید است که با گزینه --exe استفاده شود.
+1364-1995+EXT
+1364-2001+EXT
+1364-2005+EXT
+1800-2005+EXT
+1800-2009+EXT
+1800-2012+EXT
استاندارد زبان مورد استفاده با پسوند نام فایل خاص را مشخص می کند، EXT.
برای سازگاری با سایر شبیه سازها، مترادف "+verilog1995ext+" را نیز ببینید.EXT,
"+verilog2001ext+"EXTو "+systemverilogext+"EXT.
برای هر فایل منبع، زبان مشخص شده توسط این گزینه ها بر هر فایلی اولویت دارد
زبان مشخص شده توسط گزینه های "--default-language" یا "--language".
این گزینه ها به ترتیبی که با آنها مواجه می شوند، اعمال می شوند. بنابراین موارد زیر خواهد بود
از Verilog 1995 برای "av" و Verilog 2001 برای "bv" استفاده کنید.
verilator ... +1364-1995ext+v av +1364-2001ext+v bv
این پرچمها فقط برای طرحهای قدیمی به زبان ترکیبی توصیه میشوند
گزینه ویرایش کد برای تعمیر کلمات کلیدی جدید یا اضافه کردن مناسب است
"'begin_keywords".
توجه داشته باشید: "`begin_keywords" یک ساختار SystemVerilog است که مشخص می کند فقط که
مجموعه ای از کلمات کلیدی باید شناسایی شود. هر مجموعه ای که انتخاب شود، معناشناسی خواهد بود
از SystemVerilog. در مقابل "+1364-1995ext+" و غیره هر دو نحو را مشخص می کند و
معناشناسی مورد استفاده
-- ادعا
فعال کردن همه ادعاها
همچنین --x-assign و --x-initial-edge را ببینید. تنظیم "--x-assign منحصر به فرد" و/یا
"--x-initial-edge" ممکن است مطلوب باشد.
-- خودکار فلاش
بعد از هر $display یا $fdisplay، جریان خروجی را شستشو دهید. این آن را تضمین می کند
پیام ها بلافاصله ظاهر می شوند اما ممکن است عملکرد را کاهش دهند. برای بهترین عملکرد تماس بگیرید
"flush(stdout)" گاهی اوقات در حلقه اصلی C. پیشفرض خاموش است، که بافر میشود
خروجی همانطور که توسط تماس های معمولی C stdio ارائه می شود.
--bbox-sys
جعبه سیاه هر وظیفه یا تابع سیستم ناشناخته $. وظایف سیستم به سادگی خواهد بود
NOPed، و توابع سیستم با صفر بدون اندازه جایگزین خواهند شد. استدلال به چنین
توابع تجزیه خواهند شد، اما در غیر این صورت بررسی نمی شوند. این از خطاهای زمانی جلوگیری می کند
در حضور تماس های PLI خاص شرکت.
--bbox-unsup
جعبه سیاه برخی از ویژگی های زبان پشتیبانی نشده، جداول UDP در حال حاضر و cmos و
تران گیت اولیه این ممکن است پرز زدن بقیه طرح را حتی زمانی که
ساختارهای پشتیبانی نشده وجود دارد.
--صندوقچه نام فایل
به ندرت مورد نیاز است. نام فایل پیش فرض را برای خود Verilator لغو کنید. وقتی یک وابستگی
(.d) فایل ایجاد می شود، این نام فایل به یک منبع وابستگی تبدیل می شود، به طوری که a
تغییر در این باینری باعث بازسازی فایل های خروجی می شود.
-CFLAGS پرچم ها
پرچم های کامپایلر C مشخص شده را به فایل های ساخته شده اضافه کنید. هنگامی که make بر روی اجرا می شود
فایل ایجاد شده به کامپایلر C++ (gcc/g++/msvc++) ارسال میشود.
-- سی سی
C++ را بدون حالت خروجی SystemC مشخص می کند. همچنین ببینید --sc.
--CDC
تجربی. چند بررسی تقاطع دامنه ساعت انجام دهید و اخطارهای مربوطه را صادر کنید
(CDCRSTLOGIC) و سپس خارج شوید. اگر اخطارهایی به غیر از هشدارهای CDC مورد نیاز است، a
اجرای دوم با --lint-only. اطلاعات اخطار اضافی نیز به آن نوشته شده است
فایل {پیشوند}__cdc.txt.
در حال حاضر فقط مواردی را بررسی می کند که سایر ابزارهای CDC از دست داده اند. اگر علاقه دارید
با افزودن چک های سنتی CDC، لطفاً با نویسندگان تماس بگیرید.
--کلیک کنید نام سیگنال
گاهی اوقات تشخیص سیگنال های ساعت از سایر سیگنال ها برای Verilator بسیار دشوار است
سیگنال های داده گاهی اوقات سیگنالهای ساعت میتوانند در لیست بررسی قرار گیرند
سیگنال هایی که تعیین می کند که آیا ارزیابی بیشتر مورد نیاز است یا خیر. این به شدت تنزل خواهد کرد
عملکرد مدل تایید شده
با --clk ، کاربر می تواند ساعت root را در مدل و سپس Verilator مشخص کند
سیگنال را به عنوان ساعت علامت گذاری می کند و ویژگی ساعت را به طور خودکار در آن منتشر می کند
سیگنال های دیگر به دست آمده از آن. به این ترتیب، Verilator سعی خواهد کرد از مصرف آن اجتناب کند
سیگنال ساعت به چک لیست
توجه سیگنال-نام توسط مسیر سلسله مراتبی RTL مشخص می شود. مثلا v.foo.bar. اگر
سیگنال ورودی به ماژول بالا است و مستقیماً نام سیگنال است. اگه پیداش کردی
پیدا کردن نام دقیق مشکل است، سعی کنید از "/*verilator clocker*/" در فایل RTL استفاده کنید تا
سیگنال را مستقیماً علامت گذاری کنید.
--کامپایلر نام کامپایلر
تنظیم ها و کارها را برای کامپایلر C++ مشخص شده فعال می کند.
چنگال
کوک برای صدا زدن. این ممکن است سرعت اجرا را کاهش دهد زیرا چندین راه حل را امکان پذیر می کند
برای جلوگیری از محدودیت های رمزگذاری شده احمقانه در صدای جرنگ. این شامل شکستن ساختارهای عمیق است
همانطور که برای msvc در زیر توضیح داده شده است.
gcc Tune برای Gnu C++، اگرچه کد تولید شده باید تقریباً روی هر C++ سازگار کار کند
کامپایلر در حال حاضر پیش فرض
msvc
برای Microsoft Visual C++ تنظیم کنید. این ممکن است سرعت اجرا را همانطور که فعال می کند کاهش دهد
چندین راه حل برای جلوگیری از محدودیت های رمزگذاری شده احمقانه در MSVC++. این شامل
برای جلوگیری از شکستن عبارات پرانتز عمیق تو در تو به عبارات فرعی
خطای C1009 و شکستن بلوک های عمیق به توابع برای جلوگیری از خطای C1061.
-- همگرا - حد
به ندرت مورد نیاز است. حداکثر تعداد تکرارهای زمان اجرا را قبل از ایجاد a مشخص می کند
مدل موفق به همگرایی خطا شد. پیش فرض 100 است.
-- پوشش
همه اشکال پوشش، مستعار "--coverage-line --coverage-toggle" را فعال می کند
--پوشش-کاربر".
-خط پوشش
مشخص می کند کد تجزیه و تحلیل پوشش خط بلوک اساسی باید درج شود.
تجزیه و تحلیل پوشش عباراتی را در هر نقطه تغییر جریان کد اضافه می کند که عبارتند از
شاخه های دستورات IF و CASE، مجموعه ای فوق العاده از پوشش معمولی Verilog Line. در
هر شاخه از این قبیل یک شمارنده منحصر به فرد افزایش می یابد. در پایان یک آزمون، شمارنده ها
به همراه نام فایل و شماره خط مربوط به هر شمارنده در آن نوشته می شود
logs/coverage.pl.
Verilator به طور خودکار پوشش شاخه هایی را که دارای $stop هستند غیرفعال می کند
فرض بر این است که شاخه های $stop حاوی یک بررسی خطا هستند که نباید رخ دهد. A /* verilator
coverage_block_off*/ comment عملکرد مشابهی را روی هر کدی در آن بلوک انجام می دهد
یا در زیر، یا /*verilator coverage_on/coverage_off*/ پوشش اطراف خطوط را غیرفعال می کند
از کد
توجه داشته باشید که Verilator ممکن است بلوک های ترکیبی (غیر کلاک) را در هنگام آن بلوک ها بیش از حد شمارش کند
دریافت سیگنال هایی که هشدار UNOPTFLAT را غیرفعال کرده است. برای دقیق ترین
نتایج این هشدار را هنگام استفاده از پوشش غیرفعال نمی کند.
-پوشش-تغییر
مشخص می کند کد تجزیه و تحلیل پوشش ضامن سیگنال باید درج شود.
هر بیت از هر سیگنال در یک ماژول یک شمارنده درج شده است. شمارنده خواهد شد
افزایش در هر تغییر لبه بیت مربوطه.
سیگنال هایی که بخشی از وظایف یا بلوک های شروع/پایان هستند، متغیرهای محلی در نظر گرفته می شوند و
تحت پوشش قرار نمی گیرند. سیگنال هایی که با زیرخط شروع می شوند، اعداد صحیح هستند یا بسیار گسترده هستند
(بیش از 256 بیت کل فضای ذخیره سازی در تمام ابعاد) نیز پوشش داده نمی شود.
سلسله مراتب فشرده شده است، به طوری که اگر یک ماژول چندین بار نمونه سازی شود،
پوشش برای آن بیت در تمام نمونه های آن ماژول با خلاصه می شود
مجموعه پارامترهای مشابه یک ماژول نمونه سازی شده با مقادیر پارامترهای مختلف است
یک ماژول متفاوت در نظر گرفته می شود و به طور جداگانه شمارش می شود.
Verilator تصمیمی با حداقل هوشمندی در مورد دامنه ساعت سیگنال می گیرد
می رود و فقط لبه ها را در آن دامنه ساعت جستجو می کند. این بدان معنی است که لبه ها ممکن است باشند
نادیده گرفته می شود اگر مشخص شود که لبه هرگز توسط منطق دریافت کننده دیده نمی شود. این
الگوریتم ممکن است در آینده بهبود یابد. نتیجه خالص این است که پوشش ممکن است کمتر از
آنچه با نگاه کردن به ردپاها دیده می شود، اما پوشش دقیق تر است
نمایش کیفیت محرک در طراحی
ممکن است در زمانی که مدل تثبیت می شود، لبه هایی نزدیک به زمان صفر شمارش شوند. خوب است
تمرین کنید تا تمام پوششها را درست قبل از آزاد کردن ریست صفر کنید تا از شمارش آن جلوگیری کنید
رفتار.
یک جفت نظر /*verilator coverage_off/on */ میتواند در اطراف سیگنالهایی استفاده شود که این کار را نمیکنند
نیاز به تغییر تجزیه و تحلیل، مانند رم و فایل های ثبت نام.
--پوشش-خط خط
پوشش سیگنال هایی که با خط زیر شروع می شوند را فعال کنید. به طور معمول، این سیگنال ها هستند
پوشش داده نشده. همچنین به --trace-Underscore مراجعه کنید.
--پوشش-کاربر
پوشش عملکردی درج شده توسط کاربر را فعال می کند. در حال حاضر، تمام نقاط پوشش عملکردی
با استفاده از SVA مشخص می شوند که باید به طور جداگانه با --assert فعال شود.
به عنوان مثال، عبارت زیر یک نقطه پوشش همراه با نظر اضافه می کند
"ساعت پیش فرض":
DefaultClock: ویژگی پوشش (@(posedge clk) cyc==3);
-DVAR=ارزش
نماد پیش پردازنده داده شده را بدون اجازه تعریف می کند. مشابه +define; +تعریف
در ابزارهای Verilog نسبتاً استاندارد است در حالی که -D نام مستعار سازگاری GCC است.
- رفع اشکال
تصویر ساخته شده با اشکال زدایی Verilator (در صورت موجود بودن) را انتخاب کنید و بیشتر داخلی را فعال کنید
اظهارات (معادل "--debug-check")، اشکال زدایی پیام ها (معادل با
«--debugi 4»)، و فایلهای dump فرم میانی (معادل «--dump-treei 3»).
-بررسی اشکال زدایی
به ندرت مورد نیاز است. بررسی های ادعای اشکال زدایی داخلی را بدون تغییر اشکال زدایی فعال کنید
پرحرفی هنگامی که --debug مشخص شد به طور خودکار فعال می شود.
--debugi
--debugi-
به ندرت مورد نیاز - برای استفاده توسعه دهندگان. سطح اشکال زدایی داخلی را به صورت سراسری بر روی تنظیم کنید
سطح اشکال زدایی را مشخص کنید (1-10) یا فایل منبع Verilator مشخص شده را روی تنظیم کنید
سطح مشخص شده (به عنوان مثال "--debugi-V3Width 9"). سطوح بالاتر جزئیات بیشتری را تولید می کند
پیام ها.
--زبان پیش فرض ارزش
زبانی را انتخاب کنید که بهطور پیشفرض در اولین پردازش هر فایل Verilog استفاده شود.
مقدار زبان باید "1364-1995"، "1364-2001"، "1364-2005"، "1800-2005"،
"1800-2009" یا "1800-2012".
هر زبان مرتبط با پسوند فایل خاص (به + های مختلف مراجعه کنیدارسال به دوستext+
گزینه ها) در اولویت زبانی که توسط --default-language مشخص شده است استفاده خواهد شد.
پرچم --default-language فقط برای کدهای قدیمی با استفاده از همان توصیه می شود
زبان در تمام فایل های منبع، به عنوان گزینه ترجیحی ویرایش کد برای تعمیر است
کلمات کلیدی جدید، یا "`begin_keywords" مناسب را اضافه کنید. برای طرحهای ترکیبی با زبان قدیمی،
+ های مختلفارسال به دوستباید از گزینه های ext+ استفاده شود.
اگر هیچ زبانی مشخص نشده باشد، با این پرچم یا +ارسال به دوستگزینه های ext+، سپس آخرین
از زبان SystemVerilog (IEEE 1800-2012) استفاده شده است.
+ تعریف +VAR=ارزش
+ تعریف +VAR=ارزش+var2=value2...
نماد پیش پردازنده داده شده یا نمادهای متعدد را اگر با علامت های مثبت از هم جدا شوند، تعریف می کند.
مشابه -D؛ +define در ابزارهای Verilog نسبتاً استاندارد است در حالی که -D یک نام مستعار است
برای سازگاری GCC
---درخت
به ندرت مورد نیاز است. نوشتن فایلهای اشکالزدایی .tree با dumping سطح 3 را فعال کنید، که حذف میشود
مراحل بحرانی استاندارد برای جزئیات بیشتر در مورد قالب به Verilator Internals مراجعه کنید
کتابچه راهنمای. --dump-tree به طور خودکار با --debug فعال می شود، بنابراین "--debug
--no-dump-tree" ممکن است مفید باشد اگر فایل های dump بزرگ باشند و مورد نظر نباشند.
--dump-treei
--dump-treei-
به ندرت مورد نیاز - برای استفاده توسعه دهندگان. سطح تخلیه درخت داخلی را در سطح جهانی روی a تنظیم کنید
سطح دامپینگ خاص یا فایل منبع Verilator مشخص شده را روی مشخص شده تنظیم کنید
سطح تخلیه درخت (به عنوان مثال "--dump-treei-V3Order 9"). سطح 0 dumps را غیرفعال می کند و است
معادل "--no-dump-tree". سطح 9 امکان تخلیه هر مرحله را فراهم می کند.
-E کد منبع را از قبل پردازش کنید، اما مانند 'gcc -E' کامپایل نکنید. خروجی نوشته شده است
به استاندارد. مراقب فعال کردن پیامهای اشکالزدایی باشید، زیرا پیامها نیز به آن خواهند رفت
استاندارد خارج شده است.
-- error-limit
پس از اینکه این تعداد خطا یا اخطار مواجه شد، خارج شوید. پیش فرض 50 است.
--exe
یک فایل اجرایی تولید کنید. همچنین باید فایلهای cpp. دیگری را روی آن ارسال کنید
خط فرمان که حلقه اصلی را برای شبیه سازی شما پیاده سازی می کند.
-F پرونده
فایل مشخص شده را بخوانید و طوری عمل کنید که انگار تمام متن داخل آن به عنوان دستور مشخص شده است
پارامترهای خط هر مسیر نسبی نسبت به دایرکتوری حاوی
فایل مشخص شده همچنین به -f مراجعه کنید. Note -F در ابزارهای Verilog نسبتاً استاندارد است.
-f پرونده
فایل مشخص شده را بخوانید و طوری عمل کنید که انگار تمام متن داخل آن به عنوان دستور مشخص شده است
پارامترهای خط هر مسیر نسبی نسبت به دایرکتوری فعلی است. همچنین ببینید
-اف. Note-f در ابزارهای Verilog نسبتاً استاندارد است.
فایل ممکن است حاوی // نظراتی باشد که تا آخر خط نادیده گرفته می شوند. هر $VAR،
$(VAR)، یا ${VAR} با متغیر محیطی مشخص شده جایگزین میشود.
--gdb
Verilator را در زیر یک GDB تعاملی (یا متغیر محیطی VERILATOR_GDB) اجرا کنید
مقدار) جلسه. به --gdbbt نیز مراجعه کنید.
--gdbbt
اگر --debug مشخص شده است، Verilator را در زیر یک فرآیند GDB اجرا کنید و یک بکتریس چاپ کنید.
در هنگام خروج، سپس بلافاصله از GDB خارج شوید. بدون --debug یا اگر GDB به نظر کار نمی کند،
این پرچم نادیده گرفته شده است در نظر گرفته شده برای ایجاد آسان بک ترک توسط کاربران. در غیر این صورت
پرچم --gdb را ببینید.
--کمک
این پیام و نسخه برنامه را نمایش می دهد و خارج می شود.
-Iدیر
می بینمت.
--اگر-عمق ارزش
به ندرت مورد نیاز است. عمقی را که اخطار IFDEPTH در آن اجرا می شود را روی 0 تنظیم کنید
که این هشدار را غیرفعال می کند.
+incdir+دیر
می بینمت.
--inhibit-sim
به ندرت مورد نیاز است. برای فعال و غیرفعال کردن ارزیابی، یک تابع "inhibitSim(bool)" ایجاد کنید.
این اجازه می دهد تا یک تست سطح بالاتر ماژول هایی را که در a مهم نیستند غیرفعال کند
شبیه سازی داده شده، بدون نیاز به کامپایل مجدد یا تغییر ماژول های SystemC
نمونه شد.
--inline-mult ارزش
خط داخلی ماژول ها را تنظیم کنید. مقدار پیش فرض 2000 مشخص می کند که تا 2000 new
اگر بیشتر از این تعداد باشد، ممکن است عملیات با خطبندی به مدل اضافه شود
عملیات منجر می شود، ماژول خطی نیست. مقادیر بزرگتر یا مقدار <= 1
همه چیز را درون خطی می کند، منجر به زمان کامپایل طولانی تر، اما به طور بالقوه سریعتر می شود
زمان اجرا این تنظیم برای ماژول های بسیار کوچک نادیده گرفته می شود. آنها همیشه خواهند بود
خطی، در صورت مجاز.
-LDFLAGS پرچم ها
پرچم های پیوند دهنده C مشخص شده را به فایل های ایجاد شده اضافه کنید. هنگامی که make بر روی اجرا می شود
فایل make-فایل تولید شده به پیوند C++ (ld) *پس از* اولیه ارسال می شود
فایل در حال لینک شدن این پرچم -LDFLAGS نامیده می شود زیرا نام سنتی آن است
شبیه سازها بهتر است LDLIBS نامیده شود زیرا متغیر Makefile است
آن را کنترل می کند. (در Make، LDFLAGS قبل از اولین شی، LDLIBS بعد از آن است. -L
کتابخانه ها باید در متغیر Make LDLIBS باشند، نه LDFLAGS.)
--زبان ارزش
مترادف "--default-langauge"، برای سازگاری با ابزارهای دیگر و قبل از آن
نسخه های Verilator
+libext+EXT+EXT...
پسوندهایی را که باید برای یافتن ماژول ها استفاده شوند را مشخص کنید. اگر به عنوان مثال ماژول
x ارجاع داده شده است، نگاه کنید x.EXT. Note +libext+ در Verilog نسبتاً استاندارد است
ابزار. پیشفرضهای v. و .sv.
--فقط پرز
فایل ها را فقط برای نقض لینت بررسی کنید، هیچ خروجی دیگری ایجاد نکنید.
همچنین ممکن است بخواهید که گزینه -Wall پیام هایی را که سبک تلقی می شوند فعال کند
و به طور پیش فرض فعال نیست.
اگر قرار نیست طرح کاملا تأیید شود، به --bbox-sys و نیز مراجعه کنید
گزینه های --bbox-unsup.
--MMD
فعال کردن ایجاد فایلهای وابستگی .d که برای تشخیص وابستگی استفاده میشود، مشابه
گزینه gcc -MMD. به طور پیش فرض روشن، از --no-MMD برای غیرفعال کردن استفاده کنید.
-- نماینده مجلس
هنگام ایجاد فایل های وابستگی .d با --MMD، اهداف ساختگی ایجاد کنید. مشابه gcc -MP
گزینه.
-- Mdir فهرست راهنما
نام دایرکتوری Make object را مشخص می کند. تمامی فایل های تولید شده قرار خواهند گرفت
در این دایرکتوری اگر مشخص نشده باشد، "obj_dir" استفاده می شود. دایرکتوری ایجاد می شود اگر
وجود ندارد و دایرکتوری های والد وجود دارد. در غیر این صورت به صورت دستی Mdir را ایجاد کنید
قبل از تماس با Verilator
- پیشوند mod نام برتر
نامی را مشخص میکند تا به تمام کلاسهای سطح پایینتر اضافه شود. به طور پیش فرض به همان است
-- پیشوند.
--بدون کلیک
از علامت گذاری سیگنال مشخص شده به عنوان ساعت جلوگیری کنید. به "--clk" مراجعه کنید.
--بدون پین64
نام مستعار سازگار با عقب برای "--pins-bv 33".
--بدون پرش-یکسان
به ندرت مورد نیاز است. اگر همه فایلهای منبع هستند، اجرای Verilator را غیرفعال میکند
یکسان است و همه فایل های خروجی با تاریخ های جدیدتر وجود دارند.
+notimingchecks
برای سازگاری با سایر شبیه سازها نادیده گرفته شده است.
-O0 بهینه سازی مدل را غیرفعال می کند.
-O3 بهینه سازی های آهسته را برای کدهایی که خود Verilator تولید می کند فعال می کند (بر خلاف
"-CFLAGS -O3" که بر بهینه سازی کامپایلر C تأثیر می گذارد. -O3 ممکن است شبیه سازی را کاهش دهد
زمان اجرا با هزینه زمان کامپایل. این در حال حاضر --inline-mult -1 را تنظیم می کند.
-Oنامه بهینه سازی
به ندرت مورد نیاز است. با بهینه سازی یک بهینه سازی خاص را فعال یا غیرفعال می کند
بر اساس نامه ارسال شده انتخاب شده است. یک حرف کوچک یک بهینه سازی را غیرفعال می کند
حروف بزرگ آن را فعال می کند. این فقط برای استفاده از اشکال زدایی در نظر گرفته شده است. منبع را ببینید
کد برای نگاشت های وابسته به نسخه از بهینه سازی ها به حروف O.
-o
در صورت استفاده از --exe نام فایل اجرایی نهایی ساخته شده را مشخص کنید. به طور پیش فرض به
-- پیشوند اگر مشخص نشده باشد.
--بدون سفارش-ساعت-تأخیر
به ندرت مورد نیاز است. رفع اشکال را برای مرتب کردن ساعت با تأخیر فعال می کند
تکالیف این پرچم فقط زمانی باید استفاده شود که توسط توسعه دهندگان پیشنهاد شده باشد.
--خروجی-تقسیم بایت
تقسیم فایل های cpp/.sp خروجی را به چند خروجی فعال می کند. هنگامی که یک فایل ++C
از تعداد عملیات مشخص شده بیشتر باشد، در مرحله بعد یک فایل جدید ایجاد خواهد شد
مرز تابع علاوه بر این، هر روال کندی در فایل های __Slow قرار می گیرد.
این امر کامپایل را تسریع میکند زیرا بهینهسازی را میتوان در روالهای آهسته غیرفعال کرد.
و فایل های باقی مانده را می توان در ماشین های موازی کامپایل کرد. با استفاده از --output-split
باید تنها تأثیر ناچیزی بر عملکرد داشته باشد. با GCC 3.3 در یک Opteron 2GHz،
--output-split 20000 منجر به تقسیم به کامپایل تقریباً یک دقیقه ای می شود
تکه ها
--output-split-cfuncs اظهارات
تقسیم توابع در فایل های cpp/.sp خروجی را به چندین عملکرد فعال می کند.
هنگامی که یک تابع تولید شده از تعداد عملیات مشخص شده بیشتر شود، یک تابع جدید
ایجاد خواهد شد. با --output-split، این GCC را قادر میسازد تا سریعتر کامپایل شود
از دست دادن کوچک در عملکرد که با کاهش مقادیر تقسیم بدتر می شود. توجه داشته باشید که
این گزینه قوی تر از --output-split است به این معنا که --output-split نخواهد بود
تقسیم در داخل یک تابع
--output-split-ctrace اظهارات
تقسیم توابع ردیابی در خروجی فایل های cpp/.sp به چندگانه را فعال می کند
کارکرد. به طور پیش فرض به همان تنظیمات --output-split-cfuncs است.
-P با -E، تولید نشانگرهای خط و خطوط خالی، مشابه پرچم GCC -P را غیرفعال کنید.
--pins64
نام مستعار سازگار با عقب برای "--pins-bv 65". توجه داشته باشید که 65 است نه 64.
--pins-bv عرض
ورودی/خروجی های SystemC بزرگتر یا مساوی را مشخص می کند عرض بیت گسترده باید
به جای uint32/vluint64_t از sc_bv's استفاده کنید. پیش فرض "--pins-bv 65" است. نسخه ها
قبل از اینکه Verilator 3.671 روی "--pins-bv 33" پیشفرض شود. هر چه sc_bv بیشتر استفاده شود، بدتر است
برای عملکرد از ویژگی "/*verilator sc_bv*/" برای انتخاب پورت های خاص استفاده کنید
sc_bv باشد.
--pins-sc-uint
ورودی/خروجی های SystemC با عرض بیشتر از 2 بیت را مشخص می کند که باید از sc_uint استفاده کنند.
بین 2 و 64. وقتی با ترکیب "--pins-sc-biguint" ترکیب شود، نتیجه می شود
در sc_uint بین 2 و 64 و sc_biguint بین 65 و 512 استفاده می شود.
--pins-sc-biguint
مشخص می کند که ورودی/خروجی های SystemC با عرض بیشتر از 65 بیت باید از sc_biguint استفاده کنند.
بین 65 و 512 و sc_bv از 513 به بالا. هنگامی که با
ترکیب "--pins-sc-uint"، باعث می شود sc_uint بین 2 و 64 استفاده شود و
sc_biguint بین 65 و 512 استفاده می شود.
--pins-uint8
ورودی/خروجی های SystemC را مشخص می کند که کوچکتر از تنظیمات --pins-bv و 8 هستند.
بیت ها یا کمتر باید از uint8_t به جای uint32_t استفاده کنند. به همین ترتیب پین هایی با عرض 9-16 خواهد بود
به جای uint16_t از uint32_t استفاده کنید.
---لوله-فیلتر فرمان
به ندرت مورد نیاز و تجربی. Verilator دستور مشخص شده را به صورت a ایجاد می کند
لوله فرعی، به فرمان اجازه می دهد تا ویرایش های سفارشی را روی کد Verilog انجام دهد
قبل از اینکه به Verilator برسد.
قبل از خواندن هر فایل Verilog، Verilator نام فایل را به فرآیند فرعی ارسال می کند.
stdin با "read_verilog" فیلتر ممکن است فایل را بخواند و اجرا کند
هر فیلتری که بخواهد، و محتوای فایل جدید را به Verilator در stdout باز می گرداند
با "طول محتوا". خروجی stderr از فیلتر به Verilator's تغذیه می شود
stdout و اگر فیلتر با وضعیت غیر صفر خارج شود Verilator خاتمه می یابد. را ببینید
آزمایش t/t_pipe_filter برای مثال.
برای اشکال زدایی خروجی فیلتر، از گزینه -E استفاده کنید تا خروجی از پیش پردازش شده را ببینید.
-- پیشوند نام برتر
نام کلاس و makefile سطح بالا را مشخص می کند. پیشفرضهای V پیشفرض شدهاند
نام سوئیچ --top-module یا V که به اولین نام فایل Verilog اضافه شده است
در خط فرمان منتقل می شود.
--profile-cfuncs
توابع C++ ایجاد شده را برای پشتیبانی از نمایه سازی تغییر دهید. توابع خواهد بود
حداقل شده تا حاوی یک عبارت "پایه" باشد، به طور کلی یک بلوک همیشه یا سیم واحد
بیانیه. (توجه داشته باشید که این امر باعث کاهش سرعت فایل اجرایی تا 5٪ می شود) علاوه بر این،
نام تابع با نام پایه ماژول Verilog و شماره خط پسوند خواهد بود
این بیانیه از این به گزارشهای gprof یا oprofile اجازه میدهد تا با آنها مرتبط شوند
بیانیه های منبع اصلی Verilog.
--خصوصی
در مقابل -- عمومی. پیش فرض است. این گزینه برای سازگاری با عقب وجود دارد.
--عمومی
این فقط برای استفاده از اشکال زدایی تاریخی است. استفاده از آن ممکن است منجر به شبیه سازی اشتباه شود
ساعت های تولید شده
همه سیگنال ها و ماژول ها را عمومی اعلام می کند. این بهینه سازی سیگنال را خاموش می کند
اگر همه سیگنال ها دارای یک /*verilator public*/ نظرات و درون خطی باشند. این نیز تبدیل خواهد شد
خارج از خط داخلی به گونه ای که گویی همه ماژول ها دارای /*verilator public_module*/ هستند، مگر اینکه ماژول
به طور خاص آن را با /*verilator inline_module* فعال کرد/.
--report-unoptflat
تشخیص اضافی برای هشدارهای UNOPTFLAT. این شامل برای هر حلقه، 10 گسترده ترین است
متغیرهای موجود در حلقه، و 10 متغیری که بیشترین فن را در حلقه دارند. اینها هستند
نامزدهای تقسیم به متغیرهای متعدد برای شکستن حلقه.
علاوه بر این یک فایل GraphViz DOT از کل اجزای متصل قوی تولید می کند
در منبع مرتبط با هر حلقه. این صرف نظر از اینکه آیا تولید می شود
-- dump-tree تنظیم شده است. چنین نمودارهایی ممکن است به تجزیه و تحلیل مشکل کمک کند، اما می تواند بسیار باشد
در واقع بزرگ
دستورات مختلفی برای مشاهده و دستکاری فایل های DOT وجود دارد. به عنوان مثال نقطه
دستور را می توان برای تبدیل یک فایل DOT به PDF برای چاپ استفاده کرد. مثلا:
dot -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot
یک PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf از فایل DOT تولید می کند.
--قابل نجات
شامل توابع ذخیره و بازیابی در مدل تولید شده را فعال کنید.
سپس کد کاربر باید یک شی VerilatedSerialize یا VerilatedDeserialze ایجاد کند
فراخوانی عملگرهای << یا >> در مدل تولید شده و هر داده دیگری در فرآیند
نیاز به ذخیره/بازیابی دارد. مثلا:
void save_model (const char* filenamep) {
VerilatedSave OS;
os.open (نام فایل);
os << main_time; // کد کاربر باید مهر زمانی و غیره را ذخیره کند
os << *topp;
}
void restore_model (const char* filenamep) {
VerilatedRestore OS;
os.open (نام فایل);
os >> main_time;
سیستم عامل >> *topp;
}
--sc
حالت خروجی SystemC را مشخص می کند. --cc را نیز ببینید.
--آمار
یک فایل dump با آمار طرح در {prefix}__stats.txt ایجاد می کند.
--stats-vars
آمار دقیق تری از جمله لیستی از همه متغیرها بر اساس اندازه ایجاد می کند (ساده
--stats فقط یک تعداد می دهد). مشاهده --stats، که با این دلالت دارد.
-sv مشخص می کند ویژگی های زبان SystemVerilog باید فعال باشد. معادل "--language
1800-2005". این گزینه به طور پیش فرض انتخاب شده است، برای سازگاری با آن وجود دارد
شبیه سازهای دیگر
+systemverilogext+EXT
مترادف برای "+1800-2012ext+"EXT.
-- بالا ماژول نام برتر
هنگامی که ورودی Verilog حاوی بیش از یک ماژول سطح بالا باشد، نام آن را مشخص می کند
ماژول Verilog سطح بالا به بالا تبدیل شود و پیشوند if را به صورت پیش فرض تنظیم می کند
استفاده نمی شود. این مورد در طرح های استاندارد با تنها یک تاپ مورد نیاز نیست.
--پی گیری
کد ردیابی شکل موج را به مدل اضافه می کند. Verilator اضافی تولید خواهد کرد
فایلهای {prefix}__Trace*.cpp که باید کامپایل شوند. علاوه بر این
verilated_vcd_sc.cpp (برای ردیابی SystemC) یا verilated_vcd_c.cpp (برای هر دو) باید
کامپایل و پیوند داده شده است. اگر از Makefiles تولید شده Verilator استفاده کنید، اینها خواهند بود
به عنوان اهداف منبع برای شما اضافه شده است. اگر از فایلهای ساخت Verilator استفاده نمیکنید، شما
باید اینها را به صورت دستی به Makefile خود اضافه کنید.
ردیابی کامپایل شده ممکن است منجر به کاهش عملکرد کوچک شود، حتی زمانی که
شکل موج در طول اجرای مدل روشن نمی شود.
-- ردیابی عمق سطح
تعداد سطوح عمیق را برای فعال کردن ردیابی مشخص کنید، به عنوان مثال --trace-level 1 to
فقط سیگنال های سطح بالا را ببینید. پیش فرض برای کل مدل با استفاده از یک عدد کوچک
دید را کاهش می دهد، اما زمان اجرا و اندازه فایل را تا حد زیادی بهبود می بخشد.
--trace-max-array عمق
به ندرت مورد نیاز است. حداکثر عمق آرایه سیگنالی که ممکن است ردیابی شود را مشخص کنید.
پیشفرض 32 است، زیرا ردیابی آرایههای بزرگ ممکن است شبیهسازیهای ردیابیشده را بسیار کند کند.
-- ردیابی - حداکثر - عرض عرض
به ندرت مورد نیاز است. حداکثر عرض بیت سیگنالی که ممکن است ردیابی شود را مشخص کنید.
پیشفرض 256 است، زیرا ردیابی بردارهای بزرگ ممکن است شبیهسازیهای ردیابیشده را بسیار کند کند.
--no-trace-params
ردیابی پارامترها را غیرفعال کنید.
-- Trace-structs
ردیابی را برای نمایش نام ساختارهای بسته بندی شده، اتحادیه و فیلدهای آرایه بسته بندی شده فعال کنید.
به جای یک اتوبوس ترکیبی ساده. با توجه به محدودیت های فرمت فایل VCD این ممکن است
منجر به زمان ردیابی بسیار کندتر و فایل های ردیابی بزرگتر می شود.
-- ردیابی - زیر خط
ردیابی سیگنال هایی که با خط زیر شروع می شوند را فعال کنید. به طور معمول، این سیگنال ها هستند
خروجی در طول ردیابی نیست. همچنین به --coverage-Underscore مراجعه کنید.
-UVAR
نماد پیش پردازنده داده شده را تعریف نمی کند.
-- unroll-count حلقه ها
به ندرت مورد نیاز است. حداکثر تعداد تکرارهای حلقه ای را که ممکن است باز شوند را مشخص می کند.
همچنین به هشدار BLKLOOPINIT مراجعه کنید.
-- unroll-stmts اظهارات
به ندرت مورد نیاز است. حداکثر تعداد عبارات را در یک حلقه برای آن حلقه مشخص می کند
باز شود. همچنین به هشدار BLKLOOPINIT مراجعه کنید.
--unused-regexp regexp
به ندرت مورد نیاز است. یک regexp ساده با * و ? که اگر نام یک سیگنال مطابقت داشته باشد
هشدار استفاده نشده را سرکوب خواهد کرد. پیشفرض «*unused*» است. تنظیم آن بر روی "" غیرفعال می شود
تطابق.
-V نسخه کامل، از جمله اطلاعات پیکربندی کامپایل شده را نشان می دهد
ویلاتور. (شبیه به perl -V.)
-v نام فایل
نام فایل را به عنوان کتابخانه Verilog بخوانید. ممکن است از هر ماژول موجود در فایل استفاده شود
حل نمونه های سلولی در ماژول سطح بالا، در غیر این صورت نادیده گرفته می شود. توجه داشته باشید -v نسبتا است
استاندارد در ابزارهای Verilog
+verilog1995ext+EXT
+verilog2001ext+EXT
مترادف کلمه "+1364-1995ext+"EXT و "+1364-2001ext+"EXT به ترتیب
-دیو
همه هشدارها را فعال کنید، از جمله هشدارهای سبک کد که معمولاً توسط آنها غیرفعال می شوند
به طور پیش فرض
-خطا-پیام
پیام هشدار مشخص شده را به پیام خطا تبدیل کنید. این به طور کلی به
برای مثال، کاربران را از نقض قوانین مهم در سراسر سایت منصرف کنید
"-خطا-NOUNOPTFLAT".
-آینده-پیام
به ندرت مورد نیاز است. نظرات یا پیام های هشدار دهنده ناشناخته Verilator را با داده شده سرکوب کنید
کد پیام این برای اجازه دادن به کد نوشته شده با پراگما برای نسخه بعدی استفاده می شود
Verilator برای اجرا در نسخه قدیمی تر. آرگومان های -Wfuture- را برای هر کد پیام اضافه کنید
یا نظر دهید که نسخه جدید پشتیبانی می کند که نسخه قدیمی آن را پشتیبانی نمی کند.
-نه-پیام
پیام هشدار مشخص شده را غیرفعال کنید. این دستورات lint_on را لغو می کند
منبع، یعنی اخطار هنوز چاپ نمی شود.
-بدون پرز
همه پیامهای هشدار مرتبط با پرز و همه هشدارهای سبک را غیرفعال کنید. این معادل است
به "-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-Uused -Wno-WIDTH"
به علاوه لیست نشان داده شده برای Wno-style.
اکیداً توصیه می شود به جای استفاده از این گزینه کد خود را پاکسازی کنید
فقط در نظر گرفته شده است که هنگام اجرای موارد آزمایشی کدهای دریافتی از اشخاص ثالث استفاده شود.
-سبک Wno
همه پیام های هشدار مربوط به سبک کد را غیرفعال کنید (به طور پیش فرض توجه داشته باشید که قبلاً هستند
معلول). این معادل "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH است
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-Used
-Wno-VARHIDDEN".
-نه-کشنده
هنگامی که هشدارها شناسایی شدند، آنها را چاپ کنید، اما از شبیه ساز خارج نشوید.
داشتن پیام های هشدار در بیلدها بی نظم است. اکیداً توصیه می شود پاکسازی کنید
کد خود را، به جای استفاده از این گزینه، از lint_off درون خطی استفاده کنید، یا از پرچم های -Wno-... استفاده کنید.
-اخطار-پیام
پیام هشدار مشخص شده را فعال می کند.
-Wwarn-lint
تمام پیامهای هشدار مرتبط با پرز را فعال کنید (توجه داشته باشید که به طور پیشفرض قبلاً فعال شدهاند)،
اما روی پیامهای سبک تأثیری نمیگذارد. این معادل "-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
همه پیام های هشدار مربوط به سبک کد را فعال کنید. این معادل "-Wwarn است
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN".
--x-تخصیص 0
--x-تخصیص 1
--x-تخصیص سریع (پیش فرض)
--x-تخصیص منحصر به فرد
مقدار دو حالته ای را که هنگام مواجه شدن با انتساب به X جایگزین می شود، کنترل می کند.
--x-assign=fast، به طور پیش فرض، تمام X ها را به هر چیزی که برای عملکرد بهتر است تبدیل می کند.
--x-assign=0 همه X ها را به 0 تبدیل می کند و همچنین سریع است. --x-assign=1 همه X ها را به
1s، این تقریباً به سرعت 0 است، اما احتمال بیشتری وجود دارد که اشکالات بازنشانی را به همان اندازه فعال پیدا کند
منطق شلیک خواهد کرد. --x-assign=unique یک تابع را برای تعیین مقدار فراخوانی می کند
اجازه می دهد تا همه X ها تصادفی شوند تا باگ های بازنشانی را بیابند و کندترین، اما ایمن ترین است
پیدا کردن اشکالات بازنشانی در کد
اگر از --x-assign منحصر به فرد استفاده می کنید، ممکن است بخواهید مولد اعداد تصادفی خود را بکار ببرید
که هر اجرای رگرسیون یک توالی تصادفی متفاوت را دریافت می کند. از سیستم استفاده کنید
srand48() یا برای ویندوز srand() برای انجام این کار. احتمالا شما هم می خواهید
هر دانه انتخاب شده را چاپ کنید، و کدی را برای فعال کردن اجرای مجدد با همان دانه در نظر بگیرید تا بتوانید
تولید مثل اشکالات
توجه داشته باشید. این گزینه فقط برای متغیرهایی اعمال می شود که به صراحت به X در قسمت اختصاص داده شده اند
کد منبع Verilog. مقادیر اولیه ساعت ها روی 0 تنظیم می شود مگر اینکه --x-initial-edge باشد
مشخص شده. مقادیر اولیه همه متغیرهای نگهدارنده حالت دیگر به شکلی تنظیم می شوند
--x-assign منحصر به فرد مشخص شده بود.
--x-initial-edge
شبیهسازی شبیهسازهای رویداد محور را فعال میکند که عموماً یک یال را در a راهاندازی میکنند
انتقال از X به 1 ("posge") یا X به 0 ("negedge"). بنابراین کد زیر،
در جایی که "rst_n" بدون مقدار اولیه است، "res_n" را روی "1'b1" تنظیم می کند که "rst_n" برای اولین بار تنظیم شود.
به صفر:
reg res_n = 1'b0;
همیشه @(negedge rst_n) شروع می شود
اگر (rst_n == 1'b0) شروع شود
res_n <= 1'b1;
پایان
پایان
در Verilator به طور پیشفرض به ساعتهای بدون مقدار اولیه مقدار صفر داده میشود، بنابراین موارد بالا
بلوک "همیشه" فعال نمی شود.
در حالی که این تمرین خوب نیست، برخی از طرحها وجود دارند که بر XX 0 تکیه دارند و باعث ایجاد a میشوند
"negedge"، به ویژه در سکانس های تنظیم مجدد. استفاده از --x-initial-edge با Verilator will
این رفتار را تکرار کنید همچنین اطمینان حاصل می کند که XX 1 یک "posge" را راه اندازی می کند.
توجه داشته باشید. برخی از کاربران گزارش داده اند که استفاده از این گزینه می تواند بر همگرایی تأثیر بگذارد و این
ممکن است استفاده از --converge-limit برای افزایش تعداد همگرایی ضروری باشد
تکرارها این ممکن است نشانه دیگری از مشکلات طراحی مدل شده باشد
باید خطاب.
-y دیر
دایرکتوری را به فهرست دایرکتوری هایی که باید جستجو شوند شامل فایل ها اضافه کنید
یا کتابخانه ها سه پرچم -y، +incdir و -I اثر مشابهی دارند. +incdir و +y
در ابزارهای Verilog نسبتاً استاندارد هستند در حالی که -I نام مستعار سازگاری GCC است.
البته Verilator دایرکتوری فعلی ("-y .") و هر --Mdir مشخص شده را پیشفرض میکند
این مسیرهای پیش فرض پس از هر دایرکتوری مشخص شده توسط کاربر استفاده می شود. این اجازه می دهد تا '-y
"$(pwd)" برای استفاده در صورتی که نام فایل مطلق برای پیام های خطا به جای نام مورد نظر باشد
نام فایل های نسبی
مثال ++C اعدام
ما این مثال را در C++ کامپایل می کنیم.
mkdir test_our
cd test_our
گربه < our.v
ماژول ما
fillestar $display("Hello World"); $پایان; پایان
ماژول نهایی
EOF
گربه < sim_main.cpp
#شامل "Vour.h"
#include "verilated.h"
int main(int argc، char **argv، char **env) {
Verilated::commandArgs(argc, argv);
Vour* top = وور جدید;
while (!Verilated::gotFinish()) { top->eval(); }
حذف بالا؛
خروج(0)؛
}
EOF
اگر Verilator را از منابع یا یک tarball نصب کرده اید، اما نه به عنوان بخشی از عملیات خود
سیستم (به عنوان یک RPM)، ابتدا باید به کیت اشاره کنید:
صادرات VERILATOR_ROOT=/path/to/where/verilator/ was/installed
صادرات PATH=$VERILATOR_ROOT/bin:$PATH
اکنون Verilator را روی مثال کوچک خود اجرا می کنیم.
verilator -Wall --cc our.v --exe sim_main.cpp
ما می توانیم کد منبع را در پوشه "obj_dir" ببینیم. بخش FILES را در زیر ببینید
توضیحات برخی از فایل های ایجاد شده
ls -l obj_dir
سپس می توانیم آن را کامپایل کنیم
سی دی obj_dir
make -j -f Vour.mk وور
(Verilator شامل یک قانون کامپایل پیشفرض و قانون پیوند است، زیرا ما از --exe استفاده کردیم و a را پاس کردیم
فایل cpp. در خط فرمان Verilator. شما همچنین می توانید قوانین کامپایل خود را بنویسید
ما در بخش SYSTEMC نشان خواهیم داد.)
و اکنون آن را اجرا می کنیم
سی دی ...
obj_dir/Vour
و ما به عنوان خروجی دریافت می کنیم
سلام جهان
- our.v:2: Verilog $finish
در واقع، بهتر است یک Makefile بنویسید تا همه این کارها را برای شما انجام دهد. سپس، زمانی که شما
منبع تغییر می کند، تمام این مراحل به طور خودکار اجرا می شود. دایرکتوری test_c را ببینید
توزیع به عنوان مثال
مثال SYSTEMC اعدام
این یک مثال مشابه با بالا است، اما با استفاده از SystemC.
mkdir test_our_sc
سی دی test_our_sc
گربه < our.v
ماژول ما (کلک)؛
clk ورودی؛ // ساعت برای فعال سازی اولیه لازم است
همیشه @ (posge clk)
start $display("Hello World"); $پایان; پایان
ماژول نهایی
EOF
گربه < sc_main.cpp
#شامل "Vour.h"
int sc_main(int argc، char **argv) {
Verilated::commandArgs(argc, argv);
sc_clock clk ("clk"، 10، 0.5، 3، true);
Vour* top;
top = new Vour("بالا"); // SP_CELL (بالا، Vour)؛
top->clk(clk); // SP_PIN (بالا، clk، clk)؛
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
حذف بالا؛
خروج(0)؛
}
EOF
اگر Verilator را از منابع یا یک tarball نصب کرده اید، اما نه به عنوان بخشی از عملیات خود
سیستم (به عنوان یک RPM)، ابتدا باید به کیت اشاره کنید:
صادرات VERILATOR_ROOT=/path/to/where/verilator/ was/installed
صادرات PATH=$VERILATOR_ROOT/bin:$PATH
اکنون Verilator را روی مثال کوچک خود اجرا می کنیم.
verilator -Wall --sc our.v
سپس می توانیم آن را کامپایل کنیم
make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o
و با SystemC پیوند دهید. توجه داشته باشید که مسیر شما به کتابخانه ها بسته به نوع ممکن است متفاوت باشد
سیستم عامل.
صادر کردن SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
صادر کردن LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
اگر SystemC 2.3.0 ممکن است مورد نیاز باشد
صادرات SYSTEMC_CXX_FLAGS=-pthread
g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verilated.o \
-o Vour -lsystemc
و اکنون آن را اجرا می کنیم
سی دی ...
obj_dir/Vour
و ما همان خروجی مثال C++ را دریافت می کنیم:
سلام جهان
- our.v:2: Verilog $finish
در واقع، بهتر است از Makefile استفاده کنید تا همه این کارها را برای شما انجام دهد. سپس، زمانی که منبع شما
تغییرات به طور خودکار تمام این مراحل را اجرا می کند. دایرکتوری test_sc را ببینید
توزیع برای مثال
محک زدن & بهينه سازي
برای بهترین عملکرد، Verilator را با پرچم های "-O3 --x-assign=fast --noassert" اجرا کنید. در
-پرچم O3 به زمان های کامپایل طولانی تری نیاز دارد و --x-assign=fast ممکن است خطر را افزایش دهد
بازنشانی اشکالات در تجارت برای عملکرد. اسناد بالا را برای این پرچم ها ببینید.
تغییرات جزئی کد Verilog نیز می تواند برنده های بزرگی باشد. شما نباید UNOPTFLAT داشته باشید
هشدارهای Verilator رفع این هشدارها می تواند منجر به پیشرفت های بزرگ شود. یک کاربر
یک هشدار UNOPTFLAT خود را با ایجاد یک تغییر ساده در قفل ساعتی که برای گیت استفاده می شد، رفع کرد
ساعت و 60 درصد بهبود عملکرد را به دست آورد.
فراتر از آن، عملکرد یک مدل Verilated بیشتر به کامپایلر و C++ شما بستگی دارد
اندازه کش های CPU شما
به طور پیش فرض، فایل lib/verilated.mk بهینه سازی خاموش است. این برای
به نفع کاربران جدید است، زیرا زمان های کامپایل را با هزینه زمان اجرا بهبود می بخشد. برای اضافه کردن
بهینه سازی به عنوان پیش فرض، یکی از سه متغیر OPT، OPT_FAST، یا OPT_SLOW را تنظیم کنید.
lib/verilated.mk. یا از گزینه -CFLAGS و/یا -LDFLAGS در دستور verilator استفاده کنید
خط برای ارسال پرچم ها به طور مستقیم به کامپایلر یا پیوند دهنده. یا فقط برای یک دویدن پاس کنید
آنها را در خط فرمان ایجاد کنید:
make OPT_FAST="-O2" -f Vour.mk Vour__ALL.a
OPT_FAST بهینهسازیهایی را برای برنامههایی که عمدتاً بخشی از مسیر سریع هستند، مشخص میکند
کدی که در هر چرخه اجرا می شود. OPT_SLOW بهینه سازی هایی را برای فایل های مسیر آهسته مشخص می کند
(بهعلاوه ردیابی)، که به ندرت اجرا میشوند، اما کامپایل آن زمان زیادی میبرد
بهینه سازی در OPT بهینه سازی کلی را مشخص می کند و بر همه کامپایل ها از جمله تأثیر می گذارد
آن OPT_FAST و OPT_SLOW تاثیر می گذارد. برای بهترین نتایج، از OPT="-O2" استفاده کنید و با آن پیوند دهید
"-استاتیک". تقریباً نتایج مشابهی را می توان با زمان های کامپایل بسیار بهتر داشت
OPT_FAST="-O1 -fstrict-aliasing". بهینه سازی بالاتر مانند "-O3" ممکن است کمک کند، اما gcc
زمان کامپایل ممکن است تحت O3 حتی در طرح های با اندازه متوسط بیش از حد باشد. متناوبا، برخی
طرح های بزرگتر با استفاده از "-Os" عملکرد بهتری را گزارش می دهند.
متأسفانه، استفاده از بهینه ساز با فایل های SystemC می تواند منجر به کامپایل شدن شود
چند دقیقه. (کتابخانه های SystemC دارای بسیاری از توابع خطی کوچک هستند که باعث می شوند
آجیل کامپایلر.)
برای بهترین نتایج، از GCC 3.3 یا جدیدتر استفاده کنید. GCC 3.2 و نسخه های قبلی دارای اشکالات بهینه سازی هستند
تشخیص همخوانی اشاره گر، که می تواند منجر به کاهش عملکرد 2 برابری شود.
اگر شبیهسازیهای زیادی را روی یک کامپایل اجرا میکنید، بازخورد را بررسی کنید
تلفیقی. با GCC، با استفاده از -fprofile-arcs، سپس -fbranch-probabilities به دست می آید.
15 درصد دیگر یا بیشتر
کامپایلرهای مدرن همچنین از بهینهسازی زمان پیوند (LTO) پشتیبانی میکنند، که میتواند به خصوص اگر کمک کند
شما در کد DPI پیوند می دهید. برای فعال کردن LTO در GCC، "-flto" را در کامپایل و پیوند ارسال کنید.
توجه داشته باشید LTO ممکن است باعث افزایش زمان کامپایل در طرح های بزرگ شود.
اگر از فایلهای ساخت خود استفاده میکنید، ممکن است بخواهید کد Verilated را با آن کامپایل کنید
-DVL_INLINE_OPT=در خط. این توابع درون خطی خواهد بود، با این حال این نیاز به تمام cpp دارد
فایل ها در یک کامپایلر واحد کامپایل شوند.
شما می توانید با پروفایل کد Verilog، امکانات تنظیم بیشتر را کشف کنید. استفاده کنید
-profile-cfuncs Verilator و سپس -g -pg GCC. سپس می توانید oprofile یا را اجرا کنید
gprof تا ببینید زمان در کجای کد C++ صرف شده است. خروجی gprof را اجرا کنید
verilator_profcfunc و به شما خواهد گفت که Verilog چه شماره خطوطی را در کدام قسمت دارد
زمان صرف می شود
پس از اتمام، لطفاً نتایج را به نویسنده اطلاع دهید. من دوست دارم در مورد چگونگی Verilator اطلاعاتی داشته باشم
مقایسه می کند و ممکن است بتواند بهبودهای بیشتری را پیشنهاد دهد.
با استفاده از خدمات onworks.net از verilator_bin به صورت آنلاین استفاده کنید