iverilog(1) Version 13.0 (stable) iverilog(1)

iverilog - کامپایلر و مترجم شبیه‌ساز زبان سخت‌افزاری Icarus Verilog

iverilog [-EiRSuVv] [-Bpath] [-ccmdfile|-fcmdfile] [-Dmacro[=defn]] [-Pparameter=value] [-pflag=value] [-dname] [-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012|-g<feature>] [-Iincludedir] [-Lmoduledir] [-mmodule] [-M[mode=]file] [-Nfile] [-ooutputfilename] [-stopmodule] [-ttype] [-Tmin/typ/max] [-Wclass] [-ypath] [-lfile] sourcefile

برنامه iverilog یک کامپایلر است که کدهای منبع Verilog را به برنامه‌های اجرایی برای شبیه‌سازی یا سایر قالب‌های نت‌لیست (netlist) برای پردازش‌های بعدی ترجمه می‌کند. هدف اصلی آن، تولید خروجی برای موتور شبیه‌ساز vvp است.

برنامه iverilog گزینه‌های زیر را می‌پذیرد:

برنامه iverilog برای پیش‌پردازش و کامپایل کد منبع Verilog از برنامه‌های خارجی و فایل‌های پیکربندی استفاده می‌کند. معمولاً مسیر مورد استفاده برای یافتن این ابزارها درون خود برنامه iverilog تعبیه شده است. با این حال، سوییچ -B به کاربر اجازه می‌دهد تا مجموعه‌ای متفاوت از برنامه‌ها را انتخاب کند. مسیر ارائه‌شده برای یافتن ivlpp، ivl، تولیدکننده‌های کد و ماژول‌های VPI استفاده می‌شود.
این فلگ‌ها یک فایل ورودی حاوی فهرستی از فایل‌های منبع Verilog را مشخص می‌کنند. این قابلیت مشابه command file در سایر شبیه‌سازهای Verilog است؛ به این صورت که به‌جای دریافت نام فایل‌ها در خط فرمان، آن‌ها را از درون یک فایل می‌خواند. بخش فایل‌های دستور (COMMAND FILES) را در ادامه ببینید.
ماکروی macro را با مقدار رشته‌ای «1» به عنوان تعریف آن ایجاد می‌کند. این حالت معمولاً فقط برای فعال‌سازی شرط‌های ifdef در کد منبع Verilog استفاده می‌شود.
ماکروی macro را با مقدار defn تعریف می‌کند.
یک پارامتر را در ماژول ریشه بازنویسی (defparam) می‌کند. این گزینه به کاربر اجازه می‌دهد تا در زمان کامپایل، مقدار یک پارامتر را در یک نمونه ماژول ریشه بازنویسی کند. برای مثال، -Pmain.foo=2 مقدار پارامتر foo را در نمونه ریشه main به ۲ تغییر می‌دهد و -Pmain.foos='"New string value"' مقدار پارامتر foos را در نمونه ریشه main با مقدار "New string value" بازنویسی خواهد کرد.
یک رده از پیام‌های اشکال‌زدایی کامپایلر را فعال می‌کند. سوییچ -d می‌تواند به تعداد دفعات لازم برای فعال‌سازی تمام پیام‌های مورد نظر تکرار شود. نام‌های پشتیبانی‌شده عبارتند از scopes، eval_tree، elaborate و synth2؛ سایر نام‌ها نادیده گرفته می‌شوند.
کد منبع Verilog را پیش‌پردازش می‌کند، اما آن را کامپایل نمی‌کند. فایل خروجی همان ورودی Verilog است که شمول فایل‌ها (inclusions) و ارجاعات ماکرو در آن بسط یافته و حذف شده‌اند. این گزینه برای مثال جهت پیش‌پردازش کد منبع Verilog برای استفاده در سایر کامپایلرها مفید است.
نسل یا نگارش استاندارد زبان Verilog (generation) را جهت پشتیبانی در کامپایلر انتخاب می‌کند. این گزینه بین IEEE1364-1995، IEEE1364-2001، IEEE1364-2005، IEEE1800-2005، IEEE1800-2009 یا IEEE1800-2012 یکی را انتخاب می‌کند. کامپایلر Icarus Verilog در حال حاضر به صورت پیش‌فرض از نسل IEEE1364-2005 این زبان استفاده می‌کند. این فلگ برای محدود کردن زبان به مجموعه‌ای از کلمات کلیدی و قابلیت‌های خاص به کار می‌رود؛ این کار امکان شبیه‌سازی کدهای قدیمی‌تر Verilog را که ممکن است از کلمات کلیدی جدیدتر استفاده کرده باشند فراهم کرده و سازگاری با سایر ابزارها را حفظ می‌کند. بخش زیادی از عملکردهای نسل‌های IEEE1800 در حال حاضر پشتیبانی نمی‌شود. نسل‌های IEEE1800 تمام کلمات کلیدی را تجزیه می‌کنند، بنابراین می‌توان از آن‌ها برای اطمینان از اینکه کد Verilog سازگار با IEEE1364 از هیچ‌یک از کلمات کلیدی جدید IEEE1800 استفاده نکرده است، بهره برد.
پشتیبانی از Verilog-AMS را فعال یا غیرفعال (پیش‌فرض) می‌کند. در حال حاضر عملکردهای بسیار محدودی از Verilog-AMS پشتیبانی می‌شود.
دستورات احراز صحت (assertions) در SystemVerilog را فعال (پیش‌فرض) یا غیرفعال می‌کند. در صورت فعال بودن، گزاره‌های assertion بسط داده می‌شوند. در صورت غیرفعال بودن، این گزاره‌ها تجزیه ولی نادیده گرفته می‌شوند. گزینه -gsupported-assertions فقط دستورات احرازی را فعال می‌کند که در حال حاضر توسط کامپایلر پشتیبانی می‌شوند.
پشتیبانی از بلوک specify را فعال یا غیرفعال (پیش‌فرض) می‌کند. در صورت فعال بودن، کدهای بلوک specify بسط داده می‌شوند. در صورت غیرفعال بودن، بلوک‌های specify تجزیه ولی نادیده گرفته می‌شوند. بلوک‌های specify معمولاً برای شبیه‌سازی RTL مورد نیاز نیستند و در واقع می‌توانند کارایی شبیه‌سازی را کاهش دهند. با این حال، غیرفعال کردن بلوک‌های specify دقت شبیه‌سازی‌های مبتنی بر زمان‌بندی کامل (full-timing) را کاهش می‌دهد.
پشتیبانی از اتصال داخلی SDF را فعال یا غیرفعال (پیش‌فرض) می‌کند. در صورت فعال بودن، بافرهای ورودی و خروجی به ماژول‌ها اضافه می‌شوند تا VVP بتواند تاخیرهای اتصالات داخلی را اعمال کند. این گزینه معمولاً برای شبیه‌سازی RTL مورد نیاز نیست و در عمل می‌تواند کارایی شبیه‌سازی را کاهش دهد. با این حال، غیرفعال کردن تاخیرهای اتصالات داخلی دقت شبیه‌سازی‌های زمان‌بندی کامل را کم می‌کند.
جستجو در دایرکتوری include استاندارد نصب‌شده را پس از بررسی سایر دایرکتوری‌های include صریح، فعال (پیش‌فرض) یا غیرفعال می‌کند. این دایرکتوری include استاندارد مکانی مناسب برای قرار دادن فایل‌های هدر استانداردی است که یک برنامه Verilog ممکن است ضمیمه کند.
افزودن دایرکتوری فایل محلی به ابتدای مسیر جستجوی فایل‌های include را فعال یا غیرفعال (پیش‌فرض) می‌کند. این ویژگی امکان ضمیمه کردن فایل‌ها را به صورت نسبی نسبت به فایل جاری فراهم می‌سازد، به جای حالت معمول‌تر که فایل‌ها فقط در دایرکتوری کاری یا در مسیر جستجوی مشخص‌شده یافت می‌شوند.
پشتیبانی از انواع داده توسعه‌یافته (extended types) را فعال (پیش‌فرض) یا غیرفعال می‌کند. فعال‌سازی انواع توسعه‌یافته امکان استفاده از انواع داده جدیدی را فراهم می‌سازد که توسط Icarus Verilog به عنوان افزونه‌های فراتر از Verilog پایه پشتیبانی می‌شوند. در صورت کامپایل کدهایی که با کلمات کلیدی جدید پیاده‌سازی این سیستم انواع تداخل دارند، ممکن است غیرفعال کردن این گزینه لازم باشد.
استانداردها ایجاب می‌کنند که یک پورت برداری (vectored port) دارای دامنه‌های منطبق هم برای تعریف پورت و هم برای تعریف net/register مربوطه باشد. در گذشته مرسوم بود که دامنه فقط در تعریف net/register مشخص شود و برخی ابزارها هنوز این کار را مجاز می‌دانند. به صورت پیش‌فرض، هرگونه عدم تطابق به عنوان یک خطا گزارش می‌شود. استفاده از -gno-io-range-error در صورت وجود net/register برداری و تعریف پورت اسکالر، به جای خطای مهلک، یک هشدار صادر می‌کند. این هشدار در دسته‌بندی anachronisms (موارد منسوخ) قرار دارد.
استاندارد ایجاب می‌کند که اگر هر ورودی یک عبارت انتساب پیوسته (continuous assignment) تغییر کند، کل عبارت دوباره ارزیابی شود. به طور پیش‌فرض، بخش‌هایی از عبارت که به مقادیر ورودی تغییریافته وابسته نیستند، دوباره ارزیابی نمی‌شوند. اگر عبارتی حاوی فراخوانی تابعی باشد که صرفاً به مقادیر ورودی‌اش وابسته نیست یا دارای اثرات جانبی (side effects) است، رفتار حاصل با الزامات استاندارد متفاوت خواهد بود. استفاده از -gstrict-ca-eval رفتار منطبق بر استاندارد را تحمیل می‌کند (با مقداری افت کارایی).
انطباق دقیق با قوانین استاندارد برای تعیین طول بیتی عبارات را فعال یا غیرفعال (پیش‌فرض) می‌کند. در صورت غیرفعال بودن، سمت راست انتساب یک پارامتر به صورت یک عبارت بدون اتلاف (lossless) ارزیابی می‌شود، همان‌طور که هر عبارت حاوی عدد ثابت بدون اندازه ارزیابی می‌گردد و اعداد ثابت بدون اندازه به عرض عدد صحیح کوتاه (truncate) نمی‌شوند.
مستثنی کردن متغیرهای کنترلی حلقه for از فهرست‌های رویداد ضمنی (implicit event_expression) را فعال (پیش‌فرض) یا غیرفعال می‌کند. در صورت فعال بودن، اگر یک متغیر کنترلی حلقه for (شاخص حلقه) فقط در داخل عبارت for استفاده شود، کامپایلر آن را در فهرست رویدادهای ضمنی محاسبه‌شده برای آن عبارت یا عبارات دربرگیرنده قرار نمی‌دهد. این قابلیت اجازه می‌دهد تا از یک متغیر کنترلی یکسان در چندین پردازش استفاده شود، بدون اینکه خطر افتادن در حلقه بی‌نهایت ناشی از فعال شدن متقابل پردازش‌ها وجود داشته باشد. برای انطباق دقیق با استانداردها، این رفتار باید غیرفعال شود.
پشتیبانی از افزونه‌های متفرقه Icarus Verilog را فعال (پیش‌فرض) یا غیرفعال می‌کند. این مورد شامل عملگرهای بیتی دودویی NAND و NOR و امکان اعمال عملگر باقیمانده حسابی (modulus) بر عملوندهای اعداد حقیقی (real) است.
دایرکتوری includedir را به فهرست دایرکتوری‌های مورد جستجو برای فایل‌های ضمیمه‌شده Verilog اضافه می‌کند. سوییچ -I می‌تواند چندین بار برای تعیین چندین دایرکتوری جستجو استفاده شود؛ دایرکتوری‌ها به همان ترتیبی که در خط فرمان ظاهر می‌شوند مورد جستجو قرار می‌گیرند.
نادیده گرفتن ماژول‌های ناموجود. در حالت عادی، اگر در نمونه‌سازی یک ماژول به ماژولی تعریف‌نشده ارجاع داده شود، خطا رخ می‌دهد. این گزینه باعث می‌شود کامپایلر از روی آن نمونه‌سازی عبور کند. همچنین در صورتی که هیچ ماژول سطح بالایی (top level) وجود نداشته باشد، مانع از بازگرداندن خطا توسط کامپایلر می‌شود. این گزینه اجازه می‌دهد تا از کامپایلر برای بررسی خطاهای طرح‌های ناقص استفاده شود.
این فلگ دایرکتوری مشخص‌شده را به فهرست مسیرهای مورد استفاده برای یافتن ماژول‌های VPI اضافه می‌کند. مسیر پیش‌فرض تنها شامل دایرکتوری نصب ماژول system.vpi است، اما این فلگ می‌تواند مسیرهای دیگری را اضافه کند. تعیین چندین مسیر مجاز است و مسیرها به ترتیب جستجو خواهند شد.
فایل مشخص‌شده را به فهرست فایل‌های منبع جهت کامپایل اضافه می‌کند، اما آن را به عنوان یک فایل کتابخانه علامت‌گذاری می‌نماید. تمام ماژول‌های موجود در آن فایل به عنوان ماژول‌های کتابخانه در نظر گرفته می‌شوند و تنها در صورتی بسط داده می‌شوند که توسط سایر ماژول‌های طرح نمونه‌سازی شده باشند.
این گزینه معادل -Mall=path است و برای سازگاری با نسخه‌های پیشین حفظ شده است.
فهرستی از فایل‌هایی را که در کامپایل طرح مشارکت دارند، در فایل مشخص‌شده توسط path می‌نویسد. اگر mode برابر با all یا prefix باشد، این فهرست شامل فایل‌های ضمیمه‌شده با دستورات include و فایل‌هایی که به صورت خودکار توسط پشتیبانی کتابخانه بارگذاری می‌شوند و همچنین فایل‌های صریحاً مشخص‌شده توسط کاربر خواهد بود. اگر mode برابر با include باشد، تنها فایل‌هایی که با دستورات include ضمیمه شده‌اند فهرست می‌شوند. اگر mode برابر با module باشد، تنها فایل‌های مشخص‌شده توسط کاربر یا فایل‌هایی که خودکار توسط کتابخانه بارگذاری شده‌اند فهرست می‌گردند. خروجی شامل یک نام فایل در هر خط بدون فاصله‌های خالی ابتدایی یا انتهایی است. اگر mode برابر با prefix باشد، فایل‌های ضمیمه‌شده توسط include با پیشوند "I " و سایر فایل‌ها با پیشوند "M " مشخص می‌شوند.
این ماژول را به فهرست ماژول‌های VPI برای بارگذاری در شبیه‌سازی اضافه می‌کند. می‌توان چندین ماژول را مشخص کرد که همگی به ترتیب مشخص‌شده بارگذاری می‌شوند. ماژول سیستمی ضمنی است و همیشه در انتهای کار بارگذاری می‌شود.

اگر نام مشخص‌شده حداقل شامل یک نویسه دایرکتوری باشد، فرض می‌شود که پیشوند مسیر ماژول را دارد، در غیر این صورت ماژول در مسیرهای مشخص‌شده توسط گزینه‌های قبلی -L و در صورت عدم یافتن، در دایرکتوری پایه iverilog جستجو می‌شود.

این گزینه برای اشکال‌زدایی خود کامپایلر استفاده می‌شود. شکل نهایی نت‌لیست طرح را در فایل مشخص‌شده ذخیره (dump) می‌کند. در غیر این صورت تأثیری بر عملکرد کامپایلر ندارد. این عملیات پس از بسط و بهینه‌سازی طرح انجام می‌شود.
خروجی را در فایل filename قرار می‌دهد. اگر نام فایل خروجی مشخص نشود، iverilog از نام پیش‌فرض a.out استفاده می‌کند.
مقداری را به یک فلگ مختص مقصد (target) اختصاص می‌دهد. سوییچ -p می‌تواند به تعداد دفعات لازم برای تعیین همه فلگ‌های مورد نظر به کار رود. فلگ‌های مورد استفاده به مقصد انتخابی بستگی دارند و در مستندات مختص مقصد شرح داده شده‌اند. فلگ‌های استفاده‌نشده نادیده گرفته می‌شوند.
سنتز (Synthesize). در حالت عادی، اگر مقصد بتواند توصیف‌های رفتاری (behavioral) را بپذیرد، کامپایلر پردازش‌ها را در قالب رفتاری باقی می‌گذارد. سوییچ -S باعث می‌شود کامپایلر سنتز را انجام دهد حتی اگر برای مقصد انتخابی ضروری نباشد. اگر نوع مقصد یک قالب نت‌لیست باشد، سوییچ -S غیرضروری است و تأثیری ندارد.
ماژول سطح بالا (top level) را برای بسط دادن مشخص می‌کند. Icarus Verilog به طور پیش‌فرض ماژول‌هایی را که در هیچ ماژول دیگری نمونه‌سازی نشده‌اند انتخاب می‌کند، اما گاهی این کار کافی نیست یا ماژول‌های زیادی را نمونه‌سازی می‌کند. اگر کاربر یک یا چند ماژول ریشه را با فلگ‌های -s مشخص کند، آن ماژول‌ها به عنوان ماژول‌های ریشه استفاده خواهند شد.
از این سوییچ برای انتخاب زمان‌های min (حداقل)، typ (معمول) یا max (حداکثر) از عبارات min:typ:max استفاده کنید. در حالت عادی، کامپایلر مقدار typ را از این عبارات به کار می‌برد (و برای ده مورد اولی که پیدا کند هشدار چاپ می‌کند) اما این سوییچ صریحاً به کامپایلر می‌گوید که از کدام مقدار استفاده کند. این کار هشدار مربوط به انتخاب خودکار کامپایلر را خنثی می‌کند.
از این سوییچ برای تعیین قالب خروجی مقصد استفاده کنید. بخش مقاصد (TARGETS) در ادامه را برای مشاهده فهرستی از قالب‌های معتبر خروجی ببینید.
هر فایل منبع را به عنوان یک واحد کامپایل مجزا (همان‌طور که در SystemVerilog تعریف شده) در نظر می‌گیرد. در صورت کامپایل برای نسل IEEE1364، این گزینه صرفاً تمام دستورات کامپایلر (از جمله تعاریف ماکروها) را پیش از پردازش هر فایل جدید بازنشانی می‌کند.
پیام‌های با جزئیات بیشتر (verbose) را فعال می‌کند. این گزینه خطوط دستوری را که برای انجام کامپایل واقعی اجرا می‌شوند، به همراه اطلاعات نسخه بخش‌های مختلف و نسخه کلی محصول چاپ می‌کند. ملاحظه خواهید کرد که خطوط فرمان شامل ارجاع به یک فایل موقت کلیدی هستند که اطلاعات را به هسته کامپایلر منتقل می‌کند. برای جلوگیری از حذف این فایل در پایان فرایند، نام فایلی دلخواه را در متغیر محیطی IVERILOG_ICONFIG تنظیم کنید.

اگر مقصد انتخابی vvp باشد، سوییچ -v به خط shebang در فایل خروجی کامپایلر اضافه می‌شود، بنابراین اجرای مستقیم فایل خروجی کامپایلر، پیام‌های باجزئیات را در vvp فعال می‌کند. با استفاده از دستور vvp برای اجرای غیرمستقیم فایل خروجی کامپایلر می‌توان از این جزئیات اضافی اجتناب کرد.

نسخه کامپایلر را چاپ کرده و خارج می‌شود.
مسیرهای زمان اجرای کامپایلر را چاپ کرده و خارج می‌شود.
رده‌های مختلف هشدارها را فعال می‌کند. بخش انواع هشدارها (WARNING TYPES) در ادامه را برای شرح گروه‌های مختلف هشدار ببینید. در صورت استفاده از چندین سوییچ -W، مجموعه هشدارها اجتماع تمام رده‌های درخواستی خواهد بود.
این دایرکتوری را به مسیر جستجوی ماژول‌های کتابخانه اضافه می‌کند. هنگامی که کامپایلر به یک ماژول تعریف‌نشده برخورد می‌کند، در این دایرکتوری‌ها به دنبال فایل‌هایی با نام مناسب می‌گردد.
پسوند مشخص‌شده را به فهرست پسوندهای پذیرفته‌شده نام فایل هنگام جستجوی سلول‌ها در کتابخانه اضافه می‌کند. این فهرست به طور پیش‌فرض فقط شامل .v است.

کامپایلر Icarus Verilog از کتابخانه‌های ماژول به صورت دایرکتوری‌های حاوی فایل‌های منبع Verilog پشتیبانی می‌کند. در طول فرایند بسط (elaboration)، کامپایلر متوجه نمونه‌سازی انواع ماژول‌های تعریف‌نشده می‌شود. اگر کاربر دایرکتوری‌های جستجوی کتابخانه را مشخص کرده باشد، کامپایلر آن دایرکتوری را برای فایل‌هایی با نام نوع ماژول مفقود جستجو می‌کند. در صورت یافتن چنین فایلی، آن را به عنوان یک فایل منبع Verilog بارگذاری کرده و سپس مجدداً برای بسط ماژول تلاش می‌کند.

فایل‌های ماژول کتابخانه ترجیحاً باید تنها حاوی یک ماژول باشند، اگرچه این یک الزام قطعی نیست. ماژول‌های کتابخانه می‌توانند به سایر ماژول‌های موجود در کتابخانه یا طرح اصلی ارجاع دهند.

کامپایلر Icarus Verilog از مقاصد متنوعی برای اهداف مختلف پشتیبانی می‌کند و سوییچ -t برای انتخاب مقصد مورد نظر به کار می‌رود. دو مقصدی که به طور کامل پشتیبانی می‌شوند عبارتند از:

مقصد null هیچ کدی تولید نمی‌کند. این مقصد برای بررسی نحوی (syntax) کد منبع Verilog کاربرد دارد.
این گزینه پیش‌فرض است. مقصد vvp کدهایی را برای زمان اجرای vvp تولید می‌کند. خروجی یک برنامه کامل است که طرح را شبیه‌سازی می‌کند اما باید توسط دستور vvp اجرا شود. گزینه -pfileline=1 می‌تواند برای افزودن کدهای دستوری (opcodes) اشکال‌زدایی گزاره‌های رویه‌ای به کدهای تولیدشده استفاده شود. این کدهای دستوری همچنین برای تولید اطلاعات فایل و شماره خط جهت پیام‌های هشدار و خطای رویه‌ای به کار می‌روند. برای فعال‌سازی ردگیری دستورات اشکال‌زدایی، از دستور trace (به صورت trace on) در اعلان تعاملی vvp استفاده کنید.

برای مشاهده سایر مقاصد موجود، ببینید: https://steveicarus.github.io/iverilog/targets

این‌ها انواع هشدارهایی هستند که می‌توانند توسط سوییچ -W انتخاب شوند. همه انواع هشدارها (به جز all) می‌توانند با پیشوند no- نیز همراه شوند تا آن هشدار خاص غیرفعال گردد. این قابلیت بیشتر پس از آرگومان -Wall برای غیرفعال کردن برخی هشدارهای مجزا کاربرد دارد.

دسته‌های هشدارهای anachronisms، implicit، macro-replacement، portbind، select-range، timescale و sensitivity-entire-array را فعال می‌کند.
هشدارهای مربوط به استفاده از ویژگی‌هایی را که در نسل انتخابی زبان Verilog منسوخ یا حذف شده‌اند فعال می‌کند.
هشدارهای مربوط به ایجاد تعاریف ضمنی را فعال می‌کند. به عنوان مثال، اگر یک سیم اسکالر (scalar wire) X در کد منبع Verilog استفاده شود اما تعریف نشده باشد، در اولین استفاده از آن یک هشدار چاپ خواهد شد.
هشدارهای پیش‌پردازنده را در هنگام تعریف مجدد یک ماکرو فعال می‌کند. حالت اول هر زمان که ماکرویی بازتعریف شود هشدار چاپ می‌کند. حالت دوم تنها در صورتی هشدار می‌دهد که متن ماکرو تغییر کند. برای خاموش کردن تمام هشدارهای این نوع از no-macro-redefinition استفاده کنید.
هشدارهای مربوط به پورت‌های نمونه‌سازی ماژول را که متصل نشده‌اند اما احتمالاً باید متصل باشند، فعال می‌کند. برای مثال، پورت‌های ورودی معلق (dangling) یک هشدار ایجاد می‌کنند.
هشدارهای مربوط به انتخاب‌های خارج از محدوده ثابت (constant out of bound selects) را فعال می‌کند. این شامل انتخاب‌های جزئی یا کاملاً خارج از محدوده و همچنین انتخابی است که شامل مقدار 'bx یا 'bz در شاخص باشد.
هشدارهای مربوط به استفاده ناهماهنگ از دستور timescale را فعال می‌کند. این گزینه مواردی را که برخی ماژول‌ها فاقد timescale هستند یا ماژول‌هایی که timescale را از فایلی دیگر به ارث می‌برند، شناسایی می‌کند. هر دو حالت احتمالاً به معنای ناهماهنگ بودن مقیاس‌های زمانی است و زمان‌بندی شبیه‌سازی می‌تواند گیج‌کننده و وابسته به ترتیب کامپایل شود.
هشدارهای مربوط به گزاره‌های always را که ممکن است در زمان اجرا حلقه‌های بی‌نهایت داشته باشند (مسیرهایی بدون تأخیر یا با تأخیر صفر دارند) فعال می‌کند. این رده از هشدارها در -Wall گنجانده نشده است و بنابراین نسخه no- ندارد. هرگاه کامپایلر بتواند به طور قطعی تشخیص دهد که یک حلقه بی‌نهایت وجود خواهد داشت (همه مسیرها فاقد تأخیر یا با تأخیر صفر باشند)، همواره یک پیام خطای مهلک چاپ خواهد شد.

هنگامی که مشکوک هستید یک عبارت always باعث ایجاد حلقه بی‌نهایت در زمان اجرا می‌شود، از این فلگ برای یافتن عبارات always که منطق آن‌ها نیاز به بازبینی دارد استفاده کنید. انتظار می‌رود بسیاری از این هشدارها مثبت کاذب باشند، زیرا کد مقدار همه متغیرها و سیگنال‌ها را نامعین فرض می‌کند.

هشدارهایی را برای مواردی فعال می‌کند که انتخاب بخشی از بردار در عبارت "always @*" باعث افزوده شدن کل بردار به فهرست حساسیت ضمنی می‌شود. اگرچه این رفتار توسط استاندارد IEEE تعیین شده است، اما ممکن است مورد انتظار نباشد و در صورت بزرگ بودن بردار بر کارایی اثر بگذارد.
هشدارهایی را برای مواردی فعال می‌کند که انتخاب عنصری از آرایه در عبارت "always @*" باعث افزوده شدن کل آرایه به فهرست حساسیت ضمنی می‌شود. اگرچه این رفتار توسط استاندارد IEEE تعیین شده است، اما ممکن است مورد انتظار نباشد و در صورت بزرگ بودن آرایه بر کارایی اثر بگذارد.

اگر نام فایل منبع دارای پسوند .vpi یا .vpl باشد، به عنوان یک ماژول VPI در نظر گرفته می‌شود. ماژول‌های VPI ارائه‌شده توسط کاربر پویش می‌شوند تا انواع بازگشتی هر یک از توابع سیستمی که ارائه می‌دهند تعیین شود. این کار ضروری است زیرا کامپایلر برای بسط عبارات حاوی این توابع سیستمی به این اطلاعات نیاز دارد. مسیر یا نام ماژول به مقصد ارسال می‌شود تا ماژول VPI به طور خودکار در ابتدای شبیه‌سازی بارگذاری شود.

ماژول‌های VPI همچنین می‌توانند با استفاده از گزینه‌های -L و -m ارائه شوند.

اگر نام فایل منبع دارای پسوند .sft باشد، به عنوان یک فایل جدول توابع سیستمی در نظر گرفته می‌شود. فایل جدول توابع سیستم روش قدیمی برای توصیف انواع بازگشتی توابع سیستم به کامپایلر بود. به کاربران توصیه می‌شود به روش جدید یعنی ارائه مستقیم ماژول VPI روی آورند.

قالب این جدول به صورت ASCII و یک تابع در هر خط است. خطوط خالی نادیده گرفته می‌شوند و خطوطی که با نویسه شروع می‌شوند، خطوط توضیحات هستند. هر خط غیرتوضیحی با نام تابع و سپس نوع vpi (مانند vpiSysFuncReal) شروع می‌شود. انواع زیر پشتیبانی می‌شوند:

تابع یک مقدار حقیقی یا زمان واقعی (real/realtime) برمی‌گرداند.
تابع یک عدد صحیح برمی‌گرداند.
تابع یک بردار با عرض مشخص‌شده برمی‌گرداند که بر اساس فلگ، دارای علامت (signed) یا بدون علامت (unsigned) است.
تابع یک رشته برمی‌گرداند. این یک افزونه مختص Icarus است که در استاندارد VPI موجود نیست.

فایل دستور به کاربر اجازه می‌دهد تا نام فایل‌های منبع و برخی سوییچ‌های خط فرمان را به جای یک خط فرمان طولانی در یک فایل متنی قرار دهد. فایل‌های دستور می‌توانند شامل توضیحات به سبک C یا ++C و همچنین توضیحات # (در صورتی که # در ابتدای خط باشد) باشند.

یک نام فایل یا مسیر فایل ساده به عنوان نام یک فایل منبع Verilog در نظر گرفته می‌شود. مسیر با اولین نویسه غیرفاصله شروع می‌شود. متغیرها در نام فایل‌ها جایگزین می‌شوند.
عبارت -c یا -f پیشوند یک فایل دستور است، دقیقاً مانند نحوه عملکرد آن در خط فرمان. نام cmdfile می‌تواند در همان خط یا در خط غیرتوضیحی بعدی باشد.
عبارت -l پیشوند یک فایل کتابخانه در فایل دستور است، دقیقاً مانند نحوه عملکرد آن در خط فرمان. پارامتر فلگ -l می‌تواند در همان خط یا در خط غیرتوضیحی بعدی باشد. گزینه -v نام مستعاری برای -l است که برای سازگاری با سایر شبیه‌سازها ارائه شده است.

متغیرها در file جایگزین می‌شوند.

عبارت -y پیشوند یک دایرکتوری کتابخانه در فایل دستور است، دقیقاً مانند نحوه عملکرد آن در خط فرمان. پارامتر فلگ -y می‌تواند در همان خط یا در خط غیرتوضیحی بعدی باشد.

متغیرها در libdir جایگزین می‌شوند.

+incdir+includedir
عبارت +incdir+ در فایل‌های دستور، دایرکتوری‌هایی را برای جستجوی فایل‌های include مشخص می‌کند؛ بسیار شبیه به نحوه عملکرد فلگ‌های -I در خط فرمان. تفاوت در این است که چندین دایرکتوری +includedir پارامترهای معتبری برای یک عبارت +incdir+ واحد هستند، اگرچه می‌توانید چندین خط +incdir+ نیز داشته باشید.

متغیرها در includedir جایگزین می‌شوند.

+libext+ext
عبارت +libext در فایل‌های دستور، پسوندهای فایل را برای بررسی هنگام جستجوی فایل کتابخانه فهرست می‌کند. این گزینه در ترکیب با فلگ‌های -y برای فهرست کردن پسوندهایی که باید در هر دایرکتوری قبل از رفتن به دایرکتوری کتابخانه بعدی بررسی شوند، مفید است.
+libdir+dir
این روش دیگری برای تعیین دایرکتوری‌های کتابخانه است. فلگ -y را ببینید.
+libdir-nocase+dir
این مورد شبیه به دستور +libdir است، با این تفاوت که نام فایل‌های داخل دایرکتوری‌های اعلام‌شده در اینجا به بزرگی و کوچکی حروف حساس نیستند. نام ماژول مفقود در جستجو نیازی به تطابق با بزرگی و کوچکی حروف نام فایل ندارد، مادامی که حروف صحیح باشند. به عنوان مثال، "foo" با "Foo.v" مطابقت دارد اما با "bar.v" مطابقت ندارد.
+define+NAME=value
عبارت +define+ مشابه گزینه -D در خط فرمان است. بخش مقدار (value) در این عبارت اختیاری است.
+parameter+NAME=value
عبارت +parameter+ مشابه گزینه -P در خط فرمان است.
+timescale+value
عبارت +timescale+ برای تنظیم مقیاس زمانی (timescale) پیش‌فرض برای شبیه‌سازی استفاده می‌شود. این شامل واحدهای زمانی و دقت قبل از هرگونه دستور timescale` یا پس از دستور resetall` است. مقدار پیش‌فرض 1s/1s است.
+toupper-filename
این عبارت باعث می‌شود نام فایل‌های پس از آن در فایل دستور به حروف بزرگ تبدیل شوند. این گزینه برای شرایطی که یک دایرکتوری از یک سیستم DOS عبور کرده و در طول فرایند نام فایل‌ها تغییر یافته است، کمک می‌کند.
+tolower-filename
این گزینه مشابه ترفند +toupper-filename است که در بالا توضیح داده شد.
+integer-width+value
این گزینه به برنامه‌نویس اجازه می‌دهد تا عرض متغیرهای integer را در کد منبع Verilog انتخاب کند. مقدار پیش‌فرض ۳۲ است و مقدار می‌تواند هر عدد صحیح دلخواهی باشد.
+width-cap+value
این گزینه به برنامه‌نویس اجازه می‌دهد تا سقف عرض (width cap) را برای عبارات بدون اندازه (unsized) تعیین کند. اگر عرض محاسبه‌شده برای یک عبارت بدون اندازه از این مقدار فراتر رود، کامپایلر یک هشدار صادر کرده و عرض عبارت را به این مقدار محدود می‌کند.

در موارد خاص، iverilog از متغیرها در فایل‌های دستور پشتیبانی می‌کند. این متغیرها رشته‌هایی به فرم "$(varname)" یا "${varname}" هستند که در آن‌ها varname نام متغیر محیطی برای خواندن است. کل رشته با محتویات آن متغیر جایگزین می‌شود. متغیرها فقط در زمینه‌هایی که صریحاً از آن‌ها پشتیبانی می‌کنند (از جمله رشته‌های فایل و دایرکتوری) جایگزین می‌شوند.

مقادیر متغیرها از متغیرهای محیطی سیستم‌عامل تأمین می‌شوند و نه از تعاریف پیش‌پردازنده در جاهای دیگر فایل یا خط فرمان.

ماکروهای زیر توسط کامپایلر از پیش تعریف شده‌اند:

__ICARUS__ = 1
هنگام کامپایل با Icarus Verilog همیشه تعریف شده است.
__ICARUS_SYNTH__ = 1
هنگامی که سنتز فعال باشد تعریف می‌شود.
__VAMS_ENABLE__ = 1
هنگامی که Verilog-AMS فعال باشد تعریف می‌شود.

برنامه iverilog همچنین متغیرهای محیطی خاصی را برای کنترل رفتار خود می‌پذیرد. این متغیرها می‌توانند برای اعمال تغییرات نیمه‌دائمی استفاده شوند.

نام مورد استفاده برای فایل موقتی را که پارامترها را به هسته اصلی کامپایلر منتقل می‌کند تنظیم می‌نماید و مانع از حذف آن فایل پس از خروج کامپایلر می‌شود.
بخش‌های اضافی را به مسیر جستجوی ماژول VPI اضافه می‌کند. مسیرهای مشخص‌شده به این شیوه پس از مسیرهای مشخص‌شده با -L اما قبل از مسیر جستجوی پیش‌فرض جستجو می‌شوند. چندین مسیر می‌توانند با دونقطه (در ویندوز با نقطه‌ویرگول) از هم جدا شوند.

این مثال‌ها فرض می‌کنند که شما یک فایل منبع Verilog به نام hello.v در دایرکتوری جاری دارید.

برای کامپایل hello.v به یک فایل اجرایی به نام a.out:

iverilog hello.v

برای کامپایل hello.v به یک فایل اجرایی به نام hello:

iverilog -o hello hello.v

برای کامپایل و اجرای صریح با استفاده از زمان اجرای vvp:

iverilog -ohello.vvp -tvvp hello.v

Steve Williams (steve@icarus.com)

vvp(1)

نکات مربوط به استفاده، اشکال‌زدایی و توسعه کامپایلر را می‌توانید در نشانی زیر بیابید: https://steveicarus.github.io/iverilog

Copyright © 2002-2026 Stephen Williams

این سند می‌تواند بر اساس شرایط مجوز عمومی همگانی گنو (GNU GPL) نسخه ۲٫۰ آزادانه بازتوزیع شود.

Jan 13th, 2026