SpiceBind запускает SPICE-схему на месте Verilog-модуля
У цифровой state machine обычно есть удобная ложь: сигнал `locked`, код готовности АЦП или фронт компаратора появляются ровно тогда, когда этого ждёт модель. В кремнии эти события рождаются после заряда конденсаторов, установления смещений, дрожания порогов и конечной скорости аналоговой петли. Между идеальным событием в Verilog и физическим событием на узле схемы часто прячется самый дорогой баг проекта.
Verilog-shell, за которым живёт netlist
SpiceBind предлагает заменить такой условный модуль реальной схемой ngspice. В коде остаётся экземпляр Verilog-модуля с привычными портами. Для выбранного экземпляра инструмент загружает netlist через libngspice и подключается к HDL-симулятору через VPI. Остальной мир не обязан переезжать в специализированную AMS-среду: тестбенч, cocotb, RTL и просмотр временных диаграмм продолжают работать в обычном цифровом flow.
Граница намеренно сделана грубой и поэтому понятной. Вход Verilog превращается в управляемый источник напряжения SPICE, а выбранный узел аналоговой схемы становится выходом HDL-модуля. Так можно, например, подать цифровое слово подстройки в управляемый генератор, дать прошивке посчитать его фронты и вернуть результат в RTL-логику. Цифровая часть теперь ждёт фактического переключения схемы, а не заранее нарисованного отклика.
Самая неприятная часть здесь — время
У event-driven симулятора время прыгает между цифровыми событиями. Ngspice при transient-анализе выбирает шаг сам: там, где фронт или постоянная времени требуют внимания, шаг мельчает. SpiceBind синхронизирует эти два механизма через callbacks: цифровые события отслеживаются VPI-модулем, ход аналогового расчёта сообщает libngspice, а событие, попавшее внутрь уже пройденного аналогового шага, требует пересчитать этот участок в его фактический момент. SpiceBind остаётся мостом между двумя независимыми движками, которому приходится бережно сводить их часы; общего solver у них нет.
Такой компромисс особенно уместен на границе цифрового управления и небольшой аналоговой физики: у ADC-интерфейса, ring oscillator, простого датчикового фронтенда, компаратора с обвязкой. Он позволяет проверить последовательность действий прошивки или автомата там, где behavioural-модель обычно скрывает зарядку, задержку и форму переходного процесса.
Прошивка калибрует кольцевой генератор
Самый содержательный пример проекта соединяет минимальное ядро SERV, MMIO-логику и транзисторную модель пятикаскадного CMOS ring oscillator. У генератора есть четыре бита подстройки ёмкости. Прошивка перебирает trim-коды, считает фронты и выбирает настройку по измеренной частоте. В номинальном авторском прогоне при 3.3 V и 27 °C она выбрала код 7; в замедленном режиме 3.2 V и 100 °C потребовался код 14. В экстремальном медленном углу 3.0 V и 125 °C диапазона подстройки уже не хватило, и тест завершился FAIL.
Это хорошая демонстрация именно связки: программный алгоритм сталкивается с частотой, которую задают транзисторы и ёмкости, а цифровой счётчик видит реальные фронты модели. При этом опубликованные corner-условия синтетические, на generic BSIM3 level-49, без foundry-моделей и без сравнения с кремнием. Они подтверждают работу интеграции, но ничего ещё не говорят о точности конкретного DCO.
Документация заявляет тесты на Icarus Verilog и Verilator с поддержкой timing и VPI. Общих цифр замедления длинной регрессии, устойчивости сходимости и расхода памяти автор пока не публикует. Поэтому SpiceBind разумно воспринимать как прицел для нескольких критичных mixed-signal узлов, где идеальная Verilog-заглушка слишком охотно соглашается с цифровой логикой. Проект вышел задолго до ORConf: первая версия пакета опубликована в июне 2025 года, версия 0.0.2 — 9 сентября 2026 года, а доклад «Bringing SPICE into RTL Verification» показали на ORConf 12 сентября.