# Architettura Harvard

L'architettura Harvard, in informatica, è un tipo di architettura hardware per computer digitali in cui vi è separazione tra la memoria contenente i dati e quella contenente le istruzioni. Il termine inizialmente indicava l'architettura del computer Harvard Mark I, un computer basato su relè che memorizzava le istruzioni su un nastro perforato mentre i dati venivano memorizzati in un contatore elettromeccanico a 23 cifre. Questa macchina non era dotata di un'unità di immagazzinamento dei dati: questi erano interamente memorizzati dalla CPU e il loro caricamento e salvataggio era un processo eseguito in modo manuale agendo sui contatori.
Oggi, la maggior parte dei processori implementa percorsi di segnale separati per motivi di prestazioni, ma in realtà implementa un'architettura Harvard modificata, quindi possono supportare attività come il caricamento di un programma dalla memoria del disco come dati ed eseguirlo.

## Dettaglio della memoria

In un'architettura Harvard le memorie per i dati e per le istruzioni possono essere anche differenti, con tecnologia d'implementazione e timing diversi. In alcuni sistemi l'ampiezza degli indirizzi e la larghezza di parola delle istruzioni è superiore a quella dei dati. In altri sistemi i programmi sono memorizzati in una memoria a sola lettura (ROM) mentre i dati sono normalmente in una memoria a lettura-scrittura (RAM).

### Differenze con l'architettura classica di von Neumann

In un'architettura classica di von Neumann la CPU legge le istruzioni e i dati dalla memoria utilizzando lo stesso bus, così quando la CPU carica un'istruzione non può contemporaneamente caricare anche un dato. In un'architettura di Harvard il processore è in grado di accedere in modo indipendente a dati e istruzioni, dato che questi sono separati e memorizzati in memorie separate. Un'architettura Harvard pertanto può eseguire più compiti in parallelo perché può parallelizzare le operazioni di lettura e scrittura della memoria. Tuttavia all'aumento di velocità si contrappone la presenza di circuiti più complessi all'interno del processore.

## Utilizzi

Nei moderni computer in genere le due architetture sono tipicamente presenti. Istruzioni e dati in genere sono memorizzati nella stessa memoria di massa. I dati e le istruzioni letti dalla memoria di massa esterna sono memorizzati in una memoria interna di lavoro (working memory) denominata "memoria principale" (main memory) che fa uso di memorie dinamiche DRAM di grande capacità ma molto più lente dell'esecuzione delle istruzioni stesse. Oltre a queste memorie esistono anche delle memorie di capacità limitata, ma molto veloci, di tipo SRAM. Esse non sono visibili al software e sono chiamate cache: memorizzano un sottoinsieme della memoria principale e precisamente le istruzioni e i dati più frequentemente usati (vedi funzionamento della cache), per velocizzare l'accesso a queste informazioni. Ci possono essere due diversi utilizzi delle memorie cache in entrambe le architetture: le memorie cache "unificate" memorizzano istruzioni e dati assieme (architettura von Neumann) mentre le memorie cache "separate" memorizzano le istruzioni sulla I-Cache e i dati sulla D-cache (architettura Harvard). In genere le cache L3 sono unificate, le cache L2 unificate/separate e le cache L1 separate. L'architettura Harvard aumenta il parallelismo di esecuzione del processore perché consente l'accesso alle istruzioni successive (prefetch, accesso anticipato) in parallelo con l'accesso ai dati relativi alle istruzioni precedenti (vie di accesso separate indipendenti).
L'architettura Harvard viene spesso utilizzata in processori specializzati come i DSP per il trattamento dei dati audio o video. Per esempio il processore Blackfin della Analog Devices utilizza l'architettura Harvard.
Molti microcontrollori utilizzati in applicazioni industriali utilizzano questa architettura. Per esempio, i controllori PIC prodotti da Microchip Technology Inc e i controllori AVR prodotti da Atmel Corporation sono basati su architettura Harvard.
Questi processori sono caratterizzati dall'avere a disposizione una memoria piccola per i dati e le istruzioni ed utilizzano l'architettura Harvard e l'architettura RISC per eseguire la maggior parte delle istruzioni in un solo ciclo di clock. La separazione dei flussi permette a questi processori di avere una lunghezza di parola diversa per i dati e per le istruzioni sfruttando nel contempo un minor numero di transistor (il microprogramma vive in una ROM piuttosto ampia). Un esempio sono i microcontrollori PIC che hanno un bus per i dati a 8 bit ma un bus per le istruzioni a 12, 14 o anche 16 bit, potendo così caricare una singola istruzione e una costante con un solo caricamento dalla memoria, il tutto in un solo ciclo di clock. Altre architetture RISC, come l'architettura ARM, devono utilizzare due istruzioni per caricare una costante.