後藤弘茂のWeekly海外ニュース
ARMがセキュリティ機能を統合した新プロセッサ「Cortex-M23/M33」を発表
2016年11月9日 10:20
ARMの新MCUプロセッサIPの目玉はTrustZoneの統合
ARMは、IoT(The Internet of Things)時代に向けた新プロセッサIP「Cortex-M23」と「Cortex-M33」を発表した。Cortex-M23/33は、新しい命令セット「ARMv8-M」を実装した最初のプロセッサIPで、最大のポイントはセキュリティだ。IoT時代に必要となるセキュリティを容易に実装できるように、アーキテクチャ上でセキュリティ機能を組み込んだ。
組み込み向けのMCU(Microcontroller)として、幅広く使われているCortex-Mシリーズには、これまで一貫したセキュリティアーキテクチャが提供されていなかった。Cortex-M23/33には、「TrustZone」を冠したセキュリティアーキテクチャがオプションで提供される。TrustZoneをSoC(System on a Chip)レベルで実現するためのシステムIPも提供される。
米サンタクララで開催されたARMの技術カンファレンス「ARM Techcon 2016」では、冒頭のキーノートスピーチで、ARMを買収したソフトバンクグループの孫正義氏(ソフトバンクグループ株式会社代表取締役社長)がIoT時代の展望について語った。ほとんどビジョン的な内容だった孫氏のスピーチだが、IoTのセキュリティについてだけは具体的に強調した。
2035年には1兆個に達すると予想されるIoTデバイス。それぞれのIoTチップからデータがクラウドに吸い上げられ、ビッグデータ解析される。その時に重要となるのは、末端のデバイスレベルからのセキュリティだという。車を例に取ると、現在多数のチップが車載されており、IoT時代に向けてその数はさらに増えている。これらのチップで走るプログラムがハックされるとクリティカルな問題が発生する。そのため、ネットワークに繋がるIoTデバイスには、セキュリティが必須だという。
セキュリティを重視する認識は、半導体業界に共通している。従来の組み込みデバイスは、多くの分野で、セキュリティを考慮する必要があまりなかった。しかし、ネットワークに接続されるIoTでは、セキュリティは重要となる。ARM Techconでは、車に対するハッキングがどのようになされるのかを説明する特別キーノートスピーチも行なわれ、IoTセキュリティが強調された。車載システムではハッキングは事故に繋がりかねない。医療データの漏洩は個人情報の深刻な侵害となる。IoTにセキュリティは必須と言っていい。
IoTセキュリティで重要な点は、デバイスからクラウドまで、あらゆるレベルがセキュアであるようにすることだとARMは説明する。そして、末端のIoTデバイスにセキュリティを普及させるためには、セキュリティに対する経験が全くないエンジニアでも扱うことができる、1ドル以下のセキュアなMCU設計が必要だと主張して来た。今回、ARMが発表したのは、ARMv8-MのTrustZoneは、まさにこうしたソリューションだ。
命令セットとオプションが異なるCortex-M23/33
ARMv8-M自体は、従来のCortex-Mファミリの命令セットアーキテクチャである「ARMv6-M」「ARMv7-M」に替わる新しい命令セットだ。従来は最小コアのCortex-M0/0+がARMv6-M命令セット、メインストリームのCortex-M3/4/7がARMv7-M命令セットだった。今世代は、Cortex-M23とM33のどちらもARMv8-M命令となるが、プロファイルが異なる。
組み込みでは、PCやスマートフォンのような命令セットの一貫性が強く要求されない。それよりも、用途に応じた命令セットのコンフィギュレーションが重要となる。以前、チップカンファレンスCool Chipsのパネルディスカッションで「コンピューティングでは命令セットは結婚だ、しかし、組み込みでは命令セットは単にデートだ」という発言が飛び出したこともあった。デートで相手を変えるように、命令セットを組み替えるのが組み込みの世界だ。従来のCortex-Mファミリも、命令セットのアーキテクチャ自体はThumb/Thumb-2だが、プロセッサによって命令セットのオプションが異なっていた。
ARMv8-Mでは、命令セットはThumb/Thumb-2で、「ベースライン」と「メインライン」の2階層のプロファイルとなる。ベースラインは、言ってみれば必要最小限の命令セット。一方、メインラインには、浮動小数点演算も含めてさまざまな命令オプションが含まれる。今回の新プロセッサIPでは、Cortex-M23がARMv8-Mベースライン、Cortex-M33がARMv8-Mメインラインとなる。
従来のCortex-Mからの継承では、Cortex-M23はCortex-M0/0+の後継、Cortex-M33はCortex-M3/4の後継となる。高性能のCortex-M7の後継は、今のところアナウンスされていない。IPがターゲットとするプロセスは、TSMCなら現状は55nmプロセスか40nmプロセス。MCUの主流プロセスノードだ。ARMでは、Cortex-M23/33の実装データとしてTSMCの40LPプロセスで、9トラックスタンダードセルライブラリでの実装例を出している。FPGA(Field-Programmable Gate Array)への合成も可能だ。
ちなみに、ARMの元々の命令セットは32-bitのARM32命令セットだった。しかし、16-bit固定命令長でコードデンシティを高めたSuperH(SH)命令セットが日立(ルネサス)から登場。その後、ARMも16-bit長のThumb命令セットを加えた。さらに、ARMは、Thumbに32-bit長命令を拡張したThumb-2を加えている。ARMは、Thumb-2でいったん命令セットの統合/リセットを試みたと見られるが、実際にはARM/Thumb/Thumb-2の混在となった。Cortex-Mは、このうちThumb/Thumb-2を受け継いでいる。
Cortex-M33は、組み込み用途で主力のCortex-M3/4系列の後継だ。既に説明したように、ARMv8-MのメインラインのプロファイルのプロセッサIPとなる。インオーダ実行の3ステージのシングルパイプライン。性能レンジは0.98 DMIPS/MHz、2.5 CoreMark/MHz。従来のCortex-M4と比較すると、CoreMark/MHzで20%、DMIPS/MHzで9%の性能向上となる。コアの規模などは、まだ明らかにされていない。相対的に高い性能とスケーラビリティのために、幅広いアプリケーションのサポートが期待されている。
Cortex-M33の命令セットはThumb/Thumb-2で、オプションとして浮動小数点演算とDSP/SIMD(Single Instruction, Multiple Data)命令をサポートする。浮動小数点演算精度は、Cortex-M33の実装はIEEE754準拠の単精度(32-bit)フォーマット。DSP拡張は、シングルサイクルの16/32-bit MAC(積和算)とシングルサイクルのデュアル16-bit MACをサポート。8/16-bitのSIMDオペレーションをサポートする。ARMv8-Mの命令セット自体では、倍精度もサポートするが、今回はCortex-M33には実装されていない。もちろん、オプショナルでTrustZoneアーキテクチャもサポートする。
ちなみに、前世代のCortex-M3も3ステージパイプラインだった。ただし、パイプラインの構成はフェッチ/デコード/エグゼキュートで、デコードステージはレジスタリードやブランチ、アドレス生成を含み、エグゼキュートステージはライトを含んでおり複数サイクルの場合もあった。それに対して、Cortex-M33のパイプラインは、同じ3段ステージでも新プロセスに最適化されており、異なっているという。フェッチ&プリデコード/デコード&シンプルエグゼキュート/コンプレックスエグゼキュートの3ステージという報道もある。
また、Cortex-M33には、新たに専用のコプロセッサバスが設けられた。従来は、アクセラレータはAHBバス経由でCortex-Mと接続していた。それに対して、Cortex-M33では、最大8アクセラレータを接続できるコプロセッサバスが設けられている。組み込み用途でも、アクセラレータを重視するという方向であることがわかる。プロセッサコアが低性能なMCUの高速化のための解だ。
最小の電力とコストを実現するCortex-M23
Cortex-M23は、最小のフットプリントで実装することを目標としたプロセッサコアだ。浮動小数点演算やSIMD(Single Instruction, Multiple Data)のサポートはない、整数演算プロセッサとなっている。命令セット的にはThumb/Thumb-2ベースだが、ARMv8-Mのベースラインなので、サブセットとなっている。
Cortex-M23は2ステージのインオーダ実行シングルパイプラインと、ミニマムのパイプライニング。性能レンジは0.98DMIPS/MHz、2.5CoreMark/MHz。Cortex-M0+と比較すると、1.6~3.2%の性能向上となる。言い換えれば、アーキテクチャ上の性能的にはほとんど変わりがない。もちろん、プロセス技術による性能向上は期待できるが、ポイントはフィーチャの拡張であることは明かだ。ただし、コアの規模などは、まだ明らかにされていない。ちなみに、Cortex-M0は3ステージ、Cortex-M0+は2ステージパイプラインとなっている。
ARMは、Cortex-M33を“ハーバード(Harvard)アーキテクチャ”、Cortex-M23を“フォンノイマン(von Neumann)アーキテクチャ”と説明している。一般にこうした区分は、メモリ階層とフェッチバスのアーキテクチャの違いを示している。Cortex-M33のケースでは、ハーバード型アーキテクチャで、命令とデータのフェッチパスが分離されている。そのため、命令フェッチとデータアクセスを平行して行なうことができる。
ハーバードアーキテクチャは、PC向けCPUでは当たり前だ。PC CPUならキャッシュメモリ階層も2系統に分かれる。だが、リソースが少ない組み込みMCUは、必ずしもハーバードアーキテクチャとは限らない。実際、Cortex-M23はハーバードアーキテクチャになっておらず、フォンノイマン型の命令とデータが混在したメモリに、1つのパスでアクセスする。命令フェッチとデータアクセスが競合するが、パスを簡素化してCPUをシンプルにする効果がある。
低コストかつ低電力にセキュリティを実装する
ARMは、今回の新プロセッサIP Cortex-M23/33から、新命令セットARMv8-Mに移行。同時に、TrustZoneをオプションとして推進して行く。従来の累計で200億ユニットを超える実装実績があるCortex-Mに、セキュリティを基本フィーチャとしてもたらす。セキュリティを、IoT向けのCortex-Mのエッセンシャルにしようという戦略だ。逆を言えば、これでようやく、ARMのCortex-Mは、IoTに向けた準備が整ったと言える。
ARMは、アプリケーションプロセッサなどの用途のCortex-Aシリーズでは、以前からセキュリティソリューションTrustZoneを提供している。しかし、Cortex-A向けのTrustZoneは、実装が重いため、そのままではCortex-Mに持って来ることができない。他社では、MCUにメモリマネージメントユニット(MMU)を搭載して、仮想化ベースのセキュリティ機能を搭載したケースもあるが、ARMはそうした選択をしなかった。その代わり、ARMは、Cortex-M向けに、よりコストが低く効率が高セキュリティ機能をオプションを開発した。これが、今回のCortex-M23/33に実装されたTrustZone for ARMv8-Mだ。
Cortex-AのTrustZoneと異なるCortex-MのTrustZone
ARMのプロセッサファミリのうち、上位のCortex-AのTrustZoneでは、ハイパーバイザ型のモニタモードによって、分離されたセキュア空間と非セキュア空間をハンドルしている。セキュアステイトと非セキュアステイトの間のトランジションはモニタソフトウェアが制御する。Cortex-A系のTrustZoneは、一般的な方式だが、一定以上のワーキングメモリを必要とし、トランジションのレイテンシが重く、メモリマネージメントユニット(MMU)によるメモリ管理も必要とする。高速なCPUと多くのメモリを載せたシステム向けのセキュリティ機構だ。
Cortex-AのTrustZoneは、Cortex-M系MCUのように、プロセッサが低性能でメモリが組み込みで厳しく制限されており、MMUも搭載していないシステムには向いていない。Cortex-AのTrustZoneでは、ダイエリアもメモリ量も増えるため、Cortex-Mに持ってきてもチップコストが上がってしまう。また、オーバーヘッドで性能が低下してしまう。
現状での、ARMの組み込み系MCUでのセキュリティソリューションは、ソフトウェアによる制御が主流となっている。しかし、これにもさまざまな難があり、理想的な解とは言えない。
それに対して、ARMv8-MのTrustZoneは、基本的にはハードウェアによるステイト遷移で、セキュリティモニタソフトウェアを不要にし、メモリフットプリントを抑えてセキュリティを実現する。ハードウェアによる遷移でレイテンシも抑え、低速なMCUでも実用的なセキュリティシステムにしたという。