I moderni dispositivi logici digitali sono generalmente (*) progettati con "pratica di progettazione sincrona": uno stile di progettazione di trasferimento dei registri (RTL) sincronizzato a livello globale: tutti i circuiti sequenziali sono suddivisi in registri a trigger di bordo collegati al segnale di orologio globale CLK e pura logica combinatoria.
Questo stile di progettazione consente alle persone di progettare rapidamente sistemi logici digitali senza tenere conto dei tempi. Il loro sistema "funzionerà" fintanto che c'è abbastanza tempo da un fronte all'altro per consentire allo stato interno di stabilizzarsi.
Con questo stile di progettazione, l'inclinazione dell'orologio e altri problemi relativi ai tempi sono irrilevanti, tranne per capire "Qual è la frequenza di clock massima per questo sistema?".
Che cosa è esattamente l'orologio inclinato?
Per esempio:
...
R1 - register 1 R3
+-+
->| |------>( combinational ) +-+
...->| |------>( logic )->| |--...
->|^|------>( )->|^|
+-+ ( ) +-+
| +--->( ) |
CLK | +->( ) CLK
| |
R2: | |
+-+ | |
...->| |->+ |
->|^|->--+
+-+
|
CLK
Nell'hardware reale, il segnale "CLK" non cambia mai esattamente simultaneamente in ogni registro. Il disallineamento dell'orologio Tskew è il ritardo dell'orologio a valle rispetto all'orologio a monte ( a ):
Tskew (sorgente, destinazione) = destination_time - source_time
dove source_time è il tempo di un fronte di clock attivo nel registro sorgente a monte (in questo caso, R1 o R2), e destination_time è il tempo dello "stesso" fronte di orologio attivo in un registro di destinazione a valle (in questo caso, R3) .
- inclinazione negativa dell'orologio: il CLK su R3 commuta prima dell'orologio su R1.
- inclinazione dell'orologio positivo: il CLK su R3 commuta dopo l'orologio su R1.
Qual è l'effetto dell'inclinazione dell'orologio?
(forse un diagramma temporale qui renderebbe questo più chiaro)
Affinché le cose funzionino correttamente, anche nel peggiore dei casi, gli ingressi di R3 non devono cambiare durante il tempo di configurazione o il tempo di attesa di R3. In altri casi, affinché le cose funzionino correttamente, dobbiamo progettare cose tali che:
Tskew (R1, R3) <Tco - Th.
Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).
dove:
- Tcalc è il tempo massimo di assestamento nel caso peggiore di qualsiasi blocco di logica combinatoria in qualsiasi parte del sistema. (A volte possiamo riprogettare il blocco della logica combinatoria che si trova sul percorso critico, spingendo le parti a monte o a valle o inserendo un altro stadio di pipeline, quindi il nuovo design ha un Tcalc più piccolo, che ci consente di aumentare la frequenza di clock) .
- Tclk_min è il periodo di tempo minimo da un fronte di orologio attivo al successivo fronte di orologio attivo. Lo calcoliamo dall'equazione sopra.
- Tsu è il tempo di impostazione del registro. Il produttore del registro si aspetta che usiamo un orologio abbastanza lento da soddisfare sempre questo requisito.
- Questo è il tempo di attesa del registro. Il produttore del registro si aspetta che controlliamo l'orologio inclinato abbastanza da soddisfare sempre questo requisito.
- Tco è il ritardo da clock a output (tempo di propagazione). Dopo ogni fronte di clock attivo, R1 e R2 continuano a guidare i vecchi valori nella logica combinatoria per un breve tempo Tco prima di passare ai nuovi valori. Questo è impostato dall'hardware e garantito dal produttore, ma solo finché rispettiamo Tsu e Th e altri requisiti specificati dal produttore per il normale funzionamento.
Un'eccessiva inclinazione positiva è un disastro immeritato. Un disallineamento troppo positivo può causare (con alcune combinazioni di dati) "percorsi furtivi" tali che, invece di R3 bloccare i "dati corretti" nell'orologio N + 1 (una funzione deterministica dei dati precedentemente bloccati in R1 e R2 nell'orologio N) , i nuovi dati bloccati in R1 e R2 nell'orologio N + 1 possono filtrare, sconvolgere la logica combinatoria e causare il blocco di dati errati in R3 sullo "stesso" bordo dell'orologio N + 1.
Qualsiasi quantità di inclinazione negativa può essere "riparata" rallentando la frequenza di clock. È solo "cattivo", nel senso che ci costringe a far funzionare il sistema a una frequenza di clock più lenta, al fine di dare agli ingressi del tempo R3 di stabilizzarsi dopo che R1 e R2 bloccano nuovi dati sul bordo dell'orologio N, e successivamente R3 blocca il risultato sul bordo dell'orologio "successivo" N + 1.
Molti sistemi utilizzano una rete di distribuzione di clock che tenta di ridurre a zero l'inclinazione. Contro-intuitivamente, aggiungendo attentamente ritardi lungo il percorso del clock - il percorso dal generatore di clock all'ingresso CLK di ciascun registro - è possibile aumentare la velocità apparente che il fronte d'onda del bordo dell'orologio percorre fisicamente dall'ingresso CLK di un registro al l'ingresso CLK del prossimo registro è più veloce della velocità della luce.
La documentazione di Altera menziona
"Evita di usare la logica combinatoria nei percorsi di clock perché contribuisce al disallineamento del clock."
Questo si riferisce al fatto che molte persone scrivono HDL che viene compilato su un FPGA in un modo che in qualche modo provoca qualcosa di diverso dal segnale CLK globale per guidare l'ingresso CLK locale di alcuni registri. (Potrebbe trattarsi della logica "clock gating" in modo tale che i nuovi valori vengano caricati in un registro solo quando sono soddisfatte determinate condizioni, oppure la logica "clock divisore" che permetta solo 1 su N clock, o ecc.). Quel CLK locale di solito è derivato dal CLK globale in qualche modo: il CLK globale spunta e quindi il CLK locale non cambia, oppure (un breve ritardo dopo il CLK globale affinché il segnale si propaghi attraverso quel "qualcosa di diverso") il CLK locale cambia una volta.
Quando quel "qualcos'altro" guida il CLK del registro a valle (R3), rende l'inclinazione più positiva. Quando quel "qualcos'altro" guida il CLK del registro a monte (R1 o R2), rende l'inclinazione più negativa. Occasionalmente, qualunque cosa spinga il CLK del registro a monte e qualunque cosa spinga il CLK del registro a valle ha praticamente lo stesso ritardo, rendendo lo zero tra loro praticamente zero.
La rete di distribuzione dell'orologio all'interno di alcuni ASIC è progettata deliberatamente con piccole quantità di inclinazione dell'orologio positivo su alcuni registri, il che dà alla logica combinatoria a monte un po 'più di tempo per stabilizzarsi e quindi l'intero sistema può funzionare con una frequenza di clock più veloce. Questo si chiama "ottimizzazione dell'inclinazione dell'orologio" o "pianificazione dell'inclinazione dell'orologio" ed è correlato alla " retiming ".
Sono ancora sconcertato dal set_clock_uncertainty
comando: perché dovrei mai voler "specificare manualmente" l'inclinazione?
(*) Un'eccezione:
sistemi asincroni .