DocsTech
/
ICARUS VERILOG
/

~ cd 5. формат командного файла

Основной формат командного файла — один исходный файл или аргумент компилятора в строке. В командных файлах также могут присутствовать комментарии различной формы и опции для управления компилятором.

5.1. Комментарии

Строки, начинающиеся с символа «#», являются комментариями. Весь текст после символа «#» игнорируется.

Последовательность символов «//» также начинает комментарий, который продолжается до конца строки.

Последовательности символов «/*» и «*/» окружают многострочные комментарии. Весь текст между последовательностями начала и конца комментария игнорируется, даже если этот текст занимает несколько строк. Этот стиль комментариев не вложен, поэтому последовательность «/*» внутри многострочного комментария, скорее всего, является ошибкой.

5.2. Plus-args

За пределами комментариев строки, начинающиеся с символа «+», являются аргументами компилятора. Они называются plusargs, но это не то же самое, что расширенные аргументы, передаваемые команде «vvp». Поддерживаемые plusargs окончательно перечислены на странице руководства iverilog.

Строки plusargs обычно имеют вид «+<имя>+…», где имя — это имя переключателя, а аргументы разделяются символами «+», как, например:

+libext+.v+.V+.ver

В строках plusargs символ «+» разделяет токены, а не пробелы, поэтому аргументы, которые могут включать пути к файлам, могут содержать пробелы. Строка plusarg завершается концом строки.

Строка в командном файле также может быть аргументом «-y». Это работает точно так же, как:

...
Копировать
-y<path>
аргумент компилятора; он объявляет каталог библиотеки. Синтаксис «-y» также является сокращением для plusargs «+libdir», который представляет собой более общую форму:
...
Копировать
+libdir+<path>...

5.2. Имена файлов

Любые строки, не являющиеся комментариями, аргументами компилятора или plusargs, воспринимаются компилятором как исходный файл. Путь может содержать любые символы (кроме последовательностей комментариев), включая пробелы, хотя ведущие и последующие символы белого пространства удаляются. Ограничение на одно имя файла в строке сделано для поддержки операционных систем, которые могут называть файлы как угодно. Не следует ожидать, что белые пробелы будут разделять имена файлов.

5.3. Подстановка переменных

Синтаксис «$(имя)» — это ссылка на переменную, которая может использоваться в любом месте имен файлов или каталогов. Содержимое переменной считывается из окружения и подставляется вместо ссылки на переменную. В Windows эти переменные среды — те самые переменные, которые устанавливаются через диалоговое окно Панель управления->Система, а в UNIX — это переменные среды, экспортируемые вашей оболочкой.

Переменные полезны для придания командным файлам некоторой независимости от установки. Например, можно импортировать библиотеку поставщика с помощью строки:
...
Копировать
-y$(VENDOR)/verilog/library

в командном файле, и следующий программист сможет использовать этот командный файл, не редактируя его, чтобы указать местоположение VENDOR на своей машине. Обратите внимание на использование прямой косой черты в качестве разделителя каталогов. Это работает даже под Windows, поэтому всегда используйте прямые косые черты в путях к файлам, и пользователи Windows и UNIX смогут совместно использовать командные файлы.

5.4. Пример

Этот пример:

...
Копировать
# This is a comment in a command file.
# The -y statement declares a library
# search directory
-y$(PROJ_LIBRARY)/prims
#
# This plusarg tells the compiler that
# files in libraries may have .v or .vl
# extensions.
+libext+.v+.vl
#
main.v // This is a source file
#
# This is a file name with blanks.
C:/Project Directory/file name.vl
это командный файл, демонстрирующий основные синтаксические элементы командных файлов. Он демонстрирует использование комментариев, переменных, плюсаргов и имен файлов. Он содержит много информации о гипотетическом проекте и показывает, что командные файлы можно использовать для достаточно краткого описания проекта в целом.

Синтаксис командных файлов достаточно богат, чтобы их можно было использовать для документирования и управления сборкой и компиляцией больших Verilog-программ. Нередко командные файлы состоят из сотен строк, хотя разумное использование библиотек может привести к созданию очень коротких командных файлов даже для больших проектов. Также практично иметь различные командные файлы, которые объединяют комбинации исходных текстов и аргументов компилятора для создания различных конструкций из одних и тех же исходных файлов Verilog.

5.5. Сводка

Учитывая приведенное выше описание формата командного файла, ниже приведен список специальных записей с их значением.
...
Копировать
+libdir+*dir-path*
Указывает каталоги для поиска библиотечных модулей. В dir-path может быть несколько каталогов, разделенных символами «+».
...
Копировать
+libdir-nocase+dir-path
Это то же самое, что и «+libdir+», но при поиске файлов модулей в библиотеках «nocase» регистр не будет учитываться. Это полезно, если библиотека находится в файловой системе, не чувствительной к регистру.
...
Копировать
+libext+*suffix-string*
Объявляет суффиксные строки, которые будут использоваться при поиске файлов Verilog в каталогах библиотек. Компилятор может проверить список суффиксных строк для поддержки различных соглашений об именовании.
...
Копировать
-ydir-path
Это похоже на «+libdir+», но в каждой строке указывается только один путь. Как и «+libdir+», может быть несколько записей «-y», чтобы объявить несколько каталогов библиотек. Это аналогично флагу «-y» в командной строке iverilog.
...
Копировать
-v file-name или -l file-name

Это объявляет библиотечный файл. Библиотечный файл — это такой же файл, как и любой другой файл исходного кода Verilog, за исключением того, что модули, объявленные в нем, не являются неявно возможными корневыми модулями.

ПРИМЕЧАНИЕ: Псевдоним «-l» является новым по состоянию на 2 октября 2016 года.
...
Копировать
+incdir+*include-dir-path*
Указывает каталог или список каталогов для поиска файлов, включенных директивой компилятора «include». Каталоги ищутся по порядку. Это аналогично флагу «-I» в командной строке iverilog.
...
Копировать
+define+*name=value*
Определяет для символа препроцессора «name» строковое значение «value». Если значение (и «=») опущено, то оно будет считаться строкой «1». Это аналогично «-D» в командной строке iverilog.
...
Копировать
+timescale+*units/precision*
Определяет шкалу времени по умолчанию. Это шкала времени, которая используется, если в исходном тексте Verilog нет других директив шкалы времени. По умолчанию компилятора используется значение «+timescale+1s/1s», которое можно изменить с помощью этого параметра командного файла. Формат единиц/прецизионности такой же, как и для директивы timescale в исходном тексте Verilog.
...
Копировать
+toupper-filename
Этот маркер заставляет имена файлов после этого в командном файле переводить в верхний регистр. Это помогает в ситуациях, когда каталог проходил через DOS-машину (или файловую систему FAT) и в процессе имена файлов затирались. Эта функция не предназначена для использования в общем случае, а только в чрезвычайных ситуациях.
...
Копировать
+tolower-filename
Это строчная версия «+toupper-filename».
...
Копировать
+parameter +*имя=значение*
Эта лексема заставляет компилятор переопределить значение параметра для модуля верхнего уровня. Например, если модуль main имеет параметр WIDTH, установите ширину следующим образом «+parameter+main.WIDTH=5». Обратите внимание на использование полного иерархического имени. В настоящее время это работает только для параметров, определенных в корневых модулях (верхнего уровня), и параметр defparam может переопределить значение командного файла.
...
Копировать
+vhdl-work+*path*

При компиляции VHDL эта лексема позволяет контролировать каталог, используемый для хранения деклараций рабочих пакетов. Например, «+vhdl-work+workdir» приведет к тому, что каталог «workdir» будет использоваться в качестве каталога для хранения рабочих копий заголовков пакетов.

Главная
Курсы
Вебинары
1. Руководство по установке Icarus Verilog
2. Начало работы с Icarus Verilog
3. Симуляция с помощью Icarus Verilog
4. Флаги командной строки iverilog
5. Формат командного файла
6. Атрибуты
7. IVLPP — препроцессор IVL
Закрыть