~ cd 5. формат командного файла
Основной формат командного файла — один исходный файл или аргумент компилятора в строке. В командных файлах также могут присутствовать комментарии различной формы и опции для управления компилятором.
5.1. Комментарии
Строки, начинающиеся с символа «#», являются комментариями. Весь текст после символа «#» игнорируется.
Последовательность символов «//» также начинает комментарий, который продолжается до конца строки.
Последовательности символов «/*» и «*/» окружают многострочные комментарии. Весь текст между последовательностями начала и конца комментария игнорируется, даже если этот текст занимает несколько строк. Этот стиль комментариев не вложен, поэтому последовательность «/*» внутри многострочного комментария, скорее всего, является ошибкой.
5.2. Plus-args
За пределами комментариев строки, начинающиеся с символа «+», являются аргументами компилятора. Они называются plusargs, но это не то же самое, что расширенные аргументы, передаваемые команде «vvp». Поддерживаемые plusargs окончательно перечислены на странице руководства iverilog.
Строки plusargs обычно имеют вид «+<имя>+…», где имя — это имя переключателя, а аргументы разделяются символами «+», как, например:
+libext+.v+.V+.ver
В строках plusargs символ «+» разделяет токены, а не пробелы, поэтому аргументы, которые могут включать пути к файлам, могут содержать пробелы. Строка plusarg завершается концом строки.
Строка в командном файле также может быть аргументом «-y». Это работает точно так же, как:
-y<path>
+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*
+libdir-nocase+dir-path
+libext+*suffix-string*
-ydir-path
-v file-name или -l file-name
Это объявляет библиотечный файл. Библиотечный файл — это такой же файл, как и любой другой файл исходного кода Verilog, за исключением того, что модули, объявленные в нем, не являются неявно возможными корневыми модулями.
+incdir+*include-dir-path*
+define+*name=value*
+timescale+*units/precision*
+toupper-filename
+tolower-filename
+parameter +*имя=значение*
+vhdl-work+*path*
При компиляции VHDL эта лексема позволяет контролировать каталог, используемый для хранения деклараций рабочих пакетов. Например, «+vhdl-work+workdir» приведет к тому, что каталог «workdir» будет использоваться в качестве каталога для хранения рабочих копий заголовков пакетов.