Arquitetura do PlayStation Vita (parte 1)
(copetti.org)- O PSVita é um aparelho no encontro entre os consoles portáteis tradicionais e a onda dos SoCs móveis em rápido crescimento; a Sony tentou manter uma identidade de produto diferente da dos smartphones, ainda que usando circuitos familiares
- A linha se divide no PSVita original, no Slim, que trocou o OLED por LCD, e no PlayStation TV, mais próximo de um aparelho de mesa; em geral, a mesma análise de arquitetura se aplica às três variantes
- O chip central Kermit usa a abordagem de SoC com chip empilhado da Toshiba, reunindo CPU, GPU, cerca de 640 MB de RAM, aceleradores e circuitos de compatibilidade com PSP em um único pacote, o que melhorou largura de banda e área ocupada, mas tornou o projeto térmico mais difícil
- A CPU principal é uma ARM Cortex-A9 MPCore quad-core de até 500 MHz, com ARMv7-A, cache L2 compartilhado de 2 MB, compilação centrada em Thumb-2, NEON/VFPv3, TrustZone e execução fora de ordem
- Tarefas multimídia ficam a cargo do acelerador Venezia da Toshiba, enquanto a retrocompatibilidade com PSP/PS1 é tratada pelo MIPS32 4k dentro do Kermit e por estruturas reservadas de CDRAM, Scratchpad e RPC
O mercado em que o PSVita se encontrava e o escopo da análise
- O PSVita é um produto na interseção entre a indústria de videogames e o segmento móvel, que mudava rapidamente
- A Sony precisava competir com aparelhos baratos que ofereciam diversas funções além de chamadas telefônicas
- O novo console portátil da Sony incorporava tecnologias modernas da época; embora a configuração dos circuitos pareça familiar, também se nota um projeto que tentava não se parecer com o mercado de smartphones
- Como a análise dos consoles de 8ª geração ficou mais complexa, ela é conduzida em um formato de publicação por seções, em vez de ser divulgada inteira de uma só vez
Três modelos de PSVita
- Ao longo do ciclo de vida do PSVita, a Sony mudou sua estratégia de produto várias vezes e lançou três variantes
- O PSVita original é o primeiro modelo da série e às vezes é chamado de modelo “Fat”
- O Slim manteve a mesma arquitetura, mas trocou a tela OLED por LCD para reduzir custos, e não ofereceu uma variante com suporte a 3G
- No Slim, o chip eMMC ficou maior, mas o aumento foi de apenas 52 MB; ainda assim, isso permitiu oferecer um cartão de memória interno de 1 GB
- O PlayStation TV é uma forma ajustada da placa-mãe do Fat para um ambiente não portátil, expondo uma configuração de I/O diferente
- Em geral, a mesma explicação de arquitetura se aplica aos três modelos, enquanto as mudanças de eMMC no Slim e no PlayStation TV são tratadas separadamente
Kermit: o SoC central do PSVita
- A Sony adotou ativamente a tecnologia MIPS desde o PlayStation original, mas, conforme ARM se fortaleceu no mercado móvel e a adoção de MIPS diminuiu, escolheu uma CPU ARM para o PSVita
- A Toshiba, parceira de fabricação próxima da Sony, assumiu o papel de licenciada ARM
- O chip principal Kermit recebeu seu nome de “The Muppets” e é o maior bloco de circuitos que contém a CPU principal do PSVita
- O Kermit é um System-on-Chip, mas, graças ao modelo de fabricação Stacked Chip SoC (SCS) da Toshiba, combina muita memória e processadores dentro do mesmo pacote
- O SCS empilha os circuitos verticalmente, em vez de conectá-los externamente lado a lado
- O efeito direto é aumento de largura de banda e redução de área
- Em contrapartida, o projeto térmico fica mais complexo
- Os principais componentes do Kermit são os seguintes
- CPU principal ARM Cortex-A9 MPCore quad-core
- GPU principal PowerVR SGX543MP4+ da Imagination Technologies
- Vários aceleradores, como um DSP grande, controladores DMA e blocos de segurança
- Cerca de 640 MB de RAM divididos em vários tipos
- CPU MIPS e circuitos Graphics Engine para compatibilidade com PlayStation Portable
ARM Cortex-A9 MPCore
- A CPU principal do PSVita é a ARM Cortex-A9 MPCore, um cluster composto por quatro núcleos Cortex-A9
- Sua frequência de operação é de até 500 MHz, menor que os 1,4 GHz do Samsung Galaxy S III, que usava um A9 quad-core na mesma época
- O Cortex-A9 é o sucessor do Cortex-A8, e o PSVita chegou poucos meses depois do Nintendo 3DS
- As funções de base comuns são as seguintes
- Conjunto de instruções ARMv7-A
- Cache L1 de 64 KB
- Dividido em cache de dados de 32 KB e cache de instruções de 32 KB
- A coerência do cache de dados entre núcleos é tratada pela Snoop Control Unit
- Arquitetura superscalar 2-issue
- Se não houver riscos, executa duas instruções em dois pipelines, aumentando o número de instruções executadas por ciclo
- Predição dinâmica de desvios
- Na etapa de busca de instruções, usa dois buffers dedicados para prever se haverá desvio e se o desvio será tomado
- Esta unidade prevê apenas instruções de desvio e não inclui otimizações como execução condicional ou a instrução
IT
- MMU com TLB
- TrustZone
- No nível de hardware, divide os componentes em grupos secure e non-secure
- No nível de software, executa um Trusted Execution Environment, um sistema operacional auxiliar isolado que processa dados confidenciais
- As transferências de dados recebem uma tag indicando se são transações secure ou insecure
- NEON Media Processing Engine
- É um coprocessador que executa operações vetoriais e de ponto flutuante
- As partes reforçadas no Cortex-A9 são as seguintes
- Suporte a multicore
- Isso aparece de forma mais evidente na escolha da Sony por um pacote quad-core
- Também foi o contexto que permitiu que o iPad 2 e o iPhone 4s surgissem com CPUs dual-core
- Execução fora de ordem por meio de renomeação de registradores
- Foi uma grande mudança que ampliou o paralelismo em nível de instrução da ARM
- Pipeline de comprimento variável, de 8 a 11 estágios dependendo da tarefa
- Se a execução prosseguir para um coprocessador multimídia, o número de estágios pode aumentar ainda mais
- Suporte a multicore
- A Sony adicionou o Primelink Level 2 Cache Controller da ARM e um cache L2 compartilhado de 2 MB
- O Primelink é um subsistema de cache que pode configurar várias formas de associatividade de cache, de mapeamento direto até 16-way
- Mais tarde, a ARM mudou a marca Primelink para CoreLink
ARMv7, Thumb-2, NEON/VFPv3
- O ARMv7 do Cortex-A9 é um superconjunto da ISA ARMv6, e as principais áreas adicionadas são VFPv3, NEON, Security Extension e multiprocessamento
- A ISA Thumb foi amplamente revisada como Thumb-2
- O Thumb-2 adiciona instruções de 32 bits, preenchendo as lacunas do Thumb de 16 bits existente
- Em comparação com a ISA ARM, tem maior densidade de código e remove a execução condicional, mas compensa parte dessa funcionalidade com a instrução dedicada
IT
- O Cortex-A9 do Kermit também implementa ThumbEE e Jazelle, mas é difícil dizer que os aplicativos tirem proveito disso
- O Dalvik, interpretador Java do Android, também não usava Jazelle/Thumb-2EE
- Para reduzir a confusão em torno das ISAs, a ARM criou a Unified Assembler Language (UAL)
- A UAL mira uma única base de código capaz de ter ARM e Thumb-2 como alvo
- Na prática, é a união dos opcodes de ARM e Thumb-2, e o assembler pula opcodes conforme a CPU de destino
- Em linguagens como C, Objective-C e C++, o compilador geralmente usa Thumb-2 como saída assembly padrão
- O motivo é a densidade de código eficiente e a rara penalidade de desempenho
- Apps de smartphone e aplicativos do PSVita são compilados principalmente para Thumb-2, não para ARM
MPE, VFPv3 e NEON para operações de mídia
- No Cortex-A9, um componente especialmente importante para o PSVita é o Media Processing Engine (MPE)
- O MPE executa dois conjuntos de instruções relacionados
- Vector Floating-Point v3 (VFPv3)
- É o sucessor do VFPv2 para funções de ponto flutuante
- Está em conformidade com IEEE-754
- Oferece instruções como
VCVTeVMOV - A variante exata do Cortex-A9 é VFPv3-D32, incluindo 32 registradores de 64 bits
- O ARMv7 descontinuou o uso de instruções vetoriais, e o Cortex-A9 não possui essas instruções vetoriais
- NEONv1
- É o conjunto real de instruções vetoriais, também chamado de “ARMv7 Advanced SIMD”
- Fornece 16 registradores de 128 bits, que podem ser divididos em 32 registradores virtuais de 64 ou 32 bits
- Inteiros podem ir até 64 bits, e tipos de ponto flutuante não podem passar de 32 bits
- Vector Floating-Point v3 (VFPv3)
- NEON e VFPv3 compartilham o mesmo arquivo de registradores, mas são tratados como ISAs separadas
- O motivo para as duas ISAs serem separadas é que nenhuma das duas é funcionalmente completa
- VFPv3 não oferece suporte a ponto fixo
- NEON não está em conformidade com o padrão IEEE 754
- NEON é interpretado como uma resposta rápida ao Wireless MMX, a extensão SIMD proprietária do Intel XScale
- PDAs avançados como o Dell Axim X51v usavam a CPU Intel XScale PXA270, compatível com a ISA ARMv5, e incluíam uma extensão SIMD proprietária disponível apenas na linha de CPUs da Intel
- Esse aparelho também trazia a GPU PowerVR MBX, relacionada ao chip gráfico do PSVita
Estrutura de barramento
- A especificação AMBA da ARM também é usada para conectar componentes no Cortex-A9
- O protocolo AXI da 3ª revisão da AMBA foi escolhido para a interface dos núcleos dentro do cluster MPCore
- A mesma escolha por AXI também pode ser vista no ARM11 e no Nintendo 3DS
- O PSVita também usa Open Core Protocol (OCP) para toda comunicação fora do MPCore
- É da mesma família do protocolo que o Nintendo 3DS usava para se comunicar com a GPU PICA
O caminho da ARM depois do Cortex-A
- Depois do Cortex-A9, a família Cortex-A se dividiu em quatro categorias adicionais, de alto desempenho até foco em eficiência energética, tornando a estrutura de sucessão mais complexa
- Ficou difícil acompanhar o número de modelo de cada CPU, mas isso não foi um grande problema, já que essas CPUs não eram produtos vendidos separadamente ao usuário final comum
- O próximo grande marco da ARM foi o ARMv8, lançado em 2011, que será tratado em mais detalhes na análise do Nintendo Switch
Venezia: o acelerador multimídia da Sony
- A Sony colocou, ao lado do cluster ARM, um grande acelerador para apoiar tarefas relacionadas a jogos
- Esse acelerador é uma caixa-preta totalmente proprietária, como o grupo Media Engine do PSP anterior, e é acessado por meio do SDK oficial em vez de ser manipulado diretamente pelos programadores
- O nome do acelerador é Venezia
- É um pacote de CPU separado projetado pela Toshiba, parceira próxima da Sony
- Foi criado para processamento de imagem e som
- Suas funções se aproximam das de um Digital Signal Processor (DSP)
- Também é vendido como chip sintetizável para aparelhos multimídia, como DVD players
- O Venezia tem características de sucessor do Media Engine do PSP
Estrutura interna do Venezia
- O Venezia tem uma estrutura em cluster, como o MPCore, e é composto por 8 núcleos Media Processing Engine (MPE)
- Sua frequência de operação é 266,7 MHz
- O nome MPE da Toshiba se sobrepõe ao nome do acelerador vetorial da ARM, mas são silícios diferentes
- Cada MPE inclui os seguintes elementos
- CPU proprietária Media-embedded Processor (MeP)
- Quinta revisão, MeP-c5
- Arquitetura baseada em RISC de 32 bits
- Cache L1 de 32 KB
- Separado em 16 KB para instruções e 16 KB para dados
- Memória de uso geral de 64 KB
- Espaço em que a CPU MeP executa o programa principal
- Controlador DMA para transferências de memória interna e externa
- Coprocessador de processamento de imagem IVC2
- Executa instruções SIMD de 64 bits
- Pode processar vários agrupamentos de dados, de 8 inteiros de 8 bits a 2 inteiros de 32 bits
- Oferece dois registradores acumuladores de 256 bits e, combinado com outras funções, pode calcular duas operações simultaneamente
- CPU proprietária Media-embedded Processor (MeP)
- O cluster também tem cache L2 de 256 KB
- Uma característica essencial é o conjunto de instruções baseado em Very Long Instruction Word (VLIW)
- Permite codificar várias instruções simultaneamente em uma única linha
- O Venezia pode colocar três instruções em uma linha: duas para o coprocessador de imagem e uma para a CPU
- Para empacotar instruções de forma eficiente, é necessário um excelente compilador
- O VLIW chamou atenção nos anos 1990 com implementações como Broadcom Firepath, Transmeta Crusoe e Intel Itanium, mas não se consolidou amplamente em CPUs mainstream porque os resultados de benchmark foram decepcionantes
- O Venezia só é acessível por meio de uma API abstrata chamada Codec Engine
- Implementa tarefas de codificação e decodificação de imagem e áudio
- Por exemplo, uma instrução de decodificação AVC descomprime dados de vídeo codificados em Advanced Video Coding e produz um fluxo não comprimido que a GPU consegue entender
Configuração de memória do PSVita
- No topo da pilha do Kermit há 512 MB de LPDDR2 SDRAM, usados como espaço de trabalho principal
- SDRAM significa Synchronous Dynamic RAM
- DRAM tem custo de produção menor que SRAM, mas maior latência
- Por isso, caches de CPU são feitos com SRAM, enquanto a memória externa de uso geral é feita com DRAM
- SDRAM melhora a vazão ao sincronizar as transferências com o clock da CPU
- LPDDR2 significa Low Power Double Data Rate 2
- DDR transmite o dobro de informação por ciclo
- LP indica uma variante de baixo consumo, adotada principalmente por celulares e notebooks
- A especificação LPDDR2 foi publicada em 2009 e opera a 1,2 V, abaixo dos 1,35 V do DDR3
- Separadamente, há 128 MB de Custom DRAM (CDRAM), conectada principalmente à GPU
- CDRAM é um nome interno e se refere a SDR SDRAM tradicional
- Ao contrário da DDR, é uma memória Single Data Rate
- Por ser um espaço dedicado próximo à GPU, é adequada para tarefas gráficas intensas
- Esse bloco parece estar conectado por dois barramentos de 512 bits
- O SoC também contém cerca de 2,18 MB de SRAM divididos em vários blocos
- 2 MB de Camera SRAM
- 32 KB de SPAD32K
- 128 KB de SPAD128K
- 4 KB de SceCompatSharedSram
- 16 KB de Scratchpad
- Esses blocos de SRAM são reservados para o sistema operacional
- O Scratchpad de 16 KB corresponde à capacidade de SRAM que também existia no PSP
MIPS32 4k e retrocompatibilidade
- Dentro do Kermit há ainda uma CPU MIPS32 4k antiga
- É a mesma CPU presente no PlayStation Portable
- O objetivo dessa CPU é a retrocompatibilidade com jogos de PlayStation Portable e PlayStation 1
- A CPU MIPS é usada oficialmente apenas para essa finalidade e não funciona como coprocessador
- O Kermit não contém o Media Engine do PSP
- Como o Media Engine era uma caixa-preta, o software não se preocupa com sua implementação interna
- A função desse coprocesador é replicada pelo Venezia
- Em relação ao restante de I/O, o MIPS não está fisicamente conectado ao restante do hardware; apenas o Cortex-A9 está conectado
- O software de emulação de PSP executado na CPU MIPS solicita serviços à CPU ARM por meio de um modelo RPC (Remote Procedure Call)
- Também são reservados 64 MB de CDRAM para esse serviço de retrocompatibilidade
- O Scratchpad de 16 KB mencionado anteriormente fica, na verdade, dentro da CPU MIPS e é alocado ao emulador de PSP
- É um elemento para corresponder à configuração de memória esperada pelos jogos originais de PSP
Próximo escopo
- A próxima parte abordará o processo pelo qual a VideoLogic se tornou uma importante GPU do mercado móvel, chegando à GPU PowerVR MBX
1 comentários
Comentários do Hacker News
Eu adorava o PSP original e a cena de homebrew e jailbreak que surgiu em torno dele. Recentemente consegui um PS Vita e tenho jogado tanto jogos nativos quanto homebrew, e me surpreende que o ecossistema de homebrew ainda seja bastante ativo
Parece haver até certa possibilidade de portar jogos de Android. Eu queria que a Sony não tivesse deixado o PS Vita morrer; na época, parecia mesmo um aparelho com enorme potencial
Ainda uso o Vita porque o Steam Deck não cabe no bolso. Concordo que o potencial foi desperdiçado. Fico imaginando como teria sido ter Shadow of the Colossus ou Demon's Souls no Vita
Então parece que eles passaram a acreditar que o desempenho fraco não vinha de erros evitáveis deles, mas de uma consequência inevitável da mudança do mercado
Pensando bem, acho que isso foi o que me levou a me interessar por eletrônica
Havia alguns títulos bons, mas nada que me impressionasse muito; acho que Risk of Rain foi provavelmente o que joguei por mais tempo
Hoje, ele já é plenamente reconhecido como um dispositivo portátil de emulação comparável a vários SBCs pequenos atualmente em produção
https://docs.libretro.com/guides/install-psv/
Alguns anos atrás, trabalhei junto no Media Embedded Processor (MeP) da Toshiba mencionado neste artigo. Na Red Hat, trabalhamos no toolchain para dar suporte à arquitetura configurável do processador, que era algo curioso para a época
O MeP não dominou o mundo, mas fiquei feliz em saber que ele entrou no PS Vita
Este artigo é apenas uma parte de uma coleção de textos de longa data
https://www.copetti.org/writings/consoles/
Ainda não entendo como a Sony abandonou o mercado de portáteis para jogos, apesar de estar numa posição única por também ter uma linha de celulares
O Xperia Play chegou cedo demais, mas, numa situação como a de hoje, em que as pessoas se acostumaram a gastar bastante dinheiro em celulares ou no Steam Deck, acho que a Sony poderia ter criado um ótimo sucessor do Vita e do Xperia Play, juntando uma loja de jogos da Sony a um dispositivo Android
As organizações eram excessivamente isoladas em silos. Como alguém que gostava bastante dos produtos, olhando com o que sabemos hoje, não dá para não achar engraçado como tudo acabou dando tão errado
Em vários aspectos, ele estava à frente do seu tempo, mas acho que o mercado de jogos daquela época não era tão adequado nem estava tão preparado para dispositivos portáteis quanto é hoje
Muito legal, e a coincidência parece quase destino
Na semana passada, tirei o Vita de uma gaveta e estou jogando ports portáteis de alguns jogos de PS3 que eu não conseguia jogar porque não posso conectar o PS3. Ratchet & Clank, Sly Cooper, God of War 1 e 2, e alguns indies
Fiquei surpreso ao ver que a loja ainda funciona, e comprei os jogos de PS1 de Armored Core. Gosto muito desse aparelho. Ele foi tratado injustamente tanto pelo mercado quanto pelo suporte da Sony
Estou tentado a fazer jailbreak e talvez criar algum homebrew
Passei por dois Vitas e também troquei várias vezes coisas como os botões de controle
Eu gostava da combinação de jogos casuais e “sérios” do Vita, desde games casuais como PixelJunk Monsters até Killzone Mercenary, que era um shooter em primeira pessoa com nível de console num portátil. Também havia muito conteúdo japonês, como Akiba's Trip: Undead and Undressed, Danganronpa e Fate/Extella
Acabei me desfazendo do equipamento do Vita quando ele foi desconectado da PS Network e os jogos japoneses de que eu gostava começaram a sair no Steam, mas, sinceramente, sinto falta de PixelJunk Shooter
Recentemente baixei itens que já tinha comprado. Mas preciso fazer backup de tudo antes que seja tirado do ar de vez
Eu não sabia que o Vita tinha hardware do PSP dentro. Achava que a retrocompatibilidade era baseada em software, embora a Sony tenha um longo histórico de lançar consoles com hardware de retrocompatibilidade
Mas, por volta dessa época, já existiam o PS2 Slim e, depois, o emulador de PS1 por software para o PS3
https://israpps.github.io/PPC-Monitor/docs/Architecture%20Ov...
Esse tipo de livro entra na categoria de “eu não pedi nem esperava, mas, já que saiu, vou ler do nascer ao pôr do sol”
O autor também escreveu vários outros livros sobre processadores e arquiteturas embarcadas, e, sinceramente, é um trabalho realmente necessário
O mundo embarcado é muito mais voltado a desmontar, dissecar, explicar e inferir do que o mundo de software. Não sei por quê, mas o pessoal dessa área investiga e reconstrói até esquemas elétricos, explorando praticamente tudo. A cena recente de modding da Nintendo mostra esse extremo
Engenheiros reversos de software continuam agarrados a licenças do IDA e plugins como se fossem uma moda no fim. Precisamos de mais gente como Copetti
Gosto muito tanto desta série de artigos quanto do Vita
Uma coisa que me perguntei por um tempo era se o Vita inclui tanto a CPU quanto a GPU do PSP para retrocompatibilidade, ou se tem só a CPU e a GPU é mapeada para o lado do Vita
Este artigo afirma a primeira opção, mas espero saber mais, com evidências, na próxima parte
O Vita estava à frente de seu tempo