tgoop.com/cpu_design/228
Last Update:
Вернемся к новому чипу от RaspberryPi.
Особенности микроархитектуры RP2350.
Микроконтроллер RP2350 на базе ядра Cortex-M33 обладает интересными микроархитектурными решениями в области работы с числами с плавающей запятой.
Одной из особенностей является интеграция кастомного математического сопроцессора двойной точности (DCP), который обеспечивает ускорение операций с числами double, включая сложение, вычитание, умножение, деление и извлечение квадратного корня.
Вместо использования стандартного IP-блока FPU двойной точности от ARM, который занимает значительную площадь кристалла, разработчики RP2350 внедрили компактный сопроцессор, меньший по площади в сравнении с типовым IP-core для поддержки double precision операций. Данное решение позволяет существенно ускорить операции с числами double по сравнению с программной реализацией, при этом минимизируя затраты на аппаратные ресурсы.
Модель программирования для кастомного сопроцессора DCP в RP2350 существенно отличается от стандартного FPU от ARM. При использовании стандартного FPU операции с плавающей запятой выполняются с помощью стандартных ARM-инструкций, и компилятор автоматически генерирует эти инструкции на основе кода высокого уровня, что упрощает разработку. В случае с DCP, разработчикам необходимо использовать специальные последовательности инструкций сопроцессора, известные как "canned instruction sequences", для выполнения операций с числами двойной точности. Это требует более низкоуровневого подхода к программированию и прямого взаимодействия с сопроцессором, что отличается от автоматизированного использования стандартного FPU.
С DCP возможно работать только в ARM режиме, RISC-V ядра не поддерживают работу с кастомным DCP, что обусловлено особенностями микроархитектуры RP2350.
За компактность DCP приходиться платить. Любое решение это компромисс, в данном случае компромисс в вопросах поддержки стандарта ieee-754. В DCP все денормализованные числа обрабатываются как ноль, что негативно сказывается на точности вычислений.
Подробности об ограничениях компактного FPU можно найти в разделе 3.6.2.9 "IEEE 754 compliance" спецификации микроконтроллера RP2350.
Больше деталей про устройство DCP можно найти в разделе 3.6.2 Double-precision Coprocessor (DCP) спецификации на микроконтроллер RP2350.
Примеры кода для работы с DCP можно найти в github репозитории микроконтроллера: https://github.com/raspberrypi/pico-examples/tree/develop/dcp
Библиотека Canned instruction sequences: https://github.com/raspberrypi/pico-sdk/blob/develop/src/rp2_common/hardware_dcp/include/hardware/dcp_canned.inc.S