AMD Am29000
AMD Am29000(Am29000、Am29kあるいは29kとも)は、AMDの32ビットRISCマイクロプロセッサ製品、またそれから派生した製品群。
この製品群は、1980年代から1990年代にかけて、多くのメーカーのレーザープリンターに搭載されるなどRISCチップ市場で最も人気を誇った[1]。しかし、1995年、AMDは29kの開発チームをx86互換チップ開発に異動、29kの様々なアイデアや回路がAMD K5の開発に使われた。組込応用市場用にはAm80186から派生した186ファミリを投入した。
特長
レジスタ・ウィンドウ
29kは、バークレーRISC(en:Berkeley RISC)の影響下にあるサン・マイクロシステムズのSPARCやIntel i960と同様、レジスタ・ウィンドウを採用している。これはプロシージャコールを劇的に高速化する技法である。基本的なアイデアは大きなレジスタセットをコールスタックのように使うものである。
元のバークレーの設計もSPARCもi960もレジスタウィンドウのサイズは固定であり性能上の問題を引き起こしていた。たとえば、SPARCではローカル変数をひとつも使用しないルーチンに対しても8本のレジスタが固定的に割り当てられ、ウィンドウオーバーフローの機会を増やし性能悪化の原因となっている。この知見を生かし、Am29000ではウィンドウサイズを可変にすることで効率を向上させた。例えば、2本のレジスタをウィンドウとして、ひとつをローカル変数として使い、もうひとつをリターンアドレス格納に使う。それ以外にも、レジスタ・ウィンドウ用の128本とは別の64本のグローバルレジスタを持っていて常にアクセスできる。SPARCでは全体で8面程度[2]のレジスタ・ウィンドウを持ち、グローバル用に8本のレジスタを使っている。このようなレジスタ構造を、充分に高度なコンパイラを使うことで性能を向上させた。これに対し、Am29000はレジスタ・ウィンドウ・スタックをメモリにまで拡張している。プロシージャコールでレジスタセットを使い切っていると自動的にメモリ上のスタックにレジスタを退避する。逆にプロシージャからのリターンでレジスタセットを使い切るとスタックから復帰する。このように、29kのレジスタはコールスタックのキャッシュのように機能した。[3]
ステータスの格納
29kは条件分岐などに使うステータスレジスタを持たず、多量の汎用レジスタのどれにでも条件を保存でき条件分岐で参照できた。
遅延実行とブランチターゲットキャッシュ
29kも多くの初期のRISCと同じく遅延実行方式を採用した。また、ブランチターゲットキャッシュ(BTC)とよばれる512バイトの命令キャッシュを持ち、これは過去に分岐先となったアドレスのインスタンスをキャッシュすることにより、分岐の際の性能を向上させた。ファミリの中でも、Am29005ではBTCは実装されず、Am29050では1024バイトに増量されていた。[4]
ハーバード・アーキテクチャ
29kは、命令バスとデータバスを分離したハーバードアーキテクチャを採用した。[5]これは、有限のメモリ帯域を命令フェッチとデータアクセスで分離することで、資源の競合/レイテンシーの悪化を回避しスループットを向上する効果がある。同時に、自己書き換えコードが正しく機能しないなどの問題もあるが、29kの主要な応用である組込用途に於いては、自己書き換えコードは不可欠なテクニックではなく問題として顕在化されることは殆どなかった。テンプレート:Main
シリーズ
- マイクロプロセッサ[4]
- マイクロコントローラ[6]
- Am29200 : 32ビットマイクロコントローラ
- Am29202 : ローコスト版(IEEE-1284 パラレルI/F内蔵)
- Am29205 : ローコスト版(16ビットバスインターフェース)
- Am29240 : 4Kバイト命令キャッシュ内蔵、4Kバイトデータキャッシュ内蔵
- Am29243 : DRAM パリティ機能内蔵
- Am29245 : ローコスト版、4Kバイト命令キャッシュ内蔵、
その後
Am29050の後継プロセッサは、スーパースカラ、アウト・オブ・オーダー実行、レジスタ・リネーミングなど、その後のマイクロプロセッサで設計・実装される機能が計画されていた。[7]これは最終的に製品にはならなかったが、x86互換プロセッサであるK5に受け継がれ、FPUはそのまま使われ、x86の命令をマイクロコードにより29000ファミリに似た命令に内部的に変換され実行された。
脚注
- ↑ アドビシステムズが最初に提供したPostScriptインタプリタはAm29000向けに書かれた。
- ↑ SPARCのレジスタ・ウィンドウの深さは実装に依存する
- ↑ トランスピュータの実装などにもスタックトップキャッシュは観られるが、これらはレジスタとしてのアクセス性は提供しておらずフレームレジスタを通じスタックを常に意識する必要がある
- ↑ 4.0 4.1 Am29050 Microprocessor Datasheet 1994(英語)
- ↑ 292xxマイクロコントローラファミリでは、命令とデータは同一バスに置かれた。
- ↑ AMD - Embedded Products Available Literature(英語)
- ↑ Evaluating and Programming the 29K RISC Family Third Edition – DRAFT Mann 1995 20-32