« Arquitetura do PlayStation (index)

Arquitetura do PlayStation

Chapter 3: CPU


Índice

  1. As origens
    1. Um pouco de história
    2. A MIPS e a Sony
    3. A LSI e a encomenda
  2. O produto oferecido
  3. Assumindo o controle da CPU
  4. Complementando o núcleo
    1. Coprocessador de Controle de Sistema
    2. Geometry Transformation Engine
    3. Motion Decoder
  5. Unidades ausentes?
  6. Uma infinidade de atrasos

Esta seção analisa o Sony CXD8530BQ, um dos dois grandes chips que o console possui. É o que hoje chamamos de "System-on-Chip" (SoC — Sistema-no-Chip, em tradução livre).

As origens

O processador principal é um daqueles "x projetado por y, com base em z e adquirido de forma secundária por w", o que é um pouco denso para resumir em algumas frases. Então, por que não começamos com um pouco de contexto histórico?

Um pouco de história

Os primeiros anos da década de 90 foram marcados por uma mudança no destino de muitas CPUs populares. As CPUs de 8 bits, como a Z80 e a 6502, que antes eram líderes de mercado, já não estavam mais em destaque. O famoso 68000 da Motorola, juntamente com outros projetos de 16 bits que fizeram sucesso no final dos anos 80, tornaram-se candidatos à substituição. Mesmo nessa época, no mundo dos PCs, Tanenbaum, em seu debate celebrado com Torvalds, deu apenas mais cinco anos de vida para a arquitetura x86 da Intel no mercado doméstico.

À primeira vista, pode parecer que o desenvolvimento tecnológico atingiu um limite naquele momento. Mas, na realidade, havia uma nova onda de CPUs pouco conhecidas que faziam seu caminho para dispositivos populares. Muitos desses projetos tiveram origem na academia, e existiam para provar determinados conjuntos de ideias de concepção. Exemplos de CPUs da próxima geração incluídos neste ponto:

Todos esses processadores tinham algo em comum: seguiram a disciplina do Reduced Instruction Set Computer (RISC), que mudou radicalmente a maneira como estes chips precisavam ser projetados e programados. Uma regra das CPUs RISC ditava que uma única instrução não pode misturar operações de memória com operações de registrador, permitindo que projetistas de hardware simplifiquem o circuito que executa instruções... e, em seguida, aprimorem-no com técnicas de paralelismo.

A MIPS e a Sony

No final dos anos 80, os processadores MIPS se tornaram um tópico de conversa após serem adotados (e posteriormente adquiridos) pela Silicon Graphics Incorporated (SGI) para equipar seus equipamentos. A SGI foi uma inovação influente no mercado de gráficos de computador, especialmente com o desenvolvimento de pipelines de vértices acelerados por hardware, cuja tarefa era originalmente realizada por software (dentro da CPU).

Durante o desenvolvimento do PlayStation, a MIPS estava oferecendo os processadores da série R3000A. Tratava-se de máquinas de 32 bits e era parte de seu catálogo de baixo custo. Consequentemente, embora o R3000A não fizesse parte da linha principal (ao contrário do R4000, que outros escolheriam mais tarde), era um investimento atraente em termos de custo.

A Sony projetou seus chips de áudio e de gráficos internamente, mas ainda precisava de um chip principal que pudesse conduzir os dois. A CPU escolhida tinha que ser poderosa o suficiente para mostrar as impressionantes capacidades dos chips da Sony, mas também acessível para manter o console a um preço competitivo.

A LSI e a encomenda

Ao mesmo tempo, a LSI Logic (uma fabricante de semicondutores) estava fornecendo um programa "construa sua própria" CPU para empresas. Este serviço era chamado de CoreWare e permitia que os clientes construíssem seus próprios pacotes de CPU escolhendo uma série de blocos de circuito . Parte da biblioteca da CoreWare incluía o bloco "CW33300", um núcleo de CPU derivado do LSI LR33300, um chip de CPU genérico que a LSI também comercializava.

Agora, onde estou querendo chegar com isso? Ocorre que o LR33300 e o CW33300 da LSI são uma versão compatível ao nível binário da família MIPS R3000A. Suas arquiteturas diferem ligeiramente em algumas áreas, mas a interface de programação (ISA MIPS) permanece a mesma.

No final, a Sony contratou a LSI para construir seu pacote de CPU. Eles escolheram o CW33300, alteraram alguns bits e combinaram com outros blocos para formar o chip encontrado na placa-mãe do PlayStation.

O produto oferecido

O núcleo da CPU resultante opera a 33,87 MHz e possui:

Para fazer algo significativo, a Sony forneceu 2 MB de RAM para uso geral. Curiosamente, eles instalaram chips Extended Data Out (EDO) na placa-mãe. Esses chips são ligeiramente mais eficientes do que uma DRAM típica, obtendo menor latência.

Assumindo o controle da CPU

Em algum momento, qualquer subsistema (gráfico, áudio ou CD) exigirá grandes quantidades de dados em alta velocidade. No entanto, a CPU nem sempre conseguirá acompanhar a demanda.

Por esse motivo, o controlador de CD-ROM, MDEC, GPU, SPU e a porta paralela têm acesso a um controlador DMA exclusivo sempre que precisam. O DMA assume o controle do barramento principal e realiza uma transferência de dados. A taxa resultante é muito mais rápida do que se dependesse da CPU, embora ela ainda seja necessária para configurar uma transferência do DMA.

Além disso, tenha em mente que quando o DMA é ativado, a CPU não pode mais acessar o barramento principal. Isso significa que a CPU ficará ociosa a menos que tenha algo na Scratchpad para mantê-la ocupada!

Complementando o núcleo

Assim como outros processadores baseados no MIPS R3000, o CW33300 suporta configurações com até quatro coprocessadores, mas a Sony personalizou-o com três:

Coprocessador de Controle de Sistema

Identificado como "CP0", o coprocessador de controle de sistema é um bloco comum encontrando em CPUs MIPS. Em sistemas baseados no R3000, como este, o CP0 controla como a cache é implementada. Assim, permitindo o acesso direto à cache de dados (na forma de "Scratchpad") e à cache de instruções (usando o "isolamento de cache"). O coprocessador de controle também é responsável por lidar com as interrupções, exceções e pontos de parada, sendo este último útil durante a depuração.

Espera aí, os coprocessadores não deveriam apenas expandir as funções da CPU? Por que o CP0 está fortemente acoplado à CPU?

De fato, os núcleos R3000 dependem do coprocessador de controle de sistema para conseguir usar muitos componentes, mas se isso deve ser "legal" ou não, depende da interpretação da palavra "coprocessador". Segundo a MIPS, um coprocessador não é estritamente uma parte opcional da CPU, ele também pode comandar o ambiente da CPU (cache, interrupções, etc.). Portanto, um coprocessador pode ser uma parte integrante do sistema. Isso é apenas algo a se ter em mente ao falar sobre sistemas relacionados ao MIPS.

Posteriormente, os sistemas baseados no R4000 incorporaram uma unidade de gerência de memória (MMU, do inglês Memory Management Unit) e um Translation Lookaside Buffer (TLB) neste bloco, aumentando assim suas capacidades e assumindo novos papéis.

Geometry Transformation Engine

A "CP2" ou Geometry Transformation Engine (GTE) é um processador matemático especial que acelera cálculos de vetores e matrizes.

Embora opere apenas com valores do tipo ponto fixo, ele ainda fornece operações úteis para gráficos 3D, como:

Você não precisa se lembrar de todas essas informações para seguir o restante do artigo! Apenas tenha em mente que o GTE cuidará das primeiras etapas do pipeline de gráficos, como projeção 3D, iluminação e recorte. Isso ajudará a gerar os dados necessários que serão enviados à GPU para renderização.

Motion Decoder

O Motion Decoder (decodificador de movimento, em tradução livre), também é chamado "MDEC" ou "Macroblock Decoder", é outro processador que fica ao lado da CPU. Desta vez, ele descomprime "Macroblocks" em um formato que a GPU consegue entender. Um Macroblock é uma estrutura de dados que contém uma imagem com codificação semelhante à do JPEG.

O MDEC descomprime por vez bitmaps feitos de 8x8 píxeis com 24 bpp. O guia de programação de Walker afirma que o MDEC pode processar 9.000 macroblocks por segundo. Isso permitiria transmitir um Full-Motion Video (FMV — vídeo de movimento completo, em tradução livre) de 320x240 píxeis a 30 quadros por segundo.

O DMA é usado para enviar dados comprimidos através do CD-ROM -> RAM -> MDEC. O mesmo caminho é percorrido na direção oposta, embora, neste caso, o destino seja a VRAM.

Embora este componente esteja dentro do SoC e compartilhe o mesmo barramento de dados, ele não é um coprocessador MIPS, então a CPU/DMA o acessa através do mapa de memória (em vez de interceptar instruções).

Para obter mais informações sobre a unidade MDEC, sugiro verificar os textos de Sabin e de Czekański's .

Unidades ausentes?

Até agora, temos uma "CP0" e uma "CP2", mas onde está a "CP1"? Bem, essa está reservada para uma Unidade de Ponto Flutuante (FPU) e, infelizmente, a Sony não forneceu uma. Isso não significa que a CPU não possa realizar aritmética com números decimais, apenas não será rápida o suficiente (usando FPU emulada por software) ou muito precisa (usando aritmética de ponto fixo).

A lógica do jogo (envolvendo física, detecção de colisão, etc.) ainda pode funcionar com aritmética de ponto fixo. A codificação de ponto fixo armazena números decimais com um número imutável de casas decimais. Isso implica uma perda de precisão após certas operações, mas lembre-se, isso é um console de videogame, não um simulador de voo profissional. Portanto, o trade-off entre precisão e desemprenho é relativamente viável.

Aliás, às vezes confundo os tipos de números "ponto fixo", "ponto flutuante", "decimal" e "inteiro" (espero que não mais!). Se você se sente da mesma forma, recomendo dar uma olhada no resumo rápido de Gabriel Ivancescu para atualizar rapidamente esses conceitos.

Uma infinidade de atrasos

Como já vimos anteriormente, o processador CW33300 é um processador com pipeline, o que significa que ele coloca várias instruções em fila e as executa em paralelo em diferentes estágios. Isso melhora enormemente a taxa de processamento de instruções, mas se não for controlado adequadamente, pode levar a riscos de pipeline (pipeline hazards), resultando em erros computacionais.

A arquitetura MIPS I é suscetível a riscos de controle e de dados , o que significa que as instruções podem ser executadas quando não deveriam; e que as instruções podem operar com dados desatualizados antes de serem atualizados.

Image
Instruções de "Spyro The Dragon" visualizada no depurador do emulador NO$PSX. Observe como as instruções LW (load word from memory), JAL (jump and link) e BAL (branch on not equal) são seguidas por um slot de atraso para evitar os riscos de pipeline. As instruções marcadas em vermelho são de preenchimento sem utilidade. As instruções marcadas em azul executam operações úteis.

Consequentemente, as CPUs MIPS I apresentam o seguinte comportamento:

Como podemos ver a partir do exemplo, alguns slots de atraso são preenchidos com instruções úteis, que realizam cálculos que não são afetados pelo risco de pipeline. Assim, os slots de atraso nem sempre implicam em desperdício de ciclos.

Geralmente, o compilador ou montador automaticamente reorganizará as instruções para preencher os slots com instruções úteis, ou, em último caso, adicionará preenchimentos inúteis. Em resumo, esse fenômeno é uma mistura de coisas boas e ruins.


Previous: 2. Uma breve introdução

Next: 4. Gráficos


Rodrigo Copetti © 2026 RSS Feed

Mudar para a edição moderna

Início · Artigos · Suporte · Sobre o autor · Sobre o site