In elettronica e informatica, si dice bus un insieme di linee di comunicazione comuni che permettono ai componenti di un sistema elettronico di "dialogare" tra loro scambiandosi dati binari. Dal punto di vista realizzativo un bus può essere fatto per mezzo di un cavo con più fili oppure per mezzo di un circuito stampato:
Ciò che caratterizza un bus non è la sua struttura fisica (il modo in cui è stato realizzato) ma il meccanismo di utilizzo del bus stesso.
Facciamo un esempio. Supponiamo di voler collegare fra loro 4 dispositivi in modo che sia possibile lo scambio bidirezionale di dati fra ogni possibile coppia. Lo schema di collegamento (detto punto-punto) è il seguente:
Si noti come il numero di collegamenti necessari possa facilmente diventare molto elevato (e si tenga conto anche del fatto che ogni linea di collegamento, dovendo trasportare più bit, potrebbe essere costituita da più fili). Se il numero di componenti da collegare fra loro cresce, il collegamento punto-punto può rapidamente diventare molto complesso.
Una soluzione alternativa (che utilizza un collegamento comune, cioè un bus) è la seguente:
Osserviamo che la soluzione a bus è circuitalmente più semplice, dal momento che ogni componente comunica solo col bus, il quale a sua volta collega fra loro tutti i componenti. Paragonando i collegamenti a strade, la soluzione a bus equivale ad avere un'unica autostrada che collega fra loro tutti i componenti, mentre l'architettura punto-punto prevede singole strade separate per realizzare ogni collegamento.
Si definisce ampiezza del bus (bus width) il numero di bit (cioè di singoli collegamenti) del bus. Di solito il numero di linee del bus (cioè la sua ampiezza) viene indicata con un numero posto accanto al bus stesso e con la notazione "tagliata", come mostrato in figura (dove è mostrato un bus di ampiezza 8 bit):
L'architettura a bus è più semplice, ma, rispetto al collegamento punto-punto, è generalmente più lenta in quanto non è possibile che due dispositivi inviino contemporaneamente i propri dati sul bus. Per comprendere meglio il concetto, si supponga che il dispositivo 1 voglia inviare dati al dispositivo 2 e che il dispositivo 3 li voglia inviare al dispositivo 4. Nell'architettura punto-punto i due trasferimenti possono avvenire in contemporanea, dal momento che ogni coppia di dispositivi dispone di un collegamento dedicato (cioè separato). Nell'architettura a bus invece occorre effettuare prima uno dei due trasferimenti (es. quello da 1 a 2) e poi l'altro.
Si osservi la figura seguente:
Le linee indicate con A e B possono essere considerate come un semplice bus a 2 bit, condiviso fra le tre porte logiche. Si osservi che, in linea di principio, è possibile collegare su un bus tutti gli ingressi che si desiderano. In altre parole, tutti i dispositivi collegati su un bus possono leggere contemporaneamente (ricevere in ingresso) i valori logici presenti sul bus stesso.
Si consideri invece la linea C di bus mostrata nella figura qui sotto:
Questo tipo di collegamento (più uscite collegate su una stessa linea) è invece errato e porta a malfunzionamenti. Infatti che cosa accade se una delle porte collegate su C fornisce il valore '0' in uscita e un'altra fornisce il valore '1'? In questo caso si ha un conflitto fra i valori logici e il valore presente sul bus è indeterminato.
Si presti attenzione al fatto che un valore logico '0' non significa "un'assenza di valore". Conviene immaginare un bus come un tubo che viene riempito da un liquido: liquido verde significa '1' e liquido rosso significa '0'. Se due porte collegate in uscita sullo stesso bus cercano di imporre due valori logici diversi è come se cercassero di pompare nel tubo contemporaneamente liquido verde e rosso: è evidente che, in questa situazione, il valore logico presente sulla linea sarebbe indeterminato (né verde né rosso, ma un misto fra i due: cioè né '0' né '1').
Per risolvere questo problema (detto anche conflitto sul bus) bisogna fare in modo che solo una delle porte scriva (cioè metta) il proprio valore sul bus. Per esempio si potrebbero usare degli interruttori e chiudere un solo interruttore alla volta:
Un'alternativa, certamente più pratica nella realizzazione di circuiti elettronici, è l'utilizzo di buffer three-state, di cui parleremo fra poco.
Riassumendo: un solo dispositivo alla volta può scrivere (cioè inviare dati) sul bus. Invece è possibile che più dispositivi contemporaneamente leggano (cioè prelevino dati) dal bus. Infatti la scrittura sul bus da parte di più dispositivi implica che i dispositivi cerchino di imporre il proprio valore logico sul bus comune: ciò non è possibile, poiché provocherebbe un cosiddetto conflitto sul bus (su una linea logica è possibile avere un unico valore logico 0 e 1 in un dato istante). La lettura invece implica solo il prelievo di un valore dal bus e dunque può essere effettuata contemporaneamente da più dispositivi senza che ciò crei conflitti.
Sito realizzato in base al template offerto da
http://www.graphixmania.it