Am29000
# Am29000

La serie di processori Am29000 sono processori RISC a 32 bit, di progetto simile al Berkeley RISC, all'IBM 801 ed ovviamente anche allo SPARC, diretto discendente del Berkeley RISC che apparve sul mercato poco dopo l'Am29000.

## Storia

Fu creata dalla AMD come successore moderno della serie Am2900 destinato a fronteggiare la concorrenza degli analoghi i960 della Intel e 68020 e 68030 di Motorola: I punti di forza di questa famiglia di processori erano una gestione degli interrupt estremamente veloce e una commutazione di contesto (task switching) altrettanto rapida, che li rendevano molto adatti ad essere impiegati come microcontroller e per dispositivi embedded, ruolo per cui riscossero un vasto successo. Dal 1995 in poi la AMD abbandonò questa famiglia di processori per concentrarsi sulla produzione di processori x86 compatibili, il cui mercato era molto più ricco. Il lavoro di sviluppo della serie Am29000 venne travasato nel progetto dell'AMD K5, che traduceva internamente le istruzioni IA32 in istruzioni RISC che venivano eseguite in parallelo a blocchi di cinque dalle unità interne RISC del processore.

## Architettura

Esamineremo qui solo l'Am29000 vero e proprio: la famiglia contiene molti altri processori, che però sono variazioni di questo.

L'Am29000 disponeva di 192 registri a 32 bit, di cui 64 globali e 128 locali, che potevano essere gestiti con la tecnica della register window in finestre di dimensione variabile; la finestra di registri corrente era indicata da un apposito registro, simile al registro ISAR del Fairchild F8, che simulava lo stack in memoria dei processori CISC. Questo schema garantiva una flessibilità di uso dei registri che ne facilitava l'allocazione da parte dei compilatori. Era dotato di tre bus indipendenti: uno per gli indirizzi, uno per i dati e uno per le istruzioni (ma esisteva una più tradizionale versione a due bus, l'Am29030): aveva una MMU incorporata ed era dotato di 512 bytes di cache interna (le versioni a due bus ne avevano 4K). Integrava un interrupt controller e un timer.

Durante gli interrupt i registri non venivano salvati, lasciando il compito alla routine di servizio dell'interrupt. Se necessario i registri potevano venire protetti dalla scrittura a blocchi di 4. Le frequenze di clock disponibili andavano da 16 a 40 MHz.

Le memorie preferenziali erano le DRAM video in grado di gestire i dati molto velocemente con la tecnica (allora non ancora sfruttata nei µP) del burst mode

## L'Am29050

Nel 1990 venne commercializzato l'Am29050, una versione superscalare del 29000 particolarmente potente, con clock a 50 MHz e dotata di una FPU integrata che poteva eseguire fino a 4 operazioni in contemporanea. Questa nuova versione riscosse un notevole successo e venne adottata da molti costruttori aeronautici per l'avionica dei loro velivoli: quando la AMD decise di abbandonarne la produzione, per non essere costretta dalla FAA a tenere in produzione un chip solo per poche unità all'anno, cedette il progetto del 29050 alla Honeywell, che lo produce con la sigla HI-29KII e ne usa due in tandem nel suo pacchetto VIA (Versatile Integrated Avionics).

Aerei che montano un VIA basato su Am29050:

* Boeing 777 - tutti i modelli
* Boeing 737-600/700/800
* Boeing 717
* Federal Express MD-80
* USAF KC-10
* USAF C-5B Galaxy

## Chip della famiglia Am29000

Am290xx

* Am29000 Microprocessore RISC 32bit, pipeline a 4 stadi
* Am29005 Microprocessore 32bit RISC senza Instruction Cache
* Am29027 FPU
* Am29030 Microprocessore RISC 32-bit (solo due bus esterni)
* Am29035 Microprocessore RISC 32-bit (solo due bus esterni), Instruction Cache di 4K byte
* Am29040 Microprocessore RISC 32-bit (solo due bus esterni) con moltiplicatore hardware
* Am29041 Data transfer controller
* Am29050 Microprocessore RISC 32-bit superscalare con FPU, Instruction Cache di 1kB
* Am29062 Unità di cache integrata con 8Kb di RAM

Am29100. La Am29100 è una famiglia di microcontrollers e relativi chip accessori. La maggior parte di essi sono 'intelligenti' ed eseguono automaticamente alcune operazioni che normalmente dovrebbero essere svolte via software.

* Am29101 Microprocessore 16 bit, Slice con selezione di velocità
* Am29111 Controller microsequenziatore - per memoria di microprogramma
* Am29112 Microsequenziatore a 8 bit ad alte prestazioni
* Am29114 Interrupt controller a 8 bit ad alte prestazioni, con priorità
* Am29116 Microprocessore 16 bit ad alte prestazioni
* Am29117 Microprocessore 16 bit ad alte prestazioni
* Am29118 Unità di supporto I/O a 8 bit per Am29116
* Am29130 Shift Register da 16 a 30 bit
* Am29141 Fuse programmable controller

Am29200

* Am29200 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele/JTAG
* Am29202 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele/JTAG
* Am29203 Circuito microprocessore slice - Slice da 4-Bit
* Am29205 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele
* Am29240 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele/JTAG, moltiplicatore hardware
* Am29243 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele/JTAG, moltiplicatore hardware
* Am29245 Microcontroller a 32-bit, ROM interna, interfaccia DRAM, porte PIA/PIO/seriali/parallele/JTAG

Am29300. La serie Am29300 è un gruppo di microprocessori più evoluti, pensati per creare un calcolatore a 32 bit con pochi chip.

* Am29323 Moltiplicatore parallelo a 32-Bit
* Am29325 FPU a 32-bit
* Am29327 FPU a 32-bit
* Am29331 Microsequenziatore a 16-Bit
* Am29332 ALU ingresso 64bit, uscite a 32-bit
* Am29334 File registri SRAM a 4 porte e accesso duale
* Am29337 Circuito microprocessore slice - 16-Bit Bounds Checker
* Am29338 Circuito microprocessore slice - coda byte a 32-Bit, 4 FIFO
* Am29360 Unità di rilevamento e correzione degli errori a 32-Bit
* Am29368 1M-Bit Dynamic Memory Controller (DMC)

Am29400

* Am29433 32 x 32 Bit moltiplicatore in virgola mobile
* Am29434 File di registri SRAM - accesso Dual Port

Am29500. La serie Am29500 è progettata per l'uso come DSP.

* Am29501 Processore DSP Pipelined multiporta
* Am29509 Moltiplicatore hardware (ALU) 12x12
* Am29510 Moltiplicatore hardware 16x16, risultato a 32bit ma output a 16bit
* Am29516 Moltiplicatore hardware 16x16, risultato a 32bit ma output a 16bit
* Am29517 Moltiplicatore hardware 16x16, risultato a 32bit ma output a 16bit
* Am29520 Registro pipeline multilivello
* Am29521 Registro pipeline multilivello
* Am29524 Registro pipeline - Duale profondità 7 o Singolo profondità 14
* Am29525 Registro pipeline - Duale profondità 8 o Singolo profondità 16
* Am29526 Generatore seno/coseno tramite tabella di lookup
* Am29527 Generatore seno/coseno tramite tabella di lookup
* Am29528 Generatore seno/coseno tramite tabella di lookup
* Am29529 Generatore seno/coseno tramite tabella di lookup
* Am29540 Sequenziatore indirizzi per calcolo FFT

Am29600

* Am29660 CRC- Circuito di errore polinomiale
* Am29668 Dynamic Memory Controller - CDMC per interfaccia con 80386
* Am29676 Memory Driver - 11-Bit DRAM Driver
* Am29688 Dynamic Memory Controller - CDMC per interfaccia con 80386

Am29700

* Am29700/701 64 bit di RAM Schottky non invertente
* Am29702/703 64 bit di RAM Schottky
* Am29705 RAM, 16 Word da 4 bit, 2 porte
* Am29707 SRAM multiporta
* Am29720/721 256 bit di RAM Schottky a basso consumo
* Am29750/Am29752 PROM, 32 Word da 8 bit
* Am29754/Am29755 PROM, 256 Word da 4 bit
* Am29770/Am29771 PROM bipolare da 2048 bit Generica
* Am29774/Am29775 PROM bipolare da 4096 bit Generica

Am29800. La famiglia Am29800 è usata per autotest o test di altri dispositivi a bordo.

* Am29803 Controller I/O, Unità di salto a 16 vie
* Am29806 Comparatore/Decodifica 6 bit
* Am29809 Comparatore 9 bit
* Am29811 Unità di controllo prossimo indirizzo
* Am29818 Registro di Pipeline/registro diagnostico
* Am29821 10-bit flip-flop tipo D con uscite a tre stati
* Am29822 10-Bit Flip-Flop tipo D
* Am29823 9-Bit Flip-Flop tipo D con uscite a tre stati
* Am29824 9-Bit Flip-Flop tipo D con uscite a tre stati
* Am29825 8-Bit Flip-Flop tipo D
* Am29826 8-BIT Flip-flop interfaccia bus con uscite a tre stati
* Am29827 Buffer/driver di linea a 10 Bit
* Am29828 Driver di linea invertenti a 10 Bit
* Am29833 BUS TRANSCEIVER CMOS 9 bit con parità
* Am29834 BUS TRANSCEIVER da 8 a 9-bit con parità
* Am29841 Bus Interface Latches a 10 bit
* Am29842 10 BIT Bus Interface Latches
* Am29843 9 BIT Bus Interface Latches
* Am29844 9 Bit Latch tipo D
* Am29845 8 Bit Latch trasparente con uscite a tre stati
* Am29846 8 Bit Bus interfaccia con latch tipo D, uscite invertite
* Am29853/Am29855 9-bit transceiver asincrono con parità
* Am29854 da 8 a 9-bit Bus Transceiver con generatore/controllore di parità
* Am29861 10-BIT Bus Interface Transceiver
* Am29862 8-Bit Bus transceivers a tre stati
* Am29863 9-BIT Bus transceivers a tre stati, aka 74F863
* Am29864 9-BIT BUS TRANSCEIVER (Inverting)

Am29900

* Am29921 10-Bit Flip-Flop tipo D
* Am29923 9-Bit Flip-Flop tipo D
* Am29925 Octal Latch tipo D - 3-AND Out EN
* Am29927 Non-Inverting-Function Buffer Gate
* Am29928 Inverting-Function Buffer Gate
* Am29933 Bus Transceiver - +9-bit ad albero di parità
* Am29941 10-Bit Latch tipo D
* Am29943 9-Bit Latch tipo D
* Am29945 Octal Latch tipo D
* Am29953/Am29955 Bus Transceiver - +9-bit ad albero di parità
* Am29961 Bus Transceiver - 10-bit senza buffer
* Am29963 Bus Transceiver - 9-bit senza buffer
* Am29982 Bus Controller - 4x4-porte, scambiatore bus multiplo
* Am29983/Am19985 Bus Controller - 9x4-porte, scambiatore bus multiplo
