Yosys 0.67: новый SystemVerilog-фронтенд и нормальная сборка под Windows
Yosys 0.67 переводит разбор и elaboration SystemVerilog во встроенный путь `read_slang`, основанный на sv-elab и библиотеке Slang. Релиз также объявляет рабочую сборку в Microsoft Visual Studio вместе с логическим оптимизатором ABC. Главный вопрос теперь лежит в границах синтезируемого подмножества языка на реальных FPGA-проектах.
В Yosys 0.67 появился встроенный фронтенд `read_slang` для SystemVerilog. Он использует elaborator sv-elab, построенный поверх Slang, читает исходники SystemVerilog и разворачивает иерархию проекта в word-level netlist, пригодный для дальнейших проходов синтеза Yosys. В параметрах фронтенда доступны стандарты IEEE 1800-2017 и IEEE 1800-2023.
Это изменение затрагивает один из наиболее проблемных участков открытого RTL-потока. До сих пор современный SystemVerilog часто требовал подгонки исходников под особенности конкретного фронтенда либо подключения внешних инструментов. Интеграция sv-elab убирает отдельный плагин из типового контура: именно по этой причине SiliconCompiler исключил standalone-пакет yosys-slang из собственной конфигурации. Фронтенд входит в основную поставку Yosys начиная с версии 0.67.
Граница возможностей при этом определена достаточно строго. sv-elab ориентирован на синтезируемое подмножество IEEE 1800-2017/2023, а не заявляет универсальную обработку всех языковых конструкций стандарта. Проекты с interface, package, сложной параметризацией типов, assertion и кодом от производителя FPGA требуют отдельной проверки. Документация общей команды `read` по-прежнему указывает Verific как путь полной поддержки SystemVerilog, поэтому `read_slang` следует считать новым встроенным синтезируемым маршрутом, а не заменой всех существующих импортёров.
В релизе переработана и сборочная инфраструктура. Минимальными версиями стали CMake 3.28, GCC 13 либо Clang 16. Разработчики объявили работоспособной сборку Microsoft Visual Studio, включая ABC — внешний пакет, выполняющий технологическое отображение и логическую оптимизацию. Для Windows в документации всё ещё рекомендован MinGW-w64, так что MSVC-путь расширяет набор поддерживаемых конфигураций, но пока не отменяет привычную toolchain-схему.
Новый проход `check_mem` добавляет статическую диагностику описаний памяти в RTL. Он предназначен для поиска некорректных обращений и структурных проблем до того, как ошибка проявится в симуляции, формальной проверке либо после отображения в ресурсы FPGA. В арифметическом тракте `arith_tree` получил стратегии преобразования цепочек `add`, `sub`, `macc` и `alu` в деревья carry-save adders. Такой формат сокращает распространение переноса через промежуточные стадии и может изменить структуру логики перед финальным mapping.
Среди остальных изменений — управление выводом latch в синтезирующих проходах, проверки недрайвенных сигналов в `check` и `sim`, поддержка актуального Bitwuzla в `smtbmc`. Библиотека FABulous перенесла жёстко заданные соответствия примитивов в опции `synth_fabulous`, что упрощает настройку открытого FPGA-потока под конкретную архитектуру. Публичных сравнительных данных по покрытию SystemVerilog, времени elaboration и качеству синтеза релиз пока не приводит: инженерная ценность версии определяется прежде всего сменой архитектуры фронтенда и переносимостью сборки.