# Alpha 21164

El Alpha 21164, también conocido por su nombre en código EV5, es un microprocesador desarrollado y fabricado por Digital Equipment Corporation que implementaba el conjunto de instrucciones Alpha (ISA, "instruction set architecture"). Fue lanzado en enero de 1995, sucediendo al Alpha 21064A como microprocesador insignia de Digital. Fue sucedido por el Alpha 21264 en 1998.

## Historia

El primer Alpha 21164 fue producido en febrero de 1994, y los sistemas operativos OpenVMS, Digital UNIX y Windows NT arrancaron exitosamente en él. Las muestras se entregaron a fines de 1994 y en enero de 1995 se introdujo la versión de 266 MHz. La versión de 300 MHz fue introducida en marzo de 1995. El Alpha 21164 final, una versión de 333 MHz, fue anunciado el 2 de octubre de 1995, disponible en cantidades de muestra. El 21164 fue reemplazado como microprocesador insignia de Digital por el Alpha 21164A en 1996 cuando la versión de 400 MHz estuvo disponible en grandes cantidades.

### Usuarios

Digital usó el Alpha 21164 operando a varias frecuencias de reloj en sus servidores AlphaServer y estaciones de trabajo AlphaStation. Digital también usó el Alpha 21164 en sus computadoras de una sola placa Alpha VME 5/352 y Alpha VME 5/480 y en las placas madre AlphaPC 164 y AlphaPC 164LX. Cray Research, copartícipe del Alpha, usaba el Alpha 21164 de 300 MHz en su supercomputadora T3E-600. Otros fabricantes como DeskStation también fabricaron workstations usando el 21164.

### Rendimiento

El 21164 continuó liderando las prestaciones del Alpha 21064A a 275 MHz hasta la aparición del Intel Pentium Pro en noviembre de 1995, cuando la versión de 200 MHz superó al 21164 de 300 MHz en el conjunto de pruebas benchmark SPECint95. El 21164 se mantuvo como líder en el rendimiento de coma flotante. La introducción del 21164 de 333 MHz el año siguiente superó al Pentium Pro, pero más tarde fue superado por el MIPS Technologies R10000 y por el Hewlett-Packard PA-8000 en el mismo año.

## Descripción

El Alpha 21164 es un microprocesador superescalar de cuatro unidades de ejecución capaz de realizar un máximo de cuatro instrucciones por ciclo de reloj para las cuatro unidades de ejecución: dos enteross y dos de coma flotante. La unidad de enteros es de siete etapas, y la de coma flotante de diez etapas. El 21164 implementaba una dirección virtual de 43 bit y una dirección física de 40 bit. Por lo tanto podía direccionar 8 TiB de memoria virtual y 1 TiB de memoria física.

### Unidad de enteros

La unidad de enteros consistía de dos líneas o unidades de ejecución y el banco de registros de enteros. Las dos unidades, la de suma y la de multiplicación no eran idénticas, cada una era responsable de ejecutar diferentes instrucciones, aunque ambas podían ejecutar las instrucciones comunes suma, carga, comparar y mover condicional. La unidad de multiplicación ejecutaba exclusivamente desplazamiento, almacenamiento y multiplicación (en un multiplicador no segmentado o sin etapas). La unidad de suma exclusivamente ejecutaba instrucciones de salto.
Excepto para saltos, las instrucciones de mover condicional y multiplicación, todas las otras instrucciones que comenzaban y finalizaban la ejecución durante la etapa (o segmento) cinco tenían un ciclo de latencia. Las instrucciones de mover condicional y multiplicación, eran ejecutadas en la etapa seis para poder ser enviadas a una instrucción de comparación cuyo resultado dependía de aquellas.
El banco de registro de enteros contenía cuarenta registros de 64 bit, de los cuales treinta y dos eran específicos de la Arquitectura Alpha y ocho eran usados por el PALcode como una memoria de corto plazo. El banco de registros tenía cuatro puertos de lectura y dos de escritura divididos en partes iguales entre las dos unidades de enteros.

### Unidad de coma flotante

La unidad de coma flotante consistía de dos unidades de ejecución de coma flotante y el banco de registros de coma flotante. Las unidades no eran idénticas, una ejecutaba todas las instrucciones de coma flotante excepto las de multiplicar, y la otra ejecutaba sólo las instrucciones de multiplicación. Un divisor no segmentado de coma flotante estaba conectado a la unidad de suma. Todas las instrucciones de coma flotante excepto las de dividir tenían una latencia de cuatro ciclos. Dividir tenía una latencia variable que dependía si la operación se realizaba con números de coma flotante de simple o doble precisión y a los números en sí mismos. Incluyendo la superposición, la división de simple precisión tiene una latencia de 15 a 31 ciclos, mientras que la doble precisión tiene una latencia de 22 a 60 ciclos.

### Caché

El 21164 tiene tres niveles de caché, una integrada en el microprocesador, y otra externa opcional. Las cachés y las lógicas asociadas están formadas por 7,2 millones de transistores.
La caché primaria está dividida en dos, la caché para instrucciones y la caché para datos, llamadas caché-I y caché-D respectivamente. Tienen un tamaño de 8 KiB, mapeo directo, y una línea de caché de 32 bytes. La caché-D es de doble puerto, para mejorar el rendimiento, y es implementada duplicando la caché. Utiliza políticas write-through y asignación en lectura.
La caché secundaria, conocida como caché-S, está integrada en el microprocesador y tiene una capacidad de 96 KiB. Una caché integrada como la utilizada por el 21164 requiere más ancho de banda que la que puede proveer una caché secundaria externa, para poder se alimentada con suficientes datos e instrucciones. La caché requiere dos ciclos para acceder debido a su gran superficie. Para mejorar el rendimiento, la caché está implementada en forma de conducto. Otro beneficio de una caché secundaria integrada es que puede ser fácilmente implementada como una caché de múltiples conductos, resultando en una caché asociativa de tres formas distintas, ofreciendo un flujo mejorado con respecto a las cachés de mapeo directo. La caché-S, debido la gran superficie física que requiere, fue implementada en dos mitades, las cuales rodean la I-box, E-box, F-box y la M-box. Se hizo para que la caché pueda devolver datos en dos ciclos.
La caché terciaria, conocida como caché-B, está implementada con SRAMs externas. La caché-B es opcional y algunos sistemas que usan el Alpha 21164 no tienen ninguna. La caché-B puede tener una capacidad de 1 a 64 MiB, no se soportan capacidades menores debido a que son inútiles para la caché-S. Utiliza políticas write-through y asignación en lectura. La caché-B está controlada por una lógica de interface externa integrada en el microprocesador, al contrario que el 21064, el cual requiere un controlador de caché externo. La caché-B puede ser construida con SRAM sincrónica o asincrónica, y se accede por medio del bus del sistema.

### Interfaz externa

La interfaz externa es un bus de sistema de 128 bit. El bus de sistema opera a una frecuencia de reloj de 3 a 15 veces más lenta que la frecuencia interna, o 20 a 100 MHz con una frecuencia interna de 300 MHz. La señal de reloj del bus de sistema es generada por el microprocesador.

### Reloj

La frecuencia de reloj interna es generada dividiendo una señal de reloj externa por dos. Por lo tanto, el Alpha 21164 requiere un reloj externo con una frecuencia igual al doble de la frecuencia interna deseada, p.e., 600 MHz para el Alpha 21164 de 300 MHz.

### Fabricación

EL Alpha 21164 contiene 9,3 millones de transistores en una matriz de 16,5 por 18,1 mm (299 mm²), la cual está cerca del límite máximo del proceso de fabricación. La matriz está fabricada con tecnología CMOS de quinta generación de Digital, el CMOS-5, un proceso de 0,5 µm con cinco capas de interconexión de aluminio. El 21164 trabaja con 3,3 V y disipa 46 W a 266 MHz, 51 W a 300 MHz y 56 W a 333 MHz.

### Encapsulado

El Alpha 21164 utiliza encapsulado cerámico IPGA de 499 pines y mide 57,4 por 57,4 mm. El encapsulado posee un conductor de calor con dos postes que permiten acoplar el disipador de calor.

## Derivados
### Alpha 21164 (EV56)

El Alpha 21164 fue la base para un desarrollo posterior con el nombre en código EV56. Fue introducido como el Alpha 21164, pero originalmente fue conocido como el Alpha 21164A. Opera a una frecuencia de reloj de 366, 433, 500, 533, 600 y 666 MHz.

#### Historia

Fue descrito por primera vez en octubre de 1995 en el Microprocessor Forum. El 13 de noviembre de 1995, Digital anunció que las muestras podrían entregarse a fin de mes. La primera versión trabajaba a 366 MHz, introducida en 1996. El 8 de julio de 1996 Digital anunció que estaba disponible una versión de 433 MHz y una de 500 MHz en septiembre de 1996. La versión de 433 MHz tenía un precio de $1492 por unidad en cantidades de 1000. La versión de 600 MHz fue introducida el 31 de marzo de 1997, disponible en grandes cantidades. Samsung Electronics firmó un contrato con Digital en junio de 1996 como segundo fabricante del Alpha 21164A y la compañía fue la única en fabricar el modelo de 666 MHz. Las muestras de 366 a 500 MHz fueron introducidas el 11 de noviembre de 1996, y disponible en grandes cantidades en 1997. El Alpha 21164A fue fabricado en las plantas de Hudson, Massachusetts de Digital y en la de Kihueng, Corea del Sur de Samsung.
Los usuarios del Alpha 21164A incluían a Cray Research, Digital, Network Appliance (ahora NetApp) y DeskStation. Cray Research usaba los Alpha 21164As de 450, 600 y 675 MHz en los últimos modelos de su supercomputadora T3E. Digital usaba el Alpha 21164A de varias frecuencias de reloj es sus AlphaServers, AlphaStations, workstations Celebris XL y Digital Personal Workstations. NetApp usaba los Alpha 21164A de 400, 500 y 600 MHz en sus sistemas de almacenamiento. DeskStation usaba el Alpha 21164A en sus workstations Raptor Reflex.

#### Descripción

El cambio más notable era la inclusión del Byte Word Extensions (BWX), una extensión a la Arquitectura Alpha diseñada para mejorar el acceso de bytes y palabras. Estas instrucciones eran ejecutadas en un conducto múltiple. El Alpha 21164A contenía 9,66 millones de transistores en una matriz de 14,4 mm por 14,5 mm, para un área de 209 mm². Digital fabricó la matriz usando su proceso CMOS de sexta generación, el CMOS-6 de 0,35 µm con cuatro capas de interconexión. Samsung utilizaba su proceso de 0,35 µm con cuatro capas de 1996. El Alpha 21164A era alimentado con 3,3 V, disipando 31 W a 366 MHz, 36 W a 433 MHz, 41 W a 500 MHz, 43,5 W a 533 MHz y 48,5 W a 600 MHz.

### Alpha 21164PC (PCA56)

El Alpha 21164PC, también conocido como PCA56, es una versión de bajo costo del Alpha 21164A introducida el 17 de marzo de 1997. El microprocesador fue desarrollado en forma conjunta por Digital y Mitsubishi Electric Corporation, y ambas compañías lo fabricaron. Mitsubishi luego suspendió el acuerdo de desarrollo conjunto con Alpha para futuros procesadores Alpha a principios de 1998 y dejó de fabricar el Alpha 21164PC a mediados de 1998, saliendo del mercado de Alpha debido a las condiciones económicas del mercado de la compañía.
El Alpha 21164PC operaba a frecuencias de reloj de 400, 466 y 533 MHz. El mayor cambio era la omisión de la caché-S, una caché-I grande, y la inclusión de Motion Video Instructions (MVI, Instrucciones de Video con Movimiento), una extensión de la Arquitectura Alpha que introducía instrucciones Single Instruction Multiple Data (SIMD) para mejorar el rendimiento de la decodificación MPEG. La caché-S fue eliminada para reducir la cantidad de transistores, lo cual disminuía el tamaño, y por lo tanto el costo. La caché-I fue llevada al doble de capacidad, de 8 a 16 KiB para compensar la falta de la caché-S, ya que el Alpha 21164 se basó en la caché-S para complementar la caché-I para obtener el suficiente ancho de banda para poder alcanzar un rendimiento adecuado. El tamaño de la caché-B fue limitado de 512 KiB a 4 MiB, además de soportar capacidades de 1 y MB. El microprocesador usa direccionamiento virtual de 43 bits y direccionamiento físico de 33 bits.
El Alpha 21164PC contiene 3,5 millones de transistores en una matriz de 8,65 por 16,28 mm, para un área de 141 mm². Digital utilizó el mismo proceso de fabricación del Alpha 21164, el CMOS-5. El Alpha 21164PC estaba encapsulado en un IPGA de 413 pines, midiendo 49,78 por 49,78 mm. Se alimentaba con 3,3 V, y disipaba 26,5 W a 400 MHz, 30,5 W a 466 MHz y 35 W a 533 MHz.
El Alpha 21164PC fue usado por Digital en su motherboard AlphaPC 164SX.

### Alpha 21164PC (PCA57)

Un derivado del PCA56, el PCA57, fue diseñado y fabricado por Samsung Electronics en un proceso CMOS de 0,28 µm. El PCA57 fue introducido a fines de 1998 y operaba con frecuencias de reloj de 533, 600 y 666 MHz. Las mejoras de la microarquitectura del PCA56 incluían capacidades dobles para las caché-I y caché-D: 32 KB y 16 KB respectivamente. El PCA57 contenía 5,7 millones de transistores en una matriz de 6,7 mm por 15 mm, para un área de 101 mm². Trabajaba con 2,5 V y disipaba 18 W a 533 MHz, 20 W a 600 MHz y 23 W a 666 MHz.
El PCA57 fue usado por Digital en su motherboard AlphaPC 164RX.

## Chipsets

Digital y VLSI Technology desarrollaron chipsets para el 21164 y sus derivados. Digital también desarrolló circuitos integrados para aplicaciones específicas (ASIC) para usar en los modelos de alta gama de su familia AlphaServer, como los AlphaServer 8200 y 8400.

### 21171

El 21171, también conocido como Alcor, fue el primer chipset para el 21164, introducido en enero de 1995 al mismo tiempo que el microprocesador que soportaba. Fue desarrollado y fabricado por Digital. El 21171 es una actualización del DECchip 21071 modificado para soportar el nuevo protocolo del bus del sistema que usa el 21164. Consistía de un circuito integrado de control que contenía los controladores de memoria y del PCI, y cuatro CI de corte de datos que actuaban como interface de los buses de memoria y PCI de 256 bits con el bus del sistema. El 21171 proveía un bus PCI de 64 bit de ancho que corría a 33 MHz.

### 21172

El 21172, también conocido como Alcor2, era una actualización del 21171 que soportaba el 21164A.

### Pyxis

El chipset Pyxis, también conocido como 21174, soportaba los microprocesadores 21164A y 21164PC. Al contrario que los anteriores, fue diseñado para sistemas de bajo costo. Como resultado, era un diseño de un solo encapsulado CBGA de 474 contactos en lugar de un encapsulado múltiple. Posteriormente fue usado en los sistemas sensibles al costo como en las workstations de inicio (serie Digital Personal Workstation) y motherboards como las AlphaPC 164LX y 164SX. Cuando fue introducido, el 21174 tenía un precio de US$142 en cantidades de 1000.
El 21174 contenía un controlador de memoria y un controlador PCI. El controlador de memoria soportaba hasta 512 MiB synchronous dynamic random access memory (SDRAM) y accedía a ella mediante un bus de memoria de 128 bit. La memoria podía ser ECC o con protección de paridad. El controlador PCI proveía buses PCI convencionales o buses PCI-X.

### Polaris

El Polaris es un controlador del sistema desarrollado por VLSI Technology para computadoras personales que soportan los microprocesadores 21164A y 21164PC. El Polaris fue anunciado el 16 de junio de 1997. soporta hasta 768 MiB de EDO DRAM o hasta 512 MiB de SDRAM. La memoria es accedida mediante un bus de 128 bit. Provee un bus PCI de 32 bits y 33 MHz para E/S.
Los usuarios de Polaris incluían a Digital, para sus motherboards AlphaPC 164RX.