O DEC Alpha, também conhecido como Alpha AXP, é um microprocessador de 64 bit construído na arquitetura RISC. Ele foi desenvolvido pela Digital Equipment Corporation (DEC).
Suporta os seguintes Sistemas Operacionais: OpenVMS (conhecido como OpenVMS AXP), Tru64 UNIX(Conhecido como DEC OSF/1 AXP e Digital UNIX), Windows NT (que usava uma camada de emulação de 32 bits, que posteriormente foi descontinuado pelo 4.0 SP6 e o Windows 2000RC1), Linux (Debian GNU/Linux, SUSE Linux, Gentoo Linux e Red Hat Linux), BSD UNIX (NetBSD, OpenBSD e FreeBSD até 6.x), Plan 9 from Bell Labs, e também o kernel L4Ka::Pistachio.
História A empresa que procurava um sucessor para seu processador VAX que era de 32 bits, começou um projeto RISC com nome de "Prisma" no ano de 1980. Com a finalidade de oferecer aos usuário um microcódigo programavel que ficou conhecido como Epicode, juntamente com um SO chamado "Esmeralda", o qual executava programas do VMS. Mas o projeto prisma logo foi cancelado porque computadores VAX ainda estavam sendo vendidos e com isso a equipe achava que VAX teria um futuro promissor.
Entre 1980 e nos primeiros anos da década de 90, processadores RISC com arquitetura MPIS e Sparc se tornaram populares por oferecer uma melhor relação entre custo/desempenho comparado com os sistemas VAX, e então a DEC decidiu criar um processador RISC que seria o sucessor do VAX, com base nos conceitos do projeto PRISMA, os responsáveis pelo novo projeto foram Richard L. Sites e Richard T. Witek, algumas características do PRISMA foram alteradas para atender alguns novos objetivos do Alpha, como por exemplo, o reajuste para que programas VMS pudessem rodar em uma velocidade razoável sem sofrer conversão e o novo design foi para uma atualização que passou de 32 bits do prisma para 64 bits, porque iria acabar os bits das arquiteturas de 32bits. Na criação de uma nova arquitetura foi levado em conta alguns objetivos como, alta performance, longevidade, capacidade de executar sistemas operacionais UNIX e VMS tendo uma migração fácil de arquiteturas VAX e MIPS, todos esses objetivos influenciaram na concepção do projeto.
Somente em meados da década de 1990 os processadores receberam o nome de "Alpha", pois originalmente eram designados como a série DECchip 21 x 64, onde os dois primeiros dígitos "21" significa o século XXI e os dígitos "64" vem de 64 bits. Também eram identificados por número de EV (que seria uma abreviação formal de "Extended VAX" ou também tendo um significado humorístico de "Electric Vlasic" que homenageia o experimento elétrico picles no Western Research Lab).
Em 1996 a produção dos chips foi licenciada para Samsung Electronics Company. Após a aquisição da Digital pela Compaq, a maioria dos produtos alpha foram colocados como API NetWorks Inc, sendo uma empresa privada financiada pela Samsung e Compaq.
Em outubro de 2001, MicroWay tornou-se a vendedora e prestadora de serviços da linha de produtos baseado em Alpha NetWorks API.
Em 2001 a Compaq anunciou que Alpha poderia ser extinto até 2004 em favor ao Itanium da Intel, vendendo toda propriedade do Alpha para a Intel. No mesmo ano, HP como nova proprietária da Compaq anunciou que continuaria com a produção por mais alguns anos.
Arquitetura Alpha Como um dos principais objetivos do projeto era longevidade e alta performance foi definido que o processador teria uma arquitetura de 64 bits, pois as arquiteturas que existiam na época ainda eram de 32 bits, sendo esse um dos principais pontos onde o Alpha se diferenciava das demais. Outro fato importante em que Alpha se destacou em relação aos concorrentes foi a técnica de múltiplas instruções, como não é possível acelerar um ciclo de clock, era necessário aumentar o trabalho que deve ser feito por um ciclo de clock, implementando cerca de 10 novas instruções por ciclo.
Processador RISC com 64 bits, executava instruções de comprimento fixo de 32 bits cada, possui 32 registradores de inteiro e 32 registradores de ponto flutuante.
5 grupos foram criados para simplificar e facilitar ações pepiling no conjunto de instruções: thumb|Arquitetura Alpha 21064 Instruções de inteiro – São instruções de aritmética, comparação e lógica, que envolvem soma, subtração e multiplicação de números inteiros; Instruções de ponto flutuante – são as instruções convencionais encontradas em arquiteturas RISC e possuem operações adicionais para mesclar operações de sinal/expoente; Instruções Branch – São testes condicionais como positivo ou negativo, par ou ímpar, igual ou não a zero.; Instruções Load/Store – Realizam operações entre registradores; PALcode instruções – É um conjunto de sub-rotinas, sendo específico para o sistema operacional, as sub-rotinas são utilizadas no contexto de comutação, interrupções de exceções e gerenciamento de memória. As sub-rotinas são chamadas pelo hardware ou por instruções de CALL_PAL, PALcode somente é executado em PALmode, um modo privilegiado que acaba com alguns eventos do sistema permitindo o controle completo do PALcode do sistema físico do hardware.
A arquitetura foi projetada para sistemas multiprocessadores. Sua primeira versão executava dois comandos em unidades diferentes, em versões posteriores de 7 a 13 estágios de pipeline são processadas, dependendo da UC e a geração do processador.
A arquitetura alpha não possui branch delay slots, instruções suppressed e instruções byte load/store (mais tardes adicionadas com BWX), porque seu objetivo principal era ter um alto desempenho suportando um aumento de 1 milhão de vezes no desempenho por 25 anos.
O cache L1 foi integrado: 8Kb para instruções (I-cache, cache de instrução), mapeamento-direto (uma linha na cache deve ser armazenada em um lugar específico, o qual depende do seu índice), também de 8Kb para dados (D-cache, cache de dados), mapeamento-direto e write-through (é uma politica de escrita, onde cada escrita é imediatamente repetida na memória principal). Latência de leitura de D-cache foi 3 ciclos.
Especificações da arquitetura
Registradores registradores DEC Alpha 63 . . . 47 . . . 31 . . . 15 . . . 01 00 (posição do bit) Registradores Gerais R0 R0 R1 R1 R2 R2 • • • R29 R29 R30 R30 R31 (zero) R31, sempre zero Registradores de Ponto-Flutuante F0 F0 F1 F1 F2 F2 • • • F29 F29 F30 F30 F31 (zero) F31, sempre zero Program Counter PC 0 0 Program Counter Registradores de Controle LR0 Lock Register 0 LR1 Lock Register 1 FPCR FP Control Register O conjunto de registradores foi definido sendo, 32 registradores de inteiros, 32 de ponto flutuante, 1 contador chamado de PC (program counter), 2 registradores de fechamento chamados LR0 e LR1, também um registrador FPCR (floating-point control register) para controle de ponto flutuante. Os registradores de inteiros receberam os nomes de R0 até R31, os de ponto flutuante de F0 até F31, sendo os registradores R31 e F31 sempre zeros (hardwired) e a escrita nestes registradores era ignorada. O registrador PC (Program Counter) é de 64 bits e contém o endereço da próxima instrução quando uma instrução é decodificada, incrementando ao seu valor atual. Os registradores LR0 e LR1 são usados pelas instruções de load e store/condicional para suporte a multiprocessadores.
O registrador FPCR (registrador para controle de ponto flutuante) é usado para implementações do Alpha em hardware compatível com IEEE 754.
Formato de dados Por ser uma arquitetura load/store todas as operações são realizadas entre registradores. Com registradores de 64 bits, sendo 32 de inteiros e 32 de ponto flutuante. Os tipos de inteiros suportados são Longword (32-bit) e quadword (64-bit) e também suporta 4 tipos de ponto flutuante, que são eles: IEEE single (32-bits), IEEE double (64-bits), VAX F-float e VAX G-float, estes dois últimos foram incluídos para manter a compatibilidade com o VAX. 1 byte8 bitsPalavra16 bitsCódigo32 bitsQuadword64 bitsOctaword128 bits
Formato de instrução Todas as instruções são de 32 bits, todos tem um código de operando (Opcode) de 6 bits.
Cada um dos tipos será especificado logo abaixo da tabela: 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Tipo Opcode Ra Rb Unused 0 Function Rc Integer operate Opcode Ra Literal 1 Function Rc Integer operate, literal Opcode Ra Rb Function Rc Floating-point operate Opcode Ra Rb Displacement Memory format Opcode Ra Displacement Branch format Opcode Function CALL_PAL format O formato Integer operate é usado por instruções de inteiro, o primeiro campo possui 6 bits e contém o opcode da instrução, o próximo campo é definido como Ra que específica o registrador que contém o primeiro operando e o Rb específica o segundo operando. Logo após um campo com 3 bits não é utilizado ficando reservado. Em seguida 1 bit contendo o valor "0" para distinguir do formato tipo de número inteiro literal. O campo function é definido com 7 bits e usado para especificar uma operação. Por último o campo Rc específica que o resultado do cálculo deve ser escrito.
O formato integer literal é similar ao integer operate, o que diferencia é o campo Rb e o unosed, ambos não existem, em vez disso este espaço é usado pelo número literal formando um campo de 8 bits, que é a grande diferença entre os dois formatos. Este formato é usado quando um dos operando é um número literal. O campo com 1 bit de espaço passa a ser definido pelo valor "1".
O formato floating-point operate também é similar ao integer operate, suas particularidades esta no campo function que utiliza um espaço de 11 bits onde é possível utilizar o campo literal (antes usado no formato integer literal) e o campo unused (usado no formato integer operate).
O formato memory é usado principalmente por instruções de Load/Store. Consiste em um campo de 6 bits para o opcode (como os demais), campo Ra com 5 bits e um campo displacement para deslocamento com 16 bits.
O formato branch possui apenas um campo para o opcode (6 bits), um campo Ra (5 bits) e um campo displacement (21 bits). No campo Ra é feito um teste em instruções de desvio condicional, se a condição por atendida o PC é atualizado, adicionando o conteúdo do campo displacement com o valor do PC (program counter). Se o valor do campo displacement for positivo, o PC é incrementado, mas se o valor do campo displacement for negativo o PC é decrementado, ambos se o desvio (branch) ocorrer.
O formato CALL_PAL é usado apenas pela instrução CALL_PALL que por sua vez é usada para chamar sub-rotinas PALcode. Este formato possui apenas dois campos, sendo eles, o opcode (6 bits) e o function (26 bits) que contém um número inteiro especificando uma sub-rotina PAL.
Memória O processador Alpha possui um endereço de memória virtual de 64 bits sem segmentação de memória, podendo ser implementado no mínimo 43 bits. Mesmo não utilizando todos os bits possíveis como por exemplo TLBs, é necessário implementar para verificação dos bits iguais a zero para garantir a compatibilidade do software que implementarem um espaço maior ou o espaço completo de endereços virtuais.
Principais Modelos A primeira versão do processador (1992) foi o Alpha 21064 ou EV4, sendo o primeiro microprocessador CMOS, rodava em 192 MHz e meses depois chegou a rodar em 200 MHz, com design superescalar e superpipelined.
A segunda versão, 21164 ou EV5 (1995), foi o primeiro a introduzir uma grande cache secundária no chip, com frequência de até 333 MHz, 500 MHz em 1996 e em 1998 chegou a velocidade de 666 MHz.
A terceira versão,21264 ou EV6 (1998),com 450 MHz, foi a primeira a combinar alta frequência operacional e a micro-arquitetura de execução fora de ordem. Em 2001 foi lançado o 21264C/EV68CB com frequência de 1,25 GHz
O controlador de memória no chip foi implementado pela primeira vez na quarta versão do processador, 21364 ou EV7 (2003).