削除された内容 追加された内容
{{マイクロコントローラ}}
説明追加、用語統一
1行目:
[[ファイル:AMD Am29000-16GC.jpg|right|thumb|AMD 29000マイクロプロセッサ]]
'''AMD Am29000'''('''Am29000'''、'''Am29k'''あるいは'''29k'''とも)は、[[アドバンスト・マイクロ・デバイセズ|AMD]]の32ビット[[RISC]][[マイクロプロセッサ]]製品、またそれから派生した製品群。以下本稿では製品群全体、または製品としてのAm29000につき'''Am29k'''という
 
この製品群は、1980年代から1990年代にかけて、[[PostScript|Postscript]][[インタプリタ]]と組み合わせて多くのメーカーの[[レーザープリンター]]に搭載されるなどRISCチップ市場で最も人気を誇った<ref>[[アドビシステムズ]]が最初に提供した[[PostScript]]インタプリタはAm29000向けに書かれた。</ref>。しかし、1995年、AMDは29kAm29kの開発チームを[[x86]]互換チップ開発に異動させ29kAm29kシリーズは終焉を迎えた。Am29kの様々なアイデアや回路が[[AMD K5]]の開発に使われた。組込応用市場用にはAm80186から派生した186ファミリを投入した。
 
== 特長 ==
=== レジスタ・ウィンドウ ===
29kAm29kは、バークレーRISC([[:en:Berkeley RISC]])の影響下にある[[サン・マイクロシステムズ]]の[[SPARC]]や[[Intel i960]]と同様、[[レジスタ・ウィンドウ]]を採用している。これは[[関数 (プログラミング)|プロシージャコール]]を劇的に高速化する技法である。基本的なアイデアは大きな[[レジスタ (コンピュータ)|レジスタ]]セットを[[コールスタック]]のように使うものである。
 
元のバークレーの設計もSPARCもi960もレジスタウィンドウのサイズは固定であり性能上の問題を引き起こしていた。たとえば、SPARCではローカル変数をひとつも使用しないルーチンに対しても8本のローカルレジスタと8本の引数引渡しのレジスタが固定的に割り当てられウインドウを1面消費する。プロシージャコールが深くなるに伴い使用するウインドウ数が嵩んでウィンドウオーバーフローの機会増や引き起こ性能悪化の原因となっている。この知見を生かし、Am2900029kではウィンドウサイズを可変にすることで効率を向上させた。レジスタ・ウィンドウ用に備えられた128本のレジスタにつき、ひとつのプロシージャでは例えば、2本のレジスタをウィンドウとして、ひとつをローカル変数として使い、もうひとつをリターンアドレス格納に使って4本のレジスタのみを消費するそれ以外にも、レジスタ・ウンドウ用の128本とは別64本のグローバルレジスタ持っており、ずれのプロシージャからも常にアクセスできる。SPARCでは全体で8面程度<ref>SPARCのレジスタ・ウィンドウの深さは実装に依存する</ref>のレジスタ・ウィンドウを持ち、グローバル用に8本のレジスタを使っている。このようなレジスタ構造を、充分に高度なコンパイラを使うことで、このようなレジスタ構造に適したコードを生成し性能を向上させた。これに対し、Am29000Am29kはレジスタ・ウィンドウ・スタックをメモリにまで拡張している。プロシージャコールでレジスタセットを使い切っていると自動的にメモリ上のスタックにレジスタを退避する。逆にプロシージャからのリターンでレジスタセットを使い切るとスタックから復帰する。このように、29kAm29kのレジスタはコールスタックのキャッシュのように機能した<ref>[[トランスピュータ]]の実装などにもスタックトップキャッシュは観られるが、これらはレジスタとしてのアクセス性は提供しておらずフレームレジスタを通じスタックを常に意識する必要がある</ref>
 
=== ステータスの格納 ===
29k他の典型的なCPUでは条件分岐などの判断使う供する[[ステータスレジスタ]]を持つが、Am29kはこれを持たず、多の汎用レジスタのいずでも条件を保存判断に供することができ条件、その内容で分岐で参照の可否を判断でき
 
=== 遅延実行とブランチターゲットキャッシュ ===
29kAm29kも多くの初期のRISCと同じく遅延実行方式を採用した。また、ブランチターゲットキャッシュ(BTC)とよばれる512バイトの[[命令キャッシュ]]を持ち、これは過去に分岐先となったアドレスのインスタンスをキャッシュすることにより、分岐の際の性能を向上させた。ファミリの中でも、Am29005ではBTCは実装されず、Am29050では1024バイトに増量されていた<ref name="am29050">[http://www.amd.com/epd/29k/050_ds/050_ds.pdf Am29050 Microprocessor Datasheet 1994](英語)</ref>
 
=== ハーバード・アーキテクチャ ===
29kAm29kは、命令バスとデータバスを分離したハーバードアーキテクチャを採用した<ref>292xxマイクロコントローラファミリでは、命令とデータは同一バスに置かれた。</ref>これは、有限のメモリ帯域を命令フェッチとデータアクセスで分離することで、資源の競合/レイテンシーの悪化を回避しスループットを向上する効果がある。同時に、[[自己書き換えコード]]が正しく機能しないなどの問題もあるが、29kAm29kの主要な応用である組込用途に於いては、自己書き換えコードは不可欠なテクニックではなく問題として顕在化されることは殆どなかった。{{Main|ハーバード・アーキテクチャ}}
 
== シリーズ ==
36行目:
 
== その後 ==
Am29050の後継プロセッサは、[[スーパースカラ]]、[[アウト・オブ・オーダー実行]]、[[レジスタ・リネーミング]]など、その後の[[マイクロプロセッサ]]で設計・実装される機能が計画されていた<ref>[http://www.amd.com/epd/29k/29kprog/29kprog.pdf Evaluating and Programming the 29K RISC Family Third Edition – DRAFT] Mann 1995 20-32</ref>これは最終的に製品にはならなかったが、x86互換プロセッサである[[AMD K5|K5]]に受け継がれ、FPUはそのまま使われ、x86の命令を[[マイクロプログラム方式|マイクロコード]]により29000ファミリに似た命令に内部的に変換され実行された。
 
== 脚注 ==
<references />
 
== 参考 ==
{{AMD_processors}}
[http://ascii.jp/elem/000/000/642/642559/ ロードマップでわかる!当世プロセッサー事情 ― 第122回『CPU黒歴史 対Pentiumのために放棄されたAm29000』]{{AMD_processors}}
{{Processor architectures}}
{{マイクロコントローラ}}