Teoria usata: Porte CMOS e parametri tecnologici dei circuiti integratiNei circuiti integrati digitali (CMOS) i MOSFET si modellano come interruttori: nMOS chiuso se il gate vale 1, pMOS chiuso se il gate vale 0. Una porta CMOS ha una rete di pull-up (PUN, solo pMOS) verso Vdd e una di pull-down (PDN, solo nMOS) verso massa, duali: una è ON e l'altra OFF. NAND: nMOS in serie e pMOS in parallelo; NOR: nMOS in parallelo e pMOS in serie; una porta a $n$ ingressi ha $2n$ transistor. Parametri: fan-in, fan-out, margine di rumore, ritardo di propagazione ($t_{pHL}$, $t_{pLH}$, limita la frequenza di clock), dissipazione di potenza, costo (area di silicio; costi NRE e di produzione).Porte CMOS e parametri tecnologici dei circuiti integrati →, Logica programmabile - ROM, PLA, PAL e FPGAI dispositivi logici programmabili (PLD) hanno strutture logiche configurabili dal costruttore o dall'utente (configurazione $\ne$ programmazione software): ROM ($2^k$ parole da $n$ bit: decoder + OR programmabili), PLA (AND e OR programmabili, termini prodotto condivisi tra le uscite), PAL (AND programmabili, OR fisse, niente condivisione), FPGA (blocchi logici con LUT e flip-flop, interconnessioni e I/O programmabili, memoria di configurazione volatile o no). La programmazione può essere irreversibile (fuse/anti-fuse, mask) o riconfigurabile (SRAM, gate flottante).Logica programmabile - ROM, PLA, PAL e FPGA →, Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chipUna memoria è un insieme di celle (word da più bit) con circuiteria di controllo. Classificazioni: sola lettura (ROM) o lettura/scrittura; ad accesso casuale (RAM), seriale (SAM) o ibrido (Flash); volatile (SRAM, DRAM) o non volatile. Una RAM $2^k\times n$ ha $k$ bit di indirizzo (indipendenti da $n$), $n$ bit dati, read/write e chip select. SRAM: cella bistabile (latch), veloce, senza refresh; DRAM: condensatore, più densa, con refresh. Organizzazione: decoder di riga e colonna (coincident selection), uscite tri-state, array di chip (più chip per più parole, più bit per più linee dati).Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chip →, Registri a scorrimento e contatoriPiù sorgenti per un registro di destinazione si gestiscono con un MUX che sceglie la sorgente (e un encoder se i segnali di controllo sono 1-hot) più il Load. Lo shift register è una catena di FF con uscita di ognuno collegata all'ingresso del successivo: ingresso e uscita seriali, caricamento parallelo (Shift ha priorità su Load), versione bidirezionale con un MUX 4-to-1 per stadio (S1S0: 00 hold, 01 shift left, 10 shift right, 11 load). Usi: conversione serie/parallelo, interfacce, linee di ritardo, generatori pseudo-casuali. Contatori: ripple (asincrono, il clock di ogni FF è l'uscita del precedente, ritardo crescente) e sincrono (stesso clock, più veloce; EN e CO per la cascata).Registri a scorrimento e contatori →, Datapath e unità di controllo - un sistema digitale non programmabileUna cella di registro è un flip-flop con la logica per le microoperazioni; un registro a $n$ bit ha $n$ celle e logica di controllo condivisa. Un sistema programmabile (CPU) ha un'unità di controllo che esegue istruzioni lette da una memoria (PC); in un sistema non programmabile la unità di controllo decide le microoperazioni solo da ingressi e segnali di stato del datapath. Esempio completo: sommare cinque valori consecutivi con start, res, busy; datapath con ACC_REG, OUT_REG, CNT_REG (decrementer, MUX, segnale di stato zero); microoperazioni (op_acc_idle/clr/acc/upd_out, op_cnt_idle/cnt/reload); unità di controllo a 3 stati (ready, acc, init), macchina di Mealy.Datapath e unità di controllo - un sistema digitale non programmabile →, Un semplice microprocessore - istruzioni, ciclo singolo e cicli multipliIstruzioni a 16 bit: opcode (7 bit) + DR, SA, SB/OP (3 bit ciascuno) oppure formato di salto con offset a 6 bit (AD sinistro + AD destro, relativo al PC e con estensione di segno). Insieme di istruzioni load/store (solo LD e ST accedono ai dati): MOVA, INC, ADD, SUB, ..., LDI, ADI, LD, ST, BRZ, BRN, JMP. Nel computer a ciclo singolo (due memorie separate) il decoder combinatorio ricava MB, MD, RW, MW, PL, JB, BC dai bit 15, 14, 13, 9 dell'istruzione e $FS$ dai bit 12–9; il periodo di clock è la somma dei ritardi lungo il cammino peggiore (9,8 ns nell'esempio). Nel computer a cicli multipli (memoria unica) servono IR, registri interni R8–R15 e un decoder sequenziale: fetch (INF) + uno o più stati di esecuzione.Un semplice microprocessore - istruzioni, ciclo singolo e cicli multipli →, Pipeline, hazard e architetture RISC e CISCLa pipeline divide l'esecuzione in stadi separati da registri (IF, DOF, EX, WB) che lavorano in parallelo su istruzioni diverse: la latenza di una istruzione non cambia, il throughput aumenta di un fattore minore del numero di stadi (ritardo dei FF, stadio più lento). Con $k$ stadi e $N$ istruzioni servono $k+N-1$ cicli (riempimento e svuotamento). Gli hazard bloccano la pipeline: di dato (operando non ancora scritto: rimedi NOP, stall, forwarding) e di controllo (salti: bolle, branch prediction). RISC: istruzioni semplici, load/store, formato unico, 32 registri con R0$=0$; CISC: istruzioni complesse, più modi di indirizzamento, formato variabile, controllo microprogrammato.Pipeline, hazard e architetture RISC e CISC →, Cache e memoria virtuale - mappatura e tabelle delle pagineLe memorie sono in gerarchia (SRAM piccole e veloci, DRAM più grandi e lente, dischi enormi e lenti) perché la CPU riutilizza dati vicini nel tempo e nello spazio (località). Cache hit/miss, hit rate; mappatura diretta (indice = bit meno significativi, tag = bit alti), completamente associativa (tag = indirizzo intero, confronto in parallelo con memoria associativa), a $k$ vie (un blocco può stare in $k$ locazioni di un solo insieme). La memoria virtuale espone a ogni programma l'intera memoria con una traduzione indirizzo virtuale $\to$ fisico a pagine (tabella delle pagine con bit valid, dirty, used); il TLB accelera la traduzione; page fault = pagina da recuperare dal disco.Cache e memoria virtuale - mappatura e tabelle delle pagine →, Interfacce di input-output - strobing, handshaking, interrupt e DMALe periferiche (tastiera, disco, display) hanno velocità, codici e funzionamento diversi dalla CPU: servono interfacce che sincronizzano e adattano i dati. Un unico bus collega più periferiche, ognuna con un decoder di indirizzo (memory-mapped: indirizzi comuni con la memoria; isolated: linee di controllo separate). Controllo asincrono con strobing (senza conferma) o handshaking (con conferma, più robusto). Trasmissione seriale (meno linee) o parallela; simplex, half e full duplex; USB a pacchetti con codifica NRZI. Modi di trasferimento: I/O programmato (busy-wait, spreca la CPU), interrupt (priorità: daisy chain, parallela con maschera), DMA (il controllore prende il bus con BR/BG e trasferisce senza CPU).Interfacce di input-output - strobing, handshaking, interrupt e DMA →.
Tecnologia, logica programmabile e memorie
| tema |
domanda |
risposta |
motivo |
| set 2025 (9) |
La struttura di una porta CMOS è basata su: |
una rete di pull-up formata da soli pMOS |
PUN (solo pMOS) verso Vdd e PDN (solo nMOS) verso massa sono duali: per ogni ingresso una è ON e l'altra OFF, mai entrambe (altrimenti ci sarebbe un corto tra alimentazione e massa) |
| set 2025 (10) |
Struttura tipica di una PAL: |
matrice di AND programmabile e, in cascata, matrice di OR fissa |
nel PLA sono programmabili entrambe, nella ROM è fisso l'AND (il decoder) e programmabile l'OR |
| set 2025 (11) |
Per indirizzare una RAM 4×4 sono usati: |
2 decoder 2-to-4 |
16 celle in matrice 4×4: un decoder di riga (2 bit) e uno di colonna (2 bit), la cella è all'intersezione (coincident selection); un solo decoder sarebbe 4-to-16 |
| set 2022 (16), feb 2023 (16) |
Una memoria ROM è: |
un circuito combinatorio |
è una tabella di verità (decoder + OR programmabili), l'uscita dipende solo dall'indirizzo: nessuno stato |
| giu 2022 (16), giu 2026 (16) |
Una memoria ad accesso sequenziale: |
permette di accedere a indirizzi consecutivi più velocemente che a indirizzi arbitrari |
l'opposto dell'accesso casuale (RAM), dove il tempo non dipende dall'indirizzo |
Registri e datapath
| tema |
domanda |
risposta |
motivo |
| set 2025 (12) |
Shift register a 4 bit con caricamento parallelo: se Shift:Q←srQ vale 1 |
i bit scorrono da sinistra a destra, indipendentemente da Load |
lo scorrimento ha priorità sul caricamento: con Shift=1 il valore di Load non conta; sr = shift right, verso il LSB |
| set 2025 (13) |
Nel datapath non programmabile visto a lezione, quale microoperazione memorizza la somma nel registro dedicato? |
op_acc_upd_out |
con out_load =1 si ha OUT←ACC; op_acc_acc aggiorna l'accumulatore, op_acc_clr lo azzera, op_cnt_* riguardano il contatore |
Microprocessore
| tema |
domanda |
risposta |
motivo |
| giu 2022 (17) |
L'instruction register contiene: |
l'istruzione in corso di esecuzione |
l'indirizzo della prossima è nel PC |
| lug 2022 (17) |
Il program counter: (sempre PC+1 / nessuna delle altre / opcode) |
nessuna delle altre |
non è sempre PC+1: nei salti si carica un altro indirizzo (PL=1); l'opcode è nell'istruzione, non nel PC |
| feb 2023 (17) |
L'indirizzo della prossima istruzione è contenuto: |
nel program counter |
per definizione del PC |
| set 2025 (14) |
Nel microprocessore a ciclo singolo gli indirizzi delle parole di memoria dati sono i valori del segnale: |
A (il bus A) |
in LD RD,RA e ST RA,RB l'indirizzo è il contenuto del registro R[SA] sul bus A; DA, AA, BA sono gli indirizzi dei registri |
| giu 2022 (18), set 2022 (17) |
Decodifica microprogrammata: |
permette istruzioni che richiedono più cicli di clock |
il controllo è una macchina a stati (ROM con il microprogramma): un'istruzione complessa è una sequenza di microistruzioni, non un solo ciclo |
Pipeline
| tema |
domanda |
risposta |
motivo |
| giu 2022 (19), feb 2023 (20) |
Sequenza degli stadi di una pipeline a 4 stadi: |
IF, DOF, EX, WB |
fetch, lettura degli operandi, esecuzione, scrittura del risultato |
| lug 2022 (19), feb 2023 (19) |
Senza salti condizionali, una pipeline a 4 stadi esegue: |
al massimo 4 istruzioni per ciclo (in volo) |
a regime ne completa 1 per ciclo, ma 4 sono contemporaneamente in lavorazione (una per stadio), mai di più; non "sempre" perché durante il riempimento sono meno |
| set 2022 (19) |
Con data forwarding, una pipeline a 4 stadi esegue: |
al massimo 4 istruzioni per ciclo |
il forwarding evita i cicli sprecati per i data hazard, ma non aumenta il numero di stadi |
| giu 2026 (19) |
Pipeline a 6 stadi, programma di una sola istruzione: cicli minimi |
6 |
la latenza di una istruzione non cambia: attraversa tutti gli stadi. Con N istruzioni e k stadi servono k+N−1 cicli: 6+1−1=6 |
| set 2025 (15) |
R5←R1+R2; R4←R3; R6←R4+R5: data hazard? |
solo in clk4 |
l'istruzione 3 legge R4 e R5 nel DOF, al ciclo 4. R5 è scritto nella prima metà del ciclo 4 e letto nella seconda: disponibile. R4 è scritto dall'istruzione 2 nel suo WB, al ciclo 5: al ciclo 4 si legge il valore vecchio |
| set 2025 (16) |
Branch prediction in una pipeline RISC: |
permette di evitare i control hazard |
si assume il salto non preso e si annullano le istruzioni già caricate se invece è preso; non riguarda i data hazard e non cambia il clock |
Cache
| tema |
domanda |
risposta |
motivo |
| lug 2022 (20) |
Cache parzialmente associativa a 2 vie, word da 16 bit: in quante locazioni distinte può stare un dato della memoria centrale? |
2⋅1=2 |
l'indirizzo individua un solo insieme, che ha k=2 locazioni (le vie); la larghezza della word non conta |
| set 2022 (20) |
Cache completamente associativa da 32 kbit, dato da 32 bit: in quante locazioni? |
1024 |
qualunque riga va bene: le locazioni sono tutte quelle della cache, 3232⋅1024=1024 |
| giu 2026 (20) |
Cache fatta con una tecnologia con le stesse prestazioni della memoria principale: |
inutile |
la cache serve perché è più veloce della memoria principale (località di accesso): a parità di velocità non si guadagna nulla |
Confronto. Nella cache a mappatura diretta la locazione possibile è una sola (k=1), in quella completamente associativa sono tutte le L righe; quella a k vie sta in mezzo, con k posti nell'insieme individuato dall'indirizzo.
| tema |
domanda |
risposta |
motivo |
| giu 2022 (20) |
L'interrupt è: |
un segnale di input per la CPU e di output per la periferica |
è la periferica a chiedere attenzione alla CPU |
| lug 2022 (18) |
Priorità degli interrupt con daisy chain: (a nessuna delle altre / b la CPU determina la periferica più prioritaria / c due interrupt gestiti in parallelo agli estremi) |
nessuna delle altre |
la priorità è data dalla posizione nella catena (non la determina la CPU) e due interrupt non si gestiscono in parallelo |
| feb 2023 (18) |
Stessa domanda con le tre opzioni in ordine diverso (a la CPU determina, b due in parallelo, c nessuna delle altre) |
nessuna delle altre |
stesse ragioni |
| set 2022 (18) |
Protocolli di strobing e handshaking: (stesso numero di segnali / solo trasferimenti iniziati dalla sorgente / nessuna delle altre) |
nessuna delle altre |
l'handshaking usa un segnale in più (la conferma); entrambi possono essere iniziati dalla sorgente o dal destinatario |
Errori comuni
- Dire che una ROM è sequenziale, o che in una porta CMOS pull-up e pull-down possono essere accese insieme.
- Confondere PAL (AND programmabili, OR fisse) con ROM (AND fisse, OR programmabili) e con PLA (entrambe programmabili).
- Credere che il forwarding o il branch prediction aumentino la frequenza di clock o che una pipeline abbassi la latenza di una istruzione.
- Attribuire alla CPU la scelta della priorità in una daisy chain.
- Dire che l'instruction register contiene l'indirizzo della prossima istruzione (è il PC).
- Contare nel numero di locazioni della cache anche i bit della word.