Це верилятор команд, який можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
Verilator - конвертуйте код Verilog в C++/SystemC
СИНТАКСИС
verilator --довідка
verilator --версія
verilator --cc [параметри] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [параметри] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [верхній_рівень.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.
Отриманий виконуваний файл виконає фактичне моделювання.
Щоб розпочати, перейдіть до розділу "ПРИКЛАД ВИКОНАННЯ C++".
АРГУМЕНТ РЕЗЮМЕ
Це короткий підсумок аргументів для 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 Очищення потоків після всіх $displays
--bbox-sys Blackbox невідомі $системні виклики
--bbox-unsup Непідтримувані мовні функції Blackbox
--bin Перевизначити двійковий файл Verilator
-CFLAGS Прапори компілятора C++ для make-файлу
--cc Створити вихід C++
--cdc Clock аналіз перетину домену
--clk Позначте вказаний сигнал як годинник
--компілятор Налаштуйте спеціальний компілятор C++
--сходження-межа Час встановлення конвергенції налаштування
--coverage Увімкнути все покриття
--coverage-line Увімкнути покриття лінії
--coverage-toggle Увімкнути перемикання покриття
--coverage-user Увімкнути покриття користувачів SVL
--coverage-underscore Увімкнути покриття _signals
-D [= ] Встановити визначення препроцесора
--debug Увімкнути налагодження
--debug-check Увімкнути підтвердження налагодження
--debugi Увімкнути налагодження на визначеному рівні
--debugi- Увімкнути налагодження вихідного файлу на рівні
--мова за замовчуванням Мова за замовчуванням для аналізу
+визначити+ = Встановити визначення препроцесора
--dump-tree Увімкнути дамп файлів .tree
--dump-treei Увімкнути дамп файлів .tree на рівні
--dump-treei- Увімкнути дамп файлу .tree у вихідному файлі на рівні
-E Попередньо обробляти, але не компілювати
--обмеження помилок Скасувати після такої кількості помилок
--exe Посилання для створення виконуваного файлу
-Ф Розбір параметрів з файлу, відносно
-f Розбір параметрів з файлу
--gdb Запустіть Verilator під GDB в інтерактивному режимі
--gdbbt Запустіть Verilator під GDB для зворотного трасування
--help Відобразити цю довідку
-Я Каталог для пошуку включає
--якщо-глибина Налаштуйте попередження IFDEPTH
+incdir+ Каталог для пошуку включає
--inhibit-sim Створити функцію для вимкнення sim
--inline-mult Вбудовування модуля Tune
-LDFLAGS Прапори попереднього об'єкта компонувальника для make-файлу
-LDLIBS Прапори бібліотеки компоновщика для make-файлу
--мова Стандартна мова для аналізу
+libext+ +[ext]... Розширення для пошуку модулів
--lint-only Lint, але не виводить
--MMD Створення файлів залежностей .d
--MP Створення фальшивих цілей залежності
--Mdir Ім'я каталогу вихідних об'єктів
--mod-префікс Ім’я до нижчих класів
--no-clk Заборонити позначати вказаний сигнал як годинник
--no-pins64 Не використовуйте vluint64_t для 33-64-бітових підписів
--no-skip-identical Вимкнути пропуск ідентичного виводу
+notimingchecks Проігноровано
-O0 Вимкнути оптимізацію
-O3 Оптимізація високої продуктивності
-О Оптимізація на вибір
-о Ім'я кінцевого виконуваного файлу
--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-cfunc Назвіть функції для профілювання
--приватне налагодження; див. документи
-- загальнодоступне налагодження; див. документи
--report-unoptflat Додаткова діагностика для UNOPTFLAT
--savable Увімкнути збереження-відновлення моделі
--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 Невизначити визначення препроцесора
--розгорнути-рахувати Налаштуйте максимальну кількість ітерацій циклу
--unroll-stmts Налаштуйте максимальний розмір корпусу петлі
--unused-regexp Налаштуйте сигнали НЕВИКОРИСТАНИХ ворсинок
-V Детальна версія та конфігурація
-v Бібліотека Verilog
+verilog1995ext+ Синонім +1364-1995ext+
+verilog2001ext+ Синонім +1364-2001ext+
-Помилка- Перетворити попередження на помилку
-Майбутнє- Вимкнути попередження про невідомі повідомлення
-Ні- Вимкнути попередження
-Wno-lint Вимкнути всі попередження про ворсинки
-Wno-style Вимкнути всі попередження про стиль
-Wno-fatal Вимкнути фатальний вихід у попередженнях
--x-призначити Спочатку призначте Xs цьому значенню
--x-initial-edge Увімкнути початкові тригери X->0 і X->1
-у Каталог для пошуку модулів
АРГУМЕНТИ
{файл.v}
Вказує файл Verilog, що містить верхній модуль, який потрібно перевірити.
{file.c/.cc/.cpp/.cxx}
Визначає додаткові файли C++, які будуть пов’язані з кодом Verilog. Якщо є файли C++
зазначені таким чином, Verilator включатиме правило make, яке генерує a Модулі
виконуваний файл. Без будь-яких файлів C++ Verilator зупиниться на Модулі__ALL.a бібліотека,
і припустимо, що ви продовжите зв’язуватися з правилами make, які ви пишете самі. Дивіться також
- Опція CFLAGS.
{файл.a/.o/.so}
Вказує необов'язковий об'єкт або файли бібліотеки, які будуть пов'язані з кодом Verilog, як a
скорочення для -LDFLAGS " ". Якщо якісь файли вказані таким чином, Verilator
міститиме правило make, яке використовує ці файли під час зв’язування Модулі виконуваний файл
Як правило, це корисно лише при використанні з параметром --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-призначити унікальний» та/або
"--x-initial-edge" може бути бажаним.
-- автопромивання
Після кожного $display або $fdisplay очищайте вихідний потік. Це гарантує це
повідомлення з'являться негайно, але можуть знизити продуктивність; для найкращої продуктивності телефонуйте
"fflush(stdout)" іноді в головному циклі C. За замовчуванням вимкнено, що буде буферизуватися
вихід, який забезпечується звичайними викликами C stdio.
--bbox-sys
Чорний ящик для будь-яких невідомих $system викликів завдань або функцій. Системні завдання будуть простими
НІ, і системні функції будуть замінені на нуль без розміру. Аргументи до такого
функції будуть проаналізовані, але не перевірені. Це запобігає помилкам, коли
linting за наявності специфічних для компанії викликів PLI.
--bbox-unsup
Чорний ящик деякі непідтримувані мовні функції, наразі таблиці UDP та CMOS і
примітиви tran gate. Це може дозволити заповнювати решту конструкції, навіть якщо
присутні непідтримувані конструкції.
--bin ім'я файлу
Рідко потрібні. Замінити назву файлу за замовчуванням для самого Verilator. Коли залежність
(.d) файлу, це ім’я файлу стане залежністю джерела, так що a
зміна цього бінарного файлу призведе до перебудови вихідних файлів.
-CFLAGS прапори
Додайте вказані прапори компілятора C до згенерованих make-файлів. Коли make запускається на
згенерований make-файл вони будуть передані компілятору C++ (gcc/g++/msvc++).
--cc
Визначає C++ без режиму виводу SystemC; див. також --sc.
--CDC
Експериментальний. Виконайте деякі перевірки перетину тактового домену та видайте пов’язані з цим попередження
(CDCRSTLOGIC), а потім вийти; якщо потрібні попередження, відмінні від попереджень CDC, зробіть a
другий запуск з --lint-only. Додаткова інформація попередження також записується на
файл {prefix}__cdc.txt.
Наразі перевіряє лише деякі елементи, пропущені іншими інструментами CDC; якщо у вас є інтерес
додаючи більше традиційних перевірок CDC, зв’яжіться з авторами.
--clk назва сигналу
Іноді Verilator досить важко відрізнити тактовий сигнал від інших
сигнали даних. Іноді сигнали годинника можуть потрапляти в контрольний список
сигнали, які визначають, чи потрібна подальша оцінка. Це сильно погіршиться
продуктивність перевіреної моделі.
З --clk , користувач може вказати root clock в моделі, потім Verilator
позначить сигнал як годинник і автоматично поширить атрибут clocker
інші сигнали, що випливають із цього. Таким чином, Verilator намагатиметься уникнути прийняття
сигнал годинника в контрольний список.
Примітка, що назва сигналу визначається шляхом ієрархії RTL. Наприклад, v.foo.bar. Якщо
сигнал є вхідним для верхнього модуля, безпосередньо назва сигналу. Якщо знайдеш
важко знайти точну назву, спробуйте використати "/*verilator clocker*/" у файлі RTL для
позначте сигнал безпосередньо.
--компілятор ім'я компілятора
Включає налаштування та обхідні шляхи для зазначеного компілятора C++.
брязкіт
Налаштувати на лязг. Це може знизити швидкість виконання, оскільки дає змогу вирішити кілька шляхів
щоб уникнути дурних жорстко закодованих обмежень у clang. Це включає руйнування глибоких структур
як для msvc, як описано нижче.
gcc Tune для Gnu C++, хоча згенерований код повинен працювати майже на будь-якому сумісному C++
компілятор. Наразі за замовчуванням.
msvc
Налаштуйте Microsoft Visual C++. Це може знизити швидкість виконання, оскільки це дозволяє
кілька обхідних шляхів, щоб уникнути дурних жорстко закодованих обмежень у MSVC++. Це включає
щоб уникнути розбиття глибоко вкладених виразів у дужках на підвирази
помилка C1009 і розбиття глибоких блоків на функції, щоб уникнути помилки C1061.
--сходження-межа
Рідко потрібні. Вказує максимальну кількість ітерацій під час виконання перед створенням a
помилка збігу моделі. За замовчуванням 100.
--покриття
Вмикає всі форми покриття, псевдонім "--coverage-line --coverage-toggle
--coverage-user".
--лінія покриття
Вказує основний код аналізу покриття рядків блоку, який слід вставити.
Аналіз покриття додає інструкції в кожній точці зміни потоку коду, які є
гілки операторів IF і CASE, супернабір нормального покриття лінії Verilog. В
для кожної такої гілки збільшується унікальний лічильник. В кінці тесту лічильники
разом із назвою файлу та номером рядка, що відповідають кожному лічильнику, записуються
logs/coverage.pl.
Verilator автоматично вимикає покриття гілок, у яких є $stop
Передбачається, що гілки $stop містять перевірку помилок, яка не повинна відбуватися. /*верилятор
coverage_block_off*/ comment виконуватиме подібну функцію для будь-якого коду в цьому блоці
або нижче, або /*verilator coverage_on/coverage_off*/ вимкне покриття навколо рядків
коду.
Примітка Verilator може перерахувати комбінаторні (не тактовані) блоки, коли ці блоки
приймати сигнали, для яких було вимкнено попередження UNOPTFLAT; для найточнішого
результати не вимикають це попередження під час використання покриття.
--overage-toggle
Вказує код аналізу перемикання сигналу, який слід вставити.
Кожен біт кожного сигналу в модулі має вставлений лічильник. Лічильник буде
збільшення при кожній зміні ребра відповідного біта.
Сигнали, які є частиною завдань або блоків початку/закінчення, вважаються локальними змінними і
не охоплені. Сигнали, які починаються символами підкреслення, є цілими чи дуже широкими
(>256 біт загальної пам’яті в усіх вимірах) також не охоплюються.
Ієрархія стискається таким чином, що якщо модуль створюється кілька разів,
покриття буде підсумовано для цього біта для ВСІХ екземплярів цього модуля за допомогою
той самий набір параметрів. Є екземпляр модуля з різними значеннями параметрів
розглядається як інший модуль і враховується окремо.
Verilator приймає мінімально розумне рішення про те, в якому домені тактової частоти сигнал
переходить до та шукає лише ребра в цьому домені годинника. Це означає, що краї можуть бути
ігнорується, якщо відомо, що ребро ніколи не може бути помічено логікою прийому. Це
Алгоритм може покращитися в майбутньому. У підсумку охоплення може бути нижчим, ніж
що можна було б побачити, дивлячись на сліди, але покриття точніше
представлення якості стимулу в дизайні.
Під час стабілізації моделі можуть бути краї, підраховані поблизу нульового часу. Це добре
практикуйте обнуляти все покриття безпосередньо перед випуском скидання, щоб запобігти такому підрахунку
поведінка.
Пара коментарів /*verilator coverage_off/on */ може використовуватися навколо сигналів, які цього не роблять
потрібен аналіз перемикання, наприклад, ОЗУ та файли реєстрів.
--покриття-підкреслення
Увімкнути покриття сигналів, які починаються з підкреслення. Зазвичай ці сигнали є
не охоплено. Дивіться також --trace-underscore.
--coverage-user
Вмикає функціональне покриття, вставлене користувачем. На даний момент всі функціональні точки покриття
вказуються за допомогою SVA, який потрібно ввімкнути окремо за допомогою --assert.
Наприклад, наступна заява додасть точку висвітлення з коментарем
"Годинник за замовчуванням":
DefaultClock: властивість покриття (@(posedge clk) cyc==3);
-Dбуло=значення
Визначає заданий символ препроцесора, не допускаючи. Подібно до +define; +визначити
є досить стандартним для інструментів Verilog, тоді як -D є псевдонімом для сумісності GCC.
--відлагоджувати
Виберіть створений для налагодження образ Verilator (якщо доступний) і ввімкніть більше внутрішнього
твердження (еквівалентно "--debug-check"), повідомлення про налагодження (еквівалентно
«--debugi 4») і файли дампу проміжної форми (еквівалентно «--dump-treei 3»).
--debug-check
Рідко потрібні. Увімкнути внутрішні перевірки підтвердження налагодження, не змінюючи параметри налагодження
багатослівність. Вмикається автоматично, коли вказано --debug.
--debugi
--debugi-
Потрібний рідко - для використання розробником. Встановіть глобальний рівень внутрішнього налагодження на
зазначений рівень налагодження (1-10) або встановіть для вказаного вихідного файлу Verilator значення
зазначений рівень (наприклад, "--debugi-V3Width 9"). Більш високі рівні дають більш детальну інформацію
повідомлення
--мова за замовчуванням значення
Виберіть мову, яка буде використовуватися за замовчуванням під час першої обробки кожного файлу Verilog.
Значення мови має бути "1364-1995", "1364-2001", "1364-2005", "1800-2005",
«1800-2009» або «1800-2012».
Будь-яка мова, пов’язана з певним розширенням файлу (див. різні +яздоп.+
параметри) буде використовуватися замість мови, визначеної параметром --default-language.
Прапор --default-language рекомендований лише для застарілого коду, який використовує той самий
мову у всіх вихідних файлах, оскільки кращим варіантом є редагування коду для відновлення
нові ключові слова або додайте відповідні "`begin_keywords". Для застарілих змішаних мовних дизайнів,
різні +язслід використовувати параметри ext+.
Якщо мова не вказана, або цим прапорцем, або +язпараметри ext+, потім останній
Використовується мова SystemVerilog (IEEE 1800-2012).
+визначити+було=значення
+визначити+було=значення+вар2=value2...
Визначає заданий символ препроцесора або кілька символів, якщо вони розділені плюсами.
Подібний до -D; +define є досить стандартним для інструментів Verilog, тоді як -D є псевдонімом
для сумісності GCC.
-- смітник
Рідко потрібні. Увімкніть запис файлів налагодження .tree з рівнем дампу 3, який створює дамп
стандартні критичні стадії. Додаткову інформацію про формат див. у розділі Verilator Internals
посібник. --dump-tree вмикається автоматично за допомогою --debug, тому "--debug
--no-dump-tree" може бути корисним, якщо файли дампу великі та не бажані.
--dump-treei
--dump-treei-
Потрібний рідко - для використання розробником. Встановити глобальний рівень внутрішнього дампування дерева на a
певний рівень дампування або встановіть вказаний вихідний файл Verilator на вказаний
рівень скидання дерева (наприклад, "--dump-treei-V3Order 9"). Рівень 0 вимикає дампи та є
еквівалент "--no-dump-tree". Рівень 9 дозволяє скидати кожну стадію.
-E Попередньо обробляти вихідний код, але не компілювати, як у випадку з 'gcc -E'. Вихід записується
стандартизувати. Остерігайтеся вмикання налагоджувальних повідомлень, оскільки вони також надходять
стандартний вихід.
--обмеження помилок
Після такої кількості помилок або попереджень вийдіть. За замовчуванням 50.
--exe
Згенеруйте виконуваний файл. Вам також потрібно буде передати додаткові файли .cpp на
командний рядок, який реалізує основний цикл для вашого моделювання.
-F файл
Прочитайте вказаний файл і дійте так, ніби весь текст всередині нього вказано як команду
параметри лінії. Будь-які відносні шляхи відносяться до каталогу, що містить файл
вказаний файл. Див також -f. Примітка - F є досить стандартним для всіх інструментів Verilog.
-f файл
Прочитайте вказаний файл і дійте так, ніби весь текст всередині нього вказано як команду
параметри лінії. Будь-які відносні шляхи є відносно поточного каталогу. Дивись також
-Ф. Примітка -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 нових
операції можуть бути додані до моделі шляхом вбудовування, якщо їх більше, ніж це число
операції, модуль не вбудований. Більші значення або значення <= 1
вбудує все, призведе до більшого часу компіляції, але потенційно швидше
час виконання. Цей параметр ігнорується для дуже малих модулів; вони завжди будуть
вбудований, якщо це дозволено.
-LDFLAGS прапори
Додайте вказані прапори компонувальника C до згенерованих файлів make-файлів. Коли make запускається на
згенерований make-файл вони будуть передані до компоновщика C++ (ld) *після* первинного
файл, який зв’язується. Цей прапор називається -LDFLAGS, оскільки це традиційна назва
тренажери; його краще було б назвати LDLIBS, оскільки це змінна Makefile
це контролює. (У Make LDFLAGS стоїть перед першим об'єктом, LDLIBS після. -L
бібліотеки мають бути у змінній Make змінної LDLIBS, а не LDFLAGS.)
--мова значення
Синонім для "--default-langauge", для сумісності з іншими інструментами та раніше
версії Verilator.
+libext+ext+ext...
Вкажіть розширення, які потрібно використовувати для пошуку модулів. Якщо, наприклад, модуль
x є посилання, загляньте в x.ext. Примітка +libext+ є досить стандартним у Verilog
інструменти. За замовчуванням .v і .sv.
--лише ворсинки
Перевіряйте файли лише на наявність ворсинок, не створюйте жодного іншого виводу.
Вам також може знадобитися параметр -Wall, щоб увімкнути повідомлення, які вважаються стилістичними
і не ввімкнено за замовчуванням.
Якщо дизайн не має бути повністю перевіреним, див. також --bbox-sys і
--bbox-unsup параметри.
--ММД
Увімкнути створення файлів залежностей .d, які використовуються для визначення залежностей, подібних до
Параметр gcc -MMD. За замовчуванням використовуйте --no-MMD, щоб вимкнути.
-- депутат
Створюючи файли залежностей .d за допомогою --MMD, створіть фальшиві цілі. Подібно до gcc -MP
варіант.
--Мдір каталог
Вказує ім’я каталогу об’єктів Make. Усі згенеровані файли будуть розміщені
в цьому каталозі. Якщо не вказано, використовується "obj_dir". Каталог створюється if
його не існує, а батьківські каталоги існують; інакше вручну створіть Mdir
перед дзвінком у Verilator.
--mod-префікс верхнє ім'я
Визначає ім’я, яке буде передувати всім класам нижчого рівня. За замовчуванням те саме, що
--префікс.
--no-clk
Запобігайте позначенню вказаного сигналу як годинника. Дивіться «--clk».
--без шпильок64
Зворотно сумісний псевдонім для "--pins-bv 33".
--не-пропуск-ідентичний
Рідко потрібні. Вимикає пропуск виконання Verilator, якщо всі вихідні файли є
ідентичні, і всі вихідні файли існують з новішими датами.
+перевірка часу
Ігнорується через сумісність з іншими симуляторами.
-O0 Вимикає оптимізацію моделі.
-O3 Вмикає повільну оптимізацію коду, який генерує сам Verilator (на відміну від
"-CFLAGS -O3", який впливає на оптимізацію компілятора C. -O3 може зменшити симуляцію
час виконання за ціною часу компіляції. Зараз встановлюється --inline-mult -1.
-Oоптимізація-лист
Рідко потрібні. Вмикає або вимикає певну оптимізацію разом із оптимізацією
обраний на основі пройденого листа. Рідна літера вимикає оптимізацію, an
велика літера дозволяє це зробити. Це призначено лише для налагодження; дивіться джерело
код для залежних від версії відображень оптимізацій у літери -O.
-о
Вкажіть ім’я для остаточного створеного виконуваного файлу, якщо використовується --exe. За замовчуванням на
--префікс, якщо не вказано.
--no-order-clock-delay
Рідко потрібні. Вимикає виправлення помилки для упорядкування вмикання годинника із затримкою
завдання. Цей прапорець слід використовувати лише за пропозицією розробників.
-- вихід-розділ bytes
Дозволяє розділити вихідні файли .cpp/.sp на кілька вихідних даних. Коли файл C++
перевищує вказану кількість операцій, при наступній буде створено новий файл
межа функції. Крім того, будь-які повільні підпрограми будуть поміщені у файли __Slow.
Це прискорює компіляцію, оскільки оптимізацію можна вимкнути в повільних програмах,
а інші файли можна скомпілювати на паралельних машинах. Використання --output-split
повинно мати лише незначний вплив на продуктивність. З GCC 3.3 на 2GHz Opteron,
--output-split 20000 призведе до розбиття приблизно на одну хвилину компіляції
шматки.
--output-split-cfuncs заяви
Дозволяє розділяти функції у вихідних файлах .cpp/.sp на кілька функцій.
Коли згенерована функція перевищує вказану кількість операцій, створюється нова функція
буде створено. З --output-split це дозволить GCC компілювати швидше, на a
невелика втрата продуктивності, яка погіршується зі зменшенням розділених значень. Зауважте, що
цей параметр сильніший за --output-split у тому сенсі, що --output-split не буде
розбиття всередині функції.
--output-split-ctrace заяви
Дозволяє розділити функції трасування у вихідних файлах .cpp/.sp на декілька
функції. За замовчуванням встановлено те саме налаштування, що й --output-split-cfunc.
-P За допомогою -E вимкнути створення маркерів рядків і порожніх рядків, подібно до прапора GCC -P.
--шпильки64
Зворотно сумісний псевдонім для "--pins-bv 65". Зверніть увагу, що це 65, а не 64.
--pins-bv ширина
Визначає входи/виходи SystemC, більші або рівні ширина біти широкі повинні
використовуйте sc_bv замість uint32/vluint64_t. За замовчуванням – «--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" це
in 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 на стандартному виводі
з 'Content-Length'. Вихід у stderr із фільтра переходить до Verilator
stdout і якщо фільтр виходить із ненульовим статусом, Verilator завершується. Див
Тест t/t_pipe_filter для прикладу.
Щоб налагодити вихід фільтра, спробуйте скористатися параметром -E, щоб побачити попередньо оброблений вихід.
--префікс верхнє ім'я
Вказує ім’я класу верхнього рівня та make-файлу. За замовчуванням V до
ім'я перемикача --top-module або V перед першим ім'ям файлу Verilog
передається в командному рядку.
--profile-cfuncs
Змініть створені функції C++ для підтримки профілювання. Функції будуть
зведено до мінімуму, щоб містити один «базовий» оператор, як правило, один завжди блок або дріт
заяву. (Зауважте, що це сповільнить виконуваний файл на ~5%.) Крім того, файл
Ім'я функції буде суфіксовано базовою назвою модуля Verilog і номером рядка
з'явилася заява. Це дозволяє співвідносити звіти gprof або oprofile
вихідні заяви Verilog.
--приватний
Навпроти --public. Є за замовчуванням; ця опція існує для зворотної сумісності.
--публічний
Це лише для використання історичного налагодження. Його використання може призвести до неправильного моделювання
згенеровані годинники.
Оголошує всі сигнали та модулі загальнодоступними. Це вимкне оптимізацію сигналу як
якби всі сигнали мали /*verilator public*/ коментарі та вбудовування. Це також обернеться
вимкнено вбудовування, ніби всі модулі мають /*verilator public_module*/, якщо модуль
спеціально ввімкнув його за допомогою /*verilator inline_module*/.
--report-unoptflat
Додаткова діагностика для попереджень UNOPTFLAT. Сюди входить для кожної петлі 10 найширших
змінних у циклі та 10 найбільш розгорнутих змінних у циклі. Це такі
кандидати для розбиття на кілька змінних, щоб розірвати цикл.
Крім того, створює файл GraphViz DOT з усіма сильно пов'язаними компонентами
всередині джерела, пов’язаного з кожним циклом. Це виробляється незалежно від того, чи
--установлено dump-tree. Такі графіки можуть допомогти в аналізі проблеми, але можуть бути дуже
дійсно великий.
Існують різні команди для перегляду та маніпулювання файлами DOT. Наприклад, точка
команду можна використовувати для перетворення файлу DOT у PDF для друку. Наприклад:
точка -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(filename);
os << main_time; // код користувача повинен зберігати мітку часу тощо
os << *topp;
}
void restore_model(const char* filenamep) {
VerilatedRestore os;
os.open(filename);
os >> main_time;
os >> *topp;
}
--sc
Визначає режим виводу SystemC; див. також --cc.
--статистика
Створює файл дампа зі статистикою дизайну в {prefix}__stats.txt.
--stats-vars
Створює більш детальну статистику, включаючи список усіх змінних за розміром (звичайний
--stats просто дає підрахунок). Дивіться --stats, що випливає з цього.
-sv Вказує, що функції мови SystemVerilog мають бути увімкнені; еквівалент "--мова
1800-2005". Цей параметр вибрано за замовчуванням, він існує для сумісності з
інші тренажери.
+systemverilotext+ext
Синонім до "+1800-2012ext+"ext.
-- верхній модуль верхнє ім'я
Коли вхідний Verilog містить більше одного модуля верхнього рівня, вказує ім’я
модуль Verilog верхнього рівня, щоб стати верхнім, і встановлює за замовчуванням для if --prefix
не використовується. Це не потрібно для стандартних конструкцій лише з одним верхом.
--слід
Додає код трасування сигналу до моделі. Verilator створить додаткові
{prefix}__Trace*.cpp файли, які потрібно скомпілювати. В додаток
verilated_vcd_sc.cpp (для трасування SystemC) або verilated_vcd_c.cpp (для обох) має бути
скомпільований і зв'язаний. Якщо використовувати згенеровані Verilator файли Makefiles, вони будуть
додано як цільові джерела для вас. Якщо ви не використовуєте make-файли Verilator, ви
потрібно буде додати їх у свій Makefile вручну.
Компіляція трасування може призвести до невеликих втрат продуктивності, навіть якщо
сигнали не вмикаються під час виконання моделі.
--глибина сліду рівні
Укажіть кількість глибинних рівнів, щоб увімкнути трасування, наприклад --trace-level 1 to
бачити лише сигнали верхнього рівня. За замовчуванням для всієї моделі. Використання невеликої кількості
зменшить видимість, але значно покращить час виконання та розмір файлу трасування.
--trace-max-array глибина
Рідко потрібні. Вкажіть максимальну глибину масиву сигналу, який може бути відстежений.
За замовчуванням встановлено значення 32, оскільки відстеження великих масивів може значно уповільнити відстежене моделювання.
--trace-max-width ширина
Рідко потрібні. Вкажіть максимальну бітову ширину сигналу, який може бути відстежений.
За замовчуванням встановлено значення 256, оскільки трасування великих векторів може значно уповільнити відстежене моделювання.
--no-trace-params
Вимкнути трасування параметрів.
--структури трасування
Увімкнути трасування, щоб показати назву упакованої структури, об’єднання та упакованого масиву,
а не простий комбінований упакований автобус. Через обмеження формату файлу VCD це може бути
призведе до значно повільнішого часу трасування та збільшення файлів трасування.
--слід-підкреслення
Увімкнути відстеження сигналів, які починаються з підкреслення. Зазвичай ці сигнали є
не виводиться під час трасування. Дивіться також --coverage-underscore.
-Uбуло
Не визначає даний символ препроцесора.
--розгорнути-рахувати петлі
Рідко потрібні. Вказує максимальну кількість ітерацій циклу, які можна розгорнути.
Дивіться також попередження BLKLOOPINIT.
--unroll-stmts заяви
Рідко потрібні. Вказує максимальну кількість операторів у циклі для цього циклу
бути розгорнутий. Дивіться також попередження BLKLOOPINIT.
--unused-regexp RegExp
Рідко потрібні. Вказує простий регулярний вираз з * і ? якщо назва сигналу збігається
приглушить попередження про НЕВИКОРИСТАННЯ. За замовчуванням "*невикористовується*". Встановлення значення "" вимикає
відповідність.
-V Показує детальну версію, включаючи інформацію про конфігурацію, скомпільовану
Verilator. (Подібно до 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-UNUsed -Wno-WIDTH"
плюс список, показаний для стилю Wno.
Настійно рекомендується очистити код, а не використовувати цю опцію
призначений лише для використання під час виконання тестових випадків коду, отриманого від третіх сторін.
-Вно-стиль
Вимкніть усі попередження, пов’язані зі стилем коду (зверніть увагу, що за замовчуванням вони вже є
інваліди). Це еквівалентно "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSIVE
-Wno-VARHIDDEN".
-Ні-фатально
При виявленні попереджень роздрукуйте їх, але не виходьте з симулятора.
Мати попереджувальні повідомлення в збірках неакуратно. Настійно рекомендується провести очищення
Ваш код, використовуйте вбудований lint_off або використовуйте прапорці -Wno-... замість використання цієї опції.
-Wwarn-повідомлення
Вмикає вказане попередження.
-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-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN".
--x-призначити 0
--x-призначити 1
--x-assign швидко (за замовчуванням)
--x-призначити унікальний
Керує значенням із двома станами, яке замінюється, коли зустрічається присвоєння X.
--x-assign=fast, за замовчуванням, перетворює всі X у те, що найкраще для продуктивності.
--x-assign=0 перетворює всі X в 0, а також швидко. --x-assign=1 перетворює всі X у
1s, це майже так само швидко, як 0, але, швидше за все, помилки скидання виявляться активними
спрацює логіка. --x-assign=unique викличе функцію для визначення значення, this
дозволяє рандомізувати всі X, щоб знайти помилки скидання, і є найповільнішим, але найбезпечнішим для
пошук помилок скидання в коді.
Якщо ви використовуєте --x-assign unique, ви можете використовувати генератор випадкових чисел, наприклад
що кожен запуск регресії отримує різну послідовність рандомізації. Використовуйте систему
srand48() або для Windows srand () функція для цього. Ви, напевно, також захочете
надрукуйте будь-які вибрані насіння та код, щоб увімкнути повторний запуск із тим самим насінням, щоб ви могли
відтворювати помилки.
Примітки. Ця опція застосовується лише до змінних, які явно присвоєні X у файлі
Вихідний код Verilog. Початкові значення годинників встановлені в 0, якщо --x-initial-edge не є
вказано. Початкові значення всіх інших змінних, що утримують стан, встановлюються як би
--x-assign unique було вказано.
--x-початковий край
Дозволяє емуляцію симуляторів, керованих подіями, які зазвичай викликають перевагу на a
перехід від X до 1 («posedge») або X до 0 («negedge»). Таким чином, наступний код,
де "rst_n" не ініціалізовано, встановить "res_n" на "1'b1", коли вперше встановлено "rst_n"
до нуля:
reg res_n = 1'b0;
завжди починається @(negedge rst_n).
if (rst_n == 1'b0) починається
res_n <= 1'b1;
кінець
кінець
У Verilator за замовчуванням неініціалізованим годинникам надається нульове значення, тому вище
Блок "завжди" не запускається.
Хоча це не є гарною практикою, є деякі конструкції, які покладаються на те, що XX 0 запускає a
"negedge", особливо в послідовностях скидання. Використання --x-initial-edge з Verilator дозволить
повторити цю поведінку. Це також гарантує, що XX 1 ініціює "posedge".
Примітки. Деякі користувачі повідомили, що використання цієї опції може вплинути на конвергенцію, і це
може знадобитися використовувати --converge-limit, щоб збільшити кількість конвергенції
ітерації. Це може бути ще одним ознакою проблем із змодельованим дизайном
повинні бути вирішені.
-y реж
Додайте каталог до списку каталогів, у яких слід шукати включені файли
або бібліотеки. Три прапори -y, +incdir і -I мають схожий ефект; +incdir і +y
є досить стандартними для інструментів Verilog, тоді як -I є псевдонімом для сумісності GCC.
Однак Verilator за замовчуванням використовує поточний каталог ("-y.") і будь-який вказаний --Mdir
ці шляхи за замовчуванням використовуються після будь-яких визначених користувачем каталогів. Це дозволяє '-y
"$(pwd)"" використовуватиметься, якщо для повідомлень про помилку потрібні абсолютні імена файлів
відносні імена файлів.
приклад C + + ВИКОНАННЯ
Ми скомпілюємо цей приклад на C++.
mkdir test_our
CD test_our
кіт < наш.в
модуль наш;
початковий початок $display("Hello World"); $finish; кінець
endmodule
EOF
кіт < sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main(int argc, char **argv, char **env) {
Verilated::commandArgs(argc, argv);
Vour* top = новий Vour;
while (!Verilated::gotFinish()) { top->eval(); }
видалити верх;
вихід(0);
}
EOF
Якщо ви встановили Verilator з джерел або tar-архів, але не в рамках операційної системи
системи (як RPM), спочатку потрібно вказати на комплект:
експорт VERILATOR_ROOT=/шлях/до/де/verilator/був/встановлено
експорт PATH=$VERILATOR_ROOT/bin:$PATH
Тепер ми запускаємо Verilator на нашому маленькому прикладі.
verilator -Wall --cc our.v --exe sim_main.cpp
Ми можемо побачити вихідний код у каталозі "obj_dir". Перегляньте розділ ФАЙЛИ нижче
описи деяких створених файлів.
ls -l каталог об'єктів
Потім ми можемо його компілювати
CD obj_dir
make -j -f Vour.mk Vour
(Верилятор включив правило компіляції за замовчуванням і правило посилання, оскільки ми використовували --exe і передали a
.cpp у командному рядку Verilator. Ви також можете написати власні правила компіляції, як
ми покажемо в розділі СИСТЕМА.)
А зараз ми його запускаємо
cd ..
obj_dir/Vour
І отримуємо як вихід
Привіт світ
- our.v:2: Verilog $finish
Справді, вам краще написати Makefile, щоб зробити все це за вас. Тоді, коли твій
зміни джерела автоматично виконає всі ці кроки. Дивіться каталог test_c у
розподіл для прикладу.
приклад СИСТЕМА ВИКОНАННЯ
Це приклад, схожий на наведений вище, але з використанням SystemC.
mkdir test_our_sc
CD test_our_sc
кіт < наш.в
модуль наш (clk);
вхідний clk; // Для початкової активації потрібен годинник
завжди @ (posedge clk)
почати $display("Hello World"); $finish; кінець
endmodule
EOF
кіт < sc_main.cpp
#include "Vour.h"
int sc_main(int argc, char **argv) {
Verilated::commandArgs(argc, argv);
sc_clock clk ("clk",10, 0.5, 3, правда);
Vour* верх;
top = new Vour("top"); // SP_CELL (верхня, Vour);
top->clk(clk); // SP_PIN (top, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
видалити верх;
вихід(0);
}
EOF
Якщо ви встановили Verilator з джерел або tar-архів, але не в рамках операційної системи
системи (як RPM), спочатку потрібно вказати на комплект:
експорт VERILATOR_ROOT=/шлях/до/де/verilator/був/встановлено
експорт 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 Вур -lsystemc
А зараз ми його запускаємо
cd ..
obj_dir/Vour
І ми отримуємо той самий результат, що й у прикладі C++:
Привіт світ
- our.v:2: Verilog $finish
Справді, вам краще використовувати Makefile, щоб зробити все це за вас. Тоді, коли ваше джерело
зміни він автоматично виконає всі ці кроки. Дивіться каталог test_sc у файлі
розповсюдження для прикладу.
БЕНЧМАРКУВАННЯ & ОПТИМІЗАЦІЯ
Для найкращої продуктивності запустіть Verilator з прапорцями "-O3 --x-assign=fast --noassert". The
Прапор -O3 потребує більшого часу компіляції, а --x-assign=fast може збільшити ризик
скинути помилки в торгівлі для продуктивності; дивіться наведену вище документацію щодо цих прапорів.
Незначні зміни коду Verilog також можуть дати великі виграші. У вас не повинно бути UNOPTFLAT
попередження від Verilator. Виправлення цих попереджень може призвести до величезних покращень; один користувач
виправили своє єдине попередження UNOPTFLAT, зробивши просту зміну фіксатора годинника, який використовується для воріт
годинників і підвищив продуктивність на 60%.
Крім того, продуктивність Verilated моделі в основному залежить від вашого компілятора C++ і
розмір кешу вашого процесора.
За замовчуванням оптимізацію для файлу 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 може спричинити надмірний час компіляції для великих проектів.
Якщо ви використовуєте власні make-файли, ви можете скомпілювати Verilated код
-DVL_INLINE_OPT=вбудований. Це буде вбудовувати функції, однак для цього потрібно, щоб усі cpp
файли збираються за один запуск компілятора.
Ви можете розкрити додаткові можливості налаштування, профілюючи код Verilog. Використовуйте
--profile-cfuncs у Verilator, потім -g -pg GCC. Потім ви можете запустити або oprofile або
gprof, щоб побачити, де в коді C++ витрачається час. Запустіть вихід gprof через
verilator_profcfunc і він розповість вам, які номери рядків Verilog, на яких більшість
витрачається час.
Коли закінчите, повідомте автору про результати. Мені подобається стежити за тим, як Verilator
порівнює та може запропонувати додаткові покращення.
Використовуйте verilator онлайн за допомогою служб onworks.net