プロセッサ・アーキテクチャ

ARM Cortex-A

高性能Armコア。Linuxやスマホ・SBCで使われる。

概要

ARM Cortex-Aは、Armホールディングスが設計したアプリケーションプロセッサ向けコアファミリです。Linux・Android・iOSなどのフルOSを動作させることを前提に設計されており、MMU(メモリ管理ユニット)による仮想メモリ管理・高いクロック周波数・優れた整数/浮動小数点演算性能が特徴です。

スマートフォンのSoC(Snapdragon・Exynos・Apple Aチップなど)、シングルボードコンピュータ(Raspberry Pi)、組み込みLinux機器(産業用HMI・ゲートウェイ・カーナビ)、NVIDIA Jetsonシリーズなど、高い処理能力と豊富なOSサポートが必要な場面で採用されています。

ARM Cortex-Mがリアルタイム制御を得意とするのに対し、Cortex-Aはデータ処理・UI・ネットワーク処理など高いスループットを必要とする用途に適しています。

歴史・背景

ArmのアプリケーションコアはARM9・ARM11の時代を経て、2005年にCortex-Aブランドとして再編されました。最初のCortex-AシリーズはCortex-A8(2005年設計、2007年製品化)で、ARMv7-Aアーキテクチャを採用した初のコアです。

2012年に登場したCortex-A15は2GHz超での動作が可能となり、スマートフォンの急速な性能向上を支えました。2012年にはARMv8-A(64ビット対応)が発表され、2013年にCortex-A53/A57として製品化。これにより組み込み向けも含めて64ビット化が進みました。

2017年にはDynamIQ技術が導入され、big.LITTLEアーキテクチャの進化版としてより柔軟なクラスタ構成(高性能コア+高効率コアの混在)が可能になりました。Cortex-A55/A75/A76/A77/A78/X1/X2/A710/A715などが登場しています。

組み込み分野では、Cortex-A53が低消費電力と64ビット対応を両立した実績あるコアとして産業機器・ゲートウェイに広く普及しています。

技術仕様

バリアント比較

コアISAパイプライン最大クロック主な特徴
Cortex-A5ARMv7-A8段~1GHz低消費電力
Cortex-A7ARMv7-A8段~1.5GHzbig.LITTLE省電力コア
Cortex-A9ARMv7-A8段OoO~2GHz初期スマホ定番
Cortex-A15ARMv7-A15段OoO~2.5GHz高性能
Cortex-A53ARMv8-A8段~1.8GHz64bit省電力コア
Cortex-A57ARMv8-A15段OoO~2GHz64bit高性能コア
Cortex-A72ARMv8-A15段OoO~2.5GHzA57後継
Cortex-A73ARMv8-A-~2.8GHz省電力高性能
Cortex-A55ARMv8.2-ADynamIQ~2GHz最新省電力コア
Cortex-A76ARMv8.2-A4-wide OoO~3GHzPC級性能
Cortex-A78ARMv8.2-A-~3GHz効率改善
Cortex-X1ARMv8.2-A-~3GHz+プレミアム

MMU(メモリ管理ユニット)

Cortex-Aの最大の特徴はMMUを内蔵することです。MMUにより:

  • 仮想アドレス→物理アドレス変換: プロセスごとに独立したアドレス空間を提供
  • ページング: 4KB/64KB/1MB/16MBのページサイズをサポート
  • アクセス保護: ページごとに読み取り専用・実行禁止などを設定
  • TLB(Translation Lookaside Buffer): アドレス変換結果をキャッシュして高速化

これによりLinuxのプロセス分離・共有メモリ・スワップなどの機能が実現します。

キャッシュ構成

Cortex-Aは多段キャッシュを持ちます:

CPU Core
  ├── L1 命令キャッシュ: 16KB〜64KB(コアごと)
  ├── L1 データキャッシュ: 16KB〜64KB(コアごと)
  └── L2キャッシュ: 128KB〜4MB(クラスタ共有)
      └── L3キャッシュ: 4MB〜32MB(SoC全体共有)

                    メインメモリ(LPDDR4/LPDDR5)

ARMv8-A / AArch64

ARMv8-Aから64ビット(AArch64)をサポート:

  • 31本の汎用64ビットレジスタ(X0〜X30)
  • 32本の128ビットSIMD/FPレジスタ(V0〜V31)
  • 4GBを超えるメモリアドレッシング(48ビット物理アドレス)
  • ARMv8.2-A以降でドット積演算(INT8推論高速化)

big.LITTLE / DynamIQ

高性能コア(big)と省電力コア(LITTLE)を組み合わせた異種マルチコア構成:

  • 負荷が高い時は高性能コアで実行
  • 軽い処理・スタンバイ時は省電力コアで実行
  • OSのスケジューラがコア選択を制御
  • DynamIQでは同一クラスタ内に最大8コアの混在が可能

動作原理

アウトオブオーダー実行

Cortex-A9以降の高性能コアはOoO(Out-of-Order)実行をサポートします。命令の依存関係を解析し、準備が整った命令を先行実行することでパイプラインのストールを削減します。

プログラム順:          実行順(OoO):
1: ADD R0, R1, R2    1: ADD R0, R1, R2  (演算器A)
2: LDR R3, [R4]      2: LDR R3, [R4]   (ロード)
3: ADD R5, R0, #1    3: ADD R6, R7, #2 (命令2待ちの間に3を先行)
4: ADD R6, R7, #2    4: ADD R5, R0, #1 (R0が揃ったので実行)

仮想メモリの仕組み

プロセス A             プロセス B
仮想アドレス空間       仮想アドレス空間
0x00001000            0x00001000
     |                     |
     v  MMU(TLB/ページテーブル)
     |                     |
物理アドレス           物理アドレス
0x80001000            0x82005000

各プロセスは独立した仮想アドレス空間を持ち、物理メモリへのマッピングはOSが管理します。

例外レベル(EL)

ARMv8-Aでは4つの例外レベルを定義:

EL0: ユーザー空間(アプリ実行)
EL1: OS カーネル
EL2: ハイパーバイザー(仮想化)
EL3: セキュアモニタ(TrustZone)

用途・ユースケース

組み込みLinux機器

産業用HMI・PLCの上位コントローラ・カーインフォテインメント・ネットワーク機器など、フルLinuxが必要な組み込み機器で広く採用されます。NXP i.MX系(Cortex-A7/A53/A55)、Texas Instruments AM系、Renesas RZシリーズなどが代表製品です。

シングルボードコンピュータ(SBC)

Raspberry Pi 4(Cortex-A72 x4)・Raspberry Pi 5(Cortex-A76 x4)はCortex-Aを搭載したSBCの代表で、プロトタイピング・教育・軽量サーバー用途に使われます。

エッジAI・推論

NVIDIA JetsonシリーズはCortex-AとGPUを組み合わせ、画像認識・物体検出などのエッジAIに特化。Cortex-A自体もNEON SIMD命令でCNN推論を処理でき、TFLiteが動作します。

スマートフォン・タブレット

iOS(Apple Aシリーズ)・Android(Snapdragon・Exynos等)のアプリケーションプロセッサとして最も大量採用されています。

実装・開発のポイント

組み込みLinux開発ツール

# クロスコンパイル(aarch64向け)
sudo apt install gcc-aarch64-linux-gnu

# コンパイル例
aarch64-linux-gnu-gcc -O2 -o hello hello.c

# Yocto/BuildrootでのSDK生成
bitbake core-image-minimal -c populate_sdk

ブートシーケンス

1. ROM ブートローダー(SoC内蔵)

2. SPL(Secondary Program Loader)/ TF-A(Trusted Firmware-A)

3. U-Boot(ブートローダー)

4. Linuxカーネル(+ デバイスツリー)

5. ルートファイルシステム(init / systemd)

U-BootはCortex-A向け組み込みLinuxのデファクトブートローダーです。

デバイスツリー

Cortex-AのLinuxではハードウェア構成をデバイスツリー(DTS)で記述します:

/ {
    cpus {
        #address-cells = <1>;
        #size-cells = <0>;
        cpu0: cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-a53";
            reg = <0>;
            clock-frequency = <1200000000>;
        };
    };
};

マルチコア・SMP

Cortex-Aはマルチコア対応(SMP: Symmetric Multi-Processing)が一般的です。Linuxのスケジューラが自動的に負荷分散しますが、リアルタイム性が必要な場合はCPUアフィニティ設定でコアを固定します:

// Linuxでのスレッドをコア0に固定
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);

他技術との比較

Cortex-A vs Cortex-M

項目Cortex-ACortex-M
主な用途Linux・高性能処理リアルタイム制御
MMUあり(仮想メモリ)なし(MPUのみ)
消費電力高め(数百mA〜W)低い(µA〜mA)
起動時間数秒〜十数秒ミリ秒
割り込みレイテンシµs〜msサイクル単位(数百ns)
コスト高め安い

ARM Cortex-Mはリアルタイム制御・低消費電力が求められる場面で選ばれます。両者を組み合わせた非対称マルチプロセッシング(AMP)の構成(例:STM32MP1=Cortex-A7+Cortex-M4)も存在します。

Cortex-A vs RISC-V

RISC-Vは64ビット対応コア(例:SiFive P系)がデータセンター・組み込みLinux向けに登場しています。ライセンスフリーの優位性がありますが、Cortex-Aのエコシステム(Linux対応の成熟度・ベンダーサポート・Silicon実績)は現時点で大きな差があります。

Cortex-A vs x86/x64

x86/x64はPC・サーバー市場を独占しますが、消費電力と発熱の面でArmが有利です。エッジサーバー・産業PCではx86が標準ですが、低消費電力エッジゲートウェイではCortex-Aが選ばれることが増えています。Appleのm1/m2はArmベースでPC市場に進出し性能でもx86と競合するレベルに達しました。

関連用語

参考リンク