1カ月集中講座
IoTの波に乗るマイコン事情 第2回
~MCU市場を席巻しつつある「Cortex-M」
(2015/1/15 06:00)
前回はやや概念的な話になったので、今回はもう少し実際の製品の話をしていきたい。
【写真1】はSamsungの「Galaxy S4」の内部である。Galaxy S4はご存知の通りExynos 5というCortex-A15ベースのSoCをアプリケーションプロセッサとして搭載しているが、実はそれ以外にも至るところでARMコアが利用されているという話である。
例えばNFCのコントローラの中にはNFCの制御「のみ」を行なうCortex-Mが内蔵されているし、NANDフラッシュも内部にCortex-MもしくはCortex-Rコアを内蔵して、ここでウェアレベリングなどの処理を行なっている。携帯電話(いわゆるフィーチャーフォン)の時代で平均して1台あたり5~6個、スマートフォンやタブレットでは10個以上の「なんらかの」ARMコアが搭載されていると言われている。数だけで言えば、Cortex-Aシリーズのアプリケーションプロセッサよりも遥かに多く、Cortex-MなどのMCUが利用されているわけだ。
さてそのMCUであるが、ARMは「Cortex-M」というコアを現在この市場に投入している。ただCortex-Mは32bitのMCUであるが、こちらが初登場したのは2004年のことである。MCUの市場そのものは1970年代から存在するから、比較的新参者と言っても差し支えない。というわけで、まずはMCUの変遷そのものについて簡単に紹介する。
【写真2】は、1990年~2012年までの「MCUの出荷個数」を示したものである。1980年代にはそれなりに需要があった4bit MCUはさすがに1990年代に入ると出荷個数が頭打ちになりつつあり、代わって8bit MCUが明確に伸び始めた。この理由は、コストと性能のバランスである。1980年台には既に8bitのMCUは広く使われていたが、4bit MCUは8bitの半分以下、下手をすると1桁安いコストで製造できたので、家電製品(マイコン炊飯ジャーや洗濯機などこの好例である)のようにコストに厳しい用途では8bit製品はやや価格競争力に劣った。また炊飯ジャーや洗濯機などの場合、極端に言えば制御ループが数十秒に1回という速度でも許容されたから、性能の低さはネックになりにくかった。
ところが、プロセスの微細化が進むに連れて、4bit MCUと8bit MCUの原価の差が縮まってきた。MCUの場合、CPU+メモリ+周辺回路という構成になるが、昔はCPU+メモリのダイに占める割合が大きかったので、8bitを4bitにするだけで結構なコストダウンになった。しかし、プロセスを微細化してもアナログ周辺回路のサイズは変わらないから、相対的にCPU+メモリが占める割合が減り、4bitを8bit化してもそれほどコストアップに繋がらなくなった。
また、白物家電へのMCU搭載が当たり前になると、「マイコン炊飯ジャー」と書いただけで売れていた時代は終わり、そのマイコンで何ができるのかを問われるようになってくる。ここで高機能化へのニーズが強まった。こうなると、“最低でも8bitは欲しい”という需要が高まることになり、1980年台後半には4bit MCUと8bit MCUの出荷個数は逆転している。
もちろん組み込みの市場では「突然にニーズがゼロになる」ということは考えにくく、今も4bit MCUは製造・販売されている。最近だとZilog(の親会社であるIXYS Corporation)が、Samsungから同社の4/8bit MCUのラインナップを5千万ドルで買収し、これをZilogが販売するといった動きがあった。Samsungそのものはモバイル向けに専念するから4/8bit MCUからは手を引きたかったわけだが、それを5千万ドルも支払って買収する価値があるほど、まだこの市場の需要は根強いという話である。
さて次が8bit。こちらも長い歴史がある。例えばIntelにしても「8080」の後に(前回も紹介した)「8048」や、その後継として今も広く使われる「8051」を出している。さらにZilogの「Z80」や「Z8」系列品、そのZ80の互換品である日立の「HD64180」、Motorolaの「6800」や「6809」などのコアが、当初はCPUとして使われたものの、すぐにMCU向けにも利用されている(ちなみにMC6800のコアを利用して製造されたMC6801が、世界最初のMCUとする場合もある)。性能レンジも幅広く、メモリも最大256KB近くまで拡張できる(最近は数MBのメモリアドレスを利用できる8bit MCUすらある)から、幅広く利用された。
ただそうしてニーズが高まると、“より高性能なMCUがあるともっと良い”という考え方は当然出てくる。こうした用途に向けて、例えばIntelは8086/8088をベースにMCUに向けてワンチップ化を図った「80186」、「80188」とか、8051を16bit拡張した「80251」をリリース。ほかにも、Zilogの「Z800」やNECの「V」シリーズ、MC6801を16bit拡張した「68HC12」などなど、こちらも幅広く製品が存在する。
さらに、新規に16bitに最適化する形で設計されたMCUもあり、(時期は多少前後するが)TIの「MSP430」シリーズや日立の「SuperH」シリーズ(これを32bitと見なすか16bitと見なすかは微妙なところ)、あるいはMicrochipの「PIC24」シリーズなど、これまた多数の製品が市場に出回った。このように16bit MCUそのものは1980年代から存在したが、出荷量が目に見えて大きくなったのは1994年以降だろうか。
これに続き、32bitの市場も立ち上がり始める。この市場の先駆者はまたしてもMotorolaの「MC68000」で、ついでMIPSの「R2000」、「R3000」コアベースから「MIPS32 4K」、「MIPS32 M4K」ベースの製品が市場に出回り始めている。ただこの時点では、32bitコアはMCUというよりはシステムコントローラ的な位置付けにあり、「低価格でその分性能も低いMPU」といった使われ方をしていた。実際この時期には、例えばIntelは「i960」をベースとしたMCUをリリースしているし、富士通は「SPARC」をベースにした「SPARCLite」という製品を組み込み向けに投入している。【写真2】で2002年頃までの32bitの盛り上がりは、こうしたシステムコントローラ的な用途に利用されているものが多数だった。
こうした風潮が明確に切り替わってきたのは、Cortex-Mの投入以降である。ここからはARMの話になるのだが、もともとARMの場合、比較的早い時期から製品ではなくCPUのIPを販売するビジネスに切り替えている。同社の名前が広く知れ渡ったのはAppleがNewton向けに製造したSoCが「ARM610」ベースだったことだが、これに先立ち同社は多くのファウンダリと提携しており、さまざまな用途向けにARMコアベースの製品が採用された。ただこの当時の同社の立ち位置はちょっと不安定で、MPUにしては非力、MCUにしては高機能かつ贅沢といったところ。結果Newtonを始めとするPDAや初期の携帯電話のアプリケーションプロセッサ、ほかにネットワーク機器(ルーター類)などに使われる程度だった。つまりこの時点では、MC68000などと同じく、MCUというよりはシステムコントローラに近い。
これに続き同社はARM 7/ARM 9/ARM 11といった製品を送り出す。基本的に数字が大きいほど後で出てきてその分高性能になっており、これによって
- ARM 7を投入 → ARM 6搭載製品が低価格向けにシフト
- ARM 9を投入 → ARM 7搭載製品が低価格向けにシフト
- ARM 11を投入 → ARM 9搭載製品が低価格向けにシフト
という扱いでラインナップを厚くしていた。ただこれは、Intelで言うならHaswellが投入されたので、IvyBridge世代を低価格向けにシフトするといった形の動きで、根本的な解決にはなっていない。昨今ではARM 11すらMCU扱いされているが、もともとARM 11は初代iPhoneのアプリケーションプロセッサに使えるほどの性能を持っていたから、MCU向けにはやや過剰な構造になっており、コスト面でやや不利だった。
このあたりを踏まえてARMは、2005年に新しいアーキテクチャを発表する。アプリケーションプロセッサ向けの「Cortex-A」、リアルタイムコントローラ向けの「Cortex-R」、それとMCU向けの「Cortex-M」である。世代的にはARM v6とARM v7が混在しているが、また、この3つのアーキテクチャの発表に先立つ2004年には、Cortex-Mシリーズの最初の製品である「Cortex-M3」がリリースされた。
Cortex-M3の特徴は、
- 32bitアーキテクチャは譲れないが、32bitの命令セットではコード密度の観点で8/16bit MCUに比べて不利である。このため、「Thumb-2」と呼ばれる縮小命令セットを利用して、コード密度を16bit MCUと同レベルに抑えた。Thumb-2の特徴はこちらで以前説明したので繰り返さないが、これによりコード密度を16bit MCU並みに高める=プログラムを格納するメモリ領域を、32bitのARMネイティブコードと比較して半減させられる=低コストで製造できるメリットが生じる。また必要なメモリ量が減る=メモリアクセスが減る=消費電力が減る、というメリットもある。Cortex-M3ではThumb/Thumb2以外の命令セットは実行できないと割り切ることで、これらのメリットを享受できるようになった。
- メモリ管理機構やOSサポートなどの機能を、MCU向けに削減した。もともとMCUで使うなら、フルセットの仮想記憶は無用の長物で、簡単なMPU(Memory Protection Unit:メモリ保護機構)があれば十分である。当然、同時に稼動するタスク(プロセス)は1つなので、複数プロセスの同時実行といった機能を省くことで、シンプルに製造できる。
- ターゲットとなる製造プロセスを変更。ARM 11まではアプリケーションプロセッサとして動作させるためには数百MHzの動作周波数が必要で、これに合わせて深いパイプラインと比較的先端の微細化したプロセスが必要とされた。ところがMCUの動作周波数は数十MHzから、せいぜい100MHz台なので、深いパイプラインは不要で、複雑な分岐予測などの機構も省ける。またフラッシュメモリやアナログ周辺回路を混載することを考えると、90~130nmあたりの製造プロセスが主流となる。先端プロセスを使わなければ製造コストも低く抑えられる。
といったあたりである。
このCortex-M3を最初に採用したのは、自社で有力な32bitのMCUコアを保持していなかった、STMicroelectronicsやNXP Semiconductorなどである。両社とも、このCortex-M3をベースにさまざまなメモリ構成オプションや周辺回路を用意してラインナップを拡充してゆく。
次に登場したのが2007年の「Cortex-M1」で、これはFPGAの上でThumb-2を動かそうというものだ。狙いはリンク先の記事にも書いたとおり、FPGA上で動くシンセサイザブルCPUコアとして提供することで普及を図ろうというものだったが、これはあまり目論見通りには行かなかった。例えばAlteraの場合、やはりユーザーは使い慣れた「NIOS II」コアを引き続き使っており、Cortex-M1に乗り換えるべきメリットがほとんどなかった。ただ、ここで省電力コアの設計を行なったことが、2009年の「Cortex-M0」コアに繋がったとも言える。Cortex-M0コアの最初の動作デモは、「太陽電池でCPUコアを駆動できる」というもので、これまでだと8bitの省電力MCUが得意としていた領域だったところまでCortex-M0でカバーできることを示したものとなっている。
これに続き、2010年にはCortex-M3の上位製品として「Cortex-M4」を発表した。整数パイプラインはCortex-M3と同じだが、DSP命令ユニットを追加したほか、オプションでFPUも利用できる。またターゲットの周波数が若干引き上げられ、200MHzを超える動作周波数を持つ製品も登場した。例えばセンサーから取り込んだ情報に簡単にフィルタリングを掛けて結果を送り出す、なんてケースではどうしても処理性能が必要で、また浮動小数点演算性能も求められることが多いからだ。すでにCortex-M3のライセンスを受けていたベンダーの多くが、Cortex-M4のライセンスを受けて製品を追加している。
この2010年という年は、明確にARMベースの製品が増えてきた年でもある。例えばFreescaleは、それまで汎用の32bit MCUには同社の「ColdFire」コア(68000と命令互換のRISCコア)を利用していたが、ここからCortex-Mベースに置き換えている。あるいは「Arduino」などで大ヒットした「AVR」という独自8bitアーキテクチャMCUを持つAtmelは、「AVR32」という独自32bitアーキテクチャを開発、製品化していたにも関わらず、これとは別立てでCortex-M3ベースの「SAM 3」シリーズを2009年からリリースし始め、2010年には一気にラインナップを増やしている。国内でも、東芝は2008年からCortex-Mシリーズを採用し始めており、2010年にはラインナップが厚くなった。この頃にCortex-Mシリーズの採用理由を各メーカーに問うと、口をそろえて「顧客からの要望」という返事が返ってくるようになった。この動きはそのあと、さらに加速してゆく。
2011年には、ローエンド向けに「Cortex-M0+」も追加された。Cortex-M0とCortex-M0+の違いは?と言うと、
Cortex-M0: 最小コストを狙った8/16bit MCU代替向け
Cortex-M0+: 最小消費電力を狙った8/16bit MCU代替向け
となる。例えばARMのサイトに示された実装データを比較すると
プロセス | 180ULL | 90LP | 40LP |
---|---|---|---|
消費電力(Cortex-M0) | 73μW/MHz | 16μW/MHz | 5.3μW/MHz |
消費電力(Cortex-M0+) | 52μW/MHz | 11μW/MHz | 3.8μW/MHz |
エリア面積(Cortex-M0) | 0.13平方mm | 0.04平方mm | 0.008平方mm |
エリア面積(Cortex-M0+) | 0.13平方mm | 0.04平方mm | 0.0066平方mm |
性能(Cortex-M0) | 1.99 CoreMarks/MHz : 0.90~0.99 DMIPS/MHz | ||
性能(Cortex-M0+) | 2.15 CoreMarks/MHz : 0.93~1.08 DMIPS/MHz |
となっており、実のところCortex-M0+はCortex-M0を全ての面で凌駕している。ただし、その分Cortex-M0コアの方がライセンス料などを安く設定しており最小コスト狙いには適している。
このCortex-Mシリーズの最新のものが、2014年に発表された「Cortex-M7」である。こちらはインオーダーながら2命令のスーパースケーラを搭載するとともに、ターゲットとするプロセスを28nm付近までにらんだ構成であり、将来的には800MHzあたりまで動作周波数が上がることを前提にしている。このあたりになると、完全にCortex-Aシリーズのローエンド(Cortex-A5/A7)と性能レンジが被ってくるが、IoTの時代になって、クラウドとエンドデバイスの間に入るルーター/ゲートウェイの役割を果たすデバイスには、この程度の処理性能が必要、とARMでは考えているようだ。
ところでARMは32bit未満をどう思っているのかを最後にちょっと書いておきたい。【写真4】は2012年のものなので、2013年の数字は予測なのだが、売り上げが一番伸びるのは32bitと見ており、もう4/8/16bitには魅力がないとしている。実際複数のARMの幹部に話を聞いた答えをまとめると、「全てのデバイスが32bitを必要としているわけではなく、4/8/16bitのニーズも現時点では存在するが、そうした市場はすでに競合メーカーが大きなシェアを持っており、今ARMが参入しても市場を取るのは難しい。また長期的には全てが32bitに移行すると信じてる。なので我々は32bitのみを手がける」と言う。
では、そのほかのメーカーはこのARMの動きを指を咥えて見ているだけなのか? というあたりを次回ご説明したい。