Микроконтроллеры со сверхнизким энергопотреблением:
маркетинговый ход или реальность?
Развитие «Интернета вещей» стимулирует огромный спрос на широкий ассортимент устройств с батарейным питанием. Это, в свою очередь, обусловливает необходимость повышения энергоэффективности микроконтроллеров и других компонентов системного уровня. В результате словосочетание «сверхнизкое энергопотребление» стало чрезвычайно популярной маркетинговой фразой, особенно при описании микроконтроллеров. В качестве первого шага в понимании истинного смысла выражения «сверхнизкое энергопотребление» следует рассмотреть ряд случаев его применения. Иногда самый низкий ток, потребляемый в активном режиме, необходим, когда выходной ток источника питания очень мал (например, в системах сбора энергии). Помимо этого, наименьший ток, потребляемый в режиме сна, нужен, если большую часть своего времени система проводит в режиме ожидания, периодически или асинхронно пробуждаясь для выполнения задач. Сверхнизкое энергопотребление подразумевает и эффективное расходование энергии, достижимое в результате того, что большая часть работы реализуется в течение ограниченного периода. В конце концов, в устройстве с батарейным питанием может использоваться сочетание указанных требований на основе определенных компромиссов.
Конечно, понятием «сверхнизкое энергопотребление» также оперируют исходя из субъективных оценок и функциональности. Например, обычно микроконтроллер рассматривают как устройство со сверхнизким энергопотреблением, если в активном режиме ему достаточно 30–40 мкА/МГц, а ток в режиме сна составляет 50–70 нА. Однако классификация микроконтроллера как устройства со сверхнизким энергопотреблением представляет собой процесс оценки сложной комбинации особенностей, включая архитектуру, технологию процесса изготовления, интеллектуальную периферию и режимы глубокого сна.
Измерение и оптимизация сверхнизкого энергопотребления
В качестве отправной точки в понимании «сверхнизкого энергопотребления» мы вначале объясним, как его измерять. Обычно разработчики анализируют документацию, где находят значения тока, потребляемого на 1 МГц, а также значения тока для разных режимов сна. Первая проблема заключается в том, что при рассмотрении значения тока, расходуемого в активном режиме, в документации обычно не объясняются условия получения этого значения, такие как исполняемый код, рабочее напряжение и периоды ожидания Flash-памяти. Некоторые компании-изготовители используют данные тестов производительности в активном режиме, например EEMBC CoreMark, другие же будут применять более простые методы оценки — скажем, запуск пустого бесконечного цикла while 1. Если у микроконтроллера есть такты ожидания до чтения Flash-памяти, то его производительность уменьшается, а время выполнения программы повышается и, следовательно, увеличивается потребление энергии для выполнения задач. Одни производители называют значения при стандартном напряжении, другие — при минимальном напряжении, а третьи вовсе не указывают напряжение. Возможно, различия не столь значительны, но без стандарта все эти сравнения остаются приблизительными.
Как правило, в документации довольно хорошо описаны режимы глубокого сна, но, опять же, условия получения значений потребляемого в этих режимах тока меняются в зависимости от производителя (например, в качестве сопутствующих факторов, при которых производились измерения, одни указывают объем используемой памяти, другие — напряжение). К тому же в реальном приложении пользователь должен учитывать и потребление энергии при входе и выходе из данных режимов. В зависимости от того, проводит устройство большую часть времени в режиме сна или часто просыпается, величина может быть как пренебрежимо малой, так и весьма значительной. Это приводит нас к следующему аспекту в понимании «сверхнизкого энергопотребления»: сколько времени находится устройство в режиме сна? Баланс между активным режимом и режимом сна важен для определения порядка измерения сверхнизкого энергопотребления. Чтобы упростить процесс, в EEMBC использовали 1‑секундный период для ULPMark-CoreProfile (ULPMark-CP) — бенчмарка, или эталонного теста производительности, применяемого в качестве стандарта многими производителями микроконтроллеров (рис. 1).
Кстати, решение взять в качестве стандарта период в 1 с было утверждено рабочей группой EEMBC. С учетом времени активной нагрузки ULPMark-CoreProfile рабочий цикл составит около 98%. В этом бенчмарке устройство просыпается один раз в 1 с, выполняет небольшое количество инструкций (активный цикл), а затем снова возвращается в спящий режим.
Как правило, в активном режиме происходит смещение потребляемого тока вследствие влияния аналоговой схемы, поэтому для оптимизации использования энергии системы в целом есть смысл минимизировать активный ток и эффективно использовать режимы глубокого сна. Следует обратить внимание, что, уменьшив частоту, можно снизить и потребляемый в активном режиме ток, но время выполнения задачи будет увеличено, и смещение из-за влияния аналоговой цепи останется постоянным, пока микроконтроллер будет активен. Однако какие существуют компромиссы при выборе микроконтроллера и каково влияние рабочего цикла приложения и токов, расходуемых в режиме глубокого сна, на потребляемую энергию?
Энергия, израсходованная за цикл, как функция, зависящая от рабочего цикла D (который выражен в процентном соотношении времени, проведенного в режиме сна, к общему времени), определяется упрощенным уравнением, предполагающим, что энергия при включении и выключении очень мала.
Энергия (мкДж) =Vхtх[(IACTIVE × DACTIVE)+(ISLEEP × DINACTIVE)].
Здесь наклон определяется величиной потребляемого в активном режиме тока (IACTIVE), поскольку ток, потребляемый в режиме сна (ISLEEP), намного меньше, чем IACTIVE, и ISLEEP на графике представлен лишь тонким прямым отрезком вдоль оси абсцисс. Это уравнение помогает оценить рабочий цикл, в котором потребляемый в активном режиме ток более важен, чем ток, расходуемый в режиме сна.
Платформы для оценки сверхнизкого энергопотребления
Как уже говорилось, в статье мы будем сравнивать энергопотребление двух микроконтроллеров компании Analog Devices — ADuCM4050 и ADuCM302x. В таблице результатов ULPMark (рис. 2) ADuCM4050 и ADuCM302x набирают 203 и 245,5 очка соответственно.
Следует иметь в виду, что данный бенчмарк тестирует только ядро микроконтроллера (отсюда и название — CoreProfile). Как же объяснить 18%-ную разницу?
Ядро ARM |
Приблизительное количество циклов |
Cortex-M0 |
15174* |
Cortex-M0+ |
14253 |
Cortex-M3 |
10920 |
Cortex-M4 |
11852 |
Cortex-M4F |
11284 |
Примечание. * Оценка, основанная на показателях Cortex-M0 + и Cortex-M3.
Микроконтроллер ADuCM4050 содержит ядро ARM Cortex-M4F, базирующееся на архитектуре ARMv7E-M. ADuCM302x содержит ядро ARM Cortex-M3, основанное на архитектуре ARMv7‑M. Хотя оба ядра имеют трехступенчатый конвейер с логикой предсказания переходов и схожие архитектуры набора команд, Cortex-M4F поддерживает цифровую обработку сигналов и инструкции с плавающей запятой. Поскольку ULPMark-CoreProfile не предусматривает возможности цифровой обработки сигналов, компонент с ядром Cortex-M4F в данном тесте не получает никаких преимуществ от блока инструкций с плавающей запятой (таблица).
Результаты теста получены при работе ADuCM4050 и ADuCM302x на частотах 52 и 26 МГц соответственно. ADuCM4050 требует около 11284 циклов для обработки рабочей нагрузки ULPMark, а ADuCM302x для этих целей необходимо 10920 циклов. Это означает, что первый микроконтроллер находится в активном режиме 217 мкс из одно-секундного периода, тогда как второй активен на протяжении 420 мкс. Причина, по которой ADuCM4050 использует немного больше циклов, чем ADuCM3029, заключается в рабочей частоте (52 и 26 МГц соответственно), ADuCM4050 нуждается в одном такте ожидания до чтения Flash-памяти, тогда как ADuCM3029 не имеет тактов ожидания. Поскольку ADuCM4050 имеет кэш-память, добавление одного такта ожидания не является существенным фактором, влияющим на производительность, ведь из кэш-памяти выполняется множество инструкций, к которым можно получить доступ при полной скорости (52 МГц) без тактов ожидания. Что касается времени выполнения, как и ожидалось, ADuCM4050 обрабатывает рабочую нагрузку быстрее, чем ADuCM3029, поскольку функционирует с частотой, вдвое большей, чем у ADuCM3029.
Для того чтобы получить код бенчмарка EEMBC, пользователь должен быть участником EEMBC или состоять в рабочей группе. Зарегистрироваться в качестве участника можно по ссылке.
Но почему ADuCM4050 потребляет на 10 мкА/МГц больше, чем ADuCM3029? Причина такого увеличения расхода энергии заключается в том, что первый микроконтроллер может работать с частотой, вдвое большей частоты второго, из-за чего требуются дополнительные буферы для преодоления временных ограничений при более высоких частотах. ADuCM4050 также имеет некоторые дополнительные функции и особенности по сравнению с ADuCM3029:
- удвоенный объем памяти (как статического ОЗУ (SRAM), так и Flash): 128 и 512 кбайт против 64 и 256 кбайт у ADuCM3029; в зависимости от потребностей приложения может понадобиться дополнительный объем памяти;
- удвоенная частота: 52 против 26 МГц у ADuCM3029, поэтому ADuCM4050 имеет лучшую производительность;
- добавлен таймер RGB;
- новые функции безопасности: защищенное хранилище ключей с шифрованием и дешифрованием ключей и механизм проверки целостности информации HMAC с дешифрованием ключей;
- три дополнительных выхода SensorStrobe;
- добавлена возможность полного сохранения SRAM при частичном питании: до 124 кбайт может быть сохранено на ADuCM4050 против 32 кбайт на ADuCM3029.
В зависимости от потребностей приложения (оптимизация энерго-потребления, дополнительный объем памяти, производительность в активном режиме, возможность сохранения информации при частичном питании и т. п.) можно выбрать ADuCM4050 или ADuCM302x.
Что касается режима глубокого сна, ADuCM4050 достигает минимального гибернационного тока при сохранении в памяти в два раза больше данных, чем ADuCM3029 (16 кбайт у первого против 8 кбайт у второго). Причиной такого различия является усовершенствованная архитектура нового микроконтроллера ADuCM4050.
Роль компилятора
Итак, бенчмарк ULPMark предусматривает два рабочих состояния: активное и пониженного энергопотребления, когда устройство находится в спящем режиме. Оба состояния объединяются в рабочий цикл, период которого равен 1 с. В активном состоянии каждое устройство обрабатывает одинаковую рабочую нагрузку. Но, как мы успели заметить, на эффективность подобной обработки влияет не только архитектура, но и компилятор. Компиляторы могут изменять и оптимизировать выражения кода, так что меняется комбинация команд.
В зависимости от потребностей приложения можно оптимизировать размер программы, скорость ее выполнения, сбалансировать размер и скорость друг относительно друга и т. п. Раскрутка цикла представляет собой простой пример, когда отношение ветвлений к общему количеству команд внутри цикла изменяется. Компиляторы все еще могут играть большую роль в поиске лучшего способа вычисления результатов, но выполняемая работа эквивалентна. Например, результат ULPMark-CP для ADuCM3029 может варьироваться от 245,5 при высокой оптимизации по скорости до 232 при среднем уровне оптимизации или составлять 209 при низком уровне оптимизации. Другой пример важности компилятора продемонстрирован результатами ULPMark микроконтроллера MSP430FR5969 компании Texas Instruments, которые улучшились на 5% благодаря применению более новой версии компилятора IAR Embedded Workbench, хотя неизвестно, какие изменения, повлиявшие на такое улучшение (www.eembc.org/ulpbench/), были выполнены внутри компилятора. Точно так же, без понимания проприетарной технологии компилятора, невозможно определить, почему результаты микроконтроллера STM32L476RG компании STMicroelectronics улучшились на 16% при переходе от компилятора ARMCC к компилятору IAR.
Оба результата, выданные микроконтроллерами компании Analog Devices, были сгенерированы посредством кода, реализованного разными версиями компилятора IAR. ADuCM4050 и ADuCM302x использовали IAR EWARM 7.60.1.11216 и 7.50.2.10505 соответственно. Опять же, невозможно узнать, какие внутренние изменения были сделаны в компиляторе. Оба результата получены с активной опцией no_size_constraints, что соответствует оптимизации по скорости.
Перевод результатов ULPMark в величину энергии
В ULPMark-CoreProfile используется формула, которая позволяет рассчитать величину энергии, обратно пропорциональную результату EEMarkCP:
Энергия (мкДж) = 1000/EEMarkCP.
Эта энергия равна сумме энергии, потребляемой, когда устройство обрабатывает рабочую нагрузку (в активном режиме), и энергии, потребляемой, когда устройство находится в режиме сна:
Энергия = Энергия в активном режиме + Энергия в режиме сна.
Согласно документации на ADuCM3029, типичное значение величины активного тока составляет 980 мкА при обработке кода с простыми числами. Код помещается в кэш и пользуется его преимуществом, обеспечивающим низкое энергопотребление. Для кода ULPMark-CoreProfile, поскольку это в основном линейный код, нет особого преимущества в применении кэша, поэтому в данном случае величина потребляемого тока будет примерно равна указанному в документации значению при отключенном кэше, то есть 1,28 мА. Для оценки гибернационного тока ULPMark-CoreProfile требует наличия низкочастотного резонатора (LFXTAL) и часов реального времени (RTC), в итоге потребление тока в спящем режиме составляет 830 нА (согласно документации). Как уже упоминалось, продолжительность времени, которое микроконтроллер проводит в активном режиме, составляет 420 мкс.
Энергия = Напряжение × Ток × Время;
Энергия в активном режиме = 3 В × 1280 мкА × 0,42 мс = 1,61 мкДж;
Энергия в режиме сна = 3 В × 0,83 мкА × 999,58 мс = 2,49 мкДж.
В соответствии с приведенными в документации цифрами и временем выполнения потребляемая энергия при активном токе составит 1,61 мкДж, а энергия, потребляемая в режиме сна, — 2,49 мкДж. Величина расходуемой энергии, вычисленная на основе этих цифр, соответствует значению, полученному в результате измерений с помощью программного обеспечения EEMBC EnergyMonitor.
Энергия (мкДж) = 1,61+2,49 = 4,1 мкДж ≈ 1000/245,5 = 4,07 мкДж.
Один из недостатков первого поколения бенчмарка ULPMark в том, что правила тестирования ограничивают рабочее напряжение до 3 В (значение было установлено рабочей группой, чтобы задать общий уровень напряжения для всех устройств). Большинство современных микроконтроллеров имеют намного лучшую энергетическую эффективность при работе с более низким напряжением (хотя на это могут влиять температура и рабочая частота). Например, ULPMark-результат микроконтроллера STM32L476RG компании STMicroelectronics может быть улучшен на 19% за счет использования DC/DC-преобразователя для понижения напряжения с 3 В до 1,8 В.
Микроконтроллер STM32L476RG — это не единственное устройство, на опубликованный результат которого влияет использование DC/DC-преобразователя, впрочем, в некоторые устройства такой преобразователь уже интегрирован, например в ADuCM302x и ADuCM4050 (рис. 3) — им не требуется внешняя микросхема для минимизации энергопотребления. Тем не менее применение DC/DC-преобразователя позволяет уравнять условия конкурентной игры, поскольку в итоге устройство работает с оптимальной энергетической эффективностью. Скажем, устройство, действующее только с напряжением 3 В, не получит преимуществ от DC/DC-преобразователя, его энергопотребление уже оптимально (или почти оптимально). В то же время устройство, которое может работать с напряжением до 1,8 В, но не использует DC/DC-преобразователь, теряет примерно 64% подаваемой энергии. Кроме того, для системного разработчика, чьим приоритетом является энергоэффективность, дополнительная стоимость внешнего DC/DC-преобразователя может показаться незначительной, если в системе предусмотрена батарея напряжением 3 В. Следует быть внимательным при использовании DC/DC-преобразователя, чтобы избежать измерения энергоэффективности преобразователя, а не микроконтроллера. Однако нужно учитывать, что в реальных приложениях режимы работы DC/DC-преобразователя могут иметь недостатки, такие как увеличение времени перехода из активного режима в режим сна или, наоборот, из спящего в активный режим.
Кроме того, при эксплуатации DC/DC-преобразователя нужно учитывать и его тип. Некоторые преобразователи основаны на индуктивности, и они занимают более широкую площадь, имеют более высокую стоимость и могут создавать электромагнитные помехи. Устройства ADuCM4050 и ADuCM302x используют емкостный преобразователь, что позволяет избежать этих проблем. Для получения дополнительной информации можно обратиться к руководству пользователя UG‑1091 — How to Set Up and Use the ADuCM3027/ADuCM3029 Microcontroller («Как настраивать и использовать микроконтроллеры ADuCM3027/ADuCM3029»).
При анализе результатов ULPMark-CP или даже значений, приведенных в документации, важно знать причину отклонений параметров устройства. Другими словами, ток утечки является очень важным фактором, когда речь идет об измерении потребляемой устройством энергии, особенно в режиме сна. В то время как традиционные тесты производительности, как правило, не учитывают такие моменты, различные факторы, в частности температура и влажность, оказывают определенное воздействие на ток утечки устройства, что, в свою очередь, будет влиять на результат ULPMark-CP. Изготовленные в разные дни или на основе разных пластин устройства от одного производителя будут немного отличаться друг от друга. Даже потребляемая энергия компонентов одной номенклатуры может меняться (мы видели изменения в диапазоне 5–15% в зависимости от того, когда и где проводились измерения). В сущности, это означает, что данный показатель ULPMark-CP следует использовать в качестве ориентира энергоэффективности. Например, произведенные на основе разных пластин компоненты одного и того же наименования устройства, дающие ULPMark-результат 245, могут показывать значения в диапазоне 233–257.
Механизм сертификации: установление достоверности результатов
Для того чтобы гарантировать достоверность результатов тестов, изготовители, желающие сертифицировать свои устройства, отправляют плату и инструменты в технологический центр EEMBC (ETC) вместе с конфигурационными файлами для конкретной платформы. В EEMBC объединяют файлы конфигурации платформы в свои системные файлы (куда включается и рабочая нагрузка) и несколько раз получают результат на различных платах. Результат, который указывают в сертификате, представляет собой среднее значение всех измерений.
Таким образом, EEMBC гарантирует, что условия получения всех результатов одинаковы. На рис. 4 показано соединение платы ADuCM3029 EZ-Kit со специальной платформой для получения результатов ULPMark-CP.
Для проведения измерений и определения результатов EEMBC предоставляет программное обеспечение EnergyMonitor (рис. 5).
При нажатии кнопки Run ULPBench аппаратное обеспечение EnergyMonitor включает плату ADuCM3029 EZ-Kit и измеряет энергопотребление во время ее работы. По завершении выполнения тестового кода программное обеспечение вычисляет результат и отображает его на экране. Программное обеспечение также отображает в окне истории среднее значение энергии, потребляемой за предыдущие циклы.
Перспективы: анализ эффективности микроконтроллеров
Конечная цель EEMBC — выпуск нескольких наборов тестов, которые позволят тщательно оценить микроконтроллер. Вслед за бенчмарком ULPMark-CP, предназначенным для определения эффективности ядра микроконтроллера, недавно был выпущен ULPMark-PeripheralProfile (ULPMark-PP), созданный для тестирования и оценки различных периферийных блоков микроконтроллера, таких как АЦП, ШИМ, SPI и часы реального времени. В ULPMark-PP очень важны токи, потребляемые в активном режиме и режиме неглубокого сна, поскольку устройство выполняет несколько периферийных операций в рамках рабочей нагрузки. Результаты для ULPMark-PP доступны на сайте EEMBC; совмещенные ULPMark-CP и ULPMark-PP доступны для членов консорциума EEMBC или по лицензии.
Сейчас в разработке находятся инструменты IoTMark-BLE и SecureMark. Первый предназначен для оценки эффективности микроконтроллера и радиомодуля, принимающего и передающего данные по Bluetooth. Второй представляет собой комплексный инструмент проверки безопасности, который будет измерять потребляемую энергию и производительность при испытании различных криптографических элементов для устройств «Интернета вещей».
Бенчмарки похожи на автомобили — нужно, чтобы люди запускали их и управляли ими. Поэтому можно рекомендовать всем производителям микроконтроллеров запускать бенчмарки и опубликовывать результаты тестирования своих устройств. Также нужно, чтобы все больше производителей включали результаты ULPMark в свою документацию, как поступили, например, компании Ambiq Micro, Analog Devices, STMicroelectronics и TI. Это значительно повышает доверие к продукту и приближает реальные характеристики устройства к тем, что указаны в документации.