Architettura Harvard
# 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 particolare in alcuni sistemi l'ampiezza degli indirizzi o la larghezza di parola delle istruzioni è superiore a quella dei dati, e 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, quindi 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 quindi può eseguire più compiti in parallelo dato che può parallelizzare le operazioni di lettura e scrittura della memoria. 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 SRAM, non visibili al software, chiamate cache che memorizzano un sottoinsieme della memoria principale e precisamente le istruzioni e i dati più frequentemente usati e adiacenti (vedi funzionamento della cache), per velocizzare l'accesso a queste informazioni. Ci possono essere diversi livelli di queste cache che possono adottare ambedue le architetture, denominate "unificate" che memorizzano nella stessa cache istruzioni e dati (architettura von Neumann) o "separate", istruzioni sulla I-Cache e 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 e l'esecuzione dei 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.

Inoltre 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 poter eseguire la maggior parte delle istruzioni in un solo ciclo di clock. La separazione dei flussi permette a questi processori di avere 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). Per esempio i microcontrollori PIC hanno un bus per i dati a 8 bit ma un bus per le istruzioni a 12/14 o anche a 16 bit. In questo modo possono caricare una singola istruzione e una costante con un solo caricamento dalla memoria in un solo ciclo di clock. Per esempio altre architetture RISC come l'architettura ARM tipicamente devono utilizzare due istruzioni per caricare una costante.

