AMD Am29000
Der AMD 29000, oft einfach auch 29k, war eine populäre Familie von 32-bit-RISC-Mikroprozessoren, entwickelt von AMD. Die AMD 29000 waren zeitweise die populärsten RISC-Chips auf dem Markt, vielgenutzt in Laserdruckern von vielen Herstellern. Ende 1995 stellte AMD die Entwicklung des 29k ein, weil die Entwicklungsmannschaft zur Unterstützung der PC-Sparte versetzt wurde. Der Rest von AMDs Embedded-Geschäft wurde für die Embedded-186-Familie der 80186-Abkömmlinge neu ausgerichtet. Der Großteil von AMDs Ressourcen wurde auf das Hochleistungs-, x86-Klon-Geschäft konzentriert, das viele Ideen und Teile des letzten 29k nutzte, um den AMD K5 zu produzieren.

Geschichte und Architektur 
Der 29k entwickelte sich aus dem Berkeley-RISC-Design, das auch Sun SPARC und Intel i960 beeinflusste. Ein Trick in allen von der Berkeley abgeleiteten Chip-Designs ist das Konzept des Registerfensters, einer Technik, die benutzt wird, um Prozeduraufrufe signifikant zu beschleunigen. Die Grundidee ist das Benutzen einer großen Anzahl von Prozessorregistern als Stack, die während eines Aufrufs lokale Daten in einen Registersatz lädt und diese als „dead“ markiert, wenn die Prozedur beendet ist. Werte, die von den Routinen zurückgegeben werden, werden in der „global page“ platziert, den oberen acht Registern in SPARC. Es ist interessant anzumerken, dass das konkurrierende frühe RISC-Design der Stanford University, Stanford MIPS, auch dieses Konzept beachtete, jedoch wurde schließlich entschieden, dass fortgeschrittenere Compiler ein effizienteres Nutzen von Allzweckregistern ermöglichen als festverdrahtete Registerfenster, was sich über die Jahre als richtig erwies.

Im ursprünglichen Design von SPARC und i960 gab es eine feste Fenstergröße. Eine Routine mit nur einer lokalen Variablen nutzte gleich acht Register des Prozessors und verschwendete damit diese kostbare Ressource. Der 29k hat dagegen eine variable Fenstergröße. In diesem Beispiel würden nur zwei Register genutzt, einer für die Variable, der andere für die Rückgabeadresse. Auch hatte der 29k mehr Register, einschließlich der 128-Bit-Register für den Prozedur-Stack, als auch 64 mehr für globalen Zugang. Zum Vergleich: Der SPARC hatte insgesamt 128 Register. Diese Änderungen, kombiniert mit einem guten Compiler, führten zum Besten aus beiden Welten an Leistung für Prozeduraufrufe, während man immer noch genug Register für andere Arbeiten zur Verfügung hatte.

Ein weiterer, nicht so außergewöhnlicher Unterschied zu SPARC besteht darin, dass der 29k keine Zustandscode-Register enthielt. Jedes Register konnte für Zustandscodes genutzt werden, was die Zustandssicherung vereinfacht, jedoch zum Preis von eventuell komplizierterem Code. Ein Befehlspuffer für bis zu 16 Instruktionen wurde genutzt, um die Leistung bei Sprüngen zu erhöhen. Der 29k enthielt keine Sprungvorhersage, sodass eine Verzögerung entstand, sobald ein Sprung ausgeführt wurde (auch war der 29k ursprünglich nicht superskalar, sodass er nicht, wie in anderen Designs üblich, „beide Seiten“ ausführen konnte). Der Puffer verminderte dies, indem er vier Instruktionen der „anderen Seite“ des Abzweigs speichern konnte, der sofort laufen konnte, während der Puffer mit Instruktionen aus dem Speicher wiederaufgefüllt wird.

Modelle und Varianten 
Der erste 29k erschien 1988, mit eingebauter MMU, wobei eine Gleitkommaeinheit erst mit dem 29027 kam. Der 29005 war eine abgespeckte Version. Die Serie wurde aufgewertet mit dem 29030 und dem 29035, die einen 8 kB bzw. 4 kB großen Befehls-Cache enthielten. Ein anderes Update integrierte einen Teil der FPU direkt auf dem Die und fügte 4 kB Datencache hinzu, woraus der 29040 entstand.

Die letzte Allzweck-Version war der 29050, der eine vollständige FPU integrierte und dadurch viel bessere Gleitkommaleistung als ältere Versionen hatte.

Die Typen 29000, 29005 und 29050 hatten drei Bussysteme je für Adressen, Daten und Instruktionen, die Typen 29030, 29035 und 2940 hatten zwei Bussysteme je für Adressen und für Daten und Instruktionen.   

Einige Teile des 29050-Designs wurden als Basis für den AMD K5, einen x86-kompatiblen Prozessor, genutzt. Die FPU des 29k wurde hierfür unverändert genutzt, während der Rest des Kerndesigns zusammen mit komplexem Microcode genutzt wurde, um Maschinenbefehle der x86-Architektur zur Laufzeit in 29k-Befehle zu konvertieren.

Modelldaten

Am29000/Am29005 

Technische Daten

 L1-Cache: nicht vorhanden
 Bauform: 168-Pin PQFP oder 169-Pin PGA
 Betriebsspannung (VCore): 5V
 Erscheinungsdatum: ?
 Fertigungstechnik: CMOS
 Taktraten:
 16 MHz (Am29000 und Am29005)
 20, 25, 30 und 33 MHz (nur Am29000)

Am29030/Am29035 

Technische Daten

 16 - oder 32 bittiger Datenbus (programmierbar)
 L1-Cache: 8 KiB Instruktionen (Am29030) oder 4 KiB Instruktionen (Am29035)
 Bauform: 144-Pin CQFP (Keramikgehäuse) oder 145-Pin PGA
 Betriebsspannung (VCore): 5V
 Erscheinungsdatum: ?
 Fertigungstechnik: CMOS
 Taktraten:
 16 MHz (nur Am29035)
 25 und 33 MHz (nur Am29030)

Am29040 

Technische Daten

 Pin- und buskompatibel zum Am29030 und Am29035
 Multiprozessor-fähig
 L1-Cache: 8 KiB Instruktionen, 4 KiB Daten
 Bauform: 144-Pin PQFP (Plastikgehäuse) oder 145-Pin PGA
 Betriebsspannung (VCore): 3,3 V
 Erscheinungsdatum: ?
 Fertigungstechnik: CMOS
 Taktraten:
 33, 40 und 50 MHz

Am29050 

Technische Daten

 Pin- und buskompatibel zum Am29000 und Am29005
 Integrierte Gleitkommaeinheit
 Multiprozessor-fähig
 L1-Cache: 8 KiB Instruktionen, 4 KiB Daten
 Bauform: 169-Pin PGA
 Betriebsspannung (VCore): 5V
 Erscheinungsdatum: ?
 Fertigungstechnik: CMOS
 Taktraten:
 20, 25, 33 und 40 MHz

Weblinks 

 AMD 29k (Streamlined Instruction Processor) ID Guide
 Evaluating and Programming the 29K RISC Family PDF über die 29k-Familie
 chipdb.org Bilder von diversen 29k-Chips

Mikrocontroller
Mikroprozessor
AMD-Prozessor