Inleiding tot Clock Domain Crossing: Double Flopping
dit artikel bespreekt een bekende techniek genaamd “double flopping” om een single-bit besturingssignaal tussen twee clock domeinen over te brengen.
het is gebruikelijk om meerdere kloksignalen in een digitaal systeem te gebruiken. Aangezien de kloksignalen van verschillende klokdomeinen in het algemeen onafhankelijk zijn, kan het overbrengen van gegevens tussen de verschillende klokdomeinen een uitdagende taak zijn. Dit artikel zal een bekende techniek genaamd bespreken “double flopping” om een single-bit besturingssignaal tussen twee klokdomeinen over te brengen.
Waarom Hebben We Meerdere Klokken Nodig?
de algemene digitale ontwerpmethodologie beveelt het gebruik van één kloksignaal voor het gehele systeem aan, voornamelijk omdat het zowel de ontwerpprocedure als de systeemtiminganalyse vereenvoudigt. Deze methodologie geeft echter niet altijd de meest efficiënte oplossing en soms is het zelfs niet mogelijk om een enkele klok voor het hele systeem te hebben. Denk bijvoorbeeld aan een FPGA-ontwerp dat werkt op 20 MHz en communiceert met twee externe apparaten die gebruikmaken van interfaces die werken op 100 MHz en 150 MHz. Hier hebben we te maken met drie verschillende klokfrequenties. Merk op dat de klokfrequentie van de interfaces vooraf kan worden gedefinieerd en dat we deze mogelijk niet kunnen kiezen op basis van de klok die binnen de FPGA wordt gebruikt.
soms kunnen we de klokfrequentie voor de verschillende delen van het systeem kiezen, maar zelfs in dit geval is het misschien geen goed idee om het hele systeem met een bepaalde klokfrequentie te bedienen. Stel bijvoorbeeld dat het hele systeem op 20 MHz kan worden gebruikt, behalve voor een subsysteem waarvoor een 100 MHz-klok nodig is. Als we besluiten om één kloksignaal te gebruiken voor het hele systeem, dan zouden we het systeem moeten bedienen op 100 MHz om de hoogste kloksnelheid in het systeem te kunnen gebruiken. Dit is natuurlijk niet redelijk, want niet alleen hebben we een groot deel van het systeem te veel ontworpen (onderdelen die op 20 MHz kunnen worden bediend), maar ook hebben we het systeem dynamisch stroomverbruik onnodig verhoogd. Zoals u kunt zien, zijn er veel omstandigheden waarin we verschillende kloksnelheden moeten gebruiken voor verschillende delen van het systeem.
een gedeelte van het ontwerp waarin alle synchrone elementen, zoals slippers en Ram ‘ s, hetzelfde kloksignaal gebruiken, wordt een klokdomein genoemd. Het hebben van verschillende klok domeinen kan nuttig zijn, maar is niet zo eenvoudig als het lijkt te zijn. In de volgende paragraaf worden enkele van de problemen besproken die we kunnen tegenkomen bij het gebruik van een systeem met meerdere klokken.
het Metastabiliteitsprobleem
gaat ervan uit dat we twee secties van logica hebben, A en B, die werken op respectievelijk 50 MHz en 100 MHz. Dit is te zien in Figuur 1.
figuur 1
in ons eenvoudige voorbeeld heeft de sectie B een invoer, En_In, die verbonden is met de en_out-uitvoer van de sectie A. Deze verbinding komt overeen met een active-high enable signaal dat een algoritme initieert in B nadat een bepaalde bewerking is uitgevoerd door A. figuur 1 toont het register dat het enable signaal genereert in A en het register dat het ontvangt in B.
ga ervan uit dat de klokgolfvormen zijn zoals weergegeven in Figuur 2 en dat het systeem rising edge-triggered is. Aangezien het En_Out-signaal wordt gegenereerd door het a clock-domein, kan de overgang van laag naar hoog plaatsvinden na een stijgende rand van clk1, zoals weergegeven in de figuur. De vertraging tussen de clk1 rising edge en de en_out overgang komt overeen met de klok-naar-Q vertraging ($$t_{clk-to-Q, DFF1}$$) van de flip-flop in de a logic sectie. Nu verwachten we dat het dff2-register in het B-Domein Het enable-signaal zal sampleen bij de volgende stijgende rand van clk2 op $$t=t_2$$. De sampling zal succesvol plaatsvinden op voorwaarde dat aan de timing-eisen van de DFF2 wordt voldaan, dat wil zeggen $$t_1+T_{clk-to-Q,\; DFF1} \leq t_2-t_{setup,\; DFF2}$$.
Figuur 2
in Figuur 2 is aan de voorwaarde $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2}$$ voldaan, maar dit is niet altijd het geval. Merk op dat de kloksignalen van verschillende klokdomeinen in het algemeen onafhankelijk zijn. We kennen hun faserelatie niet en de golfvormen kunnen zijn zoals weergegeven in Figuur 3. In dit geval is de overgang van laag naar hoog van het enable signaal zo dicht bij de stijgende rand van clk2 dat aan de voorwaarde $$t_1+T_{clk-to-Q,\; DFF1} \leq t_2-t_{setup,\; DFF2}$$ niet is voldaan.
Figuur 3
aangezien de invoergegevens van DFF2 binnen de instellingstijd zijn gewijzigd, zal het registergedrag onvoorspelbaar zijn. Wegens de overtreding van de installatietijd, zou het voltage van de registeroutput de waarde kunnen zijn die een logica hoog, een logica laag, of nog slechter een waarde tussen de logica hoog en logica lage spanningen vertegenwoordigen. Deze drie gevallen zijn mogelijk terwijl de invoergegevens eigenlijk logischerwijs hoog waren aan de corresponderende klokrand. Evenzo zal de output waarde van het register onvoorspelbaar zijn, wanneer de Register hold time wordt geschonden, dat wil zeggen En_Out veranderingen binnen een tijdvenster na de actieve klok rand gedefinieerd door de register hold time. Wanneer de output van het register bij een spanning tussen de logische hoge en de logische lage spanningen wordt opgeschort, zeggen wij dat de flip-flop een metastable staat is ingegaan.
laten we de drie mogelijke gevallen van timing overtreding van Figuur 3 afzonderlijk onderzoeken:
- neem als eerste geval aan dat de uitvoerwaarde van de DFF2 naar logic high gaat met de clk2 rising edge op $$t=t_2$$. In dit geval is er geen fout en de flip-flop bevat geldige gegevens, hoewel we hadden setup tijd overtreding. De gegevens overgangen zoals verwacht zonder fout.
- het tweede geval: neem aan dat de dff2 uitvoer naar logic low gaat met de clk2 rising edge op $$t=t_2$$. In dit geval wordt het enable-signaal niet succesvol gesampled in het domein van de B-klok. Dit zal echter geen probleem zijn omdat En_Out afkomstig is van het a clock domein en het zal hoog zijn voor ten minste één periode van clk1 zoals weergegeven in Figuur 3. Daarom zal de volgende stijgende rand van clk2 op $$t=t_3$$ de En_Out waarde correct sampleen. Voor deze klokrand wordt voldaan aan de timing-eisen van DFF2 omdat En_Out niet meer dan één periode van clk2 is veranderd. In dit geval, we zijn sampling En_Out ongeveer een klok periode later dan het eigenlijk overgestapt. Dit is echter geen probleem omdat de klokken van de twee klokdomeinen onafhankelijk werden geacht en we geen aanname maakten over de aankomsttijd van het En_Out-signaal. In feite realiseert het circuit in het B klok domein het einde van de berekeningen van het A klok domein met een extra vertraging van één clk2 periode.
- ga er vervolgens van uit dat het dff2-register de metastabiele status invoert. In dit geval wordt de registeroutput opgeschort bij een spanning tussen de logische hoge en logische lage spanningen maar dit zal tijdelijk zijn. De flip-flop zal uiteindelijk de metastable status verlaten en naar logic high of logic low gaan. De tijd die nodig is om de metastable status te verlaten staat bekend als de resolutietijd $$T_r$$. Dit is te zien in Figuur 4. In deze figuur, de setup tijd overtreding heeft plaatsgevonden en de flip flop heeft de metastable status voor een tijdsinterval van $$T_r$$ingevoerd. Na $$T_r$$, gaat de flip flop uitvoer naar logic high ($$Q2_{meta-to-1}$$) of logic low ($$Q2_{meta-to-0}$$).
Figuur 4
de oplossingstijd is niet deterministisch en wordt beschreven als een kansverdelingsfunctie
$$P (T_r) = e^{\frac{-t_r}{\tau}}$$
waar $$\tau$$ de “vervaltijdconstante” is en wordt bepaald door de elektrische kenmerken van de flip flop. Een typische waarde voor deze parameter zal ongeveer een fractie van een nanoseconde zijn.
de bovenstaande vergelijking geeft de kans om in de metastabiele toestand te blijven gedurende een tijdsinterval gelijk aan $ $ T_r$$ na de rand van de steekproefklok. Vanwege de exponentiële karakteristiek van de vergelijking, zal de kans snel afnemen als we de waarde van $$T_r$$verhogen. Bijvoorbeeld, voor $$\tau = 0.5$ $ ns en $$T_r = 5$ $ ns, krijgen we een waarschijnlijkheid van $$\ca.4,5 \keer 10^{-5}$$.
samenvattend kunnen we metastability niet voorkomen omdat de kloksignalen van de twee klokdomeinen onafhankelijk van elkaar zijn. Echter, als we de flip-flop voorzien van voldoende grote oplossingstijd, zal het oplossen naar een stabiele toestand met een hoge waarschijnlijkheid. Daarom, als ons ontwerp slippers bevat die de metastabiliteitstoestand kunnen bereiken, moeten we de flip-flop genoeg tijd geven om de metastability te verlaten. Dan kunnen we veilig de waarde van de flip-flop doorgeven aan de stroomafwaartse logische cellen. Merk op dat het gebruik van een metastable waarde het hele systeem in een onbekende staat kan leiden. Het kan leiden tot een hoge stroomstroom en zelfs chip burn-out in het ergste geval. Daarom moeten we vermijden onstabiele gegevens aan het systeem toe te voegen.
Dubbele Flopping
we zagen dat het geven van de flip-flop een voldoende tijd de kans om in de metastabiele toestand te blijven sterk kan verminderen. Laten we eens kijken hoe dit kan worden gebruikt om te voorkomen dat het verspreiden van metastabiele gegevens in het systeem. Overweeg het blokdiagram in Figuur 5. Dit toont een typisch pad in het B klok domein van Figuur 1 dat het En_In signaal ontvangt en verwerkt.
Figuur 5
de minimale klokperiode die gebruikt kan worden om dit circuit te bedienen is
$$t_{clk,\; min} = T_{clk-to-Q} + T_{comb, \; max} + T_{instellingen}$$
waar $$t_{clk-to-Q}$$ en $$t_{setup}$$ de klok-tot-Q en de insteltijd van de teenslippers zijn en $$t_{kam,\; max}$$ is de maximale vertraging die het combinationele circuit, “kam.”, tentoonstelling. Deze vergelijking wordt verkregen door aan te nemen dat de outputgegevens van DFF2 stabiel zijn. Als dat niet het geval is, moeten we rekening houden met een oplossingstijd zoals in de volgende vergelijking:
$$t_{clk,\; min} = T_{clk-to-Q} + T_r + T_{comb, \; max} + T_{instellingen}$$
de waarde van de oplossingstijd zal de waarschijnlijkheid van het komen uit de metastabiele toestand bepalen. Stel dat de periode van clk2 $$T_{clk2}$$is. Dan zal de waarde van de beschikbare oplossingstijd
$$t_r = T_{clk2} – \ big (T_{clk-to-Q} + T_{comb, \; max} + T_{setup} \ big )$$
om de kans op het blijven in een metastable staat te verminderen, zouden we $$T_r$$moeten verhogen. Met een gegeven klokperiode $$T_{clk2}$$, is de enige ontwerpoptie het minimaliseren van de parameter $$t_{comb,\; max}$$. Daarom kunnen we beter de “kam.”blok na de dff3 flip-flop zoals weergegeven in Figuur 6. Op deze manier zal $$T_{comb,\; max}$$ theoretisch nul zijn voor het pad tussen DFF2 en DFF3. Daarom hebben we de maximale oplossingstijd.
Figuur 6
deze techniek wordt double flopping genoemd en wordt veel gebruikt bij het overbrengen van besturingssignalen zoals het bovenstaande enable-signaal tussen twee klokdomeinen. Merk op dat het extra register nog een vertraging van één klokperiode zal introduceren om het signaal te activeren dat is vastgelegd door het B-klokdomein. Echter, deze vertraging is het voordeel van het vermijden van metastable toestanden in het systeem waard.
dit artikel besprak het doorgeven van een enable Signaal van een slow clock domein naar een fast clock domein. Het kan nodig zijn om vertrouwd te raken met verschillende andere technieken, zoals het doorgeven van een besturingssignaal van snel naar de slow clock domein, de hand schudden techniek en FIFO-gebaseerde gegevensoverdracht tussen de klok domeinen. U kunt enkele details vinden in hoofdstuk 16 van RTL Hardware Design met behulp van VHDL: Codering voor efficiëntie, draagbaarheid en schaalbaarheid en hoofdstuk 6 van Advanced FPGA Design: Architectuur, implementatie en optimalisatie.
samenvatting
- er zijn vele omstandigheden waarin we verschillende kloksnelheden moeten gebruiken voor verschillende onderdelen van het systeem.
- omdat de kloksignalen van verschillende klokdomeinen in het algemeen onafhankelijk zijn, kan het overdragen van gegevens tussen de verschillende klokdomeinen een uitdagende taak zijn.
- de uitvoerwaarde van een register zal onvoorspelbaar zijn wanneer een overtreding van de insteltijd of de wachttijd optreedt. Het zou de waarde kunnen bevatten die een logica hoog, een logica laag, of nog erger een waarde tussen de logica hoog en logica lage spanningen vertegenwoordigt.
- de tijd die nodig is om de metastable status te verlaten staat bekend als de resolutietijd $$T_r$$.
- als ons ontwerp flip-flops bevat die de metastability status kunnen bereiken, moeten we de flip-flop genoeg tijd geven om de metastability te verlaten.
- de “double flopping” – techniek wordt veel gebruikt voor het overbrengen van enkelvoudige besturingssignalen tussen twee klokdomeinen.
ga naar deze pagina om een volledige lijst van mijn artikelen te zien.