Условная компиляция Verilog `ifdef
Verilog поддерживает несколько директив компилятора, которые по существу предписывают компилятору обрабатывать код определенным образом. Например, часть кода может представлять собой реализацию определенной функции, и должен быть какой-то способ не включать код в дизайн, если эта функция не используется.
Это можно решить с помощью условного компиляция, где разработчик может обернуть код в директивы компилятора, которые сообщают компилятору либо включить, либо исключить код для компиляции, когда установлен данный именованный флаг.
Синтаксис
Условную компиляцию можно выполнить с помощью Verilog 07
. и 14
ключевые слова. Эти ключевые слова могут появляться в любом месте дизайна и могут быть вложены друг в друга.
Ключевое слово 29
просто говорит компилятору включить фрагмент кода до следующего 34
или 46
если данный макрос с именем FLAG определен с использованием 59
директива.
01
Ключевое слово 65
просто говорит компилятору включить фрагмент кода до следующего 78
или 86
если заданный макрос с именем FLAG не определяется с помощью 97
директива.
Пример дизайна с `ifdef
10пре>Тестовый стенд
27Обратите внимание, что по умолчанию rstn не будет включен во время компиляции дизайна и, следовательно, не появится в списке портов. Однако, если макрос с именем INCLUDE_RSTN либо определен в любом файле Verilog, который является частью списка компилируемых файлов, либо передан через командную строку компилятору, rstn будет включен в компиляцию и будет иметь его в проекте.
Поэкспериментируйте, добавляя и удаляя +define+INCLUDE_RSTN из «Параметры компиляции и запуска» на левой панели, чтобы понять разницу.
Пример Verilog `ifdef `elsif
В следующем примере два оператора display находятся внутри отдельных
102
. области, у которых нет119
по умолчанию часть к нему. Это означает, что по умолчанию ничего не будет отображаться. Если определен макрос или MACRO, соответствующее сообщение на дисплее включается и будет отображаться во время моделирования31Журнал моделирования40Пример Verilog `ifndef `elsif
Тот же код можно записать с помощью
129
. и результаты будут прямо противоположными.58Журнал моделирования60Пример вложенного `ifdef Verilog
138
и его разновидности могут быть вложены друг в друга для создания сложных способов включения и исключения кода с помощью определенных макросов.72Журнал моделирования89Обратите внимание, что пока родительский макрос не определен, определение любого другого вложенного макроса внутри него не компилируется. Например, определения макросов NEST1_A или WHITE без флага FLAG не заставят компилятор подобрать вложенный код.
Verilog