Arbitraggio
centralizzato daisy chaining.
In un qualunque schema di arbitraggio, quando un dispositivo vuole
usare il bus invia un segnale di richiesta (bus request) ricevendo
successivamente un segnale di autorizzazione (bus grant) che gli da
diritto a utilizzare il bus. Quando avrà finito, il bus
potrà essere assegnato ad un altro richiedente.
In un sistema ad arbitraggio centralizzato è presente un
circuito che ha il compito di individuare quale dispositivo ha diritto
di utilizzare il bus. Nella figura 1 è schematizzato un
semplice esempio di arbitraggio centralizzato. Le periferiche inviano
le richieste all’arbitro utilizzando una linea
wired-OR per cui l’arbitro non può
sapere quanti dispositivi hanno inviato la richiesta di utilizzo del
bus.
Quando arriva una richiesta, se il bus è disponibile,
l’arbitro asserisce la linea di bus grant che attraversa uno
dopo l’altro i dispositivi collegati in daisy chaining. Il
primo dispositivo, cioè più vicino
all’arbitro, vede l’autorizzazione e, se ha fatto
richiesta se ne impossessa interrompendo la propagazione del bus grant.
Se non ha fatto richiesta propaga la concessione al dispositivo
successivo.
In questo schema ai dispositivi non è assegnato un livello
di priorità anche se esiste una priorità
implicita che è determinata dalla distanza
dall’arbitro. Lo svantaggio principale è che non
è garantito il fairness: una richiesta effettuata da un
dispositivo distante dall’arbitro potrebbe rimanere bloccata
indefinitamente.
Per aggirare questo ostacolo si definiscono dei livelli di
priorità. Esistono tante linee di richiesta e di concessione
quanti sono i livelli. A ciascun dispositivo viene assegnato un livello
per la richiesta del bus.
La Figura 2 illustra uno schema di arbitraggio centralizzato a 2
livelli di priorità. In situazioni reali si possono avere 4,
8 o 16 livelli.
Figura
1 Schema
di un arbitraggio del bus centralizzato a un livello di tipo daisy
chaining.
Quando due o più dispositivi fanno richiesta del bus quello
a priorità più alta lo otterrà per
primo. A parità di priorità vale la regola del
daisy chaining.
E’ chiaro allora che in questo caso, ad esempio, il
dispositivo 5 rischia di attendere a lungo prima che il
segnale di grant lo raggiunga.
Per comprendere meglio il modo in cui l’arbitro gestisce le
richieste dei master, evitando che si verifichino situazioni di attesa
indefinita è utile presentare il seguente caso reale di cui
una rappresentazione semplificata è mostrata in figura 3.
Uno schema centralizzato a 4 livelli è adottato per il bus
VME (comunemente chiamato versabus)4
.
Figura
2 Schema daisy chaining centralizzato a
2 livelli di priorità.
Quattro linee di richiesta separate arrivano all’arbitro, da
BR0* a BR3* dove lo 0 è il livello più basso e il
3 è quello più alto. Ad ogni livello di
priorità è associata una coppia di linee per la
gestione del bus grant, BGxIN* e BGxOUT*. Sono inoltre presenti altre
due linee, BBSY* che indica se il bus è disponibile o meno e
BCLR* il cui funzionamento verrà chiarito più
avanti.
Per la denominazione dei segnali si è preferito utilizzare
quella riportata sulle specifiche del bus VME e così si
farà anche nel seguito di questa trattazione per altri bus.
Quindi è possibile trovare una linea con la stessa funzione,
ma che utilizza un nome diverso. Si osservi inoltre che il simbolo *
che segue il nome, indica semplicemente che il segnale è
asserito quando il suo valore è basso. In seguito
sarà possibile trovare altre simbologie.
Quando un dispositivo effettua una richiesta del bus,
l’arbitro, se BBSY* indica che il bus è libero,
genera il segnale sul bus grant al livello corrispondente alla linea di
richiesta. Il primo dispositivo riceve il segnale di autorizzazione
attraverso BGxIN*, verifica se ha fatto richiesta e in caso negativo lo
propaga su BGxOUT* al BGxIN* del dispositivo successivo. Il grant
è quindi propagato lungo la catena finché non
arriva al richiedente, il quale ne bloccherà la
propagazione e attiverà il BBSY*. Una volta che il
dispositivo è riuscito ad avere il bus, esso può
tenerlo indefinitivamente a meno che l’arbitro non asserisca
BCLR* obbligando il suo rilascio.
Figura
3 Schema di arbitraggio del bus VME in
cui si è evidenziato il solo livello 3.
Le motivazioni che portano ad attivare BCLR* dipendono dal modo in cui
vengono gestite le priorità. Si possono usare diverse
tecniche che rispondono a diversi requisiti di funzionamento.
Utilizzando la tecnica a priorità fissa si rischia di
escludere dal controllo del bus i dispositivi alla fine della catena e
con priorità più bassa. Si può invece
utilizzare una tecnica a priorità rotante (round robin) che
garantisce a ciascun dispositivo un tempo massimo, trascorso il quale,
la linea BCLR* può essere asserita in presenza di altre
richieste.
In figura 3 è inoltre interessante notare la presenza di due
linee, DWB e DGB che permettono la comunicazione tra il master e la
propria interfaccia di controllo che avrà il compito di
effettuare all’arbitro la richiesta vera e propria. La DWB
viene attivata dal master nel momento in cui informa il suo controllore
che ha bisogno di accedere al bus. Non appena il controller ottiene il
bus asserisce DGB informando il master che può iniziare la
transizione. Se durante un utilizzo del bus arriva una richiesta a
priorità più alta (BCLR* asserita), il
controllore disasserisce DWG facendo interrompere la transazione ma, se
il master non ha completato le proprie operazioni, il DWB continua a
rimanere attivo in modo che al prossimo ciclo sia già pronto
per una nuova richiesta.
In figura 4 è riportato l’andamento dei segnali
quando il dispositivo allo slot 3 effettua la richiesta del bus.
Figura
4
Andamento dei segnali
durante la fase di richiesta del bus VME da parte del dispositivo 3. I
segnali
con asterisco sono asseriti con valore basso. La richiesta inizia con
l’attivazione di DWB3 a cui segue quella di BR3* (1).
Poiché BBSY* è
disasserito il grant si propaga (2) fino ad arrivare allo slot 03 che
se ne
impossessa asserendo DGB3 (3). Il dispositivo 3 può
utilizzare il bus per tutto
il tempo necessario, ma l’attivazione di BBSY* (4) interrompe
la propagazione
del grant (5) e i
segnali DWB3 e
BR3* vengono
disasseriti in modo da
permettere altre richieste.