Documento word

Documento pdf

Documento zippato

Schede a microprocessore Seconda parte

 

 

 

 

 

 

 

 

 

 

 

 

 


In realtà il bus del microprocessore si compone di 3 bus diversi:

*   Bus dati

*   Bus indirizzi

*   Bus di controllo

Bus dati

Il data bus consente il trasferimento di informazioni:

*   Da una cella di memoria alla CPU (lettura): questa azione viene svolta dalla CPU quando deve ottenere il codice operativo di una istruzione da eseguire oppure quando il programma che sta eseguendo chiede di prelevare un dato dalla memoria.

*   Dalla CPU ad una cella di memoria (scrittura): questa azione viene svolta  dalla CPU quando il programma chiede l’inserimento di un dato in memoria

*   Da una porta di ingresso alla CPU (acquisizione o lettura di una porta): questa azione viene svolta dalla CPU quando il programma chiede il prlevamento di una informazione dall’esterno (posizione del mouse, pressione di un tasto ...)

*   Dalla CPU ad una porta di uscita (scrittura di una porta): questa azione viene svolta dalla CPU quando il programma chiede la modifica dello stato di una grandezza fisica esterna al sistema (accensione/spegnimento di un led, carattere sul monitor , canzone di Tony Tammaro emessa dagli altoparlanti...)

Alcune considerazioni che emergono da questa lista di possibili azioni:

*   Tutte le azioni coinvolgono da un lato CPU e dall’altro un solo elemento (cella di memoria o porta) dei sistemi periferici (memoria o I/O).

*   Dei due elementi coinvolti in un trasferimento ( CPU e memoria o I/O) uno impone il dato sul data bus facendo assumere temporaneamente ai segnali di data bus i valori delle sue uscite mentre l’altro campiona il dato copiando i segnali di data bus attraverso i suoi ingressi.

*   Tutti gli altri elementi periferici (altre celle di memoria e altre porte  I/O) pur essendo elettricamente collegati al bus devono mantenersi funzionalmente scollegati, cioè non imporre le loro uscite sul bus ne campionare il bus con i loro ingressi. Questa condizione viene realizzata con la tecnica dei buffer tri-state.

*   La presenza di un  dato sul data bus è solo temporanea. I dati si avvicendano, uno dopo l’altro, in funzione delle azioni svolte dalla CPU. Inoltre la direzione dei dati sul data bus può cambiare perché un elemento può in momenti diversi comportarsi da ingresso o da uscita nei confronti del data bus (ad esempio un cella di memoria è uscita durante una lettura ed ingresso durante la scrittura). Per questo motivo si dice che il databus e’ bidirezionale.

Tutti i dispositivi che si collegano al data bus devono essere in grado di rimanere funzionalmente disconnessi e di invertire la direzione del flusso dei dati.

Per realizzare questa prestazione il pin di collegamento al data bus è internamente collegato a due buffer tri-state collegati in opposizione.

 

 

 

 

 

 

 

 

 

 


In questo modo quando entrambe le abilitazioni dei due buffer sono “non attive” il dispositivo è funzionalmente scollegato dal bus. Questa è la situazione normale in cui si trovano per la maggior parte del tempo tutti i dispositivi. Se un dispositivo riceve l’”abilita uscita” il dato che esso contiene viene copiato all’esterno imponendo il segnale corrispondente a questo dato sul data bus. Un solo dispositivo alla volta può trovarsi in questa situazione. Se più di un dispositivo impone i suoi dati sul data bus si crea un conflitto di bus (due uscite collegate insieme con valori che possono essere diversi e quindi risultato imprevedibile)

Se un dispositivo riceve l’”abilita entrata”  il dato che si trova sul data bus viene copiato all’interno del dispositivo. Anche in questo caso un solo dispositivo alla volta può trovarsi in questa situazione, questa volta non per un problema di bus ma perché non ha alcun significato che due dispositivi copino contemporaneamente lo stesso dato.

Non è lecito che sia contemporaneamente attive entrambe le abilitazioni.

L’ampiezza di parola del data bus è determinata dal numero di bit che la CPU è in grado di trasferire dal/al data bus in una singola operazione e prende il nome di parallelismo.

Maggiore è l’ampiezza del data bus e maggiore è il parallelismo e quindi la rapidità con cui si svolgono le operazioni.

Questa ampiezza non impedisce però le operazioni su dati di dimensioni più grandi di questa ampiezza ma le rende solamente più lente perché la CPU deve spezzare il dato durante il trasferimento eseguendo più azioni in sequenza. Valori tipici di ampiezza di parola sono 8, 16, 32, 64 bit.

I valori di ampiezza di parola sono cresciuti nel tempo e i microprocessori attuali (famiglia Pentium e compatibili) hanno in genere una ampiezza di parola di 64 bit, cioè leggono/scrivono 8 BYTES in una singola operazione di bus.

Address bus

Le azioni di lettura, scrittura, acquisizione ed emissione sono governate dalla CPU che quindi è sempre uno dei due estremi di un trasferimento. L’altro estremo è una singola cella di memoria nei primi due casi e una singola porta di ingresso o uscita nei secondi due casi.

La CPU che decide un trasferimento deve specificare da/per quale cella o da/per quale porta l’operazione deve essere eseguita.

Le celle di memoria e le porte di I/O sono organizzate in schiere di elementi omogenei. Potete immaginare, ad esempio, un banco di meoria come una cassettiera, e la singola cella o locazione di memoria come il singolo cassetto.

Indirizzo

Cella o Porta

 

0

Valore0

Primo elemento

1

Valore1

Secondo elemento

2

Valore2

Terzo elemento

 

 

 

 

M-2

ValoreM-2

M-1esimo elemento

M-1

ValoreM-1

Mesimo elemento

Ogni locazione o porta di IO deve essere identificata da un indirizzo , un numero che la identifica. I sostanza, la CPU, per poter dialogare con una locazione di memoria o con una porta deve indicare con quale locazione o porta vuole comunicare immettendo sul bus indirizzi il suo indirizzo. E’ un po’ come la posta: per poter inviare una lettera ad una persona (il dato) dovete comunicare al sistema postale il suo indirizzo; se quella persona non ha un indirizzo no potete inviarle una lettera: un altro esempio è il telefono: per poter comunicare con una persona dovete fornire al sistema telefonico il suo numero identificativo. Provate a pensare a tutti gli altri sistemi in cui lo scambio di informazioni presuppone che gli attori del dialogo devono essere dotati di un identificativo, di un indirizzo.

L’address bus è unidirezionale, esce dalla CPU per raggiungere tutti gli altri dispostivi (memoria ed I/O) che lo vedono sempre come un ingresso.

L’informazione contenuta nell’address bus indica quale elemento periferico (cella o porta) deve essere coinvolto nella successiva operazione di trasferimento sul data bus e quindi deve uscire dallo stato di alta impedenza per impegnare (se deve scrivere) o campionare  il bus (se deve leggere un dato inviato dal microprocessore) a seconda della direzione di trasferimento richiesta dalla operazione.

Tutti gli elementi che hanno un indirizzo diverso da quello specificato rimangono in alta impedenza durante l’operazione non imponendo nulla sul data bus ne campionando nulla dal data bus perché non sono coinvolti nell’operazione.

 


Spazio di indirizzamento

 

L’informazione di indirizzo portata dall’address bus è codificata in binario quindi il numero di fili dell’address bus è tale da consentire la codifica binaria dell’indirizzo di tutte le locazioni di memoria o unità di ingresso/uscita che si devono poter raggiungere.

La quantità di indirizzi che si possono comporre  viene chiamata spazio o capacità di indirizzamento   e la relazione tra il numero di fili dell’address bus e la dimensione dello spazio di memoria è data dalle seguenti formule:

M=2N

dove M è il numero di indirizzi diversi che si possono comporre ed N è il numero di bit del bus indirizzi.

Notate che teoricamente nulla vi impedisce di collegare il microprocessore a quanta memoria volete: gli unici limiti possono essere eventualmente di tipo elettrico come alimentazione e così via. Ma se il numero di locazioni di memoria che collegate alla CPU supera la sua capacità di indirizzamento, una volta esauriti gli indirizzi disponibili ci sarà un certo numero di locazioni di memoria o porte a cui non si potrà associare alcun indirizzo: queste locazioni o porte saranno inutilizzabili perché il microprocessore non avrà alcun modo per indicare che vuole dialogare con loro.

Spazi di indirizzamento tipici sono:

*   16 bit à     64K locazioni (Z80  e molti attuali microcontrollori)

*   20 bit à   1Mega  di locazioni [tenete presente che in informatica i multipli non crescono di un fattore 1000 ma 1024, cioè un mega è pari a 1024 K cioè a 1024*1024 = 1048576 indirizzi] (8088,8086,80186,80286)

*   32 bit à   4Giga (80386,80486,Pentium, G3,G4)

*   36 bit à     64G (Pentium II,Pentium III,Pentium IV, Athlon)

*   64 bit à     16Tera (Xeon, Itanium, Athlon64, G5)

Nel file seguente vi è l’esempio della mappa degli indirizzi di memoria per un microprocessore con bus indirizzi a 16 bit.

Control bus

Le azioni di lettura, scrittura, acquisizione ed emissione sono governate dalla CPU che sincronizza gli altri dispositivi attraverso il control bus.

Il control bus è costituito da un insieme di segnali logici. Alcuni di questi escono dalla CPU e quindi sono comandi che la CPU da agli altri dispositivi mentre altri entrano nella CPU e quindi sono informazioni che gli altri dispositivi danno alla CPU.

Si può quindi affermare che il control bus è bidirezionale, ma con un significato diverso rispetto al data bus. Infatti nel caso del control bus esistono segnali d ingresso e segnali di uscita ma ciascun segnale non inverte mai la sua direzione mentre nel data bus tutti i segnali sono sia di ingresso che di uscita perché in funzione della operazione svolta la direzione si può invertire.

I segnali di uscita del control bus sono quindi comandi per le periferiche; questi segnali sono a loro volta governati dal ‘clock’ che è il motore che fa avanzare le azioni della CPU con una cadenza fissata dalla sua frequenza. Esempi di segnali di controllo sono:

*   READ: segnale di controllo che indica che l’operazione da eseguire sul bus dati è una lettura, cioè un trasferimento dalla periferia (cella o porta) verso la CPU.

*   WRITE: segnale di controllo che indica che l’operazione da eseguire sul bus dati è una scrittura, cioè un trasferimento dalla CPU verso la periferia (cella o porta).

*   MEMORY: segnale di controllo che indica che l’operazione da eseguire sul bus dati (lettura o scrittura) è riferita ad una cella di memoria.

*    I/O: segnale di controllo che indica che l’operazione da eseguire sul bus dati (lettura o scrittura) è riferita ad una porta di I/O.