後藤弘茂のWeekly海外ニュース
スマートウォッチの電池と価格の呪縛を解き放つSoC設計と実装
(2014/10/30 06:00)
1週間1回充電と50~100ドルがスマートウォッチのターゲット
現在の高機能スマートウォッチは、1~2日毎に充電しなければならない機種がほとんどだ。これは、現在のスマートウォッチが、スマートフォン向けのモバイルSoC(System on a Chip)を低電圧&低周波数駆動で使っているからだ。そのため、低電力化に限界があり、どうしてもバッテリ駆動時間が短くなっている。
また、現在の高機能スマートウォッチは、中心価格帯も200ドル(2万円)台とかなり高い。これも、立ち上がり期だから高価格になるのは仕方が無い側面があるが、その原因の1つは、やはり半導体チップ群のコストにある。
現在のバッテリ時間と価格では、スマートウォッチの狙う、コンシューマに寄った真のウェアラブル市場は狙うことができない。ギーク(オタク)の趣味の世界のデバイスで、従来の腕時計を置き換えて子供から老人までが日常的に使うデバイスにはなれない。
スマートウォッチが普及するためには、1週間のバッテリライフと、100ドル以下の価格が望ましいと言われている。今年(2014年)5月に開催されたThe Linley Groupの「Mobile Conference 2014」のキーノートスピーチで、Linley Gwennap氏(Principal Analyst, The Linley Group)は、コストがウェアラブルの鍵になると説明している。現在のスマートウォッチの価格は「Two-Spouse Decision(夫婦2人で決めるべき事項)」、つまり、既婚男性が買おうとすると奥さんの合意が必要になる価格だという。100ドル以下で、できれば50ドル以下が望ましいラインだろうという。
こうしたコストと電力の目標を達成するためには、SoCをウェアラブル専用に設計する必要がある。問題は、現在は、まだそうした用途のSoCが存在しないことで、開発する必要がある。
ウェアラブルに最適化することが可能なCPUコア
ウェアラブルデバイスは3レベルの市場に分かれる。スマートウォッチのようなミッドレンジウェアラブル向けのSoC開発で、鍵となるのはモバイルとは異なる「PPA(Performance, Power, Area:パフォーマンス、電力、ダイエリア)」最適化だ。スマートフォンよりもはるかに電力消費を抑えた設計にする必要がある。最終的に100ドル以下のコストを目指すには、ダイ面積も極端に小さくしなければならない。
スマートウォッチなど高機能なウェアラブル機器向けにARMが推奨するCPUコアはCortex-A5やCortex-A7など、ローエンドのスマートフォンでも使われているCPUコアだ。しかし、同じCortex-A5/A7でも、スマートフォン向けとは全く異なる、ウェアラブル向けのコンフィギュレーションも実装が可能だ。ウェアラブルに最適化すれば、CPUコアの基本アーキテクチャはモバイル向けと同じでも、消費電力やダイエリア(半導体本体上の面積)などは全く異なるチップを作ることができる。
Intel CPUとは根本的に異なる実装の考え方
Intel CPUのようにPCとサーバー市場に寄ったチップ設計では、CPUコアなどは、コンフィギュレーションや実装にもバリエーションがほとんどない。Intelの場合は、どの製品でも、CPUコアはほとんど同じコンフィギュレーションで、ほとんど同じ物理設計で、ほとんど同じプロセスで、ほとんど同じトランジスタオプションだ。なぜ全部に“ほとんど”がついているかというと、Intelの内部的には各製品毎にコアに明確な違いがあるからだ。Intelとしては、それぞれの市場に向けてコアをかなり特化させているつもりだ。しかしその違いは、Intel以外の半導体業界から見れば振り幅が小さい。ほかの半導体企業から見れば、Intelの内部での実装の差は、高性能に最適化した実装の中での、細かなバリエーションに過ぎない。
それに対して、ARMのようなCPUコアIPの場合、CPUのコンフィギュレーションの幅が広く、セルライブラリの選択肢も豊富で、カスタム設計も可能で、プロセス技術自体に選択が多く、トランジスタオプションも変えられる。無数のバリエーションがあり、CPUコアのダイエリアも動作周波数もピークTDPも平均消費電力も全てが個々の実装毎に甚だしく異なる。
そのため、Intel CPUのように、22nm Atom(Silvermont:シルバモント)コアだから、消費電力やダイはこの程度といった決めつけが、IPコアの場合はできない。同じコアで同じ動作周波数でも、数十倍も平均電力が異なる場合がありうる。PCとは全く異なる仕組みで成り立っている。
こうした自由度のために、ARMなどのIPコアをベースにすると、ウェアラブルに組み込むSoCでは、高機能スマートウォッチといった特定市場に完全に最適化した選択や設計/実装が可能だ。しかし、無数の選択肢があることは、選択や設計を、非常に難しくしている。
CPUコアのコンフィギュレーションが違うモバイルとウェアラブル
ウェアラブルとスマートフォンのそれぞれのSoC設計で大きく異なるようになるのは、CPUコアなどのコンフィギュレーションと実装だ。スマートフォン向けのCPUの電力バジェットはコア当たり数百mWのレンジだが、ウェアラブル向けCPUになると数十mWのレンジに押さえる必要がある。同じCortex-A7コアを使うとしても、電力は数分の1に抑えるところがポイントだ。
では、どこで電力を減らすのか。
ARMのCPUコアは、通常、ソフトウェアのソースコードにあたるソフトマクロ「RTL(Register Transfer Level)」としてライセンスされる。RTLは、オプションでコンフィギュレーションを変えることができる。電力消費の多いユニットを削ることで、CPUコアの電力消費を大幅に抑えることが可能だ。変更可能な機能の代表はキャッシュメモリ量だ。
モバイルSoCでは、最小のCortex-A5でもデュアルコアMP2構成で最低512KB~1MBのL2キャッシュと32KBずつのL1キャッシュを備えるのが一般的だ。これを削減することで、アクティブ電力とリーク電流でほとんどが消費されるスタティック電力の両方を大幅に下げることが可能になる。しかし、PCならキャッシュを大きく減らすと性能に大きな影響が出る。ウェアラブルの場合はどうなのか。
ARMは、モバイルではワークロードのデータセットが大きいためにキャッシュ量が性能に影響するが、ウェアラブルでは相対的にデータセットが小さくなるため異なると見ている。下のスライドの分析では、右上のグラフにあるように、L1キャッシュはモバイルで一般的な32KBから半分の16KBにしても、SpecInt2kで見るとパフォーマンスインパクトが小さい。SpecInt2kのようにワークロードが小さい場合は、L1は16KBでも効果的だ。
L2キャッシュも同様だ。上のスライドの右下の図のブルーの柱がラージデータセット、レッドの柱がスモールデータセットの相対性能だ。L2キャッシュを持たない場合を1とした場合、ラージデータセットではL2量でかなりの性能差が出る。それに対してスモールデータセットの場合は差は非常に小さい。スモールワークロードに限定されるならキャッシュは小さくても影響は少ないことになる。
16KB L1と128KB L2あたりがウェアラブルのスィートスポット
では、高機能なスマートウォッチなどでは、どの程度のキャッシュ量が最適解のスイートスポットになるのか。10月に開催されたARM TechconのウェアラブルSoC設計のセッション「Design Principles for Ultra-Low Power Wearable SoCs」では、具体的にウェアラブル向けのCPUコア最適化のキャッシュ削減の例が示された。下のスライドは、Cortex-Aシリーズで最小のCortex-A5コアのキャッシュ量とパフォーマンスの相関を示したものだ。
図の一番左は共有L2キャッシュが128KBでコア占有L1キャッシュが32KBの場合、左から2番目はL1を16KBに半減させた場合で、性能は18%落ちる。左から3番目はL2キャッシュを削除してL1を32KBにした場合で、31%の性能低下となる。L2なしでL1を16KBにした場合は性能は半減する。先ほどのスライドと性能の数値が異なり、より影響が大きいのはベンチマークがよりアプリケーション寄りのBBenchだからだ。
これを比較すると明瞭で、L2を外してL1を半減させると、パフォーマンスインパクトは大きなものになる。L2の削除とL1の半減では、L2削除の方が性能低下が大きい。L1を16KB減らすことと、L2を128KBなくすことでは、後者の方がSRAM容量の削減幅が大きいが、通常L1キャッシュの方がL2より電力を消費する。
また、L1ミスの場合はL2で拾えるが、L2キャッシュにヒットしないと、Cortex-Aでは通常は外付けDRAMまでアクセスしなければならない。DRAMアクセスの電力も考えて、キャッシュを減らすことが電力面で得かを評価する必要がある。L2をなくす場合は、DRAMアクセスである程度電力削減効果が相殺されてしまうのでL2が重要になる。
そうしたバランスを考慮すると、Cortex-A5でのウェアラブル向けのスィートスポットのコンフィギュレーションは、デュアルコアMP2で、16KBのL1キャッシュと128KBのL2キャッシュの組み合わせだろうという。
SRAMインスタンスの選択の違いで変わるL1の電力
キャッシュ量がどうしてそんなに重要かというと、Cortex-A5やA7のコアでは、キャッシュの電力の比率が非常に大きいからだ。例えば、28nmのCortex-A7のスマートフォン向けの実装では、CPUコア全体の中でロジック部は、トランジスタのスイッチに起因するダイナミック電力では58%しか占めていない。残りの42%は、32KBのL1キャッシュSRAMが消費している。下のスライドの右上の円グラフがその図で、オレンジがCPUロジック、ブラウンがL1キャッシュのダイナミック電力だ。同様にリーク電流にほとんどが起因するスタティック電力を比べると、CPUコアのロジック部は82%で、32KBのL1キャッシュは18%を消費する。下のグリーンの円グラフのライトグリーンがCPUロジック、グリーンがL1だ。CPUロジックの方が通電状態でのリーク電流(Leakage)が多いトランジスタが多いためだと見られる。
このように、キャッシュの電力消費は非常に大きいため、キャッシュ量の削減は大きな意味がある。また、キャッシュの量だけでなく、キャッシュの実装を変えることでも電力は削減できる。キャッシュ用SRAMと一口にいっても、SRAMセルや回路構成にはバリエーションがある。SRAMの回路部品であるインスタンス(回路ブロック)の選択によって、性能重視のキャッシュも、電力効率重視のキャッシュも作り出すことができる。
上のスライドの左の棒グラフは、28nmプロセスでのCortex-A7のL1キャッシュの量とインスタンスの比較だ。ブルーの柱はスマートフォン向けの性能最適化SRAMのダイ面積、レッドの柱はウェアラブル向けの電力最適化SRAMのダイ面積だ。また、ブラウンの折れ線が、スマートフォン向けSRAMのリーク電流、ライトブルーの折れ線がウェアラブル向けSRAMのリーク電流を示している。
中央の16KBのL1キャッシュを比較すると、キャッシュSRAMセルに電力最適化のインスタンスを使うと、性能最適化インスタンスの70%程度の面積で、20%程度のリーク電流に下がることが分かる。つまり、リーク電流に消費されるスタティック電力が80%に減る。アイドル時の電力関しては効果が絶大だ。キャッシュ量が減ると、効果が薄まることもわかる。
L2もインスタンスによってリーク電流が変わる
同じ28nmのCortex-A7デュアルコアでL2キャッシュの場合は、量と性能と電力はどうなのか。デュアルコアのCPUモジュールで、全体の面積のうち、CPUコアは32KBのL1キャッシュを含んでそれぞれ23%ずつの面積。デュアルのCPUコアで全体の50%近くとなる。残りは、37%が256KBのL2キャッシュ、それ以外はバスなどCPUコア以外のロジックが17%となる。L2が倍の512KBになると、L2の方がCPUコアよりも面積が大きくなる。
下のスライドの左のチャートのブルーの柱はスマートフォン向けの性能最適化のL2キャッシュ面積。レッドがウェアラブル向けの電力最適化のL2面積。折れ線はリーク電流(Leakage)で、ライトブルーの折れ線はウェアラブル最適化キャッシュのリーク電流(Leakage)オレンジの折れ線は、モバイル最適化のリーク電流(Leakage)だ。
L2はもともとL1と比べるとエリア密度の高いSRAMセルを使う。そのため、より電力に最適化したL2キャッシュのインスタンス(回路ブロック)を使っても、面積は5%程度しか減らない。ウェアラブル向けに128KBに減らした左端の構成でも同様だ。ただし、スマートフォン向けの512KB程度の構成と比較するなら38%に面積が減る。リーク電流を比較すると、128KBでスマートフォンの最適化インスタンスに対して、ウェアラブルのインスタンスの方が30%以上のリーク電流が減る。512KBのスマートフォン向けL2と比べると、リーク電流は5分の1以下だ。
このように、キャッシュの量をウェアラブル向けに最適化し、キャッシュSRAMのインスタンスを電力最適化すると、それだけでCPUモジュールの電力を大幅に減らすことが可能になる。では、CPUコア自体の実装はどうなのか。
同じCPUコアでも実装によってPPAが変わる
同じCPUコアでも、実装によって電力と性能、面積が大きく異なる。28NMのCortex-A7で比較すると、下のスライドのようになるという。スマートフォンなどモバイル機器に最適化したCPUコアの場合、CPUコア当たりの電力バジェットは100-150mW、動作周波数のターゲットは1.2~1.6GHzとなるという。
これが高機能スマートウォッチのようなウェアラブル向けとなると、500~800MHzと半分の動作周波数で、CPUコア当たり35mW以下の電力がバジェットとなる。周波数は半分で、電力は3分1から5分の1に抑えることになる。より低機能なウェアラブルの場合、Cortex-A7の最小構成で電力をさらに下げる。さらに低機能なデバイスではCortex-A5へとCPUコアを下げる。
同じインオーダ実行のCortex-Aでも、こうした最適化でCPUコアは劇的に変わる。下のスライドを見れば分かるように、スマートフォン向けに最適化したCortex-A7で、32KB L1キャッシュやNEON(ARMのSIMD(Single Instruction, Multiple Data)エンジン)を載せたバージョンはCPUコアのサイズが0.45平方mm程度のサイズ。それに対して、同じ28nmでもウェアラブルに最適化してNEONを外し、キャッシュも減らしたバージョンは25平方mm程度の面積。Cortex-A5になると0.15平方mmと3分の1の面積になる。
プロセス技術とセルライブラリの違いでCPUコアが大きく変わる
どうやってここまでCPUコアの面積や電力を変えるのか。まず、プロセス技術の選択を変えるとそれだけでリーク電流が大きく変わる。現在のモバイル向けSoCは、モバイル向けだが高速なプロセスを使っている。それを、ファウンダリが提供する低リーク電流のプロセスに変える。
下のスライドは汎用プロセスのコアをLow Power (LP)プロセスに変更した場合の例で、リーク電流は汎用プロセスに対して0.05倍、つまり20分の1の5%に下がっている。その一方で、トランジスタディレイは1.7倍になる。つまり、60%にパフォーマンスは落ちる。40nmプロセスなら、LPで電圧は0.9Vから1.1Vに上がることになっている。これはしきい電圧(Threshold Voltage:Vt)を上げてリーク電流を押さえるためだ。そのため、ダイナミックパワーも1.5倍に増えるが、リーク電流の分は減るので特に低周波数時に電力削減になる。
プロセス技術を変更するだけでなく、チップ設計の部品群に当たるスタンダードセルライブラリを変えることでも電力と面積を大幅に減らすことができる。現在のスマートフォンでは、性能を出すためにモバイルSoCのアプリケーションプロセッサ部分に12T(12トラック)セルライブラリを使うことが一般化している。それを、より低電力の9T(9トラック)セルライブラリに切り替えると、それで電力をセーブできる。また、プロセス技術の話に絡むが、しきい電圧(Threshold Voltage:Vt)が低いトランジスタを使わないことでも電力をセーブできる。
例えば、Cortex-A7で、CPUコアのコンフィギュレーションとライブラリを変えると下のスライドのようになる。いずれも、TSMCの40nmのLP(Low Power)プロセスのCortex-A7だ。左端はモバイルに最適化したCortex-A7デュアルコアのMP2構成で、ワースト周波数(0.99Vで125℃時の動作周波数)が850MHz、ダイナミック電力(Pdynamic)がCPUコア当たり0.164mW/MHz、スタティック電力(Pstatic)が9.08mW。ピーク動作周波数は850MHzよりも上になる。
左から2番目はウェアラブルに最適化したCortex-A7デュアルコアMP2で、動作周波数は約半分の400MHzまでに落ちるが、ダイナミック電力(Pdynamic)がCPUコア当たり0.11~0.12mW/MHzとスマートフォン向けより33%減る。これはMHz当たりの電力なので、半分の周波数で動作するウェアラブル向けコアでは3分の1のダイナミック電力となる。400MHz時にはダイナミック成分が44mWの計算なので、スタティック電力成分を加えてもウェアラブルコアの要求水準に近い。非動作時のスタティック電力はスマートフォンの10分の1、ダイ面積は半分以下だ。簡単に言えば、同じCortex-A7デュアルでも、ウェアラブルの方は性能は2分の1以下だが、アクティブ時の電力は数分の1へと大幅に減り、アイドル時の電力になると劇的に減少する。そのため、アイドル時が大半を占める場合は、平均消費電力は劇的に減り、バッテリ駆動時間が劇的に伸びることになる。
これが、さらに電力効率を高めたCortex-A7シングルコア構成ではスタティック電力がさらに10分の1以下に低減され、ダイエリアは4分の1になる。上のスライドの右から2つ目がその構成だ。右端は最小構成のCortex-A7シングルコアで、コアはさらに小さく、電力はさらに少なくなる。
トランジスタオプションの違いも電力に大きく影響する
上のスライドの構成をもう少し詳しく見ると、どうやって低電力と低コスト化を実現しているのか分かってくる。
このスライドのコアは全て40nmの同じ低電力プロセス40LPを使っているが、まずセルライブラリが違う。左端のモバイル向けのCortex-A7では、性能が高いが電力と面積が大きい12T(12トラック)の高性能セルライブラリを使っている。それに対して、ウェアラブル向けの右の3つのCortex-A7構成は、いずれも高密度で低電力の9T(9トラック)セルライブラリを使っている。12Tと9Tでは電力だけでなくダイエリアが大きく異なる。
また、左端のモバイル向けでは、トランジスタオプションも性能を上げるために、しきい電圧が低く性能が高いがリーク電流の多いULVT(Ultra Low Threshold Voltage)を混在させている。ULVTを、しきい電圧が標準的でリーク電流(Leakage)の少ないSVT(Standard Threshold Voltage)トランジスタと組み合わせた実装になっている。それに対して、ウェアラブル向けの右の3つの構成は、いずれもしきい電圧が標準のSVTトランジスタしか使っていない。SVTとULVTのリーク電流(Leakage)の差は非常に大きいため、これだけでかなりのリーク電流低減となる。
ただし、トランジスタのチャネル長(Channel Length)のオプションでは、左端のモバイル向けCortex-A7は長いチャネルを部分的に使っているようだ。これは、チャネル長を長くすることで、短チャネル効果を抑制してULVTトランジスタのリーク電流を押さえるためだと見られる。通常、しきい電圧が低くチャネル長が長い方が、しきい電圧が高くチャネル長が短い場合よりもパフォーマンスが高くなる。
ダイエリアが小さくコストも低いウェアラブルCortex-A7
こうした実装の違いに加えて、CPUのコンフィギュレーションも異なる。これはすでに述べた通りだ。
左端のモバイルに最適化したCortex-A7デュアルコアのMP2構成では、32KB L1と256KB L2のキャッシュ構成。それに対して左から2つ目のウェアラブル向けの低電力Cortex-A7デュアルコアは16KB L1と128KB L2の構成。右から2つ目のCortex-A7シングルコアは、L2とNEON(ARMのSIMDエンジン)を外している。右端の最小構成のCortex-A7では、さらにL1を8KBと最小にし、デバッグのためのトレースマクロセルも持たない。
ダイ上のCPUモジュールの面積は、40nmの40LPで、モバイルCortex-A7デュアルコアが4.67平方mm、ウェアラブルCortex-A7デュアルコアが2.2平方mm、ウェアラブルCortex-A7シングルコアが0.57平方mm、最小Cortex-A7シングルが0.53平方mm。これを、x86の40-45nmプロセスのコアと比べると、AMDのBobcat(ボブキャット) 40nmがシングルCPUコアで4.9平方mm、IntelのAtom(Bonnell:ボンネル) 45nmがシングルコアで6平方mm以上。ウェアラブルのMP2と比較してもコア当たりのサイズは6分の1~9分の1程度の計算となる。ただし、Quarkが40nmなら、差は縮まる。
ちなみに、組み込み向けのCortex-Mシリーズは、ダイエリアがさらに小さく、Cortex-M4ですらCortex-A7の10分の1以下の面積となり、ダイナミック電力は8uW/MHzとマイクロワット/MHzのオーダーになる。
いずれにせよ、コアを小さくすることで、ウェアラブル向けのSoCはチップ全体のダイ面積も小さくし、コストを下げることができる。現在のモバイルSoCはハイエンドは100平方mmのダイサイズまで大型化しているが、ウェアラブルでは50平方mm以下をターゲットとしている。
28nmでもコンフィギュレーションと実装の違いで電力が劇的に変わる
上の例は40nmプロセスだが、これが現在のスマートフォン向けモバイルSoCで主流の28nmプロセスだとどうなるのか。ARM Techconでは、その具体的な例が示された。
下のスライドのCortex-A7の構成は、上の段で解説した40nmのものとほぼ同じだ。左端がスマートフォン向けのCortex-A7デュアルコア、中央がウェアラブル向けのCortex-A7デュアルコア、右端が低機能ウェアラブル向けの最小構成Cortex-A7シングルコアとなっている。左端のモバイル構成では、32KB L1キャッシュと512KB L2キャッシュ、NEONで1.2~1.6GHzがターゲット周波数。中央のウェアラブル向け構成では、16KB L1と128KB L2、NEONで400~800MHz。右端のローエンド機器の最小構成では、CPUコアがシングルで8KBのL1、L2とNEONは持たない。
比較すると、動作周波数あたりのダイナミック電力はウェアラブルで15%減少となる。動作周波数を50%にするなら、40%台にダイナミック電力が減る。スタティック電力はウェアラブル向けで83%、最小構成では97%へと激減する。トータルの動作時の電力でも、モバイルデュアルコアに対してウェアラブルデュアルコアは、67%に減る。これはモバイル1.2GHz、ウェアラブル500MHz時の比較で、ダイナミック電力が35%に減る(500÷1200×0.85)のに加えて、スタティック成分も減るためだ。最小構成のCortex-A7シングルになると、電力は20%以下となる。また、モバイルSoCの多くは、より高パフォーマンスのプロセス技術を使うため、この差はさらに大きくなる。
このように、CPUのコンフィギュレーション、プロセス技術、セルライブラリ、トランジスタオプション等を変えることで、同じARM CPUコアでも、PPA(Performance, Power, Area:パフォーマンス、電力、ダイエリア)が大きく変わる。同じ最適化は、CPUコアだけでなく、他のユニット、例えばGPUコアなどについても
来年(2015年)以降は、こうした最適化を行なったウェアラブルSoCを搭載したスマートウォッチなど、高機能ウェアラブルデバイスが登場し始めると言われている。そうしたデバイスは、スペック的にはそれほど大きくは現在の高機能スマートウォッチと変わらなくても、バッテリ駆動時間や価格レンジは大きく変わると推測される。朝起きた時、充電を忘れていたことに気づいても慌てる必要がないバッテリ時間で、既婚男性が買う時に奥さんの了解を取らなくても怒られない価格にまで下がるだろう。
ただし、ここまでの話は、ロジックチップだけを見た理想論で、実際には、そこに大きな壁がある。それはメモリだ。Android WearやApple Watchクラスのソフトウェアに必要なメモリは、外付けのDRAMとNANDフラッシュチップに頼るしかないからだ。そこに電力とコストがかかる。
ウェアラブルデバイスを、本当に組み込みデバイス並の電力と価格にするためには、高機能なソフトウェアをサポートできるだけの量のメモリを、不揮発性かつ組み込みにできなければ難しい。逆を言えば、そこに、STT-RAMやReRAMといった新世代の不揮発性メモリのチャンスがある。