

AMD Am29000 (一般的に29kと略される)は、 Advanced Micro Devices (AMD)が開発・製造した32ビットRISCマイクロプロセッサおよびマイクロコントローラのファミリーです。先駆的なBerkeley RISCをベースに、29kは数々の重要な改良を加えました。当時、複数のメーカーのレーザープリンタで広く使用されており、初代モデルColor LaserJet(Am29030)からAm29040を搭載したHP Color LaserJet 5まで、ハイエンドのHP Color LaserJetシリーズで広く使用されていたことがよく知られています。
1984年から1985年にかけて開発され、1987年3月に発表され、1988年5月に発売された[ 1 ] [ 2 ] [ 3 ]最初のAm29000に続いていくつかのバージョンが発売され、1995年のAm29040で終了した[ 4 ]。29050は、1サイクルあたり1回の乗算加算演算を実行できる浮動小数点ユニットを早期に搭載したことで注目された。
AMDは1995年後半までスーパースカラ版を設計していましたが、設計チームがPC(x86)事業のサポートに異動したため、29kの開発を中止しました。AMDの組み込み事業の残りは、 80186派生の組み込み186ファミリーに再編されました。その頃には、AMDのリソースの大部分はデスクトップPC向けの高性能x86プロセッサに集中しており、29kの設計の多くのアイデアや個々の部品を使用してAMD K5が開発されました。
29kは、Sun SPARC、Intel i960、ARM、RISC-Vにもつながったのと同じバークレーRISC設計から発展したものである。
バークレーRISC由来の設計の一部で使用されている設計要素の1つに、プロシージャ呼び出しを大幅に高速化するために使用される技術であるレジスタウィンドウの概念があります。このアイデアは、多数のレジスタをスタックとして使用し、呼び出し中にローカルデータをレジスタセットにロードし、プロシージャが戻るときにそれらを「デッド」としてマークするというものです。ルーチンから返される値は、「グローバルページ」、つまりSPARC(たとえば)の上位8つのレジスタに配置されます。スタンフォード大学による競合する初期のRISC設計であるスタンフォードMIPSもこの概念を検討しましたが、改良されたコンパイラはハードワイヤードのウィンドウよりも汎用レジスタをより効率的に使用できると判断しました。
オリジナルのBerkeley設計、SPARC、およびi960では、ウィンドウサイズは固定されていました。ローカル変数を1つだけ使用するルーチンでも、SPARCでは8つのレジスタを消費し、この高価なリソースを無駄にしていました。29kは、可変ウィンドウサイズを使用することで、これらの以前の設計と異なっていました。この例では、ローカル変数用とリターンアドレス用の2つのレジスタのみが使用されます。また、プロシージャスタック用の128個のレジスタに加えて、グローバルアクセス用に64個のレジスタを追加するなど、レジスタ数も増加しました。これに対し、SPARCは合計128個のレジスタを持ち、グローバルセットは標準の8個のウィンドウでした。この変更により、29000ではさまざまなワークロードにおいてレジスタの使用効率が大幅に向上しました。
29kはレジスタウィンドウスタックを拡張し、メモリ内(理論的にはキャッシュ内)スタックも備えていた。ウィンドウがいっぱいになると、呼び出しはレジスタスタックの末尾からメモリにプッシュされ、ルーチンが戻る際に必要に応じて復元された。一般的に、29kのレジスタ使用方法は、バークレーの概念に基づいた競合設計よりもはるかに高度であった。

Berkeley 設計とのもう 1 つの違いは、29k では条件コードの使用を避けていたことです。29k は算術演算と論理演算の後に標準の NZVC フラグを生成しますが、その使用はキャリー付き加算と減算命令のみでした。条件分岐は、汎用レジスタの最上位 (符号) ビットでの分岐に限定されており、これは一連の比較命令 (「符号付きより大きい」または「等しい」など) のいずれかによって設定できました。この目的には任意のレジスタを使用できたため、一部のコードが複雑になるという代償を払うことで、条件を簡単に保存できました。分岐ターゲット キャッシュ (29000 では 512 バイト、29050 では 1024 バイト) には、分岐ターゲット アドレスで見つかった 4 個または 2 個の連続した命令のセットが格納され、分岐実行時の命令フェッチの遅延が短縮されました。29000には分岐予測システムが含まれていなかったため、分岐が実行されると遅延が発生しました。つまり、29000 には 1 つの分岐遅延スロットがありました。[ 5 ]バッファは、分岐先のアドレスから 4 つまたは 2 つの命令を格納することでこれを緩和し、フェッチ バッファがメモリから新しい命令で再充填されている間に、それらを即座に実行できるようにした。[ 6 ]
仮想アドレス変換のサポートは、MIPSアーキテクチャと同様のアプローチを採用した。64エントリの変換ルックアサイドバッファ(TLB)は、仮想アドレスから物理アドレスへのマッピングを保持し、未変換のアドレスが検出されると、結果として生じるTLBミスによってプロセッサは、物理メモリへの適切なマッピングを提供するソフトウェアルーチンにトラップされる。TLBミス発生時に置換するTLBエントリを選択するためにランダムレジスタを使用するMIPSのアプローチとは対照的に、29000は専用のLRU(最も使用頻度の低い)レジスタを提供した。[ 7 ] 29000ファミリの一部の製品は、シリコンの一部を周辺機器に割り当てるために、TLBエントリを16個しか提供しなかった。これを補うために、マッピングで使用される最大ページ サイズは8KBから16MBに増加された 。[ 8 ] : 305–306
最初の Am29000 は 1988 年にリリースされ、 MMUが内蔵されていましたが、浮動小数点サポートはAm29027 FPUにオフロードされていました。MMU またはブランチターゲットキャッシュに障害が発生したユニットは、 Am29005として販売されました。[ 6 ]
1991年に、このラインはAm29030とAm29035で拡張され、それぞれ8KBまたは4KBの命令キャッシュが含まれていました。 [ 9 ]その頃には[ 10 ] 、オンチップキャッシュはないものの、完全にパイプライン化された乗算累積演算を備えた浮動小数点ユニット、ヒット率が80%とされるより大きな1KBの分岐ターゲットキャッシュ、4エントリのTLBのような物理アドレスキャッシュによって高速化されたパイプライン化されたロード演算を特徴とするAm29050も利用可能になっていました。スーパースカラプロセッサではありませんが、浮動小数点演算と整数演算を同じサイクルで完了させることができます。整数側と浮動小数点側はそれぞれレジスタへの独自の書き込みポートを持っています。[ 11 ] 1ミクロンプロセス[ 13 ]で428,000個のトランジスタ[ 12 ]を搭載し、実効チャネル長は0.8ミクロン[ 11 ]で、20、25、33、40 MHzで利用可能でした。後にAm29040が33、40、50 MHzでリリースされました。これは、4 KBのデータキャッシュ、乗算ユニット、およびその他のいくつかの機能強化を除けばAm29030と同様です。[ 14 ] 119 mm 2のAm29040は、0.7ミクロンプロセスで120万個のトランジスタを搭載していました。[ 15 ] [ 16 ]
29K のスーパースカラ版が設計されていたが、x86 を優先して中止された。コードネームはJaguar [ 3 ]で、1994 年 11 月と 1995 年 8 月に説明された。[ 17 ] [ 18 ] 6 つの予約ステーションへの4 方向ディスパッチと、 4 方向リタイアによる命令の投機的アウトオブオーダー実行が可能な先進的な設計だった。レジスタ ファイルでは、一度に 4 つの読み出しと 2 つの書き込みが可能だった。命令とデータのキャッシュはそれぞれ 8 KB だった。キャッシュからのロードはストアをバイパスできた。コスト上の理由とターゲット市場のため、オンチップ FPU は搭載されていなかった。0.4 ミクロン プロセスで 100 MHz の周波数を達成すると予想されていた。[ 17 ] [ 19 ]
AMDは、未発表の29Kマイクロアーキテクチャをベースに、x86互換プロセッサのK5シリーズを開発した。ALUはそのまま引き継がれ、リオーダーバッファも若干の変更が加えられた。FPUは29050から流用されたが、精度は80ビットに拡張された。K5は、デコード時にキャッシュされた命令のプリデコード情報を利用して、x86命令を「RISC-OP」に変換した。AMDは、スーパースカラ29KはK5よりわずかに性能が劣るものの、サイズの違いによりコストは大幅に削減できると主張した。[ 20 ] [ 17 ]
Honeywell 29KIIはAMD 29050をベースにしたCPUで、リアルタイム航空電子機器に広く使用されていました。
Unixワークステーションでの使用の可能性を秘めた「中~高性能組み込みアプリケーション」向け製品として位置づけられた29000 は、X 端末、レーザープリンタコントローラ カード、グラフィックス アクセラレータカード、光学文字認識ソリューション、ネットワーク ブリッジなど、さまざまな製品で使用されました。[ 7 ] [ 21 ] 29000 のメモリ アーキテクチャは、製品設計者にとって特に魅力的でした。外部キャッシュ メモリを不要にし、許容可能なパフォーマンスを維持しながら動的 RAM を直接使用できるため、プログラム命令とデータを保持するために使用されるメモリ テクノロジーの選択に一定の柔軟性がもたらされました。[ 22 ]
29k は、特に Macintosh および IBM PC 互換プラットフォームで、計算アクセラレータまたはコプロセッサとして使用されました。たとえば、Yarc Systems Corporation は、Macintosh IIおよびPC ATシステム用の 29k ベースの「RISC コプロセッサ」カードを製造しました。その他にも、Motorola 68020および68030プロセッサを搭載した「 CISCコプロセッサ」カードや、T800トランスピュータプロセッサを搭載した「パラレル コプロセッサ」カードも製造しました。[ 23 ] Am29000 CPU と Am29027 浮動小数点アクセラレータを採用したNuSuper (当初はMcCray [ 24 ]と呼ばれていました) およびAT-Superカード[ 23 ]に続いて、 CPU を Am29050 にアップグレードしたMacRageousが登場しました。 [ 25 ]このようなアクセラレータカードは、Macintosh II 本体の数倍の性能を提供し、DECstation 3100 などの RISC ワークステーションと競合するベンチマーク結果を示しました。複数のカードをシステムに搭載することもできました。しかし、このようなカードを搭載した Macintosh II システムのコストは、Unix を実行する既存の RISC ワークステーションのコストに近づきました。[ 26 ] AT-Super の価格は約 4,600 ドルで、Unix が動作し、Intel のi860プロセッサを採用した同様の製品と競合すると報告されていました。[ 27 ]
29k を利用した注目すべき製品の 1 つは、Apple のMacintosh IIfx用Macintosh Display Card 8·24 GCで、30 MHz Am29000 プロセッサ、64 KB のスタティック RAMキャッシュ、2 MB のビデオ RAMを搭載し、 QuickDrawグラフィック ツール キットで使用するための追加の 2 MB のダイナミック RAMのオプションがありました。29k の搭載により、この特定のバージョンのカードは Apple が販売する他のバージョンと差別化され、 24 ビット/ピクセルの画像を処理する際のパフォーマンスが大幅に向上しました。[ 28 ]
ええ、それは85年に始まりました。そして、機能するまでには約3年と4回の改良が必要だったと思います。