česky english Vítejte, dnes je sobota 20. duben 2024

Programovatelná logika – část 4: Asynchronní signály a hodinové domény

DPS 6/2014 | Články
Autor: Ing. Jan Pech

V minulé kapitole byla zmíněna důležitost synchronního návrhu pro FPGA. Vnější signály připojené ke vstupně-výstupním pinům hradlového pole jsou však většinou asynchronní vůči interním hodinovým signálům. Často také bývá nutné v rámci jednoho návrhu použít několik různých, navzájem asynchronních hodinových signálů. V obou těchto případech je nutné věnovat zvláštní pozornost vstupu asynchronních signálů do synchronního obvodu a přechodu datových signálů mezi jednotlivými bloky pracujícími s různými hodinami.

V následujícím textu bude často používán výraz hodinová doména. Za hodinovou doménu je považována část obvodu, jejíž všechny synchronní sekvenční prvky používají jeden společný hodinový signál. Synchronní prvky v rámci FPGA mohou být kromě samotných klopných obvodů například i synchronní blokové paměti, aritmetické bloky a podobně.

Vliv asynchronních signálů

Asynchronní signály na vstupu synchronního obvodu mohou obecně způsobit dva různé problémy. Prvním z nich je uvedení některých klopných obvodů do nestabilního nebo pravděpodobněji metastabilního stavu. Častější problém je způsoben nekoherencí propojovacích cest jednotlivých synchronních prvků připojených k jednomu společnému asynchronnímu vstupu.

Metastabilita

Metastabilita je dočasné uvedení klopného obvodu do nestabilního stavu. Tato dočasná nestabilita se může projevovat například oscilacemi na výstupu nebo častěji nedefinovanou výstupní logickou úrovní mezi logickou nulou a jedničkou. Metastabilní stav může být způsoben mnoha fyzikálními vlivy, ale v FPGA pracujících při výrobcem doporučených provozních podmínkách připadá prakticky v úvahu pouze porušení vstupních časových parametrů konkrétního klopného obvodu. Pokud vstupní signál klopného obvodu mění úroveň v době vymezené časovými parametry setup time a holdtime, existuje nenulová pravděpodobnost přivedení klopného obvodu do metastabilního stavu.

Metastabilní chování klopného obvodu typu D je znázorněno časovým průběhem na obrázku 1. V obrázku jsou vyznačeny časové parametry setup time (tSU), hold time (tH) a clock to output time (tCO).

Obr1

Obr. 1 Metastabilní chování klopného obvodu typu D

Vstupní signál D na obrázku 1 mění úroveň příliš blízko aktivní hrany hodin CLK, čímž porušuje tSU. Důsledkem je metastabilní stav výstupu Q vyjádřený nedefinovanou úrovní mezi logickou nulou a jedničkou. Po době delší než tCO se výstup nakonec překlopí do některé definované logické úrovně. Může to být ale jak logická jednička, tak i nula.

Na rozdíl od zákaznických integrovaných obvodů není u programovatelných hradlových polí metastabilita klopných obvodů tak výrazný problém, přesto však není setkání s tímto jevem nijak neobvyklé. Pro zamezení vzniku problémů způsobených metastabilitou je důležité vždy správně ošetřit vstupy asynchronních signálů tak, aby nedošlo k porušení podmínek daných tSU a tH, nebo zajistit, aby případná metastabilita neohrozila funkci obvodu. Jednotlivé metody synchronizace asynchronních signálů jsou popsány dále v této kapitole.

(Ne)koherence

Pokud je asynchronní signál připojen do vstupů několika synchronních prvků zároveň, velmi často nastává problém s nekoherencí jednotlivých signálových a hodinových cest. Tento případ je znázorněn na obrázku 2, kde je asynchronní signál data připojen na vstupy dvou klopných obvodů. Zpoždění tohoto signálu od jeho zdroje do jednotlivých vstupů klopných obvodů je rozdílné, stejně jako zpoždění hodinového signálu clk. Různá zpoždění jednotlivých signálových a hodinových cest mohou způsobit rozdílné hodnoty na výstupech jednotlivých klopných obvodů, přestože teoreticky by oba výstupy měly být shodné.

Obr2

Obr. 2 Vstup asynchronního signálu do několika klopných obvodů

Časové průběhy signálů v obvodu z obrázku 2 jsou znázorněny na obrázku 3. Okótované hodnoty představují jednotlivá zpoždění průchodu signálu od jeho zdroje ke konkrétnímu vstupu. Hodnoty tPc0 a tPc1 představují zpoždění hodinového signálu clk, zatímco hodnoty tPd0 a tPd1 reprezentují zpoždění vstupního signálu data. Na obrázku je zachycen případ, kdy kvůli rozdílným zpožděním vstupních a hodinových signálů dojde k nastavení výstupů do rozdílných logických úrovní.

Obr3

Obr. 3 Časové průběhy signálů v obvodu z obrázku 2

Řešením problémů způsobených nekoherencí je opět nutnost vždy zajistit správnou synchronizaci asynchronních signálů. V rámci jedné hodinové domény je pak nutné používat výhradně nový synchronizovaný signál namísto původního asynchronního. Jednotlivé metody synchronizace asynchronních signálů jsou podrobně popsány v následující části.

Přechod mezi hodinovými doménami

Správné ošetření asynchronních vstupů je nezbytné pro korektní funkci synchronního logického obvodu. Toto téma se týká jak externích asynchronních signálů, tak i interních signálů generovaných v jiné hodinové doméně. Existuje několik různých metod synchronizace asynchronních signálů, přičemž každá je vhodná pro jiný typ signálu.

Jednotlivé signály

Nejjednodušším případem přechodu mezi hodinovými doménami je synchronizace samostatného signálu. Potlačení vlivu metastability na zbytek obvodu se dosáhne několikanásobným registrováním signálu v nové hodinové doméně podle obrázku 4. Pro synchronizaci musí být použity minimálně dva klopné obvody v hodinové doméně clk2. V závislosti na použité technologii a chování vstupního signálu může být nutné počet synchronizačních klopných obvodů zvýšit.

Obr4

Obr. 4 Přechod jednotlivého signálu do jiné hodinové domény

Časové průběhy synchronizačního obvodu z obrázku 4 jsou znázorněny na obrázku 5. Přestože může být první klopný obvod uveden do metastabilního stavu, výstup druhého klopného obvodu se nachází již pouze ve stabilních stavech. Tento synchronizační obvod je funkční, pokud platí, že

Tclk2 – tSU ≥ tmet

kde Tclk2 je perioda hodinového signálu clk2, tSU je setup time daných klopných obvodů a tmet je maximální doba, po kterou setrvává klopný obvod v metastabilním stavu měřená od aktivní hrany hodinového signálu.

Obr5

Obr. 5 Synchronizace asynchronního signálu

Tato synchronizační metoda je obecně vhodná pouze pro jednotlivé signály. Její použití pro vektory nebo sběrnice je možné pouze ve speciálních případech. Typicky lze tuto metodu použít tam, kde nová hodnota vektoru v cílové hodinové doméně bude využita až dostatečný počet hodinových cyklů po změně tak, aby nová hodnota vektoru byla stabilní a konzistentní. Pokud není možné tuto podmínku splnit, je třeba použít některou ze složitějších synchronizačních metod popsaných dále.

Pomalu se měnící vektory

Tato metoda je vhodná pro synchronizaci vektorů v cílové hodinové doméně s vyšší hodinovou frekvencí, než má zdrojová doména, nebo pro synchronizaci vektorů, které mění svou hodnotu pouze občas. Metoda je založena na využití samostatného pomocného signálu, který signalizuje změnu hodnoty vektoru. Schéma tohoto synchronizačního obvodu je na obrázku 6.

Obr6

Obr. 6 Přenos hodnoty vektoru mezi hodinovými doménami

Při každé změně hodnoty vektoru vect dojde k invertování hodnoty pomocného signálu t, který je v cílové hodinové doméně synchronizován metodou popsanou v předchozí části. Následuje detektor hran, který při změně logické úrovně synchronizovaného signálu t povolí zápis nové hodnoty vektoru vect do vstupních registrů cílové hodinové domény.

Časové průběhy tohoto synchronizačního obvodu jsou znázorněny na obrázku 7. Průběhy jsou důležité pro základní představu o použitelnosti, protože tento způsob synchronizace je vhodný pouze, pokud zůstává vektor vect konstantní po dostatečně dlouhou dobu vzhledem k periodě hodinového signálu clk2.

obr7

Obr. 7 Synchronizace hodnoty vektoru

Pro správnou funkci tohoto synchronizačního obvodu musí platit, že hodnoty vektoru vect a pomocného signálu t jsou stabilní minimálně po dobu

tset ≥ tSU + 2Tclk2 + tH + tM

kde tSU je setup time použitých klopných obvodů, Tclk2 je perioda hodinového signálu clk2, tH je hold time použitých klopných obvodů a tM je rezerva daná časovým posunem mezi aktivní hranou hodinového signálu clk1 v okamžiku změny hodnot vect a t a následující aktivní hranou hodinového signálu clk2. Praktická bezpečná hodnota doby, po kterou musejí zůstat hodnoty vect a t stabilní, je typicky

tset ≥ 3Tclk2

Pokud mění vektor vect svou hodnotu častěji než s periodou tset, je nutné použít některou z následujících metod synchronizace. Konkrétní výběr závisí na vlastnostech synchronizovaného vektoru.

Čítače

Často je třeba přenést mezi hodinovými doménami hodnotu čítače. Pokud je možné zajistit, že se mezi dvěma aktivními hranami cílového hodinového signálu změní maximálně jediný bit, je možné provést jednoduchou synchronizaci pomocí klopných obvodů. Čítače se v tomto případě realizují buď přímo v Grayově kódu, nebo se do Grayova kódu převádí hodnota binárního čítače. Základní vlastností Grayova kódu je právě změna pouze jediného bitu mezi jednotlivými kroky. Samozřejmě se během jedné periody cílových hodin nesmí změnit hodnota čítače více než o jedničku. Na obrázku 8 je schéma tohoto synchronizačního obvodu.

Obr8

Obr. 8 Přenos hodnoty čítače mezi hodinovými doménami

Tento obvod synchronizuje hodnotu binárního čítače v hodinové doméně clk1 do asynchronní hodinové domény clk2. Binární hodnota synchronního čítače je převedena na Grayův kód, registrována a převedena do nové hodinové domény. Zde je synchronizována vůči novému hodinovému signálu dvouúrovňovými registry stejně jako běžné skalární signály. Vzhledem k tomu, že se během jedné periody mění hodnota pouze jediného bitu, nebude na výstupu z druhé úrovně registrů nikdy nekonzistentní hodnota. V limitním případě může nastat pouze situace, kdy se hodnota změní o jeden hodinový cyklus později. Výstup ze synchronizačních registrů je převeden z Grayova kódu zpět na binární reprezentaci a může být dále používán v rámci hodinové domény clk2.

Takovýto synchronizační obvod se často používá například pro přenos hodnot adresových čítačů mezi hodinovými doménami v asynchronních pamětech typu FIFO založených na dvouportových RAM.

Rychlé datové cesty

Předchozí metody nejdou využít přímo pro přenos hodnot rychle se měnících vektorů mezi asynchronními hodinovými doménami. Na jejich základě je ale možné vytvořit asynchronní FIFO, které je k tomuto účelu ideální. Velmi zjednodušené blokové schéma asynchronní paměti FIFO je znázorněno na obrázku 9. Slovo asynchronní označuje vztah mezi hodinovými doménami clk1 a clk2. Chování každé části v rámci vlastní hodinové domény je plně synchronní.

Obr9

Obr. 9 Asynchronní FIFO

Asynchronní FIFO je tvořeno dvouportovou blokovou pamětí, řídicí logikou zápisu a blokem řídicí logiky čtení. Na schématu nejsou znázorněny další signály, mezi které patří asynchronní reset, stavové výstupy signalizující blízkost zaplnění nebo vyprázdnění a podobně. Vlastní FIFO není v dnešní době nutné vyvíjet od začátku. Mnoho současných FPGA umožňuje nakonfigurovat blokové paměti přímo do režimu FIFO a přímo je do návrhu vložit. Všechna vývojová prostředí hlavních výrobců FPGA obsahují také plně konfigurovatelná jádra implementující asynchronní FIFO.

Přechod rychlých datových cest nebo sběrnic mezi asynchronními doménami je realizován právě umístěním asynchronní FIFO do cesty. Tím sice dojde ke zvýšení latence celé cesty, ale zamezí se případným problémům s metastabilitou nebo nekoherencí.

Redukce počtu hodinových domén

Mnoho projektů vyžaduje využití několika asynchronních hodinových domén. Často je ale možné počet hodinových domén zredukovat, v ideálním případě až na jednu jedinou. Redukce počtu domén výrazně omezí možnost vzniku chyb a problémů způsobených metastabilitou nebo nekoherencí a také často zrychlí běh implementačních nástrojů. Časová analýza, ale i optimalizace časování během syntézy a implementace proběhne tím rychleji, čím méně je v návrhu přechodů mezi asynchronními hodinovými doménami.

Redukce počtu hodinových domén je možná v zásadě dvěma způsoby. V případě, že je skutečně nutné použít fyzicky rozdílné hodinové signály, je dobré zvolit jeden hlavní hodinový signál a ten použít pro většinu návrhu. V ostatních hodinových doménách pak řešit jenom nejnutnější minimum, jako jsou například vnější rozhraní, a co nejrychleji přejít do hlavní, systémové, hodinové domény.

Druhá možnost je použitelná tam, kde skutečně fyzicky rozdílné hodinové signály nutné nejsou. V takovém případě je možné použít pouze jediný hodinový signál o dostatečně vysoké frekvenci a pomocí děliček k němu vyrobit několik pomocných signálů typu clock-enable. Jednotlivé části návrhu pak budou pracovat vždy na společném hodinovém signálu, ale mohou využívat různé signály clock-enable. Každý clock-enableaktivuje danou část obvodu pouze v některých periodách systémových hodin. Jednotlivé části obvodu však mohou být přímo propojeny, protože se jedná o plně synchronní obvod s jediným hodinovým signálem.