~ cd 4. флаги командной строки iverilog
Команда iverilog — это компилятор/источник, который принимает входные данные Verilog и генерирует выходной формат, будь то файл симуляции или результаты синтеза.
Общие
Эти флаги влияют на общее поведение компилятора.
- -c
Этот флаг выбирает командный файл для использования. Командный файл — это альтернатива написанию длинной командной строки с большим количеством имен файлов и флагов компилятора. Дополнительную информацию см. на странице Формат командного файла. - -d <флаг>
Включить вывод отладки компилятора. Это вспомогательные средства для отладки Icarus Verilog, и этот флаг не часто используется. Флаг представляет собой один из этих классов отладки:- scope
- eval_tree
- elaborate
- synth2
- -g <флаг генерации>
Это язык компилятора, определяющий язык и расширения, которые будут использоваться при компиляции. Уровень языка может быть выбран с помощью селектора основных уровней, а также с помощью управления различными функциями. Различные флаги «-g» могут быть скомпилированы. Например, чтобы получить Verilog 2001 без указания супопрта, используйте «-g2001 -gno-specify». Поддерживаются следующие флаги:- 1995
Этот флаг позволяет использовать стандарт IEEE1364-1995. - 2001
Этот флаг включает стандарт IEEE1364-2001. - 2001-noconfig
Этот флаг включает стандарт IEEE1364-2001 с отключенной поддержкой файлов конфигурации. Это исключает ключевые слова файла конфигурации из языка и помогает компилировать некоторые программы, написанные для более старой версии 2001. - 2005
Этот флаг включает стандарт IEEE1364-2005. По умолчанию он включен после версии 0.9. - 2009
Этот флаг включает стандарт IEEE1800-2009, который включает SystemVerilog. Поддержка SystemVerilog отсутствует в версии 0.9 и более ранних. Она появилась в git master в ноябре 2009 года. Фактическая поддержка SystemVerilog продолжается. - 2012
Этот флаг включает стандарт IEEE1800-2012, который включает SystemVerilog. - verilog-ams
Этот флаг включает функции Verilog-AMS, которые поддерживаются Icarus Verilog. (Этот флаг является новым с 5 мая 2008 года). - assertions/supported-assertions/no-assertions
Включить(assertions) или отключить(no-assertions) объявления SystemVerilog. Если включено, объявления участвуют этапе элаборации. Если опция отключена, объявления интерпретируются, но игнорируются. Опция supported-assertions включает только те объявления, которые в данный момент поддерживаются компилятором. - specify/no-specify
Включить(specify) или отключить(no-specify) поддержку контроля синхронизации блоков specify. Если опция отключена, блоки specify интерпретируются, но игнорируются. Если включена, блоки specify вызывают активный путь синхронизации и проверки синхронизации. - std-include/no-std-include
Включает(std-include) или отключает(no-std-include) поиск стандартного каталога include при установке после всех других явных каталогов include. Этот стандартный каталог include является удобным местом для установки стандартных заголовочных файлов, которые могут быть включены в программу Verilog. - relative-include/ no-relative-include
Включает(relative-include) или отключает(no-relative-include) добавление каталога локальных файлов в начало пути поиска включаемых файлов. Это позволяет включать файлы относительно текущего файла. - xtypes/no-xtypes
Включить(xtypes) или отключить(no-xtypes) поддержку расширенных типов. Включение типов позволяет использовать новые типы и синтаксис типов, которые являются расширениями Icarus Verilog. - io-range-error/no-io-range-error
Если включено(io-range-error), диапазон для порта и любого связанного с ним объявления сети должен точно совпадать. Если отключено, скалярному порту разрешено иметь объявление сети с диапазоном (устаревшее использование). Для такой комбинации будет выведено предупреждение. Все остальные перестановки по-прежнему считаются ошибкой. - strict-ca-eval/no-strict-ca-eval
Стандарт требует, чтобы при изменении значения любого входа в выражение непрерывного присваивания все выражение было переоценено. По умолчанию части выражения, которые не зависят от измененного входного значения (значений), не переоцениваются. Если выражение содержит вызов функции, которая зависит не только от входных значений или имеет побочные эффекты, результирующее поведение будет отличаться от требуемого стандартом. Включение strict-ca-eval обеспечит поведение, соответствующее стандарту (с некоторым снижением производительности). - strict-expr-width/no-strict-expr-width
Включает(strict-expr-width) или отключает(no-strict-expr-width) строгое соответствие стандартным правилам определения битовой длины выражения. При отключении RHS присваивания параметра оценивается как выражение без потерь, так же как и любое выражение, содержащее безразмерное константное число, а безразмерные константные числа не усекаются до целой ширины. - shared-loop-index/no-shared-loop-index
Включает(shared-loop-index) или отключает(no-shared-loop-index) исключение управляющих переменных цикла for из неявных списков event_expression. Если эта опция включена, то если управляющая переменная for-loop (индекс цикла) используется только внутри оператора for-loop, компилятор не будет включать ее в неявный список event_expression, который он рассчитывает для этого оператора или любого окружающего оператора. Это позволяет использовать одну и ту же управляющую переменную в нескольких процессах без риска попасть в бесконечный цикл, вызванный тем, что каждый процесс запускает все остальные процессы, использующие ту же переменную. Для строгого соответствия стандартам это поведение должно быть отключено.
- 1995
- -i
Игнорировать отсутствующие модули. Обычно ошибка возникает, если экземпляр модуля ссылается на неопределенный модуль. Эта опция заставляет компилятор пропустить такое объявления экземпляра. Она также не позволит компилятору возвращать ошибку, если отсутствуют модули верхнего уровня. Это позволяет использовать компилятор для проверки незавершенных проектов на наличие ошибок.
ПРИМЕЧАНИЕ: Флаг «-i» был добавлен в версии 11.0. - -L <путь>
Добавляет указанный каталог в список путей, используемых для поиска модулей VPI. По умолчанию путь включает только каталог установки модуля system.vpi, но этот флаг может добавлять и другие каталоги. Допускается несколько путей, и поиск будет производиться в порядке их следования.
ПРИМЕЧАНИЕ: Флаг «-L» был добавлен в версии 11.0. - -l <путь>
Добавляет указанный файл в список исходных файлов для компиляции, но помечает его как файл библиотеки. Все модули, содержащиеся в этом файле, будут рассматриваться как библиотечные модули и участвовать в этапе элаборации только в том случае, если они объявлены экземпляром модуля другими модулями в проекте.
ПРИМЕЧАНИЕ: Флаг «-l» является новым по состоянию на 2 октября 2016 года. Он будет доступен в релизах и снэпшотах, выпущенных после этой даты. - -M=
Записать в файл, указанный путем, список файлов, которые участвуют в компиляции проекта.- Если аргумент mode равен all или prefix, то сюда входят файлы, включаемые директивами include, файлы, автоматически загружаемые библиотечной поддержкой, а также файлы, явно указанные пользователем.
- Если аргумент mode равен include, перечисляются только файлы, включенные директивами include.
- Если аргумент mode равен module, перечисляются только файлы, указанные пользователем или автоматически загружаемые библиотечной поддержкой. Выводится по одному имени файла в строке, без пробелов в начале и в конце строки.
Если аргумент mode равен prefix, то файлы, включаемые директивами include, получают префикс «I », а остальные файлы — префикс «M ».
- -m<модуль>
Добавляет этот модуль в список модулей VPI, загружаемых при моделировании. Можно указать много модулей, и все они будут загружены в указанном порядке. Системный модуль является неявным и всегда включается (и загружается последним).
Если указанное имя включает хотя бы один символ каталога, предполагается, что он является префиксом пути к модулю, в противном случае модуль ищется в путях, указанных предшествующими опциями -L, а если он там не найден, то в базовом каталоге iverilog.
ПРИМЕЧАНИЕ: Флаг «-m» был добавлен в версии 11.0. - -o <путь>
Указать выходной файл. — это имя файла, в котором будет храниться вывод. По умолчанию используется «a.out». - -S
Активировать синтез. Этот флаг указывает компилятору выполнить синтез до вызова генератора кода. Этот флаг редко используется явно, и некоторые генераторы кода будут включать его неявно. - -u
Рассматривать каждый исходный файл как отдельную единицу компиляции (как определено в SystemVerilog). Если компиляция выполняется для поколения IEEE1364, это просто сбросит все директивы компилятора (включая макроопределения) перед обработкой каждого нового файла.
ПРИМЕЧАНИЕ: Флаг «-u» был добавлен в версии 11.0. - -v
Быть подробным. Выводить информацию об авторских правах, сообщения о ходе выполнения и некоторые временные данные о различных этапах компиляции.
(Новое в снимках после 2014-12-16) Если выбранная цель — vvp, ключ -v добавляется к строке shebang в выходном файле компилятора, так что прямое выполнение выходного файла компилятора включит вывод сообщений verbose в vvp. Этой лишней многословности можно избежать, используя команду vvp для косвенного выполнения выходного файла компилятора. - -V
Вывести информацию о версии. Это позволяет пропустить всю компиляцию. Просто выведите информацию о версии, включая сведения о версиях различных компонентов компилятора. - -R
Вывести пути выполнения компилятора. Это может быть полезно, например, для поиска пути включения vpi_user.h. - -W<класс предупреждения>
Включить/выключить предупреждения. Ко всем типам предупреждений (кроме «all») можно добавить префикс no-, чтобы отключить это предупреждение.- all
Это позволяет включить почти все доступные предупреждения. Если говорить более конкретно, то включаются следующие предупреждения:- Wanachronisms
- Wimplicit
- Wimplicit-dimensions
- Wmacro-replacement
- Wportbind
- Wselect-range
- Wtimescale
- Wsensitivity-entire-array
- anachronisms
Включает предупреждения об использовании функций, которые были устаревшими или удаленными в выбранном поколении языка Verilog. - implicit
Включает предупреждения о создании неявных объявлений. Например, если скалярный провод X используется, но не объявлен в исходном тексте Verilog, то при его первом использовании будет выведено предупреждение. - implicit-dimensions
Включает предупреждения для случая, когда в объявлении порта или одноименном объявлении var/net отсутствуют размеры. Обычно Verilog позволяет это делать (недекорированное объявление получает свои размеры из декорированного объявления), но теперь это не так распространено, и некоторые другие инструменты (в частности, синтезаторы Xilix) обрабатывают это некорректно. Этот флаг поддерживается в релизе 10.1. - macro-redefinition
Включает предупреждения при переопределении макроса, даже если текст макроса не изменился. ПРИМЕЧАНИЕ: Флаг «macro-redefinition» был добавлен в v11.0. - macro-replacement
Включает предупреждения при переопределении макроса и изменении его текста. Чтобы отключить эту функцию, используйте no-macro-redefinition, ПРИМЕЧАНИЕ: Флаг «macro-replacement» был добавлен в версии 11.0. - portbind
Включает предупреждения для портов экземпляров модулей, которые не соединены должным образом, но, вероятно, должны быть соединены. Например, не подключенные порты ввода будут генерировать предупреждение. - select-range
Включает предупреждения для постоянных выходящих за пределы диапазона селектов. Сюда относятся частично или полностью не связанные селекты, а также селекты, содержащие в индексе ‘bx или ‘bz. - timescale
Включает предупреждения о непоследовательном использовании директивы timescale. Она обнаруживает, если некоторые модули не имеют шкалы времени или если модули наследуют шкалу времени из другого файла. И то, и другое может означать, что временные шкалы непоследовательны, и время моделирования может быть запутанным и зависеть от порядка компиляции. - infloop
Включает предупреждения для операторов always, которые могут иметь бесконечные циклы во время выполнения (т. е. имеют пути с нулевой или нулевой задержкой). Этот класс предупреждений не входит в -Wall и, следовательно, не имеет варианта no-. Сообщение о фатальной ошибке всегда будет выводиться, если компилятор может определить, что обязательно произойдет бесконечный цикл (все пути имеют нулевую или нулевую задержку).
Если вы подозреваете, что оператор always порождает бесконечный цикл, используйте этот флаг для поиска операторов always, логика которых нуждается в проверке. Ожидается, что многие предупреждения будут ложными срабатываниями, поскольку код рассматривает значение всех переменных и сигналов как неограниченное. - sensitivity-entire-vector
Включает предупреждения, когда выбор части с оператором «always @*» приводит к добавлению всего вектора в неявный список чувствительности. Хотя такое поведение предписано стандартом IEEE, оно не соответствует ожиданиям и может иметь последствия для производительности, если вектор большой. - sensitivity-entire-array
Включает предупреждения о том, что при выборе слова select с оператором «всегда @*» весь массив будет добавлен в неявный список чувствительности. Хотя такое поведение предписано стандартом IEEE, оно не соответствует ожиданиям и может иметь последствия для производительности, если массив велик. - floating-nets
Включает предупреждения для сеток, которые присутствуют, но не имеют источников. Этот флаг был добавлен в версии 11.0 или более поздней (и находится в мастер-ветке по состоянию на 2015-10-01).
- all
- -y
Добавляет каталог к пути поиска библиотечных модулей. Когда компилятор находит неопределенный модуль, он ищет в этих каталогах файлы с нужным именем. - -Y
Добавляет список расширений файлов, которые используются для преобразования неопределенного модуля в имя файла. Должен быть указан перед любым флагом -y. Например, эта команда:
% iverilog -Y .sv -y sources src.v
попытается разрешить любой неопределенный модуль m, заглянув в каталог sources и проверив, существуют ли там файлы с именами m.v или m.sv.
Флаги Препроцессора
Эти флаги управляют поведением препроцессора. Они похожи на флаги типичного компилятора «C», поэтому программисты на языке C найдут их знакомыми.
- -E
Этот флаг особенный, так как он указывает компилятору запускать только препроцессор. Это полезно, например, как способ разрешить препроцессирование для других инструментов. Например, эта команда:
% iverilog -E –o foo.v -DKEY=10 src1.v src2.v
запускает препроцессор на исходных файлах src1.v и src2.v и создает единственный выходной файл foo.v, в котором обработана вся препроцессорная обработка (включая включение заголовков и ifdef’s).
- -D
Присвоить значение имени макроса. Формат этого флага один из следующих:
-Dkey=value
-Dkey
`define key value
`define key
- -I
Добавляет каталог в список каталогов, в которых производится поиск включаемых файлов Verilog. Ключ -I можно использовать много раз, чтобы указать несколько каталогов для поиска, каталоги будут искаться в порядке их появления в командной строке.
Флаги Элаборации
Это флаги, которые передают информацию на этапы элаборации.
- -P<символ>=<значение>
Определяет параметр с помощью поведения defparam для переопределения значений параметров. Это может быть использовано только для параметров экземпляров корневого модуля. - -s
Укажите модуль верхнего уровня для этапа элаборации. По умолчанию Icarus Verilog выбирает модули, которые не объявлены экземплярами ни в какие другие модули, но иногда этого недостаточно, или объявлений модулей слишком много модулей. Если пользователь укажет один или несколько корневых модулей с флагами «-s», то они будут использоваться в качестве корневых модулей. - -Tmin, -Ttyp, -Tmax
Выбор таймингов для использования. Язык Verilog позволяет задавать множество таймингов в виде трех чисел, min:typical:max, но для моделирования необходимо выбрать, какой набор использовать. Флаг «-Tmin» указывает компилятору, что во время элаборации нужно выбирать «минимальные» тайминги. По умолчанию используется флаг «-Ttyp».