Запуск Verilog на микроконтроллере CH32V003 (ядро RISC-V)
( Аппаратная эмуляция FPGA )
Это те самые 0,1-долларовые PLD, которые уже лежат у вас в ящике.
Превратите микроконтроллер CH32V003 в крошечную перепрограммируемую «связующую» микросхему.
Пишите логику малой плотности на Verilog или SystemVerilog, подавайте исходный код на вход bin/cli.js — и на выходе получите прошивку на C без рантайма, которая программно управляет выводами GPIO, эмулируя работу схемы. Это медленнее, чем настоящий PLD, но дёшево и гибко.
- - - - -
Как это работает?
1) Запускает Verilator с ключом —cc, чтобы преобразовать Verilog/SystemVerilog в C++.
2) Извлекает тело преобразованной логики (___ico_sequent__TOP__0).
3) Транслирует это тело в обычный C (без рантайма Verilator — он используется только для хост-среды и не собирается для голого железа rv32ec). Проекты с оператором case преобразуются в табличный просмотр с постоянным пулом констант, данные которого хранятся в отдельном файле V__ConstPool_.cpp; эти таблицы переписываются в виде статических константных массивов на чистом C, чтобы тело могло собираться автономно.
4) Оборачивает всё это в GPIO-прослойку: читает входные пины через GPIOx->INDR, вычисляет логику, записывает выходные пины через GPIOx->OUTDR.
5) Генерирует funconfig.h и Makefile, собирает прошивку и выполняет анализ таймингов по дизассемблированному коду.
- - - - -
Примеры:
| Пример | Функция | Исходник | Размер прошивки |
|--------|---------|----------|-----------------|
| 7400 | сдвоенный 2-входовой NAND (4 элемента) | top.v | 852 байт |
| 74x02 | сдвоенный 2-входовой NOR (4 элемента) | top.v | 828 байт |
| 74x04 | шестикратный инвертор (6 вентилей) | top.sv | 748 байт |
| 74x47 | дешифратор BCD → 7-сегментный индикатор | ic_74x47.v | ~1100 байт |
**74x47** — это первый пример, в котором используется оператор `case`: Verilator преобразует его в табличный просмотр с постоянным пулом констант, а `cli.js` транскрибирует этот пул в статический константный массив в `main.c` (см. шаг 3 выше).
В каждом каталоге примера есть `config.js`, исходник на Verilog, а также (после запуска `cli.js`) сгенерированные `main.c`, `funconfig.h` и `Makefile`. Размеры прошивки указаны ориентировочно — они зависят от версии ch32fun и инструментария.
- - - - -
Производительность
Две точки с осциллографа подтверждают модель медленного пути (Tslow = (количество инструкций + 1,6)/f + число обращений к MMIO · 0,1 мкс):
Тактовая частота Tslow (измерено) Tslow (по модели)
48 МГц (PLL) 0,4 мкс 0,40 мкс
24 МГц (HSI) 0,6 мкс 0,60 мкс
Ссылка:
https://github.com/wavedrom/cherepanov.git
Перевод выполнил ИИ [ai deepseek chat]
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | MIK32 Амур + PlatformIO: пошаговый гайд по настройке среды разработки на Windows | 0 | 11.25 | 07-07-2026 |
| 2 | Учиться в МИФИ: Верификатор электроники должен знать и физику, и программирование | 0 | 6.86 | 10-08-2026 |
| 3 | Двенадцать символов, двадцать один байт: как я научил голый RISC-V говорить «Привет, мир!» | 0 | 10.81 | 01-08-2026 |
| 4 | Как мы ускоряли прошивку ESP (спойлер: совы не то, чем кажутся) | 0 | 9.66 | 23-07-2026 |
| 5 | Сегодня ночью ShadPS4 присоединится к охоте — так начинается история ... | -1 | 8.85 | 27-08-2026 |
| 6 | MSP430G2453IRHB32R — это 32-контактный микроконтроллер смешанного RISC-архитектуры в сверхтонком корпусе ... | 0 | 17.6 | 12-08-2026 |
| 7 | [Benchmark] Radeon RX 460 (6.2.6) | 0 | 11.64 | 21-06-2026 |
| 8 | C++ для STM32. Часть 1: организация пакетов данных для отправки по интерфейсам связи | 0 | 18.32 | 27-07-2026 |
| 9 | Железный ключ к Secure Boot RK35xx | 0 | 9.39 | 11-08-2026 |
| 10 | 🧠 НЕЙРОМОРФНАЯ РЕВОЛЮЦИЯ: КАК МЫ ПЕРЕСОЗДАЁМ РАЗУМ ПОЛНОЕ РУКОВОДСТВО ПО ... | 5 | 7 | 17-07-2026 |