Cortex-M23およびCortex-M33におけるArmv8-Mアーキテクチャ徹底解説

組込み業界は急速に進化しており、それに伴い、強力で安全かつ効率的なマイクロコントローラのニーズが高まっています。Cortex-Mファミリーの最新進化形であるArmv8-Mアーキテクチャが登場しました。この3部構成のブログシリーズでは、組込みシステムにおける最新の課題に対応するために設計されたCortex-M23およびCortex-M33マイクロコントローラに導入された新機能と改善点について探っていきます。Armv8-Mが組込みシステムの未来をどのように形作っているかについて、各パートで詳しく解説していきます。

パート 1:はじめに、新しいC11言語サポートと大幅なMPU(メモリ保護ユニット)のアップデートについて説明します。これらの機能強化は、堅牢な組込みシステムに不可欠な要素であるデータの整合性とメモリセキュリティを確保するために極めて重要です。

パート2:次に、ハードウェア除算器の追加、長分岐命令、より効率的なMOV操作など、Cortex-M0/M0+のパフォーマンス改善に焦点を当てます。これらのアップデートにより、低消費電力を維持しながら、開発者はパフォーマンスの優位性を確保できます。

パート 3:最後に、セキュリティの改善について詳しくみていきます。組込みデバイスがネットワークに接続されることが増えているため、脅威からシステムを保護するには、TrustZoneテクノロジーとスタック保護が不可欠になっています。これらの機能がセキュリティをどのように強化するのかを解説します。

近年のマイコン選定で重要視されるポイントとは?

ここ10数年でCortex-Mマイコンが広く普及して来てきました。組込みマイコンとしてのCortex-Mの特徴は何だったか?と考えるといくつかのポイントを上げることができます。

低消費電力

Arm社のCPUはもともと携帯機器(携帯電話、携帯ゲーム機)など低消費電力が求められる場所で使用されました。Cortex-Mの前の世代のコアになりますが、ゲームボーイアドバンスやDSなどにも使用されましたし、ガラ携と呼ばれた携帯電話でも使用されていました。そのため、多くの方が知らないうちにArm社のCPUコアを使ったことがあると思います。

 

幅広いラインナップ

現在普及しているCortex-Mシリーズでは、Cortex-M0+, Cortex-M3,Cortex-M4, Cortex-M7などのCPUがそろえられており、CPUクロックでいうと数十MHzから数百MHzという幅広い性能レンジでサポートしています。近年では、より高い性能を実現するためにマルチコアのマイコンも増えています。この幅広いラインアップのため組込みシステムに応じて選択することができます。

 

標準マイコン

Arm社はCPUの設計・開発はしますが、チップとしての製造などはしません。半導体ベンダが設計データを購入し、チップとして販売をしています。さまざまな会社がArm社のCPUを採用しているため、異なった半導体ベンダのマイコンでも同一のCPUが利用できるというメリットがあります。このメリットから現在、Arm社のCPUは標準マイコンとしての位置を確立したと思います。技術的にはCortex-Mでは割込みコントラも標準化し、そこにタイマも組込み、アドレス空間なども標準を定義したため、命令セットが同じでだけでなく、より多くのソフトウェアを再利用することが容易になりました。たとえば、RTOSのカーネルなどは共通化することが可能となりました。

 

さらに命令セットも互換性を持ちながら拡張していることで、Cortex-M0+のソフトを、上位のCortex-M3/M4/M7などで実行することが出来ます。コロナ下での半導体不足あるいはEOL(End of Line,ディスコンなどともいう)などで、これまで使ってきたマイコンが使えなくなることがありましたが、標準マイコンを使う事でマイコンの変更などが行いやすくなります。そのため、最近はマイコン設定の際に「標準マイコンを採用」という点を考慮するケースが増えてきているように思います。

開発環境の統一

Cortex-Mが標準マイコンとなることでマイコンというハードウェアだけでなく、開発環境の統一をすることが可能となりました。過去では、組込みソフトウェアの開発ではマイコンが変わると開発環境を変えることが普通でした。それがCortex-Mマイコンを採用することで、開発環境が継続して使えることが可能となってきました。

 

開発環境としてはコンパイラ、アセンブラ、リンカというソフトウェアだけでなく、ハードウェアデバッガも継続して使用できます。これらは開発者が日頃使うツールであり統一できることで新しいツールの使い方などを覚え直す必要などがないことがメリットになっています。

 

もちろん、半導体ベンダからは各社の開発環境も提供されていますが、そうしたものは各社のマイコンに特化したものが多くなります。しかし、IAR Embedded Workbench for ARM(以後、EWARM)を使えば、各社のマイコンを継続して使用する事が可能です。具体的には、EWARMでは9,200を超えるデバイスを対応し、8,400を超えるサンプルなどもご利用いただくことができます。

Armv8-Mの登場

現在、Cortex-MシリーズにはさまざまなCPUコアがリリースされていますが、市場の要求により進化しています。現在、普及しているのは、Cortex-M0/M0+, Cortex-M3/M4/M7です。Cortex-Mシリーズで一番最初にリリースされたCortex-M3もすでに20年超えてきていることから、今後新しいアーキテクチャのCPUコアに移行をしていくことになります。

 

CPUコア

アーキテクチャ

Cortex-M0

Armv6-M

Cortex-M0+

Armv6-M

Cortex-M3

Armv7-M

Cortex-M4

Armv7E-M

Cortex-M7

Armv7E-M

Cortex-M23

Armv8-M Baseline

Cortex-M33

Armv8-M Mainline

簡単にいうと、Cortex-M0/M0+の置き換えがArmv8-M BaselineCortex-M23, Cortex-M3/M4の置き換えがArmv8-M MainlineCortex-M33となります。このArmv8-Mの特徴は、これまでのArmv6-MArmv7-Mの機能を継承しつつも、市場要求により機能が追加されたことです。これまでのCortex-M0/M0+/M3/M4/M7のソフトウェア資産を継承しながらも新しい機能が追加されました。

 

Armv8-Mの主なアップデート

今回は、C11言語規格とMPUアップデートのサポートに焦点を当てます。

 

  1. C11のサポート:Cプログラミング言語の最新バージョンであるC11では、排他制御の管理を支援するマルチスレッドや_Atomic型修飾子などの新機能が追加されています。これにより、メモリへのアクセスが安全かつ秩序ある方法で処理されることが保証されます。これらのC11の機能に対応するため、Armv8-Mではロード・アキューイットおよびストア・リリース命令が導入され、組込みシステム向けのより堅牢なメモリ処理機能が提供されます。

  2. MPUのアップデート:Armv8-Mのメモリ保護ユニット(MPU)もまた、重要なアップグレードです。以前のCortex-Mバージョンでは、MPUの柔軟性は限られていましたが、Armv8-Mでは、開発者は読み取り/書き込み権限やキャッシュ設定などのメモリ属性をより詳細に制御できるようになりました。さらに、TrustZoneのサポートにより、MPUはセキュアと非セキュアの2つの構成が可能となり、最新の組込みシステムのセキュリティがさらに強化されます。

C言語の新しい規格:C11への対応

次の新機能はArmv8-M全体(Cortex-M23Cortex-M33など)に対応するものになります。皆さんは、C言語はこれまでC90, C99, C11,C18というように進化していることはご存じでしょうか?C11ではマルチスレッドのサポートが追加されました(C++11も同様の機能が追加されています)。そのC11では_Atomic型修飾子が追加されました。これは排他制御(アトミックアクセス)を扱うものです。排他制御を実現するにはハードウェアの支援が望ましいとのことで、Armv8-MではLoad acquire, store release命令が追加されました。一般的なロードストア命令はメモリアクセスするためのものですが、さらに機能を追加したものになります。

 

この命令はアクセスデータごとに用意されておりLDA32ビット), LDAB(8ビット),LDAH(16ビット)、STL(32ビット),STLB8ビット),STLH(16ビット)が用意されています。アクセスサイズが32ビットのLDASTLで説明をします。 LDAはメモリから読み出しレジスタに値をセットし、STLはレジスタ値をメモリに書き込む命令です。

 

LDAはそれ以前のメモリアクセスが完了されることを保証し、それ以降のメモリアクセスがプログラム順に実行されるという制限が入ります。それに対してSTL命令以降はその制限が解除されます。参考文献[]Figure 2-6を以下に引用します。LDA命令とSTL命令を使ってクリティカルセクションを保護するために使用されています。

armv8m_01_01

さらに、排他アクセスを実施するLDAEX32ビット), LDAEXB(8ビット, LDAEXH(16ビット)、 STLEX(32ビット),STLEXB8ビット),STLEXH(16ビット)が用意されました。

 

LDAEXSTLEXで説明をします。LDAEXはメモリから読み出しレジスタに値をセットし、STLEXで同じアドレスに書き込むときにLDAEXをしたときからメモリ値が変更されていた場合には、書き込みを失敗し、コードにて再度読み出しから始めます。以下の例で見てみます。C11のプログラムでは変数aiに対して_Atomic型修飾子を付けて宣言しました。これにより変数aiのアクセスはアトミックアクセスとなります。Cortex-M23/M33ではLDAEX命令でメモリの値を読み出し、加算した結果をSTLEXで書き込みを実施しますが、STLEXの実行結果としてR3がゼロでない場合には、再度ロードLDAEXをやり直すコードとなります。それに対して、Armv7-Mでは、LDAEX命令に対してLDREX命令+DMB命令、STLEX命令に対してSTREX命令+DMB命令を組み合わせて実現しています。このDMB命令はバリアとなり、この命令の前のメモリアクセス命令が、DMB命令の後のメモリアクセスの前に実行されることを保証します。

armv8m_01_02

MPUの更新

これまでのCortex-Mの進化では過去との互換性が保たれることが多かったのですが、Armv8-MMPUは互換性が無くなったという点で重要なポイントとなります。MPU(Memory Protection Unit)では、各メモリ領域のRead/Write属性、共有属性、実行属性、キャッシュ設定、メモリタイプなどを設定することが出来ます。

 

たとえば、メモリタイプがArmv7-MNormal, Device, Strongly Order3つがあったのですが、Armv8-MではNormal,Device2つになりました。その代わりにArmv8-MDeviceでは、GatheringG),ReorderingR), Early Write AcknowledgementE)の属性が追加されました。

 

また、Armv7-MではMPUの領域指定がこれまでサイズが2のべき乗と言う制限があったのですが、指定方法が変わったことで比較的自由に領域指定ができるようになりました。2のべき乗と言う制限が無くったことで、領域のオーバーラップができなくなりました。8個に分割して管理するサブリージョンも廃止されました。

 

セキュリティ拡張(TrustZone対応)をしたものでは、Secure/NonSecureで2つのMPUコンフィグレーションを持つことが可能です。Cortex-Mは互換性良く作られている事が多く、昔のソフトは新しいコアでそのまま動かせることが多いですが、MPUは全く互換性がないのでコアを変更する場合に注意が必要です。

EWARMでArmv8-Mへの移行をスムーズに!


組込みシステムがより複雑になるにつれ、Armv8-Mのような強力で柔軟なアーキテクチャのニーズが高まっています。C11サポートとMPUのアップデートにより、Cortex-M23とCortex-M33は、IoTから産業用オートメーションまで、最新の組込みアプリケーションの要求に対応するのに最適な位置づけにあります。IAR Embedded Workbench for ARMはCortex-Mファミリー全般をサポートしており、Armv8-Mへの移行を容易にする統一開発環境を提供しています。

次回の記事では、Cortex-M0/M0+のパフォーマンス向上について詳しくみていき、ハードウェア分割、新しい命令、その他の機能が組込みシステムのパフォーマンスの限界をどのように押し広げているかを検証します。

 

本シリーズのそのほかの記事はこちら

Armv8-Mでパフォーマンスと開発効率を最大化

TrustZoneの深層にせまる:組み込みシステムのセキュリティ強化

 

参考文献

[1] ARM Cortex-M for Beginners An overview of the ARM Cortex-M processor family and comparison

[2] Armv8-M Memory Model and Memory Protection Version 1.1 User Guide

 

赤星
赤星 博輝
IARシニア・フィールド・アプリケーショ ン・エンジニア

九州大学で情報工学の学士号(1991年)、修士号(1993 年)、博士号(1996年)など、数多くの学位を取得しています。 研究対象は主にCPUアーキテクチャとコンパイラですが、組み込みソフトウェア開発での経験があります。これまで、20年以上にわたり自動車業界の安全性と機能性に焦点を当てた幅広いプロジェクトで活動をしてきました。