Formulario - elettronica dei sistemi digitali
In questa pagina 8
Fondamenti dei sistemi digitali
Note: Segnali digitali, livelli logici e margini di rumoreUn segnale digitale assume un insieme finito di valori (di solito due: bit, tipicamente 0 V e V_DD); con N bit si distinguono 2^N livelli. Il valore logico di un'uscita è garantito sopra V_OH (uno) e sotto V_OL (zero); un ingresso è letto come uno sopra V_IH e come zero sotto V_IL, con intervalli di ingresso più larghi di quelli di uscita. I margini di rumore sono NM_H = V_OH − V_IH e NM_L = V_IL − V_OL. La caratteristica di trasferimento statica (VTC) ha la soglia logica V_M (V_out = V_in); V_IL e V_IH sono i punti a pendenza −1. La proprietà rigenerativa (pendenza alta nella zona di transizione, guadagno maggiore di 1) ripulisce il segnale a ogni stadio ed è legata alla bistabilità della coppia di inverter in retroazione. Altre figure di merito: fan-in, fan-out, tempi di propagazione, potenza, costo.Segnali digitali, livelli logici e margini di rumore → · Rappresentazione dei numeri e dell'informazioneUn'informazione digitale è una stringa di bit. Numeri senza segno: N bit rappresentano 0…2^N − 1; in esadecimale ogni cifra raggruppa 4 bit. Numeri con segno: complemento a due (range −2^(N−1)…2^(N−1) − 1; si nega invertendo i bit e sommando 1; il bit più significativo è il segno e l'estensione di segno lo replica). Il BCD codifica ogni cifra decimale con 4 bit (0…9) e si ottiene dal binario con l'algoritmo double dabble (shift a sinistra, e +3 a ogni gruppo maggiore di 4 prima dello shift). Il codice Gray cambia un solo bit tra valori consecutivi. I numeri frazionari si trattano in virgola fissa (4 bit di parte frazionaria = multipli di 1/16), i caratteri in ASCII, gli errori con un bit di parità.Rappresentazione dei numeri e dell'informazione →
- bit distinguono livelli; risoluzione su un'escursione : (16 bit su 1 V: V).
- Uscita valida: (0) o (1); ingresso letto come 0 sotto e come 1 sopra , con . Margini: , .
- VTCcaratteristica di trasferimento statica V_out(V_in): soglia logica dove ; e dove la pendenza è . Rigenerazione: guadagno nella transizione.
- Senza segno: . Complemento a due: , range ; negazione = inverti i bit ; ; overflow se due operandi dello stesso segno danno segno opposto.
- BCD: 4 bit per cifra; double dabble: prima di ogni shift a sinistra ogni gruppo riceve . Gray: . Virgola fissa: intero.
Grafico interattivo: VTC di un inverter bilanciato (V_DD = 2,5 V, modello a λ = 0) con i punti a pendenza −1: V_IL = 1,04 V (uscita 2,29 V) e V_IH = 1,46 V (uscita 0,21 V); con V_OH = V_DD = 2,5 V e V_OL = 0 i margini sono NM_L = 1,04 − 0 = 1,04 V e NM_H = 2,5 − 1,46 = 1,04 V
Il transistor MOS
- Canale per (n-MOS, ) e (p-MOS, ). Effetto body: .
- Con , (, ): spento per ; lineare () ; saturazione () .
- Resistenza equivalente in commutazione: ; , (, le capacità crescono con ).
Grafico interattivo: Famiglia di caratteristiche I_D(V_DS) (µA) dello stesso n-MOS (k'_n Z = 345 µA/V², V_T = 0,4 V, λ = 0) per V_GS = 2,5; 2; 1,5; 1 V: ogni curva sale lungo la parabola tratteggiata I_D = ½·345·V_DS² (confine V_DS = V_GS − V_T; a sinistra zona lineare) e poi resta piatta in saturazione, a 761, 442, 209 e 62 µA
L'invertitore CMOS
Note: Invertitore CMOS - caratteristica di trasferimento staticaL'inverter CMOS ha un p-MOS verso V_DD e un n-MOS verso massa con gli ingressi collegati: V_OH = V_DD, V_OL = 0, nessun cammino diretto in continua (consumo statico nullo). La VTC ha cinque regioni (n-MOS off; n sat/p lin; entrambi sat in V_M; n lin/p sat; p off). Con entrambi in saturazione e λ = 0: V_M = (V_Tn + r(V_DD + V_Tp))/(1 + r) con r = √(|k'_p|Z_p/(k'_n Z_n)). Bilanciamento statico (V_M = V_DD/2 con V_Tn = |V_Tp|): Z_p/Z_n = k'_n/|k'_p| (circa 3,8). Scalare Z_n e Z_p dello stesso fattore lascia V_M invariata e moltiplica la corrente di picco; aumentare Z_p/Z_n alza V_M, V_IL e V_IH; V_M segue V_DD. Margini NM_L = V_IL, NM_H = V_DD − V_IH (circa 1 V a 2,5 V).Invertitore CMOS - caratteristica di trasferimento statica → · Invertitore CMOS - ritardo di propagazioneIn commutazione l'inverter è un circuito RC del primo ordine: il tempo di propagazione al 50% vale t_p = ln2·τ = 0,69·R·C. Con R_n e R_p resistenze equivalenti e C_L = C_int + C_ext (intrinseca = capacità di drain di n-MOS e p-MOS; estrinseca = gate delle porte pilotate e interconnessioni): t_pHL = 0,69 R_n C_L, t_pLH = 0,69 R_p C_L. Con Z_p = βZ_n, R_p/R_n = r/β (r = R_p0/R_n0 ≈ 2,4): il bilanciamento dinamico (t_pHL = t_pLH) richiede β = r, mentre il minimo del ritardo medio con carico a gate si ha per β = √r. Moltiplicando Z_n e Z_p per S: t_p = t_p0 (1 + C_ext/(S C_int,ref)): a carico estrinseco dominante raddoppiare le larghezze dimezza il ritardo; con carico intrinseco dominante non cambia (autocaricamento).Invertitore CMOS - ritardo di propagazione → · Catene di inverter e buffer CMOSPer pilotare un carico grande C_L partendo da un ingresso piccolo C_in si usa una catena di N inverter di dimensioni crescenti (buffer). Il ritardo totale è t_p = t_p0 Σ (1 + f_j/γ), con f_j = C_gin,j+1/C_gin,j il fan-out dello stadio j e γ = C_int/C_g (circa 1-2). Il minimo, a N fissato, si ha con lo stesso fan-out in tutti gli stadi, f = F^(1/N) con F = C_L/C_in (ogni stadio è la media geometrica dei vicini e ha lo stesso ritardo): t_p = N t_p0 (1 + F^(1/N)/γ). Il numero ottimo di stadi si trova da ln f = 1 + γ/f (f = e per γ = 0, f ≈ 3,6 per γ = 1, N = ln F / ln f). Un anello di N inverter (N dispari, N ≥ 3) oscilla con periodo 2N t_p.Catene di inverter e buffer CMOS → · Consumo di potenza nei circuiti CMOSNella logica CMOS il consumo è quasi tutto dinamico. Per ogni carica di C_L da 0 a V_DD l'alimentazione eroga E_DD = C_L V_DD²; metà (½C_L V_DD²) viene immagazzinata nella capacità e metà dissipata nel p-MOS, indipendentemente dal valore di R; nella scarica l'energia immagazzinata è dissipata nell'n-MOS e dall'alimentazione non si assorbe nulla. La potenza media è P = α C_L V_DD² f (α = probabilità di una transizione 0→1 per periodo; per un inverter che commuta a ogni ciclo α = 1; con probabilità di uno p₁ all'uscita α = p₁(1−p₁) se i valori successivi sono indipendenti). Non dipende dalle dimensioni dei transistor (solo da C_L), scala col quadrato di V_DD (dimezzare V_DD: potenza ÷4) ma abbassare V_DD rallenta il circuito. Si aggiungono la corrente di corto circuito (ingressi lenti) e le correnti di perdita.Consumo di potenza nei circuiti CMOS →
- , , consumo statico nullo. Entrambi in saturazione (): , . Bilanciamento (, ): . Margini: , .
Grafico interattivo: VTC con le cinque regioni (Z_n = 3, Z_p = 11,5, λ = 0): sotto 0,4 V n-MOS spento e uscita 2,5 V; da 0,4 a 1,25 V n saturo e p lineare, l'uscita scende fino a 1,65 V; in V_M = 1,25 V entrambi saturi e l'uscita cade da 1,65 a 0,85 V; da 1,25 a 2,1 V n lineare e p saturo; oltre 2,1 V p spento e uscita 0
- Ritardo al 50%: ; , , . Con e : ; bilanciamento dinamico , minimo del ritardo medio con carico a gate .
- Scala : , (con carico intrinseco dominante non serve).
Grafico interattivo: Tensione di uscita (V) dell'inverter bilanciato (R = 6,5 kΩ, C_L = 23,42 fF, τ = RC_L = 152 ps, V_DD = 2,5 V) dopo la commutazione dell'ingresso a t = 0, tempo in ps: la salita (carica da 0) e la discesa (scarica da V_DD) passano per il 50% di V_DD nello stesso istante t_p = 0,69τ = 105 ps
Grafico interattivo: Ritardo medio t_p (ps) di un inverter con carico a gate in funzione di β = Z_p/Z_n (r = 2,42, C_w = 0): minimo per β = √r = 1,56 (23,8 ps); β = 2,42 (bilanciamento dinamico) dà 24,9 ps
- Buffer di inverter: , , -. Minimo con fan-out uguale: , , ; ottimo da . Anello di inverter ( dispari): periodo .
Grafico interattivo: Ritardo t_p (ps) di un buffer in funzione del numero N di stadi, per F = C_L/C_in = 64, γ = 1,6, t_p0 = 15,4 ps e fan-out uguale in ogni stadio: 630, 184, 161, 170, 187 ps per N = 1…5, minimo a N = 3 con f = 4 (la curva unisce i valori interi: N non intero non ha significato)
- Potenza dinamica: per carica (metà immagazzinata, metà dissipata nel p-MOS); , = probabilità di transizione (). Non dipende da ; scala con .
Grafico interattivo: Potenza dinamica P = C_L·V_DD²·f (µW) in funzione della frequenza f (MHz) per C_L = 50 fF e α = 1: retta di pendenza 0,3125 µW/MHz a V_DD = 2,5 V (31,25 µW a 100 MHz, 312,5 µW a 1 GHz) e quattro volte più bassa a V_DD = 1,25 V (7,8 µW a 100 MHz)
Porte logiche CMOS e processo di fabbricazione
Note: Porte logiche CMOS - struttura statica complementare e dimensionamentoUna porta CMOS statica complementare ha una rete di pull-down (PDN, n-MOS) verso massa e una di pull-up (PUN, p-MOS) verso V_DD, duali tra loro: serie ↔ parallelo. La PDN conduce quando la funzione f degli ingressi vale 1 e porta l'uscita a 0, quindi F = NOT f (le porte a uno stadio sono invertenti). Serie di n-MOS = AND, parallelo = OR; i p-MOS (chiusi con ingresso basso) fanno l'opposto. Escursione completa, nessun consumo statico, ritardo da R e C di uscita. Dimensionamento: si parte dall'inverter di riferimento (Z_n = 1, Z_p = r ≈ 2,4) e si scala ogni transistor del numero di transistor della serie peggiore a cui appartiene, così che la resistenza nel caso peggiore uguagli quella dell'inverter (NAND2: Z_n = 2, Z_p = r; NOR2: Z_n = 1, Z_p = 2r). Per un obiettivo R_pd = R*: Z_n = m R_n0/R* con m transistor in serie nel cammino peggiore. Per minimizzare la capacità di uscita si collegano all'uscita meno drain possibile.Porte logiche CMOS - struttura statica complementare e dimensionamento → · Porte logiche CMOS - ritardo di Elmore, fan-in e consumoIl ritardo di una porta dipende dalla configurazione degli ingressi: si calcola il caso peggiore (un solo cammino conduttivo, il più resistivo) e il caso migliore. Per una rete RC con transistor in serie si usa il ritardo di Elmore: t = 0,69 Σ_k C_k · R_k, con R_k la resistenza totale tra il nodo k e il generatore (massa o V_DD) lungo il cammino e C_k la capacità del nodo. Per NAND2 con R_n = R_p: t_pLH (caso peggiore) = 0,69 R_p C, t_pHL = 0,69·2R_n C, quindi t_pHL = 2 t_pLH; per NOR2 è l'opposto. Una NOR a N ingressi (tutti i transistor uguali, nodi interni trascurati): t_pLH = 0,69 R_p C N(N+1), t_pHL = 0,69 R_n C (N+1): il ritardo cresce col quadrato del fan-in, perciò si evitano fan-in maggiori di 4. Rimedi: dimensionamento progressivo (transistor più grandi dal lato opposto all'uscita), riordino degli ingressi (il più tardivo vicino all'uscita), cascata di porte con meno ingressi, buffer. La potenza dinamica dipende dalla probabilità di commutazione.Porte logiche CMOS - ritardo di Elmore, fan-in e consumo → · Processo di fabbricazione CMOS, layout e parassitiUn circuito integrato CMOS si realizza su un wafer di silicio con una sequenza di passi fotolitografici: ogni maschera ottica riporta la geometria planare di uno strato (layer) e permette di sviluppare in modo selettivo il fotoresist, che protegge le zone non da attaccare o da drogare. Ordine: regioni attive e trincee di isolamento (STI), impianto delle well, deposizione e sagomatura del polisilicio (gate), impianto di source/drain (n+ e p+, il polisilicio si droga insieme), contatti e via, piste metalliche. Il progettista descrive il circuito con il layout (una maschera per layer) nel rispetto delle regole di layout (spessore, spaziatura, sovrapposizione), verificate dal DRC. Gli elementi parassiti sono resistenze (R = R_□·L/W), capacità (area più bordo, C = C_A·A + C_b·P) e transistor bipolari; le interconnessioni lunghe hanno ritardo ≈ 0,38 R C (rete distribuita). Il package deve avere basse parassite, robustezza, smaltimento del calore e costo basso.Processo di fabbricazione CMOS, layout e parassiti → · Logica pseudo-nMOS e logiche a caricoNella logica pseudo-nMOS (a rapporto, ratioed) la PUN della CMOS complementare è sostituita da un solo p-MOS con gate a massa, sempre acceso, che fa da carico per la PDN a n-MOS. Così servono N+1 transistor invece di 2N e la capacità di ingresso è minore, ma l'uscita bassa non è 0: V_OL si ricava uguagliando la corrente dell'n-MOS (zona lineare) a quella del p-MOS (saturazione), ed esiste potenza statica quando l'uscita è bassa (P = V_DD·I). V_OH = V_DD. Per V_OL piccola serve Z_n ≫ Z_p; il ritardo di salita è lento (carica solo il p-MOS debole: t_pLH = 0,69 R_p C_L), quello di discesa è più veloce (t_pHL ≈ 0,69 R_n C_L). Lo stesso schema (carichi p-MOS a massa) si ritrova nelle ROM a NOR.Logica pseudo-nMOS e logiche a carico → · Logica a pass-transistor e gate di trasmissioneNella logica a pass-transistor gli ingressi pilotano sia i gate sia i terminali di source/drain di una rete di interruttori (N transistor per N ingressi, nessun consumo statico, alcune funzioni, come AND, MUX e XOR, richiedono pochi transistor). Gli n-MOS trasmettono bene gli 0 ma male gli 1 (V_DD − V_Tn, con effetto body: circa 1,8 V da 2,5 V), i p-MOS al contrario (V_Tp in modulo per lo 0): il livello degradato non è rigenerato e può far condurre un inverter successivo (consumo statico). Il gate di trasmissione (n-MOS e p-MOS in parallelo, con G e nG complementari) trasmette bene entrambi i livelli, con resistenza R_n‖R_p quasi costante, ma costa due transistor e raddoppia le capacità. Una catena di n pass-transistor ha ritardo ∝ n² (Elmore, 0,69 R C n(n+1)/2): si inseriscono buffer ogni m = 1,7√(t_buf/(R_eq C)) stadi.Logica a pass-transistor e gate di trasmissione → · Logiche dinamiche - precarica e valutazioneNelle logiche dinamiche l'uscita non è sempre collegata a V_DD o a massa: il valore è conservato come carica su un nodo capacitivo in alta impedenza. Una porta dinamica ha un p-MOS di precarica e un n-MOS di valutazione pilotati dal clock e una sola rete di pull-down (N + 2 transistor): con Clk = 0 l'uscita è precaricata a V_DD, con Clk = 1 la PDN la scarica se conduce. Vantaggi: escursione piena (V_OL = 0), nessun consumo statico, nessun contrasto, capacità di ingresso ridotta, commutazioni più veloci; svantaggi: gli ingressi devono essere stabili in valutazione, la carica si perde per perdite (serve un refresh minimo di clock), la condivisione di carica con i nodi interni può abbassare l'uscita, e le porte non sono direttamente cascabili (si risolve con la logica domino, inverter in uscita, solo funzioni non invertenti).Logiche dinamiche - precarica e valutazione →
- Porta complementare: PDN (n-MOS) e PUN (p-MOS) duali (serie parallelo), , transistor, nessun cammino -massa. Dimensionamento: con = transistor del cammino serie peggiore (NAND2: , ; NOR2: , ); con : .
- Elmore: ; n-MOS in serie . NAND2 (): (caso peggiore); NOR2 il contrario. Fan-in (nodi interni trascurati): NOR , (NAND scambiato): quadratico, evitare fan-in .
Grafico interattivo: t_pLH (ps) di una NOR a N ingressi (R_p = 10 kΩ, C = 2 fF, nodi interni trascurati) in funzione del fan-in N: 13,8·N(N+1) cresce in modo quadratico, 83 ps per N = 2, 276 ps per N = 4 (3,3 volte), 994 ps per N = 8 (12 volte)
- Processo: , ; linea distribuita ; dalle dimensioni del layout.
- Pseudo-nMOS ( transistor, p-MOS con gate a massa sempre acceso): , , potenza statica a uscita bassa, lento.
- Pass-transistor: n-MOS trasmette bene lo 0 e l'1 degradato (con effetto body); p-MOS il contrario; gate di trasmissione np trasmette entrambi. Catena di : ; buffer ogni .
- Dinamica: transistor, precarica , valutazione; charge sharing ; non cascabili senza inverter (logica domino).
Elementi di memoria
Note: Latch, registri e parametri temporaliUn circuito sequenziale ha uno stato memorizzato in due modi: retroazione positiva (due inverter in anello, bistabile, i latch statici) o immagazzinamento di carica (circuiti dinamici). Un latch è sensibile al livello del clock (trasparente quando il clock è attivo, memorizza quando non lo è), un registro (flip-flop) è sensibile al fronte e si realizza con due latch sulle fasi opposte (master-slave). Il latch SR a porte NOR/NAND non ammette la combinazione S = R = 1 perché passando da lì alla memoria lo stato finale è imprevedibile. Parametri temporali del registro: ritardo clock-uscita t_c-q, tempo di setup t_su (dato stabile prima del fronte), tempo di hold t_hold (dato stabile dopo il fronte). Periodo minimo: T_min = t_c-q + t_p,logic(max) + t_su; vincolo di hold: t_cd,reg + t_cd,logic > t_hold. La pipeline spezza la logica con registri per aumentare la frequenza (a spese della latenza).Latch, registri e parametri temporali → · Registri dinamici, C2MOS, TSPC e registri a scorrimentoI registri dinamici memorizzano il bit come carica su un nodo capacitivo in alta impedenza: meno transistor e commutazioni più rapide dei registri statici, ma il dato si perde (serve un clock minimo) e il master-slave con gate di trasmissione è sensibile alla sovrapposizione dei clock (race). Il registro C2MOS (clocked CMOS) usa inverter con transistor di clock in serie: è insensibile alla sovrapposizione dei clock (0-0 e 1-1) se i fronti sono ripidi, perché durante la sovrapposizione ciascuno stadio può solo caricare o solo scaricare il nodo, mai propagare. Il TSPC usa una sola fase di clock (nessun clock invertito) e permette di inglobare logica nei latch. Un registro a scorrimento è una cascata di registri D: a ogni fronte il dato avanza di una posizione (conversione serie-parallelo, ritardi, FIFO); il collegamento diretto richiede t_c-q > t_hold.Registri dinamici, C2MOS, TSPC e registri a scorrimento → · Memorie a semiconduttore - struttura a matrice, decoder e ROMLe memorie a semiconduttore si classificano in lettura/scrittura (SRAM, DRAM: volatili) e sola lettura (ROM a maschera, PROM, EPROM, EEPROM, Flash: non volatili); l'accesso è casuale o non casuale (FIFO, registri a scorrimento, CAM). La struttura è a matrice di celle: una word line (WL) seleziona una riga attraverso il decoder di riga (N indirizzi → 2^N WL), una bit line (BL) porta il dato alla colonna scelta dal decoder/multiplexer di colonna e dal sense amplifier. La ROM a NOR ha per ogni bit line un p-MOS di carico e n-MOS dove il bit è 0 (con WL alta tirano la BL a massa): compatta e veloce; la ROM a NAND ha serie di n-MOS ed è molto più piccola ma più lenta. Ritardo di una WL: R del polisilicio × C dei gate (Elmore); di una BL: C dei drain con la R dei transistor o del carico.Memorie a semiconduttore - struttura a matrice, decoder e ROM → · Memorie non volatili - gate flottante, EPROM, EEPROM e FlashLe memorie non volatili conservano il dato senza alimentazione. La PROM a fusibili (o antifusibili) si programma una volta interrompendo (o creando) un collegamento. Le memorie riprogrammabili usano il transistor a gate flottante: un gate di polisilicio isolato tra il canale e il gate di controllo; la carica (elettroni) intrappolata sul gate flottante aumenta la soglia vista dal gate di controllo, così il transistor programmato resta spento a tutte le tensioni di lettura (V_T,prog > V_DD). EPROM: programmazione per iniezione di portatori caldi, cancellazione collettiva con raggi UV. EEPROM (transistor FLOTOX, effetto tunnel Fowler-Nordheim attraverso un ossido sottile): cancellazione elettrica della singola cella, ma due transistor per cella (area quasi doppia). Flash: variante dell'EEPROM con una sola cella-transistor e cancellazione a blocchi o settori, struttura NOR o NAND.Memorie non volatili - gate flottante, EPROM, EEPROM e Flash → · SRAM e DRAMSRAM e DRAM sono memorie volatili ad accesso casuale. La cella SRAM a 6 transistor è un latch di due inverter (M1-M4) con due n-MOS di accesso (M5, M6) pilotati dalla word line: uscita differenziale, veloce, grande. Lettura: BL e BL̄ precaricate, l'n-MOS driver abbassa leggermente il lato che memorizza 0 (il transistor driver deve essere più forte di quello di accesso, così il nodo non supera la soglia degli inverter); scrittura: una BL forzata a 0 porta il nodo sotto la soglia logica degli inverter in retroazione positiva, che poi si ribaltano. La DRAM a 1 transistor ha un n-MOS di accesso e una capacità di storage C_S: scrittura caricando C_S dalla BL (si perde V_T: bootstrap della WL), lettura per ridistribuzione di carica con la BL precaricata, ΔV = C_S/(C_BL + C_S)(V_X − V_PRE) ≈ 100-250 mV, distruttiva: servono sense amplifier per ogni BL e refresh periodico. Celle DRAM a 3 transistor: lettura non distruttiva.SRAM e DRAM →
- Latch positivo: ; registro = due latch opposti (master-slave). Latch SR: memoria, , , proibito.
- Parametri: , (stabile prima del fronte), (stabile dopo). Frequenza: , . Hold: (non dipende da ). Pipeline: frequenza maggiore, latenza maggiore.
- Registri dinamici: carica su nodo in alta impedenza; CMOS insensibile alla sovrapposizione dei clock, TSPC con una sola fase; shift register: il dato avanza di una posizione per fronte.
- Matrice: indirizzi di riga WL; ROM NOR (veloce, pseudo-nMOS) e NAND (compatta, lenta, WL non selezionate alte). Gate flottante: ; EPROM cancellata con UV, EEPROM per cella (Fowler-Nordheim), Flash a blocchi.
- SRAM 6T: lettura con driver più forte dell'accesso, scrittura con accesso più forte del pull-up. DRAM 1T: lettura per ridistribuzione di carica , distruttiva, con refresh.
Blocchi funzionali dei sistemi digitali
Note: Blocchi logici di un microprocessore - ALU, bus e logica tri-stateUn microprocessore semplice è formato da un'unità di controllo (decodifica le istruzioni e abilita gli altri blocchi), una ALU (operazioni aritmetiche e logiche), la memoria e i registri, collegati da bus (linee condivise unidirezionali o bidirezionali). La ALU combina un sommatore con un'unità logica e un multiplexer di selezione dell'operazione: la sottrazione è A + B̄ + 1 (XOR su B e riporto in ingresso a 1), le flag (zero, riporto, segno, overflow) descrivono il risultato. Un bus è una linea pilotata da più sorgenti: per evitare conflitti ogni uscita collegata è tri-state (il segnale enable la mette in alta impedenza) oppure open-drain (solo PDN: ciascuna può imporre 0, serve un pull-up per l'1).Blocchi logici di un microprocessore - ALU, bus e logica tri-state → · Sommatori - full adder e ripple-carryLa somma di due bit con riporto in ingresso è realizzata dal full adder: S = A ⊕ B ⊕ C_in, C_out = AB + BC_in + AC_in. Con generate G = AB, propagate P = A ⊕ B (e delete D = Ā B̄) si scrive C_out = G + P·C_in e S = P ⊕ C_in: G e P non dipendono dal riporto in ingresso (fase di set-up), solo C_out ed S ne dipendono. Il sommatore ripple-carry collega N full adder in cascata: il riporto attraversa gli stadi uno dopo l'altro, nel caso peggiore t_add = (N−1) t_carry + t_sum (lineare in N). Il ritardo effettivo dipende dagli operandi: un generate o un delete azzera la catena, un propagate la prolunga; per operandi uguali bit a bit vale t_carry + t_sum.Sommatori - full adder e ripple-carry → · Sommatori veloci - carry-bypass, carry-select e square-rootIl ripple-carry ha ritardo lineare in N. Il carry-bypass divide i bit in blocchi da M: se tutti i propagate del blocco valgono 1 (BP = P0P1…P_{M−1} = 1) un multiplexer fa saltare il riporto dall'ingresso all'uscita del blocco. Ritardo: t = t_setup + M t_carry + (N/M − 1) t_mux + (M−1) t_carry + t_sum, ottimo per M = √(N t_mux/(2 t_carry)); è determinato principalmente dal tempo di riporto. Il carry-select calcola in ogni blocco le somme per riporto 0 e per riporto 1 e un mux sceglie quella giusta: t = t_setup + M t_carry + (N/M) t_mux + t_sum, M ottimo √(N t_mux/t_carry); lo square-root carry-select usa blocchi di dimensione crescente (M, M+1, M+2…) perché il riporto arriva ogni volta un mux dopo: N ≈ K²/2 e t = t_setup + M t_carry + √(2N) t_mux + t_sum, cioè ritardo ∝ √N.Sommatori veloci - carry-bypass, carry-select e square-root → · Traslatori, comparatori e moltiplicatoriOltre ai sommatori, la ALU contiene traslatori (shifter), comparatori e moltiplicatori. Lo shift a sinistra di k posizioni moltiplica per 2^k; lo shift a destra aritmetico (con replica del bit di segno) divide per 2^k nel complemento a due; il barrel shifter realizza qualsiasi traslazione fino a N − 1 posizioni con log₂N livelli di multiplexer 2→1. Il comparatore di uguaglianza è l'AND delle XNOR bit a bit; quello di grandezza confronta partendo dal bit più significativo (GT = g_{N−1} + e_{N−1}(g_{N−2} + e_{N−2}(…))) oppure usa la sottrazione e le flag. Il moltiplicatore a matrice (array) forma N² prodotti parziali con porte AND e li somma con N(N−1) full adder; il ritardo cresce come 2N t_carry; moltiplicatori ad albero (Wallace) e sequenziali (shift-and-add) sono alternative; le FPGA hanno blocchi DSP dedicati.Traslatori, comparatori e moltiplicatori →
- Full adder: , ; con , , : , . Ripple-carry: (lineare).
- Carry-bypass (blocchi da ): , . Linear carry-select: , . Square-root select (blocchi ): , .
Grafico interattivo: Ritardo dei sommatori in unità T (con t_setup = t_carry = t_mux = t_sum = T) in funzione del numero di bit N, con M ottimo: ripple-carry N + 1, carry-bypass ≈ 2√(2N), linear carry-select ≈ 2 + 2√N, square-root select ≈ 3 + √(2N); a N = 32 le note danno 33, 16, 14 e 11 T con M intero
- ALU: sottrazione ; flag Z, C, N, V con . Bus: tri-state con (uscita ), open-drain con pull-up.
- Shift a sinistra di : ; ASR replica il segno; barrel shifter: livelli di mux . Comparatore: , . Moltiplicatore a matrice: AND, full adder, prodotto a bit.
Circuiti logici programmabili e FPGA
Note: Dispositivi logici programmabili - PROM, PLA, PAL e CPLDUn componente logico programmabile (PLD) è un circuito integrato a catalogo la cui funzione logica viene fissata da una programmazione che altera la struttura del circuito (non va confusa con la programmazione software di un microprocessore). I meccanismi sono fusibili, antifusibili (una volta), EPROM/EEPROM/Flash (reversibili e non volatili) e celle SRAM (reversibili ma volatili). Le architetture semplici (SPLD) sono due piani AND-OR: PROM (AND fisso, cioè un decoder di tutti i mintermini, OR programmabile), PLA (entrambi programmabili, dimensione indipendente dal numero di ingressi, più lenta) e PAL (AND programmabile, OR fisso, più veloce). I CPLD sono matrici di blocchi SPLD con interconnessioni programmabili, le FPGA hanno molti blocchi logici piccoli (LUT + registro) in una griglia di interconnessioni complessa, configurata da SRAM.Dispositivi logici programmabili - PROM, PLA, PAL e CPLD → · FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →
| Dispositivo | Piano AND | Piano OR | Note |
|---|---|---|---|
| PROM | fisso (decoder) | programmabile | indirizzi, mintermini |
| PLA | programmabile | programmabile | più lenta, dimensione indipendente dal numero di ingressi |
| PAL | programmabile | fisso | più veloce |
| CPLD | matrice di blocchi SPLD | ritardi prevedibili | |
| FPGA | LUT + registro in griglia | configurata da SRAM (volatile) |
- LUT a ingressi: celle SRAM + mux , qualsiasi funzione di variabili, ritardo costante (: contenuto ).
- Famiglia 7: CLB = 2 slice; slice = 4 LUT6 (o 8 LUT5), mux F7/F8, catena di riporto, 4+4 flip-flop; SLICEM: LUT come RAM distribuita o SRL32; SLICEL: solo logica. Block RAM 36 kb, DSP .
VHDL e progetto su FPGA
Note: VHDL - struttura, tipi di dato e processiVHDL è un linguaggio di descrizione dell'hardware: un listato non è una sequenza di istruzioni eseguite da un processore ma la descrizione di un circuito, che la sintesi traduce in uno schema (LUT, flip-flop, multiplexer). Ogni modulo ha una entity (interfaccia: port con modo in, out, inout e tipo; eventuali generic) e una architecture (parte dichiarativa: segnali, costanti, componenti; parte assertiva dopo begin: assegnazioni concorrenti e processi). Le istruzioni nell'architecture sono concorrenti: l'ordine in cui sono scritte non conta. Un process esegue le proprie istruzioni in modo sequenziale quando un segnale della lista di sensibilità cambia. Segnali (<=, aggiornati alla fine del delta cycle, definiti nella parte dichiarativa) e variabili (:=, immediate, solo dentro il processo) hanno semantica diversa. Tipi: bit, boolean, integer, std_logic (a 9 valori, tra cui 'Z', 'X', 'U'), std_logic_vector, unsigned e signed (numeric_std).VHDL - struttura, tipi di dato e processi → · VHDL - logica combinatoriaUna logica combinatoria in VHDL si descrive con assegnazioni concorrenti (semplici, condizionate when-else con priorità, selezionate with-select senza priorità) o con processi sensibili a tutti gli ingressi (if/elsif, case). Nel processo ogni uscita va assegnata in tutti i rami e la lista di sensibilità deve contenere tutti i segnali letti: altrimenti la sintesi inferisce un latch (memoria). L'aritmetica si fa con unsigned/signed di numeric_std (to_unsigned, to_integer, resize, conversioni di tipo) e con un bit in più per il riporto. Cicli for e istruzioni generate creano hardware replicato (non cicli nel tempo). La descrizione strutturale istanzia componenti con component e port map (per posizione o per nome, anche con generic map), e permette di costruire sistemi gerarchici.VHDL - logica combinatoria → · VHDL - logica sequenziale e registriIn VHDL la logica sequenziale si descrive con processi sensibili al clock. Un registro D (flip-flop sul fronte) si scrive process(clk) con if rising_edge(clk); un latch è un processo sensibile al livello (if clk='1' then q<=d) senza altri rami. Il reset è sincrono se testato dentro rising_edge(clk) (la lista di sensibilità contiene solo clk), asincrono se testato prima, con RST nella lista di sensibilità (if rst='1' then ... elsif rising_edge(clk)). Registri a n bit con generic, registri a scorrimento (con load), contatori (up/down, con enable) si ottengono con la stessa struttura. In un progetto sincrono tutti i registri usano lo stesso clock (nessun clock generato da logica: si usano abilitazioni), i segnali esterni asincroni come i pulsanti si campionano con uno o più flip-flop (debouncing) e le cifre di un display si multiplexano con un contatore.VHDL - logica sequenziale e registri → · Macchine a stati finiti in VHDLUna macchina a stati finiti (FSM) ha uno stato S(k) che evolve secondo la funzione di stato prossimo S(k+1) = F(S(k), X(k)) e produce uscite Y(k) = G(S(k), X(k)) (modello di Mealy: dipendono anche dall'ingresso, possono cambiare subito) oppure Y(k) = G(S(k)) (modello di Moore: dipendono solo dallo stato, cambiano solo ai fronti di clock). In VHDL si definisce un tipo enumerato per gli stati e si scrive in due processi: uno sequenziale (registro di stato con reset: state_reg <= state_next al fronte) e uno combinatorio (case sullo stato che assegna state_next, con un valore di default, e le uscite); lo stile a processo singolo registra anche le uscite. La progettazione parte dal diagramma degli stati, passa alla tabella di transizione e al codice.Macchine a stati finiti in VHDL → · Simulazione, testbench, vincoli di temporizzazione e flusso su FPGAUn progetto VHDL si verifica per simulazione con un testbench: una entity senza porte che istanzia il circuito sotto test (UUT), genera il clock (process con wait for e inversione), applica gli stimoli e controlla le uscite con assert/report/severity (note, warning, error, failure) o leggendo vettori da file (textio). Il flusso su FPGA è: descrizione VHDL, simulazione funzionale, sintesi (rete di LUT e flip-flop), implementazione (piazzamento e instradamento), analisi di temporizzazione, generazione del bitstream e programmazione della scheda. I vincoli (file XDC) assegnano i pin e definiscono il clock (periodo); l'analisi di temporizzazione verifica per ogni cammino registro-registro lo slack di setup, T − (t_c-q + t_logica + t_routing + t_su), e di hold; con slack negativo la frequenza è troppo alta: f_max = 1/(T − WNS).Simulazione, testbench, vincoli di temporizzazione e flusso su FPGA →
| Costrutto | Sintassi essenziale |
|---|---|
| Assegnazione condizionata | y <= a when s='1' else b; (priorità) |
| Assegnazione selezionata | with s select y <= a when "00", b when others; |
| Segnale / variabile | <= a fine processo (delta cycle) / := immediata, solo nel processo |
| Flip-flop D | process(clk) ... if rising_edge(clk) then q <= d; |
| Latch | process(d,clk) ... if clk='1' then q <= d; |
| Reset sincrono / asincrono | dentro rising_edge (sensibilità clk) / if rst='1' ... elsif rising_edge(clk) (sensibilità rst, clk) |
| Tipi | std_logic (9 valori), std_logic_vector, unsigned, signed, enumerati |
| Contatore | cnt <= cnt + 1; con unsigned (numeric_std) |
| Testbench | entity senza porte, wait for T/2; clk <= not clk;, assert ... report ... severity |
- Latch inferito: nel processo combinatorio ogni uscita va assegnata in tutti i rami e la sensibilità deve essere completa.
foregeneratereplicano hardware. - FSM: ; Moore (cambia al fronte), Mealy (cambia con l'ingresso). Due processi: registro di stato e logica di stato prossimo con default
state_next <= state_reg;.
process (RST, CLK) -- registro di stato
begin
if RST = '1' then state_reg <= idle;
elsif rising_edge(CLK) then state_reg <= state_next;
end if;
end process;
process (state_reg, START) -- stato prossimo e uscite
begin
state_next <= state_reg;
case state_reg is
when idle => CHECK <= '0'; if START = '1' then state_next <= counting; end if;
when counting => CHECK <= '1'; if START = '0' then state_next <= idle; end if;
end case;
end process;- Temporizzazione su FPGA: slack di setup ; hold (indipendente da ); con WNSworst negative slack, lo slack peggiore tra tutti i cammini. Vincolo di clock:
create_clock -period 10per 100 MHz.
Versione ripasso
- Margini: , (Segnali digitali, livelli logici e margini di rumoreUn segnale digitale assume un insieme finito di valori (di solito due: bit, tipicamente 0 V e V_DD); con N bit si distinguono 2^N livelli. Il valore logico di un'uscita è garantito sopra V_OH (uno) e sotto V_OL (zero); un ingresso è letto come uno sopra V_IH e come zero sotto V_IL, con intervalli di ingresso più larghi di quelli di uscita. I margini di rumore sono NM_H = V_OH − V_IH e NM_L = V_IL − V_OL. La caratteristica di trasferimento statica (VTC) ha la soglia logica V_M (V_out = V_in); V_IL e V_IH sono i punti a pendenza −1. La proprietà rigenerativa (pendenza alta nella zona di transizione, guadagno maggiore di 1) ripulisce il segnale a ogni stadio ed è legata alla bistabilità della coppia di inverter in retroazione. Altre figure di merito: fan-in, fan-out, tempi di propagazione, potenza, costo.Segnali digitali, livelli logici e margini di rumore →).
- Complemento a due: ; (Rappresentazione dei numeri e dell'informazioneUn'informazione digitale è una stringa di bit. Numeri senza segno: N bit rappresentano 0…2^N − 1; in esadecimale ogni cifra raggruppa 4 bit. Numeri con segno: complemento a due (range −2^(N−1)…2^(N−1) − 1; si nega invertendo i bit e sommando 1; il bit più significativo è il segno e l'estensione di segno lo replica). Il BCD codifica ogni cifra decimale con 4 bit (0…9) e si ottiene dal binario con l'algoritmo double dabble (shift a sinistra, e +3 a ogni gruppo maggiore di 4 prima dello shift). Il codice Gray cambia un solo bit tra valori consecutivi. I numeri frazionari si trattano in virgola fissa (4 bit di parte frazionaria = multipli di 1/16), i caratteri in ASCII, gli errori con un bit di parità.Rappresentazione dei numeri e dell'informazione →).
- MOS: lineare , saturazione (Il transistor MOS come interruttore - soglia, caratteristiche e capacitàIl MOS ha quattro terminali (gate, source, drain, bulk); il bulk dell'n-MOS va a massa, quello del p-MOS a V_DD. Il canale esiste (inversione) per V_GS > V_T nell'n-MOS (V_T > 0) e per V_GS < V_T nel p-MOS (V_T < 0). La soglia cresce in modulo con la tensione di source rispetto al bulk (effetto body): V_T = V_T0 + γ(√|−2Φ_F+V_SB| − √|2Φ_F|). Corrente: lineare per V_DS < V_GS − V_T, I_D = k'(W/L)[(V_GS−V_T)V_DS − V_DS²/2]; saturazione per V_DS > V_GS − V_T, I_D = (k'/2)(W/L)(V_GS−V_T)²(1+λV_DS). In digitale il transistor è un interruttore con resistenza equivalente R_eq ∝ 1/Z (Z = W/L) e capacità di gate C_g = C_ox W L, di drain e source ∝ W. Raddoppiando Z la resistenza dimezza e le capacità raddoppiano.Il transistor MOS come interruttore - soglia, caratteristiche e capacità →).
- Soglia logica: , (Invertitore CMOS - caratteristica di trasferimento staticaL'inverter CMOS ha un p-MOS verso V_DD e un n-MOS verso massa con gli ingressi collegati: V_OH = V_DD, V_OL = 0, nessun cammino diretto in continua (consumo statico nullo). La VTC ha cinque regioni (n-MOS off; n sat/p lin; entrambi sat in V_M; n lin/p sat; p off). Con entrambi in saturazione e λ = 0: V_M = (V_Tn + r(V_DD + V_Tp))/(1 + r) con r = √(|k'_p|Z_p/(k'_n Z_n)). Bilanciamento statico (V_M = V_DD/2 con V_Tn = |V_Tp|): Z_p/Z_n = k'_n/|k'_p| (circa 3,8). Scalare Z_n e Z_p dello stesso fattore lascia V_M invariata e moltiplica la corrente di picco; aumentare Z_p/Z_n alza V_M, V_IL e V_IH; V_M segue V_DD. Margini NM_L = V_IL, NM_H = V_DD − V_IH (circa 1 V a 2,5 V).Invertitore CMOS - caratteristica di trasferimento statica →).
- Ritardo: , ; (Invertitore CMOS - ritardo di propagazioneIn commutazione l'inverter è un circuito RC del primo ordine: il tempo di propagazione al 50% vale t_p = ln2·τ = 0,69·R·C. Con R_n e R_p resistenze equivalenti e C_L = C_int + C_ext (intrinseca = capacità di drain di n-MOS e p-MOS; estrinseca = gate delle porte pilotate e interconnessioni): t_pHL = 0,69 R_n C_L, t_pLH = 0,69 R_p C_L. Con Z_p = βZ_n, R_p/R_n = r/β (r = R_p0/R_n0 ≈ 2,4): il bilanciamento dinamico (t_pHL = t_pLH) richiede β = r, mentre il minimo del ritardo medio con carico a gate si ha per β = √r. Moltiplicando Z_n e Z_p per S: t_p = t_p0 (1 + C_ext/(S C_int,ref)): a carico estrinseco dominante raddoppiare le larghezze dimezza il ritardo; con carico intrinseco dominante non cambia (autocaricamento).Invertitore CMOS - ritardo di propagazione →).
- Buffer: , (Catene di inverter e buffer CMOSPer pilotare un carico grande C_L partendo da un ingresso piccolo C_in si usa una catena di N inverter di dimensioni crescenti (buffer). Il ritardo totale è t_p = t_p0 Σ (1 + f_j/γ), con f_j = C_gin,j+1/C_gin,j il fan-out dello stadio j e γ = C_int/C_g (circa 1-2). Il minimo, a N fissato, si ha con lo stesso fan-out in tutti gli stadi, f = F^(1/N) con F = C_L/C_in (ogni stadio è la media geometrica dei vicini e ha lo stesso ritardo): t_p = N t_p0 (1 + F^(1/N)/γ). Il numero ottimo di stadi si trova da ln f = 1 + γ/f (f = e per γ = 0, f ≈ 3,6 per γ = 1, N = ln F / ln f). Un anello di N inverter (N dispari, N ≥ 3) oscilla con periodo 2N t_p.Catene di inverter e buffer CMOS →).
- Potenza: (Consumo di potenza nei circuiti CMOSNella logica CMOS il consumo è quasi tutto dinamico. Per ogni carica di C_L da 0 a V_DD l'alimentazione eroga E_DD = C_L V_DD²; metà (½C_L V_DD²) viene immagazzinata nella capacità e metà dissipata nel p-MOS, indipendentemente dal valore di R; nella scarica l'energia immagazzinata è dissipata nell'n-MOS e dall'alimentazione non si assorbe nulla. La potenza media è P = α C_L V_DD² f (α = probabilità di una transizione 0→1 per periodo; per un inverter che commuta a ogni ciclo α = 1; con probabilità di uno p₁ all'uscita α = p₁(1−p₁) se i valori successivi sono indipendenti). Non dipende dalle dimensioni dei transistor (solo da C_L), scala col quadrato di V_DD (dimezzare V_DD: potenza ÷4) ma abbassare V_DD rallenta il circuito. Si aggiungono la corrente di corto circuito (ingressi lenti) e le correnti di perdita.Consumo di potenza nei circuiti CMOS →).
- Elmore: ; NOR fan-in : (Porte logiche CMOS - ritardo di Elmore, fan-in e consumoIl ritardo di una porta dipende dalla configurazione degli ingressi: si calcola il caso peggiore (un solo cammino conduttivo, il più resistivo) e il caso migliore. Per una rete RC con transistor in serie si usa il ritardo di Elmore: t = 0,69 Σ_k C_k · R_k, con R_k la resistenza totale tra il nodo k e il generatore (massa o V_DD) lungo il cammino e C_k la capacità del nodo. Per NAND2 con R_n = R_p: t_pLH (caso peggiore) = 0,69 R_p C, t_pHL = 0,69·2R_n C, quindi t_pHL = 2 t_pLH; per NOR2 è l'opposto. Una NOR a N ingressi (tutti i transistor uguali, nodi interni trascurati): t_pLH = 0,69 R_p C N(N+1), t_pHL = 0,69 R_n C (N+1): il ritardo cresce col quadrato del fan-in, perciò si evitano fan-in maggiori di 4. Rimedi: dimensionamento progressivo (transistor più grandi dal lato opposto all'uscita), riordino degli ingressi (il più tardivo vicino all'uscita), cascata di porte con meno ingressi, buffer. La potenza dinamica dipende dalla probabilità di commutazione.Porte logiche CMOS - ritardo di Elmore, fan-in e consumo →).
- Registri: ; hold (Latch, registri e parametri temporaliUn circuito sequenziale ha uno stato memorizzato in due modi: retroazione positiva (due inverter in anello, bistabile, i latch statici) o immagazzinamento di carica (circuiti dinamici). Un latch è sensibile al livello del clock (trasparente quando il clock è attivo, memorizza quando non lo è), un registro (flip-flop) è sensibile al fronte e si realizza con due latch sulle fasi opposte (master-slave). Il latch SR a porte NOR/NAND non ammette la combinazione S = R = 1 perché passando da lì alla memoria lo stato finale è imprevedibile. Parametri temporali del registro: ritardo clock-uscita t_c-q, tempo di setup t_su (dato stabile prima del fronte), tempo di hold t_hold (dato stabile dopo il fronte). Periodo minimo: T_min = t_c-q + t_p,logic(max) + t_su; vincolo di hold: t_cd,reg + t_cd,logic > t_hold. La pipeline spezza la logica con registri per aumentare la frequenza (a spese della latenza).Latch, registri e parametri temporali →).
- DRAM: (SRAM e DRAMSRAM e DRAM sono memorie volatili ad accesso casuale. La cella SRAM a 6 transistor è un latch di due inverter (M1-M4) con due n-MOS di accesso (M5, M6) pilotati dalla word line: uscita differenziale, veloce, grande. Lettura: BL e BL̄ precaricate, l'n-MOS driver abbassa leggermente il lato che memorizza 0 (il transistor driver deve essere più forte di quello di accesso, così il nodo non supera la soglia degli inverter); scrittura: una BL forzata a 0 porta il nodo sotto la soglia logica degli inverter in retroazione positiva, che poi si ribaltano. La DRAM a 1 transistor ha un n-MOS di accesso e una capacità di storage C_S: scrittura caricando C_S dalla BL (si perde V_T: bootstrap della WL), lettura per ridistribuzione di carica con la BL precaricata, ΔV = C_S/(C_BL + C_S)(V_X − V_PRE) ≈ 100-250 mV, distruttiva: servono sense amplifier per ogni BL e refresh periodico. Celle DRAM a 3 transistor: lettura non distruttiva.SRAM e DRAM →).
- Full adder: , ; ripple (Sommatori - full adder e ripple-carryLa somma di due bit con riporto in ingresso è realizzata dal full adder: S = A ⊕ B ⊕ C_in, C_out = AB + BC_in + AC_in. Con generate G = AB, propagate P = A ⊕ B (e delete D = Ā B̄) si scrive C_out = G + P·C_in e S = P ⊕ C_in: G e P non dipendono dal riporto in ingresso (fase di set-up), solo C_out ed S ne dipendono. Il sommatore ripple-carry collega N full adder in cascata: il riporto attraversa gli stadi uno dopo l'altro, nel caso peggiore t_add = (N−1) t_carry + t_sum (lineare in N). Il ritardo effettivo dipende dagli operandi: un generate o un delete azzera la catena, un propagate la prolunga; per operandi uguali bit a bit vale t_carry + t_sum.Sommatori - full adder e ripple-carry →).
- Sommatori veloci: (bypass), (select), (sqrt select) (Sommatori veloci - carry-bypass, carry-select e square-rootIl ripple-carry ha ritardo lineare in N. Il carry-bypass divide i bit in blocchi da M: se tutti i propagate del blocco valgono 1 (BP = P0P1…P_{M−1} = 1) un multiplexer fa saltare il riporto dall'ingresso all'uscita del blocco. Ritardo: t = t_setup + M t_carry + (N/M − 1) t_mux + (M−1) t_carry + t_sum, ottimo per M = √(N t_mux/(2 t_carry)); è determinato principalmente dal tempo di riporto. Il carry-select calcola in ogni blocco le somme per riporto 0 e per riporto 1 e un mux sceglie quella giusta: t = t_setup + M t_carry + (N/M) t_mux + t_sum, M ottimo √(N t_mux/t_carry); lo square-root carry-select usa blocchi di dimensione crescente (M, M+1, M+2…) perché il riporto arriva ogni volta un mux dopo: N ≈ K²/2 e t = t_setup + M t_carry + √(2N) t_mux + t_sum, cioè ritardo ∝ √N.Sommatori veloci - carry-bypass, carry-select e square-root →).
- LUT: ingressi celle SRAM (FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →).
- FSM: Moore , Mealy (Macchine a stati finiti in VHDLUna macchina a stati finiti (FSM) ha uno stato S(k) che evolve secondo la funzione di stato prossimo S(k+1) = F(S(k), X(k)) e produce uscite Y(k) = G(S(k), X(k)) (modello di Mealy: dipendono anche dall'ingresso, possono cambiare subito) oppure Y(k) = G(S(k)) (modello di Moore: dipendono solo dallo stato, cambiano solo ai fronti di clock). In VHDL si definisce un tipo enumerato per gli stati e si scrive in due processi: uno sequenziale (registro di stato con reset: state_reg <= state_next al fronte) e uno combinatorio (case sullo stato che assegna state_next, con un valore di default, e le uscite); lo stile a processo singolo registra anche le uscite. La progettazione parte dal diagramma degli stati, passa alla tabella di transizione e al codice.Macchine a stati finiti in VHDL →).
- Timing FPGA: (Simulazione, testbench, vincoli di temporizzazione e flusso su FPGAUn progetto VHDL si verifica per simulazione con un testbench: una entity senza porte che istanzia il circuito sotto test (UUT), genera il clock (process con wait for e inversione), applica gli stimoli e controlla le uscite con assert/report/severity (note, warning, error, failure) o leggendo vettori da file (textio). Il flusso su FPGA è: descrizione VHDL, simulazione funzionale, sintesi (rete di LUT e flip-flop), implementazione (piazzamento e instradamento), analisi di temporizzazione, generazione del bitstream e programmazione della scheda. I vincoli (file XDC) assegnano i pin e definiscono il clock (periodo); l'analisi di temporizzazione verifica per ogni cammino registro-registro lo slack di setup, T − (t_c-q + t_logica + t_routing + t_su), e di hold; con slack negativo la frequenza è troppo alta: f_max = 1/(T − WNS).Simulazione, testbench, vincoli di temporizzazione e flusso su FPGA →).