35 / 37 · Теория
Компиляция, lint и синтез: границы диагностики
Фиксируйте исходники, верхний модуль и язык; различайте синтаксис, ширину, защёлки и функциональную проверку.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Определите задачу инструмента
Результат зависит от исходников, верхнего модуля, параметров, языка и версии. Компилируйте DUT с зависимостями, а стенд выбирайте отдельным верхним модулем. Не синтезируйте генератор такта стенда и не путайте неинстанцированный модуль с проверяемым. Примеры используют практическое синтезируемое подмножество; симулятор и продуктовый движок могут поддерживать разные возможности. .sv не включает автоматически все функции.
Компиляция и моделирование подтверждают разное
Компиляция может отклонить синтаксис, отсутствующий модуль или неверную ссылку, но не доказывает арифметику и приоритет. Моделирование сравнивает выполненные сценарии; PASS относится к этим сравнениям и исходникам. Для практики:
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvpЗапишите оба статуса. Запуск старого sim.vvp после ошибочной компиляции может дать вводящий в заблуждение PASS. Создавайте новый файл каждой конфигурации и останавливайтесь при ошибке компиляции.
Изучайте причины
| Диагноз | Вопрос |
|---|---|
| Модуль отсутствует | Верны ли файл и имя? |
| Усечение | Какие биты, перенос или знак потеряны? |
| Выведена защёлка | Какой комбинационный путь ничего не присваивает? |
| Несколько источников | Кто владеет переменной? |
| Неиспользуемый сигнал | Намеренно или пропущена связь? |
| Комбинационный цикл | Возвращается ли путь ко входу без регистра? |
Не подавляйте все предупреждения ради чистого журнала. Исправьте либо опишите узкое, намеренное и проверенное исключение. Категории различаются по версиям. Официальный справочник предупреждений Verilator объясняет WIDTH, LATCH. Если установлен, дополнительно возможно:
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.svЭто предложенный путь, не подтверждение выполнения. Различайте выполненные и предложенные команды.
Синтез — ещё одна граница
Общая проверка Yosys:
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'Проверяет входную обработку и общую структуру, не ресурсы конкретной FPGA, размещение, трассировку, временное закрытие или производство. Технологическое отображение и ограничения требуют дополнительной работы.
Практика: держите ошибочные варианты отдельно
Создайте три временные копии: неверное имя дочернего модуля, девятибитовую сумму в восьми битах, пропущенное комбинационное присваивание. Посмотрите, что выявляет каждый инструмент и что требует функционального теста. Разрядность может быть намеренной, защёлка может компилироваться: сравнивайте требования. Сохраните значимый отказ вместе с восстановленным исходником. Необъяснённая диагностика остаётся открытой.