Зачем Ардуине сопроцессор (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)?