Il percorso dei dati e l’unità di controllo
Componenti del percorso dei dati di un processore RISC-V, esecuzione di add, lw, sw e beq, segnali di controllo e perché il ciclo singolo è lento.
Dentro il processore, le istruzioni sono eseguite da un percorso dei dati (datapath): registri, memorie, ALU, multiplexer e i collegamenti tra loro. L’unità di controllo decide, istruzione per istruzione, quali strade aprire. In questa lezione costruiamo il percorso dei dati di un processore RISC-V semplice, che esegue ogni istruzione in un solo ciclo di clock, e vediamo perché questa soluzione è lenta.
I componenti
- Il contatore di programma (PC), un registro di 32 bit.
- La memoria delle istruzioni (IMEM): dato un indirizzo, restituisce l’istruzione.
- Il banco dei registri (REG): 32 registri, con due porte di lettura (per i due operandi) e una di scrittura, tutte utilizzabili nello stesso ciclo.
- Il generatore della costante (IMM): estrae dai campi dell’istruzione la costante e la estende a 32 bit con il segno.
- L’ALU, con un ingresso di controllo che sceglie l’operazione.
- La memoria dei dati (DMEM), per i caricamenti e le memorizzazioni.
- Un sommatore che calcola PC + 4, l’indirizzo dell’istruzione successiva.
- Alcuni multiplexer, che scelgono tra due possibili sorgenti di un dato.

Il percorso di un’istruzione
add x5, x6, x7
- Il PC indirizza la memoria delle istruzioni.
- I campi rs1 = 6 e rs2 = 7 selezionano due registri, letti in parallelo.
- Il multiplexer davanti all’ALU sceglie il secondo registro (non la costante); l’ALU somma.
- La memoria dei dati non è usata; un altro multiplexer sceglie il risultato dell’ALU, che viene scritto nel registro rd = 5.
- Il PC diventa PC + 4.
lw x5, 8(x6): l’ALU somma il registro x6 e la costante 8 (questa volta il multiplexer sceglie la costante) e calcola l’indirizzo; la memoria dei dati legge la parola; il multiplexer finale sceglie il dato letto, che va in x5.
sw x5, 8(x6): lo stesso calcolo dell’indirizzo, poi la memoria scrive il valore di x5; nessun registro viene scritto.
beq x5, x6, etichetta: l’ALU sottrae i due registri e segnala se il risultato è zero; in quel caso il PC riceve PC più la costante (lo spiazzamento del salto) invece di PC + 4. Serve un secondo sommatore e un altro multiplexer sul PC.
L’unità di controllo
L’unità di controllo legge l’opcode (e funct3, funct7) e produce i segnali di controllo: quale operazione fa l’ALU, se il secondo operando è un registro o la costante, se si scrive un registro, se la memoria legge o scrive, da dove viene il dato da scrivere, se il PC salta. In un processore a ciclo singolo è una semplice rete combinatoria, una tabella che a ogni tipo di istruzione associa i valori dei segnali:
| Istruzione | ALU | Secondo operando | Scrive registro | Memoria | Dato scritto |
|---|---|---|---|---|---|
| add | somma | registro | sì | nessuna | ALU |
| addi | somma | costante | sì | nessuna | ALU |
| lw | somma | costante | sì | lettura | memoria |
| sw | somma | costante | no | scrittura | |
| beq | sottrazione | registro | no | nessuna |
Perché il ciclo singolo è lento
In un ciclo di clock deve completarsi l’istruzione più lunga, il caricamento, che attraversa in sequenza memoria delle istruzioni, banco dei registri, ALU, memoria dei dati e di nuovo il banco. Supponiamo ritardi di 200 ps per ciascuna memoria, 100 ps per la lettura dei registri, 150 ps per l’ALU, 50 ps per la scrittura: il ciclo deve durare almeno
ps, cioè circa 1,4 GHz. Una somma, che non usa la memoria dei dati, finirebbe in 500 ps, ma deve aspettare comunque la fine del ciclo.
Le soluzioni sono due. Il multiciclo divide l’esecuzione in passi più brevi e usa per ogni istruzione solo quelli necessari. La pipeline, che vedremo nella prossima lezione, divide il percorso in stadi e li fa lavorare contemporaneamente su istruzioni diverse: è la soluzione di tutti i processori moderni, dai microcontrollori ai server.





