Sapphire RV64 заставляет FPGA-логику отвечать на команды процессора
Программа исполняет custom opcode: из регистрового файла процессора в RTL-блок уходят два 64-битных операнда rs1 и rs2. Логика FPGA считает CRC, один шаг коррелятора или специализированную fixed-point операцию, сигнализирует готовность и возвращает 64-битный результат в конвейер Sapphire RV64. Для кода это команда процессора; для разработчика железа — кусок собственной схемы, вызванный этой командой.
Efinix выпустила Sapphire RV64, конфигурируемый 64-битный RISC-V SoC IP, синтезируемый в fabric FPGA. Идея custom instructions у Sapphire была и в 32-битной версии, однако RV64 меняет масштаб задачи: рядом с пользовательской логикой появляется процессор, которому заявлены SV39 MMU, кэши, многогигабайтная внешняя память и публичный путь загрузки embedded Linux через Buildroot, OpenSBI и U-Boot.
Интерфейс пользовательской команды устроен достаточно предметно, чтобы планировать вокруг него архитектуру. Инструкция R-типа несёт два 64-битных входа и принимает один 64-битный выход. Десятибитный selector даёт до 1024 идентификаторов функций. Логика может вернуть ответ сразу либо удерживать процессор на рукопожатии до окончания вычисления. Такой вызов хорошо ложится на короткие, часто повторяемые операции, где стоимость записи регистров MMIO, ожидания статуса и чтения результата уже заметна: арифметику с насыщением, CRC, преобразования форматов, отдельный tap FIR или вычисление метрики коррелятора.
Для потокового FIR с большим состоянием и массивами отсчётов всё ещё понадобятся DMA, AXI и локальная память: одна команда переносит лишь пару регистровых операндов. Зато custom opcode убирает программную обвязку на границе между CPU и небольшой вычислительной функцией. Это интересный компромисс для SDR-периферии, детерминированных контуров управления и приборных протоколов, где ускорять приходится именно маленький горячий участок, а не запускать отдельное вычислительное устройство.
Linux занимает заметную часть кристалла
Sapphire RV64 построен вокруг семиступенчатого RV64IM-конвейера; доступны расширения A, F, D, C, Zba, Zbb, Zbs и Zicbom. Конфигурация поддерживает от одного до четырёх ядер, раздельные L1-кэши, опциональный L2, предсказание ветвлений и аппаратную либо программную предвыборку данных. Внутри FPGA можно выделить от 4 до 512 КБ локальной RAM, а контроллеры памяти заявлены для DDR3, HyperRAM и LPDDR4x. Число 3.2 Гбит/с относится к скорости интерфейса LPDDR4x при такте 1.6 ГГц, а не к измеренной полезной пропускной способности приложения.
Что ещё предстоит проверить на реальных платах
Linux-конфигурация здесь не декоративная галочка. В опубликованном Efinix flow кэш и MMU названы обязательными, а для платы Ti375C529 доступны проект аппаратуры, device tree и сборка образа. Производитель приводит для одноядерных референсных вариантов на Titanium Ti375 C529 частоты 250–278 МГц. Цена такого процессора в fabric вполне материальна: в зависимости от конфигурации таблицы дают 10 740–27 250 Logic/Adders, 9 024–17 869 триггеров, 91–225 блоков памяти и 17 DSP48.
Именно эти цифры делают RV64 инженерной историей, а не очередным ядром для демонстрации. На небольшой FPGA процессор может съесть пространство, оставленное под радиотракт, буферы и DSP; на крупной — дать Linux-плоскость управления и оставить рядом участок логики, который расширяет ISA под конкретный прибор. У hard-SoC набор команд фиксируется маской кристалла. Здесь граница CPU заканчивается там, где разработчик решил потратить ещё немного LUT, BRAM и тактового бюджета.
Документация описывает диапазон настройки тактовой частоты 20–400 МГц, однако достижимая частота всегда зависит от выбранной FPGA, кэшей, памяти, числа ядер и собственной логики вокруг ядра. Опубликованные результаты дают контекст для Ti375C529, Topaz Tz170 и Trion T120, но не заменяют отчёт timing closure конкретного проекта. Также в материалах Efinix есть расхождения в матрице поддерживаемых семейств, поэтому совместимость нужной микросхемы стоит сверять с версией Efinity IP Manager перед выбором платы.