A Arquitetura Interna da CPU

Novamente notamos a separação das vias de acesso à Flash e SRam, típicas das arquiteturas Harvard e derivadas.
No lado da Flash temos o Program Counter (que aponta para a próxima instrução). O AVR possui um pipeline de um nível, no qual enquanto uma instrução é executada a seguinte é carregada. Isto possibilita executar as instruções mais simples em um único ciclo de clock. Embora a Flash seja endereçada byte a byte, as instruções são compostas por uma ou duas palavras de 16 bits (ocupando portando duas ou quatro posições da Flash).
A família AVR possui uma generosa coleção de 32 registradores de uso geral, todos de 8 bits. Os seis últimos registradores podem ser usados aos pares como três registradores de 16 bits (X, Y e Z) para endereçamento indireto da memória.
A Unidade Lógica Aritmética (ALU) trabalha com 8 bits; obtêm os operandos dos registradores e coloca o resultado no primeiro operando (exceto na multiplicação). Todas as operações lógicas e aritméticas são executadas em um ciclo, exceto pela multiplicação que demora dois ciclos.
Memória Interna de Dados
A memória interna de dados é composta pelos registradores de uso geral, os registradores de entrada e saída (que controlam os periféricos internos) e a memória SRam propriamente dita.
No Atmega328 os registradores podem ser acessados nas primeiras 32 posições de memória e os registradores de E/S nas 64 posições seguintes, com a SRam começando no endereço 0x60.
Reparar que na figura não temos a pilha nem o seu ponteiro (SP). No AVR a pilha reside na memória SRam e o seu ponteiro são dois registradores de E/S.
Endereçamento
As instruções dispõem de um conjunto bastante variado de modos de endereçamento:
- Endereçamento direto a registrador: usado nas operações lógicas e aritméticas; os números dos registradores usados estão na instrução.
- Endereçamento direto a E/S: o endereço do registrador de E/S está na instrução.
- Endereçamento direto a dados: um endereço de memória de 16 bits faz parte da instrução.
- Endereçamento indireto: um dos registradores X, Y ou Z contém o endereço da memória. Existem variações deste endereço com pré-decremento ou pós-incremento do registrador.
- Endereçamento indireto com deslocamento: o endereço da memória é a soma do conteúdo do registrador Y ou Z com um deslocamento de 0 a 63 contido na instrução.
- Endereçamento indireto da memória de programa: usado nas operações de leitura da Flash, usam o endereço no registrador Z; uma variante deste modo realiza o pós-incremento do registrador.
- Endereçamento direto da memória de programa (para desvio): usado nas instruções JMP e CALL, um endereço de 22 bits faz parte da instrução.
- Endereçamento indireto da memória de programa (para desvio): usado nas instruções IJMP e ICALL, usa o registrador Z para obter um endereço de 16bits.
- Endereçamento relativo da memória de programa (para desvio): a instrução contem um deslocamento de 11 bits (com sinal) que é somando ao contador de programa.
Durante o projeto do AVR a Atmel consultou vários desenvolvedores de compiladores para garantir que seria possível implementar linguagens de alto nível de forma eficiente.
A família AVR segue a filosofia RISC, com instruções lógicas e aritméticas operando sobre registradores e uma grande flexibilidade na escolha destes registradores. Apesar do R de RISC ser reduced, o ATMega tem nada menos que 131 instruções. Um resumo pode ser visto na Wikipedia, o manual completo está no site da Atmel.
As instruções normais lógicas, aritméticas e de manipulação de bits estão presentes. O ATmega328 possui ainda da multiplicação com e sem sinal sobre dois operandos de 8 bits com um resultado de 16 bits.
No que diz respeito a desvios condicionais, existem instruções de desvio propriamente dito (BRxx) que fazem um desvio relativo conforme o status da CPU e instruções do tipo skip (SBxx) que pulam a instrução seguinte conforme um bit de um registrador de uso geral ou E/S.
As instruções LPM e SPM permitem, respectivamente ler e gravar na memória de programa (Flash). Enquanto que a instrução LPM é bastante simples, a instrução SPM é bastante complexa, visto que a escrita é feita página a página e requer três operações: apagamento da página, montagem do novo conteúdo em um buffer temporário e a gravação da página com o conteúdo do buffer temporário. No AtMega328 temos 256 páginas, cada uma com 128 bytes.
Nenhum comentário:
Postar um comentário