Elettronica applicata/Protocolli di bus

Wikibooks, manuali e libri di testo liberi.
Indice del libro
Sistema punto-punto
Sistema multi-punto

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