Registri

Buffer invertente/non invertente
...

Prima di iniziare a discutere di registri, dobbiamo introdurre il concetto di buffer invertente e non invertente.
Pasted image 20230616190753.png
Questo componente, viene anche chiamato tri-state.

Quando il segnale di controllo (control) è alto si comporta come un filo:
Pasted image 20230616190905.png

Quando il segnale di controllo è basso DataIn e DataOut (nella prima figura), vengono scollegati:
Pasted image 20230616190946.png
Quello presentato nelle righe immediatamente precedente è un buffer non invertente.

Mentre di seguito, mostriamo un buffer invertente che si comporta come l'opposto di un buffer non invertente:
Pasted image 20230616191116.png
Notiamo che vi è solamente aggiunto il pallino di negazione.

Registri
...

I registri sono un insieme di flip-flop di tipo D.
Lo stesso clock è in ingresso in tutti i flip-flop del registro.
Un ingresso: enable permette di connettere/disconnettere il registro dal bus di output tramite buffer non invertenti.
Pasted image 20230616191225.png

Blocco di registri (register file)
...

Ricapitolando: un registro è un insieme di flip-flop.

Un blocco di registri, come si intuisce, è un insieme di registri leggibili e scrivibili.
Per potere effettuare una operazione di lettura/scrittura si deve specificare il numero del registro sul quale compiere tale operazione.

La lettura di un blocco di registri non altera lo stato del registro che si va a leggere, quindi per ottenere il valore contenuto in uno specifico registro sarà sufficiente fornire alla logica combinatoria il numero identificativo dal quale si vuole leggere.

La scrittura invece, altera lo stato del registro. In tal caso saranno necessari tre input: il numero del registro su cui scrivere, il dato da scrivere e il clock per sincronizzare l'operazione.

Pasted image 20230616191505.png
Il registro che vediamo qua sopra, ha:

  • 2 porte di lettura
  • 1 di scrittura
    Tale registro necessità di 5 input e 2 output.

I 5 input sono le linee rappresentate alla sinistra della figura e linea di controllo per la scrittura (in azzurro nella figura).
I 2 output sono rappresentati alla destra.

I registri: read register number 1, read_register number 2 e write register selezionano i registri da leggere/scrivere. Write data è il dato da scrivere.

Lettura
...

Le linee per i read register number 1 e 2 sono collegati, ognuno, ad un multiplexer.
read register number 1, non sono altro che delle linee di controllo per un multiplexer, che ci consentono di selezionare tra un certo numero di registri. In base a quanti registri ci sono read register number 1 avrà un certo numero di bit. Per esempio nel caso ci fossero 32 bit su cui scegliere, sarebbero necessari 5 bit (). Stesso discorso vale per il read register number 2.
Vediamo una figura:
Pasted image 20230616193931.png
In tal modo riusciamo ad implementare la lettura di un registro.
Supponiamo di avere 5 bit per selezionare i registri. E supponiamo di voler leggere il registro 10.
Dobbiamo passare il valore del registro che vogliamo leggere (in binario ovviamente), in questo caso il valore in 5 bit per il registro 10 è il che vuol dire che:

  • read register number 1 è impostato a
    Nel contesto di questo esempio non vogliamo leggere da altri registri, in tal caso, potrebbe essere passato un altro numero di registro da cui leggere.
Scrittura
...

Implementare la lettura risulta più complesso, dato che bisogna cambiare lo stato di un solo specifico registro. Tale risultato è ottenibili con un decoder che codificherò il segnale per identificare il registro da modificare.

Pasted image 20230616195944.png

Cambio di nomi

Nella figura sopra register number non è altro che write register della figura in cui il register file è schematizzato per intero. Mentre register data non è altro che write data della stessa figura.
Tale figura viene riportata qui in basso:
Pasted image 20230616191505.png
Il segnale write (azzurro) non ha cambiato nome: rappresenta il clock.

Nella figura sopra il register number (ex write register) sono n linee di input per un decoder, che codificano un registro per la scrittura. Infatti il decoder è del tipo to , con n linee di input si riesce a codificare uscite. Immaginiamo di avere 32 registri. Il decoder in questo caso avrà in input 5 linee che ci daranno modo di codificare porte di uscita, ovvero 32.

E se un registro viene sia letto che scritto?

Se nello stesso ciclo di clock uno stesso registro viene sia letto che scritto, dato che l'operazione di scrittura viene effettuata sul fronte del clock, si deve attendere che il clock si alzi di nuovo (quindi che si abbassi e si alzi) per poter effettuare la lettura.

Il che vuol dire che quando viene eseguita una operazione di scrittura su un registro, il valore scritto diventa valido durante il fronte del clock successivo. Ciò vuol dire che il valore scritto sarà disponibile per la lettura nelle operazioni successive.

Esempio:

  • Stato del clock: fronte di salita
    Viene eseguita una scrittura su un registro.
  • Stato del clock: clock alto
    Non avviene nessuna scrittura o lettura
    Il clock si abbassa
  • Stato del clock: fronte di salita
    Viene eseguita la lettura sul registro scritto nell'operazione precedente, che restituisce la scrittura effettuata nel fronte di salita appena trascorso.

Se si volesse restituire il valore scritto nel fronte di salita, nello stesso ciclo di clock è necessario aggiungere logica addizionale al banco di registri o al suo esterno.

Esempio: SRAM
...

Sotto è mostrato una immagine di una SRAM che ha una struttura simile ad un register file (sopra presentato).
Pasted image 20230617104631.png
L'immagine sopra mostra l'organizzazione complessiva della memoria.
Abbiamo 5 linee di ingresso:

  • 2 per i dati: e (errore nella figura, il più a destra deve essere )
  • 2 per l'indirizzo, ci sono due linee, dato che il decoder è del tipo 2to4, due input per codificare 1 su 4 uscite
  • 1 per il bit di controllo: write enable (clock)

Abbiamo poi 2 line di uscita.
Le celle attivate usano un buffer tri-state (descritto all'inizio di questo documento) connesso alle linee di output per fornire i dati richiesti. Come si vede nell'immagine sotto per (ma vale anche per )
Pasted image 20230617110608.png
Il decoder ha il compito di selezionare quale coppia (linea orizzontale, riga) di celle di memoria deve essere attivata per la lettura/scrittura.
Una volta selezionate, le celle di memoria attivate utilizzano un output a tre stati che è collegato alla linea verticale per trasmettere i dati.

Ecco una simulazione della lettura, immaginiamo di avere proprio una SRAM come quella sopra.
Per l'ingresso al decoder abbiamo 2 bit che seleziona 1 tra le quattro righe di memoria.

Simulazione operazione di lettura nella SRAM
...

L'indirizzo ha i bit , quindi leggerò la riga di memoria , ovvero la seconda (visto che la prima è la 0).

Il clock write enable è alto, quindi posso leggere (la lettura può avvenire in qualsiasi momento quando il clock è alto).

e non sono rilevanti per la lettura.
Vengono mandati in uscita su e la coppia di celle di memoria della riga .

Simulazione operazione di scrittura nella SRAM
...

L'indirizzo ha i bit , quindi scriverò sulla riga di memoria , ovvero la terza (visto che la prima è la 0).

Il clock write enable è basso, nessun dato viene scritto, in questo ciclo di clock.
Si verifica un fronte di salita, vengono presi i valori passati in e da scrivere nella riga di memoria selezionata ().

Chip di memoria
...

Pasted image 20230617114252.png

  • n linee di indirizzo righe di flip-flop
  • b linee di output b colonne di flip-flop
  • I segnali possono essere attivi quando il livello è basso o lato (è specificato nel chip)
  • Matrici : selezione della colonna e della riga

Tipi di memoria: RAM
...

Random Access Memory

  • SRAM: RAM statiche utilizzano flip-flop di tipo D, estremamente veloci e utilizzate per realizzare la cache
  • DRAM: RAM dinamiche utilizzano transistor e condenzatori, vanno rinfrescati, offrono grandi capacità, ma più lente
    • DRAM FPM (Fast Page Mode): organizzate in matrici
    • DRAM EDO (Extended Data Output): con una semplice pipeline per l'output
    • SDRAM (Synchronous DRAM): utilizzata inizialmente su cache e memorie centrali, dati e indirizzi controllati dallo stesso clock (133 MHz per le SDR, Single Data Rate)
    • SDRAM-DDR (Double Data Rate): leggono sia nel fronte di salita che in quello di discesa, comparse inizialmente su schede video.

Tipi di memoria: ROM
...

Read Only Memory_ uitilizzate per dati che non devono essere modificati:

  • PROM (Programmable ROM)
  • EPROM (Erasable PROM): memoria cancellabile mediante esposizione alla luce ultravioletta
  • EEPROM (Electrically Erasable PROM): memoria cancellabile per mezzo di impulsi elettrici (ma molto più lente)
  • FLASH (EEPROM cancellabile a blocchi)

Bonus: macchine a stati finiti
...

Una macchina o un automa, è un dispositivo in grado di interagire con l'ambiente esterno a fronte di uno stimolo in ingresso (input). In base a tale stimolo, l'automa, reagisce con una risposta che dipende da informazioni memorizzate in elementi interni.

Una macchina a stati finiti (FSM) è vista come una scatola che possiamo descrivere mostrando cosa succede passo dopo passo:
Pasted image 20230617115228.png

  • legge un simbolo in ingresso (che appartiene ad un insieme finito A)
  • produce un simbolo in uscita (che appartiene ad un insieme finito B)
  • cambia il proprio stato interno (la memoria è finita quindi l'insieme Q degli stati è finito)
    Macchine con memoria infinita sono solo teoriche e molto potenti (macchina di Turing).
Esempio di un automa
...

Distributore automatico di biglietti.

  • Accetta solo monete grandi (MG) e monete piccole (MP)
  • un biglietto viene emesso quando vengono ricevute una MP ed una MG
  • l'ordine di immissione non è rilevante
  • non dà resto
  • vengono restituite le monete non adeguate

L'insieme dei simboli (finito) che supporta in ingresso è:
L'insieme dei simboli (finito) che supporta in uscita è:
L'insieme finito degli stati è formato da:

  • : non è stata inserita alcuna moneta
  • : è stata inserita una moneta grande
  • : è stata inserita una moneta piccola

Tabella di transizione degli stati:
Pasted image 20230617115706.png

Grafo degli stati (diagramma di stato)
Pasted image 20230617115727.png

Una macchina a stati finiti è descritta da una quintupla:

  • A: insieme finito di simboli in ingresso
  • B: insieme finito di simboli in uscita
  • Q: insieme finito degli stati
  • funzione di uscita (Macchina di Mealy)
    funzione di uscita (Macchina di Moore)
  • funzione di cambiamento di stato

Nota: le funzioni e sono realizzate da reti logiche combinatorie

Codifica dei tre possibili stati
...

Pasted image 20230617120152.png
Pasted image 20230617120203.png

Codifica dei due ingressi possibili
...

Pasted image 20230617120221.png

Tabella completa
...

Pasted image 20230617120238.png

La macchine a stati finiti sono implementate da reti logiche sequenziali in cui le funzioni logiche e sono reti logiche combinatorie, ma come memorizzare lo stato?
Pasted image 20230617120349.png
Soluzione: scegliamo il periodo del segnale di clock in modo che sia abbastanza grande da assicurare la stabilità dagli output del circuito.

  • usiamo il clock per abilitare la scrittura nei latch (cambio di stato)
  • il clock determina il ritmo dei calcoli delle relative operazioni di memorizzazione: il circuito sequenza viene detto sincrono