introduktion till Clock Domain Crossing: Double Flopping

denna artikel kommer att diskutera en välkänd teknik som kallas “double flopping” för att överföra en enda bit styrsignal mellan två klockdomäner.

det är vanligt att använda flera klocksignaler i ett digitalt system. Eftersom klocksignalerna för olika klockdomäner är oberoende i allmänhet kan överföring av data mellan de olika klockdomänerna vara en utmanande uppgift. Denna artikel kommer att diskutera en välkänd teknik som kallas” double flopping ” för att överföra en enda bit styrsignal mellan två klockdomäner.

Varför Behöver Vi Flera Klockor?

den allmänna digitala designmetoden rekommenderar att man använder en klocksignal för hela systemet främst eftersom det förenklar både designproceduren och systemtidsanalysen. Denna metod ger dock inte alltid den mest effektiva lösningen och ibland är det inte ens möjligt att ha en enda klocka för hela systemet. Tänk till exempel på en FPGA-design som arbetar vid 20 MHz som kommunicerar med två externa enheter med gränssnitt som arbetar vid 100 MHz och 150 MHz. Här måste vi hantera tre olika klockfrekvenser. Observera att klockfrekvensen för gränssnitten kan fördefinieras och vi kanske inte kan välja den baserat på klockan som används i FPGA.

ibland kan vi kanske välja klockfrekvens för de olika delarna av systemet, men även i det här fallet kanske det inte är bra att använda hela systemet vid en given klockfrekvens. Antag till exempel att hela systemet kan drivas vid 20 MHz förutom ett delsystem som behöver en 100 MHz-klocka. Om vi bestämmer oss för att använda en klocksignal för hela systemet, måste vi använda systemet vid 100 MHz för att rymma den högsta klockfrekvensen som finns i systemet. Självklart är detta inte rimligt eftersom vi inte bara har överdesignat en stor del av systemet (delar som kan drivas vid 20 MHz) men vi har också onödigt ökat systemets dynamiska strömförbrukning. Som du kan se finns det många omständigheter där vi måste använda olika klockfrekvenser för olika delar av systemet.

en del av designen där alla synkrona element, som flip-flops och RAMs, använder samma klocksignal kallas en klockdomän. Att ha olika klockdomäner kan vara fördelaktigt men är inte så lätt som det verkar vara. I nästa avsnitt diskuteras några av de problem som vi kan möta när vi använder ett system med flera klockor.

Metastabilitetsproblemet

antar att vi har två delar av logiken, A och B, som arbetar vid 50 MHz respektive 100 MHz. Detta visas i Figur 1.

Figur 1

i vårt enkla exempel har b-sektionen en ingång, En_In, som är ansluten till En_Out-utgången i A-sektionen. Denna anslutning motsvarar en aktiv-hög aktiveringssignal som initierar en algoritm i B efter att en viss operation har gjorts av A. Figur 1 visar registret som genererar aktiveringssignalen i A och registret som tar emot den i B.

Antag att klockvågformerna är som visas i Figur 2 och systemet är stigande kantutlöst. Eftersom en_out-signalen genereras av A-klockdomänen kan dess låg-till-hög övergång inträffa efter en stigande kant av clk1 som visas i figuren. Fördröjningen mellan clk1 stigande kant och En_Out övergången motsvarar klockan-till-Q fördröjning ($$T_{clk-till-Q, DFF1}$$) av flip-flop i a logic sektionen. Nu förväntar vi oss att dff2-registret i b-domänen kommer att prova aktiveringssignalen vid nästa stigande kant av clk2 vid $$t=t_2$$. Provtagningen kommer att ske framgångsrikt förutsatt att tidskraven för DFF2 är uppfyllda, dvs $$t_1 + t_{clk-to-Q,\; DFF1} \ leq t_2-t_{setup, \; DFF2}$$.

Figur 2

i Figur 2 är villkoret $$t_1+t_{clk-to-Q,\; DFF1} \leq t_2-t_{setup,\; DFF2}$$ nöjd men så är inte alltid fallet. Observera att klocksignalerna för olika klockdomäner är oberoende i allmänhet. Vi vet inte deras fasförhållande och vågformerna kan vara som visas i Figur 3. I detta fall är den låga till höga övergången av aktiveringssignalen så nära den stigande kanten av clk2 att villkoret $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-t_{setup, \; DFF2}$$ inte är uppfyllt.

Figur 3

eftersom indata för DFF2 har ändrats inom inställningstiden kommer registerbeteendet att vara oförutsägbart. På grund av inställningstiden överträdelse, registret utgångsspänningen kan vara det värde som representerar en logisk hög, en logisk låg, eller ännu värre ett värde mellan logic high och logic low spänningar. Dessa tre fall är möjliga medan ingångsdata faktiskt var logiska höga vid motsvarande klockkant. På samma sätt kommer utmatningsvärdet för registret att vara oförutsägbart när registerhålltiden bryts, dvs. En_Out ändras inom ett tidsfönster efter den aktiva klockkanten som definieras av registerhålltiden. När utsignalen från registret blir upphängd vid en spänning mellan de logiska höga och logiska låga spänningarna, säger vi att flip-flop har gått in i ett metastabilt tillstånd.

låt oss undersöka de tre möjliga fall från tidpunkten kränkning av Figur 3 individuellt:

  • som det första fallet antar du att utgångsvärdet för DFF2 går till logic high med clk2 stigande kant vid $$t=t_2$$. I det här fallet finns det inget fel och flip-flop innehåller giltiga data även om vi hade inställningstidsöverträdelse. Dataövergångarna som förväntat utan fel.
  • det andra fallet: Antag att dff2-utgången går till logic low med clk2 stigande kant vid $$t=t_2$$. I det här fallet samplas inte aktiveringssignalen framgångsrikt i b-klockdomänen. Detta kommer dock inte att vara ett problem eftersom En_Out kommer från A clock-domänen och den kommer att vara hög under minst en period av clk1 som visas i Figur 3. Därför kommer nästa stigande kant av clk2 vid $$t=t_3$$ att prova En_Out-värdet korrekt. För denna klockkant kommer tidskraven för DFF2 att uppfyllas eftersom En_Out inte har ändrats under mer än en period av clk2. I det här fallet samplar vi En_Out ungefär en klockperiod senare än den faktiskt övergick. Detta är dock inte ett problem eftersom klockorna på de två klockdomänerna antogs vara oberoende och vi gjorde inget antagande om ankomsttiden för En_Out-signalen. Faktum är att kretsen i b-klockdomänen realiserar slutet på beräkningarna av A-klockdomänen med en extra fördröjning på en clk2-period.
  • nästa antar att dff2-registret går in i metastabilt tillstånd. I detta fall blir registerutgången upphängd vid en spänning mellan de logiska höga och logiska låga spänningarna men detta kommer att vara tillfälligt. Flip-flop kommer så småningom att lämna det metastabila tillståndet och gå till logic high eller logic low. Den tid som krävs för att avsluta det metastabila tillståndet kallas upplösningstiden $$T_r$$. Detta visas i Figur 4. I den här siffran har överträdelsen av installationstiden inträffat och flip-flop har gått in i metastabilt tillstånd under ett tidsintervall på $$T_r$$. Efter $$T_r$$ går flip flop-utgången till antingen logic high ($$Q2_{meta-to-1}$$) eller logic low ($$Q2_{meta-to-0}$$).

Figur 4

upplösningstiden är inte deterministisk och beskrivs som en sannolikhetsfördelningsfunktion

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

där $$ \ tau$$ är “decay time constant” och bestäms av de elektriska egenskaperna hos flip flop. Ett typiskt värde för denna parameter kommer att vara ungefär en bråkdel av en nanosekund.

ovanstående ekvation ger sannolikheten att förbli i metastabilt tillstånd under ett tidsintervall lika med $$T_r$$ efter provtagningsklockan. På grund av ekvationens exponentiella egenskaper minskar sannolikheten snabbt när vi ökar värdet på $$T_r$$. Till exempel, för $$\tau =0,5$$ ns och $$T_r = 5$$ ns, får vi en sannolikhet på $$\ca 4,5 \gånger 10^{-5}$$.

för att sammanfatta kan vi inte förhindra metastabilitet från att hända eftersom klocksignalerna för de två klockdomänerna är oberoende av varandra. Men om vi ger flip-flop med tillräckligt stor upplösningstid, kommer det att lösa sig till ett stabilt tillstånd med stor sannolikhet. Därför, om vår design innehåller flip-flops som kan komma in i metastabilitetstillståndet, borde vi ge flip-flop tillräckligt med tid för att lämna metastabiliteten. Sedan kan vi säkert sprida värdet på flip-flop till nedströmslogikcellerna. Observera att användning av ett metastabilt värde kan leda hela systemet till ett okänt tillstånd. Det kan leda till ett högt strömflöde och till och med chiputbrändhet i värsta fall. Därför bör vi undvika att mata instabila data till systemet.

Dubbel Flopping

vi såg att ge flip-flop en tillräcklig tid kan kraftigt minska risken för kvar i metastabilt tillstånd. Låt oss se hur detta kan användas för att undvika att sprida metastabil data i systemet. Tänk på blockschemat i Figur 5. Detta visar en typisk sökväg i b-klockdomänen i Figur 1 som tar emot och bearbetar En_In-signalen.

Figur 5

den minsta klockperioden som kan användas för att använda denna krets är

$ $ T_{clk,\; min} = t_{clk-to-Q} + t_{comb, \; max} + t_{inställning}$$

där $$t_{clk-to-Q}$$ och $$T_{setup}$$ är klockan-till-Q och inställningstiden för flip-flops och $$T_{comb, \; max}$$ är den maximala fördröjningen att kombinationskretsen, “kam.”, utställning. Denna ekvation erhålls genom att anta att utgångsdata för DFF2 är stabil. Om det inte är det måste vi överväga en viss upplösningstid som i följande ekvation:

$ $ T_ {clk,\; min} = t_{clk-to-Q} + T_r + t_{comb, \; max} + t_{inställning}$$

värdet av upplösningstiden bestämmer sannolikheten för att komma ut ur det metastabila tillståndet. Antag att perioden för clk2 är $$t_{clk2}$$. Då kommer värdet på den tillgängliga upplösningstiden att vara

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

för att minska sannolikheten för att förbli i ett metastabilt tillstånd bör vi öka $$T_r$$. Med en given klockperiod $$t_{clk2}$$, kommer det enda designalternativet att minimera parametern $$T_{comb,\; max}$$. Därför skulle vi bättre sätta ” kammen.”blockera efter dff3 flip-flop som visas i Figur 6. På detta sätt är $$ T_{comb, \; max}$ $ teoretiskt noll för sökvägen mellan DFF2 och DFF3. Därför har vi maximal möjlig upplösningstid.

Figur 6

denna teknik kallas dubbel flopping och används ofta vid överföring av styrsignaler som ovanstående aktiveringssignal mellan två klockdomäner. Observera att det extra registret kommer att införa en annan fördröjning av en klockperiod till aktiveringssignalen som fångas av B-klockdomänen. Denna fördröjning är dock värt fördelen med att undvika metastabila tillstånd i systemet.

den här artikeln diskuterade att skicka en aktiveringssignal från en långsam klockdomän till en snabb klockdomän. Du kan behöva bekanta dig med flera andra tekniker som att skicka en styrsignal från snabb till långsam klockdomän, handskakningstekniken och FIFO-baserad dataöverföring mellan klockdomänerna. Du kan hitta några detaljer i kapitel 16 i RTL Hardware Design med VHDL: kodning för effektivitet, bärbarhet och skalbarhet och Kapitel 6 i Advanced FPGA Design: Arkitektur, implementering och optimering.

sammanfattning

  • det finns många omständigheter där vi måste använda olika klockfrekvenser för olika delar av systemet.
  • eftersom klocksignalerna för olika klockdomäner är oberoende i allmänhet kan överföring av data mellan de olika klockdomänerna vara en utmanande uppgift.
  • utdatavärdet för ett register kommer att vara oförutsägbart när en inställningstid eller spärrtid inträffar. Det kan hålla värdet som representerar en logik hög, en logik låg, eller ännu värre ett värde mellan logic high och logic low spänningar.
  • den tid som krävs för att avsluta det metastabila tillståndet kallas upplösningstiden $$T_r$$.
  • om vår design innehåller flip-flops som kan komma in i metastabilitetstillståndet, bör vi ge flip-flop tillräckligt med tid för att lämna metastabiliteten.
  • “double flopping”-tekniken används ofta för att överföra styrsignaler med en bit mellan två klockdomäner.

för att se en fullständig lista över mina artiklar, besök DENNA sida.

Lämna ett svar

Din e-postadress kommer inte publiceras.