Altifigence Academy

35 / 37 · Теория

Компиляция, lint и синтез: границы диагностики

Фиксируйте исходники, верхний модуль и язык; различайте синтаксис, ширину, защёлки и функциональную проверку.

Определите задачу инструмента

Результат зависит от исходников, верхнего модуля, параметров, языка и версии. Компилируйте DUT с зависимостями, а стенд выбирайте отдельным верхним модулем. Не синтезируйте генератор такта стенда и не путайте неинстанцированный модуль с проверяемым. Примеры используют практическое синтезируемое подмножество; симулятор и продуктовый движок могут поддерживать разные возможности. .sv не включает автоматически все функции.

Компиляция и моделирование подтверждают разное

Компиляция может отклонить синтаксис, отсутствующий модуль или неверную ссылку, но не доказывает арифметику и приоритет. Моделирование сравнивает выполненные сценарии; PASS относится к этим сравнениям и исходникам. Для практики:

text
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvp

Запишите оба статуса. Запуск старого sim.vvp после ошибочной компиляции может дать вводящий в заблуждение PASS. Создавайте новый файл каждой конфигурации и останавливайтесь при ошибке компиляции.

Изучайте причины

ДиагнозВопрос
Модуль отсутствуетВерны ли файл и имя?
УсечениеКакие биты, перенос или знак потеряны?
Выведена защёлкаКакой комбинационный путь ничего не присваивает?
Несколько источниковКто владеет переменной?
Неиспользуемый сигналНамеренно или пропущена связь?
Комбинационный циклВозвращается ли путь ко входу без регистра?

Не подавляйте все предупреждения ради чистого журнала. Исправьте либо опишите узкое, намеренное и проверенное исключение. Категории различаются по версиям. Официальный справочник предупреждений Verilator объясняет WIDTH, LATCH. Если установлен, дополнительно возможно:

text
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.sv

Это предложенный путь, не подтверждение выполнения. Различайте выполненные и предложенные команды.

Синтез — ещё одна граница

Общая проверка Yosys:

text
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'

Проверяет входную обработку и общую структуру, не ресурсы конкретной FPGA, размещение, трассировку, временное закрытие или производство. Технологическое отображение и ограничения требуют дополнительной работы.

Практика: держите ошибочные варианты отдельно

Создайте три временные копии: неверное имя дочернего модуля, девятибитовую сумму в восьми битах, пропущенное комбинационное присваивание. Посмотрите, что выявляет каждый инструмент и что требует функционального теста. Разрядность может быть намеренной, защёлка может компилироваться: сравнивайте требования. Сохраните значимый отказ вместе с восстановленным исходником. Необъяснённая диагностика остаётся открытой.

Выбор действует в этом браузере. Его можно изменить внизу страницы.