# Arquitetura Harvard

A Arquitetura de Harvard (AO 1945: Arquitectura de Harvard) baseia-se em um conceito mais recente que a de Von Neumann, tendo surgido da necessidade de se pôr o microcontrolador para trabalhar mais rápido. É 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. É utilizada nos microcontroladores PIC. Tem, como principal característica, o acesso à memória de dados de modo separado em relação à memória de programa.
Baseada também na separação de barramentos de dados das memórias onde estão as instruções de programa e das memórias de dados, permite 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 principal vantagem dessa arquitetura é que a leitura de instruções e de alguns tipos de operandos pode ser feita ao mesmo tempo em que a execução das instruções (tempo Tcy). Isso significa que o sistema fica todo o tempo executando instruções, o que acarreta um significativo ganho de velocidade. Enquanto uma instrução está sendo executada, a seguinte está sendo lida. Esse processo é conhecido como pipelining (canalização).
A arquitetura Harvard 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.
Arquiteturas de Harvard são normalmente utilizadas em qualquer sistemas especializados ou para usos específicos. É utilizado em processamento de sinal digital especializados (DSP), normalmente por produtos de áudio e vídeo de transformação. Ele também é usado em muitos pequenos microcontroladores utilizados em aplicações eletrônicas, tais como os processadores ARM (sigla em inglês para Advanced RISC Machine) base de muitos fabricantes.
Os microcontroladores com arquitetura Havard são também conhecidos como "microcontroladores RISC" (Computador com Conjunto Reduzido de Instruções), e os microcontroladores com uma arquitetura Von-Neumann, de "microcontroladores CISC" (Computador com um Conjunto Complexo de Instruções). Porém, atualmente as linhas CISC e RISC é muito tênue, não existindo mais essa diferenciação, visto que os processadores atuais tem instruções complexas ao mesmo tempo que buscam minimizar o tempo de execução.

## RISC

Reduced Instruction Set Computer ou Computador com um Conjunto Reduzido de Instruções (RISC) é uma linha de arquitetura de processadores que favorece um conjunto simples e pequeno de instruções que levam, aproximadamente, a mesma quantidade de tempo para serem executadas. A maioria dos microprocessadores modernos são RISCs, por exemplo DEC Alpha, SPARC, MIPS, e PowerPC. O tipo de microprocessador mais largamente usado em desktops, o x86, é mais CISC do que RISC, embora chips mais novos traduzam instruções x86 baseadas em arquitetura CISC em formas baseadas em arquitetura RISC mais simples, utilizando prioridade de execução.
Os processadores baseados na computação de conjunto de instruções reduzido não tem micro-programação, as instruções são executadas diretamente pelo hardware. Como característica, esta arquitetura, além de não ter microcódigo, tem o conjunto de instruções reduzido, bem como baixo nível de complexidade.
A ideia foi inspirada pela descoberta de que muitas das características incluídas na arquitetura tradicional de processadores para ganho de desempenho foram ignoradas pelos programas que foram executados neles. Mas o desempenho do processador em relação à memória que ele acessava era crescente. Isto resultou num número de técnicas para otimização do processo dentro do processador, enquanto ao mesmo tempo tentando reduzir o número total de acessos à memória. RISC era, também, a arquitetura adotada para os processadores de videogames modernos, tendo quase acabado essa tendencia na oitava geração de videogames, como o Xbox e PS4 exemplos de videogames já com arquiteturas CISC, como x64 e x86.

## CISC

CISC (sigla para Complex Instruction Set Computer, ou, em uma tradução literal, "Computador com um Conjunto Complexo de Instruções") é uma linha de arquitetura de processadores capaz de executar centenas de instruções complexas diferentes sendo, assim, extremamente versátil. Exemplos de processadores CISC são os 386 e os 486 da Intel.
Os processadores baseados na computação de conjunto de instruções complexas contêm uma microprogramação, ou seja, um conjunto de códigos de instruções que são gravados no processador, permitindo-lhe receber as instruções dos programas e executá-las, utilizando as instruções contidas na sua microprogramação. Seria como quebrar estas instruções, já em baixo nível, em diversas instruções mais próximas do hardware (as instruções contidas no microcódigo do processador). Como característica marcante esta arquitetura contém um conjunto grande de instruções, a maioria deles em um elevado grau de complexidade.
Examinando do ponto de vista um pouco mais prático, a vantagem da arquitetura CISC é que já temos muitas das instruções guardadas no próprio processador, o que facilita o trabalho dos programadores de linguagem de máquina; disponibilizando, assim, praticamente todas as instruções que serão usadas em seus programas. Os processadores CISC têm a vantagem de reduzir o tamanho do código executável por já possuirem muito do código comum em vários programas, em forma de uma única instrução.
Porém, do ponto de vista da performance, os CISC's têm algumas desvantagens em relação aos RISC's, entre elas a impossibilidade de se alterar alguma instrução composta para se melhorar a performance. O código equivalente às instruções compostas do CISC pode ser escrito nos RISC's da forma desejada, usando um conjunto de instruções simples, da maneira que mais se adequar. Sendo assim, existe uma disputa entre tamanho do código X desempenho.

## História

As raízes da arquitetura Harvard se originam na Universidade de Harvard com o projeto do computador Harvard Mark I que foi criado entre 1937 a 1944, durante a II Guerra Mundial, idealizado por Howard Aiken com o apoio da IBM e da marinha norte americana foi considerado o primeiro projeto de computador. Utilizava muitas válvulas, as operações internas eram controladas por relés e os cálculos eram realizados mecanicamente. Integrava conceitos de computadores digitais e analógicos, pois tinha sistema eletrônico e mecânico na mesma máquina.
H. Aiken, o pesquisador que desenvolveu Mark I, construiu outras versões deste computador. Apesar de ter se originado do Mark I, a arquitetura Harvard só foi novamente impulsionada a partir da década de 70 com a criação de circuitos integrados por diversas empresas do segmento como a Signetics, que criou o dispositivo 8x300, a intel com o 8048, a General Instruments para uso como interface controladora de periféricos (PIC) que foi projetada para compensar o fraco barramento de I/O da sua CPU CP1600 de 16 bits.
A divisão de microeletrônica foi, depois, transformada na Arizona Microchip Technology (por volta de 1985), com os PICs como seu produto principal etc...
Antes disso, a arquitetura Harvard tinha sido apenas uma curiosidade científica desde a sua invenção pela Universidade de Harvard.
Numa competição criada pelo Departamento de Defesa dos Estados Unidos que colocou Princeton contra Harvard, Princeton ganhou a competição porque o tempo médio entre falhas (MTBF) da sua arquitetura de memória mais simples era muito melhor, embora mais lenta que a proposta de Harvard. Com o desenvolvimento dos transistores e dos circuitos integrados, a arquitetura Harvard finalmente foi reconhecida. A Microchip fez melhoramentos na arquitetura original, e atualizou os blocos funcionais do projeto original com avanços modernos que estão em compasso com os processos arquitetônicos existentes e capacitados pelo baixo custo dos semicondutores.

## Arquitetura de Harvard modificada

A Arquitetura de Harvard Modificada é uma variação da Arquitetura de Harvard que permite que o conteúdo da memória de programa seja acedido como se fosse memória de dados. Esta é a principal diferença entre as duas arquiteturas. Quase todos os computadores pessoais modernos possuem Arquitetura de Harvard Modificada.
Exemplos da Arquitetura de Harvard Modificada:
* Acesso de leitura - os valores dados iniciais podem ser copiados da memória de instruções para a memória de dados quando um programa é iniciado.
* Acesso de gravação - a capacidade de reprogramar é geralmente exigida; muito poucos computadores são meramente memória apenas para leitura (ROM) com base. Por exemplo: um microcontrolador, normalmente,tem a capacidade de gravar a memória flash, que é usada para manter as suas instruções.

## Detalhes da memória

Na Arquitetura de Harvard, não é necessário usar as duas memórias, pois elas possuem características em comum. Em especial, a largura da palavra, o tempo, tecnologia, implementação e estrutura de endereço de memória pode ser diferente. Em alguns sistemas, as instruções podem ser armazenadas na memória somente como leitura, enquanto a memória de dados, geralmente, requer leitura e escrita de memória. Em alguns sistemas, há mais memórias de dados para endereços de instrução do que memórias de instruções, pois são mais amplas do que os endereços de dados.

## Comparando a Arquitetura de Harvard com a Arquitetura de Von Neumann

A diferença entre a arquitetura Harvard e a de Von Neumann é que a primeira separa o armazenamento e o comportamento das instruções do CPU e os dados, enquanto a última utiliza o mesmo espaço de memória para ambos. Nos CPUs atuais, é mais comum encontrar a arquitetura Von Neumann, mas algumas coisas da arquitetura Harvard também são vistas. Nessas distintas arquiteturas, temos vantagens e desvantagens. Na Arquitetura de Harvard, os caminhos de dados e de instrução são distintos.
Já na arquitetura Von-Neumann, é processada uma única informação por vez, visto que, nessa tecnologia, instruções e dados percorrem o mesmo barramento, o que torna o processo lento em relação à arquitetura Harvard.
A arquitetura Harvard é mais utilizada nos 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.
Sobre a arquitetura de von Neumann, a CPU pode ser uma instrução de leitura, escrita de dados de memória, ou para memória. Ambas as instruções, não podem ocorrer ao mesmo tempo, uma vez que as instruções e os dados fazem o uso do sistema de barramento. Em um computador que utiliza a arquitetura Harvard, a CPU pode ler uma instrução e executar um acesso à memória de dados ao mesmo tempo, mesmo sem cache, pode assim ser mais rápido para um circuito de complexidade dada porque a instrução busca o acesso a dados, sem acontecer por uma via única de memória.
Além disso, uma máquina que faz o uso da arquitetura de Harvard tem o código e espaços com distintos dados de endereço: o endereço da instrução zero não é o mesmo que os dados de endereço zero. A instrução do endereço zero pode identificar um valor de 24 bits, enquanto os dados de endereço zero pode indicar um byte de oito bits que não faz parte desse valor do bit 24.