# SuperH

SuperH (ou SH) é uma arquitetura de microcontroladores e microprocessadores. O núcleo SuperH é fundamentalmente uma arquitetura RISC encontrada em uma grande quantidade de sistemas embarcados.

## História

A arquitetura SuperH foi criada pela Hitachi no início da década de 1990 para suceder o H8. O SH-1 e o SH-2 foram utilizados nos videogames Sega Saturn e Sega 32X e possuem instruções de 16 bits com o objetivo de ter maior densidade que instruções de 32 bits, isso era um benefício devido ao alto custo das memórias.
Após alguns anos, o SH-3 passou a fazer parte da família de microprocessadores SuperH, nele foram incluídos um outro conceito de interrupção, uma unidade de gerenciamento de memória e uma modificação no conceito de cache. O SH-3 também possui uma extensão de DSP que foi nomeado SH-3-DSP.
Entre 1994 e 1996, 35,1 milhões de dispositivos SuperH haviam sido vendidos pelo mundo.
Em 1998 a Hitachi desenvolveu o SH-4 para o videogame Sega Dreamcast. Os destaques do SH-4 foram uma arquitetura superescalar (2-way) de execução de instruções e uma unidade de execução em ponto flutuante. No início de 2001 a Hitachi juntamente com a STMicroelectronics fundou a SuperH Inc, que além de licenciar o SH-4 para outras empresas estava desenvolvendo o SH-5, que seria o primeiro microprocessador da SuperH Inc de 64 bits, porém, em 2004 a SuperH Inc vendeu a patente dos microprocessadores para a Renesas Technology, que passou a ser chamada de Renesas Electronics em 2010.
O SH-5 possui dois modos de operação: o SHcompact é equivalente ao conjunto de instruções do SH-4. O diferencial é o SHmedia que utiliza instruções de 32 bits, possui sessenta e quatro registradores de 64 bits e paralelismo SIMD.
A evolução da arquitetura SuperH continua, o último passo revolucionário ocorreu em 2003, onde os núcleos do SH-2 até o SH-4 foram unificados em um núcleo superescalar denominado SH-X, que forma uma espécie de conjunto de instruções das arquiteturas anteriores.
Atualmente, os microprocessadores SuperH pertencem a Renesas Electronics, uma fusão dos grupos de semicondutores Hitachi e Mitsubishi Electric.
J Core
O último núcleo da série SH-2 expirou em 2014. Na LinuxCon de 2015 no Japão, os desenvolvedores do J-Core apresentaram uma reimplementação cleanroom do conjunto de instruções SH-2 ISA com extensões (conhecida como "J2 Core"). Subsequentemente, um design passo a passo foi apresentado na ELC 2016.
O open source BSD licenciado VHDL para o J2 Core tem sido testado nas FPGAs da Xilinx e no ASICs produzido por TSMC's através do método 180 nm, e é capaz de inicializar o µClinux. J2 é oposto a ISA compatível com o SH-2, implementado com uma pipeline de 5 etapas, com Instruções e Dados em memórias separadas, e um Decodificador de Instruções gerado por máquina, suporta a densa e complexa ISA. Instruções adicionais são fáceis de acrescentar. J2 implementa instruções para troca dinâmica (usando o SH-3 e mais tarde padrões de instruções)
Várias características do SuperH tem sido citadas como motivações para o desenvolvimento de novos núcleos baseados nessa arquitetura:
* Alta densidade de código comparado com outras ISAs RISC 32-bits como ARM e MIPS importante para o desempenho da largura de banda da memória e do cache;
* Compilador existente e suporte do sistema operacional (Linux, Windows Embedded, QNX);
* Baixo custo de fabricação ASIC agora que as patentes estão expirando (em torno de US$ 0,03 por um J2 dual core pelo TSMC's 180 nm;
* Implementação patenteada e livre de royalties (licença BSD);
* Grande suporte da comunidade;
* Disponibilidade de plataforma de desenvolvimento de hardware à baixo custo para ferramentas FPGA de custo zero;
* Ferramentas de geração e integração de CPU e SoC RTL, produzindo um RTL portátil, e documentação em FPGA e ASIC;
* Design moderno, com open source, com um ambiente de produção, simulação e verificação.

## Modelos da arquitetura SuperH

* SH-1 - usado em microcontroladores para aplicações embarcadas (leitores de CD-ROM, eletrodomésticos, etc.).
* SH-2 - usado em microcontroladores que requerem alto desempenho, também utilizado no setor automotivo (unidade de controle do motor), aplicações de redes e videogames.
* SH-2A - é uma extensão do SH-2 com algumas instruções adicionais, porém a maior modificação foi a capacidade de executar mais que uma instrução em um único ciclo (superescalar) e dois pipelines de cinco estágios. É robusto na aplicação da unidade de controle do motor, som automotivo, etc.
* SH-DSP - inicialmente desenvolvido para o mercado de telefonia móvel, usado mais tarde em muitas aplicações de consumo que exigem desempenho DSP para a compressão JPEG.
* SH-3 - usado para aplicações móveis e portáteis, tais como a Jornada, forte em aplicações de Windows CE e por muitos anos nos GPSs.
* SH-3-DSP - usado principalmente em terminais multimídia e aplicações de rede, também em impressoras e aparelhos de fax.
* SH-4 - usado principalmente quando é necessário alto desempenho, por exemplo videogames e STBs.
* SH-5 - usado em aplicações multimédia de 64 bits high-end.
* SH-X - usado principalmente no setor automotivo (nas unidades de controle do motor), equipamentos multimídia STBs e celulares.

## SH-1

O SH-1 é o primeiro núcleo de CPU dos produtos da Família SuperH, é utilizado no console Sega Saturn para controlar o drive de CD e checar a proteção contra cópias nos discos de jogo.
Características SH-1
| Item | Característica |
| Arquitetura | Arquitetura original Renesas Barramento interno de dados de 32-bits |
| Registradores | 16 registradores de uso geral de 32-bits 3 registradores de controle de 32-bits 4 registradores do sistema de 32-bits |
| Conjunto de instruções | Tamanho da instrução: tamanho fixo de 16-bits Arquitetura Load-Store Conjunto otimizado para linguagem C |
| Tempo de execução de instrução | Uma instrução por ciclo de clock para instruções básicas |
| Espaço de endereço | 4Gbytes disponíveis |
| Estados de processamento | Reset Processamento de exceção Execução de programa Desligamento Liberação do Barramento |
| Estados de desligamento | Hibernação Espera (standby) |
Registradores de uso geral
Existem 16 registradores de uso geral numerados de R0 a R15, que têm um tamanho de 32 bits.
Os registradores gerais são usados para processamento de dados e cálculo de endereços.
R0 também é usado como um indexador.
Várias instruções usam R0 como fonte fixa ou registrador de destino.
R15 é usado como o stack pointer (SP).
O processamento de exceções é realizado referenciando a pilha usando R15.
Registradores de Controle
Os registradores de controle de 32 bits consistem em:
* Registrador de status de 32 bits (SR)
* Registrador de base global (GBR)
* Registrador vetorial (VRB).
O registrador de status indica os estados de processamento.
O registrador base vetorial funciona como endereço base do vetor de processamento de exceção (incluindo interrupções).
Registradores do Sistema
Os registradores do sistema consistem em quatro registradores de 32 bits:
* Registradores de multiplicação e acumulação high e low
* Registrador de processo(PR)
* Program counter (PC)
Os registradores de multiplicação e acumulação armazenam os resultados das operações.
O registrador de processo armazena o endereço de retorno do processo de subrotina.
O program counter aponta os quatro bytes de endereço da próxima instrução a ser executada.
Formato dos dados nos registradores
Os operandos dos registradores são sempre longwords (32 bits).
Quando um dado em memória é carregado para um registrador e o operando da memória é apenas um byte (8 bits) ou uma palavra (16 bits) ele é sign-extendend ou zero-extended em uma longword.
Conjunto de Instruções tipo RISC
Todas as instruções têm tamanho fixo de 16 bits.
Instruções básicas podem ser executadas em um ciclo usando o pipeline. As instruções são executadas em 50 ns a 20 MHz, em 35 ns a 28,7 MHz.
Longword é o tamanho padrão para todas as operações. A memória pode ser acessada em bytes, palavras ou longwords.
Arquitetura Load-Store: operações básicas são executadas entre registradores.
Para operações que envolvem acesso à memória, os dados são carregados nos registradores e executados.
Instruções como AND que manipulam bits, no entanto, são executadas diretamente na memória.
SH-1 tem 56 instruções.

## SH-2

O SH-2 é uma arquitetura [RISC] de 32 bits, que possui 16 registradores de uso geral. O tamanho de suas instruções são de 16 bits e seu pipeline é composto por 5 estágios. Também conta com um registrador base para vetores, um registrador base global e um registrador de procedimentos. Atualmente é utilizada em uma variedade de dispositivos com diferentes periféricos, tais como CAN, Ethernet, unidade de temporização de controle do motor e outros.
SH-2 é o processador principal por trás do Sega 32X e do Sega Saturn. Os dois consoles usam dois processadores SH-2 em paralelo.
SH-2 tem 62 instruções.

## SH-2A

Uma otimização do SH-2, em 2007 foi considerado um dos microcontroladores mais rápidos do mundo devido ao seu clock de 160 MHz. As novas funcionalidades incluíam:
* Arquitetura superescalar - execução de duas instruções simultâneas;
* Arquitetura Harvard;
* Unidade de execução em ponto flutuante opcional.

## SH-4

O SH-4 é uma UCP baseada na filosofia RISC e foi desenvolvida inicialmente para aplicações multimídia, caso do Sega Dreamcast e o Sistema de jogos Naomi e incluía uma unidade de execução em ponto flutuante, juntamente com o processamento inteiro de 32-bit padrão e tamanho instrução de 16 bits. As novas funcionalidades incluíam:
* FPU com quatro multiplicadores, suportando 32 bits (precisão simples) e 64 bits (precisão dupla).
* Barramento de ponto flutuante de 128 bits que permite transferências de 3,2 GB/seg a partir da cache de dados.
* Barramento externo de 64 - 128 bits (dependendo do barramento de dados da memória utilizada) possibilitando um máximo de 4 GB de endereço de memória com taxa de transferência de 800 MB/seg.
* DMA, e controladores de gerenciamento de energia.
Registradores em SH-4:
* Registrador Geral
Existem 16 tipos de registradores, R0 até R15, os registradores gerais R0 a R7 são registradores programáveis.
* Registradores do Sistema
Acesso para registradores que não dependem do modo do processador.
* Registradores de Controle
* Registradores de Float
Existem trinta e dois registradores de ponto flutuante, FR0 – FR15 e XF0 – XF15. FR0 – FR15 e XF0 – XF15 podem ser atribuídos a um dos dois banks (FPR0_BANK0 – FPR15_BANK0 ou FPR0_BANK1 – FPR15_BANK1).
Unidade de Gerenciamento de Memória (MMU):
O MMU executa a tradução de endereços de alta velocidade, armazenando em cache informações da tabela de tradução de endereços criadas pelo usuário, em um buffer de tradução de endereços (translation lookaside buffer: TLB). O SH-4 possui quatro entradas TLB de instrução (ITLB) e 64 TLB unificado (UTLB). Entradas. As cópias UTLB são armazenadas no ITLB por hardware. O objetivo principal de uma MMU é garantir que o uso eficiente da memória física seja feito, que na maioria dos sistemas é um recurso limitante. A MMU é normalmente gerenciada pelo sistema operacional, que aloca páginas físicas de memória para páginas virtuais de memória, conforme exigido por uma tarefa. Páginas que são comutadas pelo sistema operacional são colocadas em um dispositivo de armazenamento secundário, como um disco rígido.

## SH-5

É um processador RISC de 64 bits que possui dois modos de operação: SHmedia e SHcompact.
* SHcompact
** Instruções codificadas em 16 bits para a densidade do código.
** Dois operandos.
** 16 registradores de 32 bits de propósito geral e 4 registradores fixos para funções.
** Alta densidade de código
** Suporte a operações com inteiros 32 bits
** Redução de conflitos de controle
** Suporte a endereçamento por ponteiros como filas e deques
** Suporte de ponto flutuante com simples e dupla precisão
** Possui instruções específicas para suporte a OS, arquitetura de depuração e controle de cache
* SHmedia
** Apresenta paralelismo SIMD.
** Evita bolhas no pipeline.
** Não há delays em branchs.
** Três operandos na instrução, cada operando pode codificar mais registradores
** Instruções codificadas em 32 bits, extensível
** 4 registradores de uso geral (64 bits), 4 registradores de ponto flutuante (32 bits), 8 registradores de destino para desvios condicionais e 4 registradores de controle
** Instruções compatíveis com otimização de compiladores para linguagens de alto nível
** Suporte eficiente à aplicações 32 bits
** Arquitetura que permite pré-busca de instruções direcionadas ao programa e redução de atrasos por conflitos e desvios condicionais
** Suporte à dados de 8, 16, 32 e 64 bits
** Operação de múltiplos dados simultaneamente e melhor performance em aplicações multimídia
** Instruções específicas para acesso do controle CPU e registradores de configuração
** Registradores de controle são usados no controle de execução de instruções e dão auxílio a manipulação de eventos
** Execução do SH prossegue mesmo em interrupções de outros sistemas (bugs)
Conjunto de instruções
A maioria das instruções presentes no SH-5 é baseada na operação de dados, porém, há muitas outras com funções mais específicas e necessárias, como as de controle, memória e especiais.