Introduzione al Clock Domain Crossing: Double Flopping

Questo articolo discuterà una tecnica ben nota chiamata “double flopping” per trasferire un segnale di controllo a bit singolo tra due domini di clock.

È comune impiegare diversi segnali di clock in un sistema digitale. Poiché i segnali di clock di diversi domini di clock sono indipendenti in generale, il trasferimento dei dati tra i diversi domini di clock può essere un compito impegnativo. Questo articolo discuterà una tecnica ben nota chiamata “double flopping” per trasferire un segnale di controllo a bit singolo tra due domini di clock.

Perché abbiamo bisogno di più orologi?

La metodologia generale di progettazione digitale consiglia di utilizzare un segnale di clock per l’intero sistema principalmente perché semplifica sia la procedura di progettazione che l’analisi dei tempi del sistema. Tuttavia, questa metodologia non sempre fornisce la soluzione più efficiente e talvolta non è nemmeno possibile avere un singolo orologio per l’intero sistema. Ad esempio, si consideri un progetto FPGA funzionante a 20 MHz che comunica con due dispositivi esterni che utilizzano interfacce funzionanti a 100 MHz e 150 MHz. Qui, abbiamo a che fare con tre diverse frequenze di clock. Si noti che la frequenza di clock delle interfacce può essere predefinita e potremmo non essere in grado di sceglierla in base all’orologio utilizzato all’interno dell’FPGA.

A volte, potremmo essere in grado di scegliere la frequenza di clock per le diverse parti del sistema, ma, anche in questo caso, potrebbe non essere una buona idea far funzionare l’intero sistema a una data frequenza di clock. Ad esempio, si supponga che l’intero sistema possa funzionare a 20 MHz ad eccezione di un sottosistema che necessita di un clock a 100 MHz. Se decidiamo di utilizzare un segnale di clock per l’intero sistema, dovremmo far funzionare il sistema a 100 MHz per ospitare la frequenza di clock più alta disponibile nel sistema. Ovviamente, questo non è ragionevole perché non solo abbiamo sovradesignato una grande porzione del sistema (parti che potrebbero essere azionate a 20 MHz), ma abbiamo anche aumentato inutilmente il consumo energetico dinamico del sistema. Come puoi vedere, ci sono molte circostanze in cui dobbiamo impiegare diverse frequenze di clock per diverse parti del sistema.

Una sezione del progetto in cui tutti gli elementi sincroni, come infradito e arieti, utilizzano lo stesso segnale di clock è indicato come un dominio di clock. Avere diversi domini di clock può essere utile, ma non è così facile come sembra essere. La sezione successiva illustra alcuni dei problemi che potremmo affrontare quando si utilizza un sistema a più clock.

Il problema di metastabilità

Supponiamo di avere due sezioni di logica, A e B, che operano rispettivamente a 50 MHz e 100 MHz. Questo è mostrato in Figura 1.

Figura 1

Nel nostro semplice esempio, la sezione B ha un ingresso, En_In, che è collegato all’uscita En_Out della sezione A. Questa connessione corrisponde a un segnale di abilitazione attivo-alto che avvia un algoritmo in B dopo che una particolare operazione è stata eseguita da A. La figura 1 mostra il registro che genera il segnale di abilitazione in A e il registro che lo riceve in B.

Si supponga che le forme d’onda di clock siano come mostrato in Figura 2 e che il sistema sia attivato dal fronte di salita. Poiché il segnale En_Out è generato dal dominio A clock, la sua transizione da basso a alto può verificarsi dopo un fronte di salita di clk1 come mostrato in figura. Il ritardo tra il fronte di salita clk1 e la transizione En_Out corrisponde al ritardo clock-to-Q (T T_{clk-to-Q, DFF1}}) del flip-flop nella sezione logica A. Ora, ci aspettiamo che il registro DFF2 nel dominio B campionerà il segnale di abilitazione al prossimo fronte di salita di clk2 a t t=t_2$ $. Il campionamento avverrà correttamente a condizione che i requisiti di temporizzazione del DFF2 siano soddisfatti, ad esempio t t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2}$ $.

Figura 2

Nella Figura 2, la condizione t t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2} is è soddisfatta, ma questo non è sempre il caso. Si noti che i segnali di clock di diversi domini di clock sono indipendenti in generale. Non conosciamo la loro relazione di fase e le forme d’onda possono essere come mostrato in Figura 3. In questo caso, la transizione da basso a alto del segnale di abilitazione è così vicina al fronte di salita di clk2 che la condizione t t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2} is non è soddisfatta.

Figura 3

Poiché i dati di input di DFF2 sono cambiati entro il tempo di installazione, il comportamento del registro sarà imprevedibile. A causa della violazione del tempo di installazione, la tensione di uscita del registro potrebbe essere il valore che rappresenta una logica alta, una logica bassa o, peggio ancora, un valore tra la logica alta e la logica bassa tensioni. Questi tre casi sono possibili mentre i dati di input erano in realtà logici al bordo del clock corrispondente. Allo stesso modo, il valore di output del registro sarà imprevedibile, quando il tempo di attesa del registro viene violato, cioè En_out cambia entro una finestra temporale dopo il bordo dell’orologio attivo definito dal tempo di attesa del registro. Quando l’uscita del registro viene sospesa ad una tensione tra la logica alta e la logica bassa tensioni, diciamo che il flip-flop è entrato in uno stato metastabile.

Esaminiamo i tre possibili casi di violazione dei tempi di Figura 3 individualmente:

  • Come primo caso, supponiamo che il valore di output del DFF2 vada a logic high con il fronte di salita clk2 a t t=t_2.. In questo caso, non vi è alcun errore e il flip-flop contiene dati validi anche se abbiamo avuto violazione del tempo di installazione. I dati transitano come previsto senza errori.
  • Il secondo caso: supponiamo che l’uscita DFF2 vada a logic low con il fronte di salita clk2 a t t=t_2.. In questo caso, il segnale di abilitazione non viene campionato correttamente nel dominio B clock. Tuttavia, questo non sarà un problema perché En_Out proviene dal dominio A clock e sarà alto per almeno un periodo di clk1 come mostrato in Figura 3. Pertanto, il prossimo fronte di salita di clk2 a t t = t_3 will campionerà correttamente il valore En_Out. Per questo bordo di clock, i requisiti di temporizzazione di DFF2 saranno soddisfatti perché En_Out non è cambiato per più di un periodo di clk2. In questo caso, stiamo campionando En_Out circa un periodo di clock più tardi rispetto alla transizione effettiva. Tuttavia, questo non è un problema perché gli orologi dei due domini di clock sono stati assunti come indipendenti e non abbiamo fatto alcuna ipotesi sull’orario di arrivo del segnale En_Out. Infatti, il circuito nel dominio B clock realizza la fine dei calcoli del dominio A clock con un ritardo aggiuntivo di un periodo clk2.
  • Successivamente si supponga che il registro DFF2 entri nello stato metastabile. In questo caso, l’uscita del registro viene sospesa a una tensione tra le tensioni logiche alta e logica bassa, ma questa sarà temporanea. Il flip-flop finirà per uscire dallo stato metastabile e passare a logic high o logic low. Il tempo necessario per uscire dallo stato metastabile è noto come tempo di risoluzione T T_r.. Questo è mostrato in Figura 4. In questa figura, si è verificata la violazione del tempo di installazione e il flip flop è entrato nello stato metastabile per un intervallo di tempo di T T_r.. Dopo $$T_r$$, il flip flop uscita, si passa logico alto ($$Q2_{meta-a-1}$$) o logico basso ($$Q2_{meta-per-0}$$).

Figura 4

I tempi di risoluzione non è deterministica ed è descritto come una funzione di distribuzione di probabilità

$$P(T_r)=e^{\frac{-T_r}{\tau}}$$

Dove $$\tau$$ è il “decadimento” costante di tempo ed è determinato dalle caratteristiche elettriche del flip flop. Un valore tipico per questo parametro sarà di circa una frazione di un nanosecondo.

L’equazione precedente fornisce la probabilità di rimanere nello stato metastabile per un intervallo di tempo pari a T T_r after dopo il bordo del clock di campionamento. A causa della caratteristica esponenziale dell’equazione, la probabilità diminuirà rapidamente man mano che aumentiamo il valore di T T_r.. Per esempio, per $$\tau =0.5$$ ns $$T_r = 5$$ ns, si ottiene una probabilità di $$\ca 4,5 \times 10^{-5}$$.

Per riassumere, non possiamo impedire che la metastabilità si verifichi perché i segnali di clock dei due domini di clock sono indipendenti l’uno dall’altro. Tuttavia, se forniamo il flip-flop con un tempo di risoluzione sufficientemente ampio, si risolverà in uno stato stabile con un’alta probabilità. Quindi, se il nostro design include infradito che potrebbero entrare nello stato di metastabilità, dovremmo dare al flip-flop abbastanza tempo per uscire dalla metastabilità. Quindi, possiamo tranquillamente propagare il valore del flip-flop alle celle logiche a valle. Si noti che l’utilizzo di un valore metastabile può portare l’intero sistema in uno stato sconosciuto. Può portare a un flusso di corrente elevato e persino al burnout del chip nel peggiore dei casi. Quindi, dovremmo evitare di alimentare dati instabili al sistema.

Doppio Flopping

Abbiamo visto che dare al flip-flop un tempo sufficiente può ridurre notevolmente la possibilità di rimanere nello stato metastabile. Vediamo come questo può essere usato per evitare di propagare dati metastabili nel sistema. Si consideri lo schema a blocchi in Figura 5. Questo mostra un percorso tipico nel dominio B clock di Figura 1 che riceve ed elabora il segnale En_In.

Figura 5

Il periodo di clock minimo che può essere utilizzato per far funzionare questo circuito sarà

T T_{clk, \; min} = T_{clk-to-Q} + T_{comb, \; max} + T_{installazione}$$

dove $$T_{clk-a-Q}$$ e $$T_{setup}$$ sono l’orologio-a-Q e il tempo di installazione del flip-flop e $$T_{pettine, \; max}$$ è il ritardo massimo che il circuito combinatorio a “Pettine.”, esporre. Questa equazione si ottiene assumendo che i dati di output di DFF2 siano stabili. Se non lo è, dobbiamo considerare un po ‘ di tempo di risoluzione come nella seguente equazione:

T T_{clk, \; min} = T_{clk-to-Q} + T_r + T_{comb, \; max} + T_ {impostazione}$$

Il valore del tempo di risoluzione determinerà la probabilità di uscire dallo stato metastabile. Supponiamo che il periodo di clk2 sia T T_{clk2}$ $. Quindi, il valore del tempo di risoluzione disponibile sarà

T T_r = T_{clk2} – \big ( T_{clk-to-Q} + T_{comb,\; max} + T_{setup} \big )$$

Per ridurre la probabilità di rimanere in uno stato metastabile, dovremmo aumentare T T_r.. Con un dato periodo di clock T T_{clk2}$ $, l’unica opzione di progettazione sarà ridurre al minimo il parametro T T_{comb, \; max}$ $. Pertanto, è meglio mettere il ” Pettine.”blocco dopo il flip-flop DFF3 come mostrato in Figura 6. In questo modo, T T_{comb,\; max} will sarà teoricamente zero per il percorso tra DFF2 e DFF3. Quindi, avremo il tempo massimo di risoluzione possibile.

Figura 6

Questa tecnica è chiamata double flopping ed è ampiamente utilizzata quando si trasferiscono segnali di controllo come il precedente segnale di abilitazione tra due domini di clock. Si noti che il registro aggiuntivo introdurrà un altro ritardo di un periodo di clock al segnale di abilitazione catturato dal dominio B clock. Tuttavia, questo ritardo vale il vantaggio di evitare stati metastabili nel sistema.

Questo articolo ha discusso il passaggio di un segnale di abilitazione da un dominio di clock lento a un dominio di clock veloce. Potrebbe essere necessario acquisire familiarità con diverse altre tecniche come il passaggio di un segnale di controllo dal dominio di clock veloce a quello lento, la tecnica di scuotimento della mano e il trasferimento dei dati basato su FIFO tra i domini di clock. Puoi trovare alcuni dettagli nel Capitolo 16 della progettazione hardware RTL utilizzando VHDL: codifica per efficienza, portabilità e scalabilità e nel Capitolo 6 della progettazione avanzata FPGA: Architettura, implementazione e ottimizzazione.

Sommario

  • Ci sono molte circostanze in cui abbiamo bisogno di impiegare diverse frequenze di clock per le diverse parti del sistema.
  • Poiché i segnali di clock di diversi domini di clock sono indipendenti in generale, il trasferimento dei dati tra i diversi domini di clock può essere un compito impegnativo.
  • Il valore di output di un registro sarà imprevedibile quando si verifica una violazione del tempo di impostazione o del tempo di attesa. Potrebbe contenere il valore che rappresenta una logica alta, una logica bassa o, peggio ancora, un valore tra le tensioni logiche alte e logiche basse.
  • Il tempo necessario per uscire dallo stato metastabile è noto come tempo di risoluzione T T_r..
  • Se il nostro design include infradito che potrebbero entrare nello stato di metastabilità, dovremmo dare al flip-flop abbastanza tempo per uscire dalla metastabilità.
  • La tecnica “double flopping” è ampiamente utilizzata per trasferire segnali di controllo a bit singolo tra due domini di clock.

Per vedere un elenco completo dei miei articoli, si prega di visitare questa pagina.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.