ARMアーキテクチャ
テンプレート:Infobox CPU architecture ARMアーキテクチャ とは、ARMホールディングスの事業部門であるARM Ltdにより開発されている、組み込み機器や低電力アプリケーション向けに広く用いられる32ビット・64ビットRISC CPUのアーキテクチャのことである。
目次
概要
ARMアーキテクチャは消費電力を抑える特徴を持ち、低消費電力を目標に設計されるモバイル機器において支配的となっている。命令セットはRISCでありながらもコード密度を重視したCISC寄りの設計になっており[1]、手作業による最適化がしやすい特徴的なアーキテクチャを持つテンプレート:要出典。
2005年現在、ARMファミリーは組み込み型での32ビット RISC CPUのおよそ75%を占め[2]、全世界で最も使用されている32bit CPUアーキテクチャであるテンプレート:要出典。ARMアーキテクチャに基づくCPUコアは、PDA・携帯電話・メディアプレーヤー・携帯型ゲーム・電卓などの携帯機器から、ハードディスク・ルータなどのPC周辺機器まで、あらゆる電子機器に使用される。2013年現在、携帯電話では100%近いシェアがあるテンプレート:要出典。
携帯機器や電子機器の高性能化に伴いARMコアの出荷数は加速度的に伸びており、2008年1月の時点で100億個以上[3]、2010年9月の時点で200億個以上[4]が出荷されている。ARMアーキテクチャを使用したプロセッサの例としては、テキサス・インスツルメンツのOMAPシリーズやマーベル・テクノロジー・グループのXScale、NVIDIAのTegra、クアルコムのSnapdragon、フリースケールのi.MXシリーズなどがある。
既存のARMプロセッサは組み込みとクライアントシステムに特化していたため全て32ビットであるが、顧客からは電力効率に優れるARMアーキテクチャのサーバへの応用を望む声が高まりテンプレート:要出典、ARM社は2011年10月27日、ARMの64ビット拡張であるARMv8アーキテクチャを発表した[5]。
歴史
ARMの設計は、1983年にエイコーン・コンピュータ(イギリス)によって開始された。当時エイコーンはモステクノロジー 6502を搭載したコンピューターを製造・販売しており、6502のように小さなハードウェア規模でシンプルな命令セットを持つ、より高速なプロセッサを開発することによって、6502を置き換えることが目的であった。
開発チームは1985年までにARM1と呼ばれる開発サンプルを完成させ、最初の製品となるARM2は次の年に完成した。ARM2は32ビットのデータバス、26ビットのアドレス空間と16個の32ビットレジスタを備えていた。レジスタの1つは、上位6ビットが状態フラグを保持するプログラムカウンタである。ARM2のトランジスタ数は30000個しかなく、おそらく世界で最もシンプルな実用32ビットマイクロプロセッサであった。これは、マイクロコードを持たないこと(モトローラ 68000の場合は1/4から1/3がマイクロコードであった)と、現在のほとんどのCPUと違ってキャッシュを含まないことによるものである。このシンプルさのために消費電力は極めて低いが、それにもかかわらず80286よりも性能は高かった。後継となるARM3は、4KBのキャッシュを含みさらに性能を高めた。
1980年代後半、アップルコンピュータはエイコーンと共同で新しいARMコアの開発に取り組んだ。この作業は非常に重要視されていたため、エイコーンは1990年に開発チームをスピンオフしてAdvanced RISC Machinesという新会社を設立した。このため、ARMは本来のAcorn RISC MachineではなくAdvanced RISC Machineの略であるという説明をよく見かけることになる。Advanced RISC Machinesは、1998年にロンドン証券取引所とNASDAQに上場した際、ARM Limitedとなった。
この作業の結果、ARM6が開発された。1991年に最初のモデルがリリースされ、アップルはARM6ベースのARM610をアップル・ニュートンに採用した。
これらの変化を経てもコアは大体同じサイズに収まっている。ARM2は30000個のトランジスタを使用していたが、ARM6は35000個にしか増えていない。そこにあるアイデアは、エンドユーザーがARMコアと多くのオプションのパーツを組み合わせて完全なCPUとし、それによって古い設備でも製造でき、かつ安価に高性能を得られる、というものである。
このARM6の改良版であるARM7も、ARM6を採用した製品群に引き続き採用されたほか、普及期に入りつつあった携帯電話にも広く採用されたことから、今日のARMの礎ともなった。
さらに、新世代のARMv4アーキテクチャに基いてARM7を再設計したものがARM7TDMIである。ARM7TDMIはThumb命令(後述)を実装し、低消費電力と高いコード効率を両立する利点を備えていたことから、ライセンスを受けた多くの企業によって製品化され、特に携帯電話やゲームボーイアドバンスといった大量生産された民生機器に採用されたことから、莫大な数の製品に搭載される大ヒットとなった。なお、TDMIとはThumb命令、デバッグ(Debug)回路、乗算器(Multiplier)、ICE機能を搭載していることを意味している。しかし、これより後の製品には全てこれらの機能が搭載されるようになったため、この名称は省かれている。
DECはARMv4アーキテクチャの設計のライセンスを得てStrongARMを製造した。233MHzでStrongARMはほんの1Wの電力しか消費しない(最近のバージョンはさらに少ない)。この業績は後に訴訟の解決の一環としてインテルに移管され、インテルはこの機会を利用して古くなりつつあったi960をStrongARMで補強することにし、それ以降XScaleという名で知られる高性能の実装を開発した。
以後も、StrongARMの技術のフィードバックを受けたARM9やARM10を経て、NECとの提携などによって携帯電話向けプロセッサとしての地位を確固たるものにしたARM11をリリースする。
2005年には製品ラインナップを一新し、高機能携帯電話などのアプリケーションプロセッサ向けであるCortex-A、リアルタイム制御向けであるCortex-R、組み込みシステム向けであるCortex-Mと、ターゲットごとにシリーズを分類した。なお、Cortexの末尾に付く文字は、社名であるARMの一文字ずつをそれぞれ割り当てたものである[6]。
ARMからIPコアのライセンス供与を受けている主な企業には、モトローラ、IBM、テキサス・インスツルメンツ、任天堂、フィリップス、Atmel、シャープ、サムスン電子、STマイクロエレクトロニクス、アナログ・デバイセズ、パナソニック、クアルコム、Marvellなどがある。ARMチップは世界で最もよく使われているCPUデザインの一つとなっており、ハードディスク、携帯電話、ルータ、電卓から玩具に至るまであらゆる製品の中に見ることができる。現在では32ビット/64ビット組み込みCPUで圧倒的なシェアを占め、2004年の世界シェアは61%であった[7]。
主な採用製品
ARM6
- ARM60 3DOインタラクティブ マルチプレーヤー
- VY86C06020FC-2 02.jpg
ARM60 CPU (VY86C06020FC-2) - P60ARM GC 01.jpg
ARM60 CPU (P60ARM)
- ARM610 アップル ニュートン・メッセージパッド、メッセージパッド100、メッセージパッド110、メッセージパッド120
ARM7/7E
- 携帯情報端末
- 携帯電話
- 携帯ゲーム機
- ゲームボーイアドバンス
- ニンテンドーDS/ニンテンドーDS Lite(サブCPU、GBAソフトの動作にも使われる)
- ニンテンドーDSi(サブCPU)
- 携帯音楽プレーヤー
- 電卓
- HP 20b / HP 30b
- その他
- レゴマインドストーム NXT(知能ブロックの一部)
- ルンバ(一部の機種)
ARM9/9E
- 携帯ゲーム機
- ニンテンドーDS/DS Lite/ニンテンドーDSi(メインCPU、ARM7とのダブル実装)
- Tapwave Zodiac
- 携帯電話
- Sun SPOT
- Qualcomm MSM6550(CDMA2000 1xEV-DO Rel.0対応携帯電話用チップセット)
- Qualcomm MSM6800(CDMA2000 1xEV-DO Rev.A対応携帯電話用チップセット)
- 現在販売中の3Gおよび3.5G携帯電話(例:NTTドコモ FOMA 900i・901iシリーズ、au(KDDI、沖縄セルラー電話)のCDMA 1XシリーズおよびCDMA 1X WINシリーズ、ソフトバンクモバイルのSoftBank 3Gシリーズ等。一部例外除く)
- H11T(イー・モバイルの音声通話用3.5G端末)
- WS009KE “9 (nine)” (WILLCOM(ウィルコム)のPHS端末)
- Nokia N-Gage
- 携帯情報端末
- Handheld Engine (SONY CLIEに搭載)
- その他
ARM11/11E
- 2007年頃から採用されるようになる。発表は2002年4月29日[8]。
- 2007年7月17日、東芝がARM1176JZF-S搭載の携帯電話用プロセッサ、TC35711XBGを発表。2008年第2四半期より量産開始予定。
- NVIDIA Tegra(ネットブック用プロセッサ)
- 携帯音楽プレーヤー
- 携帯電話
- T-Mobile G1
- Qualcomm MSM7500(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
- Qualcomm MSM7600(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
- KYOCERA Zio M6000
- HTC Hero
- NTTドコモのFOMA902iシリーズ以降の携帯電話。905i以降のSymbian採用機はSH-4Aとダブル実装。
- WS018KE (WILLCOM 9) (WILLCOM(ウィルコム)のPHS端末)
- Samsung S3C6400(ARM 1176JZ(F)-S v1.0)
- iPhone 3G(412 MHzで駆動)
- タブレット・PDA
- ノキア Internet Tablet N800
- mylo COM-2
- ゲーム機
- Zeebo (新興国向けDL専用3Dゲーム機)
- シングルボードコンピュータ
Cortex-M3
- 2004年に発表されたマイクロコントローラ。
- 自動車・工場・家電などの機器制御などに使われている。自動車では、モーター制御、パワーステアリング、横滑り防止装置などいろいろな場所で使われている。
- ワンボードマイコン
- mbed - NXPのLPC1768の評価ボード。ホビー用途としても広く流通している。
Cortex-A8
- 2009年頃から採用されるようになる。2010年発売のAndroidスマートフォンは大多数が採用。
- NetWalker
- Samsung S5PC100
- iPhone 3GS(600 MHzで駆動)
- iPod touch (第3世代)
- Apple A4(Cortex-A8をもとにアップルとサムスンが携帯機器向けに開発)
- iPhone 4(800MHz)
- iPad(1GHz)
- iPod touch(第4世代)
- Apple TV(2010年モデル)
- シングルボードコンピュータ
- BeagleBoard、BeagleBoard-xM、BeableBone、BeagleBone Black
- テキサス・インスツルメンツが技術支援をしてオープンソースハードウェアによって開発されたボード。
- Cubieboard
- BeagleBoard、BeagleBoard-xM、BeableBone、BeagleBone Black
Cortex-A9
- タブレットは2010年頃から、スマートフォンは2011年から採用された。初期は2コアだったが、4コアのものがタブレットは2011年から、スマートフォンは2012年から登場した。
- 携帯ゲーム機
- Apple A5
- Apple A5X
- シングルボードコンピュータ
- PandaBoard
- BeagleBoard同様、テキサス・インスツルメンツの技術支援によって開発されたボード。
- Wandboard
- PandaBoard
Cortex-A15
- タブレットは2012年から、スマートフォンは2013年から採用された。
- サムスン電子は1.7GHzのデュアルコア Exynos 5250 を2012年10月[9]から搭載商品を販売開始。メモリ帯域12.8GB/s[10]。
- テキサス・インスルメンツは2GHzのデュアルコアで2012年第3四半期から商品を出荷予定[11]。
- NVIDIA は Tegra 4 を2013年第1四半期から出荷予定。
- シングルボードコンピュータ
- ODROID-XU
Cortex-A57
- 2012年10月に64ビット ARMのCortex-A53, A57(コードネーム「Atlas」と「Apollo」)が発表された。2014年にSoC製品が登場予定[12]。
- AMD は2014年にサーバー向けSeattleをリリース予定[13]。
コアの性能と採用実績
ARM社製
ファミリー | アーキテクチャ | コア | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
ARM1 | ARMv1 | ARM1 | なし | ARM Evaluation System second processor for BBC Micro | ||
ARM2 | ARMv2 | ARM2 | MUL(乗算)命令を追加 | なし | 4 MIPS @ 8 MHz 0.33 DMIPS/MHz |
Acorn Archimedes, Chessmachine |
ARMv2a | ARM250 | 統合メモリコントローラ(MMU), Graphics and IO processor. SWAP命令を追加 | なし, MEMC1a | 7 MIPS @ 12 MHz | Acorn Archimedes | |
ARM3 | ARMv2a | ARM2a | ARMとしてはじめてのキャッシュの採用 | 4K 統合 | 12 MIPS @ 25 MHz 0.50 DMIPS/MHz |
Acorn Archimedes |
ARM6 | ARMv3 | ARM60 | 32ビットアドレス空間をサポート(それまでは26ビット) | なし | 10 MIPS @ 12 MHz | 3DO, Zarlink GPS Receiver |
ARM600 | キャッシュ、コプロセッサバス (FPA10浮動小数点演算ユニット用) | 4K 統合 | 28 MIPS @ 33 MHz | |||
ARM610 | キャッシュ、コプロセッサバスは無し | 4K 統合 | 17 MIPS @ 20 MHz 0.65 DMIPS/MHz |
Acorn Risc PC 600, アップル・ニュートン 100シリーズ | ||
ARM7 | ARMv3 | ARM700 | 8KB 統合 | 40 MHz | Acorn Risc PC 試作CPUカード | |
ARM710 | 8KB 統合 | 40 MHz | Acorn Risc PC 700 | |||
ARM710a | 8KB 統合 | 40 MHz 0.68 DMIPS/MHz |
Acorn Risc PC 700, アップル・ニュートン eMate 300 | |||
ARM7100 | Integrated SoC. | 8KB 統合 | 18 MHz | Psion Series 5 | ||
ARM7500 | Integrated SoC. | 4KB 統合 | 40 MHz | Acorn A7000 | ||
ARM7500FE | Integrated SoC. "FE"、FPA・EDOメモリコントローラを追加 | 4KB 統合 | 56 MHz 0.73 DMIPS/MHz |
Acorn A7000+ | ||
ARM7TDMI | v4T | ARM7TDMI(-S) | 3ステージ パイプライン | 無し | 15 MIPS @ 16.8 MHz | ゲームボーイアドバンス, ニンテンドーDS, iPod |
ARM710T | MMU | 36 MIPS @ 40 MHz | Psion 5 series, アップル・ニュートン | |||
ARM720T | 8KB 統合キャッシュ, MMU | 60 MIPS @ 59.8 MHz | ||||
ARM740T | MPU | |||||
v5TEJ | ARM7EJ-S | Jazelle DBX | なし | |||
ARM9TDMI | v4T | ARM9TDMI | 5ステージ パイプライン | なし | ||
ARM920T | 16KB/16KB, MMU | 200 MIPS @ 180 MHz | Armadillo, GP32,GP2X (マスタ), en:Tapwave Zodiac (Motorola i. MX1) | |||
ARM922T | 8KB/8KB, MMU | 200/250 MHz | Cavium CNS2132 (Econa product lines)[1], Cavium STR8132 (Econa evaluation board), Ritmo Torrent Box/Mini Lan Server/BT-Downloader (ZAP-LN-86BT)[2] | |||
ARM940T | 4KB/4KB, MPU | GP2X (スレーブ) | ||||
ARM9E | v5TE | ARM946E-S | variable, tightly coupled memories(TCM), MPU | 231 MIPS @ 210MHz 74.47 MIPS @ 67.024MHz | ニンテンドーDS, ノキア N-Gage, Conexant 802.11 chips | |
ARM966E-S | キャッシュレス, TCMs |
ST Micro STR91xF, Ethernet内蔵 [3] | ||||
ARM968E-S | キャッシュレス, TCMs | |||||
v5TEJ | ARM926EJ-S | Jazelle DBX | variable, TCMs, MMU | 220 MIPS @ 200 MHz | Mobile phones: ソニー・エリクソン・モバイルコミュニケーションズ (K, W シリーズ),シーメンス and Benq (x65 シリーズ以降), テキサスインスツルメンツ OMAP1710 | |
v5TE | ARM996HS | Clockless processor | キャッシュレス, TCMs, MPU | |||
ARM10E | v5TE | ARM1020E | (VFP) | 32KB/32KB, MMU | ||
ARM1022E | (VFP) | 16KB/16KB, MMU | ||||
v5TEJ | ARM1026EJ-S | Jazelle DBX | variable, MMU or MPU | |||
ARM11 | v6 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz | TI OMAP 2, Freescale i.MX3 |
v6T2 | ARM1156T2(F)-S | SIMD, Thumb-2, (VFP) | variable, MPU | 1.54 DMIPS/MHz | ||
v6KZ | ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU+TrustZone | 1.25 DMIPS/MHz | iPhone, iPhone 3G, Raspberry Pi | |
v6K | ARM11 MPCore | 1-4 core SMP, SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz(最大608MHz) | NVIDIA Tegra | |
SecurCore | v6-M | SC000 | 0.9 DMIPS/MHz | |||
v4T | SC100 | |||||
v7-M | SC300 | 1.25 DMIPS/MHz | ||||
Cortex-M | v6-M | Cortex-M0 | マイクロコントローラ向け。M1はFPGA上で動作。命令はM3のサブセット。Thumb-2 (BL, MRS, MSR, ISB, DSB, and DMB)対応。 | 0.9 DMIPS/MHz | NXP LPC11xx, Triad Semiconductor, Melfas, 忠北テクノパーク, Nuvoton, オーストリアマイクロシステムズ, ローム | |
Cortex-M0+ | 0.93 DMIPS/MHz | |||||
Cortex-M1 | なし, tightly coupled memory optional. | 0.8 DMIPS/MHz[14] 最大 136 DMIPS @ 170 MHz[15] (クロックはFPGA依存) |
Altera Cyclone III[16], Actel FPGA[17] | |||
v7-M | Cortex-M3 | マイクロコントローラ向け | キャッシュなし, (MPU) | 1.25 DMIPS/MHz | Texas Instruments Stellaris MCU, STMicroelectronics STM32, NXP LPC1000, NXP mbed, 東芝 TX03, Luminary Micro, Ember EM3xx, Atmel AT91SAM3, Europe Technologies EasyBCU, Energy Micro EFM32, Actel SmartFusion | |
v7E-M | Cortex-M4 | マイクロコントローラ向け。M3にDSP追加。モーター制御、FA/電力制御、オーディオ/ビデオ処理など。 | Freescale Kinetis, NXP LPC43xx, STMicroelectronics | |||
Cortex-R | v7-R | Cortex-R4 | 組み込み向け | 可変キャッシュ, MMUはオプション | 1.66 DMIPS/MHz | Texas Instruments TMS570, Broadcom |
Cortex-R5 | 1.66 DMIPS/MHz | |||||
Cortex-R7 | 2.53 DMIPS/MHz | |||||
Cortex-A | v7-A | Cortex-A5 | 400MHz〜800MHz 1.57 DMIPS/MHz |
PS-T328, Snapdragon S4 Play, Snapdragon 200 | ||
Cortex-A7 | 1-4マルチプロセッシング 浮動小数点演算器 L2キャッシュメモリ4MB(最高) | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 〜1.5Ghz 1.9 DMIPS/MHz |
Snapdragon S4 Play, Snapdragon 400, Allwinner A20, Allwinner A31, MediaTek MT6589 | ||
Cortex-A8 | アプリケーション向け, NEON, Jazelle RCT, Thumb-2 | 可変(L1+L2), メモリ管理ユニット, TrustZone | 600MHz〜1GHz 2.0 DMIPS/MHz |
TI OMAP 3, Freescale i.MX 5, Apple A4, Samsung Exynos 3, Allwinner A1x, Rockchip RK29xx | ||
Cortex-A9 | アプリケーション向け, 1-4コア対称型マルチプロセッシング, (VFP), (NEON), Jazelle RCT and DBX, Thumb-2, アウト・オブ・オーダー実行, 投機的実行, スーパースケーラ | メモリ管理ユニット, TrustZone | 800MHz〜2GHz 2.5 DMIPS/MHz |
TI OMAP 4, Freescale i.MX 6, ST-Ericsson NovaThor U8500, NVIDIA Tegra 2, NVIDIA Tegra 3, NVIDIA Tegra 4i, STMicroelectronics SPEAr1300, ザイリンクス Zynq-7000, Apple A5, Rockchip RK3xxx, Samsung Exynos 4, HiSilicon K3V2, MediaTek | ||
Cortex-A12 | 1-4コア対称型マルチプロセッシング | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 3.0 DMIPS/MHz | |||
Cortex-A15 | 1-4コア対称型マルチプロセッシング | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 1GHz〜2.5GHz 3.5 DMIPS/MHz |
TI OMAP 5, Samsung Exynos 5, NVIDIA Tegra 4, NVIDIA Tegra K1, HiSilicon K3V3, Renesas APE6, Renesas R-Car H2, Renesas MP6530 | ||
Cortex-A17 | 1-4コア対称型マルチプロセッシング | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | ||||
v8-A | Cortex-A53 | 64ビット命令セット。暗号化命令 | メモリ管理ユニット, TrustZone, 64bit仮想アドレス | 2.3 DMIPS/MHz | Snapdragon 410 | |
Cortex-A57 | メモリ管理ユニット, TrustZone, 64bit仮想アドレス | 4.1 DMIPS/MHz |
サードパーティー
ファミリー | アーキテクチャ | 名称 | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
StrongARM | v4 | SA-1 | 16 KB/8–16 KB, MMU | 203–206 MHz 1.0 DMIPS/MHz |
||
XScale | v5TE | 80200/IOP310/IOP315 | I/O Processor | |||
80219 | ||||||
IOP321 | en:Iyonix | |||||
IOP33x | ||||||
PXA210/PXA250 | Applications processor | ザウルス SL-5600, SL-A300 | ||||
PXA255 | 32KB/32KB, MMU | 400 BogoMips @400 MHz | en:Gumstix | |||
PXA26x | ||||||
PXA27x | 800 MIPS @ 624 MHz | HTC Universal, ザウルス SL-C1000,3000,3100,3200,Willcom W-ZERO3シリーズ WS003SH,WS004SH,WS007SH,WS011SH,WS020SH | ||||
PXA800(E)F | ||||||
Monahans | 1000 MIPS @ 1.25 GHz | |||||
PXA900 | Blackberry 8700, Blackberry Pearl (8100) | |||||
IXC1100 | Control Plane Processor | |||||
IXP2400/IXP2800 | ||||||
IXP2850 | ||||||
IXP2325/IXP2350 | ||||||
IXP42x | en:NSLU2 | |||||
IXP460/IXP465 | ||||||
Snapdragon | v7-A | Scorpion | アプリケーション向け, 1-2コア対称型マルチプロセッシング, VFPv3, NEON, Thumb-2, Jazelle RCT, アウト・オブ・オーダー実行, 投機的実行 | 可変(L1+L2), MMU, TrustZone | 800MHz〜1.5GHz 2.1 DMIPS/MHz |
Qualcomm Snapdragon S1, S2, S3 (第1〜3世代) |
Krait | アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv4 | MMU, TrustZone | 〜2.5GHz 3.3 DMIPS/MHz |
Qualcomm Snapdragon S4 (第4世代・S4 Playは除く), 400/600/800 (第5世代) | ||
ARMADA | v7-A | Sheeva PJ4 | アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv3, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 〜1.5GHz 2.42 DMIPS/MHz |
Marvell ARMADA 500/600シリーズ |
Sheeva PJ4B | 組み込み向け, 1-4コア対称型マルチプロセッシング, VFPv3, NEON, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 〜1.6GHz 2.61 DMIPS/MHz |
Marvell ARMADA XP/370/1500 | ||
Apple Ax | v7-A | Swift | アプリケーション向け, 2コア対称型マルチプロセッシング, VFPv4 | Apple A6 | ||
v8-A | Cyclone | アプリケーション向け, AArch64 | Apple A7 |
ARMv7-A, v8-A は以下の SoC で実装されている。
- Allwinner (全志科技)
- Amlogic (晶晨半导体)
- Apple A4, Apple A5, Apple A6, Apple A7
- Freescale i.MX
- Fujitsu ARM based SoC Platform (FASP)
- HiSilicon (海思半导体)
- Marvell ARMADA
- MediaTek
- NVIDIA Tegra
- Qualcomm Snapdragon
- Renesas EV2, APE6
- Rockchip (瑞芯微电子)
- Samsung Hummingbird, Samsung Exynos
- ST-Ericsson NovaThor
- STMicroelectronics SPEAr
- Texas Instruments OMAP
- Trident PNX
- ZiiLABS ZMS
ARMアーキテクチャを採用しているCPU/メーカ
ARMホールディングスの概要にあるように、ARMホールディングスはARMアーキテクチャの設計のみをしており、製造は行ってはいない。ARMはIPコアとして各社にライセンスされ、それぞれの会社において機能を追加するなどしてCPUとして製造される。製造されたCPUはそのまま、あるいはボード上に実装、もしくは製品に組み込まれた形で販売などされる。
以下に『CPUそのもの』『ボード上に実装したもの』などCPUやボードのシリーズ名やブランド名などが明確な主なメーカ名/CPU名/シリーズ名等を記する。
- NXPセミコンダクターズ
- LPC
- LPCXpresso
- mbed
- フリースケール・セミコンダクタ
- i.MX
- Kinetis
- DEC-インテル
- インテル-Marvell
- STマイクロエレクトロニクス
- STM32
- サイプレス・マイクロシステムズ
- 東芝
- Panasonic
- MN2WS0220シリーズ(スマートテレビ用UniPhier®)
- ルネサス エレクトロニクス
- RZファミリ
- EMMA Mobile
- R-Mobile
- R-Car
32ビットARM
命令セット
ARM は RISC プロセッサであり、Thumb 命令ではなく ARM 命令の場合、その命令セットは
- 32ビット固定長命令
- ロード/ストアアーキテクチャ
- 3オペランドのレジスタ間演算
- 多くの命令が1サイクルで実行可能
といった、多くの32ビットRISCプロセッサに共通する特徴が見られる。
ARMプロセッサは、PC相対アドレッシングやプレ-/ポスト-インクリメント・アドレッシングモードなど、RISCとみなされる他のアーキテクチャと、比べ豊富なアドレッシングモードを持っている。
もう一つ留意すべきことは、ARMの命令セットが時間とともに増加しているということである。例えば、初期のARMプロセッサ(ARM7TDMIより以前のもの)は2バイトの値をロードする命令がなかった。
CPUモード
32ビット ARM アーキテクチャはいくつかのCPUモードを持つ。同時には1つのモードにしかなれない。命令や外部からの割込みなどでモードが切り替わる。[18]
- ユーザーモード
- 唯一の非特権モード。
- 高速割込みモード
- FIQ 割込みが発生したときに切り替わる特権モード。
- 割込みモード
- IRQ 割込みが発生したときに切り替わる特権モード。
- スーパーバイザーモード
- CPU がリセットされたときか SWI 命令が実行されたときに切り替わる特権モード。
- アボートモード
- プリフェッチアボートかデータアボート例外が発生したときに切り替わる特権モード。
- 未定義モード
- 未定義命令が実行されたときに切り替わる特権モード。
- システムモード (ARMv4以降)
- これが唯一例外が原因で切り替わるモードではない。CPSRレジスタにこのモードを書くことによりこのモードに切り替えることが出来る。
- MONモード (要セキュリティ拡張)
- TrustZone 拡張をサポートするために作られたモニターモード。
- HYP 別名 PL2 モード (ARMv7以降)
- 仮想化拡張、ハイパーバイザーモード。[19]
レジスタ
レジスタ R0 から R7 は全ての CPU モードで同一。これらは決してバンクされない。
R13 と R14 はシステムモード以外の全ての特権 CPU モードでバンクされる。独自の R13 と R14 を持つことにより例外からそれぞれのモードに切り替えられる。R13 はスタックポインタ、R14 は関数からの戻りアドレスを持つ。
usr | sys | svc | abt | und | irq | fiq |
---|---|---|---|---|---|---|
R0 | ||||||
R1 | ||||||
R2 | ||||||
R3 | ||||||
R4 | ||||||
R5 | ||||||
R6 | ||||||
R7 | ||||||
R8 | R8_fiq | |||||
R9 | R9_fiq | |||||
R10 | R10_fiq | |||||
R11 | R11_fiq | |||||
R12 | R12_fiq | |||||
R13 | R13_svc | R13_abt | R13_und | R13_irq | R13_fiq | |
R14 | R14_svc | R14_abt | R14_und | R14_irq | R14_fiq | |
R15 | ||||||
CPSR | ||||||
SPSR_svc | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq |
別名:
- R13 は SP とも呼ばれ、スタックポインタ
- R14 は LR とも呼ばれ、リンクレジスタ
- R15 は PC とも呼ばれ、プログラムカウンタ
CPSR は下記32ビットを持つ[20]。
- M (ビット 0 - 4) はプロセッサモードビット
- T (ビット 5) は Thumb ステートビット
- F (ビット 6) は FIQ 無効ビット
- I (ビット 7) は IRQ 無効ビット
- A (ビット 8) は不正データアボート無効ビット
- E (ビット 9) はデータエンディアンビット
- IT (ビット 10 - 15 と 25 - 26) は if-then ステートビット
- GE (ビット 16 - 19) は greater-than-or-equal-to ビット
- DNM (ビット 20 - 23) は書き換え禁止ビット
- J (ビット 24) は Java ステートビット
- Q (ビット 27) は sticky overflow ビット
- V (ビット 28) はオーバーフロービット
- C (ビット 29) は carry/borrow/extend ビット
- Z (ビット 30) は零ビット
- N (ビット 31) は negative/less ビット
VFP/NEON用として、これらとは別に32ビット用はs0〜s31のレジスタがある。これらは、64ビットレジスタとしてd0〜d15として使える。s0〜s31とd0〜d15はオーバーラップしている。大半の ARMv7-A SoC はさらに、d16〜d31も使える。
VFP/NEON用のシステムレジスタとして、以下の3つがある。
- FPSCR - Floating-point status and control register (浮動小数点状態制御レジスタ)
- FPEXC - Floating-point exception register (浮動小数点例外レジスタ)
- FPSID - Floating-point system ID register (浮動小数点システムIDレジスタ)
条件実行
ARMの命令セットにおいてユニークなのは、マシン語の最上位4ビットを占める条件コードを使用した条件実行命令であり、これによってほぼ全ての命令を分岐命令無しに条件付きで実行することができる。
これにより、マシン語中の即値フィールドに割けるビット数が減ってしまう等の欠点もあるものの、小さなif文に対応するコードの生成時に分岐命令を避けることが可能になる。例として、ユークリッドの互除法を挙げる。
(この例はC言語による)
int gcd(int i, int j)
{
while (i != j) {
if (i > j)
i -= j;
else
j -= i;
}
return i;
}
ARMのアセンブリ言語では、whileループの部分は以下のようになる。
loop CMP Ri, Rj ; i と j を比較
SUBGT Ri, Ri, Rj ; もし "GT" ならば i = i - j;
SUBLT Rj, Rj, Ri ; もし "LT" ならば j = j - i;
BNE loop ; もし "NE" ならば loop に戻る
通常分岐命令を使用しなければならないthenやelse節のところで分岐が省かれていることが分かる。
命令セットのもう一つのユニークな機能が、シフト演算を「データ処理」(算術演算、論理演算、レジスタ間の代入)命令の中に織り込むことができることである。例えば、C言語の
a += (j << 2);
のような文を1つのARM命令
ADD Ra, Ra, Rj, LSL #2
として表すことができる。(((ペンティアムなどでも1個の命令でできる、LEA EAX,[EAX+EBX*4])))
これにより、多くのARMプログラムは通常RISCプロセッサに期待されるようなプログラムよりも密度の高いものになる。このため、命令フェッチに伴うメモリへのアクセス頻度が少なくなり、分岐に伴うストールも回避しやすく、パイプライン処理を効率的に使うことができる。このことが、ARMがARMより複雑なCPUデザインと競合することを可能にした特徴的な一因のひとつである。
Thumb
ARMプロセッサはThumbと呼ばれるコード効率の向上を意図した16ビットの命令モードを持っている(SuperHの命令16bit/データ32bitに倣い追加された)。条件実行のための4bitプレディケートが削除されている。メモリポートやバスが32ビットよりも狭い状況において32ビットコードよりも性能が向上する。多くの場合、組み込みアプリケーションでは32ビットのデータパスを持っているのは一部のアドレス範囲のみであり(例: ゲームボーイアドバンス)、残りは16ビットかそれよりも狭くなっている。このような状況では、Thumbコードをコンパイルし、CPUに最も負荷のかかる部分だけを32ビットの命令セットを使用して手作業で最適化するのが、通常は理にかなっている。Thumb命令とARM命令は単一の実行ファイル内で混在が可能であるが、Thumb命令を実行できるモードとARM命令を実行できるモードは独立しており、両者を使うにはその都度プロセッサの状態を切り替える必要がある。状態の切り替えは分岐命令 (BX, BLX) で行うことができるため、通常は関数単位でThumb命令とARM命令を使い分け、関数呼び出しの際に切り替えを行うのが一般的である。
Thumbテクノロジを搭載した最初のプロセッサはARM7TDMIである。ARM9とそれ以降のファミリは、XScaleも含めて全てThumbテクノロジを搭載している。
Thumb-2
Thumb-2テクノロジは2003年に発表されたARM1156コアで登場した。Thumb-2はThumbの制限された16ビットの命令セットを追加の32ビット命令で拡張し、命令セットの幅を広げるものである。公称されているThumb-2の目的は、Thumbと同様のコード密度と32ビットメモリ上でのARM命令セットと同様の性能を得ることであり、Thumb-2はビットフィールド操作、テーブル分岐や条件付き実行などを含んでいる。
Jazelle
ARMは、Javaバイトコードをハードウェアでネイティブに実行できる技術を実装した。これはARMやThumbモードと並ぶもう一つの実行モードであり、ARM/Thumbの切り替えと同様にしてアクセスすることができる。後述のJazelle RCTに対してJazelle DBX (Direct Bytecode eXecution)とも言う。
Jazelleテクノロジを搭載した最初のプロセッサはARM926EJ-Sである。CPU名の'J'がJazelleを表している。
Thumb Execution Environment (ThumbEE)
ThumbEEはJazelle RCT (Runtime Compilation Target)とも呼ばれる第4のモードである。2005年にアナウンスされ、Cortex-A8プロセッサで最初に実装された。Thumb-2命令セットに小規模な変更を加えたもので、JITコンパイラのように実行時にコードを生成する場合に向いている。主な対象はJava、.NET MSIL (C#など)、Python、Perlなどの言語である。
DSP 拡張命令
デジタル信号処理とマルチメディアアプリケーション向けに ARMアーキテクチャを拡張するため、いくつかの命令が追加された[4]。ARMv5TE と ARMv5TEJ というアーキテクチャ名の "E" がこれを表していると思われる。
追加された命令は、デジタルシグナルプロセッサアーキテクチャで一般的なものである。例えば、符号付積和演算、飽和加算と飽和減算、「先行する0のカウント」のバリエーションである。
SIMD
ARMv6で導入された[21]。32ビット幅。
Advanced SIMD (NEON)
Advanced SIMD拡張はNEONとも呼ばれ、メディアおよびデジタル信号の処理に向いた64ビットと128ビットのSIMD命令セットである。8/16/32/64ビットの整数演算と、32ビット (単精度) 浮動小数点演算のためのSIMD命令が定義されており、ARMv7から利用可能。32ビットCPUでは倍精度浮動小数点数は利用不可で、倍精度にはVFPを使用。
ほとんどの ARMv7 SoC で NEON に対応しているが、NVIDIA Tegra 2 シリーズ、SPEAr1310、SPEAr1340 などで対応していない。
レジスタはVFPレジスタとして用意されている32本の64ビットレジスタを用いて、32本の64ビットSIMDレジスタ (D0-D31) 、もしくは16本の128ビットSIMDレジスタ (Q0-Q15) としてアクセスできる。例えば128ビットレジスタQ0はD0とD1の2つの64ビットレジスタの領域にマッピングされている。
Cortex-A15 などより、NEONv2 (version 2) が搭載され、Fused Multiply-Add ができる。これにより、単精度浮動小数点数で 8 FLOPS/cycle となった。
Wireless MMX
Wireless MMX (WMMX) はIntelがXScaleプロセッサ向けに開発したSIMD命令セットである。64ビット幅のレジスタが16本用意されており、8/16/32/64ビットのSIMD整数演算が可能。XScaleとその売却先であるMarvell製のARM SoCに採用されている。命令セット自体はx86プロセッサのMMXとは全く異なるものの、GCCやVisual C++等のコンパイラで利用できる組み込み関数はMMXとの互換性がある程度確保されており、これを利用すればMMX向けに記述されたコードを比較的容易に移植することができる。
VFP
VFP (Vector Floating Point)はARMアーキテクチャのコプロセッサ拡張である。半精度(v3以降)・単精度・倍精度の浮動小数点演算機能を提供する。
- VFPv1 - 廃止
- VFPv2 - ARMv5TE、ARMv5TEJ、ARMv6 で利用可能
- VFPv3 - ARMv7 で利用可能。通常はレジスタ数32個であるが、NVIDIA Tegra 2 シリーズなどはレジスタ数が半分のVFPv3-D16を採用。Cortex-A8の実装はパイプライン化されておらず非常に低速 (VFP Lite)。
- VFPv4 - Cortex-A5, A7, A15, Apple A6, Snapdragon Krait などで利用可能。IEEE754準拠の (乗算結果の丸めを行わない) Fused multiply add 対応。VFPv4-D16 もあり。
"Vector"の名を冠する通り、いくつかの命令においてはベクタモードと呼ばれる1命令で複数のレジスタに対して演算を行うモードが用意されている。このモードを使えばSIMD演算が可能であるが、プログラミングモデルがやや煩雑[22]であったことや、当時のARM11プロセッサにおける実装はスカラ命令を要素数分だけシーケンシャルに実行するというSIMD演算のメリットを享受できないものであったため、あまり積極的には使われなかった。VFPv3を実装するARMv7世代以降ではモダンなSIMD命令セットであるAdvanced SIMD拡張命令 (NEON) が導入されたため、現在ではベクタモードの利用は推奨されていない。Cortex-A9やA15ではベクタモードに対応していない[23]ことから分かるように、現在のARMアーキテクチャにおけるVFPの位置づけはスカラ専用の浮動小数点演算コプロセッサであり、SIMD演算用途についてはNEONに道を譲っている。
単精度の浮動小数点演算はNEONでも実行可能であるが、倍精度の浮動小数点演算やIEEE754準拠の4つの丸めモード、非正規化数のサポート等はNEONには存在しないため、これらを利用したい場合はVFP命令を使う必要がある。
64ビットARM
ARMv8-Aから採用。ARMの64ビットモードアーキテクチャAArch64では、汎用レジスタはすべて64ビットとなり、数も16個から31個に増やされる。サーバ用途も意識して仮想化支援命令および暗号化支援命令が追加され、SIMD拡張命令であるNEONも大幅に強化される。
命令セットの特徴
汎用レジスタの増加と64ビット化に伴い、命令セットは完全に再定義されている。コード効率を重視して命令長は32ビットのままで、32ビットARMの特徴であった条件付き実行命令の大半が削除される。これによって一般的なRISC命令セットに近くなったが、依然としてコードサイズを小さくするための工夫が随所に織り込まれている。
AArch64モードにおける命令セットはA64と呼ばれ、以下にA64命令セットの特徴を示す。
- 即値シフト付きオペランド
- これは従来の32ビットARM命令セットにおいてフレキシブル第2オペランド (Flexible second operand) と呼ばれていたものに相当する。多くの基本的な演算命令においては、入力オペランドのうち1つに対する操作を即値左シフト、即値論理右シフト、即値算術右シフト、シフトなし、の4つから選択することができ、演算命令と即値シフト命令を一体化することができる。なお、従来とは異なりローテートは不可能となった。
- 条件付き実行命令
- 汎用レジスタ数が倍増したのに伴い、基本命令の多くからは条件付き実行機能が削除されたが、それでも比較的豊富な条件付き実行命令が定義されている。代表的なものを挙げるとCCMP (条件付き比較), CINC (条件付きインクリメント), CSEL (条件付き選択; いわゆるCMOV) 等が存在する。
- Compare-and-Branch命令
- PC相対分岐においては、ゼロフラグを参照する場合のみであるが比較と条件分岐を1命令で行うことが可能になっている(CBZ/CBNZ)。これは従来Thumb-2命令セットでのみ定義されていたものであるが、A64モードでは基本命令として定義されている。
- 符号拡張/ゼロ拡張付き命令
- 算術演算/比較命令については、入力オペランドのうち1つを8,16,32ビットから32もしくは64ビットに符号/ゼロ拡張するバージョンが用意されている。
汎用レジスタは64ビット幅であるが、多くの演算命令にはレジスタの下位32ビットのみを参照する32ビット命令が用意されている。この場合、レジスタの部分書き換えが発生しないように、演算結果の32ビットの値は暗黙のゼロ拡張が行われた上で64ビットレジスタに格納される。
SIMD and Floating-point (NEON) 命令
A64命令セットにおいては従来のVFPとAdvanced SIMD (NEON)は統合され、一つの命令体系となった。これに伴い、名称については単にSIMD and Floating-point命令と呼ばれるようになった。
主な変更点は倍精度浮動小数点演算への対応、IEEE754への準拠、レジスタ本数の増加の3点である。レジスタについては128ビットのレジスタが32本に増加している。依然として64ビットレジスタとしてアクセスすることも可能であるが、32ビットモードとは異なり、64ビットレジスタは128ビットレジスタの下位64ビットにマッピングされている。
VFPとAdvanced SIMDの統合に伴い、従来はVFPが担っていたスカラの浮動小数点演算命令は、SIMDレジスタのうち下位の32/64ビットにのみ作用する命令として再定義されている。例えば浮動小数点加算命令については
fadd s2, s1, s0 ; s2 <= s0 + s1 (単精度スカラ)
fadd d2, d1, d0 ; d2 <= d0 + d1 (倍精度スカラ)
fadd v2.4s, v1.4s, v0.4s ; [v2] <= [v0] + [v1] (単精度x4 SIMD)
fadd v2.2d, v1.2d, v0.2d ; [v2] <= [v0] + [v1] (倍精度x2 SIMD)
のようなバリエーションが命令のニーモニックを保ちつつ、オペランドのプレフィックス(s,d,v)とサフィックスを変更することによって記述可能になっている (サフィックスについては、一部の環境向けのアセンブラではニーモニック側に付加する省略記法も許されるようである)。これはx86プロセッサのSSE命令セットがスカラ命令とSIMD命令の双方を備えているのとよく似ている。
脚注
関連項目
外部リンク
テンプレート:Processor architectures
テンプレート:ARM-based chips- ↑ 条件実行、定数シフト/ローテート付きオペランド、比較的豊富なアドレッシングモードなど、命令数を削減してコード密度を向上させるための工夫が命令セットの随所に見られる (Thumb-2では可変長命令も採用している) ように、CISC的な特徴を低消費電力化に利用している。ただしマイクロプログラムは持たず過度の複雑さを避けるなど、RISCの利点も存分に活かしている。
- ↑ http://www.arm.com/miscPDFs/3823.pdf
- ↑ http://www.jp.arm.com/pressroom/08/080125.html
- ↑ http://journal.mycom.co.jp/articles/2010/09/10/cortex-a15/index.html
- ↑ http://ascii.jp/elem/000/000/645/645995/
- ↑ テンプレート:Cite web
- ↑ 2005年、ARM社のセミナー資料による。
- ↑ News:米速報:次世代マイクロアーキテクチャ「ARM11」発表
- ↑ Googleが新型「Chromebook」を発表、Samsung製で249ドル
- ↑ 【PC Watch】 Samsung、初のARM Cortex-A15プロセッサ「Exynos 5250」
- ↑ 日本TI、モバイルの概念を一変させる高性能、高機能のOMAP™5プラットフォームを発表
- ↑ 【後藤弘茂のWeekly海外ニュース】 ARMが次世代CPU「Atlas」と「Apollo」の計画を発表
- ↑ 苦難の2013年を越え、輝かしい2014年に賭けるAMD (大きな期待が寄せられているサーバー向け64ビットARMプロセッサ)
- ↑ "ARM Cortex-M1", ARM product website. Accessed April 11, 2007.
- ↑ "ARM Extends Cortex Family with First Processor Optimized for FPGA", ARM press release, March 19 2007. Accessed April 11, 2007.
- ↑ ARM Cortex-M1
- ↑ Actel: 製品とサービス: プロセッサ: ARM: Cortex-M1
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 2.14. The program status registers - Cortex-A8 Technical Reference Manual
- ↑ DSP & SIMD - ARM
- ↑ ベクトルレジスタが明示的に用意されておらず、複数のスカラレジスタに対して演算を行う。ベクタ長は固定されておらず、FPSCRという特殊なレジスタで最大8要素までのベクタ長を指定可能。また、レジスタがスカラモードのみで使えるバンクとベクタモードで使えるバンクに分けられており、レジスタの組み合わせに制約がある。
- ↑ ARMプロセッサのベクタモードへの対応はMVFR0レジスタの24-27ビット目を参照することで確認できる。