Computer/CPU

AMD Am2900 [AMD / 1987]

AICAT 2024. 10. 31. 07:00
반응형

AMD Am29000, 흔히 29k로 줄여 부르는 이 제품군은 Advanced Micro Devices(AMD)에서 개발하고 제작한 32비트 RISC 마이크로프로세서 및 마이크로컨트롤러이다. 이 제품은 초기 Berkeley RISC를 기반으로 하여 여러 중요한 개선 사항을 추가했다. 한때, 29k는 시장에서 가장 인기 있는 RISC 칩으로, 다양한 제조업체의 레이저 프린터에 널리 사용되었다.

 

1984-1985년부터 개발이 시작되어 1987년 3월에 발표되고 1988년 5월에 출시된 초기 Am29000은 여러 버전이 뒤따랐으며, 1995년 Am29040으로 끝났다. 29050는 사이클당 하나의 곱셈-덧셈 연산을 실행할 수 있는 부동소수점 유닛을 조기에 탑재한 것으로 주목받았다.

 

AMD는 1995년 말까지 슈퍼스칼라 버전을 설계하고 있었으나, 29k 개발을 중단하고 설계 팀을 PC(x86) 쪽 사업 지원으로 전환했다. 이후 AMD의 임베디드 사업은 80186 파생 제품군인 임베디드 186 쪽으로 재편되었다. 그 시점에서 AMD의 대부분 자원은 고성능 x86 프로세서, 즉 AMD K5를 생산하는 데 집중되었다.

 

디자인 29k는 Sun SPARC, Intel i960, ARM 및 RISC-V와 같은 Berkeley RISC 디자인에서 발전했다.

 

Berkeley RISC 유래 설계의 일부 요소 중 하나는 프로시저 호출을 크게 빠르게 만드는 레지스터 윈도우 개념이다. 이 개념은 큰 레지스터 세트를 스택처럼 사용하여 호출 시 로컬 데이터를 레지스터 세트에 로드하고, 프로시저가 반환될 때 이를 "사망"으로 표시하는 것이다. SPARC의 경우와 같이 반환되는 값은 "글로벌 페이지"에 배치된다. 경쟁하는 초기 RISC 설계인 Stanford University의 Stanford MIPS도 이 개념을 살펴보았으나, 개선된 컴파일러가 범용 레지스터를 더 효율적으로 사용할 수 있다고 판단하여 하드와이어된 윈도우 대신 컴파일러를 선택했다.

 

원래 Berkeley 디자인, SPARC 및 i960에서는 윈도가 고정 크기였다. 하나의 로컬 변수만 사용하는 루틴도 SPARC에서는 여덟 개의 레지스터를 사용하게 되어 이 비싼 자원이 낭비되었다. 29000은 이러한 초기 디자인과 달리 가변 윈도 크기를 사용하여, 이 예에서 두 개의 레지스터만 사용할 수 있도록 하였다. 하나는 로컬 변수를 위한 것이고, 다른 하나는 반환 주소를 위한 것이다. 29000은 128개의 레지스터를 프로시저 스택에 추가하고, 또 다른 64개를 글로벌 액세스를 위해 추가하였다. SPARC는 총 128개의 레지스터를 가지고 있으며, 글로벌 세트는 표준 윈도인 여덟 개이다. 이러한 변화로 인해 29000의 레지스터 사용 효율은 다양한 작업 부하에서 상당히 개선되었다.

 

29000은 또한 메모리(이론상 캐시 내)에 레지스터 윈도 스택을 확장했다. 윈도가 가득 차면 호출은 레지스터 스택의 끝에서 메모리로 밀려났다가, 루틴이 반환될 때 필요에 따라 복원되었다. 일반적으로 29000의 레지스터 사용은 Berkeley 개념에 기반한 경쟁 설계보다 훨씬 진보된 것으로 평가받는다.

 

Berkeley 디자인과의 또 다른 차이점은 29000이 특별한 목적의 조건 코드 레지스터를 포함하지 않았다는 점이다. 어떤 레지스터도 이 용도로 사용될 수 있어 조건을 쉽게 저장할 수 있지만, 일부 코드가 복잡해질 수 있다. 29000에서는 512바이트, 29050에서는 1024바이트의 분기 타겟 캐시가 있어, 분기 타겟 주소에서 발견된 4개 또는 2개의 연속된 명령어 세트를 저장하여, 분기가 발생했을 때 명령어 페치 지연 시간을 줄였다. 29000은 분기 예측 시스템을 포함하지 않아, 분기가 발생하면 지연이 있었다. 이는 29000이 단일 분기 지연 슬롯을 가진다는 것을 의미한다. 이 버퍼는 분기 타겟 주소에서 네 개 또는 두 개의 명령어를 저장하여, 메모리에서 새로운 명령어를 다시 가져오는 동안 즉시 실행할 수 있도록 했다.

 

가상 주소 변환 지원은 MIPS 아키텍처와 유사한 방식으로 이루어졌다. 64개의 항목을 가진 변환 참조 버퍼(TLB)는 가상 주소와 물리 주소 간의 매핑을 유지하며, 변환되지 않은 주소가 발생할 경우 TLB "미스"가 발생하여 프로세서가 적절한 물리 메모리 매핑을 제공하는 소프트웨어 루틴으로 트랩된다. MIPS 방식이 TLB 미스 이벤트 발생 시 대체할 TLB 항목을 선택하기 위해 무작위 레지스터를 사용하는 반면, 29000은 전용 LRU(최소 최근 사용) 레지스터를 제공했다. 29000 제품군의 일부는 주변 장치에 실리콘의 일부를 할당하기 위해 단 16개의 TLB 항목만 제공했다. 이를 보완하기 위해 매핑에 사용되는 최대 페이지 크기는 8KB에서 16MB로 증가했다.

 

첫 번째 Am29000은 1988년에 출시되었으며, 내장 MMU를 포함하고 있었지만 부동소수점 지원은 Am29027 FPU로 분산되었다. MMU나 분기 타겟 캐시가 실패한 유닛은 Am29005로 판매되었다.

 

1991년에는 Am29030과 Am29035가 추가되어 각각 8 KB 또는 4 KB의 명령어 캐시를 갖추게 되었다. 그 시점에 Am29050도 출시되었는데, 온칩 캐시는 없지만 완전히 파이프라인화된 곱셈-누산 연산을 지원하는 부동소수점 유닛, 80%의 히트율을 자랑하는 1 KB의 더 큰 분기 타겟 캐시, 그리고 4-entry TLB 유사 물리 주소 캐시로 속도가 향상된 로드 작업을 특징으로 했다. 비록 슈퍼스칼라 프로세서는 아니지만, 부동소수점 작업과 정수 작업이 같은 사이클 내에 완료될 수 있었다. 정수와 부동소수점 부분은 각각 레지스터에 대한 별도의 쓰기 포트를 가지고 있었다. 이 프로세서는 1마이크론 공정에서 428,000개의 트랜지스터를 포함하고 있으며, 0.8마이크론의 유효 채널 길이를 가졌다. 20, 25, 33, 40 MHz에서 사용할 수 있었다. 이후 Am29040이 33, 40, 50 MHz에서 출시되었으며, Am29030과 유사하지만 4 KB 데이터 캐시, 곱셈 유닛, 그리고 몇 가지 추가 향상을 특징으로 했다. 119 mm² 크기의 Am29040은 0.7마이크론 공정에서 120만 개의 트랜지스터를 포함하고 있다.

 

29K의 슈퍼스칼라 버전이 설계 중이었으나 x86 지원을 위해 취소되었다. 이 프로젝트는 Jaguar라는 코드명으로, 1994년 11월과 1995년 8월에 설명되었다. 이 디자인은 네 방향으로 배치할 수 있으며 여섯 개의 예약 스테이션과 비순차적인 아웃 오더 실행을 지원하는 고급 디자인으로, 네 방향으로 완료할 수 있었다. 레지스터 파일은 한 번에 네 개의 읽기와 두 개의 쓰기를 허용했다. 명령어와 데이터 캐시는 각각 8 KB였다. 캐시에서의 로드는 저장을 우회할 수 있었다. 비용 문제와 목표 시장으로 인해 온칩 FPU는 없었다. 이 프로세서는 0.4마이크론 공정에서 100 MHz의 주파수에 도달할 것으로 예상되었다.

AMD는 출시되지 않은 29K 마이크로아키텍처를 K5 시리즈의 x86 호환 프로세서 기반으로 사용했다. ALU는 그대로 이어졌고, 약간 수정된 재주문 버퍼도 포함되었다. FPU는 29050에서 가져온 것이지만 80비트 정밀도로 확장되었다. K5는 디코딩 시 x86 명령어를 "RISC-OPs"로 변환했으며, 캐시된 명령어의 프리디코드 정보를 활용했다. AMD는 슈퍼스칼라 29K가 K5보다 성능이 약간 낮을 것이라고 주장했지만, 크기 차이로 인해 비용은 훨씬 낮을 것이라고 밝혔다.

 

Honeywell 29KII는 AMD 29050을 기반으로 한 CPU로, 실시간 항공 전자기기에서 광범위하게 사용되었다.


 

The AMD Am29000, commonly referred to as 29k, is a family of 32-bit RISC microprocessors and microcontrollers developed by Advanced Micro Devices (AMD).

 

Based on the Berkeley RISC design, the 29k incorporated significant improvements and became popular in laser printers from various manufacturers.

 

Development began in 1984-1985, with an announcement in March 1987 and release in May 1988. The initial Am29000 was followed by several versions, concluding with the Am29040 in 1995. The 29050 was notable for featuring an early floating-point unit capable of one multiply-add operation per cycle.

 

AMD was working on a superscalar version until late 1995 but shifted focus to support x86 architecture. As a result, resources were redirected to the embedded 186 family, and the 29k's design ideas were used in the AMD K5 processors.

Design

The 29k evolved from Berkeley RISC designs, like SPARC and MIPS. A key feature was the use of variable-sized register windows, improving register efficiency compared to fixed-size implementations. The 29000 also included an in-memory stack for register windows, enhancing performance.

 

Unlike other Berkeley designs, the 29000 had no dedicated condition code register, allowing any register to serve that purpose. It featured a Branch Target Cache to mitigate instruction fetch delays during branch operations, with a translation lookaside buffer (TLB) for virtual address translation.

Versions

The first Am29000 included an MMU, with floating-point support provided by the Am29027 FPU. The line expanded in 1991 with the Am29030 and Am29035, introducing instruction caches. The Am29050 offered pipelined floating-point operations and a larger Branch Target Cache.

 

A superscalar version, codenamed Jaguar, was in development but was canceled in favor of x86. This design could execute multiple instructions out of order and was expected to achieve high frequencies on a smaller process.

 

AMD leveraged the unreleased 29k architecture in the K5 series, enhancing its capabilities. The Honeywell 29KII, based on the AMD 29050, found extensive use in real-time avionics.


AMD Am29000(一般に29kと略される)は、Advanced Micro Devices(AMD)によって開発・製造された32ビットRISCマイクロプロセッサおよびマイクロコントローラのファミリーです。初期のBerkeley RISCに基づき、29kは多くの重要な改良が加えられました。一時期、これらは市場で最も人気のあるRISCチップであり、さまざまなメーカーのレーザープリンタで広く使用されました。

 

1984年から1985年にかけて開発が始まり、1987年3月に発表され、1988年5月にリリースされました。最初のAm29000は、1995年のAm29040までいくつかのバージョンが続きました。29050は、サイクルごとに1つの乗算加算操作を実行できる浮動小数点ユニットを初めて搭載したことで注目されました。

 

AMDは1995年末までにスーパースカラーバージョンを設計していましたが、設計チームがPC(x86)部門のサポートに移されたため、29kの開発を中止しました。それ以降、AMDの組み込みビジネスの残りは80186派生の組み込み186ファミリーに再編成されました。この頃、AMDのリソースの大部分は、デスクトップPC向けの高性能x86プロセッサに集中しており、29kの設計の多くのアイデアや部品がAMD K5の生産に活用されました。

 

設計 29kは、Sun SPARC、Intel i960、ARM、RISC-VなどのBerkeley RISC設計から進化したものです。

 

Berkeley RISC派生設計で使用されるデザイン要素の1つは、レジスタウィンドウの概念です。これは、手続き呼び出しの速度を大幅に向上させる技術です。手続き呼び出し時にローカルデータをレジスタのセットにロードし、手続きが戻るとそれを「無効」としてマークします。戻り値は、SPARCのトップ8レジスタの「グローバルページ」に配置されます。スタンフォード大学の競合する初期RISC設計であるスタンフォードMIPSもこの概念を検討しましたが、改善されたコンパイラが一般目的レジスタをより効率的に利用できると判断し、ハードワイヤードウィンドウは採用しませんでした。

 

元のBerkeley設計、SPARC、およびi960では、ウィンドウは固定サイズでした。ローカル変数が1つしかないルーチンでも、SPARCでは8つのレジスタを使用するため、リソースが無駄になってしまいます。29000はこの点で異なり、可変サイズのウィンドウを使用しました。この例では、ローカル変数用の1つのレジスタと、戻りアドレス用のもう1つのレジスタのみが使用されます。29000は、手続きスタック用に128レジスタを持つだけでなく、グローバルアクセス用に64レジスタを追加しました。これに対し、SPARCは合計128レジスタを持ち、グローバルセットは標準ウィンドウの8レジスタでした。この変更により、29000はさまざまなワークロードにおいて、レジスタの使用が大幅に向上しました。

 

29000はまた、メモリ内(理論的にはキャッシュ内)のスタックでレジスタウィンドウスタックを拡張しました。ウィンドウがいっぱいになると、呼び出しがレジスタスタックの末尾からメモリにプッシュされ、ルーチンが戻ったときに必要に応じて復元されます。一般に、29000のレジスタ使用は、Berkeley概念に基づく競合設計よりもはるかに進んでいました。

 

AMD 29040 Berkeley設計とのもう1つの違いは、29000に特殊目的の条件コードレジスタが含まれていないことです。任意のレジスタをこの目的に使用できるため、条件を簡単に保存できますが、いくつかのコードが複雑になります。ブランチターゲットキャッシュ(29000では512バイト、29050では1024バイト)は、ブランチターゲットアドレスで見つかった4つまたは2つの連続命令のセットを保存し、分岐が行われた際の命令フェッチのレイテンシを低減しました。29000には分岐予測システムが含まれていないため、分岐が行われると遅延が生じます。これにより29000は単一のブランチ遅延スロットを持ちます。このバッファは、ブランチのターゲットアドレスから4つまたは2つの命令を保存することで、メモリから新しい命令を再取得する間に即座に実行できるようにします。

 

仮想アドレス変換のサポートは、MIPSアーキテクチャと同様のアプローチを採用しています。64エントリのトランスレーションルックアサイドバッファ(TLB)が仮想アドレスから物理アドレスへのマッピングを保持し、未翻訳のアドレスが発生すると、TLBの「ミス」により、適切な物理メモリへのマッピングを提供するためのソフトウェアルーチンにトラップします。MIPSのアプローチはTLBエントリの置き換えにランダムレジスタを使用するのに対し、29000は専用のLRU(最も最近使用されていない)レジスタを提供しました。29000ファミリーの一部の製品は、周辺機器に半導体の一部を割り当てるために、16のTLBエントリのみを提供しました。これを補うために、マッピングによって使用される最大ページサイズは8 KBから16 MBに増加しました。

 

バージョン 最初のAm29000は1988年にリリースされ、MMUを内蔵していましたが、浮動小数点サポートはAm29027 FPUにオフロードされました。MMUまたはブランチターゲットキャッシュが失敗したユニットは、Am29005として販売されました。

 

1991年には、Am29030およびAm29035が追加され、各々8 KBまたは4 KBの命令キャッシュを搭載しました。この時点で、Am29050も登場しており、オンチップキャッシュは搭載していないものの、完全パイプライン化された乗算加算操作を持つ浮動小数点ユニット、より大きな1 KBのブランチターゲットキャッシュ、より良くパイプライン化されたロード操作を高速化する4エントリのTLBライクな物理アドレスキャッシュを特徴としていました。これはスーパースカラープロセッサではありませんが、浮動小数点操作と整数操作が同じサイクルで完了することを許可しました。整数側と浮動小数点側はそれぞれ独自のレジスタへの書き込みポートを持っています。428,000トランジスタを1ミクロンプロセスで製造され、0.8ミクロンの有効チャネル長を持ち、20、25、33、40 MHzで利用可能でした。後にAm29040が33、40、50 MHzでリリースされ、Am29030に似ていますが、4 KBのデータキャッシュ、乗算ユニット、およびいくつかの他の強化が加えられています。119 mm²のAm29040は0.7ミクロンプロセスで120万トランジスタを含みました。

 

29Kのスーパースカラーバージョンが設計されていましたが、x86のためにキャンセルされました。これはジャガーと呼ばれ、1994年11月と1995年8月に説明されました。これは、4-way dispatchを6つの予約ステーションに行い、命令の推測的アウトオーダー実行が可能な高度な設計で、4-way retireを実現していました。レジスタファイルは同時に4つの読み込みと2つの書き込みを許可しました。命令とデータのキャッシュはそれぞれ8 KBでした。キャッシュからのロードはストアをバイパスできました。コストの理由とターゲット市場のため、オンチップのFPUはありませんでした。100 MHzの周波数を0.4ミクロンプロセスで達成することが期待されていました。

 

AMDは、未発表の29KマイクロアーキテクチャをK5シリーズのx86互換プロセッサの基盤として使用しました。ALUはそのまま引き継がれ、再注文バッファはわずかな修正が加えられました。FPUは29050から取得され、80ビットの精度に拡張されました。K5は、デコード時にx86命令を「RISC-OP」に変換し、キャッシュされた命令のプリデコード情報によって補助されました。AMDは、スーパースカラ29KがK5よりもわずかに低いパフォーマンスしか発揮しないが、サイズの違いによりはるかに低コストであると主張しました。

 

Honeywell 29KIIは、AMD 29050に基づくCPUで、リアルタイムの航空電子工学で広く使用されました。

반응형