Salta al contenuto
Note per Studenti Formulario · Elettronica dei Sistemi Digitali

FormularioElettronica dei Sistemi Digitali: definizioni, teoremi e formule delle note, in ordine di capitolo

In questa pagina 8

I. Fondamenti dei sistemi digitali

Segnali digitali, livelli logici e margini di rumore

Definizione (livelli logici di uscita e soglie di ingresso). In una porta reale i valori logici corrispondono a intervalli di tensione, non a valori esatti. Per l'uscita si definiscono

  • VOLV_{OL}: la tensione massima che l'uscita può avere quando rappresenta lo 00 (uscita valida come 00 se Vout<VOLV_{out}<V_{OL});
  • VOHV_{OH}: la tensione minima quando rappresenta l'11 (Vout>VOHV_{out}>V_{OH}).

Per l'ingresso si definiscono

  • VILV_{IL}: tensione massima interpretata come 00 dalla porta che riceve (Vin<VIL⇒0V_{in}<V_{IL}\Rightarrow0);
  • VIHV_{IH}: tensione minima interpretata come 11 (Vin>VIH⇒1V_{in}>V_{IH}\Rightarrow1).

Gli intervalli di ingresso sono più ampi di quelli di uscita: VOL<VIL<VIH<VOHV_{OL}<V_{IL}<V_{IH}<V_{OH}. Fra VILV_{IL} e VIHV_{IH} si trova la regione di transizione (non valida). I valori che separano le due rappresentazioni sono le soglie logiche.

Esempio. Una porta con VOL=0,2 VV_{OL} = 0{,}2\ \mathrm V, VOH=2,3 VV_{OH} = 2{,}3\ \mathrm V, VIL=1,0 VV_{IL} = 1{,}0\ \mathrm V e VIH=1,5 VV_{IH} = 1{,}5\ \mathrm V rispetta VOL<VIL<VIH<VOHV_{OL} < V_{IL} < V_{IH} < V_{OH}; una tensione di 1,2 V1{,}2\ \mathrm V cade nella regione di transizione.

Definizione (margini di rumore). Quando la porta A pilota la porta B, il segnale può essere disturbato; il disturbo massimo tollerabile senza errori è il margine di rumore: NML=VIL−VOL,NMH=VOH−VIH.NM_L=V_{IL}-V_{OL},\qquad NM_H=V_{OH}-V_{IH}.

Esempio. Un'uscita garantisce VOL=0,2 VV_{OL}=0{,}2\ \mathrm V e VOH=2,3 VV_{OH}=2{,}3\ \mathrm V e l'ingresso della porta seguente legge 00 sotto VIL=1,0 VV_{IL}=1{,}0\ \mathrm V e 11 sopra VIH=1,5 VV_{IH}=1{,}5\ \mathrm V. Allora NML=1,0−0,2=0,8 VNM_L=1{,}0-0{,}2=0{,}8\ \mathrm V e NMH=2,3−1,5=0,8 VNM_H=2{,}3-1{,}5=0{,}8\ \mathrm V: un disturbo di 0,7 V0{,}7\ \mathrm V sovrapposto a un livello alto o basso non cambia il valore logico; uno di 0,9 V0{,}9\ \mathrm V potrebbe farlo.

Definizione (caratteristica di trasferimento statica e soglie). La caratteristica di trasferimento statica (VTC, voltage transfer characteristic) è il grafico di VoutV_{out} in funzione di VinV_{in} in condizioni stazionarie. Per un inverter (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 →) è decrescente: VinV_{in} bassa ⇒\Rightarrow VoutV_{out} alta e viceversa.

  • La tensione di soglia logica VMV_M è il punto in cui Vout=VinV_{out}=V_{in} (l'intersezione della VTC con la retta a 45∘45^\circ): VM=f(VM)V_M=f(V_M).
  • VILV_{IL} e VIHV_{IH} sono i due punti in cui la pendenza (guadagno) vale −1-1: tra di loro il guadagno in modulo è maggiore di 11 (zona di transizione), fuori è minore di 11.
  • VOHV_{OH} e VOLV_{OL} sono le uscite corrispondenti agli ingressi estremi (Vin=0V_{in}=0 e Vin=VDDV_{in}=V_{DD}); per l'inverter CMOS sono VDDV_{DD} e 00.

Esempio. Per l'inverter di riferimento con VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V: VM≈1,26 VV_M \approx 1{,}26\ \mathrm V, VIL≈1,0 VV_{IL} \approx 1{,}0\ \mathrm V e VIH≈1,5 VV_{IH} \approx 1{,}5\ \mathrm V, con VOL=0V_{OL} = 0 e VOH=VDDV_{OH} = V_{DD}.

Grafico interattivo: VTC di un inverter CMOS (V_DD = 2,5 V, Z_n = 3, Z_p = 11,5, tecnologia a 0,25 µm): V_out in funzione di V_in, tratto piatto a 2,5 V fino a circa 1 V, transizione ripida in V_M ≈ 1,26 V, poi 0 V

Definizione (porta rigenerativa). Una porta è rigenerativa se, applicando in ingresso un livello degradato (lontano dai valori nominali ma dalla parte giusta di VMV_M), l'uscita è più vicina al valore nominale: collegando in cascata più porte, i livelli si ripuliscono stadio dopo stadio. Condizione: la VTC ha pendenza (in modulo) maggiore di 11 nella regione di transizione, e quindi guadagno minore di 11 fuori di essa, dove i livelli vengono "schiacciati" verso i valori nominali.

Esempio numerico (inverter di riferimento del grafico, VDD=2,5 VV_{DD}=2{,}5\ \mathrm V). Un ingresso Vin=1,0 VV_{in}=1{,}0\ \mathrm V è uno 00 degradato (sotto VM≈1,26 VV_M\approx1{,}26\ \mathrm V ma lontano da 0 V0\ \mathrm V): la catena di inverter dà 2,30 V→0 V→2,5 V→0 V2{,}30\ \mathrm V\to0\ \mathrm V\to2{,}5\ \mathrm V\to0\ \mathrm V. Un ingresso Vin=1,6 VV_{in}=1{,}6\ \mathrm V è un 11 degradato, appena sopra VMV_M: la catena dà 0,14 V→2,5 V→0 V→2,5 V0{,}14\ \mathrm V\to2{,}5\ \mathrm V\to0\ \mathrm V\to2{,}5\ \mathrm V. Già dal secondo stadio i livelli sono quelli nominali, anche se il segnale di partenza era quasi a metà strada. I valori di VIL,VIHV_{IL},V_{IH} per questo inverter sono circa 1,0 V1{,}0\ \mathrm V e 1,5 V1{,}5\ \mathrm V, quindi i margini valgono circa NML≈1,0 VNM_L\approx1{,}0\ \mathrm V e NMH≈1,0 VNM_H\approx1{,}0\ \mathrm V (con VOL=0V_{OL}=0 e VOH=VDDV_{OH}=V_{DD}).

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

Definizione (tempi di propagazione, di salita e di discesa). Altre figure di merito sono il consumo di potenza (energia assorbita per operazione) e i tempi di propagazione (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 →):

  • tpHLt_{pHL} e tpLHt_{pLH} si misurano dal 50%50\% dell'escursione dell'ingresso al 50%50\% di quella dell'uscita; l'etichetta indica la transizione dell'uscita (HL: alto →\to basso). In generale tpHL≠tpLHt_{pHL}\ne t_{pLH}; spesso si usa la media tp=tpHL+tpLH2t_p=\dfrac{t_{pHL}+t_{pLH}}2.
  • Tempi di salita e discesa trt_r e tft_f: variazione dell'uscita dal 10%10\% al 90%90\% (e viceversa).

Esempio. Con tpHL=60 pst_{pHL} = 60\ \mathrm{ps} e tpLH=80 pst_{pLH} = 80\ \mathrm{ps}: tp=60+802=70 pst_p = \frac{60 + 80}{2} = 70\ \mathrm{ps}.

Rappresentazione dei numeri e dell'informazione

Definizione (numeri senza segno su N bit). Con NN bit bN−1…b1b0b_{N-1}\dots b_1b_0 il valore è ∑i=0N−1bi2i\sum_{i=0}^{N-1}b_i2^i e l'intervallo rappresentabile è 0,…,2N−10,\dots,2^N-1. Il bit bN−1b_{N-1} è il più significativo (MSB), b0b_0 il meno significativo (LSB).

Esempio. Con N=8N = 8: 1101 10102=128+64+16+8+2=2181101\,1010_2 = 128 + 64 + 16 + 8 + 2 = 218, nell'intervallo 00–255255.

Definizione (complemento a due). Nel complemento a due su NN bit il bit più significativo ha peso negativo: v=−bN−12N−1+∑i=0N−2bi2i,−2N−1≤v≤2N−1−1.v=-b_{N-1}2^{N-1}+\sum_{i=0}^{N-2}b_i2^i,\qquad-2^{N-1}\le v\le2^{N-1}-1.

Esempio. Su N=8N = 8 bit: 1111 00112=−128+64+32+16+2+1=−131111\,0011_2 = -128 + 64 + 32 + 16 + 2 + 1 = -13.

Proprietà (negazione, estensione di segno, sottrazione e overflow nel complemento a due).

Esempio. +13=0000 1101+13 = 0000\,1101; invertendo i bit si ha 1111 00101111\,0010 e sommando 11 si ottiene 1111 0011=−131111\,0011 = -13.

Proprietà (conversione da binario a BCD, double dabble). Conversione binario →\to BCD (double dabble). Si scorre il binario a sinistra un bit alla volta nel registro BCD; prima di ogni shift, se un gruppo di 44 bit del BCD è maggiore di 44, gli si somma 33. Il motivo: un gruppo che vale 55 raddoppiato darebbe 10=1010210=1010_2 (non ammesso in BCD), mentre (5+3)⋅2=16=1 00002(5+3)\cdot2=16=1\,0000_2, cioè una decina e zero unità; per un gruppo ≤4\le4 il doppio è ≤8\le8 e non crea problemi. Per 156=1001 11002156=1001\,1100_2 (8 passi):

Esempio. Per 156=1001 11002156 = 1001\,1100_2 servono 88 passi e si ottiene 0001 0101 0110BCD0001\,0101\,0110_{BCD} (cifre 11, 55, 66); un gruppo che vale 55 prima dello shift diventa 5+3=85 + 3 = 8 e raddoppiato dà 1616, cioè una decina.

Definizione (codice Gray). Nel codice Gray due valori consecutivi differiscono per un solo bit: g=b⊕(b≫1)g=b\oplus(b\gg1). Per 33 bit: 000,001,011,010,110,111,101,100000,001,011,010,110,111,101,100. Serve dove un conteggio potrebbe essere letto durante una transizione (codificatori ottici, contatori che attraversano domini di clock diversi): in binario il passaggio 011→100011\to100 cambia tre bit, e con tempi diversi si potrebbe leggere 111111 o 000000; in Gray si legge sempre o il vecchio o il nuovo valore.

Esempio. Con b=011b = 011: g=011⊕001=010g = 011 \oplus 001 = 010; con b=100b = 100: g=100⊕010=110g = 100 \oplus 010 = 110. Il passaggio 3→43 \to 4 cambia tre bit in binario (011→100011 \to 100) e uno solo in Gray (010→110010 \to 110).

II. Il transistor MOS

Il transistor MOS come interruttore - soglia, caratteristiche e capacità

Formula (tensione di soglia ed effetto body). La tensione di soglia VTV_T è il valore minimo di VGSV_{GS} che porta il canale in inversione. Dipende anche dalla polarizzazione del bulk rispetto al source: VTn=VT0n+γn(∣−2ΦF+VSB∣−∣2ΦF∣),V_{Tn}=V_{T0n}+\gamma_n\Big(\sqrt{\lvert-2\Phi_F+V_{SB}\rvert}-\sqrt{\lvert2\Phi_F\rvert}\Big),

Esempio numerico (VT0=0,4 VV_{T0}=0{,}4\ \mathrm V, γ=0,4 V1/2\gamma=0{,}4\ \mathrm V^{1/2}, 2ΦF=0,6 V2\Phi_F=0{,}6\ \mathrm V): per VSB=0,5 VV_{SB}=0{,}5\ \mathrm V, VT=0,4+0,4 (1,1−0,6)=0,510 VV_T=0{,}4+0{,}4\,(\sqrt{1{,}1}-\sqrt{0{,}6})=0{,}510\ \mathrm V; per VSB=1 VV_{SB}=1\ \mathrm V, VT=0,596 VV_T=0{,}596\ \mathrm V; per VSB=2 VV_{SB}=2\ \mathrm V, VT=0,735 VV_T=0{,}735\ \mathrm V. L'effetto è rilevante nei circuiti digitali quando il source di un n-MOS si innalza (porte in serie, pass-transistor: 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 →); nei temi d'esame, dove manca il valore di γ\gamma, si assegna direttamente la variazione (ΔVTn=−ΔVTp=0,3 V\Delta V_{Tn}=-\Delta V_{Tp}=0{,}3\ \mathrm V).

Formula (corrente del MOS nelle tre regioni di funzionamento).

regione condizione n-MOS corrente n-MOS
spento VGS≤VTV_{GS}\le V_T ID=0I_D=0
lineare (resistiva) VDS<VGS−VTV_{DS}<V_{GS}-V_T ID=kn′Z[(VGS−VT)VDS−12VDS2]I_D=k'_nZ\big[(V_{GS}-V_T)V_{DS}-\tfrac12V_{DS}^2\big]
saturazione VDS≥VGS−VTV_{DS}\ge V_{GS}-V_T ID=12kn′Z (VGS−VT)2 (1+λnVDS)I_D=\tfrac12k'_nZ\,(V_{GS}-V_T)^2\,(1+\lambda_nV_{DS})

Esempio. n-MOS con kn′=115 μA/V2k'_n=115\ \mu\mathrm A/\mathrm V^2, Z=3Z=3, VT=0,4 VV_T=0{,}4\ \mathrm V, VGS=2,5 VV_{GS}=2{,}5\ \mathrm V: VGT=2,1 VV_{GT}=2{,}1\ \mathrm V e kn′Z=345 μA/V2k'_nZ=345\ \mu\mathrm A/\mathrm V^2. Con VDS=0,5 V<2,1V_{DS}=0{,}5\ \mathrm V<2{,}1 è lineare: ID=345 (2,1⋅0,5−0,125)=319 μAI_D=345\,(2{,}1\cdot0{,}5-0{,}125)=319\ \mu\mathrm A. Con VDS=2,5 V>2,1V_{DS}=2{,}5\ \mathrm V>2{,}1 è in saturazione: ID=12⋅345⋅2,12 (1+0,06⋅2,5)=875 μAI_D=\tfrac12\cdot345\cdot2{,}1^2\,(1+0{,}06\cdot2{,}5)=875\ \mu\mathrm A (senza λ\lambda: 761 μA761\ \mu\mathrm A).

Grafico interattivo: Corrente di drain I_D (µA) di un n-MOS con k'_n Z = 345 µA/V², V_T = 0,4 V, V_GS = 2,5 V, in funzione di V_DS (V), con λ = 0: tratto lineare fino a V_DS = 2,1 V, poi saturazione

Formula (capacità di gate e di giunzione del MOS). Il comportamento dinamico dipende dalle capacità parassite tra i terminali (gate-canale, gate-source/drain per sovrapposizione, giunzioni source-bulk e drain-bulk):

  • Capacità di gate (modello semplificato): Cg=Cox W LC_g=C_{ox}\,W\,L, con Cox=εox/toxC_{ox}=\varepsilon_{ox}/t_{ox} (fF/μm2\mu\mathrm m^2). È proporzionale all'area del gate (W⋅LW\cdot L), non solo a WW. Esempio: Cox=5 fF/μm2C_{ox}=5\ \mathrm{fF}/\mu\mathrm m^2, W=0,5 μmW=0{,}5\ \mu\mathrm m, L=0,25 μmL=0{,}25\ \mu\mathrm m: Cg=0,625 fFC_g=0{,}625\ \mathrm{fF}.
  • Capacità di giunzione di source e di drain: CD=Cd0WC_D=C_{d0}W, CS=Cs0WC_S=C_{s0}W con Cd0C_{d0}, Cs0C_{s0} in fF/μm\mu\mathrm m (1,41{,}4–2 fF/μm2\ \mathrm{fF}/\mu\mathrm m negli esempi d'esame). Sono proporzionali a WW e indipendenti da LL (dipendono dall'area di diffusione, larga WW, e dal suo bordo; le due componenti sono "fondo" e "bordo"). Il drain e il source diffusi hanno una giunzione verso il bulk: raddoppiando WW la capacità source-bulk raddoppia.

Esempio. Cd0=2 fF/μmC_{d0}=2\ \mathrm{fF}/\mu\mathrm m, W=3 μmW=3\ \mu\mathrm m: CD=6 fFC_D=6\ \mathrm{fF}.

Formula (resistenza equivalente del MOS e dipendenza da Z). Quando VGSV_{GS} è al massimo (∣VGS∣=VDD\lvert V_{GS}\rvert=V_{DD}) il transistor è una resistenza RonR_{on} tra source e drain; durante una commutazione il punto di lavoro percorre la caratteristica tra saturazione e zona lineare. Si definisce una resistenza equivalente (media di VDS/IDV_{DS}/I_D nel tratto da VDDV_{DD} a VDD/2V_{DD}/2): Req=1VDD/2∫VDD/2VDDVIDSAT(1+λV) dV≃34VDDIDSAT(1−79λVDD).R_{eq}=\frac1{V_{DD}/2}\int_{V_{DD}/2}^{V_{DD}}\frac{V}{I_{DSAT}(1+\lambda V)}\,dV\simeq\frac34\frac{V_{DD}}{I_{DSAT}}\Big(1-\frac79\lambda V_{DD}\Big). Poiché IDSAT∝ZI_{DSAT}\propto Z, Req∝1/ZR_{eq}\propto1/Z: si indica Rn0R_{n0} (n-MOS) e Rp0R_{p0} (p-MOS) il valore per Z=1Z=1, e per un transistor di fattore ZZ Rn=Rn0Zn,Rp=Rp0Zp.R_n=\frac{R_{n0}}{Z_n},\qquad R_p=\frac{R_{p0}}{Z_p}.

Esempio di scalatura (tema d'esame). Un n-MOS con W/L=1 μm/0,5 μmW/L=1\ \mu\mathrm m/0{,}5\ \mu\mathrm m (Z=2Z=2) ha CS=CD=10 fFC_S=C_D=10\ \mathrm{fF} e RON=10 kΩR_{ON}=10\ \mathrm{k\Omega}. Con W/L=4 μm/0,5 μmW/L=4\ \mu\mathrm m/0{,}5\ \mu\mathrm m (Z=8Z=8, WW quadruplicata e LL uguale): le capacità di drain e source ∝W\propto W diventano 40 fF40\ \mathrm{fF} e la resistenza ∝1/Z\propto1/Z diventa 10/4=2,5 kΩ10/4=2{,}5\ \mathrm{k\Omega}. Ricorda: più grande è il transistor, più velocemente carica o scarica (resistenza minore) ma più carica (capacità maggiore) il nodo che lo precede.

III. L'invertitore CMOS

Invertitore CMOS - caratteristica di trasferimento statica

Formula (soglia logica dell'inverter CMOS). La soglia logica è il valore di VinV_{in} per cui Vout=VinV_{out}=V_{in}. Con Vin=Vout=VMV_{in}=V_{out}=V_M i due transistor sono necessariamente entrambi in saturazione, qualunque sia VMV_M: per l'n-MOS VDS=VM≥VM−VTn=VGTV_{DS}=V_M\ge V_M-V_{Tn}=V_{GT}, e per il p-MOS ∣VDS∣=VDD−VM≥VDD−VM−∣VTp∣\lvert V_{DS}\rvert=V_{DD}-V_M\ge V_{DD}-V_M-\lvert V_{Tp}\rvert. Con λ=0\lambda=0 si uguagliano le correnti di saturazione: 12kn′Zn(VM−VTn)2=12∣kp′∣Zp(VDD−VM−∣VTp∣)2,\frac12k'_nZ_n(V_M-V_{Tn})^2=\frac12\lvert k'_p\rvert Z_p(V_{DD}-V_M-\lvert V_{Tp}\rvert)^2, e, estraendo la radice (stesso segno delle tensioni di gate-soglia), VM=VTn+r (VDD+VTp)1+r,r=∣kp′∣Zpkn′Zn\boxed{V_M=\frac{V_{Tn}+r\,(V_{DD}+V_{Tp})}{1+r},\qquad r=\sqrt{\frac{\lvert k'_p\rvert Z_p}{k'_nZ_n}}}

Esempio (kn′=115k'_n=115, kp′=−30 μA/V2k'_p=-30\ \mu\mathrm A/\mathrm V^2, VTn=0,4V_{Tn}=0{,}4, VTp=−0,4 VV_{Tp}=-0{,}4\ \mathrm V, VDD=2,5 VV_{DD}=2{,}5\ \mathrm V). Con Zn=2Z_n=2, Zp=4Z_p=4: r=30⋅4/(115⋅2)=0,722r=\sqrt{30\cdot4/(115\cdot2)}=0{,}722 e VM=0,4+0,722⋅2,11,722=1,113 VV_M=\dfrac{0{,}4+0{,}722\cdot2{,}1}{1{,}722}=1{,}113\ \mathrm V, minore di VDD/2=1,25 VV_{DD}/2=1{,}25\ \mathrm V. Con Zp/Zn=1Z_p/Z_n=1: VM=0,975 VV_M=0{,}975\ \mathrm V; con Zp/Zn=8Z_p/Z_n=8: 1,405 V1{,}405\ \mathrm V.

Grafico interattivo: Soglia logica V_M (V) di un inverter a 0,25 µm in funzione del rapporto Z_p/Z_n (da 0,5 a 16): V_M cresce con Z_p/Z_n e vale V_DD/2 = 1,25 V per Z_p/Z_n = 3,83

Formula (bilanciamento statico dell'inverter CMOS). Si dice staticamente bilanciato un inverter con VM=VDD/2V_M=V_{DD}/2 (caratteristica simmetrica, margini di rumore uguali, VOHV_{OH} e VOLV_{OL} simmetrici). Imponendo VM=VDD/2V_M=V_{DD}/2 nella relazione precedente: ZpZn=kn′∣kp′∣(VDD/2−VTnVDD/2−∣VTp∣)2 =VTn=∣VTp∣ kn′∣kp′∣.\frac{Z_p}{Z_n}=\frac{k'_n}{\lvert k'_p\rvert}\left(\frac{V_{DD}/2-V_{Tn}}{V_{DD}/2-\lvert V_{Tp}\rvert}\right)^2\ \overset{V_{Tn}=\lvert V_{Tp}\rvert}{=}\ \frac{k'_n}{\lvert k'_p\rvert}.

Esempio. Con kn′=115k'_n = 115, kp′=−30 μA/V2k'_p = -30\ \mu\mathrm A/\mathrm V^2 e VTn=∣VTp∣V_{Tn} = |V_{Tp}|: Zp/Zn=115/30≈3,83Z_p/Z_n = 115/30 \approx 3{,}83; per Zn=3Z_n = 3 serve Zp≈11,5Z_p \approx 11{,}5.

Formula (margini di rumore dell'inverter CMOS). VILV_{IL} e VIHV_{IH} sono i punti con pendenza −1-1 (le uscite VOH=VDDV_{OH}=V_{DD} e VOL=0V_{OL}=0 sono le tensioni nominali): NML=VIL−VOL=VIL,NMH=VOH−VIH=VDD−VIH.NM_L=V_{IL}-V_{OL}=V_{IL},\qquad NM_H=V_{OH}-V_{IH}=V_{DD}-V_{IH}.

Esempio. Per l'inverter bilanciato con VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V: VIL=1,04 VV_{IL} = 1{,}04\ \mathrm V e VIH=1,46 VV_{IH} = 1{,}46\ \mathrm V, quindi NML=1,04 VNM_L = 1{,}04\ \mathrm V e NMH=2,5−1,46=1,04 VNM_H = 2{,}5 - 1{,}46 = 1{,}04\ \mathrm V.

Invertitore CMOS - ritardo di propagazione

Formula (tempi di propagazione dell'inverter CMOS). Quando VinV_{in} passa da 00 a VDDV_{DD} il p-MOS si spegne e l'n-MOS si accende: la capacità di carico CLC_L (carica a VDDV_{DD}) si scarica attraverso RnR_n (transizione alto →\to basso, HL). Quando VinV_{in} passa da VDDV_{DD} a 00 il p-MOS carica CLC_L attraverso RpR_p (transizione basso →\to alto, LH). Entrambi sono circuiti RC con costante di tempo τ=RCL\tau=RC_L; la tensione di uscita in una carica da 00 è Vout(t)=VDD (1−e−t/τ)V_{out}(t)=V_{DD}\,(1-e^{-t/\tau}) e raggiunge il 50%50\% di VDDV_{DD} quando e−t/τ=12e^{-t/\tau}=\tfrac12: tp=ln⁡2  τ=0,69 R C.t_p=\ln2\;\tau=0{,}69\,R\,C. Quindi tpHL=0,69 Rn CL,tpLH=0,69 Rp CL\boxed{t_{pHL}=0{,}69\,R_n\,C_L,\qquad t_{pLH}=0{,}69\,R_p\,C_L}

Esempio. Con Rn=6,5 kΩR_n = 6{,}5\ \mathrm{k\Omega} e CL=20 fFC_L = 20\ \mathrm{fF}: tpHL=0,69⋅6,5 kΩ⋅20 fF≈90 pst_{pHL} = 0{,}69 \cdot 6{,}5\ \mathrm{k\Omega} \cdot 20\ \mathrm{fF} \approx 90\ \mathrm{ps}.

Definizione (capacità di carico: intrinseca ed estrinseca). CLC_L è la somma di due contributi:

  • capacità intrinseca CintC_{int}: dovuta ai transistor che pilotano il nodo di uscita, cioè le capacità di drain di n-MOS e p-MOS, Cint=Cdn+CdpC_{int}=C_{dn}+C_{dp} (più, in modelli accurati, l'accoppiamento gate-drain);
  • capacità estrinseca CextC_{ext}: i gate delle porte pilotate (Cg3+Cg4C_{g3}+C_{g4} se il carico è un altro inverter) più la capacità dell'interconnessione CwC_w.

Quindi CL=Cd1+Cd2+Cg3+Cg4+Cw=Cint+CextC_L=C_{d1}+C_{d2}+C_{g3}+C_{g4}+C_w=C_{int}+C_{ext}.

Esempio numerico (dati d'esame a 0,25 μm0{,}25\ \mu\mathrm m: Rn0=13 kΩR_{n0}=13\ \mathrm{k\Omega}, Rp0=31,5 kΩR_{p0}=31{,}5\ \mathrm{k\Omega}, Cd0=2 fF/μmC_{d0}=2\ \mathrm{fF}/\mu\mathrm m, L=0,25 μmL=0{,}25\ \mu\mathrm m). Inverter con Zn=2Z_n=2 (Wn=0,5 μmW_n=0{,}5\ \mu\mathrm m) e Zp=Zn Rp0/Rn0=4,85Z_p=Z_n\,R_{p0}/R_{n0}=4{,}85 (Wp=1,21 μmW_p=1{,}21\ \mu\mathrm m):

  • Rn=13/2=6,5 kΩR_n=13/2=6{,}5\ \mathrm{k\Omega}, Rp=31,5/4,85=6,5 kΩR_p=31{,}5/4{,}85=6{,}5\ \mathrm{k\Omega} (uguali: bilanciato dinamicamente);
  • Cdn=2⋅0,5=1,0 fFC_{dn}=2\cdot0{,}5=1{,}0\ \mathrm{fF}, Cdp=2⋅1,21=2,42 fFC_{dp}=2\cdot1{,}21=2{,}42\ \mathrm{fF}, Cint=3,42 fFC_{int}=3{,}42\ \mathrm{fF};
  • senza carico esterno: tp=0,69⋅6,5 kΩ⋅3,42 fF=15,4 pst_p=0{,}69\cdot6{,}5\ \mathrm{k\Omega}\cdot3{,}42\ \mathrm{fF}=15{,}4\ \mathrm{ps}; con Cext=20 fFC_{ext}=20\ \mathrm{fF}: tpHL=tpLH=0,69⋅6,5⋅23,42=105 pst_{pHL}=t_{pLH}=0{,}69\cdot6{,}5\cdot23{,}42=105\ \mathrm{ps}.

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

Formula (ritardi dell'inverter con Zp = β Zn, solo carico intrinseco). Posto Zp=βZnZ_p=\beta Z_n e Rp0=r Rn0R_{p0}=r\,R_{n0} (con r=Rp0/Rn0r=R_{p0}/R_{n0}; qui r=2,42r=2{,}42): Cdp=βCdn,Rp=rβRn,C_{dp}=\beta C_{dn},\qquad R_p=\frac{r}{\beta}R_n, tpHL=0,69 RnCdn(1+β),tpLH=0,69 RnCdn rβ(1+β)(solo carico intrinseco).t_{pHL}=0{,}69\,R_nC_{dn}(1+\beta),\qquad t_{pLH}=0{,}69\,R_nC_{dn}\,\frac{r}{\beta}(1+\beta)\quad(\text{solo carico intrinseco}).

Esempio. Con r=2,42r = 2{,}42 e β=r\beta = r si ha Rp=RnR_p = R_n e quindi tpLH=tpHLt_{pLH} = t_{pHL}; con β=1\beta = 1 è Rp=2,42 RnR_p = 2{,}42\,R_n e tpLHt_{pLH} risulta maggiore di tpHLt_{pHL}.

Formula (bilanciamento dinamico e rapporto ottimo per il ritardo medio).

  • Il bilanciamento dinamico è la condizione tpHL=tpLHt_{pHL}=t_{pLH}, cioè Rp=RnR_p=R_n, cioè β=r\beta=r. Diverso dal bilanciamento statico (β=kn′/∣kp′∣=3,83\beta=k'_n/\lvert k'_p\rvert=3{,}83 per i dati del corso): il primo uguaglia le resistenze, il secondo le soglie.
  • Con un carico a gate (inverter che ne pilota un altro, CgC_{g} del p-MOS ∝β\propto\beta): CL=Cd1n(1+β)+Cg3n(1+β)+CwC_L=C_{d1n}(1+\beta)+C_{g3n}(1+\beta)+C_w e tp=0,692Rn[(Cd1n+Cg3n)(1+β)+Cw](1+rβ).t_p=\frac{0{,}69}{2}R_n\Big[(C_{d1n}+C_{g3n})(1+\beta)+C_w\Big]\Big(1+\frac r\beta\Big). Se CwC_w è trascurabile, tp∝(1+β)(1+r/β)=1+r+β+r/βt_p\propto(1+\beta)(1+r/\beta)=1+r+\beta+r/\beta, e annullando la derivata (1−r/β2=01-r/\beta^2=0) si trova il minimo per βopt=r\beta_{opt}=\sqrt r (con interconnessioni, βopt=r (1+Cw/(Cd1n+Cg3n))\beta_{opt}=\sqrt{r\,(1+C_w/(C_{d1n}+C_{g3n}))}): il rapporto che minimizza il ritardo medio è più piccolo di quello del bilanciamento (qui 1,561{,}56 contro 2,422{,}42), perché un p-MOS più largo carica di più anche il gate dello stadio precedente. Il guadagno è modesto: con Rn0=13 kΩR_{n0}=13\ \mathrm{k\Omega}, Cd1n=0,5 fFC_{d1n}=0{,}5\ \mathrm{fF}, Cg3n=0,31 fFC_{g3n}=0{,}31\ \mathrm{fF} per Zn=1Z_n=1: tp=23,8 pst_p=23{,}8\ \mathrm{ps} per β=1,56\beta=1{,}56, 24,9 ps24{,}9\ \mathrm{ps} per β=2,42\beta=2{,}42 e per β=1\beta=1, 29,3 ps29{,}3\ \mathrm{ps} per β=4\beta=4 (la curva è simmetrica in β↔r/β\beta\leftrightarrow r/\beta).

Esempio. Con r=2,42r = 2{,}42: il bilanciamento dinamico richiede β=2,42\beta = 2{,}42, mentre il ritardo medio con carico a gate è minimo per βopt=2,42≈1,56\beta_{opt} = \sqrt{2{,}42} \approx 1{,}56.

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

Formula (ritardo di un inverter scalato di un fattore S). Sia Zp=rZnZ_p=rZ_n (bilanciato dinamicamente), Rn=Rp=RrefR_n=R_p=R_{ref} e Cint,ref=Cdn+CdpC_{int,ref}=C_{dn}+C_{dp} la capacità intrinseca dell'inverter di riferimento (quello minimo). Allora tp=0,69 Rref (Cint,ref+Cext)=tp0(1+CextCint,ref),tp0=0,69 RrefCint,ref.t_p=0{,}69\,R_{ref}\,(C_{int,ref}+C_{ext})=t_{p0}\Big(1+\frac{C_{ext}}{C_{int,ref}}\Big),\qquad t_{p0}=0{,}69\,R_{ref}C_{int,ref}. Moltiplicando ZnZ_n e ZpZ_p per un fattore SS: R→Rref/SR\to R_{ref}/S e Cint→S Cint,refC_{int}\to S\,C_{int,ref}, quindi tp=0,69RrefS(S Cint,ref+Cext)=tp0(1+CextS Cint,ref).t_p=0{,}69\frac{R_{ref}}{S}\big(S\,C_{int,ref}+C_{ext}\big)=t_{p0}\Big(1+\frac{C_{ext}}{S\,C_{int,ref}}\Big).

Esempio. Inverter di riferimento Zn=1Z_n=1, Zp=2,42Z_p=2{,}42 (Rref=13 kΩR_{ref}=13\ \mathrm{k\Omega}, Cint,ref=0,5+1,21=1,71 fFC_{int,ref}=0{,}5+1{,}21=1{,}71\ \mathrm{fF}): tp0=0,69⋅13 kΩ⋅1,71 fF=15,4 pst_{p0}=0{,}69\cdot13\ \mathrm{k\Omega}\cdot1{,}71\ \mathrm{fF}=15{,}4\ \mathrm{ps}. Con Cext=50 fFC_{ext}=50\ \mathrm{fF}: S=1S=1: 464 ps464\ \mathrm{ps}; S=2S=2: 240 ps240\ \mathrm{ps}; S=5S=5: 105 ps105\ \mathrm{ps}; S=10S=10: 60 ps60\ \mathrm{ps}; S=100S=100: 19,8 ps19{,}8\ \mathrm{ps}; limite 15,4 ps15{,}4\ \mathrm{ps}. Da S=10S=10 in poi il guadagno marginale è piccolo mentre area e capacità di ingresso (che carica lo stadio precedente) crescono: è l'idea del 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 →).

Grafico interattivo: Ritardo t_p (ps) in funzione del fattore di scala S (asse logaritmico) per C_ext = 50 fF: da 464 ps (S = 1) a 240, 105 e 60 ps (S = 2, 5, 10), poi la curva si appiattisce sul limite t_p0 = 15,3 ps del solo carico intrinseco

Catene di inverter e buffer CMOS

Formula (ritardo di una catena di inverter). Siano NN inverter in cascata, con capacità di gate in ingresso Cgin,1,…,Cgin,NC_{gin,1},\dots,C_{gin,N} e carico finale Cgin,N+1=CLC_{gin,N+1}=C_L. Lo stadio jj è dimensionato come l'inverter di riferimento scalato di SjS_j, quindi Cgin,j=SjCg,refC_{gin,j}=S_jC_{g,ref} e Cint,j=SjCint,refC_{int,j}=S_jC_{int,ref}. Il suo carico è la capacità intrinseca più l'ingresso dello stadio seguente: CL,j=Cint,j+Cgin,j+1C_{L,j}=C_{int,j}+C_{gin,j+1}. Definito il fan-out fj=Cext,jCgin,j=Cgin,j+1Cgin,jf_j=\dfrac{C_{ext,j}}{C_{gin,j}}=\dfrac{C_{gin,j+1}}{C_{gin,j}} e γ=Cint,refCg,ref\gamma=\dfrac{C_{int,ref}}{C_{g,ref}} (rapporto tra capacità intrinseca e capacità di gate: tipicamente 11–22): tp,j=tp0(1+Cgin,j+1γ Cgin,j)=tp0(1+fjγ),tp=∑j=1Ntp,j.t_{p,j}=t_{p0}\Big(1+\frac{C_{gin,j+1}}{\gamma\,C_{gin,j}}\Big)=t_{p0}\Big(1+\frac{f_j}{\gamma}\Big),\qquad t_p=\sum_{j=1}^Nt_{p,j}.

Esempio. Con tp0=15,4 pst_{p0} = 15{,}4\ \mathrm{ps}, γ=1\gamma = 1 e fan-out f=4f = 4 ogni stadio ritarda tp0 (1+4)=77 pst_{p0}\,(1 + 4) = 77\ \mathrm{ps}.

Formula (dimensionamento ottimo della catena a N fissato). Le incognite sono Cgin,2,…,Cgin,NC_{gin,2},\dots,C_{gin,N} (N−1N-1 valori). Annullando le derivate parziali di tpt_p si ottiene Cgin,j+1Cgin,j=Cgin,jCgin,j−1,\frac{C_{gin,j+1}}{C_{gin,j}}=\frac{C_{gin,j}}{C_{gin,j-1}}, cioè tutti gli stadi hanno lo stesso fan-out ff (la dimensione di ciascuno è la media geometrica di quelle dei vicini, Cgin,j=Cgin,j−1Cgin,j+1C_{gin,j}=\sqrt{C_{gin,j-1}C_{gin,j+1}}) e quindi lo stesso ritardo. Posto F=CL/Cgin,1F=C_L/C_{gin,1}, si ha fN=Ff^N=F: f=FN,tp=N tp0(1+FNγ).f=\sqrt[N]{F},\qquad t_p=N\,t_{p0}\Big(1+\frac{\sqrt[N]F}{\gamma}\Big).

Esempio. Con F=64F = 64, N=3N = 3 e γ=1\gamma = 1: f=641/3=4f = 64^{1/3} = 4 e tp=3 tp0 (1+4)=15 tp0t_p = 3\,t_{p0}\,(1 + 4) = 15\,t_{p0}.

Formula (fan-out ottimo e numero ottimo di stadi). Con FF fissato, N=ln⁡F/ln⁡fN=\ln F/\ln f e il ritardo come funzione di ff è tp=tp0ln⁡Fln⁡f(1+fγ)t_p=t_{p0}\dfrac{\ln F}{\ln f}\Big(1+\dfrac f\gamma\Big). Annullando la derivata: ln⁡f=1+γf.\ln f=1+\frac\gamma f.

Esempio (con γ=1\gamma=1, in unità di tp0t_{p0}) per F=CL/Cin=64F=C_L/C_{in}=64:

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)

Consumo di potenza nei circuiti CMOS

Definizione (potenza istantanea e potenza media). La potenza istantanea assorbita dall'alimentazione è p(t)=VDD iDD(t)p(t)=V_{DD}\,i_{DD}(t); la potenza di picco è Pmax=VDD iDD,maxP_{max}=V_{DD}\,i_{DD,max} e la potenza media su un periodo TT è Pmedia=1T∫tt+Tp(τ) dτ=VDDT∫tt+TiDD(τ) dτ.P_{media}=\frac1T\int_t^{t+T}p(\tau)\,d\tau=\frac{V_{DD}}T\int_t^{t+T}i_{DD}(\tau)\,d\tau.

Esempio. Una corrente di alimentazione di 2 mA2\ \mathrm{mA} per il 10%10\% del periodo (e nulla altrove) con VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V dà Pmedia=2,5⋅2 mA⋅0,1=0,5 mWP_{media} = 2{,}5 \cdot 2\ \mathrm{mA} \cdot 0{,}1 = 0{,}5\ \mathrm{mW}.

Formula (energia assorbita dall'alimentazione nella carica di una capacità). Carica (uscita 0→VDD0\to V_{DD} attraverso il p-MOS): la corrente fornita da VDDV_{DD} è quella che entra in CLC_L, isupply=CL dvout/dti_{supply}=C_L\,dv_{out}/dt, quindi EDD=∫p dt=VDD∫0VDDCL dvout=CLVDD2.E_{DD}=\int p\,dt=V_{DD}\int_0^{V_{DD}}C_L\,dv_{out}=C_LV_{DD}^2.

Esempio. Con CL=50 fFC_L = 50\ \mathrm{fF} e VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V: EDD=50 fF⋅6,25 V2=312,5 fJE_{DD} = 50\ \mathrm{fF} \cdot 6{,}25\ \mathrm V^2 = 312{,}5\ \mathrm{fJ}, di cui 156,25 fJ156{,}25\ \mathrm{fJ} restano in CLC_L e altrettanti sono dissipati nel p-MOS.

Formula (potenza dinamica della logica CMOS). Un ciclo completo (carica e scarica) assorbe CLVDD2C_LV_{DD}^2. Se l'uscita compie f0→1f_{0\to1} transizioni 0→10\to1 al secondo, Pdin=CL VDD2 f0→1=α CL VDD2 fCLK.\boxed{P_{din}=C_L\,V_{DD}^2\,f_{0\to1}=\alpha\,C_L\,V_{DD}^2\,f_{CLK}}.

Esempio. CL=50 fFC_L=50\ \mathrm{fF}, VDD=2,5 VV_{DD}=2{,}5\ \mathrm V, α=1\alpha=1, f=100 MHzf=100\ \mathrm{MHz}: P=50⋅10−15⋅6,25⋅108=31,25 μWP=50\cdot10^{-15}\cdot6{,}25\cdot10^8=31{,}25\ \mu\mathrm W. A 1 GHz1\ \mathrm{GHz}: 312,5 μW312{,}5\ \mu\mathrm W. Con VDD=1,25 VV_{DD}=1{,}25\ \mathrm V (metà): 7,8 μW7{,}8\ \mu\mathrm W, un quarto.

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)

IV. Porte logiche CMOS e processo di fabbricazione

Porte logiche CMOS - struttura statica complementare e dimensionamento

Definizione (porta CMOS statica complementare: reti PDN e PUN duali). Una porta statica complementare è formata da

  • una rete di pull-down (PDN) di n-MOS tra l'uscita e massa;
  • una rete di pull-up (PUN) di p-MOS tra VDDV_{DD} e l'uscita;
  • gli stessi ingressi pilotano i gate di entrambe.

La PDN, con i transistor chiusi sugli ingressi alti, realizza la funzione f(A,B,… )f(A,B,\dots) e, quando conduce, porta l'uscita a 00: l'uscita è F=f‾F=\overline{f}. La PUN è la duale della PDN: dove la PDN ha una serie, la PUN ha un parallelo, e viceversa. Per costruire la PDN a partire dalla funzione: F=f‾F=\overline{f}, con ff in forma AND (serie) / OR (parallelo) di sottoreti; la PUN si ottiene scambiando serie e parallelo (scomposizione gerarchica in sottoreti). Così per ogni combinazione degli ingressi esattamente una delle due reti conduce: non c'è mai un cammino diretto VDDV_{DD}-massa (consumo statico nullo) e l'uscita non è mai flottante.

Esempio. La NAND2 F=AB‾F = \overline{AB} ha PDN con due n-MOS in serie e PUN con due p-MOS in parallelo: per AB=11AB = 11 conduce solo la PDN (F=0F = 0), per AB=10AB = 10 solo la PUN (F=1F = 1).

Formula (dimensionamento con la regola del cammino più lungo).

porta ZnZ_n (n-MOS) ZpZ_p (p-MOS)
inverter 11 rr
NAND2 22 ciascuno (serie di 2) rr ciascuno (paralleli)
NOR2 11 ciascuno (paralleli) 2r2r ciascuno (serie di 2)
NAND3 33 rr
NOR3 11 3r3r
D+A(B+C)‾\overline{D+A(B+C)} DD: 11; A,B,CA,B,C: 22 (cammini A BA\,B, A CA\,C di 2) D,B,CD,B,C: 3r3r (cammino D B CD\,B\,C di 3); AA: 2r2r (cammino D AD\,A di 2)

Esempio. Con r=2,42r = 2{,}42: la NAND2 ha Zn=2Z_n = 2 e Zp=2,42Z_p = 2{,}42, la NOR2 ha Zn=1Z_n = 1 e Zp=2r=4,84Z_p = 2r = 4{,}84, la NAND3 ha Zn=3Z_n = 3 e Zp=2,42Z_p = 2{,}42.

Formula (dimensionamento per una resistenza assegnata). Dimensionamento per un valore assegnato. Dato che nel caso peggiore la resistenza del pull-down vale RPD=m Rn0ZnR_{PD}=m\,\dfrac{R_{n0}}{Z_n} (mm n-MOS in serie di fattore ZnZ_n uguale), per ottenere RPD=R∗R_{PD}=R^* occorre Zn=m Rn0/R∗Z_n=m\,R_{n0}/R^*. Analogamente Zp=m′ Rp0/R∗Z_p=m'\,R_{p0}/R^* per il pull-up (con m′m' p-MOS in serie nel cammino peggiore). Per avere pull-up uguale al pull-down basta RPU=RPDR_{PU}=R_{PD}.

Esempio. F=A⋅B+C‾F=\overline{A\cdot B+C}, Rn0=10 kΩR_{n0}=10\ \mathrm{k\Omega}, Rp0=20 kΩR_{p0}=20\ \mathrm{k\Omega}. PDN: serie di AA e BB in parallelo a CC; PUN: CC in serie al parallelo di AA e BB. Il cammino peggiore del pull-down è AA–BB (m=2m=2): per RPD=10 kΩR_{PD}=10\ \mathrm{k\Omega} serve Zn=2⋅10/10=2Z_n=2\cdot10/10=2 per tutti gli n-MOS (R=5 kΩR=5\ \mathrm{k\Omega} ciascuno). Il cammino peggiore del pull-up è CC + uno tra AA, BB (m′=2m'=2): RPU=10 kΩ⇒Zp=2⋅20/10=4R_{PU}=10\ \mathrm{k\Omega}\Rightarrow Z_p=2\cdot20/10=4. Esercizio completo: Esercizio 1 · porta AOI a tre ingressi, dimensionamento, ritardi e consumo dinamico (tema d'esame giugno 2025).

Porte logiche CMOS - ritardo di Elmore, fan-in e consumo

Formula (caso peggiore di NAND2 e NOR2). Se Rn=Rp=RR_n=R_p=R (n-MOS e p-MOS con resistenze equivalenti uguali), nel caso peggiore tpLH=0,69RCLt_{pLH}=0{,}69RC_L e tpHL=0,69⋅2RCLt_{pHL}=0{,}69\cdot2RC_L, quindi 2 tpLH=tpHL2\,t_{pLH}=t_{pHL}. Per una NOR a 2 ingressi i ruoli si invertono: tpHL=0,69 RnCLt_{pHL}=0{,}69\,R_nC_L (un solo n-MOS acceso nel caso peggiore) e tpLH=0,69⋅2RpCLt_{pLH}=0{,}69\cdot2R_pC_L, quindi tpLH=2 tpHLt_{pLH}=2\,t_{pHL} (con Rn=RpR_n=R_p). Per questo, se tutti i transistor sono di dimensione minima, è conveniente dimensionare la porta con la regola del cammino più lungo (così RPU=RPD=RrefR_{PU}=R_{PD}=R_{ref} nel caso peggiore).

Esempio. NAND2 con Rn=Rp=10 kΩR_n = R_p = 10\ \mathrm{k\Omega} e CL=20 fFC_L = 20\ \mathrm{fF}: tpLH=0,69⋅10 kΩ⋅20 fF≈138 pst_{pLH} = 0{,}69 \cdot 10\ \mathrm{k\Omega} \cdot 20\ \mathrm{fF} \approx 138\ \mathrm{ps} e tpHL=2 tpLH≈276 pst_{pHL} = 2\,t_{pLH} \approx 276\ \mathrm{ps}.

Formula (ritardo di Elmore per una catena di transistor in serie). Con mm transistor in serie si ha una catena R1,R2,…,RmR_1,R_2,\dots,R_m con una capacità CkC_k a ciascun nodo. Il ritardo al 50%50\% del nodo di uscita, approssimato con il metodo di Elmore, è τ=∑k=1mCk Rkpath,tp=0,69 τ,\tau=\sum_{k=1}^mC_k\,R_{k}^{path},\qquad t_p=0{,}69\,\tau, dove RkpathR_k^{path} è la resistenza condivisa tra il cammino della corrente verso il nodo kk e quello verso l'uscita: per una catena a partire dal generatore (massa o VDDV_{DD}), la resistenza totale tra il nodo kk e il generatore. Per NN n-MOS in serie con resistenza equivalente RnR_n ciascuno, numerando C1C_1 il nodo vicino a massa e CN=CLC_N=C_L l'uscita: tpHL=0,69 Rn (C1+2C2+3C3+⋯+N CL).t_{pHL}=0{,}69\,R_n\,(C_1+2C_2+3C_3+\dots+N\,C_L).

Esempio numerico. NAND a 3 ingressi, Zn=3Z_n=3, Zp=r=2,42Z_p=r=2{,}42 (dati del corso: Rn0=13 kΩR_{n0}=13\ \mathrm{k\Omega}, Rp0=31,5 kΩR_{p0}=31{,}5\ \mathrm{k\Omega}, Cd0=2 fF/μmC_{d0}=2\ \mathrm{fF}/\mu\mathrm m, L=0,25 μmL=0{,}25\ \mu\mathrm m), Cext=10 fFC_{ext}=10\ \mathrm{fF}.

  • Rn=13/3=4,33 kΩR_n=13/3=4{,}33\ \mathrm{k\Omega} per transistor; Rp=31,5/2,42=13 kΩR_p=31{,}5/2{,}42=13\ \mathrm{k\Omega}.
  • Cdn=2⋅0,75=1,5 fFC_{dn}=2\cdot0{,}75=1{,}5\ \mathrm{fF}, Cdp=2⋅0,606=1,21 fFC_{dp}=2\cdot0{,}606=1{,}21\ \mathrm{fF}.
  • Nodi interni (tra due n-MOS: source e drain): C1=C2=2⋅1,5=3,0 fFC_1=C_2=2\cdot1{,}5=3{,}0\ \mathrm{fF}; uscita: un drain n-MOS e tre drain p-MOS più il carico: CL=1,5+3⋅1,21+10=15,1 fFC_L=1{,}5+3\cdot1{,}21+10=15{,}1\ \mathrm{fF}.
  • tpHL=0,69⋅4,33 kΩ (3+2⋅3+3⋅15,1) fF=0,69⋅4,33⋅54,4=163 pst_{pHL}=0{,}69\cdot4{,}33\ \mathrm{k\Omega}\,(3+2\cdot3+3\cdot15{,}1)\ \mathrm{fF}=0{,}69\cdot4{,}33\cdot54{,}4=163\ \mathrm{ps}.
  • tpLHt_{pLH} (caso peggiore, un solo p-MOS acceso): 0,69⋅13 kΩ⋅15,1 fF=136 ps0{,}69\cdot13\ \mathrm{k\Omega}\cdot15{,}1\ \mathrm{fF}=136\ \mathrm{ps} (migliore: 45 ps45\ \mathrm{ps}). Con lo stesso carico un inverter di riferimento impiega 105 ps105\ \mathrm{ps}: la NAND3 è più lenta di circa il 55%55\% nel caso peggiore, anche se è stata dimensionata per uguagliarne la resistenza, a causa dei nodi interni e delle capacità di uscita maggiori.

Formula (ritardo di NOR e NAND a N ingressi: dipendenza quadratica dal fan-in). Con tutti i transistor della stessa dimensione e trascurando le capacità dei nodi interni, per una NOR a NN ingressi (PUN: NN p-MOS in serie; PDN: NN n-MOS in parallelo), detta CC la capacità di drain e source di ogni transistor:

  • il nodo di uscita ha NN drain di n-MOS e uno di p-MOS: Cout=(N+1) CC_{out}=(N+1)\,C;
  • tpLH=0,69 Rp N (N+1) Ct_{pLH}=0{,}69\,R_p\,N\,(N+1)\,C (caso peggiore: NN p-MOS in serie, resistenza NRpN R_p, capacità (N+1)C(N+1)C) — quadratico in NN;
  • tpHL=0,69 Rn (N+1) Ct_{pHL}=0{,}69\,R_n\,(N+1)\,C (un solo n-MOS acceso): lineare. Analogamente per una NAND a NN ingressi: tpHL=0,69RnN(N+1)Ct_{pHL}=0{,}69R_nN(N+1)C e tpLH=0,69Rp(N+1)Ct_{pLH}=0{,}69R_p(N+1)C. Se si considerassero anche i nodi interni, con capacità 2C2C, il ritardo diventerebbe 2⋅0,69RpCN22\cdot0{,}69R_pCN^2.

Esempio. Rp=10 kΩR_p=10\ \mathrm{k\Omega}, C=2 fFC=2\ \mathrm{fF}: tpLH=0,69⋅10 kΩ⋅2 fF⋅N(N+1)=13,8 ps⋅N(N+1)t_{pLH}=0{,}69\cdot10\ \mathrm{k\Omega}\cdot2\ \mathrm{fF}\cdot N(N+1)=13{,}8\ \mathrm{ps}\cdot N(N+1): N=2N=2: 83 ps83\ \mathrm{ps}; N=4N=4: 276 ps276\ \mathrm{ps} (3,33{,}3 volte); N=8N=8: 994 ps994\ \mathrm{ps} (1212 volte). In generale tp=a1FI+a2FI2+a3FOt_p=a_1FI+a_2FI^2+a_3FO: dipendenza quadratica dal fan-in (resistenza e capacità crescono entrambe) e lineare dal fan-out (ogni porta pilotata aggiunge due capacità di gate a CLC_L). Si evitano porte con fan-in maggiore di 4.

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 di fabbricazione CMOS, layout e parassiti

Formula (resistenza di una pista e resistenza quadra).

  1. Resistenze: ogni layer ha resistività non nulla. Per una pista di lunghezza LL, larghezza WW e spessore TT: R=ρLWT=R□LWR=\rho\dfrac{L}{WT}=R_\square\dfrac LW, con la resistenza quadra R□=ρ/TR_\square=\rho/T (in Ω/□\Omega/\square) e L/WL/W numero di quadrati. Esempio: pista di polisilicio con R□=70 Ω/□R_\square=70\ \Omega/\square, lunga 32 μm32\ \mu\mathrm m e larga 0,4 μm0{,}4\ \mu\mathrm m: 8080 quadrati, R=5600 ΩR=5600\ \Omega. Solo LL e WW sono parametri del progettista.

Esempio. Pista di polisilicio con R□=70 Ω/□R_\square = 70\ \Omega/\square, lunga 32 μm32\ \mu\mathrm m e larga 0,4 μm0{,}4\ \mu\mathrm m: L/W=80L/W = 80 quadrati e R=80⋅70=5600 ΩR = 80 \cdot 70 = 5600\ \Omega.

Formula (capacità di una pista: area e bordo). 2. Capacità: ogni layer forma con il bulk una capacità con l'ossido come dielettrico, C=Cox⋅W⋅LC=C_{ox}\cdot W\cdot L (sottile sotto il gate; spesso, e quindi molto più piccola per unità di area, altrove). Per una pista si conta l'area e il bordo (i campi di bordo, fringing): C=CA⋅A+Cb⋅PC=C_A\cdot A+C_b\cdot P con CAC_A in fF/μm2\mu\mathrm m^2 e CbC_b in fF/μm\mu\mathrm m. Ci sono anche le capacità tra layer sovrapposti e le capacità mutue tra piste parallele (inversamente proporzionali alla distanza: cross-talk).

Esempio. Pista di 100 μm×0,25 μm100\ \mu\mathrm m \times 0{,}25\ \mu\mathrm m con CA=0,4 fF/μm2C_A = 0{,}4\ \mathrm{fF}/\mu\mathrm m^2 e Cb=0,1 fF/μmC_b = 0{,}1\ \mathrm{fF}/\mu\mathrm m: C=0,4⋅25+0,1⋅200=30 fFC = 0{,}4 \cdot 25 + 0{,}1 \cdot 200 = 30\ \mathrm{fF}.

Logica pseudo-nMOS e logiche a carico

Formula (livello logico basso della logica pseudo-nMOS). Con Vin=VDDV_{in}=V_{DD} e un solo ramo conduttivo (caso peggiore, PDN equivalente con fattore ZnZ_n) l'n-MOS ha VDS=VOLV_{DS}=V_{OL} piccolo ed è in zona lineare, il p-MOS ha VSD=VDD−VOLV_{SD}=V_{DD}-V_{OL} grande ed è in saturazione (per VSD≥VDD−∣VTp∣V_{SD}\ge V_{DD}-\lvert V_{Tp}\rvert). Uguagliando le correnti: kn′Zn[(VDD−VTn)VOL−VOL22]=∣kp′∣2Zp (VDD−∣VTp∣)2 (1+∣λp∣(VDD−VOL)).k'_nZ_n\Big[(V_{DD}-V_{Tn})V_{OL}-\frac{V_{OL}^2}2\Big]=\frac{\lvert k'_p\rvert}2Z_p\,(V_{DD}-\lvert V_{Tp}\rvert)^2\,\big(1+\lvert\lambda_p\rvert(V_{DD}-V_{OL})\big). Equazione di secondo grado in VOLV_{OL} (scegliere la radice con VOL<VDD−VTnV_{OL}<V_{DD}-V_{Tn}). Si verifica poi la regione dei due transistor. Per VOL≪VDD−VTnV_{OL}\ll V_{DD}-V_{Tn} e λ=0\lambda=0 vale l'approssimazione VOL≈∣kp′∣Zp (VDD−∣VTp∣)22 kn′Zn (VDD−VTn).V_{OL}\approx\frac{\lvert k'_p\rvert Z_p\,(V_{DD}-\lvert V_{Tp}\rvert)^2}{2\,k'_nZ_n\,(V_{DD}-V_{Tn})}.

Esempio (kn′=115k'_n=115, kp′=−30 μA/V2k'_p=-30\ \mu\mathrm A/\mathrm V^2, VTn=0,4V_{Tn}=0{,}4, VTp=−0,4 VV_{Tp}=-0{,}4\ \mathrm V, λn=0,06\lambda_n=0{,}06, λp=−0,1 V−1\lambda_p=-0{,}1\ \mathrm V^{-1}, VDD=2,5 VV_{DD}=2{,}5\ \mathrm V). Inverter pseudo-nMOS con Zn=4Z_n=4, Zp=2Z_p=2: VOL=0,176 VV_{OL}=0{,}176\ \mathrm V (con λ=0\lambda=0: 0,142 V0{,}142\ \mathrm V; l'approssimazione dà 0,137 V0{,}137\ \mathrm V). Con Zn=6Z_n=6, Zp=2Z_p=2: 0,116 V0{,}116\ \mathrm V. Più grande è Zn/ZpZ_n/Z_p, più basso è il livello; ma VOLV_{OL} non può mai raggiungere 00. La porta riesce a pilotare un ingresso solo se VOL<VILV_{OL}<V_{IL} della porta pilotata con margine sufficiente; ogni riduzione di VOLV_{OL} costa area.

Formula (ritardi della logica pseudo-nMOS).

Esempio. Con Rn=3,25 kΩR_n = 3{,}25\ \mathrm{k\Omega}, Rp=15,75 kΩR_p = 15{,}75\ \mathrm{k\Omega} e CL=23 fFC_L = 23\ \mathrm{fF}: tpHL=0,69⋅3,25⋅23≈52 pst_{pHL} = 0{,}69 \cdot 3{,}25 \cdot 23 \approx 52\ \mathrm{ps} e tpLH=0,69⋅15,75⋅23≈250 pst_{pLH} = 0{,}69 \cdot 15{,}75 \cdot 23 \approx 250\ \mathrm{ps}.

Logica a pass-transistor e gate di trasmissione

Formula (livello alto trasmesso da un pass-transistor n-MOS). Un n-MOS con il gate a VDDV_{DD} trasmette bene il livello basso: porta il nodo di uscita a 00 perché VGS=VDD>VTnV_{GS}=V_{DD}>V_{Tn} finché il nodo scende. Trasmette invece male il livello alto: se l'ingresso è VDDV_{DD} l'uscita sale finché VGS=VDD−VoutV_{GS}=V_{DD}-V_{out} scende fino a VTnV_{Tn}, quindi si ferma a VOH=VDD−VTn,V_{OH}=V_{DD}-V_{Tn},

Esempio. Con VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V e una soglia VT≃0,71 VV_T \simeq 0{,}71\ \mathrm V (con effetto body) l'uscita alta è 2,5−0,71=1,79 V2{,}5 - 0{,}71 = 1{,}79\ \mathrm V.

Formula (ritardo di Elmore di una catena di pass-transistor). Una catena di nn pass-transistor equivale a una scala RC: nn resistenze ReqR_{eq} in serie, con una capacità CC (somma di source, drain) per nodo. Il ritardo di Elmore (peso kk per la capacità del nodo kk, perché vede kk resistenze: 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 →) è tp=0,69 ReqC (1+2+⋯+n)=0,69 ReqC n(n+1)2 ∝n2.t_p=0{,}69\,R_{eq}C\,\big(1+2+\dots+n\big)=0{,}69\,R_{eq}C\,\frac{n(n+1)}2\ \propto n^2.

Esempio. Con ReqC=10 psR_{eq}C = 10\ \mathrm{ps} e n=16n = 16: tp=0,69⋅10 ps⋅16⋅172≈938 pst_p = 0{,}69 \cdot 10\ \mathrm{ps} \cdot \frac{16 \cdot 17}{2} \approx 938\ \mathrm{ps}.

Formula (buffer in una catena di pass-transistor: m ottimo). Il ritardo cresce col quadrato del numero di stadi. Per ridurlo si inseriscono buffer (inverter, che rigenerano il livello e interrompono la scala) ogni mm pass-transistor: tp=nm⋅0,69 ReqC m(m+1)2+(nm−1)tbuf ≈ n(0,345 mReqC+tbufm),t_p=\frac nm\cdot0{,}69\,R_{eq}C\,\frac{m(m+1)}2+\Big(\frac nm-1\Big)t_{buf}\ \approx\ n\Big(0{,}345\,mR_{eq}C+\frac{t_{buf}}m\Big), con minimo per mopt=tbuf0,345 ReqC≈1,7tbufReqC.m_{opt}=\sqrt{\frac{t_{buf}}{0{,}345\,R_{eq}C}}\approx1{,}7\sqrt{\frac{t_{buf}}{R_{eq}C}}.

Esempio: n=16n=16, Req=5 kΩR_{eq}=5\ \mathrm{k\Omega}, C=2 fFC=2\ \mathrm{fF} (ReqC=10 psR_{eq}C=10\ \mathrm{ps}), tbuf=50 pst_{buf}=50\ \mathrm{ps}. Senza buffer tp=0,69⋅10 ps⋅136=938 pst_p=0{,}69\cdot10\ \mathrm{ps}\cdot136=938\ \mathrm{ps}; con un buffer ogni mm stadi: m=2m=2: 516 ps516\ \mathrm{ps}; m=3m=3: 437 ps437\ \mathrm{ps}; m=4m=4: 426 ps426\ \mathrm{ps}; m=6m=6: 470 ps470\ \mathrm{ps}; mopt=1,75=3,8m_{opt}=1{,}7\sqrt5=3{,}8. Il buffer è utile anche perché ripristina il livello degradato: perciò inserire buffer in una lunga catena di pass-transistor serve a ripristinare i livelli logici e a ridurre il ritardo complessivo.

Logiche dinamiche - precarica e valutazione

Definizione (porta dinamica: fasi di precarica e di valutazione). Funzionamento in due fasi:

  1. Precarica (Clk=0Clk=0): MpM_p acceso, MeM_e spento. L'uscita viene caricata a VDDV_{DD} (attraverso RpR_p, con costante di tempo RpCLR_pC_L, tpLHt_{pLH} della precarica), indipendentemente dagli ingressi (nessun cammino a massa).
  2. Valutazione (Clk=1Clk=1): MpM_p spento, MeM_e acceso. Se la PDN conduce (ingressi tali che f=1f=1) l'uscita si scarica a 00 (tpHL=0,69RnCLt_{pHL}=0{,}69R_nC_L con la serie di PDN e MeM_e); altrimenti l'uscita resta a VDDV_{DD}, conservata come carica su CLC_L. Dunque dopo la valutazione F=f‾F=\overline f.

Esempio. Con VDD=2,5 VV_{DD} = 2{,}5\ \mathrm V: in precarica (Clk=0Clk = 0) l'uscita sale a 2,5 V2{,}5\ \mathrm V; in valutazione (Clk=1Clk = 1), se la PDN conduce, scende a 00 con tpHL=0,69 RnCLt_{pHL} = 0{,}69\,R_nC_L (per Rn=6,5 kΩR_n = 6{,}5\ \mathrm{k\Omega} e CL=20 fFC_L = 20\ \mathrm{fF}: 90 ps90\ \mathrm{ps}), altrimenti resta a 2,5 V2{,}5\ \mathrm V.

V. Elementi di memoria

Latch, registri e parametri temporali

Definizione (latch e registro). Nel libro adottato un latch è sensibile al livello del clock, un registro è edge-triggered (sensibile al fronte). Molti testi chiamano flip-flop i dispositivi edge-triggered. Le due famiglie:

  • latch trasparente a clock alto (positivo): se CLK=1CLK=1 l'uscita segue l'ingresso (Q=DQ=D), se CLK=0CLK=0 l'uscita mantiene il valore. Equazione: Q=CLK⋅D+CLK‾⋅QQ=CLK\cdot D+\overline{CLK}\cdot Q (un multiplexer con uscita retroazionata). Il latch negativo è il duale (trasparente per CLK=0CLK=0).
  • registro: campiona DD sul fronte del clock (di salita, per convenzione) e mantiene QQ per tutto il periodo.

Esempio. Latch positivo con CLK=1CLK = 1 e D=1D = 1: Q=1Q = 1; se poi CLK=0CLK = 0 e DD torna a 00, QQ resta 11. Un registro invece campiona DD solo sul fronte di salita del clock.

Definizione (tempo clock-uscita, di setup e di hold). Per un registro D (campionamento sul fronte di clock):

  • tempo di propagazione clock-uscita tc-qt_{c\text{-}q}: ritardo tra il fronte di clock e la commutazione dell'uscita QQ (non tra DD e QQ);
  • tempo di setup tsut_{su}: tempo per cui il dato DD deve rimanere stabile prima del fronte;
  • tempo di hold tholdt_{hold}: tempo per cui DD deve rimanere stabile dopo il fronte. Se DD cambia dentro la finestra [−tsu,+thold][-t_{su},+t_{hold}] attorno al fronte, il registro può non campionare correttamente o entrare in metastabilità (uscita a un livello intermedio per un tempo imprevedibile, che si ripercuote sugli stadi successivi).

Esempio. Con tc-q=0,4 nst_{c\text{-}q} = 0{,}4\ \mathrm{ns}, tsu=0,2 nst_{su} = 0{,}2\ \mathrm{ns} e thold=0,3 nst_{hold} = 0{,}3\ \mathrm{ns}: il dato deve restare stabile da 0,2 ns0{,}2\ \mathrm{ns} prima a 0,3 ns0{,}3\ \mathrm{ns} dopo il fronte, e l'uscita cambia 0,4 ns0{,}4\ \mathrm{ns} dopo il fronte.

Formula (periodo minimo e frequenza massima di clock). Tra due registri c'è una logica combinatoria con ritardo di propagazione massimo tp,logict_{p,logic} e minimo (di contaminazione) tcd,logict_{cd,logic}. Il dato lanciato dal primo registro deve arrivare al secondo prima che il fronte successivo cominci la sua finestra di setup: Tmin ≥ tc-q+tp,logicmax+tsu,fmax=1Tmin.T_{min}\ \ge\ t_{c\text{-}q}+t_{p,logic}^{max}+t_{su},\qquad f_{max}=\frac1{T_{min}}.

Esempio. Con tc-q=0,4 nst_{c\text{-}q} = 0{,}4\ \mathrm{ns}, tsu=0,2 nst_{su} = 0{,}2\ \mathrm{ns} e logica massima 1,6 ns1{,}6\ \mathrm{ns}: Tmin=2,2 nsT_{min} = 2{,}2\ \mathrm{ns} e fmax=455 MHzf_{max} = 455\ \mathrm{MHz}.

Formula (vincolo di hold). Per l'hold: il nuovo dato non deve arrivare al secondo registro troppo presto, cioè prima che sia scaduto il tempo di hold del fronte appena passato: tcd,reg+tcd,logic>tholdt_{cd,reg}+t_{cd,logic}>t_{hold} (con tcd,regt_{cd,reg} ritardo di contaminazione del registro, ≈tc-q\approx t_{c\text{-}q}). Il vincolo di hold non dipende dalla frequenza: se è violato non si risolve rallentando il clock. Si ripara aumentando il ritardo minimo (inserendo, per esempio, inverter in cascata tra i due registri).

Esempio. tc-q=0,4 nst_{c\text{-}q}=0{,}4\ \mathrm{ns}, tsu=0,2 nst_{su}=0{,}2\ \mathrm{ns}, logica massima 1,6 ns1{,}6\ \mathrm{ns}: Tmin=2,2 nsT_{min}=2{,}2\ \mathrm{ns}, fmax=455 MHzf_{max}=455\ \mathrm{MHz}. Hold: con thold=0,3 nst_{hold}=0{,}3\ \mathrm{ns} e logica minima 0,05 ns0{,}05\ \mathrm{ns}: 0,4+0,05=0,45>0,30{,}4+0{,}05=0{,}45>0{,}3: rispettato. Se i due registri fossero collegati direttamente (tcd,logic=0t_{cd,logic}=0) con tc-q=0,2 ns<thold=0,3 nst_{c\text{-}q}=0{,}2\ \mathrm{ns}<t_{hold}=0{,}3\ \mathrm{ns} la condizione sarebbe violata e il dato sbagliato si propagherebbe: la soluzione è inserire logica o ritardi (due inverter aggiungerebbero circa 0,1 ns0{,}1\ \mathrm{ns} ciascuno).

Registri dinamici, C2MOS, TSPC e registri a scorrimento

Definizione (registro a scorrimento). Un registro a scorrimento (shift register) è una cascata di NN registri D con lo stesso clock: l'uscita di ciascuno è l'ingresso del successivo e a ogni fronte il dato avanza di una posizione. Il primo registro riceve l'ingresso seriale; l'ultimo dà l'uscita seriale. Applicazioni:

  • conversione serie-parallelo: dopo NN fronti i bit entrati uno alla volta sono disponibili contemporaneamente sulle NN uscite;
  • conversione parallelo-serie: con un multiplexer in ingresso a ciascun registro che sceglie tra il dato parallelo (caricamento, load) e l'uscita del registro precedente (scorrimento);
  • linee di ritardo (un dato esce NN periodi dopo essere entrato), code FIFO, generatori di sequenze (LFSR).

Esempio. Registro a 44 bit, inizialmente 00000000, ingresso seriale 1,0,1,11,0,1,1 (un bit per fronte, scorrimento verso destra): 0000→1000→0100→1010→11010000\to1000\to0100\to1010\to1101.

Memorie a semiconduttore - struttura a matrice, decoder e ROM

Definizione (decoder di riga). Decoder di riga. Per NN bit di indirizzo AN−1…A0A_{N-1}\ldots A_0 ci sono 2N2^N WL; WLi=1WL_i=1 solo se l'indirizzo vale ii: WL0=A0‾ A1‾⋯AN−1‾WL_0=\overline{A_0}\,\overline{A_1}\cdots\overline{A_{N-1}} (AND di tutte le variabili o negate: una NOR di A0…AN−1A_0\ldots A_{N-1}). Con 55 ingressi servono 3232 WL, con 1414 ingressi 16 38416\,384 WL (porte con tanti ingressi sarebbero lentissime: 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 →). Si usa un decoder multistadio (predecodifica): si decodificano gruppi di indirizzi (per esempio WL0=(A0‾ A1‾)⋅(A2‾ A3‾ A4‾)WL_0=(\overline{A_0}\,\overline{A_1})\cdot(\overline{A_2}\,\overline{A_3}\,\overline{A_4})) e se ne combinano le uscite con porte a due ingressi, riducendo fan-in e ritardo.

Esempio. Con N=5N = 5 bit di indirizzo ci sono 25=322^5 = 32 word line; con N=14N = 14 bit sono 214=16 3842^{14} = 16\,384.

Definizione (ROM a MOS con struttura NOR). Per ogni bit line (BLjBL_j) c'è un dispositivo di pull-up (un p-MOS con gate a massa: è la logica pseudo-nMOS, 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 →), e le celle sono n-MOS con gate sulla WL e drain sulla BL, source a massa.

Esempio. Tre WL e quattro BL con transistor in (WL0;BL3,BL1,BL0)(WL_0;BL_3,BL_1,BL_0), (WL1;BL3,BL2)(WL_1;BL_3,BL_2) e (WL2;BL2,BL1)(WL_2;BL_2,BL_1) memorizzano WL0=0100WL_0=0100, WL1=0011WL_1=0011, WL2=1001WL_2=1001 (si legge BL3BL2BL1BL0BL_3BL_2BL_1BL_0; 00 dove c'è il transistor). Il caso è quello del tema Esercizio 8 · memoria ROM a NOR, contenuto, ritardo di word line, carichi e potenza (tema d'esame settembre 2026).

Definizione (ROM a MOS con struttura NAND). In ogni colonna gli n-MOS sono in serie (una catena per bit line). Tutte le WL sono alte tranne quella selezionata (bassa): il transistor della riga selezionata, se c'è, si spegne e interrompe la catena (la BL resta a VDDV_{DD}: 11); se la cella è programmata con un transistor "sempre acceso" (o è un semplice cortocircuito) la catena conduce e la BL va a 00. Quindi la logica è inversa a quella della NOR.

  • Non servono contatti verso massa o VDDV_{DD} per ogni cella: la cella è drasticamente più piccola.
  • Prestazioni peggiori: la catena di NN n-MOS ha resistenza ≈N Rn\approx N\,R_n e la scarica della BL è lenta (ritardo dominato dalla resistenza della serie). Confrontando una ROM a NOR con una a NAND: la struttura a NAND è più compatta ma meno veloce; la NOR è più veloce ma meno compatta.

Esempio. In una catena di 88 n-MOS con Rn=6,5 kΩR_n = 6{,}5\ \mathrm{k\Omega} la resistenza della serie è circa 8Rn=52 kΩ8 R_n = 52\ \mathrm{k\Omega}, otto volte quella di una cella di ROM a NOR: la scarica della bit line è otto volte più lenta.

Memorie non volatili - gate flottante, EPROM, EEPROM e Flash

Definizione (transistor a gate flottante). Per rendere riprogrammabile la cella si inserisce un secondo gate di polisilicio, il gate flottante (floating gate, FAMOS), completamente isolato da ossido, tra il canale e il gate di controllo.

  • Una carica (elettroni) intrappolata sul gate flottante vi rimane per anni (ritenzione tipica di circa 1010 anni) perché è circondata da ossido.
  • Gli elettroni sul gate flottante schermano il canale: la tensione di soglia vista dal gate di controllo aumenta di ΔVT=−QFG/Ccg\Delta V_T=-Q_{FG}/C_{cg}, dove CcgC_{cg} è la capacità tra gate di controllo e gate flottante. Esempio: 30003000 elettroni su Ccg=1 fFC_{cg}=1\ \mathrm{fF}: ΔVT=3000⋅1,6⋅10−19/10−15=0,48 V\Delta V_T=3000\cdot1{,}6\cdot10^{-19}/10^{-15}=0{,}48\ \mathrm V.
  • Un transistor programmato (carico) ha una soglia così alta da restare spento a tutte le tensioni di gate di lettura, fino a VDDV_{DD} (VT,prog>VDDV_{T,prog}>V_{DD}): equivale all'assenza del transistor nella ROM a NOR (la bit line resta a VDDV_{DD}: bit 11). Un transistor non programmato ha la soglia nominale e conduce con VWL=VDDV_{WL}=V_{DD}: bit 00.
  • La lettura non altera la carica: si porta la WL a VDDV_{DD} e si osserva se la bit line viene tirata giù.

Esempio. Con 30003000 elettroni sul gate flottante e Ccg=1 fFC_{cg} = 1\ \mathrm{fF}: ΔVT=3000⋅1,6⋅10−19/10−15=0,48 V\Delta V_T = 3000 \cdot 1{,}6 \cdot 10^{-19}/10^{-15} = 0{,}48\ \mathrm V.

Definizione (confronto tra le memorie non volatili).

tipo programmazione cancellazione transistor/cella
ROM a maschera in fabbricazione no 1 (o nessuno)
PROM elettrica, una volta no 1
EPROM portatori caldi collettiva, UV 1
EEPROM tunnel (FLOTOX) elettrica, per cella 2
Flash portatori caldi o tunnel elettrica, per blocco 1

Esempio. Per cancellare un solo bit: la EPROM cancella tutto il chip con UV (11 transistor per cella), la EEPROM la singola cella (22 transistor per cella), la Flash un blocco (11 transistor per cella).

SRAM e DRAM

Proprietà (dimensionamento della cella SRAM a 6 transistor). La SRAM ha quindi un dimensionamento con vincoli opposti: driver > accesso (lettura) e accesso > pull-up (scrittura): pull-up < accesso < driver.

Esempio. Con fattori di forma Zpull-up=1Z_{pull\text{-}up} = 1, Zaccesso=2Z_{accesso} = 2 e Zdriver=4Z_{driver} = 4 si rispetta la condizione pull-up << accesso << driver, sia in lettura sia in scrittura.

Formula (lettura della DRAM a un transistor: condivisione di carica).

  • Lettura: si precarica la BL (capacità CBL≫CSC_{BL}\gg C_S) a una tensione intermedia VPREV_{PRE} (≈VDD/2\approx V_{DD}/2) e si abilita WL: la carica si ridistribuisce tra CBLC_{BL} e CSC_S (charge sharing) e il potenziale finale è VPRE+ΔVV_{PRE}+\Delta V: CBLVPRE+CSVX,W=(CBL+CS)(VPRE+ΔV) ⇒ ΔV=CSCBL+CS (VX,W−VPRE).C_{BL}V_{PRE}+C_SV_{X,W}=(C_{BL}+C_S)(V_{PRE}+\Delta V)\ \Rightarrow\ \Delta V=\frac{C_S}{C_{BL}+C_S}\,\big(V_{X,W}-V_{PRE}\big).

Esempio. Con CBL=300 fFC_{BL} = 300\ \mathrm{fF}, CS=30 fFC_S = 30\ \mathrm{fF}, VPRE=1,25 VV_{PRE} = 1{,}25\ \mathrm V e VX=2,5 VV_X = 2{,}5\ \mathrm V: ΔV=30330 (2,5−1,25)≈114 mV\Delta V = \frac{30}{330}\,(2{,}5 - 1{,}25) \approx 114\ \mathrm{mV}.

VI. Blocchi funzionali dei sistemi digitali

Blocchi logici di un microprocessore - ALU, bus e logica tri-state

Formula (sottrazione in complemento a due con lo stesso sommatore). Sottrazione. In complemento a due A−B=A+B‾+1A-B=A+\overline B+1 (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 →): si usano gli stessi sommatori, con una porta XOR su ogni ingresso BiB_i comandata da un segnale "sottrai" (che inverte BB quando vale 11) e lo stesso segnale come riporto in ingresso CinC_{in}.

Esempio (N=4N=4). A=0110A=0110 (66), B=0011B=0011 (33): somma 10011001 (99); sottrazione: B‾=1100\overline B=1100, 0110+1100+1=1 00110110+1100+1=1\,0011, risultato 00110011 (33) con riporto 11; AND: 00100010; OR: 01110111.

Definizione (flag della ALU). Flag:

Esempio. Con A=0110A = 0110 (66) e B=0101B = 0101 (55) su 44 bit: la somma è 10111011, con V=1V = 1 (operandi positivi e risultato negativo), N=1N = 1, Z=0Z = 0 e C=0C = 0.

Sommatori - full adder e ripple-carry

Formula (full adder). Il full adder (sommatore completo a un bit) ha per tabella di verità S=A⊕B⊕Cin=A‾ B‾ Cin+A‾B Cin‾+AB‾ Cin‾+ABCin,Cout=AB+BCin+ACin.S=A\oplus B\oplus C_{in}=\overline A\,\overline B\,C_{in}+\overline AB\,\overline{C_{in}}+A\overline B\,\overline{C_{in}}+ABC_{in},\qquad C_{out}=AB+BC_{in}+AC_{in}.

Esempio. Con A=1A = 1, B=1B = 1 e Cin=1C_{in} = 1: S=1⊕1⊕1=1S = 1 \oplus 1 \oplus 1 = 1 e Cout=1C_{out} = 1 (almeno due ingressi valgono 11).

Definizione (generate, propagate, delete e riporto). Il riporto d'uscita è la funzione maggioranza: vale 11 se almeno due ingressi valgono 11. Si ottimizza il circuito con tre segnali:

  • generate G=ABG=AB: lo stadio genera un riporto 11 indipendentemente da CinC_{in};
  • propagate P=A⊕BP=A\oplus B (o A+BA+B): lo stadio propaga il riporto d'ingresso;
  • delete (kill) D=A‾ B‾D=\overline A\,\overline B: lo stadio cancella il riporto (uscita 00 qualunque CinC_{in}). Allora Cout=G+P⋅Cin,S=P⊕Cin.C_{out}=G+P\cdot C_{in},\qquad S=P\oplus C_{in}.

Esempio. Con A=1A = 1 e B=0B = 0: P=1P = 1 e G=0G = 0, quindi Cout=CinC_{out} = C_{in}; con A=B=1A = B = 1: G=1G = 1 e Cout=1C_{out} = 1 qualunque sia CinC_{in}.

Formula (ritardo del sommatore ripple-carry, caso peggiore). Un sommatore a NN bit si ottiene collegando NN full adder in cascata: Cout,i=Cin,i+1C_{out,i}=C_{in,i+1}. Il riporto "si propaga a onda" (ripple) dal bit meno significativo al più significativo. Indicati tst_s il ritardo del sum (da CinC_{in} a SS) e tct_c il ritardo di carry (da CinC_{in} a CoutC_{out}) di un full adder, e con Cin,0=0C_{in,0}=0:

  • il bit ii dà la somma al tempo ts+(ritardi di riporto accumulati fino allo stadio i)t_s+\big(\text{ritardi di riporto accumulati fino allo stadio }i\big);
  • nel caso peggiore (riporto che attraversa tutti gli stadi: tutti P=1P=1) l'ultimo bit attende N−1N-1 ritardi di carry: tadd=(N−1) tc+ts(lineare in N).\boxed{t_{add}=(N-1)\,t_c+t_s}\qquad(\text{lineare in }N).

Sommatori veloci - carry-bypass, carry-select e square-root

Formula (ritardo del carry-bypass e dimensione ottima dei blocchi). Ritardo nel caso peggiore (NN bit, blocchi da MM): il riporto deve (1) essere generato nel primo stadio del primo blocco e attraversare lo stesso blocco (M tcarryM\,t_{carry}), (2) saltare i blocchi successivi attraverso i loro multiplexer (N/M−1N/M-1 multiplexer in totale, uno per ogni blocco dopo il primo), (3) attraversare i M−1M-1 stadi dell'ultimo blocco e produrre la somma: tadd=tsetup+M tcarry+(NM−1)tmux+(M−1) tcarry+tsum.t_{add}=t_{setup}+M\,t_{carry}+\Big(\frac NM-1\Big)t_{mux}+(M-1)\,t_{carry}+t_{sum}. Il termine in MM è (2M−1) tcarry(2M-1)\,t_{carry}: aumentando MM cresce la parte di ripple dentro i blocchi estremi, diminuendo MM crescono i multiplexer. Derivando rispetto a MM: Mopt=N tmux2 tcarry.M_{opt}=\sqrt{\frac{N\,t_{mux}}{2\,t_{carry}}}.

Esempio. Con N=32N = 32 e tutti i ritardi uguali a TT: Mopt=32/2=4M_{opt} = \sqrt{32/2} = 4 e tadd=T+4T+7T+3T+T=16 Tt_{add} = T + 4T + 7T + 3T + T = 16\,T.

Formula (ritardo del linear carry-select e dimensione ottima dei blocchi). Linear carry-select (blocchi tutti da MM bit, N/MN/M blocchi): tadd=tsetup+M tcarry+NM tmux+tsum,Mopt=N tmuxtcarry.t_{add}=t_{setup}+M\,t_{carry}+\frac NM\,t_{mux}+t_{sum},\qquad M_{opt}=\sqrt{\frac{N\,t_{mux}}{t_{carry}}}.

Esempio. Con N=32N = 32, M=8M = 8 e tutti i ritardi uguali a TT: tadd=T+8T+4T+T=14 Tt_{add} = T + 8T + 4T + T = 14\,T.

Formula (ritardo del square-root carry-select). Nel linear carry-select il blocco jj aspetta il riporto del blocco j−1j-1, che arriva un multiplexer dopo il precedente: nel frattempo ha già finito di calcolare le due alternative. Si può quindi dare ai blocchi successivi un bit in più del precedente: ciascuno impiega tmuxt_{mux} in più per il riporto, e può quindi elaborare un bit in più in parallelo (con tcarryt_{carry} per bit). Blocchi di M, M+1, M+2,…,M+K−1M,\,M+1,\,M+2,\dots,M+K-1 bit: N=∑j=0K−1(M+j)=MK+K(K−1)2 ≈ K22(M piccolo),K≈2N.N=\sum_{j=0}^{K-1}(M+j)=MK+\frac{K(K-1)}2\ \approx\ \frac{K^2}2\quad(M\text{ piccolo}),\qquad K\approx\sqrt{2N}. tadd=tsetup+M tcarry+K tmux+tsum ≈ tsetup+M tcarry+2N tmux+tsum.t_{add}=t_{setup}+M\,t_{carry}+K\,t_{mux}+t_{sum}\ \approx\ t_{setup}+M\,t_{carry}+\sqrt{2N}\,t_{mux}+t_{sum}.

Esempio. Con N=32N = 32 e M=3M = 3: blocchi da 3,4,5,6,7,83, 4, 5, 6, 7, 8 bit (3333 bit), K=6K = 6 e, con ritardi tutti uguali a TT, tadd=T+3T+6T+T=11 Tt_{add} = T + 3T + 6T + T = 11\,T.

Traslatori, comparatori e moltiplicatori

Definizione (traslatori: shift logico, aritmetico e rotazione). Un traslatore sposta i bit di una parola di kk posizioni. Tipi, per una parola aN−1…a0a_{N-1}\dots a_0:

  • shift logico a sinistra (LSL): i bit si spostano verso l'MSB, si entra con 00 da destra: equivale a moltiplicare per 2k2^k (senza overflow);
  • shift logico a destra (LSR): si entra con 00 da sinistra: divisione per 2k2^k per i numeri senza segno;
  • shift aritmetico a destra (ASR): si replica il bit di segno da sinistra: divisione per 2k2^k per i numeri in complemento a due;
  • rotazione (ROL, ROR): i bit usciti da un lato rientrano dall'altro.

Esempio. 0001 01100001\,0110 (2222), LSL di 22: 0101 10000101\,1000 (88=22⋅488 = 22 \cdot 4); 1110 01001110\,0100 (−28-28), ASR di 11: 1111 00101111\,0010 (−14-14).

Formula (comparatore di grandezza). Grandezza (senza segno). Si confrontano i bit a partire dal più significativo: A>BA>B se al primo bit in cui differiscono Ai=1A_i=1 e Bi=0B_i=0. Con gi=AiBi‾g_i=A_i\overline{B_i} (qui Ai>BiA_i>B_i) e eie_i come sopra: GT=gN−1+eN−1(gN−2+eN−2(gN−3+… )),LT analogo,EQ=∏ei.GT=g_{N-1}+e_{N-1}\big(g_{N-2}+e_{N-2}(g_{N-3}+\dots)\big),\qquad LT\text{ analogo},\quad EQ=\prod e_i.

Esempio: A=1011A=1011, B=1001B=1001: e3=1e_3=1 (1,1), e2=1e_2=1 (0,0), il bit 11: A1=1>B1=0A_1=1>B_1=0 (g1=1g_1=1): quindi GT=0+1⋅(0+1⋅1)=1GT=0+1\cdot(0+1\cdot1)=1, A>BA>B (11>911>9).

Proprietà (confronto tramite sottrazione e flag). Con la sottrazione. Si calcola A−B=A+B‾+1A-B=A+\overline B+1 e si legge: ZZ per l'uguaglianza; per i numeri senza segno A≥BA\ge B se il riporto d'uscita vale 11 (nessun prestito); per i numeri con segno A<BA<B se N⊕VN\oplus V vale 11 (segno del risultato corretto dall'overflow). È il metodo dei processori (flag ZZ, CC, NN, VV).

Esempio. Con A=0110A = 0110 (66) e B=0011B = 0011 (33) su 44 bit senza segno: A+B‾+1=0110+1100+1=1 0011A + \overline B + 1 = 0110 + 1100 + 1 = 1\,0011, con riporto d'uscita 11, quindi A≥BA \ge B.

Definizione (prodotto come somma di prodotti parziali traslati). Il prodotto di due numeri senza segno di NN bit ha 2N2N bit. Per ogni bit BjB_j del moltiplicatore si forma un prodotto parziale PPj=A⋅BjPP_j=A\cdot B_j (un AND per bit) traslato di jj posizioni e si sommano tutti.

Esempio (4×44\times4 bit): A=1011 (11)A=1011\ (11), B=1101 (13)B=1101\ (13):

Formula (moltiplicatore a matrice: numero di celle e ritardo). Moltiplicatore a matrice (array): N2N^2 porte AND generano i prodotti parziali e una matrice di N(N−1)N(N-1) full adder ne somma le righe (il riporto di ciascuna riga si propaga alla successiva): N=4N=4: 1616 AND e 1212 full adder. Il cammino critico attraversa circa 2N2N celle: ritardo ≈(2N−2) tcarry+tsum\approx(2N-2)\,t_{carry}+t_{sum}, lineare in NN ma con area quadratica (O(N2)O(N^2) celle).

Esempio. Con N=4N = 4: 1616 porte AND e 1212 full adder; con tcarry=100 pst_{carry} = 100\ \mathrm{ps} e tsum=150 pst_{sum} = 150\ \mathrm{ps} il ritardo è circa (2N−2) tcarry+tsum=750 ps(2N - 2)\,t_{carry} + t_{sum} = 750\ \mathrm{ps}.

VII. Circuiti logici programmabili e FPGA

Dispositivi logici programmabili - PROM, PLA, PAL e CPLD

Definizione (PROM, PLA e PAL: piani AND e OR).

architettura piano AND piano OR caratteristiche
PROM fisso (decoder: tutti i mintermini) programmabile semplice; 2N2^N prodotti: impraticabile per molti ingressi
PLA programmabile programmabile dimensione del piano AND indipendente dagli ingressi; più lenta (due livelli di collegamenti programmabili, più lenti dei fissi)
PAL programmabile fisso più veloce della PLA; il piano OR fisso limita il numero di implicanti per uscita

Esempio. Con N=3N = 3 ingressi una PROM ha 23=82^3 = 8 prodotti nel piano AND; la funzione y=ac+b‾ c‾y = ac + \overline b\,\overline c in una PLA ne richiede solo 22.

FPGA - LUT, slice e risorse della famiglia 7

Definizione (LUT a k ingressi). La look-up table (LUT) a kk ingressi è una piccola memoria di 2k2^k celle SRAM da 11 bit, indirizzata dai kk ingressi, con un multiplexer 2k→12^k\to1 in uscita: gli ingressi della funzione sono i segnali di selezione del multiplexer, e il contenuto delle celle è la tabella di verità della funzione. Qualsiasi funzione combinatoria di kk variabili si realizza riscrivendo le celle, con ritardo costante attraverso la LUT: il tempo dipende solo dal numero di ingressi, non dalla complessità della funzione. Il numero di funzioni diverse è 22k2^{2^k}: 256256 per k=3k=3, 2642^{64} per k=6k=6.

Esempio: y=(a⋅b)+c‾y=(a\cdot b)+\overline c con LUT a 33 ingressi. Tabella per abc=000,001,…,111abc=000,001,\ldots,111: y=1,0,1,0,1,0,1,1y=1,0,1,0,1,0,1,1; i bit programmati sono quindi 1010101110101011 (indirizzo abcabc). Se la funzione ha più ingressi di quelli della LUT si combinano più LUT attraverso multiplexer dedicati.

VIII. VHDL e progetto su FPGA

Simulazione, testbench, vincoli di temporizzazione e flusso su FPGA

Formula (slack di setup, slack di hold e frequenza massima). L'analisi statica di temporizzazione controlla ogni cammino tra due registri (e da/verso i pin) con gli stessi vincoli visti per il registro (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 →):

  • slack di setup: slacksetup=T−(tc-q+tlogica+trouting−tskew+tsu)\text{slack}_{setup}=T-\big(t_{c\text{-}q}+t_{logica}+t_{routing}-t_{skew}+t_{su}\big); se ≥0\ge0 il cammino rispetta il periodo di clock TT; il minimo su tutti i cammini è il WNS (worst negative slack). Il cammino con lo slack minore è il cammino critico.
  • slack di hold: slackhold=tc-q+tcd,logica+trouting−tskew−thold≥0\text{slack}_{hold}=t_{c\text{-}q}+t_{cd,logica}+t_{routing}-t_{skew}-t_{hold}\ge0 (indipendente da TT).
  • Frequenza massima: fmax=1/(T−WNS)f_{max}=1/(T-WNS) se WNS<TWNS<T.

Esempio. T=10 nsT=10\ \mathrm{ns} (100 MHz100\ \mathrm{MHz}). Un cammino ha tc-q=0,5t_{c\text{-}q}=0{,}5, logica e routing 7,87{,}8, tsu=0,4t_{su}=0{,}4 (ns\mathrm{ns}): ritardo totale 8,7 ns8{,}7\ \mathrm{ns}, slack +1,3 ns+1{,}3\ \mathrm{ns}, fmax=1/8,7 ns=115 MHzf_{max}=1/8{,}7\ \mathrm{ns}=115\ \mathrm{MHz}. Se il cammino fosse lungo 11,2 ns11{,}2\ \mathrm{ns}: slack −1,2 ns-1{,}2\ \mathrm{ns}: la frequenza di 100 MHz100\ \mathrm{MHz} non è raggiungibile, fmax=89 MHzf_{max}=89\ \mathrm{MHz}.