bitGateLab Digital · Impara
Italiano
Apri il simulatore

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:

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.

A Ā A·B Ā·C F 0 5 10 15 20 25 t (ns)
Con B = C = 1, A scende in t = 0. Tra 10 e 15 ns entrambi gli ingressi della OR valgono 0, e F scende da 20 a 25 ns: un glitch di 5 ns.

Cronologia del glitch (B = C = 1, A scende in t = 0):

  1. t = 5 ns: l'invertitore porta A a livello alto.
  2. t = 10 ns: la AND di A·B porta bassa la sua uscita (ha risposto al cambiamento di A in t = 0).
  3. t = 15 ns: la AND di A·C porta alta la sua uscita (ha risposto al cambiamento di A in t = 5).
  4. 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.

  1. A·B copre le celle ABC = 110 e 111. A·C copre 001 e 011.
  2. 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.
  3. 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.
  4. 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).

Aggiungere i termini di consenso elimina le alee statiche dovute al cambiamento di una sola variabile. Nel progetto sincrono l'altra difesa è non guardare la logica combinatoria mentre si assesta: i flip-flop campionano soltanto sul fronte del clock, quando i glitch sono già terminati. I glitch sono invece pericolosi sui clock, sui reset asincroni e sulle abilitazioni dei latch.

Errori comuni

Provalo nel simulatore

Nel cronogramma puoi vedere il picco e come scompare aggiungendo il consenso.

  1. Inserisci un invertitore, due AND e una OR, e costruisci F = A·B + A·C.
  2. Fissa B = 1 e C = 1, e collega A a un ingresso che puoi cambiare o a un segnale di clock lento.
  3. 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.
  4. Aggiungi una terza AND con B·C e collega la sua uscita alla OR.
  5. Ripeti il cambiamento di A e osserva che F resta a 1.

Esercizi

  1. 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.

  2. 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.

  3. 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.

  4. 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).