Introduction to Clock Domain Crossing: Double Flopping
tässä artikkelissa käsitellään tunnettua tekniikkaa nimeltä “double flopping” yhden bitin ohjaussignaalin siirtämiseksi kahden kellon verkkotunnuksen välillä.
on tavallista käyttää useita kellosignaaleja digitaalisessa järjestelmässä. Koska eri kelloalueiden kellosignaalit ovat yleensä riippumattomia, tietojen siirtäminen eri kelloalueiden välillä voi olla haastava tehtävä. Tässä artikkelissa käsitellään tunnettua tekniikkaa nimeltä “double flopping”siirtää yhden bitin ohjaussignaalin kahden kellon verkkotunnuksia.
Miksi Tarvitaan Useita Kelloja?
yleinen digitaalinen suunnittelumenetelmä suosittelee yhden kellosignaalin käyttämistä koko järjestelmässä lähinnä siksi, että se yksinkertaistaa sekä suunnitteluprosessia että järjestelmän ajoitusanalyysia. Tämä menetelmä ei kuitenkaan aina anna kaikkein tehokkainta ratkaisua ja joskus ei ole edes mahdollista saada yhtä kelloa koko järjestelmälle. Ajatellaanpa esimerkiksi 20 MHz: n taajuudella toimivaa FPGA-rakennetta, joka kommunikoi kahden ulkoisen laitteen kanssa käyttäen 100 MHz: n ja 150 MHz: n taajuuksilla toimivia liitäntöjä. Tässä on käsiteltävä kolmea eri kellotaajuutta. Huomaa, että rajapintojen kellotaajuus voidaan määrittää ennalta, emmekä välttämättä pysty valitsemaan sitä FPGA: n sisällä käytettävän kellon perusteella.
joskus voidaan valita järjestelmän eri osien kellotaajuus, mutta tässäkään tapauksessa ei välttämättä kannata käyttää koko järjestelmää tietyllä kellotaajuudella. Oletetaan esimerkiksi, että koko järjestelmää voidaan käyttää 20 MHz: n taajuudella lukuun ottamatta osajärjestelmää, joka tarvitsee 100 MHz: n kellon. Jos päätämme käyttää yhtä kellosignaalia koko järjestelmässä, meidän pitäisi käyttää järjestelmää 100 MHz: n taajuudella, jotta järjestelmään mahtuisi korkein käytettävissä oleva kellotaajuus. On selvää, että tämä ei ole järkevää, koska ei vain olemme overdesigned suuri osa järjestelmästä (osat, jotka voitaisiin käyttää 20 MHz) mutta myös olemme tarpeettomasti lisänneet järjestelmän dynaaminen virrankulutus. Kuten näette, on monia tilanteita, joissa meidän on käytettävä eri kellotaajuuksia järjestelmän eri osiin.
mallin osaa, jossa kaikki synkronielementit, kuten varvastossut ja pässit, käyttävät samaa kellosignaalia, kutsutaan kelloalueeksi. Ottaa eri kellon verkkotunnuksia voi olla hyödyllistä, mutta ei ole niin helppoa kuin se näyttää olevan. Seuraavassa osassa käsitellään joitakin ongelmia, joita saatamme kohdata käyttäessämme monikellojärjestelmää.
Metastabiilisuusongelma
olettaa, että meillä on kaksi logiikan osaa, A ja B, jotka toimivat vastaavasti 50 MHz: n ja 100 MHz: n taajuuksilla. Tämä on esitetty kuvassa 1.
Kuva 1
yksinkertaisessa esimerkissämme B-lohkolla on tulo, En_In, joka on liitetty A-osan En_Out-ulostuloon. Tämä yhteys vastaa aktiivista-high enable-signaalia, joka käynnistää algoritmin B: ssä sen jälkeen, kun tietty operaatio on tehty A: lla. kuvassa 1 on enable-signaalin tuottava Rekisteri A: ssa ja sen vastaanottava Rekisteri B: ssä.
Oletetaan, että kellon aaltomuodot ovat kuvan 2 mukaiset ja systeemi on nouseva reuna-aktivoitunut. Koska en_out-signaali syntyy kellon verkkotunnuksesta, sen matalasta korkeaan siirtyminen voi tapahtua clk1: n kohoavan reunan jälkeen, kuten kuvassa on esitetty. Clk1: n nousevan reunan ja En_Out-siirtymän välinen viive vastaa a-logiikkaosiossa flip-flopin kello-Q-viivettä ($$t_{clk-to-Q, DFF1}$$). Nyt, odotamme, että dff2 rekisteriin B verkkotunnuksen näyte ota signaali seuraavan nousevan reunan clk2 $ $t=t_2$$. Näytteenotto onnistuu, jos dff2: n ajoitusvaatimukset täyttyvät eli $$T_1+T_{clk-to-Q,\; DFF1} \leq t_2-T_{setup,\; DFF2}$$.
kuva 2
kuvassa 2 ehto $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2}$$ täyttyy, mutta näin ei aina ole. Huomaa, että eri kelloalueiden kellosignaalit ovat yleensä riippumattomia. Emme tiedä niiden vaihesuhdetta ja aaltomuodot voivat olla kuten kuvassa 3. Tällöin Ota käyttöön-signaalin matalasta korkeaan siirtyminen on niin lähellä clk2: n nousevaa reunaa, että ehto $$T_1+T_{clk-to-Q,\; DFF1} \leq t_2-T_{setup,\; DFF2}$$ ei täyty.
kuva 3
koska dff2: n syöttötiedot ovat muuttuneet määritysajan kuluessa, rekisterikäyttäytyminen on arvaamatonta. Asetusaikarikkomuksen vuoksi rekisterin lähtöjännite voi olla logiikan korkeaa, logiikan alhaista tai vielä pahempaa logiikan korkean ja logiikan low-jännitteiden välistä arvoa edustava arvo. Nämä kolme tapausta ovat mahdollisia, kun taas syöttötiedot olivat itse asiassa logiikan korkealla vastaavalla kellon reunalla. Vastaavasti rekisterin lähtöarvo on arvaamaton, kun rekisterin pitoaikaa rikotaan eli En_Out muuttuu aikaikkunan sisällä rekisterin pitoajan määrittelemän aktiivisen kellon reunan jälkeen. Kun rekisterin ulostulo tulee keskeytetyksi logiikan korkean ja logiikan matalan jännitteen välisellä jännitteellä, sanomme, että flip-flop on tullut metastabiiliin tilaan.
tarkastellaan kolmea mahdollista tapausta kuvion 3 ajoituksen rikkomisesta erikseen:
- ensimmäisenä tapauksena oletetaan, että dff2: n lähtöarvo menee logiikan korkeaksi clk2: n noustessa edukseen $$t=t_2$$. Tässä tapauksessa, ei ole virhettä ja flip-flop sisältää voimassa olevia tietoja, vaikka meillä oli setup time rikkoo. Tietojen siirtymät odotetusti ilman virhettä.
- toinen tapaus: oletetaan, että dff2: n lähtö menee logiikan mukaan alhaiseksi clk2: n nousuedun ollessa $$t=t_2$$. Tällöin enable-signaalia ei onnistuneesti näytetä B-kelloalueella. Kuitenkin, tämä ei ole ongelma, koska En_Out tulee kellon verkkotunnuksen ja se on korkea ainakin yhden jakson clk1 kuten kuvassa 3. Siksi clk2: n seuraava nouseva reuna $$t=t_3$$ näyttää En_Out-arvon oikein. Tämän kellon reunan osalta dff2: n ajoitusvaatimukset täyttyvät, koska En_Out ei ole muuttunut enempää kuin yhden clk2: n jakson ajan. Tässä tapauksessa, olemme näytteenotto En_Out noin yhden kellon ajan myöhemmin kuin se todella transitioned. Kuitenkin, tämä ei ole ongelma, koska kellot kahden kellon verkkotunnuksia oletettiin olevan riippumattomia ja emme tee mitään olettamusta saapumisaika en_out signaali. Itse asiassa B-kelloalueen piiri toteuttaa a-kelloalueen laskutoimitusten päättymisen yhden clk2-jakson ylimääräisellä viiveellä.
- oletetaan seuraavaksi, että dff2-Rekisteri siirtyy metastabiiliin tilaan. Tällöin rekisterilähtö keskeytyy logiikan korkean ja logiikan matalan jännitteen välisellä jännitteellä, mutta tämä on väliaikaista. Flip-flop poistuu lopulta metastabiilista tilasta ja siirtyy logic high-tai logic low-tilaan. Metastabiilista tilasta poistumiseen tarvittava aika tunnetaan resoluutioaikana $$t_r$$. Tämä on esitetty kuvassa 4. Tässä luvussa, setup time rikkominen on tapahtunut ja flip flop on tullut metastabiili tila aikaväli $$t_r$$. Kun $$T_r$$, flip flop tuloste menee joko logic high ($$Q2_{meta-to-1}$$) tai logic low ($$Q2_{meta-to-0}$$).
Kuva 4
resoluutioaika ei ole deterministinen ja se kuvataan todennäköisyysjakaumafunktiona
$$P (T_r)=e^{\frac {- T_r}{\tau}}$$
missä $$ \ tau$$ on “hajoamisaikavakio” ja määräytyy flip flopin sähköisten ominaisuuksien mukaan. Tyypillinen arvo tälle parametrille on noin yhden nanosekunnin murto-osa.
yllä oleva yhtälö antaa todennäköisyyden jäädä metastabiiliin tilaan aikaväliksi, joka on yhtä suuri kuin $$t_r$$ näytteenottokellon reunan jälkeen. Koska eksponentiaalinen ominaisuus yhtälö, todennäköisyys pienenee nopeasti, kun lisäämme arvoa $$t_r$$. Esimerkiksi $ $\tau =0.5$ $ ns ja $$t_r = 5$ $ ns, saamme todennäköisyyden $ $ \approx 4.5 \kertaa 10^{-5}$$.
yhteenvetona voidaan todeta, että metastabiilisuutta ei voi estää, koska kahden kellodomeenin kellosignaalit ovat toisistaan riippumattomia. Jos kuitenkin annamme flip-flopille riittävän suuren resoluutioajan, se ratkeaa vakaaseen tilaan suurella todennäköisyydellä. Näin ollen, jos meidän suunnittelu sisältää Varvassandaalit, jotka voisivat tulla metastability tilassa, meidän pitäisi antaa flip-flop tarpeeksi aikaa poistua metastability. Sitten voimme turvallisesti levittää flip-flopin arvoa loppupään logiikkasoluihin. Huomaa, että käyttämällä metastabiili arvo voi johtaa koko järjestelmän tuntemattomaan tilaan. Se voi johtaa pahimmassa tapauksessa suureen virtaukseen ja jopa sirujen loppumiseen. Siksi meidän pitäisi välttää syöttämästä epävakaata tietoa järjestelmään.
Kaksoisfloppaus
näimme, että riittävän ajan antaminen flip-flopille voi vähentää huomattavasti mahdollisuutta jäädä metastabiiliin tilaan. Katsotaan, miten tätä voidaan käyttää estämään metastabiilin datan leviäminen järjestelmään. Tarkastellaan lohkokaavio Kuvassa 5. Tämä näyttää kuvan 1 B-kelloalueella tyypillisen polun, joka vastaanottaa ja käsittelee en_in-signaalin.
kuva 5
pienin kellonaika, jolla tätä piiriä voidaan käyttää, on
$$t_{clk,\; min} = t_{clk-to-Q} + t_{comb, \; max} + T_{asetukset}$$
missä $$t_{clk-to-Q}$$ ja $$t_{setup}$$ ovat kello-Q ja varvassandaalien asetusaika ja $$T_{comb, \; max}$$ on suurin viive, jonka kombinaatiopiiri “Comb.”, näyttely. Tämä yhtälö saadaan olettamalla, että dff2: n lähtötiedot ovat stabiileja. Jos näin ei ole, on harkittava jonkin verran resoluutioaikaa kuten seuraavassa yhtälössä:
$$t_{clk,\; min} = T_{clk-to-Q} + T_r + T_{comb, \; max} + T_{asetukset}$$
resoluutioajan arvo määrittää todennäköisyyden tulla ulos metastabiilista tilasta. Oletetaan, että clk2: n jakso on $$t_{clk2}$$. Tällöin käytettävissä olevan resoluutioajan arvo on
$$t_r = t_{clk2} – \big (T_{clk-to-Q} + t_{comb,\; max} + T_{setup} \big )$$
vähentääksemme todennäköisyyttä jäädä metastabiiliin tilaan, meidän pitäisi lisätä $$T_r$$. Annetulla kellojaksolla $$t_{clk2}$$, ainoa suunnitteluvaihtoehto on parametrin $$t_{comb, \; max}$$minimointi. Siksi meidän on parempi laittaa ” kampa.”block jälkeen dff3 flip-flop kuten kuvassa 6. Tällöin $$t_{comb,\; max}$$ $ on teoreettisesti nolla dff2: n ja DFF3: n väliselle polulle. Näin ollen, meillä on suurin mahdollinen resoluutio aikaa.
kuva 6
tätä tekniikkaa kutsutaan kaksoisfloppaukseksi ja sitä käytetään laajalti siirrettäessä ohjaussignaaleja, kuten yllä oleva mahdollistavat signaalin kahden kelloalueen välillä. Huomaa, että ylimääräinen Rekisteri ottaa käyttöön toisen viive yhden kellon ajan ota signaali kaapattu B kellon verkkotunnuksen. Tämä viive kannattaa kuitenkin välttää metastabiileja tiloja järjestelmässä.
tässä artikkelissa keskusteltiin mahdollistavan signaalin siirtämisestä hitaan kellon toimialueelta nopean kellon toimialueelle. Saatat joutua perehtymään useisiin muihin tekniikoihin, kuten ohjaussignaalin siirtämiseen nopeasta hitaan kellon verkkotunnukseen, käden ravistelutekniikkaan ja FIFO-pohjaiseen tiedonsiirtoon kellon verkkotunnusten välillä. Löydät joitakin yksityiskohtia luvussa 16 RTL laitteistosuunnittelu käyttäen VHDL: koodaus tehokkuutta, siirrettävyys, ja skaalautuvuus ja Luku 6 kehittynyt FPGA suunnittelu: Arkkitehtuuri, toteutus ja optimointi.
Yhteenveto
- on monia tilanteita, joissa meidän on käytettävä eri kellotaajuuksia järjestelmän eri osiin.
- koska eri kelloalueiden kellosignaalit ovat yleensä riippumattomia, datan siirtäminen eri kelloalueiden välillä voi olla haastava tehtävä.
- rekisterin lähtöarvo on arvaamaton, kun setup time-tai hold time-rike tapahtuu. Se voisi pitää logiikkaa edustavaa arvoa korkealla, logiikkaa alhaisella tai vielä pahempaa arvoa logiikan korkean ja logiikan matalan jännitteen välillä.
- metastabiilista tilasta poistumiseen tarvittavaa aikaa kutsutaan resoluutioajaksi $$t_r$$.
- jos suunnittelussamme on varvastossut, jotka voivat päästä metastabiiliin tilaan, meidän pitäisi antaa varvastossulle tarpeeksi aikaa metastabiilista poistumiseen.
- “double flopping”-tekniikkaa käytetään laajalti yhden bitin ohjaussignaalien siirtämiseen kahden kelloalueen välillä.
Katso täydellinen luettelo artikkeleistani tältä sivulta.