Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquiteturas de Von Neumann x Harvard A Arquitetura de von Neumann é uma arquitetura de computador que se caracteriza pela possibilidade de uma máquina digital armazenar os programas no mesmo espaço de memória que os dados, podendo assim manipular programas. A Arquitetura de Harvard é uma arquitetura de computador que se distingue das outras por possuir duas memórias diferentes e independentes em termos de barramento e ligação ao processador. Baseia-se na separação de barramentos de dados das memórias onde estão as instruções de programa e das memórias de dados, permitindo que um processador possa acessar as duas simultaneamente, obtendo um desempenho melhor do que a da Arquitetura de von Neumann, pois pode buscar uma nova instrução enquanto executa outra. A arquitetura Havard logicamente é mais complexa; permite pipelining, normalmente utilizada em arquiteturas RISC e também possui um repertório com menos instruções que a de Von-Neumann, e essas são executadas apenas num único ciclo de relógio. A diferença entre a arquitetura Von Neunmann e a Harvard é que a Harvard separa o armazenamento e o comportamento das instruções do CPU e os dados, enquanto a Von Neumann utiliza o mesmo espaço de memória para ambos. Na arquitetura Von-Neumann, é processada uma única informação por vez, visto que nessa tecnologia, execução e dados percorrem o mesmo barramento, o que torna o processo lento em relação à arquitetura Harvard. A tecnologia Harvard mais utilizada nos PC's e microcontroladores, pois proporcionam maior velocidade de processamento, pois enquanto a CPU processa uma informação, outra nova informação está sendo buscada, de forma sucessiva. Arquiteturas Von Neumann x Harvard nas famílias ARM Os processadores ARM mais modernos podem ser encontrados nas duas arquiteturas. São Von Neumann (Não existe separação entre barramentos de dados e o barramento da memória de programa): ARM 7TDMI Cortex-M0 -->Microcontroladores mais simples, suportam somente o set de instruções Thumb com algumas instruções do Thumb2 (sempre executam no modo Thumb); Cortex-M0+ -->Apresentam algumas melhorias em relação ao M0, além de ter suporte opcional à proteção de memória (MPU); Cortex-M1 -->São utilizados juntos com FPGAs; São Harvard (Possuem barramentos separados para dados e instruções): Cortex-M3 -->São microcontroladores mais poderosos, suportam completamente os sets Thumb e Thumb2, além de multiplicação têm divisão por hardware; Coxtex-M4 -->Têm instruções para processamento de sinais (DSP), têm uma unidade de ponto flutuante opcional (Cortex-M4F). Pipelines Pipeline é uma técnica de hardware que permite que a CPU realize a busca de uma ou mais instruções além da próxima a ser executada. Estas instruções são colocadas em uma fila de memória dentro do processador (CPU) onde aguardam o momento de serem executadas: assim que uma instrução termina o primeiro estágio e parte para o segundo, a próxima instrução já ocupa o primeiro estágio. Em resumo, é o processo pelo qual uma instrução de processamento é subdividido em etapas, uma vez que cada uma destas etapas é executada por uma porção especializada da CPU, podendo colocar mais de uma instrução em execução simultânea. https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPvneum.png https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPharvard2.png Isto traz um uso mais racional da capacidade computacional com ganho substancial de velocidade. Entre os problemas enfrentados estão a dependência de instruções anteriores e desvios que dificultam o processo, bem como a diferença de complexidade de instruções que fazem com que as mesmas possam levar um tempo variável para execução. A técnica de pipeline é utilizada para acelerar a velocidade de operação da CPU, uma vez que a próxima instrução a ser executada está normalmente armazenada nos registradores da CPU e não precisa ser buscada da memória principal que é muito mais lenta. É semelhante a uma linha de produção de fábrica. Cada instrução de um microprocessador passa por diversas fases até sua execução. Estas fases podem ser: Busca da instrução Decodificação da instrução Cálculo de endereço de operandos Busca de operandos Execução da instrução Escrita de operandos Se conseguirmos separar todas estas fases de forma independente, e separar cada fase por ciclo de relógio teríamos (neste exemplo) 6 ciclos por instrução. Se usarmos uma técnica de pipeline poderíamos colocar 6 instruções ao mesmo tempo no microprocessador (cada uma numa fase distinta) e termos 6 instruções executadas em 6 ciclos (1 instrução por ciclo, idealmente). Outros problemas advém desta técnica, como desvios (como saber as próximas instruções), e dependência de instruções (a próxima depende da anterior). Na prática todos os microprocessadores modernos utilizam-se de várias (dezenas) fases no processamento para usufruir de clocks maiores (quanto menor a fase, mais rápido pode ser o ciclo). https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpipeline.png https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpipepent4.png Tempo de processamento O tempo gasto no processamento de M instruções em um pipeline com K estágios e ciclo de máquina igual a t é dado por: T = [ K + (M –1 )] * t Quando M >> K (caso comum), T é aproximadamente M * t Exemplo: Se um programa tem 10.001 instruções, quanto tempo leva para ser executado em um processador com pipeline de 5 estágios e relógio de 100 ns? E sem o pipeline? T= (5 + (10.000))*100x10-9 =~ 1 ms (com pipeline) T = 500 ns * 10.000 =~ 5ms (sem pipeline) Problemas Estágios podem ter tempos de execução diferentes: Solução 1: Implementar esses estágios como um pipeline onde cada sub-estágio possui tempo de execução semelhante aos demais estágios do pipeline principal. Solução 2: Replicar esse estágio, colocando réplicas em paralelo no estágio principal. O número de réplicas é dado pela razão entre o tempo do estágio mais lento e os demais. O sistema de memória é incapaz de manter o fluxo de instruções no pipeline O uso de memória cache com alta taxa de acerto e tempo de acesso compatível com o tempo de ciclo do pipeline. Dependências ou Conflitos (“Hazards”) Conflitos Estruturais - Pode haver acessos simultâneos à memória feitos por 2 ou mais estágios. Dependências de Dados - As instruções dependem de resultados de instruções anteriores, ainda não completadas. Dependências de Controle - A próxima instrução não está no endereço subseqüente ao da instrução anterior. Tratamento de Exceções Pipeline na família ARM São normalmente Pipelines de 3 a 6 Estágios: 1. Busca (Fetch) – Busca da instrução na memória 2. Decodificação (Decode) – Decodificação dos registradores usados na instrução 1. Execução (Execute) 1. Leitura de registradores 2. Operações lógicas, aritméticas e de deslocamento; 3. Escrita em registradores, etc https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpipepent4.png Pipeline: Situação Ideal ⇒ Todas as operações realizadas em registradores → 6 instruções em 6 ciclos de clock (ARM Cortex-M3) Pior caso: Salto indireto (instrução BX), 3 ciclos de clock para completar o salto (ARM Cortex-M3) Arquitetura x Organização de computadores Arquitetura = documento de especificação Instruções Exceções Registradores Memória Ex: ARMv4, ARMv7, etc. Não tem custo, pode ser obtido diretamente do website da ARM Organização = implementação física (silício) Ex: ARM7TDMI, ARM Cortex-M3, etc. ARM vende a implementação de núcleos em VHDL ou máscara de difusão para empresas licenciadas Outras características 18 registradores de 32 bits • Tratamento muito eficiente de interrupções https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpipe1.png https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpipe2.png • Gerenciamento de consumo de energia • Projetado para ser programado em C (completamente, até mesmo tratamento de reset, interrupções e exceções) • Permite uso de sistemas operacionais (RTOS) – Modelo Usuário/Supervisor Arquitetura ARMv7M •Sem memória cache ou Unidade de Gerenciamento de Memória (MMU) • Tabela de vetores contém endereços, não instruções • Instrução DIV • Interrupções salvam e recuperam automaticamente o estado do processador Controlador de Interrupções é parte da macrocélula Cortex-M3 • Mapa de memória fixo • Registrador único de estado do processador • Núcleo de processamento Thumb-2 – Mistura de instruções de 16 e 32 bits (alta densidade de código), mas não requer alinhamento para instruções de 32 bits << Página da disciplina < Conjunto de Instruções Aula 7 - Estrutura e Funcionamento da CPU Arquitetura ARM > Disponível em "https://wiki.ifsc.edu.br/mediawiki/index.php?title=AULA_7_-_Microprocessadores_-_Graduação&oldid=70318" Esta página foi modificada pela última vez à(s) 15h13min de 25 de abril de 2023. Conteúdo disponível sob GNU Free Documentation License 1.2, salvo indicação em contrário. https://wiki.ifsc.edu.br/mediawiki/index.php/MIP https://wiki.ifsc.edu.br/mediawiki/index.php/AULA_5_-_Microprocessadores_-_Gradua%C3%A7%C3%A3o https://wiki.ifsc.edu.br/mediawiki/index.php/AULA_8_-_Microprocessadores_-_Gradua%C3%A7%C3%A3o https://wiki.ifsc.edu.br/mediawiki/index.php?title=AULA_7_-_Microprocessadores_-_Gradua%C3%A7%C3%A3o&oldid=70318 http://www.gnu.org/copyleft/fdl.html
Compartilhar