appuntiDiIngegneria
Bus di Comunicazione
Sommario
1.1. Bus di Comunicazione .......................................................................................................................2
1.1.1. Arbitraggio di un Bus .....................................................................................................................4
1.1.2. Bus Sincroni e Asincroni.................................................................................................................5
1.1.3. Standard Bus PCI ...........................................................................................................................7
1.1.4. Comunicazione Seriale ................................................................................................................ 11
1.1.5. Dispositivo USART ....................................................................................................................... 15
1.1.6. Protocollo USB ............................................................................................................................ 20
1
1.1. Bus di Comunicazione
Il Bus di Comunicazione è un insieme di linee conduttrici a cui sono contemporaneamente
connesse tutte le unità del calcolatore sulla Scheda Madre e che consente il trasferimento di dati
tra tali unità. I principali moduli da connettere sono 3:
Il Processore (CPU) ad esempio può essere visto come un blocco che in ingresso prende istruzioni,
dati, ed interruzioni dalla Periferiche, in output esso ha i dati elaborati, bits dedicati
all’indirizzamento di Memoria e Periferiche, e segnali di controllo per abilitare ad esempio
scritture/letture dal/verso la memoria o le Periferiche oppure per effettuare l’handshake per
richiedere il Bus al Bus Controller. La Memoria invece può essere vista come un blocco che in
ingresso ha i segnali di controllo per abilitare la lettura/scrittura, indirizzi per individuare specifiche
locazioni in essa ed i dati da scrivere/leggere in quelle locazioni. Infine le Periferiche prendono dati
in input, abilitazioni di lettura o scrittura da parte del Processore, ed indirizzi per accedere in
Memoria e svolgere compiti per conto del Processore; in output esse dovranno fornire dei dati e
dei segnali di interruzione per notificare il completamento del loro lavoro al Processore. Per molti
computer esso rappresenta il collo di bottiglia. Dal punto di vista Hardware chi vuole produrre una
Scheda Madre deve utilizzare un certo standard per definire le connessioni fra i vari moduli, il
quale definisce:
Caratteristiche Meccaniche: quante linee deve avere il bus e come deve essere fatta la
socket (lo zoccolo che accoglie il Processore).
Caratteristiche Elettriche: tensioni e correnti di funzionamento, tempi di discesa e salita
dei clock.
Caratteristiche Logico-Funzionali: quante linee dedicare ai dati, agli indirizzi oppure al
controllo, quali di queste sono sincrone oppure asincrone.
Il Bus può dedicare le sue linee a diverse funzionalità, per cui anche se fisicamente il Bus è sempre
uno solo, logicamente si distinguono tre tipi di Bus:
Bus dei Dati: usato per trasferire dati fra Memoria/CPU/Periferiche.
Bus degli Indirizzi: usato per trasferire i bit di indirizzamento per accedere a specifiche
locazioni di Memoria. 2
Bus di Controllo: usato per trasferire i segnali di controllo che l’ALU impartisce ai vari
componenti oppure tutti i segnali impiegati per l’handshake per richiedere il possesso del
Bus, le interruzioni, oppure i segnali di clock.
La situazione “logica” che si ha quindi è la seguente:
Solitamente ci sono diversi Bus ed il traffico fra essi viene separato da degli Switchs (o Bridges) in
maniera tale da definire diverse “velocità di trasferimento“. Se non ci fosse questa separazione
tutti i Bus trasferirebbero bit alla velocità delle Periferiche. Vengono mostrate 2 possibili
organizzazioni dei Bus sulla Scheda Madre:
Da un Local Bus estremamente veloce il Processore legge/scrive i dati sempre direttamente nelle
caches, ma in caso di cache miss mediante un System Bus esso può effettuare anche una ricerca in
Memoria. Tutte le Periferiche per comunicare fra loro utilizzano dei Bus di Espansione, gli
standard più comuni sono ISA e AGP. Con un Bridge è possibile anche collegare il System Bus con
un High Speed Bus sul quale vengono collegate le Periferiche più veloci come ad esempio le Reti
LAN, le schede grafiche o le schede video, e mediante le Expansion Bus interfaces è possibile
collegare questo Bus ad alta velocità con i Bus di Espansione. Gli standard più comuni per questi
Bus ad alta velocità sono PCI e PCI Express. Il Sistema di Bus presente sulla Scheda Madre può
essere ben schematizzato anche con la seguente figura: 3
Le linee del Bus possono essere di 2 tipi:
Dedicate: le linee degli indirizzi e dei dati sono separate per ogni
componente. Questa soluzione consente di effettuare
contemporaneamente più operazioni di trasferimento dati, ma è
molto costosa perché per collegare N moduli servono N(N-1) linee.
Condivise: consente di ridurre i costi e di ottenere una struttura modulare scalabile, a
scapito delle prestazioni. Questa soluzione è comunque la più
utilizzata nei moderni sistemi di elaborazione. Per fare ciò le
linee condivise sono multiplexate nel tempo, cioè per alcuni
istanti di tempo esse possono essere usate per i dati e per altri istanti per gli indirizzi.
La larghezza è uno dei parametri più importanti per la progettazione di un BUS. Sembrerebbe
ovvio progettare BUS molto ampi per aumentare lo spazio d’indirizzamento e le prestazioni.
D’altro canto questi richiedono molti collegamenti, richiedono più spazio sulla scheda madre e
connettori più grandi.
1.1.1. Arbitraggio di un Bus
Il Bus può essere utilizzato sia dai dispositivi che si comportano da Master, cioè quelli attivi che
indirizzano altri dispositivi ed avviano trasferimenti (Processore e DMA) sia dai dispositivi che si
comportano da Slave, cioè quelli passivi che attendono un trasferimento e devono essere
indirizzate (Periferiche, Memoria, DMA in alcuni casi). Il ruolo del Master non spetta solo al
Processore ma anche al DMA, per cui essendoci più Master collegati al Bus è necessario utilizzare
un Arbitro (Bus Controller) che decide chi può utilizzare il Bus. Ci sono 3 approcci principali per
realizzare un arbitraggio: 4
Approccio Distribuito (Decentralizzato) Daisy Chain:
non c’è un vero e proprio arbitro, così ogni Master
utilizza una linea BCLK per chiedere agli altri Master
se il Bus è libero facendo una Bus Request, se si allora
esso attiva il segnale BUSY per notificare a tutti che
esso è diventato il nuovo Bus Master. Se uno o più
Master richiedono contemporaneamente il Bus, solo
il Master a priorità più alta diventa il Bus Master,
ottiene il Grant e può attivare il segnale BUSY. Si
utilizza un sistema a priorità Fisse.
Approccio Centralizzato Parallelo: stavolta l’arbitro è
un dispositivo Hardware che riceve una Bus Request
da ogni Master e risponde con il segnale di Bus Grant
attivo soltanto al Master a cui decide di assegnare il
possesso del Bus. Ogni Master deve avere delle linee
Request e Grant dedicate.
Approccio Centralizzato Daisy Chain: c’è una sola
linea per le request condivisa da tutti, ed i dispositivi
sono disposti secondo un ordine a priorità fissa più o
meno vicini all’arbitro. Se uno o più Master
effettuano una Request all’Arbitro, quest’ultimo invia
il Grant al Master più vicino, il quale verifica se ha
fatto lui la richiesta, se no propaga il Grant al Master
immediatamente successivo, altrimenti blocca la
propagazione del Grant e prende possesso del Bus.
Sarà lo standard a definire il tipo di approccio utilizzato e la logica di funzionamento di un arbitro
mediante un certo Protocollo di Arbitraggio.
1.1.2. Bus Sincroni e Asincroni
Adesso viene posta l’attenzione sui Protocolli di Comunicazione del Bus per coordinare i
trasferimenti. Questi possono essere sia sincroni che asincroni. Un Bus Sincrono ha una delle linee
pilotata da un segnale di Clock che stabilisce la cadenza di tutte le operazioni, ad esempio tutte le
operazioni potrebbero prendere come riferimento il fronte di salita del clock, viene mostrato un
esempio di Protocollo Sincrono: 5
Fase A: il Master (Processore) pone sull’address line il valore dell’indirizzo della Periferica
(Slave).
Fase B: Se l’indirizzo è valido viene alzata la linea address enable.
Fase C: Al prossimo fronte di salita del clock la Periferica saprà che il Processore vuole
comunicare con lei e si prepara a campionare ciò che il Processore le manderà. Il
Processore saprà che la Periferica ha letto (perché è sincrona) perciò potrà riabbassare
l’address enable in quanto è sicuro che la periferica è pronta a leggere.
Fase D: Se il Processore vuole leggere dalla Periferica alza la linea read ed è sicuro che la
Periferica al prossimo fronte di salita (Fase E) avrà messo i dati sul Bus Dati, così che il
Processore potrà iniziare a prelevarli.
Fase F: Siccome il Processore è certo che dopo la Fase E la periferica abbia capito che il
Processore vuole leggere, prima del prossimo fronte di salita del clock il segnale read può
essere abbassato.
Fase G: Se il Processore vuole scrivere dovrà pria preparare i dati (Fase H), solo dopo che li
ha preparati esso alzerà la linea write per dire alla Periferica che essa dovrà scrivere quei
dati. Solo nella Fase I il Processore sarà sicuro che la periferica abbia capito che deve
scrivere questi dati, perciò il processore può abbassare la linea write.
Fase J: Terminata l’operazione di scrittura o lettura il Processore può rimuovere l’indirizzo
del valore da leggere/scrivere e del dato. 6
Invece Un Bus Asincrono non è dotato di un clock principale ma sono le parti che comunicano su
di esso per doversi esplicitamente sincronizzare. Quindi occorrono dei segnali di handshake fra le
parti per gestire la sincronizzazione. Viene mostrato un esempio di Protocollo Asincrono:
̅̅̅̅̅̅̅
Per leggere il Processore abbassa il segnale per dire che vuole leggere, poi deve aspettare
che la Periferica metta i dati sul Bus e mandi un segnale specifico per dire che i dati sono pronti, e
ciò lo fa abbassando la linea Ack. Il Processore legge i dati dalla Periferica, e quando ha finito deve
rialzare l’Ack per far capire alla Periferica che esso ha finito di leggere i dati e che quindi la
Periferica può togliere il dato dal Bus. Invece per scrivere è il contrario: il Processore mette il dato
̅̅̅̅̅̅̅
sul Bus e abbassa il segnale per dire alla Periferica di scrivere quel dato, dopodiché abbassa
l’Ack. La Periferica svolge il suo compito e quando finisce rialza la linea di Ack per dire al
Processore che ha finito e che quindi esso può rimuovere il dato dal Bus.
1.1.3. Standard Bus PCI
Nel 1990 il bus ISA aveva una larghezza di banda non sufficiente per molte periferiche e
applicazioni: ad esempio le applicazioni multimediali che richiedono la riproduzione di video e
audio in tempo reale, o per la grafica 3D dei videogiochi. Infatti il bus ISA funziona a una velocità
massima di 8.33 MHz ed è in grado di trasferire 2 byte per clock (mediante 16 linee dati); pertanto
la larghezza di banda massima è di 16,7 MB/sec. Il bus PCI (Peripheral Component Interconnect
bus) venne introdotto da Intel nel 1990 per far fronte alla sempre crescente necessità di ampiezza
di banda. Il bus PCI originale è un Bus sincrono con 32 linee dati e opera a 33 MHz (tempo di ciclo
30 ns) e ciò consente una larghezza di banda di 133 MB/sec (perché con 32 linee ad ogni colpo di
clock trasferisce 4 byte). Le versioni successive di bus PCI (2.0, 2.1, 2.2, etc) introdotte nel seguito
hanno ulteriormente ampliato la banda massima fino a 528 MB/sec e portando a 64 le linee dati e
a 66 MHz la frequenza di funzionamento. Quindi di PCI esiste una versione “lunga” a 64 bit ed una
versione “corta” a 32 bit, ed esse sono al giorno d’oggi utilizzate per collegare le Periferiche veloci
7
(DMA, Scheda Video, Scheda Audio, etc) sulla Scheda Madre. Si raggruppano le linee del PCI
secondo la logica di funzionamento, distinguendo: linee di sistema (clock e reset), linee dati e
indirizzi comuni multiplexate nel tempo (pertanto indirizzi e dati devono occupare fisicamente le
linee in istanti diversi), linee per le interruzioni, per l’arbitraggio e per segnalare eventuali errori. Il
PCI è un Bus sincrono a 32 o 64 bit che utilizza una trasmissione parallela, ma la versione PCI
Express è passata ad una trasmissione seriale; PCI utilizza un arbitraggio centralizzato. Scendendo
un po’ più nei dettagli, la comunicazione PCI avviene sempre fra un Master chiamato Initiator
(perché è sempre colui che inizia la trasmissione) ed uno Slave detto Target; il Master deve
richiedere all’arbitro il possesso del Bus e, appena lo ottiene, può indirizzare lo Slave avviando il
trasferimento in lettura o in scrittura. Quindi c’è sempre:
un’unica fase di indirizzamento;
una o più fasi di trasferimento.
Si mostra a titolo di esempio il Protocollo di Lettura del PCI:
Fase a: c’è un’unica linea Frame condivisa da tutti i componenti collegati al Bus, se un
Master la abbassa vuol dire che esso ha occupato il B
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Analisi numerica di convertitori trifase bidirezionali come raddrizzatore (ACDC), inverter (DC-AC) e inverter in pa…
-
Elementi di Informatica e Reti di Calcolatori
-
Parte 5 orale Elettrotecnica
-
Architettura Dei Calcolatori Generalita (Parte 1 della raccolta)