Elettronica applicata/Protocolli di bus
Una transazione è una sequenza di cicli di trasferimento, che sposta informazioni legate da un significato (indirizzo, dati, vettore di priorità...). In una transazione comunicano due unità:
- master: avvia l'operazione (es. CPU, DMA controller);
- slave: risponde ai comandi del master (es. memoria, periferiche di I/O).
In un sistema multi-punto tutte le unità condividono lo stesso canale, detto bus, costituito da un fascio di conduttori che connette tra loro tutte le coppie master-slave. Tutte le unità devono seguire lo stesso protocollo di transazione. Questo sistema è detto modulare aperto perché la configurazione del sistema può essere modificata aggiungendo o rimuovendo a piacere le schede.
Allocazione
modificaSolo un master alla volta può prendere il controllo del bus → un meccanismo di allocazione del canale garantisce che il bus sia pilotato da un solo master alla volta ed evita così le collisioni.
Token passing
modificaIl segnale di concessione del bus, detto grant, viene passato da un master all'altro secondo un ordine prestabilito, e ogni master quando fa richiesta aspetta il suo turno.
Collision detection
modificaTutti i master richiedenti possono parlare sul bus in qualunque momento, ma deve esistere un meccanismo di collision detection in grado di rilevare la collisione (es. CSMA/CD).
Arbitraggio
modificaUn arbitro esamina le richieste e concede il grant secondo un criterio di arbitraggio:
- First Come First Served (FCFS)
L'arbitro segue l'ordine temporale delle richieste, ma è impossibile avere una risoluzione temporale infinita per le richieste quasi simultanee.
- Priorità
Ogni richiesta è associata a una certa priorità prestabilita, e vengono servite per prime le richieste a priorità maggiore → una sequenza ravvicinata di richieste ad alta priorità possono condannare alla starvation le richieste a bassa priorità, ovvero queste ultime non vengono mai servite perché hanno sempre la priorità richieste a priorità maggiore:
- Priorità con fairness
Il meccanismo di fairness impedisce la starvation delle richieste a bassa priorità: l'arbitro crea in un certo istante un'istantanea delle richieste attive, le serve secondo le loro priorità ignorando tutte le nuove richieste che giungono nel frattempo, e alla fine quando tutte le richieste nell'istantanea sono state servite crea una nuova istantanea e ripete la procedura.
Indirizzamento
modificaLo slave con cui vuole comunicare il master viene selezionato tramite l'indirizzamento.
All'interno di una unità slave si possono riconoscere:
- decoder di indirizzi: riconosce l'indirizzo fornito dal master;
- unità di controllo e temporizzazione: gestisce l'handshake (strobe/ACK);
- core (es. celle di memoria nel caso di una memoria);
- data buffer (es. transceiver).
- Modalità di indirizzamento
- lineare: c'è un filo per ogni coppia master-slave, e lo slave viene selezionato direttamente attivando il suo filo → è possibile selezionare più slave alla volta, ma è adatto solo per sistemi con pochi slave;
- codificato: il master scrive l'indirizzo dello slave sul bus, e lo slave deve riconoscere tale indirizzo come il suo.
- logico: ogni slave è identificato da un indirizzo indipendentemente dalla sua posizione lungo il bus, quindi l'indirizzamento continua a funzionare anche se avviene lo scambio di due slave;
- geografico: l'indirizzo dello slave dipende dalla sua posizione lungo il bus, quindi il master non si accorge dello scambio di due slave.
Tecniche di miglioramento delle prestazioni
modificaIl throughput di un bus è il numero di bit trasferito nell'unità di tempo:
dove:
- è la larghezza del bus, cioè il numero di bit per ogni ciclo (numero di fili in parallelo);
- è la velocità del bus, cioè il numero di cicli nell'unità di tempo;
- è la durata di ogni ciclo di bus, e dipende da:
- parametri elettrici: , ;
- parametri dei moduli: , , ...;
- protocollo: numero di transizioni per ciclo, tipo di protocollo...
Migliorare le prestazioni significa aumentare il throughput :
- aumentare il numero di bit per ogni ciclo, ovvero ridurre il numero dei fili a parità di bit trasportati;
- ridurre la durata dei cicli.
Bus multiplexato
modificaIn un normale bus parallelo i segnali di indirizzo e di dato usano fili separati in cicli successivi, quindi in tempi diversi → il bus multiplexato ottimizza l'uso dei fili: sia i segnali di indirizzo sia quelli di dato viaggiano sullo stesso fascio di fili, quindi a parità di numero di fili è possibile trasferire più bit.
Ottimizzazione del numero di transizioni
modificaLe memorie DDR quasi dimezzano la durata dei cicli rimuovendo le transizioni inutili dei segnali di controllo strobe e ACK (dual-edge handshake) → si riduce il consumo di energia e aumenta il throughtput , anche se l'hardware è più complesso perché deve riconoscere una successione più complessa di transizioni di stato.
Protocollo Source Synchronous
modificaPrevede solo operazioni di scrittura: i segnali di informazione e di comando (strobe) viaggiano insieme, e arrivano alla destinazione con un ritardo l'uno dall'altro al massimo pari allo skew.
- Parametri di temporizzazione
- latenza dei dati: indica il tempo di attesa per ricevere i dati, e dipende da un solo tempo di trasmissione e dallo skew;
- frequenza di ciclo: è l'inverso della durata del ciclo, e non dipende dal tempo di trasmissione ma solo dallo skew.
- Confronto prestazioni
- protocollo sincrono: la velocità dipende dalla periferica più lenta;
- protocollo asincrono: la velocità è adattativa;
- protocollo semisincrono: è il più lento perché bisogna aspettare l'eventuale segnale di wait dal dispositivo più distante;
- protocollo Source Synchronous: è il più veloce perché non si deve attendere alcuna risposta → è usato per le RAM ad alta velocità.
Burst transfer
modificaSpesso un'operazione di lettura, soprattutto da una memoria, viene effettuata su celle di indirizzo contiguo (località del software) → è possibile leggere una serie di locazioni di memoria sequenziale inviando solo il primo indirizzo, e un controllore situato nella memoria si occupa di incrementare l'indirizzo da cui leggere a ogni ciclo di dati.