|
|
1行目: |
1行目: |
− | {{出典の明記|date=2014年3月7日 (金) 08:26 (UTC)}} | + | {{テンプレート:20180815sk}} |
− | | |
− | {{Infobox CPU architecture
| |
− | | name = ARMアーキテクチャ
| |
− | | designer = [[ARMホールディングス]]
| |
− | | bits = [[32ビット]]、[[64ビット]]
| |
− | | introduced = [[1983年]]
| |
− | | version = ARMv8<ref>[http://www.arm.com/files/downloads/ARMv8_Architecture.pdf ARMv8 Technology Preview]</ref>
| |
− | | design = RISC
| |
− | | type = Register-Register
| |
− | | encoding = Fixed
| |
− | | branching = Condition code
| |
− | | endianness = [[:en:Endianness#Bi-endian_hardware|Bi]]
| |
− | | extensions = NEON, Thumb, [[:en:Jazelle|Jazelle]], VFP
| |
− | | open =
| |
− | | registers = 16(32ビット)、31(64ビット)
| |
− | }}
| |
− | '''ARMアーキテクチャ''' とは、[[ARMホールディングス]]の事業部門であるARM Ltdにより設計・ライセンスされている、[[組み込みシステム|組み込み機器]]や低電力アプリケーション向けに広く用いられている、[[プロセッサ]]コアの[[コンピュータ・アーキテクチャ|アーキテクチャ]]である。
| |
− | | |
− | == 概要 ==
| |
− | ARMアーキテクチャは消費電力を抑える特徴を持ち、低消費電力を目標に設計される[[携帯機器|モバイル機器]]において支配的となっている。本アーキテクチャの[[命令 (コンピュータ)|命令セット]]は「(基本的に)固定長の命令」「簡素な命令セット」という[[RISC]]風の特徴を有しつつ、「条件実行、定数シフト/ローテート付きオペランド、比較的豊富なアドレッシングモード」といった[[CISC]]風の特徴を併せ持つのが特徴的だが、これは初期のARMがパソコン向けに設計された際、当時の同程度の性能のチップとしてはかなり少ないゲート数(約25,000トランジスタ)で実装されたチップの多くの部分を常に活用する設計として工夫されたもので、回路の複雑さを増さないという方向性だというように見れば、CISC風の特徴というよりむしろRISC風の特徴とも言える。ともあれ以上のような設計が、初期の世代の実装において、(性能の割に)低消費電力、小さなコア、(RISCとしては)高いコード密度といった優れた特性に結びつき、広く普及する原動力となった。
| |
− | | |
− | なお、そもそもRISCかCISCかのどちらかに決めつけなければいけないものとするような二分法自体が、業界メディアが作り上げたものだ、とRISCの提唱者の一人[[デイビッド・パターソン (計算機科学者)|デイビッド・パターソン]]が、1998年にコンピュータ・アーキテクチャの国際シンポジウム<ref>International Symposium on Computer Architecture</ref>の予稿集に原文献が再録された際の解説 ''Retrospective: RISC I: a reduced instruction set computer''<ref>{{doi|10.1145/285930.285941}}</ref>で述べており、以上の文章における「RISC風」「CISC風」という表現には、実のところ「どちらかといえば単純っぽい」「どちらかといえば複雑っぽい」という程度の意味しかない。
| |
− | | |
− | 2005年の時点で、ARMファミリーは[[32ビット]][[組み込みシステム|組込み]][[マイクロプロセッサ]](乃至、特にマイクロコントローラ)のおよそ75%を占め<ref>http://www.arm.com/miscPDFs/3823.pdf</ref>、全世界で最も使用されている32ビットCPUアーキテクチャである{{要出典|date=2014年3月7日 (金) 08:26 (UTC)}}。ARMアーキテクチャに基づくCPUコアは、[[携帯情報端末|PDA]]・[[携帯電話]]・[[メディアプレーヤー]]・[[携帯型ゲーム]]・[[電卓]]などの携帯機器から、[[ハードディスク]]・[[ルータ]]などの[[パーソナルコンピュータ|PC]]周辺機器まで、あらゆる電子機器に使用される。2013年現在、[[日本電気|NEC]]のEMMA MobileはCortex-A9を<ref> NEC、モバイル機器でフルHD動画や5.1chサウンドを再生できるLSI「EMMA Mobile/EV」を発売へhttp://gigazine.net/news/20100208_nec_emma_mobile/ </ref>や[[日立製作所|日立]]系の[[SuperH]]系のSH Mobile GシリーズはARMを内蔵するなど、携帯電話では100%近いシェアがある{{要出典|date=2014年3月7日 (金) 08:26 (UTC)}}。
| |
− | | |
− | 携帯機器や電子機器の高性能化に伴いARMコアの出荷数は加速度的に伸びており、2008年1月の時点で100億個以上<ref>http://www.jp.arm.com/pressroom/08/080125.html</ref>、2010年9月の時点で200億個以上<ref>https://news.mynavi.jp/articles/2010/09/10/cortex-a15/index.html</ref>が出荷されている。ARMアーキテクチャを使用したプロセッサの例としては、[[テキサス・インスツルメンツ]]の[[OMAP]]シリーズや[[Marvell|マーベル・テクノロジー・グループ]]の[[XScale]]、[[NVIDIA]]の[[NVIDIA Tegra|Tegra]]、[[クアルコム]]の[[Snapdragon]]、[[フリースケール・セミコンダクタ|フリースケール]]のi.MXシリーズなどがある。
| |
− | | |
− | 既存のARMプロセッサは組み込みとクライアントシステムに特化していたため全て[[32ビット]]であるが、顧客からは電力効率に優れるARMアーキテクチャの[[サーバ]]への応用を望む声が高まり{{要出典|date=2014年3月7日 (金) 08:26 (UTC)}}、ARM社は2011年10月27日、ARMの[[64ビット]]拡張であるARMv8アーキテクチャを発表した<ref>http://ascii.jp/elem/000/000/645/645995/</ref>。
| |
− | | |
− | == 歴史 ==
| |
− | ARMの設計は、[[1983年]]に[[エイコーン・コンピュータ]](イギリス)によって開始された。当時エイコーンは[[モステクノロジー]]の[[MOS 6502]]を搭載したコンピューターを製造・販売しており、小さなハードウェア規模でシンプルな命令セットを持つ、より高速なプロセッサを開発することによって、6502を置き換えることが目的であった。
| |
− | | |
− | 開発チームは[[1985年]]までに'''ARM1'''と呼ばれる開発サンプルを完成させ、最初の製品となる'''ARM2'''は次の年に完成した。ARM2は32ビットのデータバス、26ビットの[[アドレス空間]]と16個の32ビット[[レジスタ (コンピュータ)|レジスタ]]を備えていた。レジスタの1つは、上位6ビットが状態フラグを保持するプログラムカウンタである。ARM2の[[トランジスタ]]数は30000個しかなく、おそらく世界で最もシンプルな実用32ビットマイクロプロセッサであった。これは、[[マイクロプログラム方式|マイクロコード]]を持たないこと([[モトローラ]]の[[MC68000]]の場合は1/4から1/3がマイクロコードであった)と、現在のほとんどのCPUと違って[[キャッシュ (コンピュータシステム)|キャッシュ]]を含まないことによるものである。このシンプルさのために消費電力は極めて低いが、それにもかかわらず[[Intel 80286|80286]]よりも性能は高かった{{要出典|date=2016年1月5日 (火) 20:56 (UTC)}}。後継となる'''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を再設計したものが'''[[:en:ARM7TDMI|ARM7TDMI]]'''である。ARM7TDMIはThumb命令(後述)を実装し、低消費電力と高いコード効率を両立する利点を備えていたことから、ライセンスを受けた多くの企業によって製品化され、特に[[携帯電話]]や[[ゲームボーイアドバンス]]といった民生機器に採用されたことから、莫大な数の製品に搭載された。なお、TDMIとはThumb命令、[[デバッグ]] (Debug) 回路、[[乗算器]] (Multiplier)、[[インサーキット・エミュレータ|ICE]]機能を搭載していることを意味している。しかし、これより後のコアには全てこれらの機能が標準的に搭載されるようになったため、この名称は省かれている。
| |
− | | |
− | [[ディジタル・イクイップメント・コーポレーション|DEC]]はARMv4アーキテクチャの設計のライセンスを得て[[StrongARM]]を製造した。233MHzでStrongARMはほんの1[[ワット|W]]の電力しか消費しない(最近のバージョンはさらに少ない)。この業績は後に訴訟の解決の一環として[[インテル]]に移管され、インテルはこの機会を利用して古くなりつつあった[[Intel 960|i960]]をStrongARMで補強することにし、それ以降[[XScale]]という名で知られる高性能の実装を開発した。
| |
− | | |
− | 以後も、StrongARMの技術のフィードバックを受けた'''ARM9'''や'''ARM10'''を経て、NECとの提携などによって携帯電話向けプロセッサとしての地位を確固たるものにした'''ARM11'''をリリースする。
| |
− | | |
− | 2005年には製品ラインナップを一新し、高機能携帯電話などのアプリケーションプロセッサ向けである'''Cortex-A'''、リアルタイム制御向けである'''Cortex-R'''、[[組み込みシステム]]向けである'''Cortex-M'''と、ターゲットごとにシリーズを分類した。なお、Cortexの末尾に付く文字は、社名であるARMの一文字ずつをそれぞれ割り当てたものである<ref>{{Cite web |url=http://ascii.jp/elem/000/000/577/577932/index-2.html |title=スマートフォンを席巻するARMプロセッサーの歴史 |author= |publisher=ASCII.jp |accessdate=2013年7月24日 |date=2010-12-20}}</ref>。また、2012年11月にはARM初となる64ビットアーキテクチャによるプロセッサコアである'''Cortex-A50'''シリーズを発表した<ref>{{Cite web |url=http://itpro.nikkeibp.co.jp/article/NEWS/20121101/434442/ |title=ARMが初の64ビットCPU「Cortex-A50シリーズ」発表、サーバー向けに16コア以上に対応 |author= |publisher=ITpro |accessdate=2014年11月27日 |date=2012-11-01}}</ref>。
| |
− | | |
− | ARMから[[IPコア]]のライセンス供与を受けている主な企業には、[[モトローラ]]、[[IBM]]、[[テキサス・インスツルメンツ]]、[[任天堂]]、[[フィリップス]]、[[Atmel]]、[[シャープ]]、[[サムスン電子]]、[[STマイクロエレクトロニクス]]、[[アナログ・デバイセズ]]、[[パナソニック]]、[[クアルコム]]、[[Marvell]]などがある。ARMチップは世界で最もよく使われているCPUデザインの一つとなっており、[[ハードディスクドライブ|ハードディスク]]、[[携帯電話]]、[[ルータ]]、[[電卓]]から[[玩具]]に至るまであらゆる製品の中に見ることができる。32ビット組み込みCPUで圧倒的なシェアを占め、[[2004年]]の世界シェアは61%であった<ref>[[2005年]]、ARM社のセミナー資料による。</ref>。
| |
− | | |
− | == 主な採用製品 ==
| |
− | === ARM6 ===
| |
− | *ARM60 [[3DO|3DOインタラクティブ マルチプレーヤー]]
| |
− | <gallery>
| |
− | IMAGE:VY86C06020FC-2 02.jpg|<BR>ARM60 CPU (VY86C06020FC-2)
| |
− | IMAGE:P60ARM GC 01.jpg|<BR>ARM60 CPU (P60ARM)
| |
− | </gallery>
| |
− | *ARM610 [[アップル (企業)|アップル]] [[アップル・ニュートン|ニュートン・メッセージパッド]]、メッセージパッド100、メッセージパッド110、メッセージパッド120
| |
− | | |
− | === ARM7/7E ===
| |
− | *携帯情報端末
| |
− | ** [[eMate 300]]
| |
− | *携帯電話
| |
− | ** 一般的な[[GSM]]携帯電話
| |
− | ** [[cdmaOne]]携帯電話
| |
− | ** 初期の[[3G]]携帯電話(例:au [[CDMA 1X]] A1400番台の一部を除くA1000番台・A3000番台・A5500番台を除くA5000番台。一部例外除く)
| |
− | *携帯ゲーム機
| |
− | ** [[ゲームボーイアドバンス]]
| |
− | ** [[ニンテンドーDS]]/[[ニンテンドーDS Lite]](サブCPU、[[ゲームボーイアドバンス|GBA]]ソフトの動作にも使われる)
| |
− | ** [[ニンテンドーDSi]](サブCPU)
| |
− | *携帯音楽プレーヤー
| |
− | ** [[iPod]]シリーズ([[マルチコア|デュアルコア]]実装)
| |
− | *電卓
| |
− | ** HP 20b / HP 30b
| |
− | *その他
| |
− | ** [[MINDSTORMS#レゴマインドストーム NXT|レゴマインドストーム NXT]](知能ブロックの一部)
| |
− | ** [[ルンバ_(掃除機)|ルンバ]](一部の機種)
| |
− | | |
− | === ARM9/9E ===
| |
− | *携帯ゲーム機
| |
− | ** [[ニンテンドーDS]]/[[ニンテンドーDS Lite|DS Lite]]/[[ニンテンドーDSi]](メインCPU、ARM7とのダブル実装)
| |
− | ** [[:en:Tapwave Zodiac|Tapwave Zodiac]]
| |
− | *携帯電話
| |
− | ** [[Sun SPOT]]
| |
− | ** [[クアルコム|Qualcomm]] MSM6550([[CDMA2000 1x#Rel.0|CDMA2000 1xEV-DO Rel.0]]対応携帯電話用チップセット)
| |
− | ** Qualcomm MSM6800([[CDMA2000 1x#Rev.A|CDMA2000 1xEV-DO Rev.A]]対応携帯電話用チップセット)
| |
− | ** 現在販売中の[[第三世代携帯電話|3G]]および[[第三・五世代携帯電話|3.5G]]携帯電話(例:NTTドコモ [[FOMA]] 900i・901iシリーズ、[[Au (携帯電話)|au]]([[KDDI]]、[[沖縄セルラー電話]])の[[CDMA 1X]]シリーズおよび[[CDMA 1X WIN]]シリーズ、[[ソフトバンクモバイル]]の[[SoftBank 3G]]シリーズ等。一部例外除く)
| |
− | ** [[H11T]]([[イー・モバイル]]の音声通話用3.5G端末)
| |
− | ** [[WS009KE]] "9 (nine)"([[ウィルコム|WILLCOM]](ウィルコム)の[[PHS]]端末)
| |
− | ** Nokia [[N-Gage]]
| |
− | *携帯情報端末
| |
− | ** Handheld Engine(SONY [[CLIE]]に搭載)
| |
− | *その他
| |
− | ** [[Brain (電子辞書)|Sharp Brain]]
| |
− | ** [[MINDSTORMS|レゴマインドストーム EV3]]
| |
− | | |
− | === ARM11/11E ===
| |
− | *[[2007年]]頃から採用されるようになる。発表は[[2002年]][[4月29日]]<ref>[http://www.itmedia.co.jp/news/0204/30/b_0429_01.html News:米速報:次世代マイクロアーキテクチャ「ARM11」発表]</ref>。
| |
− | **2007年7月17日、[[東芝]]がARM1176JZF-S搭載の携帯電話用プロセッサ、TC35711XBGを発表。2008年第2四半期より量産開始予定。
| |
− | *[[NVIDIA]] [[NVIDIA Tegra|Tegra]]
| |
− | **[[Zune|Zune HD]]
| |
− | *携帯音楽プレーヤー
| |
− | **[[iPod touch]]
| |
− | **[[Zune]]
| |
− | *携帯電話
| |
− | **[[T-Mobile G1]]
| |
− | **Qualcomm MSM7500(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
| |
− | ***[[KDDI]]/[[沖縄セルラー電話]](各auブランド)の「[[KCP+]]」対応CDMA 1X WINシリーズの携帯電話(例・[[W56T]]、[[W54SA]]、[[W61S]]、[[W62T]]等)。ARM9Eとのダブル実装
| |
− | ***KDDI/沖縄セルラー電話(各auブランド)のCDMA 1X WINシリーズのスマートフォン(例・[[E30HT]]等)
| |
− | **Qualcomm MSM7600(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
| |
− | ***[[京セラ|KYOCERA]] Zio M6000
| |
− | ***HTC Hero
| |
− | **[[NTTドコモ]]の[[FOMA]]902iシリーズ以降の携帯電話。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ゲーム機)
| |
− | *シングルボードコンピュータ
| |
− | **[[Raspberry Pi]] model 1A
| |
− | | |
− | === Cortex-M3 ===
| |
− | *[[2004年]]に発表された[[マイクロコントローラ]]。
| |
− | *同じARMv7-M/v7E-MシリーズのCortex-M3,M4,M7共に[[ハーバード・アーキテクチャ]]であることが最大の特徴である。
| |
− | *自動車・工場・家電などの機器制御などに使われている。自動車では、モーター制御、[[パワーステアリング]]、[[横滑り防止装置]]などいろいろな場所で使われている。
| |
− | *ワンボードマイコン
| |
− | **[[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
| |
− | | |
− | === Cortex-A9 ===
| |
− | *タブレットは2010年頃から、スマートフォンは2011年から採用された。初期は2コアだったが、4コアのものがタブレットは2011年から、スマートフォンは2012年から登場した。
| |
− | *[[NVIDIA]] [[NVIDIA Tegra|Tegra 2]]
| |
− | **[[Microsoft Surface#Surface|Surface RT]]
| |
− | *携帯ゲーム機
| |
− | **[[PlayStation Vita]]
| |
− | *[[Apple A5]]
| |
− | **[[Apple TV|Apple TV (第3世代)]]
| |
− | **[[iPod touch|iPod touch (第5世代)]]
| |
− | **[[iPad 2]], [[iPad mini]]
| |
− | **[[iPhone 4S]]
| |
− | *Apple A5X
| |
− | **[[iPad (第3世代)]]
| |
− | *シングルボードコンピュータ
| |
− | **[[PandaBoard]]
| |
− | ***BeagleBoard同様、テキサス・インスツルメンツの技術支援によって開発されたボード。
| |
− | **Wandboard
| |
− | | |
− | === Cortex-A15 ===
| |
− | * タブレットは2012年から、スマートフォンは2013年から採用された。
| |
− | <!-- Apple A6 は Cortex-A15 ではないのでコメントアウトします -->
| |
− | <!-- *[[Apple A6]]は、[[iPhone 5]]に搭載され2012年9月21日より出荷される予定<ref>[http://www.anandtech.com/show/6279/apples-iphone-5-uses-a6-soc-arm-cortex-a15s-inside Apple's iPhone 5 Uses A6 SoC: ARM Cortex A15s Inside]</ref>。 -->
| |
− | *[[サムスン電子]]は1.7GHzのデュアルコア Exynos 5250 を2012年10月<ref>[http://internet.watch.impress.co.jp/docs/news/20121019_567253.html Googleが新型「Chromebook」を発表、Samsung製で249ドル]</ref>から搭載商品を販売開始。メモリ帯域12.8GB/s<ref>[http://pc.watch.impress.co.jp/docs/news/20111202_495443.html 【PC Watch】 Samsung、初のARM Cortex-A15プロセッサ「Exynos 5250」]</ref>。
| |
− | *テキサス・インスルメンツは2GHzのデュアルコアで2012年第3四半期から商品を出荷予定<ref>[http://newscenter.ti.com/jp/Blogs/newsroom/archive/2011/02/10/ti-omap-5.aspx 日本TI、モバイルの概念を一変させる高性能、高機能のOMAP™5プラットフォームを発表]</ref>。
| |
− | *NVIDIA は Tegra 4 を2013年第1四半期から出荷予定。
| |
− | *シングルボードコンピュータ
| |
− | **[[ODROID]]-XU
| |
− | | |
− | === Cortex-A57 ===
| |
− | * 2012年10月に[[64ビット]] ARMのCortex-A57, A53(コードネーム「Atlas」と「Apollo」)が発表され<ref>[http://pc.watch.impress.co.jp/docs/column/kaigai/20120214_511793.html 【後藤弘茂のWeekly海外ニュース】 ARMが次世代CPU「Atlas」と「Apollo」の計画を発表]</ref>、2014年に搭載商品(Samsung Galaxy Note 4 など)が販売開始された。
| |
− | * AMD は2015年下半期にサーバー向け Opteron A1100 (Seattle) をリリース予定<ref>[http://www.anandtech.com/show/9232/amds-k12-arm-cpu-now-in-2017 AMD’s K12 ARM CPU Now In 2017]</ref><ref>[http://cloud.watch.impress.co.jp/docs/column/virtual/20130702_605540.html 苦難の2013年を越え、輝かしい2014年に賭けるAMD (大きな期待が寄せられているサーバー向け64ビットARMプロセッサ)]</ref>。
| |
− | * A57やA53では、8コアや全てのコア同時稼働できる4+4コア(A57が4コア、A53が4コア)などが登場した。
| |
− | | |
− | === Cortex-A72 ===
| |
− | * [[2015年]][[2月3日]]に発表され<ref>[http://www.arm.com/about/newsroom/arm-sets-new-standard-for-the-premium-mobile-experience.php ARM Sets New Standard for the Premium Mobile Experience - ARM]</ref>、2015年に搭載商品が販売される予定<ref>[https://www.qualcomm.com/news/releases/2015/02/18/qualcomm-introduces-next-generation-snapdragon-600-and-400-tier-processors Qualcomm Introduces Next Generation Snapdragon 600 and 400 Tier Processors for High Performance, High-Volume Smartphones with Advanced LTE | Qualcomm]</ref>。Cortex-A57の後継製品。
| |
− | | |
− | == コアの性能と採用実績 ==
| |
− | === ARM社製 ===
| |
− | {| class="wikitable" width="100%" style="font-size: 80%;"
| |
− | ! ファミリー
| |
− | ! アーキテクチャ
| |
− | ! コア
| |
− | ! 特徴
| |
− | ! キャッシュ (I/D)/[[メモリ管理ユニット|MMU]]
| |
− | ! 性能 MIPS @ MHz
| |
− | ! 採用製品
| |
− | |-
| |
− | !ARM1
| |
− | |ARMv1
| |
− | |ARM1
| |
− | |
| |
− | |なし
| |
− | |
| |
− | |[[BBC Cheese Wedge#ARM Evaluation System|ARM Evaluation System]] second processor for [[BBC Micro]]
| |
− | |-
| |
− | ! rowspan=2 | ARM2
| |
− | |ARMv2
| |
− | |ARM2
| |
− | |MUL(乗算)命令を追加
| |
− | |なし
| |
− | |4 MIPS @ 8 MHz<br/>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<br/>0.50 [[DMIPS]]/MHz
| |
− | |Acorn Archimedes
| |
− | |-
| |
− | ! rowspan=3 | ARM6
| |
− | | rowspan=3 | 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<br/>0.65 [[DMIPS]]/MHz
| |
− | |[[Risc PC|Acorn Risc PC 600]], [[アップル・ニュートン]] 100シリーズ
| |
− | |-
| |
− | !rowspan=6 | ARM7
| |
− | |rowspan=6 | ARMv3
| |
− | |ARM700
| |
− | |
| |
− | |8KB 統合
| |
− | |40 MHz
| |
− | |Acorn Risc PC 試作CPUカード
| |
− | |-
| |
− | |ARM710
| |
− | |
| |
− | |8KB 統合
| |
− | |40 MHz
| |
− | |Acorn Risc PC 700
| |
− | |-
| |
− | |ARM710a
| |
− | |
| |
− | |8KB 統合
| |
− | |40 MHz<br/>0.68 [[DMIPS]]/MHz
| |
− | |[[Risc PC|Acorn Risc PC 700]], [[アップル・ニュートン]] eMate 300
| |
− | |-
| |
− | |ARM7100
| |
− | |Integrated SoC.
| |
− | |8KB 統合
| |
− | |18 MHz
| |
− | |[[Psion 5|Psion Series 5]]
| |
− | |-
| |
− | |ARM7500
| |
− | |Integrated SoC.
| |
− | |4KB 統合
| |
− | |40 MHz
| |
− | |[[Acorn A7000]]
| |
− | |-
| |
− | |ARM7500FE
| |
− | |Integrated SoC. "FE"、FPA・EDOメモリコントローラを追加
| |
− | |4KB 統合
| |
− | |56 MHz<br/>0.73 [[DMIPS]]/MHz
| |
− | |[[RiscStation|Acorn A7000+]]
| |
− | |-
| |
− | ! rowspan=5 |ARM7TDMI
| |
− | | rowspan=4 |v4T
| |
− | |ARM7TDMI(-S)
| |
− | |3ステージ パイプライン
| |
− | |無し
| |
− | |15 MIPS @ 16.8 MHz
| |
− | |[[ゲームボーイアドバンス]], [[ニンテンドーDS]], [[iPod]]
| |
− | |-
| |
− | |ARM710T
| |
− | |
| |
− | |MMU
| |
− | |36 MIPS @ 40 MHz
| |
− | |[[:en:Psion 5|Psion 5 series]], [[アップル・ニュートン]]
| |
− | |-
| |
− | |ARM720T
| |
− | |
| |
− | |8KB 統合キャッシュ, MMU
| |
− | |60 MIPS @ 59.8 MHz
| |
− | |
| |
− | |-
| |
− | |ARM740T
| |
− | |
| |
− | |MPU
| |
− | |
| |
− | |
| |
− | |-
| |
− | |v5TEJ
| |
− | |ARM7EJ-S
| |
− | |Jazelle DBX
| |
− | |なし
| |
− | |
| |
− | |
| |
− | |-
| |
− | ! rowspan=4 |ARM9TDMI
| |
− | | rowspan=4 |v4T
| |
− | |ARM9TDMI
| |
− | |5ステージ パイプライン
| |
− | |なし
| |
− | |
| |
− | |
| |
− | |-
| |
− | |ARM920T
| |
− | |
| |
− | |16KB/16KB, MMU
| |
− | |200 MIPS @ 180 MHz
| |
− | |[[:en:Armadillo CPU Boards|Armadillo]], [[GP32]],[[GP2X]] (マスタ), [[:en:Tapwave Zodiac]] ([[Motorola]] i. MX1)
| |
− | |-
| |
− | |ARM922T
| |
− | |
| |
− | |8KB/8KB, MMU
| |
− | |200/250 MHz
| |
− | |[[CNS2132|Cavium CNS2132 (Econa product lines)]][http://www.cnusers.org/], [[STR8132|Cavium STR8132 (Econa evaluation board)]], [[LN-86BT|Ritmo Torrent Box/Mini Lan Server/BT-Downloader (ZAP-LN-86BT)]][http://www.zoobab.com/ritmo-torrent-box]
| |
− | |-
| |
− | |ARM940T
| |
− | |
| |
− | |4KB/4KB, MPU
| |
− | |
| |
− | |[[GP2X]] (スレーブ)
| |
− | |-
| |
− | ! rowspan=5 |ARM9E
| |
− | | rowspan=3 |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内蔵 [http://mcu.st.com/mcu/modules.php?name=mcu&file=devicedocs&DEV=STR912FW44&FAM=101]
| |
− | |-
| |
− | |ARM968E-S
| |
− | |
| |
− | |キャッシュレス, TCMs
| |
− | |
| |
− | |
| |
− | |-
| |
− | |v5TEJ
| |
− | |ARM926EJ-S
| |
− | |Jazelle DBX
| |
− | |variable, TCMs, MMU
| |
− | |220 MIPS @ 200 MHz
| |
− | |Mobile phones: [[ソニー・エリクソン・モバイルコミュニケーションズ]] (K, W シリーズ),[[シーメンス]] and [[Benq]] (x65 シリーズ以降), [[Texas Instruments OMAP|テキサスインスツルメンツ OMAP1710]]
| |
− | |-
| |
− | |v5TE
| |
− | |ARM996HS
| |
− | |Clockless processor
| |
− | |キャッシュレス, TCMs, MPU
| |
− | |
| |
− | |
| |
− | |-
| |
− | ! rowspan=3 |ARM10E
| |
− | | rowspan=2 |v5TE
| |
− | |ARM1020E
| |
− | |(VFP)
| |
− | |32KB/32KB, MMU
| |
− | |
| |
− | |
| |
− | |-
| |
− | |ARM1022E
| |
− | |(VFP)
| |
− | |16KB/16KB, MMU
| |
− | |
| |
− | |
| |
− | |-
| |
− | |v5TEJ
| |
− | |ARM1026EJ-S
| |
− | |Jazelle DBX
| |
− | |variable, MMU or MPU
| |
− | |
| |
− | |
| |
− | |-
| |
− | ! rowspan=4 |ARM11
| |
− | |v6
| |
− | |ARM1136J(F)-S
| |
− | |SIMD, Jazelle DBX, (VFP)
| |
− | |variable, MMU
| |
− | |1.25 DMIPS/MHz
| |
− | |[[Texas Instruments OMAP|TI OMAP 2]], Freescale [[i.MX]]3
| |
− | |-
| |
− | |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, Broadcom BCM2835
| |
− | |-
| |
− | |v6K
| |
− | |ARM11 MPCore
| |
− | |1-4 core SMP, SIMD, Jazelle DBX, (VFP)
| |
− | |variable, MMU
| |
− | |1.25 DMIPS/MHz(最大608MHz)
| |
− | |[[NVIDIA Tegra]]
| |
− | |-
| |
− | ! rowspan="3" | SecurCore
| |
− | | v6-M
| |
− | | SC000
| |
− | |
| |
− | |
| |
− | | 0.9 DMIPS/MHz
| |
− | |
| |
− | |-
| |
− | | v4T
| |
− | | SC100
| |
− | |
| |
− | |
| |
− | |
| |
− | |
| |
− | |-
| |
− | | v7-M
| |
− | | SC300
| |
− | |
| |
− | |
| |
− | | 1.25 DMIPS/MHz
| |
− | |
| |
− | |-
| |
− | ! rowspan="8" | Cortex-M
| |
− | | rowspan="3" | v6-M
| |
− | |Cortex-M0
| |
− | |rowspan="3"|マイクロコントローラ向け。M1はFPGA上で動作。命令はM3のサブセット。Thumb-2 (BL, MRS, MSR, ISB, DSB, and DMB)対応。
| |
− | |
| |
− | |0.9 DMIPS/MHz
| |
− | |NXP LPC11xx, Triad Semiconductor, Melfas, 忠北テクノパーク, Nuvoton, オーストリアマイクロシステムズ, ローム, SwissMicros GmbH ([[HP-10Cシリーズ#DM1x (DM-1xCC)|DM15]], [[HP-41#DM41|DM41]]等)
| |
− | |-
| |
− | | Cortex-M0+
| |
− | |
| |
− | | 0.93 DMIPS/MHz
| |
− | |NXP LPC81x, LPC82x
| |
− | |-
| |
− | |Cortex-M1
| |
− | |なし, tightly coupled memory optional.
| |
− | |0.8 DMIPS/MHz<ref>[http://www.arm.com/products/CPUs/ARM_Cortex-M1.html "ARM Cortex-M1"], ARM product website. Accessed April 11, 2007.</ref><br/>最大 136 DMIPS @ 170 MHz<ref>[http://www.arm.com/news/17017.html "ARM Extends Cortex Family with First Processor Optimized for FPGA"], ARM press release, March 19 2007. Accessed April 11, 2007.</ref> (クロックはFPGA依存)
| |
− | |[[アルテラ|Altera]] Cyclone III<ref>[http://www.altera.co.jp/products/ip/processors/32_16bit/m-arm-cortex-m1.html ARM Cortex-M1]</ref>, Actel FPGA<ref>[http://www.actel.com/intl/japan/products/mpu/cortexm1/ Actel: 製品とサービス: プロセッサ: ARM: Cortex-M1]</ref>
| |
− | |-
| |
− | |v7-M
| |
− | |Cortex-M3
| |
− | |マイクロコントローラ向け(ハーバード・アーキテクチャ)
| |
− | |キャッシュなし, (MPU)
| |
− | |rowspan="2"|1.25 DMIPS/MHz
| |
− | |Texas Instruments Stellaris MCU, STMicroelectronics STM32, NXP LPC1000, NXP [[mbed]], 東芝 TX03, [[:en:Luminary Micro|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
| |
− | |-
| |
− | | v7-M
| |
− | | Cortex-M7
| |
− | | マイクロコントローラ向け(ハーバード・アーキテクチャ)M4に倍精度浮動小数点数を追加。
| |
− | |
| |
− | | 2.14 DMIPS/MHz<ref>[http://www.anandtech.com/show/8542/cortexm7-launches-embedded-iot-and-wearables/2 AnandTech | Cortex-M7 Launches: Embedded, IoT and Wearables]</ref><ref>[https://developer.arm.com/products/processors/cortex-m/cortex-m7 Cortex-M7 Overview - ARM]</ref>
| |
− | | STMicroelectronics STM32 F7, Atmel SAM x7x
| |
− | |-
| |
− | | rowspan="2" | v8-M
| |
− | | Cortex-M23
| |
− | | マイクロコントローラ向け(ノイマン・アーキテクチャ)
| |
− | |
| |
− | | 0.98 DMIPS/MHz<ref>[https://developer.arm.com/products/processors/cortex-m/cortex-m23 Cortex-M23 Overview - ARM]</ref>
| |
− | |
| |
− | |-
| |
− | | Cortex-M33
| |
− | | マイクロコントローラ向け(ハーバード・アーキテクチャ)
| |
− | |
| |
− | | 1.50 DMIPS/MHz<ref>[https://developer.arm.com/products/processors/cortex-m/cortex-m33 Cortex-M33 Overview - ARM]</ref>
| |
− | |
| |
− | |-
| |
− | ! rowspan="3" | Cortex-R
| |
− | | rowspan="3" | v7-R
| |
− | |Cortex-R4
| |
− | |rowspan=3|組み込み向け
| |
− | |可変キャッシュ, MMUはオプション
| |
− | |1.66 DMIPS/MHz
| |
− | |Texas Instruments TMS570, [[Broadcom]]
| |
− | |-
| |
− | |Cortex-R5
| |
− | |
| |
− | |1.66 DMIPS/MHz
| |
− | |
| |
− | |-
| |
− | |Cortex-R7
| |
− | |
| |
− | |2.53 DMIPS/MHz
| |
− | |
| |
− | |-
| |
− | ! rowspan="14" | Cortex-A
| |
− | | rowspan="6" | v7-A
| |
− | |Cortex-A5
| |
− | |低コスト、低消費電力
| |
− | |L1 4K-64K可変, L2 オプション, メモリ管理ユニット, TrustZone
| |
− | |400MHz〜800MHz<br>1.57 DMIPS/MHz
| |
− | |[[Atmel]] SAMA5, PS-T328, [[Snapdragon]] S4 Play, Snapdragon 200
| |
− | |-
| |
− | |Cortex-A7
| |
− | |1-4マルチプロセッシング 浮動小数点演算器 L2キャッシュメモリ4MB(最高)
| |
− | |メモリ管理ユニット, TrustZone, ラージ[[物理アドレス拡張]]
| |
− | |〜1.5Ghz<br>1.9 DMIPS/MHz
| |
− | |Snapdragon S4 Play, Snapdragon 200, 208, 210, 212, 400, [[Allwinner]] A20, [[Allwinner]] A31, [[MediaTek]] MT6589, Broadcom BCM2836
| |
− | |-
| |
− | |Cortex-A8
| |
− | |アプリケーション向け, NEON, Jazelle RCT, Thumb-2
| |
− | |可変(L1+L2), [[メモリ管理ユニット]], TrustZone
| |
− | |600MHz〜1GHz<br>2.0 DMIPS/MHz
| |
− | |[[Texas Instruments OMAP#OMAP_3.E3.82.B7.E3.83.AA.E3.83.BC.E3.82.BA|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<br/>2.5 DMIPS/MHz
| |
− | |[[Texas Instruments OMAP#OMAP_4.E3.82.B7.E3.83.AA.E3.83.BC.E3.82.BA|TI OMAP 4]], Freescale [[i.MX]] 6, ST-Ericsson NovaThor U8500, [[NVIDIA Tegra]] 2, [[NVIDIA Tegra]] 3, [[NVIDIA Tegra]] 4i, STMicroelectronics [http://www.st.com/stonline/products/families/embedded_mpu/spear_mpus/spear_with_1300k.htm SPEAr1300], [[ザイリンクス]] Zynq-7000, [[Apple A5]], [[Rockchip]] RK3xxx, Samsung [[Exynos]] 4, [[HiSilicon]] K3V2, Kirin 910, [[MediaTek]]
| |
− | |-
| |
− | |Cortex-A15
| |
− | |1-4コア対称型マルチプロセッシング
| |
− | |メモリ管理ユニット, TrustZone, ラージ[[物理アドレス拡張]]
| |
− | |1GHz〜2.5GHz<br/>3.5 DMIPS/MHz
| |
− | |[[Texas Instruments OMAP#OMAP_5.E3.82.B7.E3.83.AA.E3.83.BC.E3.82.BA|TI OMAP 5]], Samsung [[Exynos]] 5, [[NVIDIA Tegra]] 4, [[NVIDIA Tegra]] K1, [[HiSilicon]] Kirin 920, [[Renesas]] APE6, [[Renesas]] R-Car H2, [[Renesas]] MP6530
| |
− | |-
| |
− | |Cortex-A17
| |
− | |1-4コア対称型マルチプロセッシング
| |
− | |メモリ管理ユニット, TrustZone, ラージ[[物理アドレス拡張]]
| |
− | |
| |
− | |[[Rockchip]] RK3288
| |
− | |-
| |
− | | rowspan="6" | v8-A
| |
− | | Cortex-A32
| |
− | | 超小型、低消費電力、電力効率重視。[[モノのインターネット|IoT]]機器向け。32ビット命令セット。
| |
− | |
| |
− | |
| |
− | |
| |
− | |-
| |
− | | Cortex-A35
| |
− | | 低コスト、低消費電力、電力効率重視。64ビット命令セット。
| |
− | | メモリ管理ユニット, TrustZone, 64bit仮想アドレス
| |
− | |
| |
− | | [[MediaTek]] Helio X30
| |
− | |-
| |
− | | Cortex-A53
| |
− | | 64ビット命令セット。[[暗号化]]命令
| |
− | | メモリ管理ユニット, TrustZone, 64bit仮想アドレス
| |
− | | 2.3 DMIPS/MHz
| |
− | | Snapdragon 410, 412, 415, 425, 610, 615, 617, 808, 810, [[HiSilicon]] Kirin 620, 930, 935, [[Rockchip]] RK3368, [[MediaTek]] MT6732, 6735, 6737, 6737T, 6738, 6750, 6752, 6753, Helio P10, P20, P25, X10, X30
| |
− | |-
| |
− | | Cortex-A57
| |
− | |
| |
− | | メモリ管理ユニット, TrustZone, 64bit仮想アドレス
| |
− | | 4.1 DMIPS/MHz
| |
− | | Snapdragon 808, 810, Nvidia [[Tegra]] X1, Samsung [[Exynos]] 7
| |
− | |-
| |
− | | Cortex-A72
| |
− | |
| |
− | | メモリ管理ユニット, TrustZone, 64bit仮想アドレス
| |
− | |
| |
− | | Snapdragon 618, 620, 650, 652, HiSilicon Kirin 950, 955
| |
− | |-
| |
− | | Cortex-A73
| |
− | |
| |
− | | メモリ管理ユニット, TrustZone, 64bit仮想アドレス
| |
− | |
| |
− | | HiSilicon Kirin 960, MediaTek Helio X30
| |
− | |-
| |
− | | rowspan="2" | v8.2-A
| |
− | | Cortex-A55
| |
− | |
| |
− | |
| |
− | |
| |
− | |
| |
− | |-
| |
− | | Cortex-A75
| |
− | |
| |
− | |
| |
− | |
| |
− | |
| |
− | |}
| |
− | | |
− | === サードパーティー ===
| |
− | {| class="wikitable" width="100%" style="font-size: 80%;"
| |
− | ! ファミリー
| |
− | ! アーキテクチャ
| |
− | ! 名称
| |
− | ! 特徴
| |
− | ! キャッシュ (I/D)/[[メモリ管理ユニット|MMU]]
| |
− | ! 性能 MIPS @ MHz
| |
− | ! 採用製品
| |
− | |-
| |
− | ! [[StrongARM]]
| |
− | | v4
| |
− | | SA-1
| |
− | |
| |
− | | 16 KB/8–16 KB, MMU
| |
− | | 203–206 MHz<br>1.0 DMIPS/MHz
| |
− | |
| |
− | |-
| |
− | ! rowspan=17 | [[XScale]]
| |
− | | rowspan=17 | 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 (企業)|HTC]] Universal, [[ザウルス]] SL-C1000,3000,3100,3200,[[Willcom]] [[W-ZERO3|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
| |
− | |
| |
− | |
| |
− | |
| |
− | |
| |
− | |-
| |
− | ! rowspan="3" | [[Snapdragon]]
| |
− | | rowspan="2" | v7-A
| |
− | |Scorpion
| |
− | |アプリケーション向け, 1-2コア対称型マルチプロセッシング, VFPv3, NEON, Thumb-2, Jazelle RCT, [[アウト・オブ・オーダー実行]], [[投機的実行]]
| |
− | |可変(L1+L2), [[メモリ管理ユニット|MMU]], TrustZone
| |
− | |800MHz〜1.5GHz<br>2.1 DMIPS/MHz
| |
− | |[[クアルコム|Qualcomm]] Snapdragon S1, S2, S3 (第1〜3世代)
| |
− | |-
| |
− | |Krait
| |
− | |アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv4
| |
− | |[[メモリ管理ユニット|MMU]], TrustZone
| |
− | |〜2.5GHz<br>3.3 DMIPS/MHz
| |
− | |Qualcomm Snapdragon S4 (第4世代・S4 Playは除く), 400/600/800 (第5世代)
| |
− | |-
| |
− | |v8-A
| |
− | |Kryo
| |
− | |
| |
− | |64KB/512KB–1MB
| |
− | |〜2.6GHz<br>6.3 DMIPS/MHz
| |
− | |Qualcomm Snapdragon 820
| |
− | |-
| |
− | ! Centriq
| |
− | | v8-A
| |
− | | Folker
| |
− | |
| |
− | |
| |
− | |
| |
− | | Centriq 2400
| |
− | |-
| |
− | ! rowspan="2" | ARMADA
| |
− | | rowspan="2" | v7-A
| |
− | |Sheeva PJ4
| |
− | |アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv3, Wireless MMX2, Thumb-2
| |
− | |可変(L1+L2), [[メモリ管理ユニット|MMU]], TrustZone
| |
− | |〜1.5GHz<br>2.42 DMIPS/MHz
| |
− | |[[Marvell]] ARMADA 500/600シリーズ
| |
− | |-
| |
− | |Sheeva PJ4B
| |
− | |組み込み向け, 1-4コア対称型マルチプロセッシング, VFPv3, NEON, Wireless MMX2, Thumb-2
| |
− | |可変(L1+L2), [[メモリ管理ユニット|MMU]], TrustZone
| |
− | |〜1.6GHz<br>2.61 DMIPS/MHz
| |
− | |Marvell ARMADA XP/370/1500
| |
− | |-
| |
− | ! rowspan="6" | Apple Ax
| |
− | | v7-A
| |
− | | Swift
| |
− | | アプリケーション向け, 2コア対称型マルチプロセッシング, VFPv4
| |
− | |
| |
− | |
| |
− | | [[Apple A6]], [[Apple A6X]]
| |
− | |-
| |
− | | rowspan="5" | v8-A
| |
− | | Cyclone
| |
− | | アプリケーション向け, 2コア, AArch64
| |
− | | 64KB/64KB
| |
− | | 1.3GHz
| |
− | | [[Apple A7]]
| |
− | |-
| |
− | | Cyclone gen 2
| |
− | | アプリケーション向け, 2コア, AArch64
| |
− | | 64KB/64KB
| |
− | |1.1GHz, 1.4GHz
| |
− | | [[Apple A8]]
| |
− | |-
| |
− | | Typhoon
| |
− | | アプリケーション向け, 3コア, AArch64
| |
− | | 64KB/64KB
| |
− | | 1.5GHz
| |
− | | [[Apple A8X]]
| |
− | |-
| |
− | | Twister
| |
− | | アプリケーション向け, 2コア, AArch64
| |
− | | 64KB/64KB
| |
− | | 1.8GHz
| |
− | | [[Apple A9]]
| |
− | |-
| |
− | |
| |
− | | アプリケーション向け, 2コア, AArch64
| |
− | | 64KB/64KB
| |
− | | 2.25GHz
| |
− | | [[Apple A9X]]
| |
− | |-
| |
− | ! Tegra K1
| |
− | | v8-A
| |
− | | Denver
| |
− | |
| |
− | | 128kB/64kB
| |
− | |
| |
− | | Google [[Nexus 9]], [[小米科技|Xiaomi]] Mi Pad
| |
− | |-
| |
− | ! Parker
| |
− | | v8-A
| |
− | | Denver 2.0
| |
− | |
| |
− | |
| |
− | |
| |
− | | DRIVE PX2
| |
− | |-
| |
− | ! Exynos
| |
− | | v8-A
| |
− | | Exynos M1
| |
− | |
| |
− | | 64kB/2MB(4コアシェア)
| |
− | |
| |
− | | Galaxy S7/S7 edge
| |
− | |}
| |
− | | |
− | ARMv7-A, v8-A は以下の SoC で実装されている。
| |
− | * [[Allwinner]] (全志科技)
| |
− | * Amlogic (晶晨半导体)
| |
− | * [[Apple A4]], [[Apple A5]], [[Apple A6]], [[Apple A6X]], [[Apple A7]], [[Apple A8]], [[Apple A8X]], [[Apple A9]], [[Apple A9X]]
| |
− | * 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アーキテクチャの設計のみをしており、製造は行ってはいない。ARMは[[IPコア]]として各社にライセンスされ、それぞれの会社において機能を追加するなどして[[CPU]]として製造される。製造されたCPUはそのまま、あるいはボード上に実装、もしくは製品に組み込まれた形で販売などされる。
| |
− | | |
− | 以下に『CPUそのもの』『ボード上に実装したもの』などCPUやボードのシリーズ名やブランド名などが明確な主なメーカ名/CPU名/シリーズ名等を記する。
| |
− | | |
− | * [[NXPセミコンダクターズ]]
| |
− | ** LPC
| |
− | ** LPCXpresso
| |
− | ** mbed
| |
− | * [[フリースケール・セミコンダクタ]]
| |
− | ** i.MX
| |
− | ** Kinetis
| |
− | * [[ディジタル・イクイップメント・コーポレーション|DEC]]-[[インテル]]
| |
− | ** [[StrongARM]]
| |
− | * [[インテル]]-[[Marvell]]
| |
− | ** [[XScale]]
| |
− | * [[STマイクロエレクトロニクス]]
| |
− | ** STM32
| |
− | * [[サイプレス・マイクロシステムズ]]
| |
− | ** [[PSoC|PSoC 5]]
| |
− | * [[東芝]]
| |
− | ** [[TX03]],[[TX09]]シリーズ
| |
− | * [[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つのモードにしかなれない。命令や外部からの割込みなどでモードが切り替わる<ref name="Chdddhea">{{cite web | url=http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Chdddhea.html | title=Processor mode | publisher=[[ARMホールディングス]] | accessdate=March 26, 2013}}</ref>。
| |
− | | |
− | ;ユーザーモード
| |
− | :唯一の非特権モード。
| |
− | ;高速割込みモード
| |
− | :FIQ 割込みが発生したときに切り替わる特権モード。
| |
− | ;割込みモード
| |
− | :IRQ 割込みが発生したときに切り替わる特権モード。
| |
− | ;スーパーバイザーモード
| |
− | :CPU がリセットされたときか SWI 命令が実行されたときに切り替わる特権モード。
| |
− | ;アボートモード
| |
− | :プリフェッチアボートかデータアボート例外が発生したときに切り替わる特権モード。
| |
− | ;未定義モード
| |
− | :未定義命令が実行されたときに切り替わる特権モード。
| |
− | ;システムモード (ARMv4以降)
| |
− | :これが唯一例外が原因で切り替わるモードではない。CPSRレジスタにこのモードを書くことによりこのモードに切り替えることが出来る。
| |
− | ;MONモード (要セキュリティ拡張)
| |
− | :TrustZone 拡張をサポートするために作られたモニターモード。
| |
− | ;HYP 別名 PL2 モード (ARMv7以降)
| |
− | :仮想化拡張、ハイパーバイザーモード。<ref name="2012-lpc-arm-zyngier">{{cite web | url=http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-arm-zyngier.pdf | title=KVM/ARM | accessdate=April 3, 2013}}</ref>
| |
− | | |
− | === レジスタ ===
| |
− | レジスタ R0 から R7 は全ての CPU モードで同一。これらは決してバンクされない。
| |
− | | |
− | R13 と R14 はシステムモード以外の全ての特権 CPU モードでバンクされる。独自の R13 と R14 を持つことにより例外からそれぞれのモードに切り替えられる。R13 はスタックポインタ、R14 は関数からの戻りアドレスを持つ。
| |
− | | |
− | {| class="wikitable"
| |
− | |+ CPU モードごとのレジスタ
| |
− | |-
| |
− | ! usr !! sys !! svc !! abt !! und !! irq !! fiq
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R0
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R1
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R2
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R3
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R4
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R5
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R6
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R7
| |
− | |- align=center
| |
− | | colspan=6 | R8 || R8_fiq
| |
− | |- align=center
| |
− | | colspan=6 | R9 || R9_fiq
| |
− | |- align=center
| |
− | | colspan=6 | R10 || R10_fiq
| |
− | |- align=center
| |
− | | colspan=6 | R11 || R11_fiq
| |
− | |- align=center
| |
− | | colspan=6 | R12 || R12_fiq
| |
− | |- align=center
| |
− | | colspan=2 | R13 || R13_svc || R13_abt || R13_und || R13_irq || R13_fiq
| |
− | |- align=center
| |
− | | colspan=2 | R14 || R14_svc || R14_abt || R14_und || R14_irq || R14_fiq
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| R15
| |
− | |-
| |
− | | colspan="7" style="text-align:center;"| CPSR
| |
− | |- align=center
| |
− | | colspan=2 | || SPSR_svc || SPSR_abt || SPSR_und || SPSR_irq || SPSR_fiq
| |
− | |}
| |
− | | |
− | 別名:
| |
− | * R13 は SP とも呼ばれ、スタックポインタ
| |
− | * R14 は LR とも呼ばれ、リンクレジスタ
| |
− | * R15 は PC とも呼ばれ、プログラムカウンタ
| |
− | | |
− | CPSR は下記32ビットを持つ<ref>[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0290g/I27695.html 2.14. The program status registers - Cortex-A8 Technical Reference Manual]</ref>。
| |
− | * 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言語]]による)
| |
− | <source lang="c">
| |
− | int gcd(int i, int j)
| |
− | {
| |
− | while (i != j) {
| |
− | if (i > j)
| |
− | i -= j;
| |
− | else
| |
− | j -= i;
| |
− | }
| |
− | return i;
| |
− | }
| |
− | </source>
| |
− | | |
− | ARMの[[アセンブリ言語]]では、whileループの部分は以下のようになる。
| |
− | <source lang="nasm">
| |
− | 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 に戻る
| |
− | </source>
| |
− | | |
− | 通常分岐命令を使用しなければならないthenやelse節のところで分岐が省かれていることが分かる。
| |
− | | |
− | 命令セットのもう一つのユニークな機能が、[[ビット演算#ビットシフト|シフト演算]]を「データ処理」(算術演算、論理演算、レジスタ間の代入)命令の中に織り込むことができることである。例えば、C言語の
| |
− | <source lang="c">
| |
− | a += (j << 2);
| |
− | </source>
| |
− | | |
− | のような文を1つのARM命令
| |
− | <source lang="nasm">
| |
− | ADD Ra, Ra, Rj, LSL #2
| |
− | </source>
| |
− | として表すことができる。(なお、[[Intel 80386]]などでも1個の命令でできる。<source lang="asm" inline>LEA EAX,[EAX+EBX*4]</source> とすればよい。)
| |
− | | |
− | これにより、多くのARMプログラムは通常RISCプロセッサに期待されるようなプログラムよりも密度の高いものになる。このため、命令フェッチに伴うメモリへのアクセス頻度が少なくなり、分岐に伴うストールも回避しやすく、パイプライン処理を効率的に使うことができる。このことが、ARMがARMより複雑なCPUデザインと競合することを可能にした特徴的な一因のひとつである。
| |
− | | |
− | === Thumb ===
| |
− | ARMプロセッサは'''Thumb'''と呼ばれるコード効率の向上を意図した[[16ビット]]長の命令モードを持っている([[SuperH]]の命令1ビット/データ32ビットに倣い追加された)。条件実行のための4ビットプレディケートが削除されている。メモリポートやバスが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はビットフィールド操作、テーブル分岐や条件付き実行などを含んでいる。従来はThumbモードにおいて使用可能な汎用レジスタは8本のみであり自由度が低かったが、Thumb-2で導入された32ビット長命令では16本全てのレジスタが使用可能である。16ビット長命令と32ビット長命令はモードの切り替えなしで混在可能であるため、ThumbモードにおいてもARMモードに近い自由度が得られるようになった。
| |
− | | |
− | === 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 Framework|.NET]] [[共通中間言語|MSIL]]([[C_Sharp|C#]]など)、[[Python]]、[[Perl]]などの言語である。
| |
− | | |
− | === DSP 拡張命令 ===
| |
− | [[デジタル信号処理]]とマルチメディアアプリケーション向けに ARMアーキテクチャを拡張するため、いくつかの命令が追加された[http://www.arm.com/products/CPUs/cpu-arch-DSP.html]。'''ARMv5TE''' と '''ARMv5TEJ''' というアーキテクチャ名の "E" がこれを表していると思われる。
| |
− | | |
− | 追加された命令は、[[デジタルシグナルプロセッサ]]アーキテクチャで一般的なものである。例えば、符号付積和演算、飽和加算と飽和減算、「先行する0のカウント」のバリエーションである。
| |
− | | |
− | === SIMD ===
| |
− | ARMv6で導入された<ref>[http://www.arm.com/ja/products/processors/technologies/dsp-simd.php DSP & SIMD - ARM]</ref>。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) はインテルが[[XScale]]プロセッサ向けに開発したSIMD命令セットである。64ビット幅のレジスタが16本用意されており、8/16/32/64ビットのSIMD整数演算が可能。XScaleとその売却先であるMarvell製のARM SoCに採用されている。命令セット自体はx86プロセッサのMMXとは全く異なるものの、[[GNUコンパイラコレクション|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 などで利用可能。[[IEEE_754|IEEE754]]準拠の(乗算結果の丸めを行わない)Fused multiply add 対応。VFPv4-D16 もあり。
| |
− | | |
− | "Vector" の名を冠する通り、いくつかの命令においてはベクタモードと呼ばれる1命令で複数のレジスタに対して演算を行うモードが用意されている。このモードを使えば[[SIMD]]演算が可能であるが、プログラミングモデルがやや煩雑<ref>ベクトルレジスタが明示的に用意されておらず、複数のスカラレジスタに対して演算を行う。ベクタ長は固定されておらず、FPSCRという特殊なレジスタで最大8要素までのベクタ長を指定可能。また、レジスタがスカラモードのみで使えるバンクとベクタモードで使えるバンクに分けられており、レジスタの組み合わせに制約がある。</ref>であったことや、当時のARM11プロセッサにおける実装はスカラ命令を要素数分だけシーケンシャルに実行するというSIMD演算のメリットを享受できないものであったため、あまり積極的には使われなかった。VFPv3を実装するARMv7世代以降ではモダンなSIMD命令セットであるAdvanced SIMD拡張命令 (NEON) が導入されたため、現在ではベクタモードの利用は推奨されていない。Cortex-A9やA15ではベクタモードに対応していない<ref>ARMプロセッサのベクタモードへの対応はMVFR0レジスタの24-27ビット目を参照することで確認できる。</ref>ことから分かるように、現在の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ビットにのみ作用する命令として再定義されている。例えば浮動小数点加算命令については
| |
− | <source lang="nasm"> 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)
| |
− | </source>
| |
− | のようなバリエーションが命令のニーモニックを保ちつつ、オペランドのプレフィックス (s, d, v) とサフィックスを変更することによって記述可能になっている(サフィックスについては、一部の環境向けのアセンブラではニーモニック側に付加する省略記法も許されるようである)。これはx86プロセッサのSSE命令セットがスカラ命令とSIMD命令の双方を備えているのとよく似ている。
| |
− | | |
− | == 脚注 ==
| |
− | {{脚注ヘルプ}}
| |
− | {{Reflist|2}}
| |
− | | |
− | == 関連項目 ==
| |
− | * [[μClinux]]
| |
− | * [[ソフィー・ウィルソン]]
| |
− | | |
− | == 外部リンク ==
| |
− | * [http://www.arm.com/ ARM Ltd.]
| |
− | * [http://www.mztn.org/slasm/arm_idx.html Linux Zaurusでアセンブリプログラミング]
| |
− | {{Normdaten}}
| |
− | {{Processor architectures}}
| |
− | {{ARM-based chips}}
| |
− | {{マイクロコントローラ}}
| |
− | | |
− | [[Category:ARMアーキテクチャ|*]]
| |
− | [[Category:マイクロプロセッサ|ARM]]
| |
− | [[Category:コンピュータアーキテクチャ]]
| |