Temporizzazione dei flip-flop - setup, hold e frequenza massima di clock
In questa pagina 6
Fino ad ora i flip-flop sono stati trattati come elementi ideali, che aggiornano lo stato in modo istantaneo sul fronte di clock. Nei circuiti reali per memorizzare il valore corretto bisogna rispettare vincoli di temporizzazione, che determinano anche la velocità massima del sistema. Sono parametri elettrici (dipendono dalla tecnologia, dalla temperatura, dalla tensione di alimentazione), non logici.
I tre parametri del flip-flop
Definizione (tempi di setup, hold e propagazione). Si consideri un D flip-flop positive-edge-triggered (Elementi di memoria - latch SR, latch D e flip-flop DUn circuito sequenziale ha uscite che dipendono da ingressi e stato (memoria); è un circuito combinatorio con elementi di memoria in retroazione; stato presente = uscite dei FF, stato futuro = ingressi dei FF. Sincrono (clock) o asincrono. Latch SR (NOR): S=1,R=0 set; S=0,R=1 reset; 00 memoria; 11 proibito. Latch D: C=1 trasparente (Q=D), C=0 memoria, sensibile al livello. Flip-flop D edge-triggered = due latch D in cascata (master-slave) con clock opposti: cambia solo sul fronte attivo e non è trasparente. Si assume D flip-flop positive-edge-triggered.Elementi di memoria - latch SR, latch D e flip-flop D →) con ingresso e fronte di salita del clock all'istante .
- Tempo di setup : durata minima dell'intervallo in cui l'ingresso deve rimanere stabile (al valore desiderato) PRIMA del fronte di clock che provoca il cambiamento dell'uscita. Se cambia troppo tardi, l'uscita del primo latch (master) potrebbe trovarsi a un livello di tensione intermedio quando il suo valore è trasferito al secondo: il dato memorizzato non è affidabile.
- Tempo di hold : durata minima dell'intervallo in cui l'ingresso deve rimanere stabile DOPO il fronte di clock. Se cambia troppo presto dopo il fronte, il master potrebbe ancora essere trasparente e propagare il cambiamento allo slave.
- Tempo di propagazione (o ): intervallo tra il fronte di clock che fa da trigger e l'istante in cui l'uscita comincia a commutare () o si è stabilizzata ().
In sintesi: finestra di stabilità del dato , in cui non deve cambiare; l'uscita è valida dopo .
Esempio. Con ns, ns e fronte a ns, deve restare fermo in ns.
Vincolo sul periodo di clock (setup)
In un circuito sequenziale sincrono il ritardo da un fronte di clock al successivo ha tre componenti:
- i flip-flop cambiano le uscite dopo dal fronte;
- le uscite arrivano alla rete combinatoria, che calcola uscite e stato futuro in un tempo (il percorso più lento, cammino critico);
- gli stati futuri arrivano agli ingressi dei flip-flop e devono rimanere stabili per prima del fronte successivo.
Formula (periodo minimo di clock). Quindi, aggiungendo un margine di sicurezza (slack = "gioco"):
Esempio. ns, ns, ns. Senza margine: ns, MHz. Con ns: ns, MHz.
Conseguenze.
- Il setup time del flip-flop limita la massima frequenza di clock (influisce sulla frequenza massima, non sulla minima).
- Se il vincolo non è rispettato (setup violation), si risolve aumentando il periodo, cioè diminuendo la frequenza di clock, oppure accorciando il cammino combinatorio.
- Il ritardo della logica combinatoria che pesa nel vincolo è quello del caso peggiore (porta o percorso più lento).
- Il setup time è un parametro del flip-flop (dipende dalla tecnologia del FF); è il margine disponibile a dipendere dalla logica a monte.
Vincolo di hold
Formula (vincolo di hold). Le variazioni dell'uscita di un flip-flop non devono arrivare troppo presto a un altro flip-flop (o a se stesso) per non violare il tempo di hold. Con i ritardi minimi del flip-flop e della rete combinatoria: È un requisito di correttezza indipendente dalla frequenza di clock: il fronte e la nuova uscita sono entrambi legati allo stesso fronte, quindi rallentare il clock non aiuta. Se è violato si aggiunge ritardo ai percorsi corti (buffer).
Esempio. ns, ns, ns: , violazione di ns. Abbassare la frequenza non la cura; servono almeno ns di ritardo in più sul percorso più corto.
Clock skew
Il fronte di clock può arrivare a istanti leggermente diversi ai vari flip-flop a causa dei ritardi nell'albero di distribuzione del clock (clock skew): chi riceve il clock in anticipo o in ritardo vede i vincoli di setup e di hold modificati. Anche le porte che si inseriscono nel percorso del clock (clock gating, Registri e microoperazioniUn registro a $n$ bit è formato da $n$ flip-flop (più porte) con clock comune; il caricamento si controlla con clock gating (OR con il clock: risparmia potenza ma introduce ritardi e clock skew) oppure, meglio, con load enable (MUX + D FF: $Q\leftarrow D$ se EN=1, $Q\leftarrow Q$ altrimenti). Un sistema digitale complesso si divide in datapath (registri e blocchi aritmetico-logici) e unità di controllo (FSM che invia i segnali di controllo e riceve i segnali di stato). Le microoperazioni, scritte in RTL (es. $K_1:R_2\leftarrow R_1$), sono di trasferimento, aritmetiche, logiche (con maschere: AND azzera, OR pone a 1, XOR complementa) e di scorrimento.Registri e microoperazioni →) introducono ritardi e quindi skew: per questo il caricamento dei registri con load enable è preferibile alla gestione del clock.
Temporizzazione nella simulazione
Per simulare correttamente un circuito sincrono:
- gli ingressi vanno applicati con adeguato anticipo rispetto al fronte attivo (per esempio in corrispondenza del fronte di discesa del clock se i FF sono PET), così la rete combinatoria ha tempo di calcolare uscita e stato futuro;
- il periodo di clock deve essere sufficiente (ritardo della rete nel caso peggiore adeguatamente inferiore al periodo);
- si leggono i risultati quando stato e uscite sono stazionari (per esempio appena prima del fronte di salita successivo).
La simulazione può essere funzionale (elementi ideali, ritardo nullo: verifica la funzione) o temporale (ritardi realistici: verifica la temporizzazione) (VHDL - macchine a stati finiti e testbench sequenzialeUna macchina a stati finiti (FSM) si descrive in VHDL, in stile behavioral, con un tipo enumerato per gli stati e tre process: (1) registro di stato con reset (asincrono) e aggiornamento state<=next_state sul fronte; (2) stato futuro come funzione combinatoria di stato e ingresso (case state, default next_state<=state); (3) uscita come funzione combinatoria di stato (Moore) o di stato e ingresso (Mealy). Il testbench ha il process del clock e il process degli ingressi (reset iniziale, sequenza di test che percorre tutti gli stati).VHDL - macchine a stati finiti e testbench sequenziale →).
Errori comuni
- Dire che il setup time limita la frequenza minima: limita la massima.
- Pensare che rallentare il clock risolva una violazione di hold: non la risolve.
- Dimenticare di usare i ritardi massimi per il setup e minimi per l'hold.
- Confondere setup (stabilità prima del fronte) e hold (stabilità dopo).
- Scrivere il vincolo senza : il ritardo del flip-flop fa parte del cammino.
Versione ripasso
- Finestra di stabilità: non deve cambiare in ; l'uscita è valida dopo . Esempio: con ns, ns e fronte a 10 ns, è fermo in ns.
- Tempo di setup : durata minima in cui deve essere stabile prima del fronte; se è violato il master può trovarsi a un livello intermedio e il dato non è affidabile.
- Tempo di hold : durata minima in cui deve restare stabile dopo il fronte; se è violato il master è ancora trasparente e propaga il cambiamento.
- Tempo di propagazione : dal fronte di clock all'inizio della commutazione () o alla stabilizzazione ().
- Periodo minimo: le componenti sono (uscite del FF), (cammino critico della rete combinatoria) e (setup del FF successivo), più un margine : e . Esempio: ns, cioè 333 MHz; con ns, ns e MHz.
- Conseguenze del setup: limita la frequenza massima; se è violato si aumenta il periodo (si abbassa la frequenza) oppure si accorcia il cammino combinatorio. Si usa il ritardo del caso peggiore; il setup è un parametro del FF, il margine dipende dalla logica a monte.
- Vincolo di hold: , con i ritardi minimi. È indipendente dalla frequenza: rallentare il clock non lo risolve. Esempio: , mancano ns, quindi si aggiunge ritardo ai percorsi corti (buffer).
- Clock skew: il fronte arriva a istanti diversi ai vari FF per i ritardi dell'albero di clock; i vincoli di setup e hold cambiano. Il clock gating aggiunge skew, per questo il load enable è preferibile (Registri e microoperazioniUn registro a $n$ bit è formato da $n$ flip-flop (più porte) con clock comune; il caricamento si controlla con clock gating (OR con il clock: risparmia potenza ma introduce ritardi e clock skew) oppure, meglio, con load enable (MUX + D FF: $Q\leftarrow D$ se EN=1, $Q\leftarrow Q$ altrimenti). Un sistema digitale complesso si divide in datapath (registri e blocchi aritmetico-logici) e unità di controllo (FSM che invia i segnali di controllo e riceve i segnali di stato). Le microoperazioni, scritte in RTL (es. $K_1:R_2\leftarrow R_1$), sono di trasferimento, aritmetiche, logiche (con maschere: AND azzera, OR pone a 1, XOR complementa) e di scorrimento.Registri e microoperazioni →).
- Simulazione: per FF PET gli ingressi si applicano sul fronte di discesa, così la rete ha tempo di stabilizzarsi; i risultati si leggono prima del fronte di salita. La simulazione funzionale usa ritardi nulli, quella temporale ritardi realistici (VHDL - macchine a stati finiti e testbench sequenzialeUna macchina a stati finiti (FSM) si descrive in VHDL, in stile behavioral, con un tipo enumerato per gli stati e tre process: (1) registro di stato con reset (asincrono) e aggiornamento state<=next_state sul fronte; (2) stato futuro come funzione combinatoria di stato e ingresso (case state, default next_state<=state); (3) uscita come funzione combinatoria di stato (Moore) o di stato e ingresso (Mealy). Il testbench ha il process del clock e il process degli ingressi (reset iniziale, sequenza di test che percorre tutti gli stati).VHDL - macchine a stati finiti e testbench sequenziale →).
- Errori: setup che limita la frequenza minima (limita la massima); rallentare il clock per risolvere l'hold; ritardi massimi usati per l'hold o minimi per il setup; setup e hold confusi; vincolo scritto senza .