1カ月集中講座
今どきのタブレット/スマートフォン向けSoC 第1回
(2013/12/5 06:00)
今回から始まる「1カ月集中講座」は、毎月決まったテーマについて1カ月(4回程度)に渡って掘り下げ、理解を深めるコーナーです。
初回となる今月は「タブレット/スマートフォン向けSoC」について大原雄介氏に解説していただきます。昨今はスマートフォン、タブレットにSoCが広く使われており、ごく身近な存在になっています。そこで、さまざまなSoCの位置付けや各ベンダーの方向性など、SoC全般の現在の動向を4回に渡ってお送りします。(編集部)
そもそも何故ARMアーキテクチャなのか
最近のスマートフォン/タブレット向けプロセッサの大半はARMベースである。実際タブレットはともかく、スマートフォンに関して国内を見ても全世界で見ても、ARM以外のアーキテクチャを採用したケースは非常に少ない。なぜ、このような状況になった理由は、歴史的経緯という側面が強い。端的に言えばNokiaの「Symbian OS」がARMベースだったから、ということになるが、もう少しきちんと説明したい。
初期、といっても1990年代半ばぐらいまでの話であるが、当時の携帯電話の中身は大雑把に言えば図1のようになっていた。まだアナログ方式だった時代だからシンプルで許されたとも言える。UI用プロセッサというのは、ごく簡単な液晶表示とキーパッド、電話帳程度のものだった。32bitプロセッサでなくても十分カバーでき、事実16bitのマイコンが使われていた製品すらある(国内のものは大体32bitプロセッサだったらしいが、全てがそうだったかまで筆者は把握していない)。
ところがデジタル通信に切り替わると、モデム側に通信処理を行なうプロセッサが必要になった。そこでモデムと組み合わせる「ベースバンドプロセッサ」と呼ばれるものが登場した。これはARM9クラスのCPUコアに、場合によってはDSPなどを組み合わせて実装されることが多かった。このケースでは、画面の表示やキーパッド制御はベースバンドプロセッサが担っていた。
ところが、次第に携帯電話上でアプリケーション性能が求められるようになってくると、これでは追いつかなくなってきた。NTTドコモのiモードがその代表例である。あるいはカメラ機能が広く搭載されるようになってきたのもこの頃と記憶しているが、これらの機能の処理はベースバンドプロセッサだけには任せて置けなくなり、新しく「アプリケーションプロセッサ」というものが搭載されるようになる。
当初このアプリケーションプロセッサは、さまざまなメーカーが手がけた。国内だけ見ても、日立(現ルネサス エレクトロニクス)の「SH」シリーズや、松下電器産業(現パナソニック)の「UniPhier」(ユニフィエ)があった。国外に目を向ければ、ここにMIPSベースのプロセッサを搭載したケースもある。
だが、最終的にこれらは全てARMに統一されることになった。最大の理由は、こうした携帯電話のOSが、開発工数などの関係でSymbian OSに集約されていったからだ。Nokiaは自社の携帯電話向けのみならず、他社の携帯電話向けにもSymbian OSを積極的にOEM供給したが、これを利用するために、必然的にCPUアーキテクチャがARMに絞られることになったのだ。
一度マーケットシェアを取ると、これに敗れたアーキテクチャはどんどん衰退していく。一方、シェアを取ったアーキテクチャがどんどんマーケットを寡占化するという動きは携帯電話においても顕著であり、この結果(初代iPhoneが登場する直前の)2006年において、Symbian OS(とARM)のマーケットシェアは圧倒的だった。地域にもよるが、2006年当時の携帯電話向けOSは“北米以外は”Symbian系が6割以上、特に東南アジアなどでは90%を遥かに超えていたし、日本や中国でも6割という数字がある。
北米が特別なのは、Windows CEベースの携帯電話に加えてRIM(Research In Motion)の「BrackBerry」という有力な製品があったからだ。しかし、BlackBerryやWindows CEベースの製品もほとんどがARMベースのプロセッサを採用していたので、もう携帯電話向けでは勝負があったも同然である。
このあとは、AppleによるiPhoneの投入や、GoogleによるAndroidの投入などを経て現在に至るが、いずれもARMベースのSoCなのはご存知の通り。実際SoCを作る側としても、SoCを使ってスマートフォンを作る側としても、よほどの理由がなければアーキテクチャを変更する理由がない。また同じアーキテクチャの方が開発環境やソフトウェア資産を活かしやすい。もちろん、ARMの側も、トレンドに合わせて柔軟にアーキテクチャを進化させてきたからこそ、“アーキテクチャを変更するよほどの理由”が生まれなかったという事実はある。
ARMアーキテクチャの変遷
では、そのARMアーキテクチャはどれほどスゴイのか、というと、率直に言ってしまえば、命令セットが特別に素晴らしいというわけではない。ARM v8の64bit命令では、かなりきれいな命令体系になったが、32bit命令はお世辞にもきれいとは言いがたい。
これは理由があり、元々のARM v1(初代のARM1コア)が、命令数も性能もギリギリだったため、ややトリッキーな構造を採用した。それがそのまま現在まで引き継がれてしまっている形だ。このあたりは「8080」の命令体系をそのまま引き継いだ現在のx86やx64にも言えることである。命令体系がきれい云々は、趣味というか主観も入るが、設計時点で命令セットにゆとりのあった「MIPS」や「SPARC」の方が命令体系はきれいだと思う。
もっとも、きれいならば性能が良いかというとそういうわけでもない。そもそも昨今のように命令を内部変換することで複数のRISC命令に分解して処理する方式が主流になると、命令セットそのものはあまり性能に影響しないと言っていい。長らく携帯機器や低消費電力の組み込み向けがターゲットだったこともあり、絶対的なパワーバジェットが低く抑えられ、この中で性能改善を行なうことで努力を重ねてきたことがARMの強みであり、これが回路技術に活きている。ただ、ほかのアーキテクチャと比較して大きく性能面で差が出ると、先ほど論じた“よほどの理由”になってしまうわけで、トレンドを取り込みつつ、これにきちんと追従してきた。
そのARMアーキテクチャと代表的なコアをまとめたのが図4である。さすがにARM v5以前のアーキテクチャは現在ではほとんど使われておらず、ARM9を含めて最低レベルがARM v6となっている。
これに基づいて開発されたARM11は、初代iPhoneに採用されるなどしており、最近ではマイコンボードの「Raspberry Pi」に内蔵されているのがやはりARM11だったりと、まだまだ広く利用されている。基本的な命令セットはそれ以前のARM v5までとあまり変わらないが、「Thumb-2」と呼ばれる縮小命令セット(命令そのものは32bitであるが、物理的な命令フォーマットを縮小してサイズを32bit未満にしたもの)を搭載したのが大きな違いである。また後追いでマルチプロセッサ対応命令なども追加されたが、これはARMとNECエレクトロニクス(現ルネサス エレクトロニクス)との共同開発で、ARM11をベースとしたマルチプロセッサ構成が可能になったことに関係している。
ARM v6とARM11コアは広く使われたが、ARM v6そのものはともかくARM11コアは基本的にはシングル・イシューのイン・オーダー型(ロード/ストア周りに一部アウト・オブ・オーダー型も実装)で、動作周波数も数百MHz程度(初代のiPhoneに搭載されたものでも620MHz駆動)だったから、2004年頃になるとさすがに性能面で見劣りが見られた。ここで投入されたのはARM v7AアーキテクチャとCortex-A8コアである。
この世代からARMは、アーキテクチャをアプリケーション向け(ARM v7A)、リアルタイム向け(ARM v7R)、マイクロコントローラ向け(ARM v7M)の3つに分けた。その頭文字をあわせると「ARM」になることをARMは“公式には”語呂合わせであると認めていないが、まぁそうであろう。それはさておき、このARM v7Aではマルチコア対応に加えて本格的なOS(主にLinux)に対応したプロセッサリソースの仮想化、「NEON」と呼ばれるSIMD演算エンジンなども追加された。またJava動作に向けて「Jazelle」というJavaのバイトコードをネイティブ実行できるモードがARM v6から追加されているが、ARM v7では、これを拡張したJazelle RCT(Runtime Compilation Target)が新たに実装された。
このARM v7Aに最初に対応したのが2005年のCortex-A8で、イン・オーダー型ながら2命令のスーパー・スカラ構成である。2007年にはこれをアウト・オブ・オーダー化したCortex-A9も投入される。また、当初からマルチプロセッサを考慮しており、現在ではCortex-A9 MPが広く利用されているのはご存知の通りだ。2009年には、逆にもっと性能が低くても良いので低消費電力/省ダイサイズの製品を、という要求に合わせて1命令でイン・オーダー構成のCortex-A5も投入されている。
このARM v7、実は2010年にちょっと変更が行なわれている。2010年8月のHot Chips 22で初めて発表されたものだが、ハードウェアレベルの仮想化サポートと、LPAE(Large Physical Address Extension)というアドレス拡張が行なわれている。このLPAEはx86で言うところのPAEとほぼ同じもので、個々のプロセスの仮想アドレスそのものは32bit(4GB)に制限されているが、システム全体では40bit(1TB)に拡張されている。仕様的な違いはその程度であるが、ARM自身はこの変更前のアーキテクチャと変更後のアーキテクチャを分けて扱っており、このあとに投入されたコアは、全てこの新しいARM v7準拠とされている。
その2010年に発表されたのがCortex-A15とCortex-A7である。Cortex-A15はCortex-A9の上位に当たる、3命令のスーパー・スカラ/アウト・オブ・オーダー構成である。Cortex-A7はCortex-A5の後継となるコアであるが、大きな違いはここでbig.LITTLEという構成を採れることだ。2013年には、Cortex-A7とA15の中間程度の性能となる、Cortex-A12も発表されている。
これとは別に、ARMは2012年にARM v8アーキテクチャを発表、64bitへの移行を行なうとともに、これに対応したCortex-A57/Cortex-A53の両コアを発表して、現在に至っている。
ARMベースのSoCの動向
さて、これを使うSoCベンダーの状況はどうなっているのだろうか。先ほども書いたとおり、1990年代はNokiaが大きなシェアを握っていたわけだが、ここに果敢に乗り込んでいったのがQualcommである。CDMA方式の総元締めといえば分かりやすいだろうか。日本で言えばauが全面的に採用した事で有名である。
これに続き、2000年前半にはさまざまな半導体メーカーが携帯電話/スマートフォン向けにSoCを投入した。例えばTI(Texas Instruments)は「OMAP」ファミリーを売り込んでいたし、Freescaleは「MXC」と呼ばれるSoC(正確にはMCM:Multi Chip Module)を開発していた。Intelも「Manitoba」と呼ばれるXScaleベースのSoCを開発している。このほか、Ericssonも携帯電話向けチップを提供していたが、STMicroelectronicsと共にST-Ericssonという合弁企業を作り、ここに製品や開発を移管している。
国内でも、主要な携帯電話ベンダーは自社でSoCの開発を行なっていた。Android登場以前は、iOSを除くと事実上OSはSymbian OSしかなかったから、ARMベースのSoCを作り、ここにSymbian OSを移植していたわけだ。もちろん自社でOSまで手がけたところもあるが、芳しい結果が出なかったのはご存知の通り。
さて、この動きは、先ほど出した図3の構造が成立する限りにおいては問題なかった。ところが実際は図5を経て、図6のように変遷していく。その過程で、どんどんベンダーが振り落とされていった。
まず小型化や低価格化が進んだ結果、ベースバンドプロセッサとアプリケーションプロセッサを別にするのは、実装面積や部品原価の観点で不経済だという話が当然出てくる。特にモデムの規格が2.5Gから3Gを経て3.5G(HSUPA/HSDPA)、3.9G/4G(LTE)に進化していくと、これにきちんと追従するモデムやベースバンドプロセッサを出せるメーカーが減っていった。最たる例がTIで、同社のOMAPそのものは広く使われていたものの、モデムそのものを持ち合わせていないので他社(専らQualcomm)からモデムチップを購入しないといけなかった。となると、携帯機器ベンダーはOMAPプロセッサとは別にQualcommのモデムを購入する必要があり、部品代もさることながら実装面積も増える。QualcommのSnapdragonシリーズを使えば、モデム内蔵タイプもあるし、モデム外付けの場合でも価格は割安になる。ということは、TIがSnapdragonに対抗しようとすると、モデムの分だけ値段を下げないと対抗できないことになる。当然これは収益性を猛烈に下げる。
こうした収益性の悪化を受けて、IntelやFreescaleは早いタイミングで携帯電話向けSoCの開発を放棄してしまったし、TIも同じだ。ST-Ericssonの場合、モデムの開発コストが吸収しきれず、2013年に会社を清算してしまった。Nokiaからモデム部門を買収しながら、Broadcomに売却してしまったルネサス エレクトロニクスも同じことである。
とはいえ、「Qualcommの一人勝ちなのか」というと、当然そこに商機を見出すメーカーもあるわけで、次回からはそうした事情を個別に紹介していきたいと思う。