# PowerPC

PowerPC (com o retroacrônimo Performance Optimization With Enhanced RISC - Performance Computing, às vezes abreviado como PPC) é um conjunto de instruções projetado juntamente aos princípios RISC (Reduced Instruction Set Computing), que permite uma implementação superescalar (várias instruções podendo iniciar ao mesmo e serem executadas de forma independente). Foi criado em 1991 pela aliança composta pela Apple, IBM e Motorola, conhecida como AIM. PowerPC, é um conjunto de instruções em evolução, desde 2006 em que foi renomeado Power ISA, mas vive com um legado para algumas implementações de processadores baseados na arquitetura Power. O projeto possui versão tanto em 32 bits quanto em 64 bits.
Originalmente destinado a computadores pessoais, CPUs PowerPC, desde então, tornou-se popular em sistemas embarcados e processadores de alto desempenho. PowerPC era a pedra angular da PrEP da AIM e iniciativas Referência plataforma de hardware comum na década de 1990 e, embora a arquitetura ser bem conhecida por ser usada por linhas Macintosh da Apple 1994-2006 (antes da transição da Apple para Intel), seu uso era em consoles de videogame e incorporado aplicações, desde uma variedade de usos. PowerPC é amplamente baseada na arquitetura do conjunto de instruções antes POWER da IBM, e mantém um alto nível de compatibilidade com o POWER, as arquiteturas permaneceram perto o suficiente para que os mesmos programas e sistemas operacionais sejam executados em ambos, alguns cuidados são tomados na preparação de novos chips da série Power, um deles é implementar o conjunto de instruções PowerPC completo.

## História

A história do RISC começou com projeto 801 com pesquisas da IBM, em que John Cocke foi o principal desenvolvedor, em que desenvolveu os conceitos de RISC nos anos de 1975-1978. Os processadores baseados em microprocessadores foram usadas em vários produtos IBM, incorporados eventualmente tornando-se o 16-registradores ROMP processador usado no IBM RT. A RT foi uma criação com implementação dos princípios RISC, e o desempenho foi desapontante em comparação com o microprocessador 68000 da Motorola que obteve um alto desempenho. Entre os anos de 1982-1984 IBM iniciou um projeto para construir o microprocessador mais rápido do mercado; esta nova arquitetura de 64-bit se tornou conhecido como o "Projeto América" em todo o seu ciclo de desenvolvimento que durou cerca de 5-6 anos. O resultado foi a arquitetura do conjunto de instruções POWER, introduzida com o RISC System / 6000 no início de 1990. O microprocessador POWER original, uma das primeiras implementações superescalares RISC, foi um alto desempenho, desenvolvendo multi-chip. A IBM logo percebeu que era necessário um microprocessador single-chip, a fim de dimensionar suas RS / 6000 linha de baixa-end para máquinas high-end. Trabalho em uma fonte de um chip microprocessador, designou o RSC (RISC Single Chip) que começou no início de 1991, a IBM realizou seu projeto que poderia potencialmente se tornar um microprocessador de alto volume usado em toda a indústria. IBM abordou a Apple com o objetivo de colaborar no desenvolvimento de uma família de microprocessadores com um único chip baseado na arquitetura POWER. Logo depois, a Apple, sendo um dos maiores clientes da Motorola de microprocessadores de classe desktop, pediu à Motorola para participar das discussões, devido ao seu longo relacionamento e a sua mais extensa experiência com a fabricação de microprocessadores de alto volume da IBM, e para formar uma segunda fonte para os microprocessadores. Esta colaboração de três vias se tornou conhecido como AIM aliança, formada por Apple, IBM, Motorola. Em 1991, o PowerPC era apenas uma faceta de uma aliança maior entre estas três empresas. Na época, a maior parte da indústria de computadores pessoais estava criando sistemas baseados no Intel 80386 e 80486 , que tinha uma arquitetura CISC, o desenvolvimento do processador Pentium estava bem encaminhado.
O chip PowerPC foi uma das várias aventuras conjuntas envolvendo as três, em seus esforços para combater o crescente domínio Microsoft-Intel de computação pessoal. Para Motorola, POWER parecia um negócio inacreditável. Ele lhes permitiu vender uma CPU RISC amplamente testada e poderosa por pouco dinheiro, projetado em sua própria casa. Ele também manteve os laços com um cliente importante, a Apple, a parceria oferece a possibilidade de adicionar IBM também, que pode comprar versões menores da Motorola em vez de fazer o seu próprio. Neste ponto, a Motorola já tinha seu próprio projeto RISC na forma do 88000 que estava mal no mercado. A Motorola estava indo bem com sua família 68000 e a maior parte do financiamento foi focado nisso. O esforço no 88000 foi um pouco carente de recursos. No entanto, o 88000 já estava em produção e tinha máquinas de 88K mas a Apple já tinha protótipo de máquinas de 88K em execução. O 88000 tinha também alcançou um número de vitórias de desenvolvimento incorporados em aplicações de telecomunicações. Se a nova versão de um PODER-chip poderia ser bus-compatible em um nível de hardware com o 88000, mas como comportaria a Apple e Motorola, para trazer máquinas para o mercado muito mais rápido, uma vez que não teria que redesenhar sua arquitetura de bordo. O resultado destes vários requisitos da especificação era PowerPC (Performance Computacional). As diferenças entre o anterior conjunto de instruções POWER e PowerPC é descrito no Anexo E do manual para PowerPC ISA v.2.02. Quando os primeiros produtos PowerPC chegaram ao mercado, eles foram recebidos com entusiasmo. Além da Apple, IBM e do Grupo Computer Motorola oferecerem sistemas construídos em torno dos processadores. Microsoft lançou o Windows NT 3.51 para a arquitetura, que foi usado em servidores PowerPC da Motorola, e Sun Microsystems ofereceu uma versão do seu sistema operacional Solaris. IBM AIX Unix portado seu e planejado um lançamento do OS / 2. Ao longo de meados dos anos 1990, os processadores PowerPC alcançado os resultados dos testes de benchmark que combinavam ou ultrapassaram as dos CPUs mais rápidas x86. Em última análise, a demanda para a nova arquitetura no ambiente de trabalho nunca realmente se concretizou. Windows OS e Sun clientes sentiam a falta de software de aplicação para o PowerPC, quase universalmente ignorando o chip. As versões PowerPC de Solaris, OS / 2 e Windows foram interrompidas após um breve período de tempo no mercado. Apenas no Macintosh, devido à persistência da Apple, fez a tração ganho PowerPC.
Para a Apple, o desempenho do PowerPC era um ponto brilhante em face do aumento da concorrência a partir do Windows 95 e PCs baseados no Windows NT. Em paralelo com a aliança entre a IBM e Motorola, ambas as empresas tinham os esforços de desenvolvimento em curso internamente. A linha de PowerQUICC foi o resultado desse trabalho dentro Motorola. A série 4xx de processadores embarcados estava em andamento dentro da IBM. O negócio processador embutido IBM cresceu para quase 100 milhões de dólares em receitas e atraiu centenas de clientes. No entanto, perto do fim da década, problemas de fabricação começaram a assolar a aliança AIM, da mesma maneira com Motorola, que era constantemente empurrada para trás nas implantações de novos processadores para a Apple e outros fabricantes: primeiro da Motorola na década de 1990 com o G3 e G4 processadores e IBM com o processador G5 de 64 bits em 2003. Em 2004, a Motorola fabricou o chip, negócios girando fora de seu negócio de semicondutores como uma empresa independente chamada Freescale Semiconductor. Na mesma época, a IBM saiu do mercado processador embutido de 32 bits com a venda de sua linha de produtos PowerPC a Applied Micro Circuits Corporation (AMCC) e com foco em projetos de chips de 64 bits, mantendo seu compromisso de PowerPC CPUs para fabricantes de máquinas de jogo tais como GameCube da Nintendo e Wii, PlayStation 3 da Sony e Xbox 360 da Microsoft, dos quais os dois últimos ambos usam processadores de 64 bits. Em 2005, a Apple anunciou que deixaria de usar processadores PowerPC de seus computadores Macintosh da Apple, favorecendo processadores Intel produzidos em vez disso, citando as limitações do chip para o futuro hardware de computador pessoal especificamente relacionadas à geração de calor e consumo de energia, bem como a incapacidade de desempenho da IBM para mover o 970 (PowerPC G5) do processador para a faixa de 3 GHz. A aliança IBM-Freescale foi substituído por um organismo de normalização aberto chamado Power.org. Power.org opera sob a governação do IEEE com a IBM continuar a usar e desenvolver o processador PowerPC em consolas de jogos e Freescale Semicondutor, orientadas exclusivamente para dispositivos embarcados.
Esta arquitetura está presente no microprocessador Cell, da PlayStation 3 que foi projetado em parceria entre Sony, Toshiba e IBM. Os videogames da nova geração, PS4 e Xbox One, migraram para a plataforma x86 (a mesma utilizada pelos computadores). Já o Wii U continua utilizando a tecnologia PowerPC.

## Características

Começando pelas especificações do POWER, o PowerPC adiciona:
* Suporte para operações em big-endian e little-endian; o PowerPC pode alternar entre os modos durante os processos. Essa ferramenta não é suportada no PowerPC 970.
* Precisão de instruções para alguns ponto flutuantes e também adição de dupla precisão.
* Pontos flutuantes adicionais nos comandos da Apple.
* Compartibilidade reversa em 64 bits para o módulo de 32 bits.
* Fusão no multiplicador de adição.
* Arquitetura de gerenciamento de memória paginada que é muito usada em servidores e sistema de computadores.
* Arquitetura de gerenciamento de memória nomeado Book-E, substituindo a arquitetura de gerenciamento de memória convencional para aplicações embarcadas. Book-E é um software de aplicação compatível com as implementações de PowerPC existentes, mas precisa de pequenas mudanças para o sistema operacional.
Algumas instruções apresentadas no manual de instruções do POWER eram consideradas muito complexas, sendo removidas da arquitetura do PowerPC. Algumas instruções removidas podiam ser emuladas pelos sistemas operacionais, caso necessário. As instruções removidas eram:
* Conditional moves.
* Instruções de Load e Store para dados em ponto flutuante com precisão quadrupla.
* Instruções para strings.

## Itens definidos pela arquitetura PowerPC

A arquitetura PowerPC define convenções de como a aritmética, tratamento de exceções e de tempo, gerenciamento de memória, devem funcionar para qualquer implementação PowerPC. A seguir temos uma lista de itens que são definidos formalmente pela arquitetura [2]:
* Conjunto de Instruções – define os modos de endereçamento e a descrição das instruções de load/store, aritmética de inteiros e de ponto flutuante;
* Modelo de programação – define o conjunto de registradores e as convenções de memoria, também define a ordem dos bits e bytes e como números são representados;
* Modelo de memória – define o tamanho do espaço de endereçamento e a habilidade de configurar paginas de memória com proteção da mesma;
* Modelo de exceções – define o conjunto básico de exceções e as situações que podem gerá-las;
* Modelo de gerenciamento de memória – define como a memoria é particionada, protegida, configurada e traduzida;
* Modelo de tempo – define ferramentas para manipulação do tempo do dia e um conjunto de exceções relacionas a tempo.

## Níveis da arquitetura

A especificação PowerPC é separada em três grandes níveis, pois ela tenta abranger ampla área de possíveis implementações. Por exemplo, um sistema embarcado nem sempre precisa de um nível de gerenciamento de supervisor ou de um sistema superescalar, para muitos desses sistemas o primeiro nível dessa arquitetura já é suficiente. Seguem os três níveis em ordem crescente de complexidade [2]:
* Arquitetura de conjunto de instruções do usuário (UISA): é o nível do software de nível usuário, definindo o conjunto de instruções, registradores do usuário, tipos de dados, convenções de memória, e os modelos de programação e memória;
* Arquitetura de ambiente virtual (VEA): define mais algumas funcionalidades de nível usuário que estão fora das requisições de softwares típicos, como: modelo de memoria num ambiente onde vários dispositivos podem acessar a memoria, modelo de cache e instruções de controle de cache e também a instalação de base de tempo como visto pelo usuário;
* Arquitetura de ambiente de operação (OEA): define os recursos de nível supervisor que são normalmente requisitados por um sistema operacional, assim como o modelo de gerenciamento de memoria, registradores de nível supervisor, requisitos de sincronização e o modelo de exceções. Também define a instalação de base de tempo como visto por supervisor.
Esse sistema funciona de forma em que qualquer implementação é obrigada a implementar o nível UISA já que este nível determina funcionalidades cruciais para qualquer tipo de sistema. Quem implementar o nível VEA estará herdando o nível UISA. Da mesma forma quem implementa o nível de operação estará consequentemente implementando o nível VEA e o nível UISA.

## Formato de ordem de bytes

Grande parte dos chips PowerPC trocam a ordem de bytes através de bits no REM (Registrador do Estado da Máquina) com um segundo bit fornecido para permitir que o OS rode com uma ordem de bytes diferente. Acessos ao ''inverted page table'' (é uma tabela de hash que funciona como TLB sem chip embarcado de armazenamento) sempre são feitos em modo big-endian. O processador inicia em modo big-endian. No modo little-endian, é realizado um XOR entre os três bits menos relevantes do endereço efetivo com um valor de três bit selecionado pelo tamanho do operando. O sistema operacional vai ver uma forma destorcida do mundo quando ele acessar o chip externo bem como vídeos e placa de rede. Ajustar essa visão deformada requer que a placa-mae execute incondicionalmente uma troca em todos os arquivos de 64-bits que esteja entrando ou saindo do processador. O Endianness, portanto se torna propriedade da placa-mae. Um OS que opera em lillte-endian, sobre uma placa-mae de big-endian, deve trocar bits e desfazer o XOR enquanto acessa os chips little-endian.
Um interessante efeito colateral desse implemento, é o programa poder armazenar um valor de 64-bits para memoria estando em um modo, mudar para o outro modo, e reler o mesmo valor em 64-bits, sem ver uma mudança da ordem dos bytes. Isso não acontecera caso a placa-mãe troque ao mesmo tempo.

## Implementações

A primeira implementação da arquitetura foi o PowerPC 601, lançado em 1992, com base na RSC, a implementação de um híbrido das instruções Power1 e PowerPC. Isso permitiu que o chip fosse utilizado pela IBM em suas plataformas baseadas Power1 existentes, embora isso também tenha significado uma leve dor de cabeça quando se muda para os de 2ª geração "puros" projetos PowerPC. A Apple continuou a trabalhar em uma nova linha de computadores Macintosh baseados no chip e, finalmente, lançados como o Power Macintosh baseado em 601 em 14 de março de 1994.
A IBM também tinha uma linha completa de desktops baseados PowerPC construído e pronto para enviar; infelizmente, o sistema operacional que a IBM tinha a intenção de funcionar com esses desktops Microsoft Windows NT- não foi completa até o início de 1993, quando as máquinas estavam prontas para a comercialização. Assim, e ainda mais porque a IBM tinha desenvolvido animosidade contra a Microsoft, a IBM decidiu reescrever OS/2 para o PowerPC. Demorou dois anos para a IBM reescrever o OS/2 para PowerPC, e pelo tempo que o OS/2 demorou para ficar pronto, o mercado do OS/2 em PowerPC tinha evaporado. Por esta razão o design de referência (codinome Sandalbow) com base na CPU PowerPC 601 foi lançado como um modelo RS/6000 (edição de Byte abril 1994 incluiu um extenso artigo sobre a Apple e IBM PowerPC desktops).
A Apple, que também não possuía o PowerPC baseado no OS, pegou uma rota diferente. Utilizando de plataformas portáteis fornecidas pelo secreto Star Trek Project, a companhia transportou peças essenciais do sistema MAC OS para a arquitetura do PowerPC, e além disso, escreveu o emulador 68k que podia rodar as aplicações do 68k e as partes do OS que não tinham sido escritas.
A segunda geração ''pura'' que incluía o ''low end'' PowerPC 603 e ''high end'' PowerPC 604. O 603 é notável por seu baixo custo e consumo de energia. Isso era uma meta de projeto deliberado por parte da Motorola, que usava o projeto do 603 para construir os núcleos básicos para as futuras gerações dos chips PPC. A Apple tentou usar o 603 em um novo projeto de laptop, mas foi incapaz por conta do pequeno 8 KiB level 1 cache. O emulador 68000 do Mac OS não coube no 8 KiB e portanto reduziu drasticamente a velocidade do computador. O 603e solucionou este problema através do 16KiB L1 cache, que permitia o emulador a ter um funcionamento eficiente.
Em 1993, os desenvolvedores na IBM´s Essex Junction Burlington, Vermont facilitou o inicio do trabalho numa versão do PowerPC, que suportaria as instruções do Intel x86 de a se encaixar corretamente na CPU. Enquanto isso era apenas uma projeto de arquitetura que a IBM estava trabalhando, o chip começou a a ser conhecido dentro da IBM e pela mídia como PowerPC 615. Os rumores da rentabilidade e de erros de desempenho nas trocas entre o x86 e o nativo PowerPC, resultaram no cancelamento do projeto em 1995 após um pequeno numero de chips terem sido produzidos em house testing.
A primeira implementação 64-bit foi o PowerPC 620, mas parecia estar um pouco usado, pois a Apple não queria comprar, além de ser muito caro para embarcar no mercado. Foi tardio e mais lento do que o prometido, e a IBM usou o próprio Power3, não oferecendo o prometido 64-bit ''small'' version até a introdução do PowerPC 970 em 2002. O 970 era um processador 64-bit derivado do Power4 processador de server. Para cria-lo, o núcleo do Power4 foi modificado para ser retro compatível com os processadores de 32-bit do PowerPC, e uma unidade de vetor foi adicionada.
Os processadores RS64 da IBM são uma família de chips implementando a variante de arquitetura de PowerPC da Amazon. Esses processadores são usados no RS/6000 e AS/400, a arquitetura da Amazon inclui extensões usadas no AS/400. O Power4 e mais tarde processadores POWER, implementaram a arquitetura Amazon e colocaram o RS64 no RS/6000 e AS/400.
A IBM desenvolveu linhas de produtos separados chamados de '4xx', focados no embarcamento do mercado. Esses projetos incluirão o 401,403, 405,440 e 460 em 2004, a IBM vendeu a linha de produtor 4xx para a Applied Micro Circuits Corporation que continuou a desenvolver produtos de alta performance, parcialmente baseados na tecnologia IBM, juntamente com a tecnologia desenvolvida dentro da AMCC. Esses produtos tinham foco numa variedade de aplicações, incluindo networking, wireless, armazenamento, printing/imaging e automação industrial.
Numericamente falando, o PowerPC foi mais encontrado em controladores de carros. Para o mercado automotivo, os semicondutores sem escala inicialmente ofereceram muitas variedades chamadas de família MPC5xx e MPC555, construídas numa variedade de núcleos 601 chamada de 8xx e projetadas em Israel pela MSIL. O núcleo 601 é single issue, por isso adicionaram diversos bits de hardware personalizados, para permitir o I/O no chip único. Em 2004, a próxima geração de 4 dígitos 55xx, lançada para o mercado automotivo. Estes usam o novo e200 da PowerPc.
Networking é outra área, onde processadores PowerPC embarcados são achados em grande escala. A MSIL pegou a engine QUICC do MC68302 e fez o PowerQUICC MPC860. Este foi um processador muito famoso usado em muitos roteadores Cisco no fim dos anos 1990. Variantes do PowerQUICC incluíam o MPC850, e o MPC823/MPC823e. Todas as variantes incluíam uma engine RISC separada chamada de CMP que carregava processos de comunicação do processador central e das funções DMA. O chip sucessor dessa família, o MPC8260, tem um núcleo 603e base e uma CPM diferente.

## Modelos de processadores

* PowerPC e200
* PowerPC e300
* PowerPC e500
* PowerPC e600
* PowerPC G5 dual-core
* PowerPC G5 quad-core