~ cd 7. ivlpp — препроцессор ivl
Команда ivlpp — это препроцессор Verilog, который обрабатывает включение файлов и подстановку макросов. Программа запускается отдельно от собственно компилятора, чтобы облегчить задачу компилятора, и предоставляет возможность препроцессирования файлов в автономном режиме.
ivlpp [options] <file>
Параметр — это имя файла, который будет прочитан и препроцессирован. Полученный результат отправляется на стандартный вывод. Возможные опции включают:
- -Dname[=value]
Предопределить имя символа, чтобы оно имело указанное значение. Если значение не указано, то используется 1. Эта опция в основном используется для управления условной компиляцией.
Эта опция не отменяет существующие директивы `define в исходном файле. - -F <путь>
Чтение опций ivlpp из FLAGS-файла. Это не то же самое, что список файлов. Этот файл содержит флаги, а не исходные файлы. Файлов флагов может быть несколько. - -f <путь>
Чтение входных файлов ivlpp из списка файлов. Может быть не более одного списка файлов. - -I
Добавить каталог в путь include. Обычно в пути поиска присутствует только «.». Флаг -I заставляет искать именованный файл в других каталогах. Флагов -I может быть столько, сколько необходимо. - -L
Генерировать директивы `line. Компилятор ivl понимает эти директивы и использует их для отслеживания текущей строки исходного файла. Это делает сообщения об ошибках более осмысленными. - -o
Отправить вывод в именованный файл, а не в стандартный вывод. - -v
Вывести информацию о версии и авторских правах перед обработкой входных файлов. - -V
Вывести информацию о версии и авторских правах, а затем выйти БЕЗ обработки входных файлов.
7.1. FLAGS-файл
Файл flags содержит флаги для использования ivlpp. Это удобный способ для программ передавать сложные наборы флагов программе ivlpp.
Пустые строки и строки, начинающиеся с «#», игнорируются. Последние могут быть использованы как строки комментариев. Все остальные строки являются строками флагов. Перед интерпретацией строк удаляются лидирующие и завершающие пробелы.
<key>:<value>
Символ двоеточия отделяет ключ от значения. Поддерживаются следующие ключи и соответствующие им значения:
- D:name=
Это точно такой же ключ, как и описанный выше «-Dname=». - I:
Точно такой же, как и «-I». - relative include:
Флаг может быть «true» или «false». Это включает вложенность «relative includes». - vhdlpp:
Укажите путь к программе vhdlpp. Эта программа используется для обработки входных файлов VHDL.
7.2. Нахождение включаемых файлов
Препроцессор ivlpp реализует директивы `include, подставляя содержимое включаемого файла на место строки с директивой `include. Имя, которое указывает программист, является именем файла. Обычно препроцессор ищет именованный файл в текущем рабочем каталоге. Однако флаги -I могут быть использованы для указания пути к каталогам для поиска именованных включаемых файлов. Сначала будет искаться текущий каталог, а затем все включаемые каталоги в порядке появления флага -I.
Исключением из этого процесса являются включаемые файлы, имя которых начинается с символа ‘/’. Эти имена файлов являются корневыми именами и должны находиться в указанном корневом месте.
7.3. Генерируемые директивы line
Компиляторы обычно стараются выводить вместе с сообщениями об ошибках номер файла и строки, в которой произошла ошибка. Icarus Verilog не является исключением. Однако, если отдельный препроцессор фактически выбирает и открывает файлы, то номера строк, подсчитанные собственно компилятором, не будут отражать реальные номера строк в исходном файле.
`line <num> <name> <level>
`line 6 "foo.vl" 0
// I am on line 6 in file foo.vl.
Препроцессор генерирует директиву `line каждый раз, когда переключает файлы. Это включает запуск включаемого файла (line 1 «foo.vlh» 1) или возврат к включающему файлу.