| デザイナー | |
|---|---|
| ビット | 32ビット、64ビット |
| 紹介された | 1985年 (1985年) |
| デザイン | RISC |
| タイプ | ロードストア |
| 分岐 | 条件コード、比較、分岐 |
| 開ける | いいえ、専有情報です |
| 紹介された | 2011年 (2011年) |
|---|---|
| バージョン | ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6-A、ARMv8.7-A、ARMv8.8-A、ARMv8.9-A、ARMv9.0-A、ARMv9.1-A、ARMv9.2-A、ARMv9.3-A、ARMv9.4-A、ARMv9.5-A、ARMv9.6-A、ARMv9.7-A |
| エンコーディング | AArch64 /A64 とAArch32 /A32 は 32 ビット命令を使用し、AArch32/T32 (Thumb-2) は 16 ビットと 32 ビットの命令を混在させて使用します[ 1 ] |
| エンディアン | バイ(デフォルトでは小さめ) |
| 拡張機能 | SVE、SVE2、SME、SME2、AES、SM3、SM4、SHA、CRC32、RNDR、TME。必須:Thumb-2、Neon、VFPv4-D16、VFPv4。廃止:ThumbおよびJazelle |
| レジスタ | |
| 汎用 | 31 × 64ビット整数レジスタ[ 1 ] |
| 浮動小数点 | スカラー32ビットおよび64ビット浮動小数点数、SIMD浮動小数点数、または整数用の32× 128ビットレジスタ[ 1 ]、または暗号化 |
| バージョン | ARMv9-R、ARMv9-M、ARMv8-R、ARMv8-M、ARMv7-A、ARMv7-R、ARMv7E-M、ARMv7-M |
|---|---|
| エンコーディング | 32ビットだが、Thumb-2拡張機能は16ビットと32ビットの命令を混在させて使用する。 |
| エンディアン | バイ(デフォルトでは小さめ) |
| 拡張機能 | Thumb、Thumb-2、SVE、SVE2、SME、SME2、Neon、Jazelle、AES、SM3、SM4、SHA、CRC32、RNDR、DSP、Saturated、FPv4-SP、FPv5、Helium。ARMv8以降廃止:ThumbおよびJazelle |
| レジスタ | |
| 汎用 | R14(リンクレジスタ)を含む15個の32ビット整数レジスタ(ただし、R15(PC)は含まない) |
| 浮動小数点 | 最大 32 × 64 ビット レジスタ、[ 2 ] SIMD/浮動小数点 (オプション) |
| バージョン | ARMv6、ARMv5、ARMv4T、ARMv3、ARMv2 |
|---|---|
| エンコーディング | 32ビットですが、Thumb拡張機能は16ビットと32ビットの命令を混在させて使用します。 |
| エンディアン | ARMv3以降ではBi (デフォルトではlittle) |
| 拡張機能 | 親指、ジャゼル |
| レジスタ | |
| 汎用 | R14(リンクレジスタ)を含む15個の32ビット整数レジスタ(ただし、R15(PC、旧型では26ビットアドレッシング)は含まない) |
| 浮動小数点 | なし |
ARM(小文字ではarmと表記される)[ a ]は、コンピュータプロセッサ向けのRISC命令セットアーキテクチャのファミリーです。Arm Holdingsは、この命令セットアーキテクチャを開発し、他の企業にライセンス供与しています。これらの企業は、命令セットを使用する物理デバイスを製造します。また、Arm Holdingsは、これらの命令セットアーキテクチャを実装するコアの設計とライセンス供与も行っています。
ARMプロセッサは、低コスト、低消費電力、低発熱という特長から、スマートフォン、ノートパソコン、タブレット端末などの軽量で持ち運び可能なバッテリー駆動デバイスや組み込みシステムに適しています。[ 3 ] [ 4 ] [ 5 ] [ 6 ]しかし、ARMプロセッサは、 2020年から2022年まで世界最速のスーパーコンピュータであった富岳[ 7 ]を含むデスクトップやサーバーにも使用されています。少なくとも2003年以降、 2300億個以上のARMチップが生産され[ 8 ] [ 9 ]、その優位性は年々高まっています。ARMは最も広く使用されている命令セットアーキテクチャのファミリーです。[ 10 ] [ 4 ] [ 11 ] [ 12 ] [ 13 ]
ARM 設計にはいくつかの世代があります。最初の ARM1 は32 ビットの内部構造を使用していましたが、26 ビットのアドレス空間を持っていたため、メイン メモリは 64 MBに制限されていました。この制限は 32 ビットのアドレス空間を持つ ARMv3 シリーズで解消され、ARMv7 までのいくつかの世代は 32 ビットのままでした。2011 年にリリースされた ARMv8-A アーキテクチャは、新しい 32 ビット固定長命令セットにより、 64 ビットのアドレス空間と 64 ビット演算のサポートを追加しました。[ 14 ] Arm Holdings は、さまざまな役割のための追加の命令セットもリリースしています。「Thumb」拡張機能は、コード密度を向上させるために 32 ビットと 16 ビットの両方の命令を追加し、Jazelle はJava バイトコードを直接処理するための命令を追加しました。最近の変更には、パフォーマンスまたはフォールト トレランスを向上させるための同時マルチスレッド(SMT)の追加が含まれます。[ 15 ]
Acorn Computersの最初の広く成功した設計は、1981 年 12 月に発表されたBBC Microでした。これはMOS Technology 6502 CPU をベースにした比較的従来型のマシンでしたが、より高速なダイナミックランダムアクセスメモリ(DRAM)を使用したため、Apple IIなどの競合設計の約 2 倍の性能で動作しました。当時の一般的な DRAM は約 2 MHz で動作していましたが、Acorn は日立とより高速な 4 MHz 部品の供給に関する契約を結びました。[ 16 ]
当時のマシンは一般的にプロセッサとフレームバッファ間でメモリを共有しており、プロセッサは個別の入出力(I/O)を実行することなく画面の内容を迅速に更新することができました。ビデオ表示のタイミングは厳密であるため、ビデオハードウェアはそのメモリに優先的にアクセスする必要がありました。6502の設計上の癖により、CPUは時間の半分の間メモリにアクセスしませんでした。そのため、CPUを1MHzで動作させることで 、ビデオシステムはこれらのダウンタイム中にデータを読み取ることができ、 RAMの合計2MHzの帯域幅を使用できました。BBC Microでは、4MHz のRAMを使用することで同じ技術を使用できましたが、2倍の速度で動作しました。これにより、市場に出回っている同様のマシンを凌駕することができました。[ 17 ]
1981年はIBMパーソナルコンピュータが発表された年でもありました。当時発表されたばかりのIntel 8088(6502の8ビット設計に比べて16ビットCPU)を使用することで、全体的なパフォーマンスが向上しました。その登場はデスクトップコンピュータ市場を根本的に変えました。それまでの5年間で主に趣味やゲーム市場として台頭してきたものが、以前の8ビット設計では到底太刀打ちできない必須のビジネスツールへと変化し始めたのです。さらに新しい32ビット設計も市場に登場し、例えばMotorola 68000 [ 18 ]やNational Semiconductor NS32016 [ 19 ]などが挙げられます。
Acorn はこの市場でどのように競争するかを検討し始め、Acorn Business Computerという新しい設計図を紙に書き起こしました。彼らは、BBC Micro の 10 倍の性能を持ちながら、価格は同じマシンを製造することを目標にしました。[ 20 ]これにより、PC よりも優れた性能を持ちながら、価格は安くなることになりました。同時に、最近登場したApple Lisaは、グラフィカル ユーザー インターフェイス(GUI) の概念をより多くの人々に広め、将来は GUI を備えたマシンのものであると示唆しました。[ 21 ]しかし、Lisa は、サポート チップ、大容量のメモリ、ハードディスク ドライブが詰め込まれており、当時としては非常に高価だったため、9,995 ドルかかりました。[ 22 ]
エンジニアたちは、利用可能なすべての CPU 設計の研究を開始しました。既存の 16 ビット設計については、非常に高価で、依然として「少し劣悪」であり、BBC Micro 設計よりもわずかに高いパフォーマンスしか提供しないという結論に至りました。 [ 23 ]また、そのレベルで動作するためにも、ほとんどの場合、多数のサポート チップが必要となり、コンピュータ全体のコストが上昇しました。これらのシステムでは、設計目標を達成することはできませんでした。[ 23 ]彼らは新しい 32 ビット設計も検討しましたが、これらはさらに高価で、サポート チップに関する同じ問題がありました。[ 24 ] Sophie Wilsonによると、当時テストされたすべてのプロセッサは、約 4 Mbit/s の帯域幅でほぼ同じパフォーマンスでした。[ 25 ] [ b ]
2 つの重要な出来事が、Acorn を ARM への道へと導きました。1 つは、カリフォルニア大学バークレー校からの一連のレポートの発表で、シンプルなチップ設計でも、市場に出回っている最新の 32 ビット設計よりもはるかに高い極めて高いパフォーマンスを実現できることが示唆されていました。[ 26 ] 2 つ目は、スティーブ・ファーバーとソフィー・ウィルソンが、ビル・メンシュとその妹のキャスリンが経営するWestern Design Centerを訪問したことです。 [ 27 ]この会社はMOS チームの論理的な後継者となり、WDC 65C02のような新バージョンを提供していました。Acorn チームは、高校生が Apple II マシンでチップレイアウトを作成しているのを見て、誰でもできるということを知りました。[ 28 ] [ 29 ]対照的に、最新の 32 ビット CPU に取り組んでいる別の設計会社を訪問したところ、10 名以上のメンバーからなるチームがすでに設計のリビジョン H に取り組んでいるにもかかわらず、まだバグが残っていることがわかりました。[ c ]これにより、1983年後半に独自のCPU設計であるAcorn RISCマシンの開発に着手するという決定が確固たるものとなった。[ 30 ]
オリジナルのBerkeley RISC設計は、ある意味では教育用システムであり、純粋なパフォーマンスを目的に設計されたものではありませんでした。RISCの基本的なレジスタ重視とロード/ストアの概念に、ARMは6502で好評を博した設計上の工夫をいくつか追加しました。その中でも特に重要なのは、割り込みを迅速に処理できる機能であり、これにより、外部ハードウェアを追加することなく、マシンは妥当な入出力パフォーマンスを提供することができました。6502と同様のパフォーマンスで割り込みを提供するために、ARM設計では物理アドレス空間を合計64MBに制限し 、26ビットのアドレスが必要となりました。命令は4バイト(32ビット)長で、4バイト境界にアラインメントする必要があったため、命令アドレスの下位2ビットは常にゼロでした。これは、プログラムカウンタ(PC)が24ビットで十分であり、8ビットのプロセッサフラグとともに単一の32ビットレジスタに格納できることを意味しました。つまり、割り込みを受信した際に、マシン全体の状態を単一の操作で保存できるということである。一方、PCが完全な32ビット値であった場合は、PCとステータスフラグを保存するために別々の操作が必要となる。この決定により、割り込みのオーバーヘッドが半減した。[ 31 ]
もう一つの変更点、そして実際のパフォーマンスの観点から最も重要な変更点の一つは、ページモードDRAMを活用するために命令セットを変更したことでした。最近導入されたページモードでは、DRAMチップ内のほぼ同じ位置、つまり「ページ」にあるメモリへの後続のアクセスが2倍の速度で実行されました。バークレーの設計ではページモードは考慮されておらず、すべてのメモリが等しく扱われていました。ARMの設計では、ページモードを使用して1つのページに複数のレジスタを埋めたり保存したりするために使用できる、ベクトルのような特別なメモリアクセス命令「Sサイクル」が追加されました。これにより、使用可能な場合はメモリのパフォーマンスが2倍になり、特にグラフィックスのパフォーマンスにとって重要でした。[ 32 ]
Berkeley RISCの設計では、プロシージャ呼び出しで実行されるレジスタの保存と復元の回数を減らすためにレジスタウィンドウを使用していたが、ARMの設計ではこの方法は採用されなかった。
ウィルソンは命令セットを開発し、2つ目の6502プロセッサを搭載したBBC Micro上で動作するBBC BASICでプロセッサのシミュレーションを作成した。[ 33 ] [ 34 ]これにより、Acornのエンジニアたちは自分たちが正しい方向に向かっていると確信した。ウィルソンはAcornのCEOであるヘルマン・ハウザーにアプローチし、より多くのリソースを要求した。ハウザーは承認を与え、ウィルソンの命令セットアーキテクチャに基づいて実際のプロセッサを設計するための小規模なチームを編成した。[ 35 ]公式のAcorn RISC Machineプロジェクトは1983年10月に開始された。

Acornは、ROMやカスタムチップの供給元であったVLSI Technologyを「シリコンパートナー」として選んだ。Acornが設計を行い、VLSIがレイアウトと製造を担当した。ARMシリコンの最初のサンプルは、1985年4月26日に初めて受け取ってテストした際に正常に動作した。 [ 3 ] ARM1として知られるこれらのバージョンは6MHzで動作した 。[ 36 ]
ARMの最初の応用例は、BBC Microのセカンドプロセッサとしてでした。これは、サポートチップ(VIDC、IOC、MEMC)の開発を完了させるためのシミュレーションソフトウェアの開発を支援し、ARM2開発で使用されるCADソフトウェアの高速化に貢献しました。その後、ウィルソンはBBC BASICをARMアセンブリ言語で書き直しました。命令セットの設計から得られた深い知識により、コードは非常に高密度になり、ARM BBC BASICはあらゆるARMエミュレータにとって極めて優れたテストとなりました。
ARM1 CPUを搭載したARM評価システムは、BBC MicroおよびMasterマシン用のセカンドプロセッサとして供給され、1986年7月からAcorn OEM Productsブランドで開発者や研究者向けに提供されました[ 37 ] [ 38 ] 。
A500セカンドプロセッサは、ARM1ベースのBBC Microおよびマスターセカンドプロセッサであり、ARMサポートチップセット(VIDC、IOC、MEMC)を搭載し、ビデオ出力[ 39 ]を生成することができ、ホストBBC Microとはほぼ独立して動作しました。
ARM1 ボードでのシミュレーションの結果、1986 年後半に 8 MHz で動作する ARM2 設計が導入され、1987 年初頭には 10 ~ 12 MHz で動作するスピードアップ版が導入されました。[ d ]基盤となるアーキテクチャの大きな変更点は、ブース乗算器の追加でした。以前は乗算はソフトウェアで実行しなければなりませんでした。[ 41 ]さらに、新しい高速割り込み要求モード (FIQ と略される) により、レジスタ 8 ~ 14 を割り込み自体の一部として置き換えることが可能になりました。これは、FIQ 要求がレジスタを保存する必要がないことを意味し、割り込みの速度がさらに向上しました。[ 42 ]
ARM2が最初に使われたのは、Acorn A500社内開発マシン[ 43 ]と、 1987年6月6日に発売されたAcorn ArchimedesパーソナルコンピュータモデルA305、A310、A440でした。
Dhrystoneベンチマークによると、ARM2はAmigaやMacintosh SE のような一般的な7MHz 68000ベースのシステムのおよそ7倍の性能でした。16MHzで動作するIntel 80386の2倍の速度で、マルチプロセッサのVAX-11/784スーパーミニコンピュータとほぼ同じ速度でした。これを上回ったのは、 Sun SPARCとMIPS R2000 RISCベースのワークステーションだけでした。[ 44 ]さらに、このCPUは高速I/O用に設計されていたため、これらのマシンに見られる多くのサポートチップが不要でした。特に、ワークステーションによく見られる専用のダイレクトメモリアクセス(DMA)コントローラがありませんでした。グラフィックスシステムも、メモリとタイミングに関する同じ一連の基本的な仮定に基づいて簡素化されました。その結果、設計が劇的に簡素化され、高価なワークステーションと同等の性能を、当時のデスクトップと同程度の価格で提供しました。[ 44 ]
ARM2は、 32ビットのデータバス、26ビットのアドレス空間、27個の 32ビットレジスタを備えており、そのうち16個は( PCを含めて)同時にアクセス可能です。[ 45 ] ARM2のトランジスタ数はわずか30,000個で、6年前に登場したモトローラの68000モデル(約68,000個)と比べて大幅に少なくなっています。このシンプルさの多くは、68000のトランジスタの約4分の1から3分の1を占めるマイクロコードの欠如と、(当時のほとんどのCPUと同様に)キャッシュの欠如によるものです。このシンプルさにより、ARM2は消費電力が少なく、電力供給トランジスタの数が少ないため、熱パッケージングも簡素化されました。それにもかかわらず、ARM2は、当初はIntel 80286を使用して1.8 MIPS @ 10 MHzを提供していた同時代の1987年のIBM PS/2 Model 50よりも優れたパフォーマンスを提供し、その後1987年にはIntel 386 DX @ 16 MHzを搭載したPS/2 70の2 MIPSよりも優れたパフォーマンスを提供した。[ 47 ] [ 48 ]
後継機であるARM3は4KBのキャッシュを備えており、パフォーマンスがさらに向上した。[ 49 ] ARM6ではアドレスバスが32 ビットに拡張されたが、ステータスフラグ用に予約されたビットのため、26ビット互換モードではプログラムコードは依然として最初の64MBのメモリ内に収まる必要があった。[ 50 ]
1988年、三洋電機はVLSIテクノロジーとの契約に基づき、ARM2および関連チップセットの世界的な第2供給元となった。 [ 51 ]

1980年代後半、Apple ComputerとVLSI TechnologyはAcornと協力してARMコアの新しいバージョンの開発に着手した。1990年、Acornは設計チームをAdvanced RISC Machines Ltd.という新会社に分離した[ 52 ] [ 53 ] [ 54 ]。この会社は、親会社であるArm Holdings plcが1998年にロンドン証券取引所とナスダックに上場した際にARM Ltd.となった[ 55 ]。AppleとARMの新たな共同開発は最終的にARM6へと発展し、1992年初頭に初めてリリースされた。AppleはARM6ベースのARM610をApple Newton PDAのベースとして使用した。
1994 年、Acorn は ARM610 をRiscPCコンピュータのメインの中央処理装置(CPU)として使用しました。DECはARMv4 アーキテクチャのライセンスを取得し、StrongARM を製造しました。[ 56 ]この CPU は233 MHzでわずか 1 ワットしか消費しませんでした (新しいバージョンではさらに消費電力が少なくなっています)。この作業は後に訴訟の和解の一環として Intel に引き継がれ、Intel はこの機会を利用してi960ラインを StrongARM で補完しました。Intel は後にXScaleと呼ばれる独自の高性能実装を開発し、その後Marvellに売却しました。これらの変更を通じて ARM コアのトランジスタ数は基本的に同じままでした。ARM2 は 30,000 個のトランジスタを持ち、[ 57 ] ARM6 は 35,000 個にしか増えませんでした。[ 58 ]
2005年には、販売された携帯電話の約98%が少なくとも1つのARMプロセッサを使用していた。[ 59 ] 2010年には、ARMアーキテクチャに基づくチップの製造業者が、61 億個のARMベースのプロセッサを出荷したと報告しており、これはスマートフォンの95% 、デジタルテレビとセットトップボックスの35%、モバイルコンピュータの10%に相当する。2011年には、32ビットARMアーキテクチャがモバイルデバイスで最も広く使用されているアーキテクチャであり、組み込みシステムで最も人気のある32ビットアーキテクチャであった。[ 60 ] 2013年には100億個が生産され[ 61 ]、「ARMベースのチップは世界のモバイルデバイスの約60%に搭載されている」[ 62 ] 。

Arm Holdingsの主要事業はIPコアの販売であり、ライセンシーはこれらのコアを使用してマイクロコントローラ(MCU)、CPU、およびシステムオンチップを開発します。オリジナル設計メーカーは、 ARMコアを他の部品と組み合わせて完全なデバイスを製造します。このデバイスは通常、既存の半導体製造工場(ファブ)で低コストで製造でき、かつ十分な性能を発揮します。最も成功した実装例はARM7TDMIで、数億個が販売されています。Atmelは、ARM7TDMIベースの組み込みシステムの先駆的な設計センターでした。
スマートフォン、PDA、その他のモバイルデバイスで使用されているARMアーキテクチャは、ARMv5からARMv8-Aまで多岐にわたります。
2009年には、一部のメーカーがARMアーキテクチャCPUを搭載したネットブックを発売し、 Intel Atom搭載のネットブックと直接競合した。[ 63 ]
Arm Holdingsは、費用と成果物が異なる様々なライセンス条件を提供しています。Arm Holdingsは、すべてのライセンシーに対し、ARMコアの統合可能なハードウェア記述、完全なソフトウェア開発ツールセット(コンパイラ、デバッガ、ソフトウェア開発キット)、およびARM CPUを搭載した製造済みシリコンの販売権を提供します。
ARMのコア設計を統合したSoCパッケージには、Nvidia Tegraの最初の3世代、CSR plcのQuatroファミリー、ST-EricssonのNovaとNovaThor、Silicon LabsのPrecision32 MCU、Texas InstrumentsのOMAP製品、SamsungのHummingbirdとExynos製品、AppleのA4、A5、A5X、NXPのi.MXなどがあります。
ARM コアを自社のチップ設計に統合したいファブレスライセンシーは、通常、製造準備が整った検証済みの半導体知的財産コアの取得のみに関心があります。これらの顧客向けに、Arm Holdings は、選択した ARM コアのゲート ネットリスト記述と、設計統合と検証を支援する抽象化シミュレーション モデルおよびテスト プログラムを提供します。統合デバイスメーカー (IDM) やファウンドリ オペレーターなど、より意欲的な顧客は、プロセッサ IP を合成可能なRTL ( Verilog ) 形式で取得することを選択します。合成可能な RTL を使用すると、顧客はアーキテクチャ レベルの最適化と拡張を実行できます。これにより、設計者は、変更されていないネット リストでは不可能な特殊な設計目標 (高いクロック速度、非常に低い消費電力、命令セットの拡張など) を達成できます。Arm Holdings は、ライセンシーに ARM アーキテクチャ自体を再販する権利を与えませんが、ライセンシーは、チップ デバイス、評価ボード、完全なシステムなどの製造製品を自由に販売できます。商用ファウンドリは特別なケースとなる場合があります。彼らはARMコアを含む完成品のシリコンを販売することが許可されているだけでなく、一般的に他の顧客向けにARMコアを再製造する権利も有している。
Arm Holdingsは、自社のIPを認識価値に基づいて価格設定している。一般的に、性能の低いARMコアは、性能の高いコアよりもライセンス費用が低い。実装面では、合成可能なコアは、ハードマクロ(ブラックボックス)コアよりもコストが高い。価格設定を複雑にしているのは、SamsungやFujitsuなど、ARMライセンスを保有するファウンドリが、製造工場の顧客にライセンス費用の割引を提供できる点だ。ファウンドリの社内設計サービスを通じてARMコアを入手する代わりに、顧客はARMへの初期ライセンス料の支払いを削減または免除できる。
社内設計サービスを持たない半導体専門ファウンドリ(TSMCやUMCなど)と比較すると、富士通/サムスンは製造ウェハ1枚あたり2~3倍のコストを請求します。少量から中量生産の用途では、設計サービスを提供するファウンドリの方が(ライセンス料の補助を通じて)全体的な価格が低くなります。大量生産部品の場合、ウェハ価格の低さによって長期的にコスト削減が可能になるため、ARMのNRE(非反復エンジニアリング)コストの影響が軽減され、専門ファウンドリの方がより良い選択肢となります。
Armが設計したコアを搭載したチップを開発した企業には、Amazon.comの子会社であるAnnapurna Labs [ 64 ] 、 Analog Devices、Apple、AppliedMicro(現在はMACOM Technology Solutions [ 65 ])、Atmel、Broadcom、Cavium、Cypress Semiconductor、Freescale Semiconductor(現在はNXP Semiconductors)、Huawei、Intel、Maxim Integrated、Nvidia、NXP、Qualcomm、Renesas、Samsung Electronics、ST Microelectronics、Texas Instruments、Xilinxなどがある。
2016年2月、ARMは「Built on ARM Cortex Technologyライセンス」(略称:Built on Cortex(BoC)ライセンス)を発表しました。このライセンスにより、企業はARMと提携してARM Cortexの設計に変更を加えることができます。これらの設計変更は他の企業と共有されることはありません。また、これらのセミカスタムコア設計には、例えばKryo 280のように、独自のブランド名を使用する自由度があります。
Built on ARM Cortex Technologyの現在のライセンス保有企業には、Qualcommが含まれます。[ 66 ]
企業は、ARM命令セットを使用して独自のCPUコアを設計するためのARMアーキテクチャライセンスを取得することもできます。これらのコアは、ARMアーキテクチャに完全に準拠する必要があります。ARMアーキテクチャを実装したコアを設計した企業には、Apple、AppliedMicro(現: Ampere Computing)、Broadcom、Cavium(現:Marvell)、Digital Equipment Corporation、Intel、Nvidia、Qualcomm、Samsung Electronics、Fujitsu、およびNUVIA Inc.(2021年にQualcommに買収)などがあります。
2019年7月16日、ARMはARM Flexible Accessを発表しました。ARM Flexible Accessは、開発のために含まれるARMの知的財産(IP)への無制限のアクセスを提供します。顧客がファウンドリのテープアウトまたはプロトタイプ作成に達すると、製品ごとのライセンス料が必要になります。[ 67 ] [ 68 ]
過去2年間のARMの最新IPの75%がARM Flexible Accessに含まれています。2019年10月現在:

Armは、自社の設計(特定用途向け標準製品(ASSP)、マイクロプロセッサ、マイクロコントローラ)にARMコアを実装しているベンダーのリストを提供しています。[ 112 ]

ARMコアは、特にPDAやスマートフォンなど、多くの製品で使用されています。コンピューティングの例としては、マイクロソフトの初代Surface、Surface 2、Pocket PC ( 2002年以降)、AppleのiPad、AsusのEee Pad Transformerタブレットコンピュータ、そしていくつかのChromebookノートパソコンなどが挙げられます。その他にも、AppleのiPhoneスマートフォンやiPodポータブルメディアプレーヤー、CanonのPowerShotデジタルカメラ、Nintendo Switchハイブリッド機、Wiiセキュリティプロセッサ、3DS携帯ゲーム機、TomTomのターンバイターンナビゲーションシステムなどがあります。
2005年、Armはマンチェスター大学のコンピュータSpiNNakerの開発に参加し、人間の脳をシミュレートするためにARMコアを使用した。[ 113 ]
ARMチップは、非常に小型で安価であり、消費電力も非常に少ないため、Raspberry Pi、BeagleBoard、BeagleBone、PandaBoardなどのシングルボードコンピュータにも使用されています。


32ビットARMアーキテクチャ(ARM32)、例えばARMv7-A(AArch32を実装。詳細はArmv8-Aの項を参照)は、 2011年時点でモバイルデバイスにおいて最も広く使用されているアーキテクチャであった。[ 60 ]
1995年以来、ARMアーキテクチャリファレンスマニュアル(§ 外部リンクを参照)のさまざまなバージョンが、ARMプロセッサアーキテクチャと命令セットに関する主要なドキュメントソースとなっており、すべてのARMプロセッサがサポートする必要のあるインターフェース(命令セマンティクスなど)と、異なる可能性のある実装の詳細を区別しています。アーキテクチャは時間の経過とともに進化しており、アーキテクチャのバージョン7であるARMv7では、3つのアーキテクチャ「プロファイル」が定義されています。
アーキテクチャプロファイルは当初ARMv7向けに定義されたが、その後ARMは、命令数を減らしたARMv7-Mプロファイルのサブセットとして、ARMv6-Mアーキテクチャ(Cortex M0 / M0+ / M1で使用)を定義した。
26ビットアドレッシング - 2000年6月時点で廃止。[ 114 ]
乗算および乗算加算命令、コプロセッサのサポート - すべてのバリアントは2000年6月時点で廃止されました。[ 114 ]
アトミックなロード・ストア命令。
32ビットアドレッシング[ 114 ] - すべてのバリアントは2005年7月時点で廃止されました。[ 115 ]
ハーフワードロードおよびストア命令、符号拡張バイトおよびハーフワードロード命令、26ビットアドレッシングのサポートが削除されました[ 114 ]
先頭ゼロを数える命令[ 114 ] - 2005 年 7 月現在廃止[ 115 ]
完全な ARMv5TEJ; バイト反転命令; 排他アクセスロードおよびストア命令; バイトおよびハーフワードの符号拡張およびゼロ拡張命令; SIMD メディア命令; アラインメントされていないアクセスのサポート[ 115 ]
Mプロファイルを除き、32ビットARMアーキテクチャは、実装されたアーキテクチャ機能に応じて、複数のCPUモードを規定しています。CPUは、どの時点においても1つのモードしか取ることができませんが、外部イベント(割り込み)やプログラムによってモードを切り替えることができます。[ 120 ]
当初のARM実装は、マイクロコードを使用せずハードウェアで配線されており、以前のAcornマイクロコンピュータで使用されていたはるかにシンプルな8ビット6502プロセッサと同様だった。
32ビットARMアーキテクチャ(および大部分の64ビットアーキテクチャ)には、以下のRISC機能が含まれています。
Intel 80286やMotorola 68020といったプロセッサと比較して、設計が簡素化されていることを補うために、いくつかの追加的な設計上の特徴が採用された。
ARMアーキテクチャは、加算、減算、乗算といった整数演算機能を備えており、一部のバージョンでは除算機能もサポートしています。
ARMは、32ビット×32ビットの乗算をサポートし、結果は32ビットまたは64ビットのいずれかになりますが、Cortex-M0 / M0+ / M1コアは64ビットの結果をサポートしていません。[ 125 ]一部のARMコアは、16ビット×16ビットおよび32ビット×16ビットの乗算もサポートしています。
除算命令は、以下のARMアーキテクチャにのみ含まれています。
レジスタR0からR7は、すべてのCPUモードで共通であり、バンク切り替えは行われません。
レジスタR8~R12は、FIQモードを除くすべてのCPUモードで共通です。FIQモードには、独自のR8~R12レジスタが用意されています。
R13とR14は、システムモードを除くすべての特権CPUモードで共通して使用されます。つまり、例外によって移行する各モードには、それぞれ独自のR13とR14レジスタがあります。これらのレジスタには、通常、スタックポインタと関数呼び出しからの戻りアドレスが格納されます。
別名:
現在のプログラムステータスレジスタ(CPSR)には、次の32 ビットがあります。[ 128 ]
ARMの命令のほぼすべてには、述語と呼ばれる条件付き実行機能があり、これは4ビットの条件コードセレクタ(述語)で実装されています。無条件実行を可能にするために、4ビットコードのいずれかによって命令が常に実行されます。他のほとんどのCPUアーキテクチャでは、分岐命令にのみ条件コードがあります。[ 129 ]
述語は命令コードの32ビットのうち4ビットを占有するため、メモリアクセス命令における変位に使用できるエンコードビットが大幅に削減されますが、小さなifステートメントのコードを生成する際に分岐命令を回避します。分岐命令自体を排除するだけでなく、スキップされた命令ごとに1サイクルしか消費しないコストで、フェッチ/デコード/実行パイプラインを維持できます。
条件付き実行の良い例として、最大公約数を計算するための減算に基づくユークリッドの互除法が挙げられます。C言語では、このアルゴリズムは次のように記述できます。
int gcd ( int a , int b ) { while ( a != b ) // a < b または a > b の場合にループに入りますが、a == b の場合は入りませんif ( a > b ) // a > b の場合、次の処理を実行しますa -= b ; else // a < b の場合、次の処理を実行します (while 条件で a != b がチェックされるため、if (a < b) は不要です) b -= a ; return a ; }同じアルゴリズムを、ターゲットとなるARM命令により近い形で書き直すと次のようになる。
ループ: // aとbを比較するGT = a > b ; LT = a < b ; NE = a != b ;// フラグの結果に基づいて操作を実行しますif ( GT ) a -= b ; // より大きい場合のみ減算しますif ( LT ) b -= a ; // より小さい場合のみ減算しますif ( NE ) goto loop ; // 比較した値が等しくない場合のみループしますreturn a ;そしてアセンブリ言語で以下のようにコード化されています。
; aをレジスタr0に、bをレジスタr1に代入するloop: CMP r0 , r1 ; a ≠ b の場合は条件「NE」、; a > b の場合は「GT」、; a < b の場合は「LT」を設定する SUBGT r0 , r0 , r1 ; 「GT」(より大きい)の場合、a = a − b SUBLT r1 , r1 , r0 ; 「LT」(より小さい)の場合、b = b − a BNE loop ; 「NE」(等しくない)の場合、ループB lr ; 戻るthenこれにより、 and句周辺の分岐が回避されますelse。r0と がr1等しい場合、どちらの命令も実行されないため、ループの先頭でチェックをSUB実行するための条件分岐が不要になります。たとえば、(以下) が使用されていた場合などです。whileSUBLE
Thumbコードがより高密度なエンコーディングを実現する方法の一つは、分岐命令以外の命令から4ビットセレクタを削除することである。
命令セットのもう1つの特徴は、シフトとローテーションをデータ処理(算術、論理、レジスタ間移動)命令に組み込むことができる点です。例えば、C言語の次の文は次のようになります。
a += ( j << 2 );1ワード、1サイクルの命令としてレンダリングできます: [ 130 ]
ADD Ra 、Ra 、Rj 、LSL #2この結果、典型的なARMプログラムは予想よりも高密度になり、メモリへのアクセス回数が少なくなるため、パイプラインがより効率的に利用される。
ARMプロセッサには、PC相対アドレッシング(実際、32ビット[ 1 ] ARMではPCは16個の レジスタの1つです)やプリインクリメントおよびポストインクリメントアドレッシングモードなど、他のRISCアーキテクチャではめったに見られない機能も備わっています。
ARMの命令セットは時間とともに増加してきた。例えば、初期のARMプロセッサ(ARM7TDMI以前)には、2バイトの数値を格納する命令が存在しない。
ARM7以前の実装では、フェッチ、デコード、実行の3段階パイプラインが採用されていました。ARM9などの高性能設計では、パイプラインがより深くなり、Cortex-A8では13段階になっています。さらに高性能化のために、加算器の高速化や分岐予測ロジックの拡張など、実装上の変更が加えられています。例えば、ARM7DIコアとARM7DMIコアの違いは、乗算器の改良でした。そのため、ARM7DIコアには「M」が追加されています。
ARMアーキテクチャ(Armv8以前)では、MCR、MRC、MRRC、MCRRなどの命令を使用してアドレス指定できる「コプロセッサ」を用いて、命令セットを非侵襲的に拡張する方法が提供されています。コプロセッサ空間は論理的に 0から15までの番号を持つ16個のコプロセッサに分割されており、コプロセッサ15(cp15)は、キャッシュの管理や、 MMU を搭載したプロセッサでのMMU操作など、いくつかの典型的な制御機能のために予約されています。
ARMベースのマシンでは、周辺機器は通常、物理レジスタをARMメモリ空間、コプロセッサ空間にマッピングするか、あるいはプロセッサに接続される別のデバイス(バス)に接続することによってプロセッサに接続されます。コプロセッサによるアクセスはレイテンシが低いため、XScale割り込みコントローラなどの一部の周辺機器は、メモリ経由とコプロセッサ経由の両方でアクセスできます。
場合によっては、チップ設計者はコプロセッサ機構のみを使用してハードウェアを統合する。例えば、画像処理エンジンは、特定のHDTVトランスコーディングプリミティブセットをサポートするための特殊な演算機能を備えたコプロセッサと組み合わせた小型のARM7TDMIコアで構成される可能性がある。
最新のARMプロセッサはすべてハードウェアデバッグ機能を備えており、ソフトウェアデバッガがリセットからコードの停止、ステップ実行、ブレークポイント設定などの操作を実行できます。これらの機能はJTAGサポートを使用して構築されていますが、一部の新しいコアはオプションでARM独自の2線式「SWD」プロトコルをサポートしています。ARM7TDMIコアでは、「D」はJTAGデバッグサポートを、「I」は「EmbeddedICE」デバッグモジュールの存在を表していました。ARM7およびARM9コア世代では、JTAG経由のEmbeddedICEが事実上のデバッグ標準でしたが、アーキテクチャ上保証されていたわけではありませんでした。
ARMv7アーキテクチャは、アーキテクチャレベルで基本的なデバッグ機能を定義しています。これには、ブレークポイント、ウォッチポイント、および「デバッグモード」での命令実行が含まれます。同様の機能はEmbeddedICEでも利用可能でした。「停止モード」と「モニタモード」の両方のデバッグがサポートされています。デバッグ機能にアクセスするために使用される実際のトランスポートメカニズムはアーキテクチャで規定されていませんが、実装では一般的にJTAGサポートが含まれています。
ARMには「CoreSight」という別のデバッグアーキテクチャが存在するが、これはARMv7プロセッサのアーキテクチャ上必須ではない。
デバッグ アクセス ポート (DAP) は、ARM デバッグ インターフェイスの実装です。[ 131 ]サポートされている実装には、シリアル ワイヤJTAGデバッグ ポート (SWJ-DP) とシリアル ワイヤ デバッグ ポート (SW-DP) の 2 種類があります。 [ 132 ] CMSIS-DAP は、ホスト PC 上のさまざまなデバッグ ソフトウェアが USB を介してハードウェア デバッガで実行されているファームウェアと通信する方法を記述する標準インターフェイスです。ハードウェア デバッガは、SWD または JTAG を介して CoreSight 対応 ARM Cortex CPU と通信します。[ 133 ] [ 134 ] [ 135 ]
デジタル信号処理およびマルチメディアアプリケーション向けにARMアーキテクチャを改善するために、DSP命令が命令セットに追加されました。[ 136 ]これらは、ARMv5TEおよびARMv5TEJアーキテクチャの名前の「E」で示されます。Eバリアントは、T、D、M、およびIも意味します。
これらの新しい命令は、デジタル信号プロセッサ(DSP)アーキテクチャで一般的に用いられています。これには、符号付き乗算累積、飽和加算および減算、先頭ゼロカウントなどのバリエーションが含まれます。
1999 年に初めて導入されたこのコア命令セットの拡張は、ARM の以前の DSP コプロセッサである Piccolo とは対照的でした。Piccolo は、実行時に別のプログラム カウンタを必要とする、互換性のない独自の命令セットを使用していました。[ 137 ] Piccolo 命令は、16 個の 32 ビット レジスタからなる独自のレジスタ ファイルを使用し、一部の命令はレジスタを組み合わせて 48 ビット アキュムレータとして使用し、他の命令は 16 ビット ハーフ レジスタをアドレス指定していました。一部の命令は、このような 2 つの 16 ビット値を並列に操作することができました。Piccolo レジスタ ファイルとの通信は、 8 つの 32 ビット エントリの 2 つのバッファを介してPiccolo へのロードおよびPiccoloコプロセッサからのストア命令によって行われました。日立の SH-DSP や Motorola の 68356 など、他のアプローチを彷彿とさせると説明されている Piccolo は、専用のローカル メモリを使用せず、DSP オペランドの取得に ARM コアの帯域幅に依存していたため、同時実行性能に影響がありました。[ 138 ] Piccoloの独特な命令セットも「優れたコンパイラターゲット」ではないことが判明した。[ 137 ]
ARMv6アーキテクチャで導入されたこの技術は、Advanced SIMD( Neonとも呼ばれる)の前身となった。[ 139 ]
Jazelle DBX(Direct Bytecode eXecution)は、既存のARMおよびThumbモードに加えて、3番目の実行状態(および命令セット)として、 JavaバイトコードをARMアーキテクチャで直接実行できるようにする技術です。この状態のサポートは、ARMv5TEJアーキテクチャ、およびARM9EJ-SとARM7EJ-Sコア名の「J」で示されます。この状態のサポートはARMv6以降(ARMv7-Mプロファイルを除く)で必須となっていますが、新しいコアにはハードウェアアクセラレーションを提供しない単純な実装しか含まれていません。
コンパイル済みコードの密度を向上させるため、ARM7TDMI(1994年にリリース[ 140 ])以降のプロセッサは、独自の状態を持つThumb圧縮命令セットを搭載しています。(「TDMI」の「T」はThumb機能を示しています。)この状態になると、プロセッサはARM命令セットのサブセットをコンパクトな16ビットでエンコードしたThumb命令セットを実行します。[ 141 ] Thumb命令のほとんどは、通常のARM命令に直接マッピングされます。スペースの節約は、命令オペランドの一部を暗黙的にし、ARM命令セット状態で実行されるARM命令と比較して可能性の数を制限することによって実現されます。
Thumbでは、16ビットオペコードの機能は制限されています。例えば、分岐のみが条件付きで実行でき、多くのオペコードはCPUの汎用レジスタの半分しかアクセスできません。オペコードが短いことで、一部の操作には追加の命令が必要になりますが、コード密度は全体的に向上します。メモリポートやバス幅が32 ビット未満に制限されている場合、Thumbの短いオペコードは、32ビットARMコードと比較してパフォーマンスが向上します。これは、制限されたメモリ帯域幅でプロセッサにロードする必要のあるプログラムコードが少なくなるためです。
Cray-1やHitachi SuperHのような可変長(16ビットまたは32ビット)命令を持つプロセッサアーキテクチャとは異なり、ARMとThumbの命令セットは互いに独立して存在します。Game Boy Advanceなどの組み込みハードウェアでは、通常、32ビットのデータパスでアクセスできるRAMは少量で、大部分は16ビット以下のセカンダリデータパスを介してアクセスされます。このような状況では、通常、Thumbコードをコンパイルし、CPU負荷の高いセクションの一部を32ビットのARM命令で手動で最適化し、これらのより広い命令を32ビットバスでアクセス可能なメモリに配置するのが合理的です。
Thumb命令デコーダを搭載した最初のプロセッサはARM7TDMIでした。ARM9以降、XScaleを含む32ビット命令セットをサポートするすべてのプロセッサには、Thumb命令デコーダが搭載されています。これには、ARMがライセンス供与を受けたHitachi SuperH(1992)から採用された命令が含まれています。[ 142 ] ARMの最小プロセッサファミリ(Cortex M0およびM1)は、最低コストのアプリケーションで最大のパフォーマンスを実現するために、16ビットThumb命令セットのみを実装しています。32ビットアドレッシングをサポートしないARMプロセッサもThumbを省略しています。
Thumb-2テクノロジーは、2003年に発表されたARM1156 コアで導入されました。Thumb-2は、Thumbの限られた16ビット命令セットに32ビット命令を追加することで、命令セットの幅を広げ、可変長命令セットを実現しました。Thumb-2の目標は、32ビットメモリ上でARM命令セットと同等のパフォーマンスを維持しながら、Thumbと同等のコード密度を達成することでした。
Thumb-2 は、ビットフィールド操作、テーブル分岐、条件付き実行によって Thumb 命令セットを拡張します。同時に、ARM 命令セットも拡張され、両方の命令セットで同等の機能を維持します。新しい「統合アセンブリ言語」(UAL)は、同じソースコードから Thumb 命令または ARM 命令のいずれかを生成することをサポートします。ARMv7 プロセッサで見られる Thumb のバージョンは、基本的に ARM コードと同等の機能を備えています (割り込みハンドラを記述する機能を含む)。これには少し注意が必要で、新しい「IT」(if-then)命令を使用します。この命令は、テストされた条件またはその逆に基づいて、最大 4 つの連続した命令を実行できます。ARM コードにコンパイルする場合は無視されますが、Thumb にコンパイルする場合は実際の命令が生成されます。例:
; if (r0 == r1) CMP r0 , r1 ITE EQ ; ARM: コードなし ... Thumb: IT 命令; then r0 = r2; MOVEQ r0 , r2 ; ARM: 条件付き; Thumb: ITE 'T' (then) による条件; else r0 = r3; MOVNE r0 , r3 ; ARM: 条件付き; Thumb: ITE 'E' (else) による条件; Thumb の MOV 命令には「EQ」または「NE」をエンコードするビットがないことに注意してください。すべての ARMv7 チップは Thumb 命令セットをサポートしています。ARMv7 をサポートする Cortex-A シリーズのすべてのチップ、すべての Cortex-R シリーズ、およびすべての ARM11 シリーズは「ARM 命令セット状態」と「Thumb 命令セット状態」の両方をサポートしていますが、Cortex-Mシリーズのチップは Thumb 命令セットのみをサポートしています。[ 143 ] [ 144 ] [ 145 ]
ThumbEE(一部のARMドキュメントでは誤ってThumb-2EEと呼ばれている)は、Jazelle RCT [ 146 ](ランタイムコンパイルターゲット)として販売され、2005年に発表され、2011年に非推奨となった。最初に登場したのはCortex-A8プロセッサである。ThumbEEは、Thumb-2拡張命令セットに小さな変更を加えた4番目の命令セット状態である。これらの変更により、命令セットは、マネージド実行環境で実行時に生成されるコード( JITコンパイルなど)に特に適している。ThumbEEは、 Java、C#、Perl、Pythonなどの言語のターゲットであり、JITコンパイラがパフォーマンスを低下させることなく、より小さなコンパイル済みコードを出力できるようにする。
ThumbEE が提供する新機能には、すべてのロードおよびストア命令に対する自動ヌルポインタチェック、配列境界チェックを実行する命令、およびハンドラを呼び出す特別な命令が含まれます。さらに、Thumb-2 テクノロジーを使用しているため、ThumbEE はレジスタ r8〜r15 (Jazelle/DBX Java VM の状態が保持される場所) へのアクセスを提供します。[ 147 ]ハンドラは、頻繁に呼び出されるコードの小さなセクションであり、新しいオブジェクトのメモリ割り当てなど、高レベル言語を実装するためによく使用されます。これらの変更は、少数のオペコードを再利用し、コアが新しい ThumbEE 状態にあることを認識することによって実現されます。
2011年11月23日、ArmはThumbEE命令セットの使用を非推奨とし、[ 148 ] Armv8はThumbEEのサポートを削除しました。
VFP (Vector Floating Point) テクノロジーは、ARM アーキテクチャ[ 149 ]の浮動小数点ユニット(FPU) コプロセッサ拡張機能です(Armv8 では実装が異なり、コプロセッサは定義されていません)。これは、ANSI/IEEE Std 754-1985 バイナリ浮動小数点演算規格に完全に準拠した、低コストの単精度および倍精度浮動小数点演算を提供します。VFP は、PDA、スマートフォン、音声圧縮および解凍、3 次元グラフィックスおよびデジタルオーディオ、プリンタ、セットトップボックス、車載アプリケーションなど、幅広いアプリケーションに適した浮動小数点演算を提供します。VFP アーキテクチャは、短い「ベクトルモード」命令の実行をサポートすることを意図していましたが、これらの命令は各ベクトル要素に対して順次動作するため、真の単一命令複数データ(SIMD) ベクトル並列処理のパフォーマンスは提供されませんでした。そのため、このベクトルモードは導入後まもなく削除され、[ 150 ]はるかに強力なアドバンストSIMD(Neonとも呼ばれる)に置き換えられた。
ARM Cortex-A8 などの一部のデバイスは、完全な VFP モジュールの代わりにカットダウンされたVFPLiteモジュールを備えており、浮動小数点演算ごとに約 10 倍のクロック サイクルを必要とします。 [ 151 ]以前の Armv8 アーキテクチャでは、コプロセッサ インターフェイスを使用して浮動小数点 / SIMD が実装されていました。コプロセッサ インターフェイスを使用する ARM ベースのプロセッサで見られるその他の浮動小数点および / SIMD ユニットには、 FPA、FPE、iwMMXtなどがあり、その一部はトラップによってソフトウェアで実装されていましたが、ハードウェアで実装することもできました。これらは VFP と同じ機能の一部を提供しますが、オペ コード互換性はありません。FPA10 は拡張精度も提供しますが、正しい丸め (IEEE 754 で要求される ) は単精度でのみ実装されています。[ 152 ]
Debian LinuxやUbuntuやLinux Mintなどの派生ディストリビューションでは、armhf ( ARM hard float ) は、上記の VFP3-D16 浮動小数点ハードウェア拡張 (および Thumb-2) を含む ARMv7 アーキテクチャを指します。ソフトウェア パッケージやクロス コンパイラ ツールは、armhf と arm/armel の接尾辞を使用して区別します。[ 154 ]
Advanced SIMD拡張機能 ( Neonまたは「MPE」メディア処理エンジンとも呼ばれる) は、メディアおよび信号処理アプリケーションに標準化されたアクセラレーションを提供する、 64 ビットおよび128 ビットのSIMD 命令セットを組み合わせたものです。Neon はすべての Cortex-A8 デバイスに含まれていますが、Cortex-A9 デバイスではオプションです。 [ 155 ] Neon は、10 MHz で動作する CPU で MP3 オーディオ デコードを実行でき 、 13 MHz でGSM適応型マルチレート(AMR) 音声コーデックを実行できます 。包括的な命令セット、個別のレジスタ ファイル、および独立した実行ハードウェアを備えています。[ 156 ] Neon は、8、16、32、および 64 ビットの整数および単精度 (32 ビット) 浮動小数点データと、オーディオおよびビデオ処理、グラフィックスおよびゲーム処理を処理するための SIMD 演算をサポートしています。Neon では、SIMD は 同時に最大 16 個の演算をサポートします。 Neon ハードウェアは、VFP で使用されている浮動小数点レジスタと同じものを使用しています。ARM Cortex-A8 や Cortex-A9 などのデバイスは 128 ビットのベクトルをサポートしていますが、 一度に 64 ビットずつ実行します[ 151 ] 。一方、Cortex-A15 などのより強力な CPU は、一度に128 ビットを実行できます。 [ 157 ] [ 158 ]
Armv7 デバイスにおける Neon の癖は、すべてのサブノーマル数をゼロにフラッシュすることであり、その結果、非ノーマル数の損失を許可する がオンになっていない限り、 GCCコンパイラはそれを使用しません-funsafe-math-optimizations。Armv8 以降に定義された「拡張」 Neon にはこの癖はありませんが、GCC 8.2の時点では、Neon 命令を有効にするには依然として同じフラグが必要です。[ 159 ]一方、GCC は、Armv8 の AArch64 上で Neon が安全であると考えています。
ProjectNe10はARM初のオープンソースプロジェクトです(当初から。ARMは以前からMbed TLSという名称のプロジェクトを買収していました)。Ne10ライブラリは、NeonとCの両方で記述された、一般的で便利な関数のセットです(互換性のため)。このライブラリは、開発者がNeonを学習することなくNeonの最適化を使用できるようにするために作成されましたが、一般的なDSP、算術、画像処理ルーチン用の高度に最適化されたNeon組み込み関数とアセンブリコードの例のセットとしても機能します。ソースコードはGitHubで入手できます。[ 160 ]
HeliumはMプロファイルベクトル拡張(MVE)です。150以上のスカラー命令とベクトル命令を追加します。[ 161 ]
TrustZone Technology として販売されているセキュリティ拡張機能は、ARMv6KZ 以降のアプリケーション プロファイル アーキテクチャに搭載されています。ハードウェア ベースのアクセス制御によってサポートされる 2 つの仮想プロセッサを提供することで、SoC に別の専用セキュリティ コアを追加するよりも低コストな代替手段を提供します。これにより、アプリケーション コアは、ワールド(機能ドメインの他の名前との混同を避けるため) と呼ばれる 2 つの状態を切り替えることができ、より信頼できるワールド (セキュア ワールド) から信頼度の低いワールド (ノーマル ワールド) への情報漏洩を防ぎます。[ 162 ]このワールド切り替えは、一般的にプロセッサの他のすべての機能とは直交しているため、各ワールドは同じコアを使用しながら互いに独立して動作できます。メモリと周辺機器は、コアの動作ワールドを認識し、これを使用してデバイス上の秘密情報やコードへのアクセス制御を提供できます。[ 163 ]
通常、信頼性の低い世界では高度なオペレーティングシステムが実行され、信頼性の高い世界ではセキュリティに特化した小規模なコードが実行され、攻撃対象領域を縮小することを目指します。典型的なアプリケーションには、ARM ベースのデバイスでのメディアの使用を制御するためのDRM機能[ 164 ]や、デバイスの不正使用を防止する機能などがあります。
実際には、独自のTrustZone実装の具体的な実装詳細は公開されておらず、特定の脅威モデルに対してどの程度の保証が提供されるかは不明ですが、攻撃に対して無敵ではありません。[ 165 ] [ 166 ]
Open Virtualization [ 167 ]は、TrustZone の信頼できる世界アーキテクチャのオープンソース実装です。
AMDはTrustZoneテクノロジーのライセンスを取得し、セキュアプロセッサテクノロジーに組み込んでいます。[ 168 ] AMDのAPUには、セキュア処理を処理するためのCortex-A5プロセッサが含まれていますが、これは一部の製品で有効になっていますが、すべての製品で有効になっているわけではありません。[ 169 ] [ 170 ] [ 171 ]実際、Cortex-A5 TrustZoneコアは以前のAMD製品に含まれていましたが、時間的な制約のために有効になっていませんでした。[ 170 ]
Samsung Knox は、カーネルの変更の検出、証明書の保存、鍵の証明などの目的で TrustZone を使用します。[ 172 ]
Armv8-M アーキテクチャでは、TrustZone for Armv8-M Technology という名称で販売されているセキュリティ拡張機能が導入されました。これは、TrustZone for Armv8-A と同様の概念を含んでいますが、例外ではなく分岐命令を使用してワールド切り替えを行うため、アーキテクチャ設計が異なります。[ 173 ]また、現在のセキュリティ状態に関係なく、どちらのワールドからも安全なインターリーブ割り込み処理をサポートしています。これらの機能により、セキュアワールドへの低遅延呼び出しと応答性の高い割り込み処理が実現します。ARM は、Trusted Firmware for M およびPSA Certifiedという形で、セキュアワールドコードのリファレンススタックを提供しています。
ARMv6以降、ARMアーキテクチャは実行禁止ページ保護をサポートしており、これはeXecute Never(決して実行しない)の略でXNと呼ばれています。[ 174 ]
物理アドレスのサイズを32ビットから40ビットに拡張する大規模物理アドレス拡張(LPAE)は、2011年にArmv7-Aアーキテクチャに追加されました。[ 175 ]
64ビット(Armv8-A)アーキテクチャに基づくプロセッサでは、物理アドレスサイズがさらに大きくなる可能性があります。たとえば、Cortex-A75およびCortex-A65AEでは44ビットです。[ 176 ]
Armv8-Aアーキテクチャの後に発表されたArmv8 -RおよびArmv8-Mアーキテクチャは、Armv8-Aといくつかの機能を共有しています。しかし、Armv8-Mには64ビットAArch64命令は含まれておらず、Armv8-Rも当初はAArch64命令を含んでいませんでした。これらの命令は後にArmv8-Rに追加されました。
2019年2月に発表されたArmv8.1-Mアーキテクチャは、Armv8-Mアーキテクチャの改良版です。以下のような新機能が追加されています。

2011 年 10 月に発表された[ 14 ] Armv8-A (Armv8-R も利用可能だが、ARMv8 と呼ばれることが多い) は、ARM アーキテクチャの根本的な変更を表しています。 2 つの実行状態をサポートしています。 64 ビット状態はAArch64と呼ばれ、32 ビット状態はAArch32と呼ばれます。 AArch64 状態では、新しい 64 ビットA64命令セットがサポートされます。 AArch32 状態では、2 つの命令セットがサポートされます。 元の 32 ビット命令セット ( A32と呼ばれています)と 32 ビット Thumb-2 命令セット ( T32と呼ばれています) です。 AArch32 は、Armv7-A とのユーザー空間互換性を提供します。 プロセッサの状態は、例外レベルの変更によって変更できます。これにより、カーネルが AArch64 ステートで実行される 64 ビット OS の下で 32 ビット アプリケーションを AArch32 ステートで実行できるようになり、また、AArch64 ステートで実行される 64 ビットハイパーバイザの制御下で 32 ビット OS を AArch32 ステートで実行できるようになります。[ 1 ] ARM は 2012 年 10 月 30 日に Cortex-A53 および Cortex-A57 コアを発表しました。[ 80 ] Apple は、コンシューマー製品 ( iPhone 5SのApple A7 ) で Armv8-A 互換コアを最初にリリースしました。AppliedMicroはFPGAを使用して、Armv8-A を最初にデモしました。[ 177 ] Samsungの最初の Armv8-A SoCは、 Galaxy Note 4で使用されている Exynos 5433 で、 big.LITTLE構成で 4 つの Cortex-A57 および Cortex-A53 コアの 2 つのクラスタを備えています。しかし、AArch32モードでのみ動作します。[ 178 ]
Armv8-A は、AArch32 と AArch64 の両方に対して、VFPv3/v4 と高度な SIMD (Neon) を標準としています。また、AES、SHA-1 / SHA-256、有限体演算をサポートする暗号化命令も追加されています。[ 179 ] AArch64 は Armv8-A とその後の改訂版で導入されました。AArch64 は 32 ビットの Armv8-R および Armv8-M アーキテクチャには含まれていません。
ARMv8-A プロセッサは、AArch32 と AArch64 のいずれか一方または両方をサポートできます。低い例外レベルでは AArch32 と AArch64 の両方をサポートし、高い例外レベルでは AArch64 のみをサポートする場合があります。[ 180 ]例えば、ARM Cortex-A32 は AArch32 のみをサポートし、[ 181 ] ARM Cortex-A34はAArch64 のみをサポートし、[ 182 ] ARM Cortex-A72はAArch64 と AArch32 の両方をサポートします。[ 183 ] ARMv9-A プロセッサは、すべての例外レベルで AArch64 をサポートし、EL0 では AArch32 をサポートする場合があります。[ 180 ]
オプションのAArch64サポートがArmv8-Rプロファイルに追加され、それを実装した最初のARMコアはCortex-R82でした。[ 184 ] A64命令セットが追加されます。
2021年3月に発表されたこの更新されたアーキテクチャは、安全な実行とコンパートメント化に重点を置いています。[ 185 ] [ 186 ]最初のARMv9-Aプロセッサは、Cortex-A510、Cortex-A710、Cortex-X2を含め、その年の後半にリリースされました。[ 187 ] [ 188 ]
Arm SystemReady は、データセンターのサーバーから産業用エッジデバイスや IoT デバイスまで、Arm ベースのハードウェア上でのオペレーティングシステムの相互運用性を確保するのに役立つコンプライアンス プログラムです。このプログラムの主要な構成要素は、オペレーティングシステムとハイパーバイザが依存できる最小限のハードウェアおよびファームウェア要件の仕様です。これらの仕様は次のとおりです。[ 189 ]
これらの仕様は、 Armとそのパートナー企業がシステムアーキテクチャ諮問委員会(SystemArchAC)において共同開発したものです。
アーキテクチャコンプライアンススイート(ACS)は、これらの仕様への準拠を確認するのに役立つテストツールです。Arm SystemReady要件仕様書は、認証の要件を文書化しています。[ 194 ]
このプログラムは、Armが2020年に開催された第1回DevSummitイベントで発表しました。その前身であるArm ServerReadyは、2018年のArm TechConイベントで発表されました。このプログラムは現在、以下の2つのバンドで構成されています。
PSA Certified(旧称:Platform Security Architecture)は、アーキテクチャに依存しないセキュリティフレームワークおよび評価スキームです。システムオンチップ(SoC)プロセッサ上に構築されたモノのインターネット(IoT)デバイスのセキュリティ強化を目的としています。 [ 197 ]これは、完全な信頼できる実行環境が大きすぎたり複雑すぎたりする場合にセキュリティを強化するために導入されました。 [ 198 ]
このアーキテクチャは、Armが2017 年に年次TechConイベントで発表しました。[ 198 ] [ 199 ]このスキームはアーキテクチャに依存しませんが、最初に実装されたのはマイクロコントローラでの使用を目的とした Arm Cortex-M プロセッサ コアです。PSA Certified には、一般的な IoT 製品のセキュリティ機能を決定するプロセスを示す、無料で利用できる脅威モデルとセキュリティ分析が含まれています。[ 200 ]また、無料でダウンロードできるアプリケーション プログラミング インターフェイス (API) パッケージ、アーキテクチャ仕様、オープンソースのファームウェア実装、および関連するテスト スイートも提供しています。[ 201 ]
2017年にアーキテクチャセキュリティフレームワークが開発された後、2年後の2019年にEmbedded WorldでPSA Certified保証スキームが開始されました。 [ 202 ] PSA Certifiedは、チップベンダー、OSプロバイダー、IoTデバイスメーカー向けのマルチレベルセキュリティ評価スキームを提供します。[ 203 ] Embedded Worldのプレゼンテーションでは、チップベンダーにレベル1認証が紹介されました。レベル2保護のドラフトも同時に発表されました。[ 204 ]レベル2認証は、2020年2月に使用可能な標準となりました。[ 205 ]
この認証は、多様なIoT製品に対して設計段階からのセキュリティアプローチを可能にするために、PSA共同ステークホルダーによって作成されました。PSA認定仕様は実装やアーキテクチャに依存しないため、あらゆるチップ、ソフトウェア、デバイスに適用できます。[ 206 ] [ 204 ]また、この認証はIoT製品メーカーや開発者にとって業界の断片化を解消します。 [ 207 ]
初の32ビットARMベースパーソナルコンピュータであるAcorn Archimedesは、当初ARXと呼ばれる野心的なオペレーティングシステムを実行することを目的としていました。このマシンにはRISC OSが搭載されており、これは後にAcornや他のベンダーのARMベースシステムでも使用されました。初期のAcornマシンの中には、 RISC iXと呼ばれるUnix移植版を実行できるものもありました。(どちらも、MIPSアーキテクチャ向けに開発が終了しているUnixの派生版であるRISC/osとは混同しないでください。)
32ビットARMアーキテクチャは、以下を含む多数の組み込みおよびリアルタイムオペレーティングシステムによってサポートされています。
2026年7月現在、32ビットARMアーキテクチャは、モバイルデバイス向けオペレーティングシステムの二次的なハードウェア環境となっています。Apple iOSは32ビットハードウェアのサポートを完全に終了しましたが、下記に挙げるオペレーティングシステムは引き続き32ビットハードウェアをサポートしています。
以前は販売されていたが、現在は販売終了:
32ビットARMアーキテクチャは、RISC OSおよび複数のUnix系オペレーティングシステムでサポートされています。
WineプロジェクトのWinelibとリンクされ、ARM用に再コンパイルされたWindowsアプリケーションは、Linux、FreeBSD、またはその他の互換性のあるオペレーティングシステムの32ビットまたは64ビットARM上で実行できます。[ 238 ] [ 239 ]例えば、ARM用に特別にコンパイルされていないx86バイナリは、 Wine(Linuxなど)を使用したQEMUでARM上で動作することが実証されていますが、Winelibを使用した場合と同じ速度や機能では動作しません。
累計1000億個のチップが展開され、その半分は過去4年間に出荷された。[…] なぜ1兆個以上ではないのか?それが私たちの目標であり、今後20年間で1兆個の接続デバイスが展開されることを目指している。
{{cite web}}: CS1 maint: url-status (リンク){{cite web}}: CS1 maint: url-status (リンク){{cite press release}}: CS1 maint: url-status (リンク)イギリスのケンブリッジにあるAcorn Computerの支社として、Acorn、Apple、VLSI Technologyの合弁事業として設立されました。12名の従業員からなるチームが、1983年から1985年にかけて最初のARMマイクロプロセッサの設計を行いました。
アップルは、アドバンスト・リスク・マシーンズ社(ARM)と呼ばれるこの会社に約300万ドル(約150万ポンド)を投資し、30%の株式を取得した。[...]
ビット浮動小数点を使用するARMv8 SVE(スケーラブルベクトル拡張)チップ。
各サイクルで2つのスレッドを並列実行できます。各スレッドは異なる例外レベルを持ち、異なるオペレーティングシステムを実行できます。
{{cite web}}: CS1 maint: url-status (リンク){{cite web}}: CS1 maint: url-status (リンク)754-1985 に関して、FPA は単精度演算で適合性を達成しています [...] 倍精度および拡張精度の乗算では、仮数の最下位桁で 1 または 2 単位の誤差が生じる場合があります。
。VMSAv6 [仮想メモリシステムアーキテクチャ]では、APXおよびXN(実行不可)ビットが追加されました。
この新しいバージョンのWindows 10は、Microsoft初の64ビットARMオペレーティングシステムです。ストアからx86および32ビットARMアプリケーションを実行し、いずれ64ビットARMアプリケーションも実行します。ただし、Microsoftはまだ64ビットARM SDKを完成させていません。多くの要素は揃っていますが(たとえば、64ビットARMコンパイラがあります)、同社はまだストアに提出された64ビットARMアプリケーションを受け付けておらず、64ビットARMデスクトップアプリケーションもありません。