Introducere în Clock Domain Crossing: Double Flopping
acest articol va discuta despre o tehnică binecunoscută numită “double flopping” pentru a transfera un semnal de control pe un singur bit între două domenii de ceas.
este obișnuit să folosiți mai multe semnale de ceas într-un sistem digital. Deoarece semnalele de ceas ale diferitelor domenii de ceas sunt independente în general, transferul de date între diferitele domenii de ceas poate fi o sarcină dificilă. Acest articol va discuta despre o tehnică binecunoscută numită” flopping dublu ” pentru a transfera un semnal de control pe un singur bit între două domenii de ceas.
De Ce Avem Nevoie De Mai Multe Ceasuri?
metodologia generală de proiectare digitală recomandă utilizarea unui semnal de ceas pentru întregul sistem, în principal pentru că simplifică atât procedura de proiectare, cât și analiza sincronizării sistemului. Cu toate acestea, această metodologie nu oferă întotdeauna cea mai eficientă soluție și uneori nici măcar nu este posibil să ai un singur ceas pentru întregul sistem. De exemplu, luați în considerare un design FPGA care funcționează la 20 MHz, care comunică cu două dispozitive externe folosind interfețe care funcționează la 100 MHz și 150 MHz. Aici, avem de a face cu trei frecvențe diferite de ceas. Rețineți că frecvența de ceas a interfețelor poate fi predefinită și este posibil să nu o putem alege pe baza ceasului utilizat în interiorul FPGA.
uneori, este posibil să putem alege frecvența ceasului pentru diferitele părți ale sistemului, dar, chiar și în acest caz, este posibil să nu fie o idee bună să operăm întregul sistem la o anumită frecvență de ceas. De exemplu, să presupunem că întregul sistem poate fi operat la 20 MHz, cu excepția unui subsistem care are nevoie de un ceas de 100 MHz. Dacă decidem să folosim un semnal de ceas pentru întregul sistem, atunci ar trebui să operăm sistemul la 100 MHz pentru a găzdui cea mai mare rată de ceas disponibilă în sistem. Evident, acest lucru nu este rezonabil, deoarece nu numai că am supra-proiectat o mare parte a sistemului (Piese care ar putea fi operate la 20 MHz), dar, de asemenea, am crescut inutil consumul de energie dinamică a sistemului. După cum puteți vedea, există multe circumstanțe în care trebuie să folosim rate de ceas diferite pentru diferite părți ale sistemului.
o secțiune a designului în care toate elementele sincrone, cum ar fi flip-flops și Ram, utilizează același semnal de ceas este denumit domeniu de ceas. Având diferite domenii de ceas poate fi benefic, dar nu este la fel de ușor cum pare a fi. Următoarea secțiune discută unele dintre problemele cu care ne putem confrunta atunci când folosim un sistem cu mai multe ceasuri.
problema Metastabilității
presupune că avem două secțiuni de logică, A și B, care funcționează la 50 MHz și respectiv 100 MHz. Acest lucru este prezentat în Figura 1.
Figura 1
în exemplul nostru simplu, Secțiunea B are o intrare, En_In, care este conectată la ieșirea En_Out a secțiunii A. Această conexiune corespunde unui semnal de activare activ-înalt care inițiază un algoritm în B după ce o anumită operație este efectuată de A. Figura 1 arată registrul care generează semnalul de activare în A și registrul care îl primește în B.
să presupunem că formele de undă ale ceasului sunt așa cum se arată în Figura 2 și sistemul este în creștere declanșată de margine. Deoarece semnalul En_Out este generat de domeniul ceasului a, tranziția sa de la mic la mare poate apărea după o margine în creștere a clk1 așa cum se arată în figură. Întârzierea dintre marginea ascendentă clk1 și tranziția En_Out corespunde întârzierii clock-to-Q ($$t_{clk-to-Q, DFF1}$$) a flip-flop-ului din secțiunea logică A. Acum, ne așteptăm ca registrul DFF2 din domeniul B să probeze semnalul de activare la următoarea margine în creștere a clk2 la $$t=t_2$$. Eșantionarea se va întâmpla cu succes cu condiția îndeplinirii cerințelor de sincronizare ale DFF2, adică $$t_1 + t_{clk-to-Q, \; DFF1} \leq t_2-t_{setup, \; DFF2}$$.
Figura 2
în Figura 2, condiția $$t_1+t_{clk-to-Q, \; DFF1} \leq t_2-t_{setup, \; DFF2}$$ este satisfăcută, dar acest lucru nu este întotdeauna cazul. Rețineți că semnalele de ceas ale diferitelor domenii de ceas sunt independente în general. Nu știm relația lor de fază și formele de undă pot fi așa cum se arată în Figura 3. În acest caz, tranziția de la mic la mare a semnalului de activare este atât de aproape de marginea în creștere a clk2 încât condiția $$t_1+t_{clk-to-Q, \; DFF1} \leq t_2-t_{setup, \; DFF2}$$ nu este satisfăcută.
Figura 3
deoarece datele de intrare ale DFF2 s-au schimbat în timpul de configurare, comportamentul registrului va fi imprevizibil. Datorită încălcării timpului de configurare, tensiunea de ieșire a registrului ar putea fi valoarea reprezentând o logică ridicată, o logică scăzută sau chiar mai rău o valoare între tensiunile logice ridicate și logice joase. Aceste trei cazuri sunt posibile în timp ce datele de intrare au fost de fapt logice ridicate la marginea ceasului corespunzător. În mod similar, valoarea de ieșire a registrului va fi imprevizibilă, atunci când timpul de așteptare al Registrului este încălcat, adică en_out se schimbă într-o fereastră de timp după marginea ceasului activ definită de timpul de așteptare al Registrului. Când ieșirea registrului devine suspendată la o tensiune între tensiunile logice înalte și logice joase, spunem că flip-flop-ul a intrat într-o stare metastabilă.
să examinăm cele trei cazuri posibile din încălcarea calendarului din Figura 3 individual:
- ca primul caz, presupunem că valoarea de ieșire a DFF2 merge la logică ridicată cu marginea în creștere clk2 la $$t=t_2$$. În acest caz, nu există nici o eroare și flip-flop conține date valide, deși am avut încălcarea timpului de configurare. Tranzițiile de date cum era de așteptat cu nici o eroare.
- al doilea caz: să presupunem că ieșirea DFF2 merge la logică scăzută cu marginea în creștere clk2 la $$t=t_2$$. În acest caz, semnalul de activare nu este eșantionat cu succes în domeniul ceasului B. Cu toate acestea, aceasta nu va fi o problemă, deoarece En_Out provine din domeniul a clock și va fi ridicat pentru cel puțin o perioadă de clk1 așa cum se arată în Figura 3. Prin urmare, următoarea margine în creștere a clk2 la $$t=t_3$$ va proba corect valoarea En_Out. Pentru această margine de ceas, cerințele de sincronizare ale DFF2 vor fi îndeplinite, deoarece En_Out nu sa schimbat pentru mai mult de o perioadă de clk2. În acest caz, eșantionăm en_out cu aproximativ o perioadă de ceas mai târziu decât a trecut efectiv. Cu toate acestea, aceasta nu este o problemă, deoarece ceasurile celor două domenii de ceas au fost presupuse a fi independente și nu am făcut nicio presupunere cu privire la ora de sosire a semnalului En_Out. De fapt, circuitul din domeniul ceasului B realizează sfârșitul calculelor domeniului ceasului A cu o întârziere suplimentară de o perioadă clk2.
- apoi presupunem că registrul DFF2 intră în starea metastabilă. În acest caz, ieșirea registrului devine suspendată la o tensiune între tensiunile logice înalte și logice joase, dar aceasta va fi temporară. Flip-flop-ul va ieși în cele din urmă din starea metastabilă și va merge la logic high sau logic low. Timpul necesar pentru a ieși din starea metastabilă este cunoscut sub numele de timpul de rezoluție $$T_r$$. Acest lucru este prezentat în Figura 4. În această figură, a avut loc încălcarea timpului de configurare și flip flop-ul a intrat în starea metastabilă pentru un interval de timp de $$t_r$$. După $$t_r$$, ieșirea flip flop va merge fie la logic high ($$Q2_{meta-to-1}$$), fie la logic low ($$Q2_{meta-to-0}$$).
Figura 4
timpul de rezoluție nu este determinist și este descris ca o funcție de distribuție a probabilității
$$p(T_r) = e ^ {\frac {- T_r} {\tau}}$$
unde $$ \ tau$$ este “constanta timpului de descompunere” și este determinată de caracteristicile electrice ale flip flop-ului. O valoare tipică pentru acest parametru va fi de aproximativ o fracțiune de nanosecundă.
ecuația de mai sus oferă probabilitatea de a rămâne în starea metastabilă pentru un interval de timp egal cu $$t_r$$ după marginea ceasului de eșantionare. Datorită caracteristicii exponențiale a ecuației, Probabilitatea va scădea rapid pe măsură ce creștem valoarea $$T_r$$. De exemplu, pentru $$ \ tau =0,5 $ $ ns și $$t_r = 5$$ ns, obținem o probabilitate de $$ \ aprox 4,5 \ ori 10 ^ {-5}$$.
pentru a rezuma, nu putem preveni metastabilitatea, deoarece semnalele de ceas ale celor două domenii de ceas sunt independente una de cealaltă. Cu toate acestea, dacă oferim flip-flop-ului un timp de rezoluție suficient de mare, acesta se va rezolva într-o stare stabilă cu o probabilitate mare. Prin urmare, dacă designul nostru include flip-flops care ar putea intra în starea de metastabilitate, ar trebui să acordăm flip-flop-ului suficient timp pentru a ieși din metastabilitate. Apoi, putem propaga în siguranță valoarea flip-flop-ului către celulele logice din aval. Rețineți că utilizarea unei valori metastabile poate duce întregul sistem într-o stare necunoscută. Poate duce la un flux de curent ridicat și chiar la arderea cipurilor în cel mai rău caz. Prin urmare, ar trebui să evităm alimentarea cu date instabile a sistemului.
dublu flop
am văzut că acordarea flip-flop-ului un timp suficient poate reduce foarte mult șansa de a rămâne în starea metastabilă. Să vedem cum poate fi folosit acest lucru pentru a evita propagarea datelor metastabile în sistem. Luați în considerare diagrama bloc din Figura 5. Aceasta arată o cale tipică în domeniul ceasului B din Figura 1 care primește și procesează semnalul En_In.
Figura 5
perioada minimă de ceas care poate fi utilizată pentru operarea acestui circuit va fi
$ $ t_{clk,\; min} = t_{clk-to-Q} + t_{comb, \; max} + t_{setup}$$
în cazul în care $$t_{clk-to-Q}$$ și $$t_{setup}$ $ sunt Ceas-La-Q și timpul de configurare a flip-flops și $$t_{pieptene,\; max}$$ este întârzierea maximă pe care circuitul combinațional, ” pieptene.”, exponate. Această ecuație este obținută presupunând că datele de ieșire ale DFF2 sunt stabile. Dacă nu este, trebuie să luăm în considerare un timp de rezoluție ca în următoarea ecuație:
$ $t_{clk,\; min} = t_{clk-to-Q} + T_r + t_{pieptene, \; max} + t_{setup}$$
valoarea timpului de rezoluție va determina probabilitatea de a ieși din starea metastabilă. Să presupunem că perioada de clk2 este $$t_{clk2}$$. Apoi, valoarea timpului de rezoluție disponibil va fi
$$t_r = t_{clk2} – \ big ( t_{clk-to-Q} + t_{comb,\; max} + t_{setup} \ big )$$
pentru a reduce probabilitatea de a rămâne într-o stare metastabilă, ar trebui să creștem $$t_r$$. Cu o anumită perioadă de ceas $$t_{clk2}$$, singura opțiune de proiectare va fi minimizarea parametrului $$t_{pieptene, \; max}$$$. Prin urmare, ar fi mai bine să punem “pieptenele”.”blocați după flip-flop-ul DFF3 așa cum se arată în Figura 6. În acest fel, $$t_{pieptene, \; max}$$ va fi teoretic zero pentru calea dintre DFF2 și DFF3. Prin urmare, vom avea timpul maxim de rezoluție posibil.
Figura 6
această tehnică se numește flopping dublu și este utilizată pe scară largă la transferul semnalelor de control, cum ar fi semnalul de activare de mai sus între două domenii de ceas. Rețineți că registrul suplimentar va introduce o altă întârziere a unei perioade de ceas la semnalul de activare capturat de domeniul ceasului B. Cu toate acestea, această întârziere merită beneficiul evitării stărilor metastabile în sistem.
acest articol a discutat despre trecerea unui semnal de activare de la un domeniu de ceas lent la un domeniu de ceas rapid. Poate fi necesar să vă familiarizați cu alte câteva tehnici, cum ar fi trecerea unui semnal de control de la rapid la domeniul ceasului lent, tehnica de agitare a mâinilor și transferul de date bazat pe FIFO între domeniile ceasului. Puteți găsi câteva detalii în Capitolul 16 din RTL Hardware Design folosind VHDL: codificare pentru Eficiență, portabilitate și scalabilitate și Capitolul 6 din Advanced FPGA Design: Arhitectură, implementare și optimizare.
rezumat
- există multe circumstanțe în care trebuie să folosim rate de ceas diferite pentru diferite părți ale sistemului.
- deoarece semnalele de ceas ale diferitelor domenii de ceas sunt independente în general, transferul de date între diferitele domenii de ceas poate fi o sarcină dificilă.
- valoarea de ieșire a unui registru va fi imprevizibilă atunci când apare o încălcare a timpului de configurare sau a timpului de așteptare. Ar putea menține valoarea reprezentând o logică ridicată, o logică scăzută sau chiar mai rău o valoare între logica înaltă și logica joasă tensiuni.
- timpul necesar pentru a ieși din starea metastabilă este cunoscut sub numele de timpul de rezoluție $$t_r$$.
- dacă designul nostru include flip-flops care ar putea intra în starea de metastabilitate, ar trebui să acordăm flip-flop-ului suficient timp pentru a ieși din metastabilitate.
- tehnica “flopping dublu” este utilizată pe scară largă pentru a transfera semnale de control pe un singur bit între două domenii de ceas.
pentru a vedea o listă completă a articolelor mele, vă rugăm să vizitați această pagină.