概要
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-A5 | ARMv7-A | 8段 | ~1GHz | 低消費電力 |
| Cortex-A7 | ARMv7-A | 8段 | ~1.5GHz | big.LITTLE省電力コア |
| Cortex-A9 | ARMv7-A | 8段OoO | ~2GHz | 初期スマホ定番 |
| Cortex-A15 | ARMv7-A | 15段OoO | ~2.5GHz | 高性能 |
| Cortex-A53 | ARMv8-A | 8段 | ~1.8GHz | 64bit省電力コア |
| Cortex-A57 | ARMv8-A | 15段OoO | ~2GHz | 64bit高性能コア |
| Cortex-A72 | ARMv8-A | 15段OoO | ~2.5GHz | A57後継 |
| Cortex-A73 | ARMv8-A | - | ~2.8GHz | 省電力高性能 |
| Cortex-A55 | ARMv8.2-A | DynamIQ | ~2GHz | 最新省電力コア |
| Cortex-A76 | ARMv8.2-A | 4-wide OoO | ~3GHz | PC級性能 |
| Cortex-A78 | ARMv8.2-A | - | ~3GHz | 効率改善 |
| Cortex-X1 | ARMv8.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-A | Cortex-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と競合するレベルに達しました。