IoT(Internet of Things)の活用が進むにつれ、バッテリ駆動の機器に対する莫大な需要が生まれています。それに伴い、電力効率の高いマイクロコントローラなど、システム・レベルのデバイスに対してはより高度な要件が求められるようになりました。その結果、超低消費電力(ULP:Ultra Low Power)という言葉が、マーケティング用語としても使われるようになっています。特に、マイクロコントローラについては、ULP という言葉が過剰に使われる傾向にあります。この言葉の本当の意味を理解するために、いくつか例を挙げてみます。まず、電力源が非常に限られている場合(エナジー・ハーベスティングなど)、動作電流は最小限に抑える必要があります。また、システムがほとんどの時間はスタンバイ・モードやスリープ・モードで待機しており、時々(定期的または非同期的に)起動してタスクを処理する場合には、スタンバイ電流やスリープ電流が最小限に抑えられていることが求められます。加えて、ULP という言葉は、電力効率という意味で使われるケースもあります。その場合、ほとんどの処理は限られた時間内に実行されます。バッテリ駆動の機器では、一連のトレードオフに基づいて、そうした要件の組み合わせに対応することになります。
もちろん、ULP は考え方や機能の問題でもあります。例えば、アクティブ・モードの消費電流が 30 µA/MHz ~ 40µA/MHz、シャットダウン時の消費電流が 50 nA ~ 70 nAのマイクロコントローラであれば、一般的には ULP であると見なされます。ただ、ULP であると分類されるマイクロコントローラは、アーキテクチャ、SoC(System onChip)の設計、プロセス技術、スマートな周辺機能、ディープスリープ・モードなどを複雑に組み合わせなければ実現できません。本稿では、アナログ・デバイセズが提供する 2 種のマイクロコントローラを例に取り、ULP という言葉の本当の意味を解釈する方法について解説します。また、EEMBC(Embedded Microprocessor BenchmarkConsortium) による認定のメカニズムについても説明します。EEMBC はスコアの正確さを保証することにより、システム開発者が自分のソリューションに最適なマイクロコントローラを選択できるよう支援しています。
ULP の測定、最適化
ULP について理解するための出発点として、その測定方法を取り上げます。通常、マイクロコントローラについて検討する際には、それぞれのデータシートを参照し、周波数(1 MHz)当たりの電流値や、各種スリープ・モードの電流値を確認します。ただ、データシートを見ても、アクティブ・モードにおける消費電流については、測定時に実行されているコードやフラッシュ・メモリの待機状態など、測定条件が細かく記載されているわけではありません。これが最初に直面する問題です。EEMBCの「CoreMark」のようなアクティブ・モード向けの基準を採用するベンダーもあれば、while 文による無限ループの実行といった単純な方法で消費電流を測定しているベンダーもあります。フラッシュ・メモリの待機状態が生じる場合、マイクロコントローラの性能は低下し、実行時間も長くなります。その結果、タスクを実行するための消費電力も増加します。また、消費電力として、標準電圧での値が記載されていることもあれば、最小電圧での値が記載されていることもあります。さらには、電圧について何も記載されていないケースも存在します。ここに挙げたことを些細な違いだと感じる人もいるかもしれません。しかし、基準を設けなければ比較として成立しないことも事実です。
一般に、ディープスリープ・モードについては、データシートにかなり詳しい説明が記載されています。ただ、その種のモードにおける消費電流の測定条件もベンダーごとにまちまちです(メモリの容量や電圧など)。また、実際のアプリケーションでは、そうしたモードに移行するときと脱するときの消費電力について考慮する必要もあります。それらの値は、デバイスがほとんどの時間をスリープ・モードで過ごすという場合であれば、さほど重要ではありません。ただ、頻繁に起動/スリープを繰り返す場合には大きな影響が及びます。したがって、システムにおいてマイクロコントローラはどれだけの時間をスリープ状態で過ごすのかということも確認しておくべきことになります。ULP の測定条件を定めるうえで、アクティブ・モードとスリープ・モードの間のバランスは重要な意味を持ちます。その作業を簡素化するために、EEMBC のベンチマークである ULPMark-CoreProfile(ULPMark-CP)では、1 秒間という周期を採用しています。多くのマイクロコントローラ・ベンダーは、データシート向けの基準として、この ULPMark-CP を採用しています。1 秒間というのは、EEMBC のワーキング・グループ内での合意に基づいて決定されたものです。ULPMark-CP のワークロード(作業負荷)においてアクティブ・モードにある時間を考慮すると、デューティ・サイクルは約 2 % になります。マイクロコントローラは 1 秒に 1 度起動し、少量の処理を実行して(アクティブ・サイクル)、スリープ・モードに戻ります。
一般に、アクティブ・モードの消費電流には、アナログ回路に起因するオフセットが存在します。システム全体の消費電力を最適化するうえでは、アクティブ・モードの消費電流を最小限に抑えつつ、ディープスリープ・モードを有効に活用することが重要になります。例えば、アクティブ電流は周波数を低く抑えることで削減できます。その一方で処理にかかる時間は長くなります。また、アナログ回路に起因するオフセットは、マイクロコントローラがアクティブである間は一定に保たれます。そうした点には注意が必要です。では、マイクロコントローラを選択する際には、一般にどのようなトレードオフが発生するのでしょう。また、アプリケーションのデューティ・サイクルや、ディープスリープ・モードにおける消費電流は、消費電力全般に対してどのような影響を及ぼすのでしょうか。
ここでは、サイクル当たりの消費電力を、デューティ・サイクル D(トータルの時間に対するアクティブ・モードにある時間の割合)を用いて表してみます。スリープ・モードへの遷移時に生じる消費電力は小さいと仮定すると、次のような簡単な式で表現できます。
傾きは ION で決まります。ISLEEP は ION よりもはるかに小さく、y 切片は ION だけで決まります。この式は、デューティ・サイクルについて理解するうえで役に立ちます。また、アクティブ電流の方がスリープ電流よりも重要であることがわかります。
ULP のテスト向けプラットフォーム
以下では、アナログ・デバイセズが提供するマイクロコントローラ「ADuCM4050」と「ADuCM302x」を比較します。いずれも、ULP 製品だと言うことができます。ULPMark-CP において、ADuCM4050 とADuCM302x はそれぞれ203、245.5 というスコアを達成しています。このベンチマークは、マイクロコントローラのコアだけを対象にしていることに注意してください(CoreProfileという名称がそのことを表しています)。両者には 18 % の差がありますが、以下に説明する事柄が要因となって違いが生じています。
まず、ADuCM4050 は、アーキテクチャとしてARMv7E-M を採用した ARM® Cortex®-M4F を搭載しています。それに対し、ADuCM302x はアーキテクチャとして ARMv7-M を採用した ARM Cortex-M3 を搭載しています。どちらのコアも、分岐予測を行う 3 ステージのパイプラインを備えています。また、命令セットのアーキテクチャとしても類似したものを採用しています。なお、DSP と浮動小数点演算は、Cortex-M4F だけがサポートしています。ただ、ULPMark-CP には DSP向けの命令は存在しません。そのため、ADuCM4050 はCortex-M4F を搭載しているものの、FPU によるメリットを得ることはできません。
ベンチマークを実施するにあたり、ADuCM4050 とADuCM302x は、それぞれ 52 M H z と 26 M H z で動作させました。ULPMark で定められたワークロードを実行するのに、ADuCM4050 では 1 万 1284 サイクル、ADuCM302x では 1 万 920 サイクルを要します(サイクル数は概算値)。つまり、前者は 1 秒間のうちの 217 マイクロ秒でアクティブ・モードが終了するのに対し、後者は 420 マイクロ秒の間アクティブ・モードで動作します。ADuCM4050 の方が ADuCM302x(この例では「ADuCM3029」を使用)よりもサイクル数を多く要する理由としては、使用される周波数が違うこと(52 MHz と 26 MHz)が挙げられます。もう 1 つの要因は、ADuCM4050 ではフラッシュ・メモリの待機状態が 1 つ必要になるのに対し、ADuCM3029 には待機状態がないことです。ADuCM4050 はキャッシュ・メモリを備えているので、フラッシュ・メモリの待機状態が存在することは大きなペナルティにはなりません。多くの命令はキャッシュ・メモリを使って実行されます。キャッシュ・メモリには、待機状態を増やすことなく最大速度( 52 MH z)でアクセスできるからです。実行時間については、ADuCM4050 の方が、定められたワークロードを ADuCM3029 よりも高速に実行します。ADuCM3029の 2 倍の周波数で動作させているからです。
EEMBC のベンチマーク用コードは、同コンソーシアムのメンバーであるか、ワーキング・グループに所属していなければ入手できません。メンバー登録はこちらから行うことができます。筆者はアナログ・デバイセズを代表して EEMBC の役員を務めています。したがって、詳細について筆者に問い合わせていただいてもかまいません。
ARM コア | ULPMark のアクティブ・モードを完了するまでに要するサイクル数 | ||
Cortex-M0 | 15,174* | ||
Cortex-M0+ | 14,253 | ||
Cortex-M3 | 10,920 | ||
Cortex-M4 | 11,852 | ||
Cortex-M4F | 11,284 | ||
*Cortex-M0+ と Cortex-M3 の値に基づく見積もり値です。 |
ところで、ADuCM4050 の消費電流は、なぜ ADuCM3029より 10 µA/MHz も多いのでしょうか。前者は後者の 2 倍の周波数で動作する可能性があります。高い周波数では、タイミング上の制約を満たすために追加のバッファが必要になるので、ADuCM4050 では消費電流が増えています。なお、ADuCM3029 と比較すると、ADuCM4050 には以下のような特徴があります。
- メモリ・サイズが 2 倍: SRAM とフラッシュ・メモリをそれぞれ 128 kB と 512 kB 備えています(ADuCM3029 は 64 kB と 256 kB)。アプリケーションの要件によっては、もっと多くのストレージが必要になる場合があります。
- 周波数が 2 倍: ADuCM3029 の 26 MHz に対してADuCM4050 は 52 MHz なのでより高性能です。
- RGB タイマーを内蔵
- 新たなセキュリティ機能を内蔵: 鍵のラップ/アンラップによる保護や、鍵のアンラップに対応する鍵付きHMAC をサポートします。
- 3 種の SensorStrobe™ 出力を追加。
- SRAM 全体のデータを保持する機能を内蔵: ADuCM4050 では最大 124 kB まで保持可能(ADuCM3029 は最大 32 kB)
電力の最適化、ストレージの追加、アクティブ動作の性能、保持の機能など、アプリケーションにはそれぞれ異なる要件があります。そうした要件に応じ、ADuCM4050と ADuCM302x のうち、どちらを使用するか選択することができます。
ディープスリープ・モードについては、ADuCM4050 はULPMark-CP の実行時に、 ADuCM3029 と比べて 2 倍の容量のメモリ・データを保持しつつ(前者は 16 kB、後者は 8 kB)、より少ないハイバーネート電流を実現します。より新しい製品である ADuCM4050 は、より高度なアーキテクチャを採用しているからです。
コンパイラの役割
先述したように、ULPMark ではマイクロコントローラがアクティブな状態と、スリープ・モードに移行して消費電力が抑えられている状態を扱います。これら 2 つの状態によって、1 秒間の周期が構成されます。アクティブな状態において、各製品は同じワークロードを実行することになります。しかし、当社がこれまでに検証した結果によれば、その処理効率はアーキテクチャに依存します。それだけでなく、コンパイラによっても左右されます。コンパイラによってステートメントに変更や最適化が施され、それによって使用される命令に違いが生じる場合があるのです。
アプリケーションの要件によっては、サイズを最適化したいケース、処理速度を最適化したいケース、あるいはサイズと速度のバランスを図りたいケースなどがあります。単純な例としては、ループ展開が挙げられます。これについては、コンパイラごとに、ループ内のコードに対する分岐実行の割合が変化します。コンパイラは、等価な処理を実行しつつ、計算結果を得るためのより良い方法を見つけるうえで大いに役立つ可能性があります。例えば、ADuCM3029 の場合、ULPMark-CP の結果は、速度を最重視して最適化した場合で 245.5、適度に最適化を施した場合で 232、わずかに最適化した場合で 209 といった具合に変化します。また、コンパイラとして「IAR Embedded Workbench」の新バージョンを適用し、Texas Instruments(TI)の「MSP430FR5969」について ULPMark を実施したところ、結果が 5 % 改善したと言います。これはコンパイラの重要性を表す1 つの例です。ただし、内部コンパイラによってどのような変更が加えられ、その結果、どれだけの改善が達成できたのかは不明です(eembc.org/ulpbench/) 。同様に、プロプライエタリなコンパイラ技術に関する知識がなければ、コンパイラを「armcc」から IAR Embedded Workbench に変更したことにより、STMicroelectronicsの「STM32L476RG」における結果が 16 % も向上した理由を解明することはできません。
アナログ・デバイセズの両マイクロコントローラの結果は、IAR Embedded Workbench でコンパイルしたコードを使用して得られたものです。ただし、コンパイラのバージョンは異なります。ADuCM4050 では「IAR EWARM 7.60.1.11216」、ADuCM302x では「IAR EWARM 7.50.2.10505」を使用しました。これらの例についても、内部でどのような変更が加えられたのか知ることはできません。どちらのスコアも、速度の最適化に対応する no_size_constraints オプションを指定して得た結果です。
ULPMark のスコアから電力値への変換
ULPMark-CP では、電力値の逆数を用いた公式が使われます(10 サイクルを実行したときの、1 秒当たりの平均電力の 5 倍の中央値)。
上式の電力量は、マイクロコントローラがアクティブ・モードでワークロードを実行するときに消費する電力と、スリープ・モードにおいて消費する電力の合計値です。
ADuCM3029 のデータシートによると、素数計算のコードを実行しているときのアクティブ電流は標準値で 980µ A です。そのコードはキャッシュに収まるため、消費電力が少ないというメリットを享受することができます。ただ、ULPMark-CP のコードは主に線形コードです。そのため、キャッシュを有効にしておくことに大きなメリットはありません。実際、消費電流は、データシートに記載されているキャッシュ無効時の値である 1.28mA と同程度の値になります。ハイバーネート電流について、ULPMark-CP では、LF XTAL(低周波水晶発振器)と RTC(リアルタイム・クロック)を有効にすることが求められます。スリープ・モードにおける消費電流は(データシートによると)830 nA です。先述したように、アクティブな時間は 420 マイクロ秒です。
データシートに記載された数値と実行時間から、アクティブ時の電力量は 1.61 µJ、スリープ時の電力量は 2.49 µJ となります。これらの値に基づくスコアは、EEMBCの EnergyMonitor(後述)を使って測定した値と一致します。
第 1 世代の ULPMark には 1 つ欠点があります。それは、実施上のルールとして、動作電圧が 3 V に限定されていることです(すべてのデバイスに対して共通のレベルを定めるために、ワーキング・グループがそのように定めました)。最新のマイクロコントローラのほとんどは、それよりも低い電圧で動作することで、より高い電力効率を達成します(温度と動作周波数からの影響は受ける可能性があります)。例えば、STMicroelectronicsの STM32L476RG で ULPMark を実施した結果は、DC/DC コンバータを使用して電圧を 3 V から 1.8 V に下げることで 19 % 向上します。
DC/DC コンバータを使用することで結果が変わるのは、この製品だけではありません。ただ、ADuCM302x とADuCM4050 は、DC/DC コンバータを内蔵しています。そのため、電力性能を高めるために DC/DC コンバータを外付けする必要はありません。いずれにせよ、DC/DCコンバータを使用すればマイクロコントローラは最適な電力効率で動作できるため、公平性の確保につながります。例えば、3 V でしか動作しない製品は、最適な(あるいは適切な)効率で動作するので、DC/DC コンバータによるメリットはありません。一方、1.8 V で動作可能なのに DC/DC コンバータを使用しなければ、基本的に供給電力の 64 % を無駄にしてしまうことになります。また、電力効率を重要視しているシステム設計者にとって、3 Vのバッテリをシステムで使用している場合に外付けの DC/DC コンバータを使用するための追加のコストは問題にならないかもしれません。なお、DC/DC コンバータを使用する場合、マイクロコントローラではなく、DC/DC コンバータの電力効率を測定していることになってしまわないように注意を払う必要があります。加えて、実際のアプリケーションでは、D C / D C コンバータを使用することにより、アクティブ・モードとスリープ・モードの間の遷移時間が長くなるといったデメリットが生じる可能性について考慮する必要があります。
DC/DC コンバータを使用する場合、その種類についても考慮する必要があります。誘導性の DC/DC コンバータは占有面積が大きく、コストが高く、EMI(電磁干渉)の問題を生じさせる可能性を持っています。このような問題を避けるために、ADuCM4050 と ADuCM302x では容量性の DC/DC コンバータが使用されます。詳細については、ADuCM3027/ADuCM3029 ユーザー・ガイドUG-1091(ADuCM3027/ADuCM3029 のセットアップと使用方法)を参照してください。
ULPMark-CP の結果やデータシートに記載された値を解析する際には、どのような製品にもばらつきが存在するということを認識しなければなりません。スリープ・モードの電力効率を測定する場合には、リーク電流が大きな要素になります。従来のベンチマークでは一般的には影響はありませんでしたが、温度や湿度といったさまざまな要因はリーク電流に対して影響をもたらします。それにより、ULPMark-CP の結果にも影響が及びます。各社の製品は、各社のプロセスを適用することで製造されます。その際には、完全に質が均一なデバイスがいくつも製造されるというわけではありません。日によって、あるいはウェーハごとに、わずかながら違いが生じます。つまり、同じ品番の製品であっても、すべての特性が完全に同一になるということはありません。もちろん、消費電力の値にもばらつきが生じます。当社の場合、測定を行った時間や場所によって、5 % ~ 15 % の変化が生じることを確認しています。このようなことを考慮すると、ULPMark-CP のスコアは電力効率の指針のレベルで使用すべきものであると言えるでしょう。例えば、あるデバイスで ULPMark-CPを実施した結果、そのスコアが 245 であったとします。しかし、異なるウェーハから製造されたデバイスでは、(誤差を 5 % と仮定すると)スコアが 233 ~ 257 程度の範囲でばらつく可能性があります。
認定のメカニズム―信頼を築くために
スコアの正確性を保証したい場合、ベンダーは EEMBCからの認定を取得しようと試みます。そのためには、プラットフォームに固有の構成(コンフィギュレーション)ファイルを添えて、ボードやツールを EEMBC TechnologyCenter(ETC)に送付することになります。EEMBC は、プラットフォームの構成ファイルを同コンソーシアムのシステム・ファイル(これにワークロードに関する定義が含まれています)に統合し、異なるボードを使ってスコアを複数回測定します。そのようにして得られた全測定値の平均値がスコアとして認定されます。
これにより、EEMBC は、すべてのスコアが同一の条件下(同一のワークロード、電力監視ボード、温度など)で取得されたものであることを保証します。
図 4 は、「ADuCM3029 EZ-KIT」を使って ULPMark-CPの測定を実施している様子を示したものです。
先述したように、EEMBC はスコアを測定するためのソフトウェア/ハードウェアとして EnergyMonitor を提供しています。このツールの GUI (Graphical User Interface) 上で「Run ULPBench」ボタンをクリックすると、Energy Monitor のハードウェアによってADuCM3029 EZ-KIT のボードに電源が投入されます。そして、プロファイルの実行中の消費電力が測定されます。測定の終了後、ソフトウェアによってスコアが計算され、結果が G U I 画面に表示されます。それまでのサイクルの平均消費電力も、GUI の履歴ウィンドウに表示されます。
次のステップ―マイクロコントローラの効率の解析
EEMBC の最終的な目標は、複数のベンチマーク用スイートを提供し、ユーザーがマイクロコントローラを徹底的に評価できるようにすることです。ULPMark-CPは、マイクロコントローラのコア部の効率を対象としたものです。それに続き、EEMBC は ULPMark-Per ipheralProfile(ULPMark-PP)をリリースしました。これは、A / D コンバータ(ADC)、パルス幅変調(PWM)回路、SPI(Serial Peripheral Interface)、RTCといったさまざまな周辺機能を対象としたものです。ULPMark-PPでは、マイクロコントローラがワークロードの処理を行う際、周辺機能に対して複数のトランザクションを実行します。このときのアクティブ電流とライトスリープ電流が、非常に重要な意味を持ちます。ULPMark-PP の実施結果は、EEMBC のウェブサイトに掲載されています。ULPMark-CP と ULPMark-PP を組み合わせたものが、EEMBC のメンバーに提供されているほか、ライセンス供与も行われています。
ULPMark-PP に続いては、IoTMark-BLE と SecureMarkの各スイートが提供される予定です。前者は、Bluetooth®を介した送受信におけるマイクロコントローラと無線の効率を測定するためのものです。後者は、複雑なセキュリティ用スイートです。IoT に対応するデバイスでは暗号に関するさまざまな要素を扱います。同スイートは、それらの要素の実装における消費電力と性能のオーバーヘッドを測定するために使用します。どちらも 2017 年末までにメンバーとライセンシーに対して提供される予定です。
ベンチマークは自動車に似ています。というのは、どちらも動作させてみる必要があるからです。すべてのマイクロコントローラ・ベンダーに対し、自社の製品を動作させた結果を公開するよう求めてください。筆者らは、(AmbiqMicro、アナログ・デバイセズ、STMicroelectronics、TIなどと同じように)より多くのベンダーが ULPMark の結果をデータシートに掲載するようになってほしいと考えています。それにより、スコアの信頼性が大いに高まり、データシートに記載された仕様の現実的な比較が可能になります。そのような状況が訪れれば、認定結果を公開していないベンダーに対しては、「なぜ公開しないのですか、何か隠しているのですか」といった質問がぶつけられるようになるでしょう。
参考資料
1 www.eembc.org/ulpbench/index.phpの最新スコアを参照してください。