Дмитрий Васильев@raoffonom
Full Stack Developer
Информация
- В рейтинге
- Не участвует
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Фулстек разработчик
Ведущий
От 300 000 ₽
JavaScript
React
GraphQL
React Native
Apollo
TypeScript
Redux
Zig
Rust
и снова в точку. HLS-отчеты с распиновкой по тактам и графами зависимостей — это то, что отличает «игрушку» от инструмента.
Reporting: Внедрил Cycle-Accurate Reporting. Теперь компилятор VIBEE на этапе генерации анализирует критический путь (пока по пресетам для разных типов логики) и вставляет в заголовок Verilog метаданные. Не нужно лезть в код, в шапке сразу написано: Latency: 6 cycles.
Pipelining: Вместо традиционных #pragma HLS pipeline, мы внедряем Intention-based Pipelining. В спецификации теперь есть поле pipeline: auto. Поскольку VIBEE знает математическую структуру операций, он может автоматически конвейеризировать дата-пас до нужной частоты (поле target_frequency), вставляя регистры там, где этого требует тайминг.
RTL Freedom: Наша глобальная цель — чтобы заглядывать в сгенерированный Verilog нужно было только в исключительных случаях (как мы сейчас не смотрим в ассемблер после GCC/LLVM). Загляните в обновленную статью, там как раз пример новой спецификации с параметрами производительности. Спасибо за крутой фидбек!
а вот это уже прямо в точку! PLL — это классический пример того, где «чистый Verilog» пасует перед реальностью кремния.
Мы как раз прямо сейчас выкатили обновление генератора, которое решает эту проблему через Unified Wrappers. Теперь в VIBEE можно писать так:
.
Суть VIBEE не в том, чтобы сделать вид, что железо одинаковое, а в том, чтобы отделить логику от физики. Логика (вычисления, FSM) остается переносимой, а физика (PLL, DSP48, SerDes) выносится в абстракции, которые компилятор разрешает в зависимости от
fpga_targetТак что «бадяга» теперь локализована и не замусоривает основной код. Посмотрите обновленный раздел в статье — там как раз про это!
@Brak0del, вы абсолютно правы насчёт сброса. Xilinx (UG949) действительно рекомендует избегать сброса в дата-пасах, где это не требуется, чтобы не тратить ресурсы на маршрутизацию глобальных сигналов.
Внедрил поддержку кастомного сброса в VIBEE сразу после вашего комментария. Теперь в спецификации можно явно отключить генерацию
...
Результат генерации (теперь без лишнего сброса):
Примеры в статье обновили. Также добавили гибкую настройку для тех случаев, когда сброс всё же нужен: можно выбрать уровень (high/low) и тип (sync/async).
Спасибо за дельное замечание — такие правки делают инструмент по-настоящему индустриальным
1. HDL vs C/C++:
Вы правы — для классической FPGA-разработки нужен Verilog/SystemVerilog, не C/C++. Я имел в виду HLS-инструменты (Vitis HLS, Intel HLS), которые работают именно с C/C++ и стоят денег. Бесплатные Vivado/Quartus для HDL — да, существуют. Формулировка в статье некорректна, поправил.
2. Пример с adder:
Согласен, пример слишком простой и не показывает реальную экономию времени. Более честный пример —
bitnet_top.vibee (305 строк спецификации → 666 строк Verilog с FSM, AXI-интерфейсами, тестбенчем и SVA-ассерциями). Там экономия реальная.
3. Иконки и стиль:
Статья писалась с помощью AI как инструмента, это правда. Иконки — личный стиль, могу убрать. Но код и метрики — реальные
$ verilator ‑lint‑only ‑top‑module bitnet_top_top trinity/output/fpga/bitnet_top.vVerilator 5.044: 13 modules, 0 errors, 0.05 s
Хороший вопрос!
rst_n (active-low, асинхронный) — это дефолтный шаблон VIBEE для FPGA, основанный на индустриальных best practices:
Active-low — стандарт Xilinx/Intel, т.к. большинство FPGA имеют встроенные pull-up резисторы на reset-линиях
Асинхронный (@(posedge clk or negedge rst_n)
Как кастомизировать:
В спецификации можно явно задать тип сброса:
Если не указано — используется
как безопасный дефолт.
Почему не видно в Python-коде:
VIBEE добавляет clk/rst автоматически для всех sequential-модулей, т.к. это обязательные сигналы для FPGA. Это снижает порог входа — не нужно каждый раз описывать boilerplate
спасибо за вопросы!
1. QoR — готовые метрики:
Синтез уже выполнен (Yosys), результаты в
2. Проверка без чтения RTL:
3. Ускорение цикла:
Спецификация (305 строк) → Verilog (666 строк): секунды
Verilator lint: 50 мс
Полный Yosys-синтез: минуты (не часы)
VIBEE не «обходит» синтез — он ускоряет его за счёт автогенерации оптимизированного RTL.
⚡️ VIBEE: Быстрая установка
🐧 Linux / 🍏 macOS (Рекомендуется) Универсальный скрипт (сам поставит Zig и соберет):
curl -sSL https://raw.githubusercontent.com/gHashTag/vibee-lang/main/install.sh | bash
🍏 macOS (Homebrew)
brew tap ghashtag/tap
brew install --HEAD vibee
🐳 Docker (Любая ОС)
docker run --rm -v $(pwd):/app ghcr.io/ghashtag/vibee gen specs/file.vibee
🪟 Windows Используйте WSL2 (команда для Linux выше) или Docker.
🔗 Документация: github.com/gHashTag/vibee-lang
Проблема: Бинарник bin/vibee собран для x86-64 с расширениями CPU (AVX/SSE), которых нет на вашем процессоре → Illegal instruction.
Решение: Пересоберите компилятор под вашу архитектуру:
1. Установите Zig (если нет)
Для Ubuntu/Debian:
sudo apt update && sudo apt install zig
2. Пересоберите
cd src/vibeec
zig build -Doptimize=ReleaseSafe # Без агрессивных оптимизаций
cp zig-out/bin/vibeec ../../bin/vibee
3. Проверьте
cd ../..
./bin/vibee gen specs/tri/bitnet_top.vibee
Альтернатива: Используйте Docker (если установлен):
docker build -t vibee .
docker run -v $(pwd):/app vibee gen specs/tri/bitnet_top.vibee
Примечание: Спецификации .vibee платформонезависимы. После пересборки генерация Verilog будет работать.
VIBEE — это не LLVM-компилятор, а specification-first система: вы пишете .vibee YAML-спецификацию (что делать), а она генерирует код для 42 языков, включая синтезируемый Verilog для Xilinx/Intel/Lattice. Архитектура — прямой кодоген из AST без LLVM IR. Уже работает: BitNet FPGA accelerator (3000 строк Verilog из 305 строк спецификации), py2vibee конвертер Python→.vibee. Бесплатно vs $3-50K в год за Xilinx/Intel HLS.
CTRL+SHIFT+J(Win) или CMD+OPT+J(для Mac)