FormularioCircuiti Digitali: definizioni, teoremi e formule delle note, in ordine di capitolo
In questa pagina 13
I. Sistemi digitali e rappresentazione dell'informazione
Sistemi digitali, segnali binari e livelli di astrazione
Formula (margini di rumore)
Esempio. Con , , e : e .
Proprietà (combinazioni di bit). Un gruppo di bit ha combinazioni distinte, quindi può rappresentare elementi:
bit 1 2 3 4 8 10 16 combinazioni 2 4 8 16 256 1024 65536
Esempio. bit danno combinazioni; per distinguere valori servono bit, perché .
Basi di numerazione e conversioni - binario, ottale ed esadecimale
Definizione (notazione posizionale in base ). In base si usano le cifre . Il valore di una cifra dipende dalla posizione: è il coefficiente di una potenza di . Un numero con cifre vale
Esempio. ; .
Proprietà (cifre ottali ed esadecimali e bit). Poiché e , una cifra ottale corrisponde esattamente a 3 bit e una esadecimale a 4 bit: sono scritture compatte del binario, lunghe un terzo o un quarto.
Esempio. , ; .
Proprietà (conversione binario-esadecimale). Si formano gruppi di 4 bit partendo dalla virgola (verso sinistra per la parte intera, verso destra per la frazionaria), completando con zeri i gruppi estremi, e si sostituisce ogni gruppo con la sua cifra. Esempio: .
Esempio. .
Proprietà (parte intera: divisioni successive per ). Si divide il numero per la base, si annota il resto, si divide il quoziente, e così via fino al quoziente . Il primo resto è la cifra meno significativa: i resti si leggono dal basso verso l'alto. Perché funziona: ogni divisione per stacca la cifra (il resto) e sposta tutte le altre di una posizione, come cancellare l'ultima cifra in decimale.
Esempio: in binario. r ; r ; r ; r ; r ; r ; r ; r ; r ; r . Letti dal basso: ✓ (stesso risultato).
Proprietà (parte frazionaria: moltiplicazioni successive per ). Si moltiplica la parte frazionaria per 2; la parte intera del prodotto (0 o 1) è la prossima cifra dopo la virgola, a partire dalla più significativa; si ripete sulla nuova parte frazionaria finché si ottiene o si hanno abbastanza cifre.
Esempio: . La parte intera: . Frazione: (cifra ); (cifra ); (cifra ), residuo , stop. Quindi .
Codici binari - BCD, ASCII, Unicode, parità e Gray
Definizione (codice BCD). Il BCD (Binary-Coded Decimal) codifica ogni cifra decimale con il suo valore binario su 4 bit. Per scrivere un numero si codifica cifra per cifra:
Esempio. , mentre in binario puro è : le due rappresentazioni sono diverse. Invece coincidono solo perché il numero ha una cifra.
Definizione (codifica UTF-8)
intervallo del code point byte schema dei bit U+0000 – U+007F 1 0xxxxxxxU+0080 – U+07FF 2 110xxxxx 10xxxxxxU+0800 – U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxxU+10000 – U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxI bit
xsono quelli del code point, scritti in binario e distribuiti da sinistra a destra.
Esempio ±: sta in byte. Gli bit di payload sono : i primi () vanno nel primo byte, gli ultimi () nel secondo: . Esempio €: , bit, quindi byte: .
Definizione (bit di parità). Per rilevare errori (non correggerli) si aggiunge un bit scelto in modo che il numero totale di 1 sia pari (parità pari, la più usata) oppure dispari.
Esempio. 1011001 ha quattro 1: con parità pari il bit è (01011001), con parità dispari è (11011001).
Definizione (distanza di Hamming). La distanza di Hamming tra due configurazioni è il numero di bit in cui differiscono. Esempi: e differiscono nei due bit meno significativi, distanza ; e differiscono in due posizioni, distanza ; e , distanza . Non è la differenza algebrica dei numeri.
Esempio. : i due codici differiscono in bit su ().
Definizione (codice Gray). Il codice Gray è un codice in cui due numeri consecutivi hanno distanza di Hamming : passando dal numero al successivo cambia un solo bit.
Esempio. A bit e differiscono in un solo bit.
Formula (conversione binario-Gray). Il bit più significativo si copia; ogni altro bit è lo XOR del bit binario corrispondente con quello alla sua sinistra: . Esempio: : ; ; ; , quindi . La conversione inversa è .
Esempio. (): , , , , quindi .
Numeri con segno, complemento a 2, sottrazione e overflow
Definizione (complemento a 1 e a 2). Dato su bit:
- complemento a 1: , cioè il complemento di ogni bit (si scambiano 0 e 1);
- complemento a 2: , cioè complemento a 1 più 1.
Esempio. su bit: complemento a 1 (bit invertiti), complemento a 2 .
Definizione (numeri con segno in complemento a 2). I positivi sono come in senza segno ( seguito dal modulo); un negativo si rappresenta con il complemento a 2 di , cioè . L'MSB è per tutti i positivi e per tutti i negativi. Con 4 bit:
bit senza segno segno e modulo complemento a 2 0000 0 0 0111 7 7 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15
Esempio. A bit .
Proprietà (intervallo e peso dell'MSB in complemento a 2). In complemento a 2 c'è un solo zero e l'intervallo è asimmetrico: da a (con 8 bit da a ; non è rappresentabile). Il valore si legge dando all'MSB il peso : .
Esempio. A bit l'intervallo è da a ; .
Formula (sottrazione in complemento a 2). , cioè si somma ad il complemento a 2 di : (complemento a 1 di più 1). Esempio: : , il suo complemento a 2 è (), e ✓.
Esempio. A bit, : , riporto scartato.
Proprietà (overflow in complemento a 2). Somma e sottrazione di operandi di segno diverso non hanno mai overflow (il modulo non cresce). Si ha overflow solo se i due addendi (per la sottrazione: e ) hanno lo stesso segno e il risultato ha segno opposto. In termini di riporti: c'è overflow se il riporto che entra nel bit di segno è diverso dal riporto che esce dal bit di segno:
Esempio. A bit : , riporto entrante nel segno , uscente , quindi (il risultato sarebbe ).
II. Algebra di Boole, porte logiche e minimizzazione
Algebra di Boole - assiomi, teoremi e complemento di una funzione
Proprietà (identità fondamentali dell'algebra di Boole). Le identità vengono a coppie duali: la seconda si ottiene dalla prima scambiando AND con OR e con .
nome forma OR forma AND (duale) elemento neutro minimo e massimo idempotenza complemento doppia negazione commutativa associativa distributiva
Esempio. (seconda distributiva e complemento).
Teorema (De Morgan)
Esempio. : si scambiano AND e OR e si negano i letterali.
Teorema (semplificazione: assorbimento, adiacenza e consenso)
nome forma dimostrazione assorbimento assorbimento (dual) duale adiacenza (unificazione) consenso vedi sotto
Esempio. : per entrambi i membri valgono , per valgono .
Proprietà (complemento di una funzione). Il complemento ha la tabella di verità con e scambiati nella colonna dell'uscita. Per ottenerne l'espressione si hanno due vie.
(a) De Morgan. Esempio: (XOR). (XNOR) ✓.
(b) Duale e negazione dei letterali. Si scrive l'espressione duale (scambio di AND/OR e di ) e poi si nega ogni letterale. Stesso esempio: il duale di è ; negando i letterali si ottiene , uguale al risultato di (a) ✓.
Esempio. ha (De Morgan); per si ha e .
Porte logiche, ritardi e porte universali
Definizione (porte AND, OR e NOT). AND (congiunzione, prodotto logico; ): se e solo se tutti gli ingressi valgono 1.
OR (disgiunzione, somma logica; ): se almeno uno degli ingressi vale 1.
NOT (negazione, inverter; ): se .
Esempio. Con , : , , .
Definizione (porte NAND, NOR, XOR e XNOR)
- NAND = NOT(AND): ; vale 0 solo se tutti gli ingressi sono 1.
- NOR = NOT(OR): ; vale 1 solo se tutti gli ingressi sono 0.
- XOR (OR esclusivo, ): vale 1 se gli ingressi sono diversi.
- XNOR: complemento dello XOR; vale 1 se gli ingressi sono uguali.
Esempio. Con , : NAND , NOR , XOR , XNOR .
Definizione (ritardo di una porta). Una porta reale ha un tempo di ritardo (gate delay, tempo di propagazione): il tempo che trascorre da quando cambia almeno un ingresso a quando il cambiamento arriva all'uscita. Dipende dalla tecnologia, dalla tensione di alimentazione, dalla temperatura e dal carico pilotato (fan-out). In genere il ritardo per la commutazione in uscita () è diverso da quello per (), e dipende da quale ingresso commuta; per semplicità si assume spesso .
Esempio. Porta AND con . vale 1 tra e (0 altrove); vale 1 tra e . Il prodotto ideale è 1 tra e (quando entrambi sono 1). Con il ritardo l'uscita sale a e scende a : stessa forma, spostata di .
Proprietà (porte universali: NAND e NOR). Un insieme di porte è universale (o completo) se con esse si realizza ogni funzione booleana. lo è per definizione; NAND da sola lo è, e NOR da sola lo è.
Con NAND (un inverter è una NAND con gli ingressi cortocircuitati):
- NOT: (1 NAND);
- AND: , cioè una NAND seguita da un inverter (2 NAND);
- OR: (De Morgan: due inverter e una NAND, 3 NAND).
Con NOR, dualmente: NOT NOR con ingressi uniti; OR (2 NOR); AND (3 NOR).
Esempio: XOR con quattro NAND. Siano , , , . Verifica (tutte le righe):
Forme canoniche - mintermini, maxtermini, SOP e POS
Definizione (mintermine). Un mintermine (minterm) è un prodotto (AND) in cui compare una e una sola volta ciascuna variabile della funzione, in forma diretta o negata. Ogni mintermine corrisponde a una riga della tabella di verità: vale per la combinazione di valori di quella riga e per tutte le altre. Si costruisce prendendo ciascuna variabile diretta se il suo bit nella riga è 1, negata se è 0. Se la riga è il numero (letto in binario con la prima variabile come bit più significativo) il mintermine si chiama .
Esempio. Con le variabili la riga dà .
Definizione (maxtermine). Il maxtermine (maxterm) è il concetto duale: una somma (OR) che contiene una e una sola volta tutte le variabili, dirette o negate. Ogni maxtermine vale su una sola riga e su tutte le altre. Si costruisce con ciascuna variabile negata se il suo bit nella riga è 1, diretta se è 0 (è l'opposto della regola dei mintermini). Anche i maxtermini sono e corrispondono alle righe della tabella.
Esempio. Con le variabili la riga dà .
Proprietà (mintermine e maxtermine con lo stesso indice). Il mintermine e il maxtermine con lo stesso indice sono uno il complemento dell'altro: . Per : ✓ (De Morgan, Algebra di Boole - assiomi, teoremi e complemento di una funzioneL'algebra di Boole opera su variabili a due valori con AND, OR, NOT. Identità fondamentali (neutro, idempotenza, complemento, commutativa, associativa, distributiva in entrambe le forme), dualità (si scambiano AND/OR e 0/1), De Morgan $\overline{X+Y}=\overline X,\overline Y$, assorbimento $X+XY=X$, $X+\overline XY=X+Y$, adiacenza $XY+X\overline Y=X$, consenso $XY+\overline XZ+YZ=XY+\overline XZ$. Si dimostrano per induzione perfetta (tabella) o algebricamente. Il complemento di una funzione si ottiene con De Morgan o con duale + negazione dei letterali. Costo: numero di letterali o di ingressi delle porte.Algebra di Boole - assiomi, teoremi e complemento di una funzione →).
Esempio. .
Definizione (forme canoniche SOP e POS). Dalla tabella di verità di :
- SOP canonica (Sum Of Products): somma dei mintermini delle righe in cui . In breve .
- POS canonica (Product Of Sums): prodotto dei maxtermini delle righe in cui . In breve .
Esempio. Se vale sulle righe e (cioè ): e .
Mappe di Karnaugh - implicanti e copertura minima
Definizione (mappa di Karnaugh). La mappa ha una cella per ogni riga della tabella di verità, cioè per ogni mintermine (Forme canoniche - mintermini, maxtermini, SOP e POSUn mintermine è un prodotto che contiene una e una sola volta tutte le variabili (dirette o negate) e vale 1 su una sola riga della tabella di verità; un maxtermine è la somma duale e vale 0 su una sola riga; con $n$ variabili ci sono $2^n$ mintermini e $2^n$ maxtermini, e $\overline{m_i}=M_i$. Forma canonica SOP = somma dei mintermini delle righe con $F=1$; POS = prodotto dei maxtermini delle righe con $F=0$. Le forme canoniche si ricavano sempre dalla tabella ma sono ridondanti: servono come punto di partenza per la minimizzazione. SOP e POS si realizzano con circuiti a due livelli.Forme canoniche - mintermini, maxtermini, SOP e POS →). Le variabili sono distribuite su righe e colonne, e le combinazioni sono ordinate in codice Gray (, non ) in modo che due celle vicine differiscano di una sola variabile, cioè siano a distanza di Hamming (Codici binari - BCD, ASCII, Unicode, parità e GrayUn codice binario a $n$ bit distingue $2^n$ elementi. BCD: una cifra decimale ogni 4 bit (1010–1111 non usati; 10 richiede 8 bit, non è il binario del numero). ASCII: 7 bit per 128 caratteri, la cifra ASCII è 011 seguito dal BCD. Unicode/UTF-8: da 1 a 4 byte, compatibile con ASCII. Bit di parità: rileva errori su un numero dispari di bit. Distanza di Hamming = numero di bit diversi. Codice Gray: numeri consecutivi differiscono di un solo bit (sensori di posizione); si costruisce per riflessione o con $g_i=b_i\oplus b_{i+1}$.Codici binari - BCD, ASCII, Unicode, parità e Gray →).
Esempio. A variabili le colonne seguono l'ordine ; le celle () e () sono adiacenti perché differiscono solo per .
Proprietà (gruppo di celle). Estendendo: un gruppo rettangolare di celle (1, 2, 4, 8, 16) formato da 1 elimina variabili; il prodotto che lo rappresenta contiene le sole variabili che non cambiano all'interno del gruppo, dirette se valgono 1, negate se valgono 0.
Esempio. A variabili le celle () hanno costanti e : il gruppo dà .
Definizione (implicante, implicante primo ed essenziale, copertura)
- Implicante: prodotto per cui la funzione vale 1 ogni volta che il prodotto vale 1 (un gruppo di 1).
- Implicante primo (IP): implicante che non è contenuto in nessun implicante più grande (gruppo massimo, non ingrandibile).
- Implicante primo essenziale (IPE): IP che è l'unico a coprire almeno un mintermine della funzione; va incluso in ogni copertura.
- Copertura: insieme di implicanti che copre tutti gli 1. Obiettivo: copertura minima, cioè tutti gli IPE più il minor numero di altri IP che copre i mintermini rimasti.
Esempio. a variabili: gli implicanti primi sono (celle ) e (celle ), entrambi essenziali; la copertura minima è .
Mappe di Karnaugh - POS, condizioni di don't care e parità
Proprietà (POS minima dai gruppi di zeri). La SOP raggruppa gli 1. La POS si ottiene raggruppando gli 0, ossia lavorando sul complemento :
- si marcano gli 0 della mappa e si raggruppano come si farebbe con gli 1 (rettangoli di , IP e IPE), ottenendo una SOP minima di ;
- si complementa con De Morgan: . In pratica, per ogni gruppo si scrive una somma con le variabili che non cambiano, diretta se nel gruppo valgono 0, negata se valgono 1;
- è il prodotto di queste somme.
Esempio. Un gruppo di che per dà diventa nella POS la somma .
Proprietà (condizioni di don't care). Una X si può usare come 1 o come 0, a seconda di ciò che serve per fare gruppi più grandi. Regole:
- una X dentro un gruppo viene trattata come 1, e non è coperta esplicitamente: la funzione ottenuta vale 1 su quella combinazione;
- una X lasciata fuori è trattata come 0;
- non si fa un gruppo che contenga solo X, e non è obbligatorio coprire le X;
- una X non rende un gruppo "essenziale": gli IPE si definiscono rispetto ai soli mintermini a 1.
Esempio. Con una cifra BCD le celle – sono X: il gruppo delle celle dà usando le X di e .
Proprietà (XOR a tre variabili e mappa a scacchiera). La funzione XOR a 3 variabili (disparità, vale 1 se il numero di 1 in ingresso è dispari) è . La sua mappa ha gli 1 a scacchiera:
00 01 11 10 0 0 1 0 1 1 1 0 1 0 Nessun 1 è adiacente a un altro: i mintermini sono a distanza di Hamming 2 l'uno dall'altro. Non esistono gruppi da più di una cella, quindi la SOP minima coincide con la canonica ( prodotti da letterali) e non si semplifica. Conviene usare le porte XOR: con due porte. Lo stesso vale per 4 variabili (16 celle, scacchiera da 8 mintermini dispari) e per la funzione di parità (complemento: se gli 1 sono in numero pari), che si ottiene sostituendo le XOR con XNOR.
Esempio. vale per (tre 1, dispari) e per (due 1, pari).
III. Progettazione di reti combinatorie
Progettazione di una rete combinatoria - approccio gerarchico e porte NAND-NOR
Definizione (circuito combinatorio e sequenziale)
- Un circuito è combinatorio se le sue uscite dipendono solo dal valore presente degli ingressi, non dai valori assunti in passato. Non ha memoria; è formato da porte logiche interconnesse senza percorsi di retroazione (dall'uscita all'ingresso): è un circuito aciclico.
- Un circuito è sequenziale se le uscite dipendono dagli ingressi presenti e dalla loro storia (lo stato). Contiene blocchi combinatori ed elementi di memoria, con almeno un percorso di retroazione che riporta lo stato in ingresso (Elementi di memoria - latch SR, latch D e flip-flop DUn circuito sequenziale ha uscite che dipendono da ingressi e stato (memoria); è un circuito combinatorio con elementi di memoria in retroazione; stato presente = uscite dei FF, stato futuro = ingressi dei FF. Sincrono (clock) o asincrono. Latch SR (NOR): S=1,R=0 set; S=0,R=1 reset; 00 memoria; 11 proibito. Latch D: C=1 trasparente (Q=D), C=0 memoria, sensibile al livello. Flip-flop D edge-triggered = due latch D in cascata (master-slave) con clock opposti: cambia solo sul fronte attivo e non è trasparente. Si assume D flip-flop positive-edge-triggered.Elementi di memoria - latch SR, latch D e flip-flop D →).
Esempio. Un half adder con ingressi dà sempre , (combinatorio); un contatore con lo stesso ingresso può dare uscite diverse a seconda dello stato (sequenziale).
Definizione (circuito di abilitazione). Enabling (abilitazione). Un circuito di abilitazione lascia passare il segnale all'uscita se il segnale di enable EN vale 1, altrimenti forza l'uscita a un valore fisso. Due forme: (se allora ) e (se allora ).
Esempio: comandi di un'auto. Luci, radio e alzacristalli funzionano solo ad auto accesa: il segnale di accensione IS fa da enable per i tre interruttori . Equazioni: , , . Se tutte le uscite sono 0 qualunque sia lo stato degli interruttori (nella tabella di verità le righe con hanno negli ingressi interruttore: sono righe "multi-mintermine", un prodotto che non è un mintermine).
Proprietà (SOP realizzata con sole NAND). SOP NAND-NAND. Una somma di prodotti si realizza con AND seguite da una OR. Applicando due volte la doppia negazione e De Morgan: Ogni è l'uscita di una NAND con gli ingressi del prodotto, e la parte esterna è una NAND con ingressi. Esempio: diventa : tre NAND a 2 ingressi più una NAND a 3 ingressi (più gli inverter per e ). Un prodotto con un solo letterale richiede un inverter al posto della NAND. Le due realizzazioni (AND-OR e NAND-NAND) sono equivalenti per tutte le 16 combinazioni degli ingressi.
Esempio. : una NAND a ingressi per , un inverter per e una NAND finale a ingressi.
Proprietà (POS realizzata con sole NOR). POS NOR-NOR. Dualmente si realizza con NOR di somme e una NOR finale. Esempio: : tre NOR a 2 ingressi più una NOR a 3 ingressi.
Esempio. : due NOR a ingressi e una NOR finale a ingressi.
Decoder, encoder e priority encoder
Definizione (codifica one-hot). Nella codifica one-hot una configurazione a bit contiene uno e un solo 1, in una posizione che identifica il valore. Con bit binari i valori diventano:
binario 000 001 010 011 100 101 110 111 one-hot (8 bit) 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
Esempio. Il valore in one-hot a bit è : vale solo il bit di posizione .
Definizione (decoder -to-). Un decoder -to- ha ingressi e uscite : pone a 1 l'uscita il cui indice è codificato dagli ingressi e a 0 le altre. Se a ogni combinazione degli ingressi corrisponde un'uscita valida, . Esempio: ingresso (cioè ) .
Le uscite di un decoder sono i mintermini degli ingressi: (Forme canoniche - mintermini, maxtermini, SOP e POSUn mintermine è un prodotto che contiene una e una sola volta tutte le variabili (dirette o negate) e vale 1 su una sola riga della tabella di verità; un maxtermine è la somma duale e vale 0 su una sola riga; con $n$ variabili ci sono $2^n$ mintermini e $2^n$ maxtermini, e $\overline{m_i}=M_i$. Forma canonica SOP = somma dei mintermini delle righe con $F=1$; POS = prodotto dei maxtermini delle righe con $F=0$. Le forme canoniche si ricavano sempre dalla tabella ma sono ridondanti: servono come punto di partenza per la minimizzazione. SOP e POS si realizzano con circuiti a due livelli.Forme canoniche - mintermini, maxtermini, SOP e POS →). Quindi si realizza con porte AND a ingressi, ciascuna con la combinazione di ingressi diretti e negati del proprio mintermine.
Esempio. Decoder -to-: con ingresso () le uscite valgono , e .
Proprietà (funzione realizzata con un decoder e una OR). Una funzione in SOP è la somma dei suoi mintermini; il decoder genera tutti i mintermini. Quindi ogni funzione si realizza con un decoder e una porta OR a cui si collegano le uscite dei mintermini della SOP.
Esempio: sommatore completo. Ingressi (addendi e riporto), e : decoder 3-to-8 e due OR a 4 ingressi, , (Sommatori binari - half adder, full adder e ripple carryHalf adder (2 ingressi): $S=X\oplus Y$, $C=XY$. Full adder (3 ingressi, con riporto in ingresso $Z$): $S=X\oplus Y\oplus Z$, $C=XY+XZ+YZ=G+PZ$ con $P=X\oplus Y$, $G=XY$; si realizza con due half adder e una OR. Il ripple carry adder a $n$ bit concatena $n$ full adder: il riporto "ondeggia" dal LSB al MSB, quindi il ritardo cresce linearmente con $n$. È un circuito iterativo (gerarchico e regolare). Il moltiplicatore a 2 bit usa 4 AND e 2 half adder.Sommatori binari - half adder, full adder e ripple carry →).
Definizione (encoder). L'encoder esegue l'operazione inversa del decoder: riceve un segnale 1-hot a bit e produce la codifica binaria a bit. Per l'encoder da ottale a binario con ingressi (un solo 1 alla volta):
Esempio. Con e gli altri ingressi a : , , , cioè .
Definizione (priority encoder). Il priority encoder gestisce ingressi non 1-hot con due modifiche:
- una funzione di priorità: conta solo l'ingresso a 1 con la priorità più alta, gli altri sono ignorati;
- un'uscita V (valid): se almeno un ingresso vale 1, se sono tutti 0 (e allora l'uscita è don't care).
Esempio a 4 ingressi, priorità :
Multiplexer e funzioni logiche realizzate con decoder e multiplexer
Definizione (multiplexer -to-1). Un MUX ha ingressi dati , ingressi di selezione e un'uscita . Il segnale di selezione può essere binario o 1-hot; qui è binario: se vale in binario, allora .
MUX 2-to-1 (): . Se allora , se allora .
MUX 4-to-1 ():
L'equazione generale è : i mintermini degli ingressi di selezione fanno da "porte" per i dati.
Esempio. MUX -to- con : per si ha , per si ha .
Proprietà (funzione di variabili con un MUX -to-1). Una funzione di variabili si realizza con un MUX -to-1: le variabili sono collegate agli ingressi di selezione (rispettando l'ordine dei bit: la variabile più significativa va a ), e agli ingressi dati si applica il valore della tabella di verità, riga per riga: , una costante 0 o 1 (value fixing). Perché funziona: per la riga il MUX seleziona , che è proprio il valore che la funzione deve avere.
Esempio. con un MUX -to- e selezione : , , , .
Proprietà (funzione con un MUX -to-1 e l'ultima variabile come dato). Si può usare un MUX più piccolo, con un ingresso di selezione in meno: si collegano alla selezione solo variabili e agli ingressi dati si applicano le costanti , oppure la variabile rimasta o il suo complemento . Per ogni valore della selezione, le due righe della tabella (con e ) danno una coppia di valori:
ingresso dati 0 0 1 1 0 1 1 0
Esempio. con un MUX 8-to-1 e selezione . Per ogni valore di si guarda la coppia :
IV. VHDL per la logica combinatoria
Introduzione al VHDL - entity, architecture, tipi e livelli di descrizione
Definizione (entity). È la "targa" del blocco: ne dà il nome e definisce l'interfaccia con l'esterno (quali porte, di che direzione e tipo). Non dice che cosa c'è dentro, come il simbolo di un circuito in uno schema. Un blocco deve avere una sola entity.
Esempio. port (a, b : in std_logic; y : out std_logic); dichiara due ingressi e un'uscita da un bit; il ; non va dopo l'ultima porta.
Definizione (architecture). È una descrizione particolare del contenuto di una entity: come si comporta e come opera internamente. Una entity può avere più architecture nello stesso progetto (per esempio una structural e una dataflow); un progetto non può avere più entity per lo stesso blocco.
Esempio. architecture beh of and2 is begin y <= a and b; end beh; descrive l'entity and2: con a='1' e b='1' si ha y='1'.
Definizione (vettori std_logic_vector).
std_logic_vector(n-1 downto 0)ha il bit più significativo a sinistra, di indice ;std_logic_vector(0 to n-1)ha l'indice a sinistra (è il MSB). Un bit si estrae conx(2), una porzione conx(3 downto 1); il concatenamento si scrive&:"10" & "01"vale"1001". I letterali esadecimali si scrivonox"1F". Il tipointegersi usa per parametri (lunghezza dei vettori, indici dei cicli) e si scrive in decimale senza virgolette.
Esempio. Con x : std_logic_vector(3 downto 0) := "1010"; si ha x(3)='1', x(0)='0', x(3 downto 2)="10" e x & "01" vale "101001".
Formula (confronto a 2 bit)
Esempio. Con e : , quindi (infatti ).
VHDL - istruzioni concorrenti, process e testbench
Definizione (assegnazione concorrente).
y <= (a and b) or c;è un'equazione booleana. Ogni volta che cambia un segnale a destra,yviene rivalutato. Con più assegnazioni allo stesso segnale in istruzioni concorrenti si hanno più driver: in simulazione, se i valori sono diversi, il segnale diventa'X'(conflitto); è un errore di progetto.
Esempio. y <= (a and b) or c; con a='1', b='0', c='1' dà y='1'.
Proprietà (when ... else). Le condizioni sono valutate in ordine: se la prima è vera si sceglie il primo valore e le successive non contano. Serve per le priorità e permette decisioni su segnali diversi in condizioni diverse.
Esempio. Con S = "01" la prima condizione è falsa e la seconda vera: Y <= I1.
Proprietà (with ... select). Si valuta una sola espressione di scelta (
S); tutte le scelte hanno la stessa priorità, tutti i valori possibili devono essere coperti da una e una sola scelta ewhen othersè obbligatorio per i valori non elencati. È più semplice delwhen-elseper i circuiti a selezione (multiplexer, decoder, tabelle di verità). Più valori si elencano con|:'1' when "0100" | "1000".
Esempio. Con S = "11" nessuna scelta esplicita corrisponde e vale when others: Y <= I3.
Definizione (lista di sensibilità). Lista di sensibilità (sensitivity list): i segnali al cui cambiamento il process si attiva. Per descrivere un circuito combinatorio deve contenere tutti gli ingressi (in VHDL-2008 si può scrivere
process (all)). Può contenere solo segnali leggibili (ingressi osignalinterni, non uscite). Un process senza lista parte subito all'inizio della simulazione e va avanti ripetendosi, a meno di unwait: è lo schema dei testbench.
Esempio. process (a, b) begin y <= a and b; end process; viene rivalutato a ogni cambiamento di a o di b.
Proprietà (aggiornamento dei segnali in un process). Il valore assegnato a un segnale dentro un process viene aggiornato solo quando il process si sospende (finite le istruzioni o a un
wait). Se lo stesso segnale è assegnato più volte nello stesso passaggio, vale l'ultima assegnazione. Quindiprocess (b) begin a <= b; a <= not b; end process;descrive : un semplice inverter, cioè logica combinatoria, e non un flip-flop né un segnale che alterna.
Esempio. Con b='1', le due assegnazioni a <= b; a <= not b; lasciano a='0': vale l'ultima.
Proprietà (memoria non voluta). Se in un
if(o in uncase) non si specificano tutte le condizioni, il segnale mantiene il valore precedente per quelle non coperte: il sintetizzatore deve introdurre un elemento di memoria (latch). È lo stesso meccanismo con cui si descrive di proposito un latch o un flip-flop; ma in un circuito che deve essere combinatorio è un errore.
Esempio. Numeri primi a 3 bit ():
Definizione (testbench). Il testbench è codice VHDL che simula un circuito: applica segnali in ingresso al circuito da verificare (DUT, device under test) e osserva le uscite. Non si sintetizza: serve solo per la simulazione.
Esempio: funzione maggioranza ( se almeno due ingressi sono 1):
V. Sommatori e sottrattori binari
Sommatori binari - half adder, full adder e ripple carry
Formula (half adder)
Esempio. Con : e , cioè .
Formula (full adder: somma e riporto). La somma vale 1 quando il numero di 1 in ingresso è dispari: è la funzione di disparità (Mappe di Karnaugh - POS, condizioni di don't care e paritàPer la POS minima si raggruppano gli 0 della mappa, si ottiene la SOP minima di $\overline F$ e si scrive $F$ come prodotto di somme (variabile diretta se vale 0 nel gruppo, negata se vale 1). Le condizioni di don't care (X) sono combinazioni di ingresso che non si presentano o la cui uscita è indifferente: si usano come 1 o come 0 a seconda di quel che allarga i gruppi (mai raggruppamenti fatti solo di X). Le funzioni XOR a più variabili (disparità) e XNOR (parità) hanno mappa a scacchiera: non si semplificano con i gruppi.Mappe di Karnaugh - POS, condizioni di don't care e parità →), . Il riporto vale 1 quando almeno due ingressi valgono 1 (funzione maggioranza): (SOP minima: 3 implicanti primi, tutti essenziali).
Esempio. Con : e (); con : e ().
Formula (full adder con propagate e generate). Si pone (propagate) e (generate). Allora
Esempio. Con : , , e .
Definizione (sommatore ripple carry). Per sommare due numeri di bit e si collegano full adder: il riporto in uscita di ciascuno è il riporto in ingresso del successivo, dal LSB (, di solito ) al MSB (). Il riporto si propaga (ripple = ondeggiare) lungo la catena.
Esempio: (). Si procede dal bit 0:
Formula (ritardo del sommatore ripple carry). Ogni full adder può calcolare la propria somma solo quando riceve il riporto dal precedente: i riporti si determinano uno dopo l'altro. Se ogni porta ha ritardo , il riporto attraversa ogni stadio in circa (una AND e una OR). Il ritardo totale cresce linearmente con : circa per l'ultima somma. Il ripple adder è il più semplice e il più lento; per numeri a molti bit si usano circuiti con riporto anticipato (carry look-ahead), non trattati nel corso.
Esempio. Con bit e l'ultima somma arriva dopo circa .
VI. Reti sequenziali: latch, flip-flop e macchine a stati
Elementi di memoria - latch SR, latch D e flip-flop D
Definizione (circuito sequenziale). In un circuito sequenziale le uscite dipendono dagli ingressi presenti e dalla storia passata, riassunta dallo stato. Si realizza collegando ingressi e uscite di una rete combinatoria con uno o più elementi di memoria (per noi i flip-flop), con un percorso di retroazione (feedback): le uscite degli elementi di memoria tornano agli ingressi della rete combinatoria. I circuiti combinatori sono aciclici, quelli sequenziali ciclici.
Esempio. Un contatore a bit con il solo ingresso di clock passa dagli stati : a parità di ingresso l'uscita dipende dallo stato.
Definizione (latch SR). Con l'uscita va a (): set. Con va a (): reset. Con il latch conserva lo stato precedente. Nel funzionamento normale e sono uno il complemento dell'altro.
La combinazione è proibita: porta entrambe le uscite a , violando il requisito che sia il complemento di ; e il vero problema è che, passando da a , non si può prevedere il valore delle uscite (dipende dall'ordine in cui commutano e e dai ritardi delle porte). Nella simulazione ideale con commutazioni simultanee e ritardi uguali l'uscita finirebbe a un valore intermedio tra 0 e 1, non realistico.
Esempio di evoluzione (si parte con ):
Definizione (latch D). Il latch D elimina lo stato proibito con un solo ingresso dato (e il controllo ): internamente e , quindi e non possono valere 1 insieme.
Esempio. Con e si ha ; con il latch conserva qualunque sia .
Definizione (flip-flop master-slave). Un flip-flop si costruisce con due latch D in cascata (master e slave, o primario e secondario) comandati da segnali di controllo opposti: il primo è abilitato quando il clock vale un livello, il secondo quando vale l'altro. Il trigger è il cambiamento che abilita le variazioni dell'uscita.
Esempio. Se quando il clock sale, dopo il fronte ; una variazione successiva di non cambia fino al fronte seguente.
Formula (equazione caratteristica del flip-flop D). Equazione caratteristica: , valutata sul fronte attivo.
Esempio. Con ai tre fronti di salita successivi, vale dopo ciascun fronte.
Temporizzazione dei flip-flop - setup, hold e frequenza massima di clock
Definizione (tempi di setup, hold e propagazione). Si consideri un D flip-flop positive-edge-triggered (Elementi di memoria - latch SR, latch D e flip-flop DUn circuito sequenziale ha uscite che dipendono da ingressi e stato (memoria); è un circuito combinatorio con elementi di memoria in retroazione; stato presente = uscite dei FF, stato futuro = ingressi dei FF. Sincrono (clock) o asincrono. Latch SR (NOR): S=1,R=0 set; S=0,R=1 reset; 00 memoria; 11 proibito. Latch D: C=1 trasparente (Q=D), C=0 memoria, sensibile al livello. Flip-flop D edge-triggered = due latch D in cascata (master-slave) con clock opposti: cambia solo sul fronte attivo e non è trasparente. Si assume D flip-flop positive-edge-triggered.Elementi di memoria - latch SR, latch D e flip-flop D →) con ingresso e fronte di salita del clock all'istante .
- Tempo di setup : durata minima dell'intervallo in cui l'ingresso deve rimanere stabile (al valore desiderato) PRIMA del fronte di clock che provoca il cambiamento dell'uscita. Se cambia troppo tardi, l'uscita del primo latch (master) potrebbe trovarsi a un livello di tensione intermedio quando il suo valore è trasferito al secondo: il dato memorizzato non è affidabile.
- Tempo di hold : durata minima dell'intervallo in cui l'ingresso deve rimanere stabile DOPO il fronte di clock. Se cambia troppo presto dopo il fronte, il master potrebbe ancora essere trasparente e propagare il cambiamento allo slave.
- Tempo di propagazione (o ): intervallo tra il fronte di clock che fa da trigger e l'istante in cui l'uscita comincia a commutare () o si è stabilizzata ().
In sintesi: finestra di stabilità del dato , in cui non deve cambiare; l'uscita è valida dopo .
Esempio. Con ns, ns e fronte a ns, deve restare fermo in ns.
Formula (periodo minimo di clock). Quindi, aggiungendo un margine di sicurezza (slack = "gioco"):
Esempio. ns, ns, ns. Senza margine: ns, MHz. Con ns: ns, MHz.
Formula (vincolo di hold). Le variazioni dell'uscita di un flip-flop non devono arrivare troppo presto a un altro flip-flop (o a se stesso) per non violare il tempo di hold. Con i ritardi minimi del flip-flop e della rete combinatoria:
Esempio. ns, ns, ns: , violazione di ns. Abbassare la frequenza non la cura; servono almeno ns di ritardo in più sul percorso più corto.
Analisi delle reti sequenziali - tabella e diagramma degli stati, Mealy e Moore
Definizione (tabella degli stati). Con flip-flop (variabili di stato) e ingressi la tabella ha righe, con colonne per stato presente e ingressi, per lo stato futuro e le colonne delle uscite. Si costruisce elencando tutte le combinazioni di stato presente e ingressi, calcolando lo stato futuro dalle equazioni di ingresso e l'uscita dall'equazione di uscita. Una forma alternativa, la tabella bidimensionale degli stati, ha una riga per stato e colonne separate per ogni valore dell'ingresso (stato futuro/uscita).
Esempio. Con flip-flop e ingresso la tabella ha righe.
Definizione (modelli di Mealy e di Moore)
- Modello di Mealy: le uscite dipendono dallo stato presente e dagli ingressi. Sul diagramma l'uscita è accanto a ogni freccia (
ingresso/uscita).- Modello di Moore: le uscite dipendono solo dallo stato presente. L'uscita si scrive dentro il cerchio dello stato; sulle frecce c'è solo l'ingresso.
Esempio di conteggio. Un sistema con un ingresso deve portare l'uscita a 1 quando riconosce la sequenza : servono 2 stati in Mealy e 3 stati in Moore (il terzo è lo stato "ho riconosciuto ", che ha l'uscita nel cerchio).
Definizione (stati equivalenti). Due stati sono equivalenti se, per ogni valore dell'ingresso, producono la stessa uscita e portano a stati futuri uguali o equivalenti. Stati equivalenti si possono fondere, ottenendo un circuito più semplice con meno stati e meno flip-flop. La riduzione non porta sempre a un costo minore: il costo dipende anche dalla rete combinatoria, non solo dai flip-flop.
Esempio (Mealy, ingresso , uscita 1 quando passa da 1 a 0):
Sintesi delle reti sequenziali - riconoscitore di sequenza e codifica degli stati
Proprietà (stato futuro di un D flip-flop). Una volta fissata la codifica, il progetto si riduce a due reti combinatorie: una per lo stato futuro, una per l'uscita. Per un D flip-flop lo stato futuro è direttamente l'ingresso .
Esempio. Se la tabella dà come stato futuro (con come variabili di stato), allora e .
Definizione (riconoscitore di sequenza). Un riconoscitore di sequenza rivela che una certa sequenza è comparsa in ingresso, indipendentemente da ciò che è successo prima. Esempio: ingresso , uscita ; riconoscere (le sequenze possono sovrapporsi); quando si è presentata la sequenza e ; altrimenti.
Esempio. Con il riconoscitore di e ingresso si ottiene .
Formula (numero di bit per codificare gli stati). Per rappresentare stati servono bit (). Le scelte possibili sono molte; meno bit (meno flip-flop) non vuol dire sempre costo minore: conta anche la rete combinatoria. L'ottimizzazione della codifica è un problema complesso, risolto con metodi euristici. Si confrontano due codifiche.
Esempio. stati richiedono bit; stati richiedono bit.
VII. VHDL per la logica sequenziale
VHDL - latch, flip-flop e reset sincrono e asincrono
Proprietà (latch D in VHDL). La lista di sensibilità contiene sia sia : con ogni cambio di riattiva il process e si propaga all'uscita (trasparenza).
Esempio. process (D, C) begin if C = '1' then Q <= D; end if; end process; con C='1' e D='1' dà Q='1'; con C='0' Q conserva il valore.
Definizione (fronte di salita in VHDL).
CLK'eventè vero quandoCLKha appena cambiato valore;CLK'event and CLK = '1'identifica il fronte di salita (con'0'si avrebbe un flip-flop negative-edge-triggered). In VHDL moderno si scrive spessorising_edge(CLK)(equivalente a meno dei passaggi da valori non definiti). Il process è sensibile solo aCLK: non compare nella lista, perché un cambio di da solo non deve fare nulla.
Esempio. Se CLK passa da '0' a '1' con D='1', il process con CLK'event and CLK = '1' assegna Q <= '1'; con '0' il fronte attivo sarebbe quello di discesa.
Definizione (reset asincrono). Reset asincrono (agisce subito, in qualunque istante, anche senza fronte di clock).
RSTè nella lista di sensibilità ed è testato per primo:architecture async_reset of dff is begin process (RST, CLK) begin if RST = '1' then -- ha priorità sul clock Q <= '0'; elsif CLK'event and CLK = '1' then Q <= D; end if; end process; end async_reset;
Esempio. Con RST='1' il process si attiva subito e Q va a '0' anche senza fronte di clock.
Definizione (reset sincrono). Reset sincrono (sincronizzato con il clock: ha effetto solo sul fronte attivo; richiede un fronte di clock per essere efficace). La lista contiene solo
CLKeRSTè testato dentro il ramo del fronte:architecture sync_reset of dff is begin process (CLK) begin if CLK'event and CLK = '1' then if RST = '1' then Q <= '0'; else Q <= D; end if; end if; end process; end sync_reset;
Esempio. Con RST='1' tra due fronti di clock Q non cambia; al fronte successivo Q diventa '0'.
Proprietà (flip-flop con load enable). Per un flip-flop che aggiorna lo stato solo quando richiesto si aggiunge una condizione senza
else:if CLK'event and CLK = '1' then if load = '1' then Q <= D; end if; -- se load = '0' Q conserva il valore end if;
Esempio. Con load='0' al fronte di salita Q conserva il valore; con load='1' e D='1' Q diventa '1'.
VHDL - macchine a stati finiti e testbench sequenziale
Definizione (modello a tre process della FSM)
- Registro di stato (parte sequenziale): sul fronte di clock aggiorna
state <= next_state, e il reset porta in uno stato iniziale noto.- Stato futuro (logica combinatoria): calcola
next_statein funzione distatee degli ingressi.- Uscita (logica combinatoria): la calcola in funzione di
state(Moore) oppure distatee ingresso (Mealy).
Esempio. Nel riconoscitore di : il process 1 esegue state <= next_state al fronte di clock, il process 2 calcola next_state con un case state, il process 3 assegna Z.
Definizione (tipo enumerato). Con
typesi definisce un tipo elencando i valori tra parentesi, separati da virgole (enumerazione): serve per segnali con un numero finito di valori, indicati con nomi e non con numeri, per leggibilità. Lo stessostd_logicè un'enumerazione (9 valori). Il sintetizzatore sceglie la codifica binaria degli stati, a meno che non la si imponga (per esempio con costantistd_logic_vector, come nell'esempio del semaforo).
Esempio. type state_type is (S1, S2, S3, S4); crea un tipo con valori simbolici; signal state : state_type; ne dichiara un segnale (il sintetizzatore lo codifica con bit).
VIII. Tecnologie implementative
Porte CMOS e parametri tecnologici dei circuiti integrati
Legge (di Moore). La legge di Moore descrive la crescita esponenziale del numero di transistor per chip (circa un raddoppio ogni due anni), che ha reso possibili microprocessori da miliardi di transistor.
Esempio. Con un raddoppio ogni anni, in anni i transistor per chip diventano volte.
Definizione (modello a interruttore dei MOSFET). Nella trattazione semplificata i MOSFET sono interruttori controllati dal valore logico al gate: se l'interruttore è aperto (OFF) non passa segnale tra source e drain, se è chiuso (ON) passa. Si ignora la fisica del dispositivo e si cattura solo il comportamento logico.
transistor gate gate nMOS OFF (aperto) ON (chiuso) pMOS ON (chiuso) OFF (aperto)
Esempio. Con gate l'nMOS è ON e il pMOS è OFF; con gate l'nMOS è OFF e il pMOS è ON.
Definizione (porta CMOS statica: pull-up e pull-down). Porta generica. È formata da un pull-up network (PUN), fatto di soli pMOS, tra e l'uscita, e da un pull-down network (PDN), fatto di soli nMOS, tra l'uscita e massa. PUN e PDN sono duali: per ogni combinazione degli ingressi uno è ON e l'altro è OFF:
- PUN ON, PDN OFF uscita ;
- PUN OFF, PDN ON uscita .
Esempio. Inverter: con il pMOS è ON e l'nMOS è OFF, quindi ; con il pMOS è OFF e l'nMOS è ON, quindi .
Proprietà (NAND e NOR CMOS a 2 ingressi). NAND a 2 ingressi. PDN: due nMOS in serie (la serie conduce solo se e ); PUN: due pMOS in parallelo (conduce se o ). NOR a 2 ingressi, duale: PDN con due nMOS in parallelo; PUN con due pMOS in serie. Con ingressi :
NAND: pMOS ON NAND: nMOS ON NAND: NOR: pMOS ON NOR: nMOS ON NOR: 0 0 2 0 1 2 0 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 2 0 0 2 0
Esempio. NAND con : la serie degli nMOS è chiusa e il parallelo dei pMOS è aperto, quindi .
Formula (numero di transistor di una porta). Una porta NAND o NOR a ingressi ha transistor ( pMOS e nMOS); un inverter ne ha 2; una AND ( NAND inverter) ne ha . Per questo le AND e le OR costano più delle NAND e NOR, che sono anche più veloci, e i circuiti si realizzano di solito con NAND/NOR (Progettazione di una rete combinatoria - approccio gerarchico e porte NAND-NORUna rete combinatoria ha uscite che dipendono solo dagli ingressi presenti (nessuna memoria, nessuna retroazione); una sequenziale dipende anche dalla storia (stato, memoria, feedback). Progetto: specifiche, tabella di verità, funzione a costo minimo, diagramma logico, verifica. Con molti ingressi si usa l'approccio gerarchico (blocchi e sottoblocchi riusabili; regolarità). Blocchi base: funzioni di una variabile, vettori, enabling. Mappatura tecnologica: in CMOS NAND e NOR sono più compatte, quindi SOP $\to$ NAND-NAND e POS $\to$ NOR-NOR.Progettazione di una rete combinatoria - approccio gerarchico e porte NAND-NOR →).
Esempio d'esame. NAND CMOS a 3 ingressi con : sono accesi i pMOS con gate 0 (quelli di e : 2) e gli nMOS con gate 1 (quello di : 1); poiché la serie degli nMOS non conduce (manca e ), il PDN è aperto, il PUN (parallelo) è chiuso: . Risposta: 2 pMOS e 1 nMOS accesi. In una NAND a 2 ingressi i pMOS sono 2.
Logica programmabile - ROM, PLA, PAL e FPGA
Definizione (ROM ). In una ROM i dati sono memorizzati in modo permanente, anche senza alimentazione (memoria non volatile). Si può solo leggere: si fornisce l'indirizzo e si legge la parola. Una ROM con ingressi di indirizzo e uscite dati contiene parole da bit (sigla ).
Esempio. Con bit di indirizzo e uscite la ROM contiene parole da bit (ROM , cioè byte).
Definizione (PLA). Un PLA è simile a una ROM, ma il decoder è sostituito da una matrice di porte AND programmabili: ciascuna genera un termine prodotto (anche con meno letterali delle variabili di ingresso, quindi in forma semplificata) a partire dagli ingressi, diretti o negati. I termini prodotto sono poi collegati in modo programmabile a porte OR, che sommano. Entrambe le matrici (AND e OR) sono programmabili. A differenza della ROM, il PLA non genera tutti i mintermini, solo un sottoinsieme programmabile, e i termini prodotto possono essere condivisi tra le uscite. Le uscite delle OR possono passare per una porta XOR programmabile, che permette di avere l'uscita diretta o negata.
Esempio. , . Termini prodotto: , , . Il termine è condiviso:
Definizione (PAL). Un PAL ha una matrice di AND programmabile e una matrice di OR fissa. È meno flessibile del PLA (dove entrambe le matrici sono programmabili) ma più semplice, più economico e più veloce; i PAL commerciali hanno almeno 8 ingressi e 8 uscite. Nei PAL i termini prodotto non si possono condividere tra più OR: ogni uscita ha le sue AND. Quindi si ottimizzano le funzioni a due livelli una uscita alla volta, mentre per i PLA si ottimizzano le uscite insieme.
Esempio. Per e un PAL richiede AND (il termine va duplicato), un PLA ne richiede .
Definizione (look-up table). In molte famiglie il blocco logico contiene LUT (Look-Up Table): memorie che, tramite un multiplexer, realizzano la tabella di verità di una funzione di variabili (Multiplexer e funzioni logiche realizzate con decoder e multiplexerIl multiplexer (MUX) $2^n$-to-1 ha $2^n$ ingressi dati, $n$ ingressi di selezione e un'uscita che copia l'ingresso selezionato: $Y=\sum_i m_i(S),I_i$. Si realizza con decoder + AND di enable + OR (costo 22 per il 4-to-1) o direttamente (costo 18). Un MUX $2^n$-to-1 realizza qualunque funzione di $n$ variabili (ingressi dati = colonna della tabella di verità); con un MUX $2^{n-1}$-to-1 si usano le $n-1$ variabili come selezione e gli ingressi dati valgono $0$, $1$, $X$ o $\overline X$ (l'ultima variabile). I MUX a vettori selezionano gruppi di bit.Multiplexer e funzioni logiche realizzate con decoder e multiplexer →). I bit di configurazione fissano i valori agli ingressi dati del MUX.
Esempio. LUT a ingressi con : per legge , cioè .
IX. Registri, contatori e sistemi non programmabili
Registri e microoperazioni
Definizione (load enable). Il clock arriva sempre ai FF; si controlla l'ingresso: un MUX 2-to-1 seleziona per il D tra il dato (se ) e l'uscita del FF stesso (se ):
- : (si carica il dato al fronte di salita);
- : (il registro mantiene il valore).
Esempio. Con il MUX riporta all'ingresso e il flip-flop conserva il valore; con carica il dato .
Definizione (microoperazione di trasferimento). : il contenuto di (sorgente) viene copiato in (destinazione); per definizione cambia la destinazione, non la sorgente. Nel circuito gli bit di uscita di sono collegati agli ingressi di e il segnale di controllo è collegato al di . Un trasferimento è condizionato se avviene solo quando un segnale di controllo vale 1: (prima dei due punti la condizione). Il clock non compare nello statement: si assume che tutto avvenga sul fronte attivo. I trasferimenti simultanei si separano con una virgola: scambia i contenuti al fronte di clock in cui (entrambi leggono i valori vecchi).
Esempio. con e : se al fronte di clock si ha e resta .
Formula (somma e sottrazione condizionate). Somma (), sottrazione (), incremento (), decremento (), complemento. Moltiplicazione e divisione non sono elementari: si ottengono da sequenze di microoperazioni di base. Un sommatore-sottrattore con segnali di controllo (0 somma, 1 sottrazione) e :
Esempio. Con , e : se , ; se , , cioè .
Proprietà (maschere per azzerare, porre a 1 e complementare bit). Operazioni bit a bit (bitwise): ogni bit del registro è una variabile binaria. Operazioni: NOT, AND, OR, XOR. (Il simbolo può essere somma aritmetica oppure OR logico: lo dice il contesto; dentro una funzione booleana è un OR.) Servono anche per modificare alcuni bit di un registro usando una maschera:
scopo operazione maschera azzerare (clear) alcuni bit AND sui bit da azzerare, sugli altri porre a 1 (set) alcuni bit OR sui bit da porre a 1, sugli altri complementare alcuni bit XOR sui bit da complementare, sugli altri
Esempio. : AND con dà ; OR con dà ; XOR con dà .
Definizione (microoperazioni di scorrimento). 4. Scorrimento (shift). Spostano lateralmente i bit di un registro. Shift a sinistra (): i bit si spostano verso il MSB; il bit uscente è quello più a sinistra del sorgente, il bit entrante nella posizione più a destra del destinazione. Shift a destra (): i bit si spostano verso il LSB; bit uscente a destra, bit entrante a sinistra. Qui il bit entrante è e il bit uscente è scartato. equivale a moltiplicare per (se non c'è overflow), a dividere per (senza segno).
Esempio. Con (): () e (il bit uscente è scartato).
Registri a scorrimento e contatori
Formula (trasferimento da più sorgenti). Un registro di destinazione può ricevere il contenuto da più sorgenti (altri registri, uscite di logica combinatoria). Con un trasferimento condizionato scritto in RTL come un if-then-else controllato da due segnali :
Esempio. Con e si ha ; con si ha (priorità a ).
Definizione (registro a scorrimento). Un registro a scorrimento è una catena di flip-flop D collegati in cascata (l'uscita di ciascuno è l'ingresso del successivo), tutti con lo stesso clock; a ogni fronte attivo i bit scorrono lateralmente di una posizione (a destra, a sinistra o in entrambe le direzioni).
Esempio. Shift register a 4 bit con che porta la sequenza (un bit per ciclo, partenza da ); il bit entra in e avanza verso :
Proprietà (scorrimento e caricamento parallelo). In RTL: ( entra in , ogni , cioè verso il MSB) e ; l'hold è implicito quando nessuna condizione è soddisfatta. Lo scorrimento ha priorità sul caricamento (vale con indipendentemente da ).
Esempio. Con , e (anche se ) si ha .
Definizione (contatore). Un contatore è un registro che, in risposta a una serie di ingressi (il clock), attraversa una sequenza predefinita di stati (numeri binari, sequenza casuale...), fornendo in uscita un conteggio. Un contatore binario a bit conta da a . Due categorie: ripple (asincrono) e sincrono.
Esempio. Un contatore binario a bit conta da a e poi riparte da .
Definizione (contatore ripple). Una catena di FF D le cui uscite danno il numero binario. Il FF del LSB riceve il clock di sistema; ogni FF successivo riceve come clock l'uscita negata del precedente; l'ingresso di ogni FF è collegato alla sua uscita negata : al fronte di salita del proprio clock ogni FF cambia stato (toggle). Un reset asincrono azzera il registro.
Esempio. Da il fronte di clock di sistema porta il contatore a ; da a .
Definizione (contatore sincrono binario). Contatore sincrono binario seriale. Ingresso (abilita il conteggio) e uscita (carry output, permette di costruire contatori a più stadi). Con , a ogni fronte il valore memorizzato è incrementato di 1. Ogni XOR somma 0 o 1 al bit memorizzato (il bit commuta quando tutti i bit inferiori valgono 1), ogni AND propaga il segnale allo stadio successivo. Il ritardo di propagazione è quello di 4 AND per e di 3 AND più una XOR per .
Esempio. Con e il fronte successivo porta : tutti i bit inferiori valgono 1 e fanno commutare anche il bit .
Datapath e unità di controllo - un sistema digitale non programmabile
Definizione (cella di registro). Una cella di registro è un flip-flop corredato di logica combinatoria per svolgere microoperazioni sul contenuto del registro. Un registro a bit si realizza con copie della cella; se le microoperazioni vanno eseguite su più bit, parte della logica può essere condivisa tra le celle (shared logic).
Esempio. Registro che realizza tre microoperazioni logiche con il dato ( bit), ciascuna attivata da un segnale di controllo: Si assume che al massimo uno dei tre segnali valga 1; se valgono tutti 0 il registro resta invariato (hold). A ogni fronte attivo il contenuto di è sovrascritto con il risultato; le operazioni sono bitwise, quindi basta progettare un bit.
Formula (ingresso del flip-flop con tre microoperazioni logiche)
Esempio. Con e gli altri segnali a : , , e quindi .
Definizione (sistemi programmabili e non programmabili)
- In un sistema programmabile gli ingressi della unità di controllo portano un flusso di istruzioni (un programma). Ogni istruzione attiva una sequenza di microoperazioni nel datapath e specifica quali, con quali dati e dove memorizzare i risultati. Il programma sta in una memoria (RAM o ROM) e la unità di controllo contiene un registro, il program counter (PC), che indica l'indirizzo dell'istruzione da prelevare nel ciclo successivo. Esempio: la CPU (Un semplice microprocessore - datapath, ALU e register fileUn calcolatore semplificato ma completo ha datapath, unità di controllo e memoria. Il datapath contiene un register file ($2^m$ registri da $n$ bit, due porte di lettura A e B e una di scrittura), un MUX B (registro o costante), una unità funzionale = ALU + shifter e un MUX D (risultato o dato dalla memoria); segnala V, C, N, Z. La ALU unisce un circuito aritmetico (sommatore con logica di ingresso per $B$: $0$, $B$, $\overline B$, tutti 1, più $C_{in}$) e uno logico (AND, OR, XOR, NOT) tramite un MUX. Le 15 microoperazioni si scelgono con un codice FS a 4 bit; la control word del datapath è di 16 bit (DA, AA, BA, MB, FS, MD, RW).Un semplice microprocessore - datapath, ALU e register file →).
- In un sistema non programmabile la unità di controllo non esegue istruzioni: determina le microoperazioni solo in base ai segnali di ingresso e ai segnali di stato del datapath. Svolge un unico compito; è una macchina a stati in cui aggiornamento dello stato e calcolo delle uscite sono realizzati con logica fissa (come i chip degli orologi digitali).
Esempio. Il sistema che somma cinque valori svolge un solo compito (non programmabile); una CPU esegue istruzioni indirizzate dal program counter (programmabile).
Definizione (microoperazione). Una microoperazione (op) è un insieme di operazioni elementari su più segnali per realizzare una certa azione: ogni op è una combinazione dei segnali di controllo.
Esempio. La op op_acc_acc ha acc_load=1, acc_clear=0, out_load=0 e realizza .
X. Memorie
Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chip
Formula (capacità di una RAM). La capacità è il numero di word per il numero di bit per word: bit. Gli indirizzi vanno da a . Il numero di bit di indirizzo è indipendente da .
Esempio. RAM con linee dati da bit e indirizzo da bit: word da bit, capacità bit bit KB. Alla locazione di indirizzo può esserci il dato 10101011 10001001. Quando una word viene letta o scritta la memoria opera in parallelo su tutti i bit della parola come su un'unità (è la quantità minima indirizzabile).
Proprietà (array di chip di memoria). Se la memoria richiesta è più grande di un chip si costruisce un array.
- Più parole: per ottenere ( bit di indirizzo) da quattro chip ( bit di indirizzo) si applicano 2 bit di indirizzo aggiuntivi a un decoder 2-to-4 che abilita (Chip Select) uno dei 4 chip. In lettura sul bus da 8 bit ci sono i dati del chip selezionato, mentre le uscite dei chip non selezionati sono in alta impedenza; in scrittura i dati vanno al chip con CS attivo.
- Più bit per parola: per si collegano due chip con gli stessi indirizzi: il numero di bit di indirizzo (16) resta quello del singolo chip e il numero di bit in uscita raddoppia.
Esempio. Per con chip : servono chip e bit di indirizzo per il decoder 2-to-4 dei Chip Select.
XI. Un semplice microprocessore e pipeline
Un semplice microprocessore - datapath, ALU e register file
Definizione (register file). Un datapath ha tipicamente più di quattro registri (32 o più sono comuni): si realizzano con un register file, memoria veloce che permette un accesso simultaneo a più locazioni. Contiene bit, dove = numero di bit di indirizzo e = bit di ogni locazione. Qui ( registri ) e . Ha:
- due porte di lettura con indirizzi e (uscite bus A e bus B);
- una porta di scrittura con indirizzo , dato D data e abilitazione (write).
Esempio. Con e il register file contiene bit: registri da bit.
Definizione (ALU). La ALU (Arithmetic Logic Unit, Unità aritmetico-logica (ALU)Ruolo dell'ALU, ingressi, uscite e flag; ALU a 1 bit con AND, OR e sommatore selezionati da un multiplexer; estensione a 32 bit, sottrazione, confronto set-less-than e rilevazione dello zero e dell'overflow; tabella dei segnali di controllo; unità di moltiplicazione e virgola mobile.Unità aritmetico-logica (ALU) →) è un circuito combinatorio che esegue un insieme di operazioni aritmetiche e logiche di base, scelte da linee di selezione ( = selezione del modo, = operazione, più ). Si progetta dividendola in parte aritmetica e parte logica, poi collegate da un MUX 2-to-1 comandato da ( aritmetica, logica).
Esempio. Con e codice la ALU esegue l'AND: e danno .
Formula (parte aritmetica della ALU). Un sommatore ( full adder in cascata, Sommatori binari - half adder, full adder e ripple carryHalf adder (2 ingressi): $S=X\oplus Y$, $C=XY$. Full adder (3 ingressi, con riporto in ingresso $Z$): $S=X\oplus Y\oplus Z$, $C=XY+XZ+YZ=G+PZ$ con $P=X\oplus Y$, $G=XY$; si realizza con due half adder e una OR. Il ripple carry adder a $n$ bit concatena $n$ full adder: il riporto "ondeggia" dal LSB al MSB, quindi il ritardo cresce linearmente con $n$. È un circuito iterativo (gerarchico e regolare). Il moltiplicatore a 2 bit usa 4 AND e 2 half adder.Sommatori binari - half adder, full adder e ripple carry →) con una logica di ingresso su che produce e con riporto in ingresso : .
Esempio. Con , , e : , cioè .
Definizione (bit di stato N, Z, C e V). Dal risultato della unità funzionale: = bit di segno (MSB del risultato); se tutti i bit del risultato sono 0 (NOR di tutti i bit); = riporto in uscita dal sommatore; = overflow = riporto entrante nel bit di segno XOR riporto uscente (Numeri con segno, complemento a 2, sottrazione e overflowSottrazione senza segno: se $M\ge N$ nessun prestito in uscita, altrimenti il risultato $M-N+2^n$ è scorretto. Complemento a 1: $2^n-1-N$ (inversione bit a bit); complemento a 2: $2^n-N=$ complemento a 1 $+1$. Numeri con segno: segno e modulo (due zeri, intervallo simmetrico) oppure complemento a 2 (un solo zero, da $-2^{n-1}$ a $2^{n-1}-1$, MSB di peso $-2^{n-1}$). In complemento a 2 somma e sottrazione sono la stessa addizione: $A-B=A+\overline B+1$, riporto in uscita scartato. Overflow: senza segno $\Leftrightarrow C_{out}=1$ nella somma; con segno $\Leftrightarrow C_{in,MSB}\ne C_{out,MSB}$ (due operandi dello stesso segno con risultato di segno opposto).Numeri con segno, complemento a 2, sottrazione e overflow →). Esempio a 8 bit: dà (150, letto come ) con , , , ; dà con , , , .
Esempio. A bit : , , , (overflow in complemento a 2).
Proprietà (codici FS dell'unità funzionale). L'unità funzionale = ALU + shifter, con un MUX F che sceglie il risultato (: 0 ALU, 1 shifter). Le microoperazioni possibili sono 15, quindi bastano codici FS a 4 bit invece di far pilotare tutti i 7 segnali di controllo (, , ) alla unità di controllo: si aggiunge una piccola rete combinatoria che ricava i 7 segnali dal codice .
Esempio. Le microoperazioni si codificano con bit di invece di pilotare direttamente segnali di controllo.
Un semplice microprocessore - istruzioni, ciclo singolo e cicli multipli
Definizione (istruzione, instruction set e ISA). Un'istruzione è un insieme di bit che specifica completamente un'operazione in modo sintetico; l'instruction set è l'insieme di tutte le istruzioni; l'ISA ne è il catalogo con la descrizione completa. Si vedono due strutture di controllo: ciclo singolo e cicli multipli.
Esempio. Con un opcode di bit l'instruction set può avere fino a istruzioni, ciascuna di bit.
Definizione (formato delle istruzioni a 16 bit). I bit sono divisi in campi. L'opcode specifica l'operazione; gli operandi (registri o memoria) sono indicati in modo esplicito (bit dedicati) o implicito (inclusi nell'opcode). Tre formati, a 16 bit:
formato bit 15–9 bit 8–6 bit 5–3 bit 2–0 Registro opcode (7) DR (registro destinazione) SA (sorgente A) SB (sorgente B) Immediato opcode (7) DR SA OP (operando immediato) Salto (jump/branch) opcode (7) AD sinistra SA AD destra
Esempio. Nel formato registro bit; con , e i tre campi valgono , e .
Formula (periodo di clock del ciclo singolo). Il periodo di clock deve essere almeno la somma dei ritardi di tutti i blocchi lungo il cammino critico, perché in un ciclo il segnale attraversa tutti in sequenza. Esempio con ritardi tipici:
blocco PC memoria istruzioni register file (lettura) MUX B unità funzionale o memoria dati MUX D register file (scrittura) ritardo (ns) 0,2 4 0,6 0,2 4 0,2 0,6 Somma ns MHz. Anche l'istruzione più semplice (un ADD) impiega l'intero periodo, dimensionato sulla più lenta (LD). Inoltre servono memorie separate per istruzioni e dati (nello stesso ciclo si accede a entrambe), cosa costosa: le due limitazioni si superano con il computer a cicli multipli, e le prestazioni con la pipeline (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 →).
Esempio. Con ritardo totale ns si ha MHz.
Pipeline, hazard e architetture RISC e CISC
Definizione (latenza e throughput)
- Latenza: durata totale di una istruzione: non cambia (anzi cresce un poco) con la pipeline.
- Throughput (resa): numero di istruzioni completate nell'unità di tempo: aumenta di un fattore circa uguale al numero di stadi.
Esempio. Con stadi da ns la latenza è ns, ma a regime si completa una istruzione ogni ns (throughput GHz).
Formula (cicli per eseguire istruzioni). Nei primi cicli non tutti gli stadi sono attivi (la pipeline si riempie, filling), analogamente alla fine (si svuota, emptying). Per istruzioni servono cicli: con 7 istruzioni su 4 stadi, cicli. Un programma di una sola istruzione su una pipeline a 6 stadi richiede 6 cicli (la latenza). A regime si completa 1 istruzione per ciclo, con al più istruzioni in volo contemporaneamente (una per stadio): una pipeline a 4 stadi esegue "al massimo 4 istruzioni per ciclo" nel senso che 4 sono contemporaneamente in lavorazione, mai di più (e meno durante il riempimento).
Esempio. stadi e istruzioni: cicli.
Definizione (architettura RISC). Un RISC (Reduced Instruction Set Computer) è ottimizzato per istruzioni semplici: hardware più semplice e veloce; ai compilatori è lasciato il compito di realizzare operazioni complesse combinando istruzioni semplici. Caratteristiche:
- accesso alla memoria load/store;
- modi di indirizzamento semplici e limitati (quattro): registro, registro indiretto (solo per load/store), immediato, relativo (branch e jump);
- unica lunghezza di istruzione;
- istruzioni con operazioni elementari, eseguibili con un solo passaggio nella pipeline.
Esempio. Con 32 registri bastano bit per indicare un registro; con un opcode di bit si hanno operazioni.
Definizione (hazard). Un hazard è un problema, nei dati o nel controllo, che impedisce di eseguire normalmente l'istruzione successiva nel ciclo successivo.
- Hazard di dato: l'istruzione successiva cerca di usare il risultato di un'istruzione precedente o un operando prima che sia disponibile.
- Hazard di controllo: il programma salta a una posizione diversa dalla successiva, ma la pipeline ha già caricato le istruzioni seguenti.
Esempio. Se l'istruzione 3 legge nel ciclo 4 ma l'istruzione 2 lo scrive solo nel ciclo 5, c'è un hazard di dato.
Proprietà (rimedi ai data hazard). Rimedi.
- NOP inseriti dal compilatore: istruzioni "nessuna operazione" tra le due per ritardare l'esecuzione della seconda.
- Stall hardware (pipeline stalled, bubble): l'hardware stesso inserisce NOP e blocca IF/DOF finché il dato non è pronto. Una logica confronta i registri sorgente e destinazione delle istruzioni in volo (segnale DHS, Data Hazard Stall): si sprecano cicli di clock.
- Forwarding (data forwarding): se il risultato che serve è già calcolato (all'uscita dello stadio EX) lo si manda avanti direttamente allo stadio che lo richiede, senza aspettare la scrittura: nessun ciclo sprecato.
Esempio. Nel caso di lo stall ritarda l'istruzione 3 di un ciclo (DOF al ciclo 5, quando è stato scritto); con il forwarding non si perde nessun ciclo.
Proprietà (hazard di controllo e predizione dei salti). In un salto (branch) il PC cambia, ma nei due cicli successivi la pipeline ha già caricato istruzioni che non dovrebbero essere eseguite. Soluzioni: inserire NOP in attesa del salto (si perdono due cicli di clock) o prevedere il salto: si assume che il salto non sia preso e si prosegue; se invece è preso, si annullano le istruzioni caricate disabilitando (nessuna scrittura nei registri), (nessun salto) e (nessuna scrittura in memoria): è come inserire una bolla (bubble) nella pipeline. In sintesi: il branch prediction evita (o riduce) le perdite dovute ai control hazard, non i data hazard, e non aumenta la frequenza del clock.
Esempio. Inserendo NOP si perdono cicli per ogni salto; con la predizione "salto non preso" non si perde nessun ciclo se il salto non è preso, altrimenti le istruzioni caricate diventano bolle.
Definizione (architettura CISC). Un CISC (Complex Instruction Set Computer) ha istruzioni complesse, molto difficili o impossibili da eseguire con un unico ciclo o un solo passaggio nella pipeline. Caratteristiche: più modi di indirizzamento, istruzioni di lunghezza variabile, istruzioni di salto più sofisticate.
Esempio. Il load con doppio accesso alla memoria è tipico di un CISC: non entra in un solo passaggio della pipeline.
XII. Input-output e gerarchia di memoria
Interfacce di input-output - strobing, handshaking, interrupt e DMA
Definizione (codifica NRZI). Codifica NRZI (Non-Return-to-Zero Inverted), per ottenere fronti utili alla sincronizzazione: uno 0 si trasmette con una transizione del livello (da 1 a 0 o da 0 a 1); un 1 con il livello invariato. Se ci sono troppi 1 consecutivi (più di 6) non ci sono transizioni: dopo sei 1 si inserisce uno 0 (bit stuffing). Esempio, con livello iniziale alto: i bit danno i livelli (si inverte a ogni 0); la sequenza viene trasmessa come .
Esempio. Con livello iniziale alto, i bit danno i livelli : il livello si inverte solo a ogni .
Definizione (I/O programmato). Il trasferimento è iniziato e controllato da un'istruzione del programma. La CPU controlla costantemente lo stato della periferica in un ciclo di istruzioni, il busy-wait, e non può fare altro; la periferica è di solito molto più lenta, quindi si sprecano molti cicli macchina. Sistema semplice ma inefficiente.
Esempio. Periferica a byte/s: un byte ogni ms. Se la CPU impiega ns per controllare lo stato, tra un trasferimento e il successivo lo controlla volte, quasi tutte inutilmente.
Definizione (interrupt). Il trasferimento non è più monitorato dalla CPU ma da un'interfaccia che genera un segnale, l'interrupt, quando i dati sono disponibili. Nel frattempo la CPU fa lavoro utile; quando arriva l'interrupt, interrompe l'operazione corrente, esegue un programma di servizio per processare i dati e ritorna al compito iniziale. L'interrupt è un segnale di uscita della periferica e di ingresso della CPU.
Esempio. Per la periferica da byte/s (un byte ogni ms) la CPU viene interrotta volte al secondo, invece di eseguire controlli di stato per ogni byte.
Definizione (priorità con daisy chain)
- Daisy chain: la priorità è determinata dall'ordine nella catena di collegamento delle periferiche; il primo dispositivo che ha generato l'interrupt trasmette il suo vector address e viene servito dalla CPU. Le periferiche si propagano il permesso lungo la catena, per cui la CPU non determina la periferica a priorità più alta (lo fa la catena) e due interrupt non possono essere gestiti in parallelo.
Esempio. Se sono in catena e richiedono insieme un interrupt, viene servita per prima , la più vicina alla CPU.
Definizione (DMA). Spesso i dati di una periferica vanno trasferiti in memoria; un trasferimento massiccio da una periferica veloce (un disco) tiene occupata la CPU a lungo. Lasciando che la periferica trasferisca i dati in memoria senza coinvolgere la CPU, il sistema è molto più efficiente: è il DMA. Il controllore DMA prende il controllo dei bus e gestisce direttamente il trasferimento dal dispositivo di I/O alla memoria.
La CPU supporta il controllore con due segnali:
- Bus Request (BR): il controllore DMA chiede il permesso di usare il bus;
- Bus Granted (BG): la CPU concede il bus e si impegna a non usarlo.
Esempio. Per trasferire word il registro indirizzo del controllore DMA viene incrementato volte e al termine viene generato un solo interrupt.
Cache e memoria virtuale - mappatura e tabelle delle pagine
Formula (tempo medio di accesso alla memoria). Perché la gerarchia sia efficace la CPU deve trovare i dati necessari il più possibile nella cache: cache hit = il dato è nella cache; hit rate = percentuale di hit. Altrimenti si ha un cache miss (miss rate) e i dati vanno recuperati in blocco dalle altre memorie. Un modello standard del tempo medio di accesso è : per ns, miss rate e penalità ns si ha ns.
Esempio. Con ns, miss rate e penalità ns: ns.
Definizione (cache a mappatura diretta). Gruppi di locazioni contigue della memoria principale vengono mappate direttamente in una locazione della cache; i bit più significativi dell'indirizzo identificano il gruppo trasferito (tag). Semplice, ma l'hit rate non è molto elevato.
Esempio. Cache da word ( bit), indirizzo di cache a bit; memoria principale da word ( KB), indirizzo di word a bit. Gli ultimi tre bit dell'indirizzo di word sono l'indice della cache (la locazione), i bit più significativi sono il tag, memorizzato con il dato. All'accesso: si usa l'indice per scegliere la riga, si confronta il tag memorizzato con il tag dell'indirizzo: se uguali (e la riga è valida) hit, altrimenti miss: i dati sono trasferiti dalla memoria alla cache sostituendo la riga.
Definizione (cache completamente associativa). L'associazione tra locazioni della memoria principale e della cache è arbitraria: qualunque dato può stare in qualunque riga. Il tag è l'indirizzo completo. Prestazioni ottime ma complessità alta: confrontare in sequenza tutti i tag non è fattibile, quindi si usa una memoria associativa che esegue il confronto in parallelo: la scrittura è convenzionale, la lettura è in parallelo; il segnale di match di ciascuna riga pilota la sua word line e l'OR di tutti i match è il segnale di hit/miss.
Esempio. Con indirizzi di word a bit il tag è l'indirizzo completo ( bit) e viene confrontato in parallelo con quello di tutte le righe.
Definizione (cache associativa a vie). È una via di mezzo. Per ogni valore dei bit di ordine minore (indice dell'insieme) c'è un numero limitato di locazioni disponibili (per esempio ): la logica di match si semplifica molto. Una word può trovarsi solo in locazioni della cache (le vie dell'unico insieme che le corrisponde); buffer three-state collegano l'uscita appropriata al bus. Quindi in una cache a vie un dato proveniente dalla memoria centrale può essere immagazzinato in 2 locazioni distinte.
Esempio. Cache da righe a vie: insiemi, quindi insieme ; l'indirizzo va nell'insieme con tag .
Definizione (tabella delle pagine). La mappatura tra pagine virtuali e pagine fisiche è nella tabella delle pagine. Ogni riga ha, oltre al numero di pagina fisica (frame):
- valid: se , la pagina non corrisponde a codice o dati effettivi in memoria;
- dirty: se , c'è stata almeno una scrittura (la pagina andrà copiata su disco prima di essere sostituita);
- used: serve a gestire la sostituzione delle pagine.
Esempio di traduzione. Pagine da KB: l'indirizzo virtuale a 16 bit è diviso in numero di pagina (4 bit alti) e offset (12 bit); la traduzione sostituisce il numero di pagina con il frame, lasciando invariato l'offset. Tabella: pagina 0 frame 2 (valid); pagina 1: non valida; pagina 2 frame 7 (valid, dirty); pagina 3 frame 5 (valid).
Definizione (page fault). Il page fault si ha quando la pagina richiesta non è in memoria (bit valid a 0): deve essere recuperata dal disco, con un tempo enormemente superiore a quello di una DRAM, per cui il sistema operativo gestisce il fault e sostituisce una pagina (se dirty la salva prima).
Esempio. Con la tabella dell'esempio, l'accesso a un indirizzo della pagina (valid ) provoca un page fault: la pagina va caricata dal disco.
XIII. Verifica dei propri risultati
Verificare reti logiche e automi con Python
Definizione (SOPform e POSform).
SOPformePOSformcalcolano la forma minima da un elenco di mintermini (e, facoltativamente, di don't care), come farebbe una mappa di Karnaugh (Mappe di Karnaugh - implicanti e copertura minimaLa mappa di Karnaugh è la tabella di verità disposta in una griglia con righe e colonne in codice Gray, così che celle adiacenti (anche tra bordi opposti) differiscano in una sola variabile. Si raggruppano gli 1 in rettangoli di $2^k$ celle: ogni gruppo elimina $k$ variabili e dà un prodotto. Implicante primo = gruppo massimo; essenziale = unico a coprire un mintermine; la copertura minima contiene tutti gli essenziali più il minimo di altri primi (può non essere unica). Efficace fino a 4 variabili.Mappe di Karnaugh - implicanti e copertura minima →). Le variabili si elencano dalla più significativa alla meno significativa:from sympy import symbols from sympy.logic.boolalg import SOPform, POSform d, c, b, a = symbols('d c b a') # d = MSB, a = LSB print(SOPform([d, c, b, a], minterms=[0, 1, 2, 3, 4, 5, 7, 14, 15])) print(POSform([d, c, b, a], minterms=[0, 1, 2, 3, 4, 5, 7, 14, 15])) print(SOPform([d, c, b, a], minterms=[1, 2, 3, 5, 7], dontcares=list(range(10, 16))))
Esempio. SOPform([b, a], minterms=[1, 2, 3]) restituisce a | b, cioè .
Definizione (equivalenza di due espressioni con sympy). Due espressioni sono equivalenti se non esiste una combinazione di ingressi in cui differiscono:
from sympy import symbols, Not, Equivalent from sympy.logic.inference import satisfiable x, y, z = symbols('x y z') e1 = (x & y) | (~x & z) | (y & z) e2 = (x & y) | (~x & z) print(satisfiable(Not(Equivalent(e1, e2)))) # False -> equivalenti (teorema del consenso)
Esempio. satisfiable(Not(Equivalent(x | (x & y), x))) restituisce False: (assorbimento).
Proprietà (conversioni, distanza di Hamming e codice Gray in Python). Per le conversioni tra basi bastano
bin(),oct(),hex(),int(s, base)eformat(n, '08b');bin(a ^ b).count('1')dà la distanza di Hamming;n ^ (n >> 1)converte in codice Gray (Basi di numerazione e conversioni - binario, ottale ed esadecimaleUn numero in base $r$ vale $\sum a_i r^i$ (cifre $a_i\in{0,\dots,r-1}$). Conversioni: base $r\to$ decimale con la somma pesata; decimale $\to$ base $r$ per divisioni successive (parte intera, resti letti dal basso) e moltiplicazioni successive (parte frazionaria, parti intere lette dall'alto); binario $\leftrightarrow$ ottale/esadecimale a gruppi di 3/4 bit. Somma, differenza e prodotto binari seguono le regole decimali con cifre 0 e 1; la differenza ha prestiti, il prodotto somma prodotti parziali traslati.Basi di numerazione e conversioni - binario, ottale ed esadecimale →, Codici binari - BCD, ASCII, Unicode, parità e GrayUn codice binario a $n$ bit distingue $2^n$ elementi. BCD: una cifra decimale ogni 4 bit (1010–1111 non usati; 10 richiede 8 bit, non è il binario del numero). ASCII: 7 bit per 128 caratteri, la cifra ASCII è 011 seguito dal BCD. Unicode/UTF-8: da 1 a 4 byte, compatibile con ASCII. Bit di parità: rileva errori su un numero dispari di bit. Distanza di Hamming = numero di bit diversi. Codice Gray: numeri consecutivi differiscono di un solo bit (sensori di posizione); si costruisce per riflessione o con $g_i=b_i\oplus b_{i+1}$.Codici binari - BCD, ASCII, Unicode, parità e Gray →).
Esempio. bin(0b0110 ^ 0b1101).count('1') dà 3 (distanza di Hamming) e format(6 ^ (6 >> 1), '04b') dà '0101' (il Gray di ).