"Alpha" est le nom donné à l'architecture RISC 64 bits de Digital. Le projet Alpha commença à Digital à la mi-1989, dans le but de fournir une voie de migration haute-performance pour les clients VAX. Il ne s'agit pas de la première architecture RISC produite par Digital, mais ce fut la première à être mise sur le marché. Quand Digital a annoncé Alpha en mars 1992, elle a pris la décision d'entrer sur le marché des composants électroniques en vendant des microprocesseurs Alpha.
Alpha est parfois désigné par Alpha AXP, pour de vieilles et obscures raisons qu'il est inutile de préciser. Il suffit de dire que c'est exactement la même chose.
Digital Semiconductor (DS) est la section commerciale de Digital Equipment Corporation (Digital - nous n'aimons pas le sigle DEC) qui vend les composants électroniques. Parmi les produits de Digital figurent les processeurs, les chipsets associés, les pontages PCI-PCI et les composants PCI pour la communication et le multimédia.
Il y a actuellement 2 générations de base de processeur implémentant l'architecture Alpha :
Les avis différent quant au sens de "EV" (note : la vraie réponse est bien entendu "Electro Vlassic" [1]), mais le chiffre représente la première génération de technologie CMOS de Digital avec laquelle le processeur a été conçu. Ainsi, EV4 a été initialement conçue en CMOS4. Au fil du temps, un processeur tend a trouver une nouvelle jeunesse en étant optiquement rétrécie dans la nouvelle génération de CMOS. EV45 est donc la base EV4 conçue en CMOS5. Il y a une grande différence entre rétrécir une conception pour une technologie particulière et la reconcevoir pour cette technologie (mais je ne veux pas entrer dans les détails). Il y a encore quelques variantes : la CMOS4S (rétrécissement optique de la CMOS4) et une CMOS5L.
Les vrais technophiles seront curieux de savoir que CMOS4 est une gravure en 0,75 micron, CMOS5 est une gravure en 0,5 micron, et CMOS6 est une gravure en 0,35 micron.
Pour faire correspondre ces bases de processeur aux puces nous avons:
EV4 (initialement), EV4S (maintenant)
EV4S
EV45
LCA4S (base EV4, avec coprocesseur EV4)
LCA45 (base EV4, mais avec coprocesseur EV45)
EV5
EV56
La base EV4 est un noyau double-écoulement (il peut traiter 2 instructions processeur par cycle d'horloge) super-pipeliné avec une unité de calcul entier, une unité de calcul flottant et prédiction de branchement. Il a des bus de données internes de 64 bits et des caches de 8Ko étroitement couplés, un jeu de chaque pour les instructions, et pour les données. Les caches sont en écriture immédiate ("write-through").
La base EV45 a quelques améliorations par rapport à la base EV4 : l'unité de calcul flottant est légérement améliorée, et les caches sont de 16Ko. (Note : Neal Crook a indiqué dans un courrier séparé que les modifications de l'unité de calcul flottant améliorent les performances de la division. La FPU de l'EV4 prend 34 cycles pour une division en simple précision et 63 cycles pour une division en double-précision (quelles que soient les données). En comparaison, le FPU de l'EV45 prend généralement 19 cycles (34 au pire) pour la simple précision et 29 cycles (63 au pire) pour la double-précision (en fonction des données).)
La base EV5 est un noyau quadruple-écoulement, également super-pipeliné etc etc. Il a des caches de 8 Ko étroitement couplés, un de pour les instructions et un pour les données. Ces caches sont en écriture immédiate. Il dispose également d'un cache de deuxième niveau de 96 Ko sur le processeur (le Scache) qui est associatif 3-morceaux et en écriture différée ("write back"). Le gain de performance de l'EV4 à l'EV5 est supérieur au seul gain généré par l'augmentation de la fréquence. En plus des caches plus grands et du quadruple-écoulement, il y a aussi des améliorations de sa microarchitecture pour réduire les temps d'attente producteur/consommateur dans certaines voies.
La base EV56 est fondamentalement la même microarchitecture que l'EV5, mais ajoute quelques nouvelles instructions pour la lecture et l'écriture sur 8 et 16 bits (cf. section Les octets et leur multiples). Elles sont principalement destinées aux pilotes de périphériques. La base EV56 est réalisée en CMOS6, en 2,0 Volts.
Le 21064 a été annoncé en mars 1992. Il utilise la base EV4, avec un bus de 128 bits. L'interface du bus supporte une connexion 'facile' d'un cache externe de deuxième niveau, avec une taille de bloc de 256 bits (2 fois la taille du bus). La vitesse de ce Bcache est entièrement configurable logiciellement. Le 21064 peut aussi être configuré pour utiliser un bus externe de 64 bits (mais je crois qu'aucun système n'utilise ce mode). Le 21064 n'impose aucune contrainte sur le Bcache, mais il est généralement configuré en écriture différée. Le 21064 contient un système permettant à du matériel séparé de maintenir la cohérence entre le Bcache et le cache interne, mais c'est complexe.
Le 21066 utilise la base EV4 et intégre un contrôleur de mémoire et un pontage de bus PCI. Pour économiser des broches, le contrôleur de mémoire a un bus de 64 bits (mais les caches internes ont une taille de bloc de 256 bits, comme le 21064, donc une lecture de bloc prend 4 cycles du bus). Le contrôleur de mémoire supporte le BCache et la DRAM externe. La vitesse du Bcache et de la DRAM est entièrement configurable logiciellement, et peut être contrôlé à la vitesse du processeur. La décomposition en 4 accès pour remplir un bloc de cacte n'est pas si mauvais qu'on peut le penser parce que l'accès à la DRAM est fait en mode page. Malheureusement, le contrôleur de mémoire ne supporte ni les types de DRAM ésotérique (SDRAM, EDO ou BEDO), ni les RAMs de cache synchrone. L'interface du bus PCI est entièrement compatible avec PCI 2.0 et tourne jusqu'à 33 MHz.
Le 21164 a un bus de données de 128 bits et supporte les lectures partielles, avec jusqu'à deux lectures en cours en même temps (ce qui permet une utilisation à 100% du bus de données dans les meilleures conditions de rêve, i.e. il est possible théoriquement de transférer 128 bits de données à chaque cycle du bus). Le 21164 supporte une connexion facile d'un cache de troisième niveau (Bcache) et a tout le système pour permettre à du matériel externe de maintenir la cohérence de tous les caches. De cette façon, les conceptions de multiprocesseur symétrique sont 'faciles'.
Le 21164A a été annoncé en octobre 1995. Il utilise la base EV56. Son brochage est compatible avec celui du 21164, mais nécessite des lignes d'alimentation séparées ; toutes les broches qui étaient +3,3 Volts sur le 21164 ont été divisées en deux groupes ; un groupe fournit 2,0 Volts au coeur du processeur, l'autre fournissant 3,3 Volts aux unités d'entrées/sorties. Contrairement aux anciennes conceptions, les broches du 21164A n'acceptent pas 5 Volts. Le résultat de ce changement est que les systèmes 21164 ne peuvent en général pas être mis à jour en 21164A (bien qu'il soit relativement simple de concevoir un système 21164A qui puisse aussi accepter un 21164). Le 21164A dispose également de quelques nouvelles broches pour supporter les lectures et écritures sur 8 et 16 bits. Il améliore également le support du 21164 pour les SRAMs synchrones qui composent le Bcache.
Le 21064 et le 21066 ont la même base (EV4). Si le même programme tourne sur un 21064 et un 21066, à la même fréquence, alors la différence de performance provient uniquement de la bande passante entre le Bcache et la mémoire. Du code qui tombe principalement dans les caches internes tournera aussi rapidement. Il y a 2 principaux tueurs de performances :
Si vous effectuez la même comparaison entre un 21064A et un 21066A, il y a un facteur supplémentaire du aux différentes tailles des Icache et Dcache entre les deux processeurs.
Maintenant, le 21164 résoud ces deux problèmes : il atteint des bien meilleures bandes passantes du bus système (malgré le même nombre de broches de signal - oui, je sais que c'est à peu près deux fois plus qu'un 21064, mais les supplémentaires sont l'alimentation et la masse ! (oui, réellement!!)) et il a des caches en écriture différée. Le seul problème restant est la réponse à la question "combien il coûte ?"
Tous les processeurs Alpha actuels utilisent des horloges à haute vitesse, parce que leur microarchitecture a été conçue comme "en cycles courts". Cependant, du coup, aucun des bus systèmes n'a besoin de tourner à de telles vitesses :
Note: quelqu'un a suggéré qu'il obtenait de mauvaises performances sur un système 21066 parce que le contrôleur de mémoire du 21066 ne tourne qu'à 33 MHz. En fait, ce sont soulement les systèmes super-rapides 21064A qui ont des contrôleurs de mémoire qui tournent 'seulement' à 33 MHz.
DS vend deux chipsets de support processeur. Le chipset 2107x (dénommé APECS) supporte les 21064(A). Le chipset 2117x (dénommé ALCOR) supporte les 21164. Il y aura aussi un chipset 2117xA (dénommé ALCOR 2) qui supportera le 21164A.
Ces deux chipsets fournissent des contrôleurs de mémoire et des pontages PCI pour leur processeur. APECS fournit un pontage PCI de 32 bits, ALCOR fournit un pontage PCI de 64 bits qui (conformément à la spécification PCI) peut supporter des périphériques PCI aussi bien 32 bits que 64 bits.
APECS consiste en 6 puces de 208 broches (4 registres de 32 bits (DECADE), 1 contrôleur système (COMANCHE), 1 contrôleur PCI (EPIC)). Il fournit un contrôleur de DRAM (bus mémoire de 128 bits) et une interface PCI. Il effectue également tout le travail de maintien de la cohérence quand un périphérique PCI effectue une opération DMA vers (ou depuis) la mémoire.
ALCOR consiste en 5 puces (4 registres de 64 bits (Data Switch, DSW) 208 broches PQFP et 1 contrôleur (Control, I/O Address, CIA) - un boîtier plastique de 383 broches). Il fournit un contrôleur de DRAM (bus mémoire de 256 bits) et une interface PCI. Il effectue également tout le travail de maintion de cohérence quand un périphérique PCI effectue une opération DMA vers (ou depuis) la mémoire.
Il n'existe pas de chipset supportant le 21066, puisque le contrôleur de mémoire et le pontage PCI sont intégrés dans le processeur.
Le groupe applications de DS produit des exemples de conceptions utilisant les processeurs et leurs chipsets associés. Il s'agit typiquement de cartes mères de format PC-AT, avec toutes les fonctionnalités que vous trouverez typiquement sur une carte mère Pentium haut de gamme. Initialement, ces exemples de conception étaient destinés à être utilisés comme point de départ pour des tierces parties pour concevoir des cartes mères. Ces conceptions de première génération furent nommées Evaluation Boards (EB). Comme la quantité de travail nécessaire pour concevoir une carte mère a augmenté (à cause de la montée en fréquence des processeurs et pour respecter les régles sur l'émission de fréquences radio) l'accent a été mis sur la conception de cartes mères utilisables pour une production en masse.
Les groupes système de Digital ont produit plusieurs générations de machines à base de processeurs Alpha. Certains de ces systèmes utilisent des chipsets conçues par les groupes système, d'autres utilisent les chipsets de DS. Dans certains cas, les systèmes utilisent une combinaison des deux.
Plusieurs tierces parties ont construit des systèmes à base de processeurs Alpha. Certaines de ces entreprises ont conçu leurs systèmes à partir de zéro, d'autres ont utilisé les chipsets de DS, ou ont copié/modifié les exemples de conception de DS, ou simplement assemblent leurs systèmes à partir des cartes fabriquées et vérifiées par DS.
L'EB64 : Conception obsolète utilisant un 21064 avec un contrôleur de mémoire implémenté en logique programmée. Entrées/Sorties réalisées par de la logique programmée pour s'interfacer à un chipset de pontage 486<->ISA. Ethernet, SuperI/O (2S, 1P, LD) intégré sur la carte mère, bus ISA. Taille PC-AT. Alimentation standard PC.
L'EB64+ : Utilise un 21064 ou un 21064A, et un APECS. Bus ISA et PCI (3 emplacements ISA, 2 emplacements PCI, une paire sur un emplacement partagé). Supporte des SIMMs de DRAM 36 bits. Le bus ISA est géré par un chipset de pontage Intel Saturn. Contrôleur SCSI (NCR 810 PCI), ethernet (Digital 21040), contrôleur clavier et souris (PS/2), SuperI/O (2S, 1P, LD), mémoire CMOS et horloge sur la carte mère. ROM de démarrage en EPROM. Taille PC-AT. Alimentation standard PC.
L'EB66 : Utilise un 21066 ou un 21066A. Le sous-système d'entrées sorties est identique à celui de l'EB64+. Taille baby PC-AT. Alimentation standard PC. Les schémas de l'EB66 furent publiés dans des publicités vantant le 21066 comme "le premier microprocesseur au monde avec PCI intégré" (pour les amateurs d'anecdotes : il y a deux versions de cette publicité - j'ai dessiné les circuits et écrit le boniment dans la première version, et des américains ont malmené le boniment pour la deuxième version)
L'EB164 : Utilise un 21164 et ALCOR. Bus ISA et PCI (3 emplacements ISA, 2 emplacements PCI 64 bits (dont un partagé avec un emplacement ISA) et 2 emplacements PCI 32 bits). Emplacement SIMM pour le Bcache. Le sous-système d'entrées sorties fournit un contrôleur SuperI/O (2S, 1P, LD), un contrôleur clavier et souris (PS/2), mémoire CMOS et horloge. ROM de démarrage en mémoire flash. Taille PC-AT. Nécessite une alimentation en 3,3 Volts.
L'AlphaPC64 (aussi nommée Cabriolet) : dérivé de l'EB64+ mais désormais en taille baby PC-AT avec une ROM de démarrage en flash, et plus de contrôleur SCSI et ethernet sur la carte mère. 3 emplacements ISA, 4 emplacements PCI (dont un partagé avec un emplacement ISA), emplacement SIMM pour le Bcache. Nécessite une alimentation en 3,3 Volts.
L'AXPpci33 (aussi nommée NoName), est basée sur l'EB66. Cette conception est produite par le groupe technique OEM de Digital (TOEM). A base d'un processeur 21066 tournant à 166 MHz ou 233 MHz. Taille baby PC-AT, nécessite une alimentation standard PC. 5 emplacements ISA et 3 emplacements PCI (dont un partagé avec un emplacement ISA). Il existe deux versions, avec un connecteur soit PS/2, soit DIN pour le clavier.
D'autres cartes mères à base de 21066 : la plupart, sinon toutes, disponibles sur le marché sont basées sur l'EB66 - il n'y a pas beaucoup d'options dans la conception d'un système 21066, parce que tout le contrôle est fait par les puces.
Multia (aussi nommé Universal Desktop Box) : il s'agit d'un système boîtier bureau très compact à base de 21066. Il comporte deux ports PCMCIA, une carte graphique 21030 (TGA), une carte ethernet 21040 et un contrôleur SCSI NCR 810, ainsi qu'un lecteur de disquettes, 2 port série et un port parallèle. Ses capacités d'extension sont limitées (un emplacement PCI) à cause de sa petite taille (il y a en plus des restrictions sur l'utilisation de l'emplacement PCI, dont je ne me souviens plus). (Notez que des Multia à base de 21066A ou de Pentium sont aussi disponibles).
DEC PC 150 AXP (aussi nommé Jensen) : c'est un très vieux système Digital - l'un des systèmes Alpha de première génération. Il n'est mentionné ici que parce qu'un certain nombre de ces systèmes semblent être disponibles sur le marché de l'occasion. Le Jensen est un système grande tour qui utilise un 21064 à 150 MHz (des versions plus récentes utilisèrent des processeurs plus rapides mais je ne suis pas sûr des vitesses). Il utilisait de la logique programmée pour interfacer le processeur à un pontage 486<->EISA.
D'autres systèmes à base de 21064(A) : il existe encore 3 ou 4 autres conceptions de cartes mère (sans compter les systèmes Digital) et tous ceux que je connais sont dérivés de l'EB64+. Parmi ceux-ci :
D'autres systèmes à base de 21164(A) : le seul que je connaisse qui ne soit pas un simple clone d'un EB164 est un système de DeskStation. Ce système est construit avec un contrôleur de mémoire et d'entrées/sorties propriétaire de DeskStation. Je ne sais pas quelle est leur attitude vis-à-vis de Linux.
Quand l'architecture Alpha fut présentée, elle était unique par rapport aux autres architectures RISC en empêchant les lectures et écritures sur 8 et 16 bits. Elle supportait les lectures et écritures sur 32 et 64 bits (mot long et quadruple mot, dans la terminologie Digital). Les co-architectes (Dick Sites et Rich Witek) justifiaient ce choix par ces avantages :
L'Alpha compense par de puissantes instructions pour la manipulation des octets et des groupes d'octets dans les registres de 64 bits. Les tests de performances standard pour les opérations sur les chaînes de caractères (par exemples, certains tests de Byte) montrent que l'Alpha se comporte très bien pour la manipulation des octets.
L'absence de lectures et écritures sur octet a des répercussions sur certains sémaphores logiciels et sur la conception des sous-systèmes d'entrées/sorties. La solution de Digital au problème des entrées/sorties est d'utiliser certaines lignes d'adresse de bas niveau pour spécifier la taille des données pendant les transferts de données, et de les décoder en masque d'octets. Cet adressage dénommé "adressage clairsemé" gâche une partie de l'espace d'adressage et rend l'espace d'entrées/sorties non contigü (j'en dirais plus sur cet adressage clairsemé quand j'aurai fini par l'écrire). Notez que l'espace d'entrées/sorties, dans ce contexte, se réfère à toutes les ressources présentes sur le bus PCI et comprend aussi bien l'espace mémoire PCI que l'espace d'entrées/sorties PCI.
Avec l'apparition du 21164A, l'architecture Alpha a été étendue pour inclure l'adressage des octets. L'exécution des nouvelles instructions sur un processeur plus ancien déclenchera une exception PALcode OPCDEC, pour que le PALcode puisse gérer cet accès. Cela aura une incidence sur les performances. Les ramifications de ceci font que l'utilisation de ces instructions devraient (à mon humble avis) être limitée aux pilotes de périphériques plutôt qu'aux applications.
Ces nouvelles possibilité de lecture et écriture au niveau octet signifient que de futurs chipsets pourront supporter un espace d'entrées/sorties contigü.
Cet emplacement est destiné à une section expliquant le PALcode. Je l'écrirai s'il y a suffisemment d'intérêt.
La possibilité de faire tourner Linux sur n'importe quelle machine Alpha est généralement limitée par votre possibilité d'obtenir des informations sur les détails sanglants de ses arcanes. Puisque des portages de Linux existent pour les cartes mères EB66, EB64+ et EB164, tous les systèmes basés sur les 21066, 21064/APECS et 21164/ALCOR devraient pouvoir faire tourner Linux avec très peu voire aucune modification. La principale différence entre toutes ces cartes mères est la façon dont elles diffusent les interruptions. Il y a trois sources d'interruptions :
Tous les systèmes utilisent un système de pontage d'entrées/sorties (SIO) Intel en tant que pontage entre les bus PCI et ISA (le bus principal est PCI, le bus ISA est un bus secondaire utilisé pour supporter les périphériques anciens ou basse vitesse). Le SIO contient la traditionnelle paire de 8259 chaînés.
Certains systèmes (par exemple le NoName) diffusent leurs interruptions via le SIO vers le processeur. Certains systèmes ont un contrôleur d'interruptions séparé et diffusent toutes les interruptions PCI plus l'interruption SIO (sortie du 8259) via ce contrôleur, et toutes les interruptions ISA via le SIO.
Les autres différences entre ces systèmes comprennent :
Toutes les conceptions de cartes d'évaluation et de cartes mères de DS sont libres de droits et la documentation complète pour une conception coûte environ 50$ (300FF). Cela comprend tous les schémas, les sources des parties programmées, les feuilles d'informations du processeur et du chipset. Les kits de documentation sont disponibles auprès des distributeurs de Digital Semiconductor. Je ne suggère pas de vous précipiter aller l'acheter, mais je veux faire remarquer que ces informations sont disponibles.
J'espère que cela vous a été utile. Les commentaires, mises à jour, suggestions d'extension sont à envoyer à Neal Crook.
[1] Bill Hamburgen, Jeff Mogul, Brian Reid, Alan Eustace, Richard Swan, Mary Jo Doherty, and Joel Bartlett. Characterization of Organic Illumination Systems. DEC WRL, Technical Note 13, April 1989.