「Armのお供に8051説」を唱えて以来、快調?にArmコアと8051コアの両方をMCUに採用している各社を経めぐっています。しかし、その度出てくるArm Cortex-M0とか、M3とか、M4とかArmコアにもいろいろあって分けが分からない。そこで今回はちょっと立ち止まって、MCU向けのArmコアのおさらいをしておきたいと思います。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
まずは一覧表で、Arm Cortex-Mシリーズの全貌を列挙しておきましょう。
型番 | アーキテクチャ | パイプライン | 特徴 |
---|---|---|---|
M0 | v6-M | 3 | 整数型コアのみ |
M0+ | v6-M | 2 | M0と命令セット共通 |
M1 | v6-M | 3 | M0と命令セット共通FPGA専用 |
M3 | v7-M | 3 | 命令セット強化 |
M4 | v7-M | 3 | FPU搭載可能 |
M7 | v7-M | 6 | FPU搭載可能、スーパスカラ、キャッシュ搭載 |
M23 | v8-M baseline | 2 | セキュリティ対応 |
M33 | v8-M mainline | 3 | セキュリティ対応 |
随分ありますが、しかし、数字が結構飛んでいるな~。0が何やら2つありますが、0、1と来て2が無い。3,4があって5,6が無い。そして7の次は一気に23そして33です。なんでそういう型番になっているのかは正直分かりません。謎です。しかし、大事なことが一つ。
数字が大きいからといって高性能なわけではない
現時点で、このMシリーズ(そういう呼び方をしてよいのかどうかも不明ですが)の中で最高の処理能力を誇るのはM7です。M23やM33より性能は相当上。上の表だと「パイプライン」というところに書いてある数字が大きい方が、一般に処理能力が上です。Mシリーズの場合、標準が3段、M7の6段というのは飛びぬけていることが分かります。しかし、2段と3段くらべて2段が遅いということはこのシリーズに関してはなく、2段の方が新しい設計だったりするので、2段のくせに(?)古い3段とは同じか微妙に速かったりもします。その代わり、以下の傾向があります。
数字が大きい方が新しいので新らたな機能を取り込んでいる傾向がある
アーキテクチャという欄にv6-Mとか、v7-Mとか書いてあるのが、Arm社の定めるアーキテクチャの世代名で、これは単純に数字が多い方が新しくて「いろいろ追加されている」と思って間違いありません。ただし、MCUというのはなんでもフルオプションで取り込むということはまずありません。必要最低限の機能と価格のこまめに調整するものです。ですから新しいとはいっても、追加機能を落としていけば「プレイン」「バニラ味」なコアになっていることもあります。
下から見ていきます。M0というのがもっともベーシックな機種。整数型のみの処理で浮動小数は扱えません。32ビットMCUとしてともかく32ビットの処理ができれば良いという場合にはこれになるのだと思います。これに似た型番でM0+というものがあり、機能的にはM0のチョイ変?という感じで、M0になかった便利な機能がいくつか追加になっている程度の違い。しかし、どうもそれは羊の皮をかぶったオオカミの類で、実はM0の顔をした別人?に見えます。M0+が進化してM23という最新版の機種になっているのではないかと思えるのですがどうでしょうか。
M1という機種が次に現れますがこれは純粋MCU向けの機種ではなく、FPGAへの組み込み用のコアのようです。今回はMCUなので見て見ぬふりで通り過ぎますが、M0と大差ないように思えます。その次に2を飛ばしてM3が登場しますが、これが現在の基本品種になるかと思われます。命令セット的には大分強化されており、除算器もハード化されているようです(M0は乗算器のみハード化)。ただし、M3は整数型のコアであることに変わりありません。
オプションですが浮動小数点数のサポート、ハードウエアの積和演算器、SIMD演算などのサポートが入っているのが次のM4です。ここまでくると演算能力的には各段の進歩かと。それに加えてスーパスカラになって、2命令を同時に実行できたりするのがM7です。ただしスーパスカラといっても後の命令が前の命令を追い越すタイプのアウトオブオーダではなく、インオーダといわれるタイプのようです。x86でいうと初代のPentiumくらいな感じ。さすがにこのクラスになるとキャッシュメモリを積まないわけにもいかなくなるので、M7はキャッシュメモリを搭載できます。どうしても処理能力的にM7でないと、という場合以外は、浮動小数点処理が必要ならM4,整数処理のみで賄える場合はM3で良いような気がします。
さきほど申し上げたとおり、M23はミニマムコアのM0系の後継機に見えます。そしてM33は、標準機M3に対する後継に見えます。この後継世代の目玉は、ArmがTrustZoneとよぶセキュリティ技術への対応のようです。昔のマイコンの感覚ですと独立な装置の中に組み込まれているマイコンのプログラムを改ざんしようなどとすると物理的に蓋を開けて書き込みツールの配線でもしないと無理だったですが、今やIoTデバイスの時代です。そういう応用では必ずネットワークに接続するので「攻撃」に対処しなけりゃならん、という分けです。やな世の中ですが、いたしかたありません。
結構バラエティに富むMシリーズですが、より上位のシリーズとの「住み分け」のため、メモリ保護機能は入れてもよいけれど、仮想記憶のようなメモリ管理機能はサポートしないというのがポリシーのように観察されます。制御用のMCUなのだから、実記憶で動作すれば十分だよね、という感じじゃないでしょうか。