Elettronica applicata/Protocolli di bus

Indice del libro

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).
Sistema punto-punto
Sistema multi-punto

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

modifica

Solo 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

modifica

Il 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

modifica

Tutti 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

modifica
 

Un 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

modifica

Lo slave con cui vuole comunicare il master viene selezionato tramite l'indirizzamento.

 
Struttura interna di un'unità slave

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

modifica

Il 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

modifica

In 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

modifica
 

Le 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

modifica

Prevede 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

modifica
 

Spesso 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.