Яндекс.Метрика


Система Orphus

Зачем Ардуине сопроцессор (FPU)?

Копаясь в сети на предмет различных щитов и прочих разностей, которые можно заюзать вместе с Ардуино – наткнулся, на первый взгляд, на любопытную вещь – сопроцессор. Сразу вспомнились времена 286-х и 386-х машин, и что тогда FPU – это было круто, его покупали инженеры и геймеры ;-) Действительно – а почему бы и микроконтроллеру не обзавестись своим сопроцессором? – тем более уж раз даже в средства разработки Ардуино (и компилятор Си) включена программная поддержка вычислений с дробными числами (числами «с плавающей точкой»). С точки зрения теории о востребованности сопроцессора вроде все красиво, и в некоторых случаях весьма актуально. Но далее я начал размышлять как инженер о практичности, целесообразности и наконец о быстродействии (получении временнОго выигрыша) при таком подходе… Но прежде меня несколько удивил (даже капельку шокировал) факт того, что сопроцессор для микроконтроллера разработанный и выпускаемый некоей Micromega имеет на своем корпусе наклеенную бумажку, которая гласит что под ней скрывается не что-нибудь, а  «uM-FPU» - это типа вместо маркировки микросхемы, странно, не правда ли?

И первая же мысль: что скрыто под наклейкой? - «кого» переименовали, и что решили этим замаскировать? Известно, что для сколь-нибудь крупной затеи сейчас не представляет сложности заказать производство партии любых самоспроектированных чипов на каком-нибудь китайском заводе (хоть на том же UMC) – разумеется, в промышленном количестве (от 1000 штук), с собственной заводской гравировкой (так например, во времена более 15 лет назад «русская» Денди содержала единственный «заказной» чип – UM6561, совмещающий в себе весьма разные компоненты). В данном же случае разработчики uM-FPU поступили иначе. И тут вторая мысль: в какой микроконтроллер зашили софтину, выполняющую вещественную арифметику? – но тут я подумал, что это я наверное слишком лихо хватил… Начались «гугления» на предмет получения более детальной информации об этом uM-FPU, в том числе где дешевле его можно заказать чтобы пощупать самому софтово и т.п.
А вместе с тем читал и изучал я материал с официального сайта Ардуино, где работе с данным сопроцессором посвящена готовая библиотека, а также пользовательскую документацию разработчика на сам сопроцессор.

С одной стороны (с точки зрения универсальности) казался логичным факт подключения сопроцессора к базовому микроконтроллеру по шине SPI (есть практически во всех современных контроллерах). С другой стороны – эта шина не обладает достаточным быстродействием чтобы «тягаться» производительностью с ядром контроллера и не быть при этом узким местом. Одновременно с этим понятно, что сам uM-FPU это не комбинационная схема (в любом случае), а некоторый автомат, имеющий свое ограниченное быстродействие (т.е. срабатывает не мгновенно). И вот всему этому «бутерброду» (контроллер -> SPI -> FPU -> SPI -> контроллер) предстоит (по задумке разработчика) показывать более высокую производительность при оперировании с вещественными типами данных, чем алгоритму, исполняемому на ядре ATmega! То, что есть возможность в железе реализовать более оптимальные алгоритмы обработки вещественных чисел (чисел «с плавающей точкой»), чем программно на ядре ATmega – нет никаких сомнений, хотя, разумеется также, что процессор (сопроцессор) для обработки вещественной арифметики должен имеет располагающую оптимизации таких операций архитектуру. Но даже с весьма технически (алгоритмически) продвинутым сопроцессором необходимо иметь быстрый канал передачи данных, при отсутствии которого весь выигрыш во времени на операциях вычислений будет теряться на передаче данных между сопроцессором и базовым (центральным) процессором. В рассматриваемом случае нам предлагают в качестве шины сопроцессора  последовательный интерфейс  SPI.

Но наверное всегда хочется верить в лучшее. И я в надежде на чудо, которое по логике вещей ждать вроде не от куда – решил все же купить этот uM-FPU, и занялся поиском наиболее оптимального магазина с точки зрения затрат на приобретение. Каково же было мое удивление (а вернее все встало на свои места), когда в одном из магазинов, сопроцессор uM-FPU сопровождала следующая картинка.

Конечно же – как я сразу и предположил uM-FPU – это прошивка (программа) для контроллера dsPIC30F3012 !!! Комментарии думаю излишни… Предлагают же купить «программу uM-FPU» по цене эквивалентной цене самого контроллера (т.е. за контроллер прошитый софтиной uM-FPU платишь как за два чистых контроллера). На форумах же, где обсуждают возможности контроллера dsPIC30F3012 по манипулированию с вещественными числами высказывается множество нелестных слов в его адрес, в том числе, что касается точности вычислений. В общем никакой «сказки» с сопроцессором uM-FPU не вышло – очередной развод, будьте внимательны…

MiGeRA (декабрь 2011)



Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » Зачем Ардуине сопроцессор (FPU)?