Bus (start point)

Il bus non sono altro che le connessioni di una CPU.
Pasted image 20230617195745.png
Abbiamo:

  • linee di controllo
  • linee dei dati
  • linee degli indirizzi

Più precisamente il bus è l'insieme di linee elettriche che collegano i moduli di un elaboratore.

Ci sono vari tipi di bus:

  • bus di sistema: interconnette la CPU, le schede di I/O e la memoria
  • bus interni al chip: mettono in comunicazione i moduli della CPU
  • bus SCSI: connette le periferiche, può avere una estensione di qualche metro
  • portante fisico di una rete ethernet: connette i calcolatori

Possono essere considerati tutti bus in quanto le funzionalità ed i problemi da affrontare sono gli stessi.

Pasted image 20230617200038.png

Un bus è costituito da un fascio di collegamenti elettrici.
Pasted image 20230617200137.png
In genere tale fascio viene rappresentato con una freccia larga per indicare che le linee contenute hanno funzionalità distinte.

Affinché i moduli connessi dal bus siano in grado di comunicare è necessario che essi interagiscano con il bus secondo un insieme di regole ben definite. Tali regole sono raccolte in un protocollo del bus.

Le linee del bus possono essere linee di dati, di indirizzo e di controllo:

  • linee dei dati: è detto data bus. Il numero di linee (larghezza del data bus) determina il numero di bit che possono essere trasmessi alla volta: ha un impatto sulle prestazioni del sistema;
  • linee di indirizzo: permettono di individuare la sorgente/destinazione dei dati trasmessi sul data bus;
  • linee di controllo: controllano l'accesso e l'utilizzo delle linee di dati e di indirizzo.

Connessioni di una CPU
...

Pasted image 20230617200647.png

  • Indirizzo (addressing): n piedini corrispondono a locazioni di memoria indirizzabili (tipicamente n = 16, 20, 32, 64)
  • Dati (data): n piedini permettono di leggere/scrivere una parola di n bit con una sola operazione (tipicamente n = 8, 16, 32, 36, 64)
  • Controllo: regolano il flusso e la scansione dei dati verso e dal chip, categorie principali:
    • controllo del bus (bus control)
    • interrupt
    • arbitraggio del bus (bus arbitration)
    • segnali del coprocessore (coprocessor)
    • stato (status)
    • varie (miscellaneous)

Connessioni al bus
...

I dispositivi hanno connessioni diverse a seconda della loro natura.
Pasted image 20230617201152.png

Distinguiamo dispositivi attivi e passivi

I dispositivi collegati ad un bus si dividono in:

  • attivi: possono decidere di iniziare un trasferimento, in genere sono collegati al bus per mezzo di un particolare chip detto bus driver
  • passivi: rimangono in attesa di richieste, in genere sono collegati per mezzo di un chip detto bus receiver
  • i dispositivi che si comportano sia come un dispositivo attivo che passivo (es. la CPU) sono collegati attraverso un chip combinato: il bus transceiver

Progettazione di un bus
...

Problemi principali
  • larghezza del bus: numero di linee
  • arbitraggio: come scegliere tra due dispositivi che vogliono diventare contemporaneamente arbitri dello stesso bus
  • funzionamento del bus: come avviene il trasferimento dei bit

Analizziamoli uno alla volta.

Larghezza del bus
...

Pasted image 20230617201915.png
In questo caso la CPU può indirizzare celle e trasferire m bit alla volta.
Il numero delle linee utilizzate per traferire gli indirizzi determinano la massima quantità della memoria indirizzabile.
Il numero delle linee utilizzate per il trasferimento di dati determinano la quantità di informazioni che è possibile trasferire con una singola operazione.

Bus larghi sono più costosi di quelli stretti, ma offrono banda più larga e dunque maggiore velocità di trasferimento.
Maggiore velocità si ottiene o aumentando la larghezza del bus (più bit per trasferimento) o diminuendo il ciclo di bus (più trasferimenti al secondo).

Per ovviare ai problemi dati da bus molto larghi talvolta si opta per un multiplexed bus: le linee utilizzate per il trasferimento dei dati e degli indirizzi sono le stesse, prima si trasmettono gli indirizzi, poi i dati. Tale bus è più lento.

Bus clocking
...

Possiamo distinguere:

  • bus sincroni: hanno una linea pilotata da un clock, che ha un certa frequenza (tra 5 MHz e 133MHz). Tutte le attività del bus richiedono un numero intero di questi cicli.
  • bus asincroni: non hanno un clock principale; i cicli del bus possono essere della lunghezza necessaria e non devono essere uguali per tutti i dispositivi.
Bus sincroni
...

Non illustriamo nel dettaglio il funzionamento di tali bus, ma diamo solo un infarinatura di come essi funzionano.
Pasted image 20230617203809.png
La lettera grega è il clock.
La durata delle fasi del clock (salita, discesa, fronti) è nota ad entrambi i partecipanti e l'unica incognita è l'inizio della comunicazione. L'inizio della comunicazione è dato dalla linea MREQ.

Vediamo un ciclo di lettura con questo tipo di bus.

In questo caso avviene un trasferimento di dati tra CPU e memoria, la CPU è il dispositivo attivo, mentre la memoria è quello passivo.
Come si vede dall'immagine la durata di una operazione può essere più lunga di un singolo ciclo di clock (nell'immagine sono tre).

La CPU mette l'indirizzo sul bus, dopo un certo tempo esso si stabilizza (in tempo ), e l'indirizzo rimane disponibile.

A linee di controllo stabili la CPU abilita i segnali di richiesta di inizio comunicazione (MREQ) e il segnale di lettura (RD). Questo avviene nel ciclo di clock

Per avvertire la CPU di non aspettare i dati, all'inizio del ciclo , così la memoria attiva il segnale di attesa dati (WAIT), in tal modo la CPU può fare altre operazioni.

La memoria mette i dati sulla linea dati (nel terzo ciclo di clock).
La CPU legge i dati e disattiva i segnali di richiesta e di lettura.

Il bus sincrono deve adattarsi al dispositivo più lento.

Bus asincrono
...

Pasted image 20230617205705.png
All'inizio funziona come prima:

  • la CPU mette un indirizzo sul bus address da cui vuole leggere
  • la CPU abilita MREQ (Memory Request) perché deve accedere alla memoria e RD perché vuole leggere da essa
  • attivati questi, la CPU attiva anche MSYN, comunicando di aver preparato l'indirizzo e di essere pronto per leggere dati dalla memoria
  • la memoria porta i dati sul BUS e non appena essi sono disponibili attiva il segnale SSYN, comunicando che i dati sono pronti per essere letti
  • la CPU li legge e non appena ha finito, disabilità MSYN, quando l'altro dispositivo (passivo), ovvero la memoria, vede che la CPU non vuole più leggere, disattiva il suo segnale SSYN.

Si noti che in questo caso non è necessario un clock globale noto a tutti i dispositivi che condividono il bus.

Questo appena descritto è un protocollo di handshake.

In caso di bus asincroni è necessario che i device conoscano il protocollo con cui devono comunicare il loro stato sul bus. Questo non è necessario nei bus sincroni (più semplice) da implementare, in cui la "prontezza" dei device nel bus avviene in base al clock. I bus sincroni impiegano il tempo necessario al dispositivo più lento per portare una certa informazione sul bus. I bus asincroni fanno risparmiare più tempo in questo contesto.

Inoltre, come abbiamo detto all'inizio, le linee di bus possono essere condivise tra più dispositivi il che ci porta ad aver bisogno un arbitro del bus.

Ci sono bus paralleli e seriali.
I bus paralleli inviano bit in modo parallelo (quindi inviano più bit alla volta).
I bus seriali inviano un bit alla volta (USB, USB 2.0, PCI EXPRESS).