Patchcore
Patchcore
Компактная плата на ПЛИС с несколькими детерминированными ядрами ввода-вывода и аппаратными примитивами протоколов. Нестандартные интерфейсы подключаются как готовые переносимые модули, а не реализуются вручную на GPIO, — вместо фиксированного набора периферии, который навязывают стандартные микроконтроллеры.
Технические характеристики
• Одноплатный модуль компактного форм-фактора 20 × 30 мм.
• Вычислительная часть реализована на ПЛИС и состоит из нескольких небольших ядер (ориентир — от 4 до 8, уточняется выбором ПЛИС). Каждое ядро обслуживает собственный интерфейс независимо от остальных.
• Ядра работают без прерываний и операционной системы: каждая инструкция выполняется за фиксированное число тактов, поэтому тайминги сигналов воспроизводимы.
• В конфигурацию ПЛИС входит набор аппаратных примитивов: сдвиговые движки, генерация и захват сигналов с точностью до такта, метки времени фронтов, вычисление CRC, FIFO, кодирование Manchester и NRZ. Ядра соединяют эти примитивы программой.
• Собственная система команд (ISA), ориентированная на ввод-вывод: установка состояния выводов с ожиданием заданного числа тактов, ожидание фронта с меткой времени, операции с битовыми полями, циклы без накладных расходов.
• GPIO-выводы, логика которых определяется пользовательской программой, а не жёстко зашитыми аппаратными блоками периферии. Нагрузочная способность и подтяжки настраиваются; уровни напряжения могут различаться по банкам выводов (при поддержке выбранной ПЛИС).
• Каталог модулей протоколов: UART (включая инвертированный и SBUS), SPI, I²C, 1-Wire, DShot, PPM, квадратурные энкодеры, SSI/BiSS, WS2812. Каждый модуль — пакет с манифестом (выводы, тактовая частота, параметры), тестами и описанием.
• Язык описания протоколов (PDL): пользователь задаёт формат кадра и тайминги, а инструмент генерирует код для ядра или конфигурацию примитивов.
• Собственный открытый тулчейн: ассемблер, компилятор и тактово-точный симулятор для ПК. Один и тот же код даёт одинаковый результат в симуляторе и на плате.
• Встроенный логический анализатор: ПЛИС записывает состояние выводов в буфер и передаёт его по USB с декодированием протоколов.
• Программы ядер загружаются по USB без пересинтеза ПЛИС; пересинтез нужен только при изменении набора аппаратных примитивов. Конфигурация ПЛИС и копия программы хранятся в энергонезависимом ПЗУ на плате.
• Аппаратная кнопка переключения источника загрузки (boot select) между USB и ПЗУ.
• Питание осуществляется через интерфейс USB.
• Открытые исходные коды HDL, тулчейна и каталога модулей.
Проблема, которую решает проект
Разработчики встраиваемых систем регулярно сталкиваются с протоколами, которых нет в периферии стандартного микроконтроллера: нестандартные датчики, энкодеры, проприетарные линии связи. Набор интерфейсов (число UART, SPI, I²C и т. д.) заранее определён производителем чипа, поэтому при нетипичной задаче разработчик вынужден искать обходной путь.
У существующих обходных путей есть недостатки. Программная эмуляция на GPIO нестабильна по таймингам и загружает процессор. Программируемые блоки ввода-вывода (например, PIO в RP2040) ограничены по памяти программ и средствам отладки. Плата на ПЛИС даёт полную свободу, но требует знания HDL и повторного синтеза после каждого изменения. Решение, написанное под один проект, плохо переносится в другой.
Проект превращает этот вынужденный «костыль» в осознанную архитектуру продукта: несколько детерминированных ядер ввода-вывода, аппаратные примитивы для операций с жёсткими таймингами и библиотека переносимых протестированных модулей протоколов. Протокол описывается один раз, проверяется в симуляторе и на встроенном логическом анализаторе, затем загружается на плату по USB.
Проект не конкурирует с микроконтроллерами по тактовой частоте и цене и не предназначен для скоростных интерфейсов (USB, Ethernet, SDIO). Его преимущества — число независимых ядер, аппаратные примитивы, настраиваемая электрика выводов и наблюдаемость, то есть возможность увидеть и воспроизвести тайминги
Примеры применения платы
Мост для нестандартных датчиков БПЛА. Подключается между полётным контроллером и датчиком (дальномер, сенсор оптического потока, специализированная полезная нагрузка), протокол которого не поддерживается интерфейсами контроллера. Плата реализует нужный протокол с точными таймингами, согласует уровни напряжения и передаёт данные в стандартном виде (UART, SPI или I²C). Компактность платы важна для размещения в тесном корпусе малого БПЛА.
Прототипирование нестандартных интерфейсов. Когда задаче нужен протокол или число интерфейсов, не предусмотренные стандартным микроконтроллером, разработчик берёт модуль из каталога или описывает кадр и тайминги на языке описания протоколов, затем отлаживает результат в симуляторе и на встроенном логическом анализаторе — без разработки отдельной платы под конкретный протокол.
Контроллер нестандартной периферии в робототехнике. Несколько энкодеров (в том числе SSI/BiSS) и драйверов с проприетарным протоколом обслуживаются параллельно независимыми ядрами, которые не влияют друг на друга по таймингам. Основному контроллеру данные передаются в стандартном виде.
Имитация устройства при тестировании прошивок. Плата воспроизводит протокол датчика или исполнительного устройства с заданными таймингами, в том числе с отклонениями и ошибками кадра. Это позволяет проверять поведение основной прошивки без реального устройства.
Сравнение с существующими решениями
| Решение | Описание | Отличие от проекта |
| Raspberry Pi Pico (RP2040/RP2350) | Недорогой микроконтроллер (21 × 51 мм) с программируемыми блоками ввода-вывода (PIO). | PIO — самый близкий по смыслу аналог, но число автоматов фиксировано (8 в RP2040), память программ составляет 32 инструкции на блок, арифметических инструкций нет, возможности отладки ограничены. В проекте — несколько ядер с аппаратными примитивами (CRC, метки времени), встроенный логический анализатор и каталог модулей. Pico выигрывает в цене и зрелости экосистемы; проект ориентирован на задачи, где возможностей PIO не хватает. |
| Parallax Propeller, XMOS xCORE | Микроконтроллеры с несколькими детерминированными ядрами и без фиксированной периферии. Во втором поколении Propeller добавлены аппаратные умные выводы (smart pins). | Принцип близок. В проекте набор аппаратных примитивов можно менять на уровне конфигурации ПЛИС, а протоколы оформлены как переносимые тестируемые модули с языком описания, симулятором и встроенным анализатором. |
| NXP FlexIO, TI PRU | Программируемая периферия внутри микроконтроллера или SoC: сдвиговые регистры и таймеры (FlexIO), отдельные ядра реального времени (PRU). | Решения привязаны к конкретным чипам, а состав и число блоков определяет производитель. В проекте набор примитивов и число ядер можно изменять, а модули переносимы между проектами. |
| TinyFPGA BX, iCEBreaker, Fomu | Компактные платы на ПЛИС с открытым тулчейном (Yosys/nextpnr). | Позволяют реализовать любую периферию на HDL, но каждое изменение требует знания HDL и повторного синтеза. В проекте программы загружаются по USB без пересинтеза, а типовые протоколы доступны как готовые модули. |
| Glasgow Interface Explorer, Bus Pirate | Инструменты с программно-определяемым вводом-выводом для работы с нестандартными протоколами; популярны у исследователей аппаратной безопасности. | Близки по гибкости, но позиционируются как инструменты анализа, подключаемые к ПК. Проект — встраиваемый модуль, который остаётся в устройстве, а встроенный анализатор нужен для отладки. |
