2012-01-12 6 views
8

私はまず、80年代のARM命令セットに出くわしました。好奇心の中で、私はタブレットや他のARMデバイスを見ていて、CPUはさまざまなメーカーによって製造されています。異なるARM製造元が異なる命令セットを提供していますか?

私はクイック検索を行いましたが、異なるARMチップが異なる命令セットを持っているかどうかのように明確なステートメントは見つかりませんでした。

私はそれらがメインで同じであると仮定します。

+1

おそらく、ARMコアのライセンスを取得したチップベンダーの方が正しいでしょう。ほとんどのチップ企業はチップを作る人を雇っていないし、ARMプロセッサを作る人もいないので、ARMからコードを購入してチップ設計に加える。 –

答えて

6

goto http://infocenter.arm.com左下にはARMアーキテクチャがあります。そしてその参照マニュアルの下に。従来は単一のARM ARM(ARMアーキテクチャリファレンスマニュアル)が存在していましたが、そのファミリは、ファミリに分割しなければならないほどに成長しました。

ARM ARMでは、命令セットを表示します。私が彼らがARMv5マニュアルと呼んでいるのは、古いARM ARMです。 ARM命令(32ビット)とサム命令(16ビット)があります。各命令には、どのアーキテクチャでサポートされているかが記載されているので、ARMv5命令(ARMv4 a.k.a ARM7、一般的なARM7TDMIコアなど)はサポートされていません。 Thumb命令はARMv4T以降でサポートされています

したがって、時々追加される新しい命令と固定されたバグ/制限(ldr r0、 r0]など)

浮動小数点ユニットには1つまたは2つのオーバーホールがあり、ほとんどのコアにはfpuはなく、fpuを持つものはチップベンダーがチップに含めるものではありません。 ffaは古い、vfpは新しい、そして今はネオンのものです。注意を払うと、これらはすべて汎用コプロセッサ命令カテゴリに分類されます。しかし、あなたは知っている/彼らはすべてのエイリアスを持っているコプロセッサのバージョンを使用する必要はありません。

このjava/jazelleのことがありますが、オプションのコアがベンダーに含まれているという意味でのコアもあります。

thumb命令セットに対するthumb2拡張の少なくとも2つのセット。 thumb2の拡張の前に、サム命令はすべて16ビットでARM命令への1対1のマッピングを持っていたため、ARMコアのみが必要であると考えてデコーダはより小さな命令をARM命令に変換してコアに送ります。すべての命令は分岐以外の16ビットです。そのパターンを見ると、2つの別々の16ビット命令としてそれを簡単にデコードできます。ちょうど親指の指示http://github.com/dwelch67/thumbulatorで遊びたいなら私はシミュレータbtwを持っています。したがって、ARM7TDMIを使用しているだけでなく、チップサイズと消費電力を消費するマイクロコントローラを小さくすることにしました.SUM2対応プロセッサはサムのみ、32ビットARM命令はサポートしていません。新しいコアに変換されます。 ARMv6-M別名Cortex-m0とCortex-m1は親指の命令セットを取り、いくつかの32ビット命令を追加してARMとのパフォーマンスの差をなくします(親指は小さめですが、同じコードをコンパイルするとARMよりも少し遅くなります)両方とも、私の実験から親指を使用するための指示が10〜20%増えた)。理論的には、thumb-2(ARMv7-M)はARMを比較することができます。何らかの理由でCortex-m3が最初に出ました。これはARMv7-Mであり、サム命令セットに32ビットのサム2命令が追加されています。私は最近カウントし、ARMv6-Mは20のように追加され、ARMv7-Mは140-150の命令がベースサム命令セットに追加されたようなものです。 thumb2は基本的に可変長です。また、皮質-mシリーズでのみ実行されます。それを見ると、サムの名前でARM命令セットを再構築したようなものです。完全ではありませんが、指示のような腕が2つではなく3つのレジスタになり、上位のレジスタに到達してイミディエートを使用できるなど、ARMとthumb/thumb2の両方でコンパイルされたasmを書く必要があります。そこで彼らは統一された構文を思いついた。腕のために組み立てた場合、それは命令で、親指のために組み立てた場合、あなたは彼らが代わりに任意の構文エラーのため、あなたのため

add r0,r0,r1 

に変換します

add r0,r1 

のような命令を書くことができます。少なくともgnu binutilsアセンブラ(ガス)では統一構文を使用するように指定する必要があります。

同様に重要なドキュメントセットは、「技術リファレンスマニュアル」(infocenter.arm.com)でもあります。各コアにはtrmがありますが、実際には各コアの各回転にTRMがあります。また、L2キャッシュのような余分なコスト項目には、それぞれのリビジョンごとに独自のTRMがあります。プログラミングの違いやそれらの間の正誤の違いがあるので、チップベンダーが購入した/使用しているコアと、可能であればリビジョン(rev 2.0 r2p0、rev 1.0 r1p0など)を見つけることが重要です。それは巨大な混乱です、私はまだ別の会社が完全に誤解してコア/エラッタの違いを間違って適用されている、それは少し災害の現時点では)見えるたびに。 TRMには指示情報が含まれている場合もあれば、そのコアがサポートしているものとサポートしていないものを明確に描写するものもあります。 ARM ARMは一般的なものであり、ファミリ全体や多数のコアコアをカバーしています.TRMは1つのコアに特化しています。 ARM ARMとTRMの混乱の例は、ARM ARMを見ると、BE-32またはBE-8ビッグエンディアンモードを使用できるという印象を受けるかもしれませんが、実際にはどちらか一方または両方のARMv6と新しいBE-8、期間、それに慣れる。 ARMv5とARMv4はBE-32またはビッグエンディアンと呼ばれるARMv6より前です。私はあなたがそれから得るかもしれないと思うにもかかわらず、腕にビッグエンディアンを使用しないことを強くお勧めします。ネイティブモードと一緒に行くと、あなたは仕事と失敗のトンを節約できます。私は個人的な経験から、ARM ARMで説明されているビットがなぜ私が使用していたコアで機能しないのかを理解しようとしています。

64ビットコアは開発段階のどこかにありますが、それが完了したら誰かがトリガーを引き出して使用するのを驚かせることはありません。実際にARMv8のドキュメントがダウンロードできます。

ARMアーキテクチャーのinfocenter.arm.comにお答えください。さまざまな命令セットとそれらの命令セットに対する時間の経過に伴う改善/追加について記述したすべてのドキュメントを見つけることができます。

+0

「すべてのサムバリアント」サム命令は、ARMv4Tから少なくともARMv7を介して動作するため、最も移植性があります。私はまだARMv8 64ビットを見ていない。 –

2

命令セットにはいくつかのバリエーションがありますが、UAL、Thumb、Thumb2が最も一般的です。特殊なハードウェア(DSPなど)を含むARMコアの中には、言語を拡張するものもあります。

2

Nop。メーカー間には(命令セットについて)相違はない。 これらはすべてARM仕様を尊重します。

一部の拡張子はオプションです。 これはNEONの場合です。

私が知る限り、Tegra 2だけにこの拡張機能は含まれていません。 これは、tegra 2がビデオデコード(例えば)のための非常に悪いプロセッサである理由です。

関連する問題