EdigE
← ЛЕНТА

Pulse превращает VHDL в граф проводов и оживляет его в терминале

У Pulse есть очень конкретный момент магии: открыть `counter.vhd`, запустить симуляцию и увидеть на одном терминальном экране иерархию компонентов и waveform с переключениями сигналов. Pulse читает VHDL, собирает из него граф проводов и вентилей, а затем гоняет события по этому графу. Исходник перестаёт быть текстом, который где-то молча исполнил симулятор: его промежуточная электрическая модель становится частью отладки.

Текст превращается в наблюдаемую схему

Путь внутри проекта собран целиком на C++20: лексер выделяет токены, парсер строит AST, семантический анализатор проверяет типы, линкер соединяет файлы. Затем blueprint generator раскладывает описание на компоненты, соединения, сравнения и логические операции. Именно этот blueprint поступает в симулятор; терминальный интерфейс показывает дерево схемы и позволяет ходить по временной диаграмме без отдельного GUI. В этом состоит сильная идея Pulse: между HDL и бегущими сигналами лежит явная, доступная для инспекции структура.

Граф уже участвует в работе движка, а не служит красивой картинкой после компиляции. Документация заявляет многозначную логику IEEE 1164, асинхронные процессы и время от фемтосекунд до секунд. Такая модель естественно подводит к адресной обработке затронутых узлов при смене сигнала. Выборочное пробуждение вершин, инкрементальный пересчёт и мост к Verilog пока остаются направлениями развития: публичных измерений скорости, сравнения с GHDL или результатов проверки соответствия стандарту у проекта нет.

Узкий язык как цена раннего старта

Цена этой прозрачности видна прямо в списке поддерживаемого синтаксиса. Сейчас есть `std_logic` и `std_logic_vector`, диапазоны `to` и `downto`, назначения сигналов, процессы с sensitivity list и `WAIT`, ветвления `if`/`elsif`/`else`, именованное сопоставление портов, базовые арифметические и логические операции. Generics, `case`, циклы, значения по умолчанию, позиционное сопоставление портов, расширенные типы и Verilog ещё отсутствуют. Объявления библиотек парсер принимает, но фактически игнорирует.

Это ограничение заметно даже в встроенном примере счётчика. В нём нет привычных `library` и `use`, инкремент выполняется прямо над `STD_LOGIC_VECTOR`, а условие тактирования проверяет уровень `clk = '1'` вместо фронта. Такой файл годится для демонстрации внутреннего конвейера Pulse, однако его нельзя принимать за строгий переносимый тест VHDL. Молодой симулятор уже умеет показать жизнь простого цифрового блока; доказательство корректности сложного дизайна потребует гораздо более широкой языковой модели и серьёзного набора регрессионных тестов.

Где заканчивается демонстрация и начинается доверие

Pulse вышел в версии 1.0.0 1 сентября 2026 года, а 1.0.1 от 5 сентября уже исправляла сборку под Unix. Проект распространяется по MIT-лицензии. Первичные материалы для проверки: репозиторий Pulse, его README, CMakeLists.txt, CHANGELOG.md и демонстрационный `test-project/counter.vhd`.