Это команда verilator_bin_dbg, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
Verilator - преобразование кода Verilog в C ++ / SystemC
СИНТАКСИС
верилятор --help
верилятор --версия
verilator --cc [параметры] [верхний_уровень.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 [top_level.v] ...
ОПИСАНИЕ
Verilator преобразует синтезируемый (не поведенческий) код Verilog, а также некоторый синтез,
SystemVerilog и небольшое подмножество утверждений Verilog AMS в коде C ++ или SystemC. Это
не полный симулятор, а компилятор.
Verilator вызывается с параметрами, аналогичными GCC, Cadence Verilog-XL / NC-Verilog или
Система контроля версий Synopsys. Он читает указанный код Verilog, связывает его и, при необходимости, добавляет
код покрытия и отслеживания формы сигнала. Для форматов C ++ и SystemC он выводит .cpp и .h
файлы.
Файлы, созданные Verilator, затем компилируются с помощью C ++. Пользователь немного пишет на C ++
файл-оболочка, который создает экземпляр модуля верхнего уровня и передает это имя файла в
командная строка. Эти файлы C скомпилированы на C ++ и связаны с проверенными файлами.
Полученный исполняемый файл будет выполнять фактическое моделирование.
Для начала перейдите к «ПРИМЕР ВЫПОЛНЕНИЯ C ++».
АРГУМЕНТ РЕЗЮМЕ
Это краткое изложение аргументов Verilator. См. Подробные описания в
следующие разделы для получения дополнительной информации.
{file.v} Имена файлов верхнего уровня Verilog
{file.c / cc / cpp} Необязательные файлы C ++ для компиляции
{file.a / o / so} Необязательные файлы C ++ для ссылки
+ 1364-1995следующий + Используйте Verilog 1995 с расширением файла
+ 1364-2001следующий + Используйте Verilog 2001 с расширением файла
+ 1364-2005следующий + Используйте Verilog 2005 с расширением файла
+ 1800-2005след. + Используйте SystemVerilog 2005 с расширением файла
+ 1800-2009след. + Используйте SystemVerilog 2009 с расширением файла
+ 1800-2012след. + Используйте SystemVerilog 2012 с расширением файла
--assert Включить все утверждения
--autoflush Очистить потоки после всех отображений $
--bbox-sys Blackbox unknown $ системные вызовы
--bbox-unsup Blackbox неподдерживаемые языковые функции
--bin Переопределить двоичный файл Verilator
-CFLAGS Флаги компилятора C ++ для make-файла
--cc Создать вывод C ++
--cdc Анализ пересечения тактовых доменов
--clk Отметить указанный сигнал как часы
--компилятор Настроить на указанный компилятор C ++
--converge-limit Настроить время установления сходимости
--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 Параметры синтаксического анализа из файла относительно
-f Параметры синтаксического анализа из файла
--gdb Запускать Verilator под GDB в интерактивном режиме
--gdbbt Запустить Verilator под GDB для обратной трассировки
--help Показать эту справку
-Я Каталог для поиска включает
--if-depth Настроить предупреждение IFDEPTH
+ incdir + Каталог для поиска включает
--inhibit-sim Создать функцию для выключения сим
--inline-mult Встраивание модуля настройки
-LDFLAGS Флаги пре-объекта компоновщика для make-файла
-LDLIBS Флаги библиотеки компоновщика для make-файла
--язык Стандарт языка по умолчанию для синтаксического анализа
+ libext + + [ext] ... Расширения для поиска модулей
--lint-only Lint, но не выводить
--MMD Создать файлы зависимостей .d
--MP Создание фальшивых целей зависимости
- Мдир Имя каталога выходного объекта
--mod-prefix Имя, чтобы присоединиться к низшим классам
--no-clk Запретить пометить указанный сигнал как часы
--no-pins64 Не использовать vluint64_t для 33-64-битных сигнатур
--no-skip-identify Отключить пропуск идентичного вывода
+ notimingchecks игнорируется
-O0 Отключить оптимизацию
-O3 Оптимизация высокой производительности
-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 Указать типы для портов верхнего уровня
--pipe-filter Отфильтровать весь ввод через скрипт
--приставка Название класса верхнего уровня
--profile-cfuncs Именовать функции для профилирования
--приватная отладка; см. документы
- публичная отладка; см. документы
--report-unoptflat Дополнительная диагностика для UNOPTFLAT
--savable Включить сохранение-восстановление модели
--sc Создать вывод SystemC
--stats Создать файл статистики
--stats-vars Предоставляет статистику по переменным
-sv Включить синтаксический анализ SystemVerilog
+ systemverilogext + Синоним для + 1800-2012ext +
--top-модуль Имя модуля ввода верхнего уровня
--trace Включить создание формы волны
- глубина трассировки Глубина отслеживания
--trace-max-array Максимальная разрядность для трассировки
--trace-max-width Максимальная глубина массива для трассировки
--trace-params Включить параметры трассировки
--trace-Structs Включить имена структур трассировки
--trace-underscore Включить отслеживание _signals
-U Отменить определение препроцессора
--unroll-count Настроить максимальное количество итераций цикла
--unroll-stmts Настроить максимальный размер тела цикла
--unused-regexp Настройте НЕИСПОЛЬЗУЕМЫЕ сигналы ворса
-V Подробная версия и конфигурация
-v Библиотека Verilog
+ verilog1995ext + Синоним для + 1364-1995ext +
+ verilog2001ext + Синоним для + 1364-2001ext +
-Ошибка- Преобразовать предупреждение в ошибку
-Wfuture- Отключить предупреждения о неизвестных сообщениях
-Wno- Отключить предупреждение
-Wno-lint Отключить все предупреждения о ворсинах
-Wno-style Отключить все предупреждения стиля
-Wno-fatal Отключить фатальный выход при предупреждении
--x-присваивать Первоначально присвоить этому значению X
--x-initial-edge Включить начальные триггеры по фронту X-> 0 и X-> 1
-у Каталог для поиска модулей
АРГУМЕНТЫ
{файл.v}
Задает файл Verilog, содержащий проверяемый модуль верхнего уровня.
{file.c / .cc / .cpp / .cxx}
Задает дополнительные файлы C ++, которые необходимо связать с кодом Verilog. Если есть файлы C ++
указаны таким образом, Verilator будет включать правило make, которое генерирует модуль
исполняемый файл. Без файлов C ++ Verilator остановится на модуль__ALL.a библиотека,
и предположим, что вы продолжите связываться с правилами, которые пишете сами. Также
-CFLAGS вариант.
{file.a / .o / .so}
Определяет необязательные файлы объектов или библиотек для связывания с кодом Verilog в виде
сокращение для -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.
верилятор ... + 1364-1995ext + v av + 1364-2001ext + v bv
Эти флаги рекомендуются только для устаревших конструкций со смешанным языком, как предпочтительный вариант.
вариант - отредактировать код, чтобы исправить новые ключевые слова, или добавить соответствующие
"` begin_keywords ".
Внимание «begin_keywords» - это конструкция SystemVerilog, которая определяет Важно которые
набор ключевых слов должен быть распознан. Какой бы набор ни был выбран, семантика будет
те из SystemVerilog. В отличие от "+ 1364-1995ext +" и т. Д. Укажите оба синтаксиса. и
семантика, которая будет использоваться.
--утверждать
Включить все утверждения.
См. Также --x-assign и --x-initial-edge; установка "--x-assign unique" и / или
"--x-initial-edge" может быть желательным.
--автофлаш
После каждого $ display или $ fdisplay очищать выходной поток. Это гарантирует, что
сообщения появятся сразу, но могут снизить производительность; для лучшей производительности вызов
"fflush (stdout)" иногда в основном цикле C. По умолчанию отключено, что приведет к буферизации
вывод, который обеспечивается обычными вызовами C stdio.
--bbox-sys
Черный ящик для любых неизвестных системных задач или вызовов функций. Системные задачи будут просто
NOPed, и системные функции будут заменены на безразмерный ноль. Аргументы в пользу таких
функции будут анализироваться, но не проверяться иным образом. Это предотвращает ошибки, когда
линтинг при наличии вызовов PLI, специфичных для компании.
--bbox-unsup
Черный ящик, некоторые неподдерживаемые языковые функции, в настоящее время таблицы UDP, cmos и
Тран-гейт примитивы. Это может позволить линтингу остальной конструкции, даже если
присутствуют неподдерживаемые конструкции.
--bin имя файла
Редко нужно. Замените имя файла по умолчанию для самого Verilator. Когда зависимость
(.d) файл будет создан, это имя файла станет исходной зависимостью, так что
изменение этого двоичного файла потребует пересоздания выходных файлов.
-CFLAGS Флаги
Добавить указанные флаги компилятора C в сгенерированные make-файлы. Когда make запускается на
сгенерированный make-файл, они будут переданы компилятору C ++ (gcc / g ++ / msvc ++).
--cc
Задает C ++ без режима вывода SystemC; см. также --sc.
--CDC
Экспериментальный. Выполните некоторые проверки пересечения доменов часов и выдайте соответствующие предупреждения
(CDCRSTLOGIC), а затем выйдите; если необходимы предупреждения, отличные от предупреждений CDC, сделайте
второй запуск с --lint-only. Дополнительная предупреждающая информация также записывается в
файл {префикс} __ cdc.txt.
В настоящее время проверяются только те элементы, которые пропустили другие инструменты CDC; если вы заинтересованы в
добавление более традиционных проверок CDC, пожалуйста, свяжитесь с авторами.
--клк имя-сигнала
Иногда Verilator довольно сложно отличить тактовые сигналы от других.
сигналы данных. Иногда тактовые сигналы могут попадать в проверочный список
сигналы, определяющие необходимость дальнейшей оценки. Это сильно ухудшит
работоспособность проверенной модели.
С --clk , пользователь может указать корневые часы в модели, затем Verilator
пометит сигнал как синхронизатор и автоматически распространит атрибут clocker на
другие сигналы, полученные из этого. Таким образом Verilator постарается избежать
сигнал тактового генератора в контрольный список.
Обратите внимание, что имя-сигнала указывается в пути иерархии RTL. Например, v.foo.bar. Если
сигнал - это вход в верхний модуль, непосредственно имя сигнала. Если ты найдешь это
трудно найти точное имя, попробуйте использовать "/ * verilator clocker * /" в файле RTL, чтобы
отметьте сигнал напрямую.
--компилятор имя-компилятора
Включает настройки и обходные пути для указанного компилятора C ++.
лязг
Настройтесь на лязг. Это может снизить скорость выполнения, поскольку позволяет использовать несколько обходных путей.
чтобы избежать глупых жестко запрограммированных ограничений в clang. Это включает в себя разрушение глубоких структур
как для msvc, как описано ниже.
gcc Tune для Gnu C ++, хотя сгенерированный код должен работать практически на любом совместимом C ++
компилятор. В настоящее время по умолчанию.
мсвк
Настройтесь на Microsoft Visual C ++. Это может снизить скорость выполнения, поскольку позволяет
несколько обходных путей, чтобы избежать глупых жестко заданных ограничений в MSVC ++. Это включает
разбиение глубоко вложенных выражений в скобках на подвыражения, чтобы избежать
ошибка C1009 и разбиение глубоких блоков на функции, чтобы избежать ошибки C1061.
--converge-limit
Редко нужно. Задает максимальное количество итераций во время выполнения перед созданием
модель не смогла сойтись ошибка. По умолчанию 100.
- охват
Включает все формы покрытия, псевдоним для "--coverage-line --coverage-toggle
--coverage-user ".
- линия покрытия
Указывает, что должен быть вставлен базовый код анализа покрытия строки блока.
Анализ покрытия добавляет операторы в каждую точку изменения потока кода, которые являются
ветви операторов IF и CASE, надмножество нормального покрытия строки Verilog. В
в каждой такой ветви увеличивается уникальный счетчик. В конце теста счетчики
вместе с именем файла и номером строки, соответствующей каждому счетчику, записываются в
журналы / охват.pl.
Verilator автоматически отключает покрытие веток, в которых есть $ stop, т.к.
Предполагается, что ветки $ stop содержат проверку ошибок, которая не должна происходить. A / * верилятор
покрытие_block_off * / comment будет выполнять аналогичную функцию для любого кода в этом блоке
или ниже, или / * проверяющий охват_он / покрытие_off * / отключит покрытие вокруг линий
кода.
Примечание Verilator может перерасчитывать комбинаторные (не синхронизированные) блоки, когда эти блоки
получать сигналы, для которых отключено предупреждение UNOPTFLAT; для наиболее точного
результаты не отключают это предупреждение при использовании покрытия.
--coverage-toggle
Указывает, что должен быть вставлен код анализа покрытия переключения сигналов.
В каждый бит каждого сигнала в модуле вставлен счетчик. Счетчик будет
приращение при каждом изменении фронта соответствующего бита.
Сигналы, которые являются частью задач или блоков начала / конца, считаются локальными переменными и
не покрываются. Сигналы, начинающиеся с подчеркивания, целые или очень широкие
(> 256 бит общей памяти по всем измерениям) также не покрываются.
Иерархия сжимается, так что если модуль создается несколько раз,
покрытие будет суммироваться для этого бита по ВСЕМ экземплярам этого модуля с
тот же набор параметров. Модуль, созданный с разными значениями параметров, - это
считается другим модулем и будет учитываться отдельно.
Верилятор принимает минимально разумное решение о том, в какой тактовой области сигнал
переходит и ищет только ребра в этой области часов. Это означает, что края могут быть
игнорируется, если известно, что приемная логика никогда не сможет увидеть край. Этот
алгоритм может улучшиться в будущем. В конечном итоге покрытие может быть меньше, чем
что можно было бы увидеть, посмотрев на следы, но покрытие более точное
представление качества стимула в дизайне.
Во время стабилизации модели могут быть подсчитаны ребра около нулевого времени. Это хорошо
потренируйтесь обнулять все покрытие непосредственно перед тем, как отпустить сброс, чтобы предотвратить подсчет таких
поведение.
Пара / * verilator cover_off / on * / comment может использоваться вокруг сигналов, которые не
нужно переключить анализ, например ОЗУ и регистровые файлы.
--coverage-подчеркивание
Включите покрытие сигналов, начинающихся с подчеркивания. Обычно эти сигналы
не распространяется. См. Также --trace-underscore.
--coverage-пользователь
Включает функциональное покрытие, добавленное пользователем. В настоящее время все точки функционального покрытия
указываются с помощью SVA, который должен быть отдельно включен с помощью --assert.
Например, следующий оператор добавит точку покрытия с комментарием
"DefaultClock":
DefaultClock: свойство обложки (@ (posedge clk) cyc == 3);
-Dвар=ценностное
Определяет данный символ препроцессора без разрешения. Аналогично + define; + определить
является довольно стандартным для инструментов Verilog, в то время как -D является псевдонимом для совместимости с GCC.
--отлаживать
Выберите созданный для отладки образ Verilator (если доступен) и включите дополнительные внутренние
утверждения (эквивалентны "--debug-check"), отладочные сообщения (эквивалентны
«--debugi 4») и файлы дампа промежуточной формы (эквивалент «--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».
Любой язык, связанный с определенным расширением файла (см. Различные +Лангдоб +
options) будет использоваться вместо языка, указанного параметром --default-language.
Флаг --default-language рекомендуется только для устаревшего кода, использующего тот же
язык во всех исходных файлах, так как предпочтительным вариантом является редактирование кода для восстановления
новые ключевые слова или добавьте соответствующие "begin_keywords". Для устаревших дизайнов со смешанным языком
различные +ЛангСледует использовать параметры ext +.
Если язык не указан, либо этим флагом, либо +Лангext + options, затем последняя
Используется язык SystemVerilog (IEEE 1800-2012).
+ определить +вар=ценностное
+ определить +вар=ценностное +var2=value2...
Определяет данный символ препроцессора или несколько символов, если они разделены плюсами.
Аналогично -D; + define является стандартным для всех инструментов Verilog, в то время как -D - это псевдоним
для совместимости с GCC.
--дамп-дерево
Редко нужно. Разрешить запись файлов отладки .tree с уровнем дампинга 3, который сбрасывает файлы отладки.
стандартные критические стадии. Подробнее о формате см. Во внутреннем устройстве Verilator.
руководство по эксплуатации. --dump-tree включается автоматически с помощью --debug, поэтому "--debug
--no-dump-tree "может быть полезным, если файлы дампа большие и нежелательные.
--dump-treei
--dump-treei-
Редко требуется - для использования разработчиками. Установите глобальный уровень выгрузки внутреннего дерева на
определенный уровень сброса или установите указанный исходный файл Verilator на указанный
уровень выгрузки дерева (например, "--dump-treei-V3Order 9"). Уровень 0 отключает дампы и является
эквивалентно "--no-dump-tree". Уровень 9 позволяет сбросить каждый этап.
-E Предварительно обрабатывать исходный код, но не компилировать, как с 'gcc -E'. Вывод написан
к стандарту. Остерегайтесь включения сообщений отладки, так как они также попадут в
стандартный выход.
- предел ошибки
После того, как будет обнаружено такое количество ошибок или предупреждений, выйдите. По умолчанию 50.
--исполняемый
Создайте исполняемый файл. Вам также потребуется передать дополнительные файлы .cpp в
командная строка, реализующая основной цикл для вашей симуляции.
-F файл
Прочтите указанный файл и действуйте так, как если бы весь текст внутри него был указан как команда
параметры линии. Все относительные пути указываются относительно каталога, содержащего
указанный файл. См. Также -f. Примечание -F является стандартным для всех инструментов Verilog.
-f файл
Прочтите указанный файл и действуйте так, как если бы весь текст внутри него был указан как команда
параметры линии. Любые относительные пути относятся к текущему каталогу. Смотрите также
-F. Примечание -f является стандартным для всех инструментов Verilog.
Файл может содержать // комментарии, которые игнорируются до конца строки. Любая переменная $ VAR,
$ (VAR) или $ {VAR} будут заменены указанной переменной среды.
--gdb
Запустите Verilator под интерактивным GDB (или переменной среды VERILATOR_GDB
значение) сеанс. См. Также --gdbbt.
--gdbbt
Если указан --debug, запустите Verilator под процессом GDB и распечатайте обратную трассировку.
при выходе, затем немедленно выйдите из GDB. Без --debug или если GDB не работает,
этот флаг игнорируется. Предназначен для удобного создания трассировок пользователями; иначе
увидеть флаг --gdb.
--Помогите
Отображает это сообщение и версию программы и закрывается.
-Iдиректория
Увидимся.
--if-глубина ценностное
Редко нужно. Установите глубину, на которой будет срабатывать предупреждение IFDEPTH, по умолчанию 0
что отключает это предупреждение.
+ incdir +директория
Увидимся.
--inhibit-sim
Редко нужно. Создайте функцию «ignitSim (bool)» для включения и отключения оценки.
Это позволяет тестовой среде верхнего уровня отключать модули, которые не важны для
данное моделирование, без необходимости перекомпилировать или изменять модули SystemC
создан.
--inline-мульт ценностное
Настроить встраивание модулей. Значение по умолчанию 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. Note + libext + довольно стандартен для Verilog
инструменты. По умолчанию .v и .sv.
--lint-только
Проверяйте файлы только на предмет нарушения целостности, не создавайте никаких других выходных данных.
Вам также может понадобиться опция -Wall для включения сообщений, которые считаются стилистическими.
и не включен по умолчанию.
Если проект не подлежит полной проверке, см. Также --bbox-sys и
Параметры --bbox-unsup.
--ММД
Разрешить создание файлов зависимостей .d, используемых для обнаружения зависимостей, аналогично
gcc -MMD option. По умолчанию для отключения используйте --no-MMD.
- МП
При создании файлов зависимостей .d с параметром --MMD создавайте фальшивые цели. Подобно gcc -MP
опцию.
- Мдир каталог
Задает имя каталога объекта Make. Все сгенерированные файлы будут размещены
в этом каталоге. Если не указано, используется obj_dir. Каталог создается, если
его не существует, а родительские каталоги существуют; в противном случае вручную создайте Mdir
перед вызовом Verilator.
--mod-префикс имя
Задает имя, добавляемое ко всем классам нижнего уровня. По умолчанию то же, что и
--приставка.
--no-clk
Предотвратить пометку указанного сигнала как часы. См. "--Clk".
- нет контактов64
Обратно совместимый псевдоним для "--pins-bv 33".
--no-skip-идентичный
Редко нужно. Отключает пропуск выполнения Verilator, если все исходные файлы
идентичны, и все выходные файлы существуют с более новыми датами.
+ notimingchecks
Игнорируется для совместимости с другими симуляторами.
-O0 Отключает оптимизацию модели.
-O3 Включает медленную оптимизацию кода, генерируемого самим Verilator (в отличие от
"-CFLAGS -O3", который влияет на оптимизацию компилятора C. -O3 может уменьшить симуляцию
время выполнения за счет времени компиляции. В настоящее время это устанавливает --inline-mult -1.
-Oписьмо-оптимизация
Редко нужно. Включает или отключает определенные оптимизации с оптимизацией
выбран на основе пройденного письма. Строчная буква отключает оптимизацию,
заглавные буквы включают это. Это предназначено только для отладки; увидеть источник
код для зависимых от версии отображений оптимизаций на буквы -O.
-о
Укажите имя финального исполняемого файла, созданного при использовании --exe. По умолчанию
- префикс, если не указан.
--no-order-lock-delay
Редко нужно. Отключает исправление ошибки для заказа включений часов с задержкой
задания. Этот флаг следует использовать только по предложению разработчиков.
- выход-разделение байт
Позволяет разбивать выходные файлы .cpp / .sp на несколько выходных файлов. Когда файл C ++
превышает указанное количество операций, новый файл будет создан при следующем
граница функции. Кроме того, все медленные процедуры будут помещены в файлы __Slow.
Это ускоряет компиляцию, поскольку оптимизацию можно отключить в медленных процедурах,
а остальные файлы можно компилировать на параллельных машинах. Использование --output-split
должно иметь лишь незначительное влияние на производительность. С GCC 3.3 на Opteron 2 ГГц,
--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.
--пины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" получается
в 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.
--pipe-фильтр команду
Редко нужен и экспериментальный. Verilator создаст указанную команду как
канал подпроцесса, чтобы команда могла выполнять пользовательские изменения в коде Verilog
прежде, чем он достигнет Verilator.
Перед чтением каждого файла Verilog Verilator передает имя файла в подпроцесс '
stdin с "read_verilog" "'. Затем фильтр может прочитать файл и выполнить
любая фильтрация, которую он желает, и передает новое содержимое файла обратно в Verilator на stdout
с 'Content-Length'. Вывод в stderr из фильтра проходит через Verilator
stdout, и если фильтр выходит с ненулевым статусом, Verilator завершает работу. Увидеть
t / t_pipe_filter для примера.
Чтобы отладить вывод фильтра, попробуйте использовать параметр -E, чтобы увидеть предварительно обработанный вывод.
--приставка имя
Задает имя класса верхнего уровня и make-файла. По умолчанию перед
имя переключателя --top-module или буква V перед первым именем файла Verilog
прошло в командной строке.
--profile-cfuncs
Измените созданные функции C ++ для поддержки профилирования. Функции будут
минимизирован, чтобы содержать один "базовый" оператор, обычно один всегда блок или провод
утверждение. (Обратите внимание, что это замедлит исполняемый файл примерно на 5%.) Кроме того,
к имени функции добавляется суффикс с базовым именем модуля Verilog и номером строки
заявление пришло из. Это позволяет соотносить отчеты gprof или oprofile с
исходные заявления Verilog.
--частный
Напротив --public. По умолчанию; эта опция существует для обратной совместимости.
- общественный
Это только для исторической отладки. Его использование может привести к неправильному моделированию
генерируемые часы.
Объявляет все сигналы и модули общедоступными. Это отключит оптимизацию сигнала, поскольку
если бы все сигналы имели / * общедоступный проверяющий * / комментарии и встраивание. Это также превратится
выключить встраивание, как если бы все модули имели / * verilator public_module * /, если только модуль
специально включил его с помощью / * verilator inline_module */.
--report-unoptflat
Дополнительная диагностика предупреждений UNOPTFLAT. Это включает в себя 10 самых широких петель для каждой петли.
переменных в цикле и 10 наиболее разветвленных переменных в цикле. Эти
кандидаты на разбиение на несколько переменных, чтобы разорвать цикл.
Кроме того, создает DOT-файл GraphViz со всеми прочно связанными компонентами.
внутри источника, связанного с каждым циклом. Это производится независимо от того,
--dump-tree установлено. Такие графики могут помочь в анализе проблемы, но могут быть очень полезны.
действительно большой.
Существуют различные команды для просмотра и управления файлами DOT. Например, 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) {
VerilatedСохранить ОС;
os.open (filenamep);
os << main_time; // код пользователя должен сохранять отметку времени и т. д.
os << * topp;
}
void restore_model (const char * filenamep) {
VerilatedRestore ОС;
os.open (filenamep);
os >> main_time;
os >> * topp;
}
--sc
Задает режим вывода SystemC; см. также --cc.
--статистика
Создает дамп-файл со статистикой по дизайну в {prefix} __ stats.txt.
--stats-vars
Создает более подробную статистику, включая список всех переменных по размеру (простой
--stats просто дает счет). См. --Stats, что подразумевается под этим.
-sv Указывает, что функции языка SystemVerilog должны быть включены; эквивалентно "--language"
1800-2005 ". Этот вариант выбран по умолчанию, он существует для совместимости с
другие тренажеры.
+ systemverilogext +Ext
Синоним "+ 1800-2012ext +"Ext.
--top-модуль имя
Когда ввод Verilog содержит более одного модуля верхнего уровня, указывает имя
модуль Verilog верхнего уровня становится верхним и устанавливает значение по умолчанию для if --prefix
не используется. В стандартных конструкциях с одной крышкой этого не требуется.
--след
Добавляет в модель код отслеживания формы сигнала. Verilator сгенерирует дополнительные
{prefix} __ Трассировка файлов * .cpp, которые необходимо скомпилировать. Кроме того
verilated_vcd_sc.cpp (для трассировок SystemC) или verilated_vcd_c.cpp (для обоих) должны быть
скомпилирован и связан. Если используются файлы Makefile, созданные Verilator, они будут
добавлены в качестве исходных целей для вас. Если вы не используете make-файлы Verilator, вы
нужно будет добавить их в ваш Makefile вручную.
Компилирование трассировки может привести к небольшой потере производительности, даже если
осциллограммы не включаются во время выполнения модели.
- глубина трассировки уровни
Укажите количество уровней глубины для включения трассировки, например от --trace-level 1 до
видеть только сигналы верхнего уровня. По умолчанию используется для всей модели. Использование небольшого числа
уменьшит видимость, но значительно улучшит время выполнения и размер файла трассировки.
--trace-max-массив глубина
Редко нужно. Укажите максимальную глубину массива сигнала, который может быть отслежен.
По умолчанию 32, так как трассировка больших массивов может значительно замедлить отслеживаемое моделирование.
--trace-max-ширина ширина
Редко требуется. Укажите максимальную разрядность сигнала, который может быть отслежен.
По умолчанию 256, поскольку трассировка больших векторов может значительно замедлить моделирование трассировки.
--no-параметры трассировки
Отключить отслеживание параметров.
--trace -structs
Включите трассировку, чтобы отображать имена полей упакованной структуры, объединения и упакованного массива,
а не простой комбинированный упакованный автобус. Из-за ограничений формата файла VCD это может
приводят к значительно более медленному времени трассировки и большему размеру файлов трассировки.
- трассировка-подчеркивание
Включите отслеживание сигналов, начинающихся с подчеркивания. Обычно эти сигналы
не выводится во время трассировки. См. Также --coverage-underscore.
-Uвар
Отменяет определение данного символа препроцессора.
--unroll-count петли
Редко нужно. Задает максимальное количество итераций цикла, которые можно развернуть.
См. Также предупреждение BLKLOOPINIT.
--unroll-stmts отчетность
Редко нужно. Задает максимальное количество операторов в цикле для этого цикла.
развернуться. См. Также предупреждение BLKLOOPINIT.
--unused-regexp RegExp
Редко нужно. Задает простое регулярное выражение с помощью * и? что если имя сигнала совпадает
подавит предупреждение UNUSED. По умолчанию "* не используется *". Установка "" отключает
соответствия.
-V Показывает подробную версию, включая информацию о конфигурации, скомпилированную в
Верилятор. (Аналогично perl -V.)
-v имя файла
Считайте имя файла как библиотеку Verilog. Любые модули в файле могут использоваться для
разрешить создание экземпляров ячеек в модуле верхнего уровня, иначе игнорируется. Примечание -v справедливо
стандарт для инструментов Verilog.
+ verilog1995ext +Ext
+ verilog2001ext +Ext
Синонимы к слову «+ 1364-1995ext +»Ext и "+ 1364-2001ext +"Ext соответственно
-Стена
Включить все предупреждения, включая предупреждения в стиле кода, которые обычно отключаются
по умолчанию.
-Ошибка-сообщение
Преобразуйте указанное предупреждающее сообщение в сообщение об ошибке. Обычно это
отговаривать пользователей от нарушения важных правил для всего сайта, например
"-Ошибка-NOUNOPTFLAT".
-Wбудущее-сообщение
Редко нужно. Подавить неизвестные комментарии или предупреждения 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-стиль
Отключите все предупреждающие сообщения, связанные со стилем кода (обратите внимание, что по умолчанию они уже
отключен). Это эквивалентно -Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSED
-Wno-VARHIDDEN ".
-Без смертельного исхода
При обнаружении предупреждений распечатайте их, но не выходите из симулятора.
Предупреждающие сообщения в сборках неаккуратны. Настоятельно рекомендуется очистить
в вашем коде используйте встроенный lint_off или флаги -Wno -... вместо использования этой опции.
-Предупреждать-сообщение
Включает указанное предупреждающее сообщение.
-Wwarn-ворс
Включить все предупреждающие сообщения, связанные с линтами (обратите внимание, что по умолчанию они уже включены),
но не влияют на сообщения стиля. Это эквивалентно "-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"
НАЗНАЧАЕМЫЙ -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN ".
--x-присвоить 0
--x-присвоить 1
--x-assign fast (по умолчанию)
--x-присваивать уникальный
Управляет значением с двумя состояниями, которое заменяется при обнаружении присвоения X.
--x-assign = fast, по умолчанию, преобразует все X в то, что лучше всего для производительности.
--x-assign = 0 преобразует все X в 0, и это тоже быстро. --x-assign = 1 преобразует все X в
1 с, это почти так же быстро, как 0, но с большей вероятностью ошибки сброса будут обнаружены как активный высокий
логика загорится. --x-assign = unique вызовет функцию для определения значения, это
позволяет рандомизировать все X для поиска ошибок сброса и является самым медленным, но безопасным для
поиск ошибок сброса в коде.
Если вы используете --x-assign unique, вы можете добавить свой генератор случайных чисел, например
что каждый прогон регрессии получает различную последовательность рандомизации. Используйте систему
srand48 () или для Windows srand () функция для этого. Вы, вероятно, также захотите
распечатайте любые выбранные семена и код, чтобы разрешить повторный запуск с тем же семенем, чтобы вы могли
воспроизводить ошибки.
Примечания. Эта опция применяется только к переменным, которые явно присвоены X в
Исходный код Verilog. Начальные значения часов устанавливаются на 0, если --x-initial-edge не установлен.
указано. Начальные значения всех других переменных сохранения состояния устанавливаются как если бы
--x-assign unique был указан.
--x-начальный край
Включает эмуляцию симуляторов, управляемых событиями, которые обычно запускают фронт на
переход от X к 1 ("posedge") или X к 0 ("negedge"). Таким образом, следующий код,
где "rst_n" неинициализировано, установит "res_n" в "1'b1", когда "rst_n" установлен впервые
к нулю:
рег res_n = 1'b0;
всегда @ (negedge rst_n) начинать
если (rst_n == 1'b0) начать
res_n <= 1'b1;
конец
конец
В Verilator по умолчанию неинициализированным часам присваивается нулевое значение, поэтому приведенное выше
Блок «всегда» не сработает.
Хотя это не очень хорошая практика, есть некоторые схемы, в которых XX 0 запускает
"negedge", особенно в последовательностях сброса. Использование --x-initial-edge с Verilator приведет к
воспроизвести это поведение. Это также гарантирует, что XX 1 вызовет «позу».
Примечания. Некоторые пользователи сообщают, что использование этого параметра может повлиять на сходимость, и что
может потребоваться использовать --converge-limit для увеличения числа сходимостей
итераций. Это может быть еще одним признаком проблем с смоделированным дизайном, который
должна быть решена.
-y директория
Добавьте каталог в список каталогов, в которых следует искать включаемые файлы.
или библиотеки. Три флага -y, + incdir и -I имеют аналогичный эффект; + incdir и + y
являются стандартными для инструментов Verilog, в то время как -I является псевдонимом для совместимости с GCC.
По умолчанию Verilator использует текущий каталог ("-y.") И любой указанный --Mdir, хотя
эти пути по умолчанию используются после любых указанных пользователем каталогов. Это позволяет '-y
"$ (pwd)" 'будет использоваться, если для сообщений об ошибках требуются абсолютные имена файлов, а не
относительные имена файлов.
ПРИМЕР C + + ИСПОЛНЕНИЕ
Мы скомпилируем этот пример в C ++.
mkdir test_our
компакт-диск test_our
кошка < наш.v
модуль наш;
начальный begin $ display ("Hello World"); $ отделка; конец
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;
в то время как (! Verilated :: gotFinish ()) {top-> eval (); }
удалить верхнюю часть;
выход(0);
}
EOF
Если вы установили Verilator из исходных кодов или из архива, но не как часть вашей операционной
системы (как RPM), сначала нужно указать на комплект:
экспорт VERILATOR_ROOT = / путь / к / где / verilator / был / установлен
экспорт PATH = $ VERILATOR_ROOT / bin: $ PATH
Теперь мы запускаем Verilator на нашем маленьком примере.
verilator -Wall --cc наш.v --exe sim_main.cpp
Мы можем увидеть исходный код в каталоге «obj_dir». См. Раздел ФАЙЛЫ ниже для
описания некоторых из созданных файлов.
ls -l obj_dir
Затем мы можем скомпилировать его
компакт-диск obj_dir
make -j -f Вур.мк Вур
(Verilator включил правило компиляции по умолчанию и правило ссылки, так как мы использовали --exe и передали
.cpp файл в командной строке Verilator. Вы также можете написать свои собственные правила компиляции, как
мы покажем в разделе SYSTEMC.)
И теперь мы запускаем это
CD ..
obj_dir / Vour
И на выходе получаем
Привет мир
- our.v: 2: Verilog $ finish
На самом деле, вам лучше написать Makefile, который сделает все это за вас. Затем, когда ваш
При изменении источника все эти шаги будут выполнены автоматически. См. Каталог test_c в
дистрибутив для примера.
ПРИМЕР СИСТЕМА ИСПОЛНЕНИЕ
Это пример, аналогичный приведенному выше, но с использованием SystemC.
mkdir test_our_sc
компакт-диск test_our_sc
кошка < наш.v
модуль наш (clk);
input clk; // Часы необходимы для начальной активации
всегда @ (posedge clk)
begin $ display («Привет, мир»); $ отделка; конец
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 = новый Vour ("верх"); // SP_CELL (вверху, Vour);
сверху-> clk (clk); // SP_PIN (верх, clk, clk);
пока (! Verilated :: gotFinish ()) {sc_start (1, SC_NS); }
удалить верхнюю часть;
выход(0);
}
EOF
Если вы установили Verilator из исходных кодов или из архива, но не как часть вашей операционной
системы (как RPM), сначала нужно указать на комплект:
экспорт VERILATOR_ROOT = / путь / к / где / verilator / был / установлен
экспорт PATH = $ VERILATOR_ROOT / bin: $ PATH
Теперь мы запускаем Verilator на нашем маленьком примере.
verilator -Wall --sc наш.в
Затем мы можем скомпилировать его
make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o проверено.o
И связать с SystemC. Обратите внимание, что ваш путь к библиотекам может отличаться в зависимости от
операционная система.
экспорт SYSTEMC_LIBDIR = / путь / к / где / libsystemc.a / существует
экспорт 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 проверено.o
-o Для вас -lsystemc
И теперь мы запускаем это
CD ..
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, внеся простое изменение в защелку часов, используемую для ворот
clocks и улучшила производительность на 60%.
Кроме того, производительность проверенной модели зависит в основном от вашего компилятора C ++ и
размер кешей вашего процессора.
По умолчанию оптимизация файла lib / verilated.mk отключена. Это для
преимущества для новых пользователей, так как это сокращает время компиляции за счет времени выполнения. Добавить
оптимизация по умолчанию, установите одну из трех переменных: OPT, OPT_FAST или OPT_SLOW
lib / verilated.mk. Или используйте параметр -CFLAGS и / или -LDFLAGS в команде верилятора.
строка для передачи флагов непосредственно компилятору или компоновщику. Или, только на один прогон, пройдите
их в командной строке сделать:
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 и более ранние версии содержат ошибки оптимизации.
обнаружение наложения указателей, что может привести к двукратной потере производительности.
Если вы будете запускать много симуляций на одной компиляции, исследуйте обратную связь, управляемую
компиляция. С GCC, используя -fprofile-arcs, тогда -fbranch-вероятности даст
еще 15% или около того.
Современные компиляторы также поддерживают оптимизацию времени компоновки (LTO), что может помочь, особенно если
вы ссылаетесь в коде DPI. Чтобы включить LTO в GCC, передайте "-flto" как в компиляции, так и в ссылке.
Примечание. LTO может вызвать чрезмерное время компиляции для больших проектов.
Если вы используете свои собственные make-файлы, вы можете скомпилировать проверенный код с помощью
-DVL_INLINE_OPT = встроенный. Это будет встроенными функциями, однако для этого необходимо, чтобы все cpp
файлы компилируются за один запуск компилятора.
Вы можете открыть для себя дополнительные возможности настройки, профилировав код Verilog. Использовать
Verilator --profile-cfuncs, затем GCC -g -pg. Затем вы можете запустить либо oprofile, либо
gprof, чтобы увидеть, где в коде C ++ тратится время. Запустите вывод gprof через
verilator_profcfunc, и он сообщит вам, какие номера строк Verilog, на которых большинство
время тратится.
Когда закончите, сообщите автору о результатах. Мне нравится следить за тем, как Verilator
сравнивает и может предложить дополнительные улучшения.
Используйте verilator_bin_dbg в Интернете с помощью сервисов onworks.net