Impara › Argomento 12
Diagrammi temporali, glitch e alee statiche
8 min di lettura · Team bitGateLab
Sulla carta una porta risponde all'istante; nella realtà ogni porta impiega alcuni nanosecondi. Questa differenza non conta quasi mai nella tabella di verità, ma conta nel diagramma temporale: due percorsi con ritardi diversi possono produrre impulsi spuri, detti glitch, che fanno avanzare un contatore o scattare un latch quando non dovrebbero. Qui imparerai a leggere un diagramma temporale, a calcolare i ritardi e a individuare ed eliminare le alee statiche con la mappa di Karnaugh.
Come leggere un diagramma temporale
Un diagramma temporale disegna ogni segnale come una linea che sale (1) o scende (0) lungo un asse orizzontale del tempo comune. Una linea verticale immaginaria in un istante qualsiasi ti dà il valore di tutti i segnali. I fronti degli ingressi sono le cause; la distanza tra un fronte d'ingresso e il cambiamento che provoca sull'uscita è il ritardo. Nei circuiti con clock, leggi i valori subito prima di ogni fronte attivo, che è il momento in cui i flip-flop campionano.
Ritardo di propagazione e percorso critico
Il ritardo di propagazione è il tempo tra un cambiamento sull'ingresso e il conseguente cambiamento sull'uscita, misurato tra i punti al 50% di ciascuna transizione. Si distinguono due valori:
- tPLH: ritardo quando l'uscita passa da basso ad alto.
- tPHL: ritardo quando l'uscita passa da alto a basso.
Nella famiglia 74HC alimentata a 5 V i ritardi di una porta semplice sono dell'ordine di 10 ns e crescono con il carico capacitivo e al diminuire della tensione di alimentazione.
Il ritardo di un circuito è quello del percorso più lento tra un ingresso qualsiasi e l'uscita, il percorso critico. Si calcola sommando i ritardi delle porte di ogni percorso e prendendo il maggiore.
Esempio: F = A·B + A·C con tNOT = 5 ns, tAND = 10 ns e tOR = 10 ns.
- Percorso da B o da C: AND + OR = 20 ns.
- Percorso da A attraverso la AND superiore: AND + OR = 20 ns.
- Percorso da A attraverso l'invertitore: NOT + AND + OR = 25 ns.
Il percorso critico è quello da A attraverso l'invertitore, con 25 ns. Nessun cambiamento degli ingressi impiega più di questo tempo per portare F a un valore stabile.
Glitch e alee statiche
Un'alea statica di 1 (detta anche hazard statico) esiste quando l'uscita dovrebbe restare a 1 durante un cambiamento d'ingresso, ma può scendere brevemente a 0. Un'alea statica di 0 è il contrario: l'uscita dovrebbe restare a 0 e presenta un breve picco a 1. Entrambe compaiono quando una variabile e il suo complemento arrivano all'uscita attraverso percorsi con ritardo diverso.
Prendi il circuito dell'esempio precedente con B = C = 1. Dal punto di vista logico F = A + A = 1 sempre. Ma quando A scende da 1 a 0, il termine A·B si spegne prima che A·C si accenda, perché A deve prima attraversare l'invertitore.
Cronologia del glitch (B = C = 1, A scende in t = 0):
- t = 5 ns: l'invertitore porta A a livello alto.
- t = 10 ns: la AND di A·B porta bassa la sua uscita (ha risposto al cambiamento di A in t = 0).
- t = 15 ns: la AND di A·C porta alta la sua uscita (ha risposto al cambiamento di A in t = 5).
- Tra 10 e 15 ns i due ingressi della OR valgono 0. La OR risponde 10 ns dopo: F vale 0 da t = 20 fino a t = 25 ns.
La durata del glitch è la differenza di ritardo tra i due percorsi: 5 ns, quello dell'invertitore. Se A sale, A·B si accende in t = 10 e A·C si spegne in t = 15; entrambe valgono 1 in quell'intervallo e non c'è alcun glitch.
Esistono anche le alee dinamiche: l'uscita dovrebbe cambiare una sola volta e invece cambia tre o più volte (per esempio 1 → 0 → 1 → 0). Compaiono nella logica a più livelli con tre o più percorsi di ritardo diverso per la stessa variabile.
Individuare ed eliminare le alee con Karnaugh
Nella mappa di Karnaugh di una somma di prodotti, un'alea statica di 1 compare quando due celle con 1 sono adiacenti ma sono coperte da gruppi diversi e nessun gruppo le copre entrambe. Passare da una cella all'altra significa cambiare una sola variabile, e durante quel cambiamento il circuito "salta" da un termine all'altro.
La soluzione è aggiungere il termine di consenso: un gruppo in più che copra le due celle. È ridondante dal punto di vista logico (non cambia la tabella di verità), ma mantiene l'uscita a 1 durante la transizione.
Esempio: F = A·B + A·C.
- A·B copre le celle ABC = 110 e 111. A·C copre 001 e 011.
- Le celle 011 e 111 sono adiacenti (cambia solo A) e si trovano in gruppi diversi: è l'alea che abbiamo visto, con B = C = 1.
- Il gruppo che le copre entrambe è B·C, il consenso di A·B e A·C: si toglie la variabile che compare diretta in un termine e negata nell'altro, e si moltiplica ciò che resta.
- Circuito privo di alee: F = A·B + A·C + B·C. Con B = C = 1, il termine B·C vale 1 per tutto il tempo e la OR non può più scendere.
Per un prodotto di somme il ragionamento è duale: si cercano zeri adiacenti in gruppi diversi e si aggiunge la somma di consenso per eliminare l'alea statica di 0. Per esempio, F = (A + B)·(A + C) presenta un'alea quando B = C = 0, e si corregge aggiungendo il fattore (B + C).
Errori comuni
- Pensare che un circuito con la tabella di verità corretta non possa sbagliare: la tabella non dice nulla sul comportamento durante le transizioni.
- Togliere il termine di consenso "perché è superfluo" nel semplificare, in un circuito che pilota un clock o un reset.
- Sommare i ritardi di tutte le porte del circuito invece dei soli ritardi del percorso più lento.
- Credere che il consenso elimini i glitch quando due ingressi cambiano contemporaneamente: copre soltanto i cambiamenti di una variabile.
Provalo nel simulatore
Nel cronogramma puoi vedere il picco e come scompare aggiungendo il consenso.
- Inserisci un invertitore, due AND e una OR, e costruisci F = A·B + A·C.
- Fissa B = 1 e C = 1, e collega A a un ingresso che puoi cambiare o a un segnale di clock lento.
- Apri il cronogramma e porta A da 1 a 0 più volte; osserva F nel momento della transizione e se compare un impulso breve o un avviso di glitch.
- Aggiungi una terza AND con B·C e collega la sua uscita alla OR.
- Ripeti il cambiamento di A e osserva che F resta a 1.
Esercizi
- Trova l'alea statica di F = A·C + B·C e scrivi la versione priva di alee.
Risposta
A·C copre 100 e 110; B·C copre 011 e 111. Le celle 110 e 111 sono adiacenti (cambia C) in gruppi diversi, con A = B = 1. Consenso: A·B. F = A·C + B·C + A·B.
- Nel circuito dell'esercizio 1, con tNOT = 4 ns, tAND = 8 ns e tOR = 8 ns, A = B = 1, in quale transizione di C compare il glitch, quando e quanto dura?
Risposta
Quando C scende in t = 0: B·C scende in t = 8, C sale in t = 4 e A·C sale in t = 12. Tra 8 e 12 ns la OR vede due zeri, quindi F vale 0 da t = 16 a t = 20 ns: 4 ns. Quando C sale non c'è glitch.
- Qual è il percorso critico di F = A·C + B·C con i ritardi dell'esercizio 2?
Risposta
Da C attraverso l'invertitore: 4 + 8 + 8 = 20 ns.
- Per F = (A + B)·(A + C), quale valore dovrebbe avere l'uscita quando B = C = 0 e quale glitch può comparire?
Risposta
Con B = C = 0, F = A·A = 0. Al cambiare di A può comparire un breve picco a 1 (alea statica di 0). Si elimina aggiungendo il fattore (B + C).