ARM コミュニティにて,“Cortex-M for Beginners” なるホワイトペーパーが公開されており,Cortex-M プロセッサの概要とプロセッサの比較が詳細に記述されいます.非常に良くまとまったドキュメントでしたので,勉強がてら和訳してみました.誤訳等々あるかもしれませんが,もしお役に立つようでしたら参考にしてみてください.まずは第2章までです.

初心者のための ARM Cortex-M
Joseph Yiu

要約

ARM Cortex-M ファミリには,現在6つのプロセッサがあります.この文書では,さまざまな Cortex-M プロセッサの機能を比較し,アプリケーションに最適なプロセッサを選択するために考慮すべきことを明らかにします.また,この文書は Cortex-M の命令セットと高度な割り込み機能の詳細な比較,システムレベルの機能とともに,デバッグとトレース機能,性能比較を含みます.

1. 概要

今日,ARM Cortex-M プロセッサファミリには6種のプロセッサがあります.加えて,ARM の製品ポートフォリオには他にも多くの ARM プロセッサがあります.このことは,多くのビギナーの方,または ARM のアーキテクチャになじみのないチップ設計の経験者にとっても混乱のもとになるでしょう.異なったプロセッサは異なった命令セット,システム機能・性能を持っています.この文書では,さまざまな Cortex-M プロセッサ間の主な相違点と,また他の ARM プロセッサとの相違についても述べていきます.

1.1 ARM プロセッサファミリ

長年にわたって, ARM は多数の異なったプロセッサ製品を開発してきました.図1 にあるように,ARM プロセッサは従来の ARM プロセッサと,より新しい Cortex プロセッサ製品に分けられます.加えて,これらのプロセッサはアプリケーションの領域によって3つのグループに分かれています.すなわち,

  • アプリケーションプロセッサ
    モバイルコンピューティング,スマートフォン,サーバなど向けのハイエンドのプロセッサ.これらのプロセッサは高クロック周波数(1GHz超)で動作し,フル機能のOSである Linux や Android, Windows,といった OS で必要とされる MMU (Memory Management Unit)をサポートしています.これらの OS を必要とする製品を開発しようとする場合はアプリケーションプロセッサを使用する必要があります.
  • リアルタイムプロセッサ
    ハードディスクコントローラ,車載のパワートレイン,またはワイヤレス通信のベースバンド制御など,リアルタイムアプリケーションのための非常に高性能なプロセッサです.これらプロセッサのほとんどはMMUを搭載していませんが,MPU(Memory Protection Unit),キャッシュその他産業用アプリケーション用に設計されたメモリ機能を搭載しています.これらのプロセッサはかなり高速クロック(200MHz ~ 1GHz)で動作し,レスポンスのレイテンシは非常に低いです.これらのプロセッサではフル機能の Linux や Windows などの OS は動作しませんが,多くのリアルタイム OS(RTOS) があり,それらを使用することができます.
  • マイクロコントローラプロセッサ
    これらのプロセッサは通常,シリコンを小型化し,エネルギー効率を非常に高めるよう設計されます.通常,これらは短いパイプライン,低い最大周波数(中には200MHz超で動作するものもありますが)で動作します.同時に,新しいCortex-M プロセッサファミリは大変使いやすく設計されています.したがって,マイクロコントローラや組み込みシステムの市場においてとてもポピュラーになっています.

表1に3種のプロセッサ群の主な特徴をまとめます.

アプリケーションプロセッサリアルタイムプロセッサマイクロコントローラプロセッサ
設計高クロック周波数
長パイプライン
高性能
マルチメディアのサポート(NEON命令セット拡張)
高クロック周波数
中~長パイプライン
低い割り込みのレイテンシ
短いパイプライン
超低消費電力
低い割り込みのレイテンシ
システムの特徴メモリマネジメントユニット(MMU)
キャッシュメモリ
ARM TrustZone セキュリティ拡張
メモリ保護ユニット(MPU)
キャッシュメモリ
TCM (Tightly Coupled Memory)
メモリ保護ユニット(MPU)
NVIC (Nested Vectored Interrupt Controller)
WIC (Wakeup Interrupt Controller)
ターゲット市場モバイルコンピューティング,スマートフォン
高効率のサーバ
ハイエンドのマイクロプロセッサ
産業用マイクロコントローラ
車載
ハードディスクコントローラ
ベースバンドモデム
マイクロコントローラ
組み込みシステム(例:センサ,MEMS,ミックストシグナル IC)
IoT (Internet of Things)

1.2 Cortex-M プロセッサファミリ

Cortex-M プロセッサはローエンドの性能規模に焦点を当てています.しかしながら,ほとんどのマイクロコントローラに使用されているプロセッサに比較するとかなりパワフルです.例えば,Cortex-M4 や Cortex-M7 プロセッサはクロック周波数が 200MHz 超までの高性能マイクロプロセッサ製品に使用されています.
もちろん,性能だけがプロセッサ選択時の唯一の要件ではありません.多くのアプリケーションでは低消費電力であることやコストが選択の際のカギとなります.したがって,Cortex-M プロセッサファミリには異なったニーズに対応するさまざまな製品が含まれています.

  • Cortex-M0
    低コストで超低消費電力のマイクロコントローラ,組み込みアプリケーション用の非常に小さなプロセッサ(12Kゲート~)
  • Cortex-M0+
    小型組込みシステム向けの最もエネルギー効率の高いプロセッサ.Cortex-M0プロセッサと同様のサイズとプログラマモデルですが, シングルサイクルI / Oインタフェースやベクタテーブルの再配置などの追加機能もあります
  • Cortex-M1
    FPGA 設計に最適化された小型のプロセッサ設計で,FPGA のメモリブロックを利用した TCM(Tightly Coupled Memory) の実装を提供.
    Cortex-M0と同じ命令セット.
  • Cortex-M3
    コンパクトなタスクをより迅速に処理できる豊富な命令セットを備えた,低消費電力のマイクロコントローラ向けの小型で強力な組み 込みプロセッサです.ハードウェア除算と MAC(Multiply-Accumulate) 命令をサポートします.加えて,ソフトウェア開発者がアプリ ケーションをより迅速に開発できるようにする包括的なデバッグおよびトレース機能も備えています.
  • Cortex-M4
    Cortex-M3のすべての機能を提供し,SIMD(Single Instruction Multiple Data) や高速シングルサイクルMAC操作などのデジタル信号 処理(DSP)タスクの追加命令をサポートしています.さらに,IEEE 754浮動小数点標準をサポートするオプションの単精度浮動小数点ユニットも備えています.
  • Cortex-M7
    ハイエンドマイクロコントローラおよび処理集中型アプリケーション用の高性能プロセッサ.Cortex-M4で利用可能なすべての ISA 機能 があり,倍精度浮動小数点の追加サポート,キャッシュやTCM(Tightly Coupled Memory)を提供します.

従来 の ARM プロセッサ(例えば ARM7TDMI, ARM9)と異なり,Cortex-M プロセッサは全く異なったアーキテクチャを持っています.例えば,

  • Thumb-2 の16ビットおよび32ビット命令をサポートするように拡張された ARMThumb 命令のみをサポート
  • 割り込みの取り扱いは,割込みやシステム例外の自動優先順位付け,マスキング,ネスティング等の機能を提供するNVIC(Nested Vector Interrupt Controller)と呼ばれる組込み型割込みコントローラで管理される
  • 割り込みハンドラは,通常のC関数として記述することができ,ベクタ割り込み処理メカニズムは,割込みサービスを決定するためにソフトウェアを使用する必要性を回避.同時に,割込み応答は決定論的であり低レイテンシ.
  • ベクタテーブルは,分岐命令から割り込みの先頭アドレスおよびシステム例外ハンドラに変更.
  • レジスタバンクとプログラマモデルの詳細も変更.

これらの変更により,従来のARMプロセッサ用に作成された古いアセンブリコードの多くは変更が必要になり,古いプロジェクトはCortex-Mの世界に移行する際に変更して再コンパイルする必要があります.ソフトウェアの移植に関する詳細は,ARMドキュメントに記載されています.
ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers
http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3 Cortex-M プロセッサの共通機能

Corex-M0, M0+, M3, M4 そして M7 プロセッサには非常に多くの類似点があります.例えば,

  • ベースラインプログラマモデル(セクション3.1)
  • 割込み制御のための NVIC(Nested Vectored Interrupt Controller)
  • 構造的に定義されたスリープモード:スリープとディープスリープ
  • OSサポート機能
  • デバッグサポート
  • 使いやすさ

などです.例えば, NVIC は統合された割込みコントローラです.

NVIC は,ペリフェラルからのいくつもの割込み入力,マスク不可割込み要求,SysTick と呼ばれる内蔵タイマ(セクション3.3を参照),また,いくつものシステム例外をサポートします.NVIC は,これらの優先度管理,割込みや例外のマスキングを取り扱います.
NVIC と例外モデルの詳細については,セクション3.2を参照してください.その他の類似性や相違点については,この文書の残りの部分で説明します.

2. Cortex-M プロセッサの命令セット

2.1 命令セット概要

ほとんどのケースでは,アプリケーションのコードは C言語または他の高水準言語で記述されます.しかしながら,Cortex-Mプロセッサの命令セットサポートの基礎を理解することは,タスクに対してどの Cortex プロセッサが必要になるかを決定する
助けになるでしょう.命令セットアーキテクチャ (ISA : Instruction Set Architecture) はプロセッサのアーキテクチャの一部であり,Cortex-M プロセッサは2つのアーキテクチャプロファイルにグループ分けされます.

  • ARMv6-M
    Cortex-M0, Cortex-M0+ と Cortex-M1 プロセッサ
  • ARMv7-M
    Cortex-M3, Cortex-M4 と Cortex-M7 プロセッサ.DSPタイプ命令(例えば、SIMD)をサポートするためのARMv7-Mの拡張は,ARMv7E-M とも呼ばれます.
  • ARMv8-M
    プロセッサ製品については今後発表されます.ARMv8-Mアーキテクチャの詳しい情報については,ARMv8-Mアーキテクチャの技術概要を参照してください.
    https://community.arm.com/docs/DOC-10896

すべての Cortex-M プロセッサは,Thumb と呼ばれる命令セットをサポートしています.これが拡張され Thumb-2 テクノロジが使用可能になったため,Thumb 全体の命令セットはかなり大きなものになりました.しかし,異なった Cortex-M プロセッサは図3に示すように Thumb ISA で可能な命令の異なるサブセットをサポートしています.

(図3)

2.2 Cortex-M0/M0+/M1 の命令セットサポート

Cortex-M0/M0+/M1 プロセッサの命令セットは,ARMv6-M アーキテクチャに基づいており,図3の小さな長方形の中に示すようにほとんどが16ビットの,わずか56個の命令です.しかしながら,プロセッサ中のレジスタや,その中で処理されるデータは依然32ビットです.ほとんどのシンプルなI/O操作や一般的なデータ処理にはこの小さな命令セットで十分です.この小さな命令セットにより,Cortex-M0/M0+ではわずか12kゲートからという非常に小さなゲート数でプロセッサ設計を実装できます.しかし,これらの命令の多くはR8~R12までの上位レジスタを利用できず,即値データを瞬時に生成する能力が限られています.これは超低消費電力というプロセッサ設計要件と性能との妥協点からくるものです.

2.3 Cortex-M3 の命令セットサポート

Cortex-M3プロセッサは,ARMv7-Mアーキテクチャに基づいており,上位レジスタを有効活用する32ビット命令を含んだ,より豊富な命令セットをサポートしています.加えて,下記をサポートしています.

  • テーブル分岐命令や条件付き実行(IT命令を使用)
  • ハードウェア除算命令
  • 積和(MAC)演算,
  • 多数のビットフィールド演算

豊富な命令は,さまざまな点で性能の向上をもたらします.たとえば,32ビットThumb命令は,広範囲の即値データ,データメモリアクセスにおける分岐オフセットや即値オフセットを扱えます.また,基本的なDSP処理(例えば,数クロックで実現可能なMAC命令,飽和調整命令)をサポートします.また,32ビット命令により,一つの命令中に多数のデータ処理とバレルシフタの使用が可能になりました.

豊富な命令セットはシリコンの大型化・高コスト化と消費電力の増加をもたらします.一般的なマイクロコントローラでは,Cortex-M3のゲート数はCortex-M0/M0+の2倍以上となります.しかしながら,最新のマイクロコントローラの中ではプロセッサ部分のシリコンはごく小さく,面積と消費電力が大きくなることはほとんどの場合問題にはなりません.

2.4 Cortex-M4 の命令セットサポート

Cortex-M4 プロセッサは,パイプライン,プログラマモデルなど,Cortex-M3にさまざまな点で類似しています.Cortex-M3の機能はすべてサポートし,加えて DSP アプリケーションをターゲットとした SIMD,飽和算術演算,シングルサイクルで実行可能な MAC 演算(Cortex-M3ではマルチサイクルのものに制限されていた),単精度浮動小数点処理用のオプションをサポートしています.Cortex-M4 の SIMD 処理は,2つの16ビットデータ,または4つの8ビットデータを並列に扱います.例えば,図4に QADD8 と QADD16 の処理例を示します.

(図4)

SIMD を使用することによって,特定の DSP 処理における16ビット,8ビットデータの計算処理は並列化され高速になります.
しかしながら,通常のプログラミングにおいて,CコンパイラはSIMDの能力を活用することはまずありません.これが Cortex-M3 と Cortex-M4 のベンチマークに表れています.しかしながら,Cortex-M4 は Cortex-M3 とは内部データパスが異なっているため,高速な処理が可能となるケースがあります(たとえば,シングルサイクルでの MAC,シングルサイクルでの複数レジスタへのライトバック処理など)

2.5 ISA 機能比較サマリー

ARMv6-MおよびARMv7-Mアーキテクチャには多くのISA機能が存在するため,これらをすべて詳細に記述することは困難です.次の表(表4)は主要な違いをまとめたものです。

(表4)

Cortex-M プロセッサの ISA の重要な特性の1つは,上位互換性です.Cortex-M3 プロセッサでサポートされる命令は,Cortex-M0 / M0 + / M1のスーパーセットです.そのため,理論的にはメモリマップが同一であれば,Cortex M0 / M0 + / M1のバイナリイメージはCortex-M3上で直接実行できます.同じことはCortex-M4 / M7と他のCortex-Mプロセッサとの関係にも当てはまります. Cortex-M0 / M0 + / M1 / M3で利用可能な命令は,Cortex-M4 / M7で実行できます.

Cortex-M0 / M0 + / M1 / M3プロセッサには浮動小数点ユニットオプションはありませんが,ソフトウェアを使用して浮動小数点演算を行うことができます.これは浮動小数点ユニットのない Cortex-M4 / M7 ベースの製品でも同じです.浮動小数点データがプログラムで使用されるとき,コンパイラスイートはリンク段階で必要なランタイムライブラリ関数を挿入します.ソフトウェアを使用した浮動小数点計算には時間がかかり,コードサイズがわずかに増加する可能性がありますが,浮動小数点演算が頻繁に行なわれない場合にはアプリケーションに適している可能性があります.

参考