Vyšlo v týdeníku CHIPweek č. 50/96, 10. prosince 1996
Vytištěno z adresy: http://www.earchiv.cz/a96/a650k150.php3

Synchronní, asynchronní a arytmický přenos

U každého datového přenosu je velmi důležité, aby už na té nejnižší úrovni (na úrovni fyzické vrstvy) obě strany postupovaly stejně rychle, konkrétně aby stejně rychle generovaly a na druhé straně zase vyhodnocovaly přenášený signál. Tomuto problému se obecně říká synchronizace, a zde se jedná o synchronizaci na úrovni jednotlivých bitů.

Není jistě těžké domyslet si, že když odesilatel určitým tempem vysílá po přenosové cestě jednotlivé datové bity, musí je příjemce přijímat stejnou rychlostí. Ve skutečnosti se ale jedná o to, že odesilatel mění přenášený signál v určitých časových odstupech, které úzce souvisí s tzv. bitovými intervaly. Zůstaneme-li u nejjednoduššího případu, kdy je použito dvoustavové kódování a modulační rychlost se rovná rychlosti přenosové, pak přenos každého jednotlivé bitu „trvá" určitou dobu, danou převrácenou hodnotou přenosové rychlosti. Například při přenosové rychlosti 1 Mbit za sekundu jeden bit „trvá" jednu milióntinu sekundy. Tato milióntina sekundy pak v daném případě představuje zmíněný bitový interval.

Obecně je bitový interval časový úsek, ve kterém odesílající provádí takové změny přenášeného signálu, které mají vyjadřovat hodnotu přenášeného bitu. Například tedy udržuje napětí na jedné ze dvou diskrétních úrovní, reprezentujících binární hodnoty, nebo naopak v tomto intervalu provede změnu z jedné úrovně na druhou (je-li datový bit reprezentován hranou, resp. změnou signálu) apod. Příjemce samozřejmě musí používat stejnou konvenci pro vyhodnocování významu přenášeného signálu (zda jsou bity vyjadřovány úrovní napětí, hranou apod.). Hlavně ale příjemce musí vědět, kdy má vyhodnocovat stav přenášeného signálu. Přesněji kdy začíná a končí každý jednotlivý bitový interval, v rámci kterého má přenášený signál vyhodnocovat.

Odesilatel i příjemce tedy musí postupovat koordinovaně v čase (neboli „ve vzájemné synchronizaci"), a pro správné docenění problému je vhodné si uvědomit, že jejich pojem o čase nemusí nutně být shodný. Každý totiž má k dispozici vlastní „hodinky", neboli vlastní generátor pravidelně se měnícího signálu (tzv. hodinového signálu), který v počítačích odměřuje čas. Příslušné obvody bývají velmi spolehlivé co do přesnosti odměřování času, ale na druhé straně je třeba si uvědomit, že při vyšších přenosových rychlostech stačí opravdu velmi malé odchylky, aby bylo zle. Například tak zle, aby se příjemce kvůli „opoždění" svých hodinek (či naopak kvůli jejich „předcházení") dostal s vyhodnocováním do jiného než správného bitového intervalu, a přenášený signál tak vzorkoval v době, kdy již má reprezentovat jiný bit než si příjemce myslí.

Pro udržení vzájemné časové synchronizace (časové koordinace) příjemce i odesilatele naštěstí existuje několik možností.

Asynchronní přenos

Koncepčně nejjednodušší je takové řešení, při kterém odesilatel explicitně sdělí příjemci, kdy začíná a kdy končí každý jednotlivý interval. Pak je dokonce možné, aby jednotlivé bitové intervaly trvaly různě dlouho, a tudíž nebyla konstantní ani výsledná přenosová rychlost. Představu takovéhoto plně asynchronního přenosu (asynchronního v tom smyslu, že postrádá jakoukoli synchronizaci), ukazuje horní část dnešního obrázku.

V praxi se takovýto způsob přenosu moc nepoužívá, a to zejména kvůli tomu, že pro jeho realizaci jsou nutné alespoň tři stavy přenášeného signálu (neboli tzv. tříhodnotová logika). Dva stavy totiž musí vyjadřovat přenášenou binární hodnotu, a třetí stav je potřebný pro vymezení začátku a konce bitového intervalu. Na druhé straně toto řešení neklade vůbec žádné nároky na kvalitu „hodinek" příjemce (na kvalitu generátoru jeho hodinového signálu). Další možné varianty řešení synchronizace však již s určitou minimální „kvalitou" hodinek příjemce přeci jen počítají.

Arytmický přenos

Zajímavým kompromisním řešením je očekávat od hodinek odesilatele i příjemce takovou přesnost, že vydrží „jít" dostatečně přesně alespoň po dobu přenosu několika málo po sobě jdoucích bitů. Tomu je pak nutné uzpůsobit charakter přenosu - data se nepřenáší jako libovolně dlouhé posloupnosti bitů, ale jako skupinky bitů pevně dané velikosti (například 8 bitů). Na začátek každé takovéto skupinky se pak umístí zvláštní značka, která příjemci umožní „seřídit si" jeho hodinky: od okamžiku příjmu zmíněné značky si pak příjemce sám odměřuje čas a sám si určuje, kdy má vzorkovat jednotlivé bity v rámci dané skupinky (viz obrázek). Vzhledem k již vyslovenému požadavku na přesnost jeho hodinek se přitom předpokládá, že alespoň po dobu přenosu jedné skupinky bitů jeho hodinky budou odměřovat čas správně.

V praxi se tato varianta používá poměrně dlouho, a s oblibou například tam, kde přenášená data mají charakter znaků, a celý přenos je pak možné označit za znakově-orientovaný. Od toho je také odvozena obvyklá terminologie: místo neformálních „skupinek bitů" se hovoří o znacích, a zvláštní značka na začátku každého znaku je označována jako tzv. start bit (zatímco na konci každého datového znaku bývá ještě tzv. stop bit).

Obrázek 1.
Obr.: Představa asynchronního a arytmického přenosu
a/ skutečně asynchronní přenos
b/ přenos běžně označovaný jako asynchronní (správně arytmický)
Souvislost se znakově orientovanými přenosy, ke kterým dochází například mezi znakovými terminály a hostitelskými počítači, je užitečná i pro pochopení jedné velmi důležité vlastnosti tohoto způsobu přenosu: když uživatel psal něco na znakovém terminálu, a jednotlivé znaky se ihned odesílaly do hostitelského počítače, nemohlo být předem známo, jaké budou časové odstupy mezi jednotlivými znaky - záleželo samozřejmě na uživateli a jeho „rytmu" práce. Proto byl i právě popisovaný způsob přenosu uzpůsoben neexistenci rytmu, neboli libovolně velkým (či spíše náhodným) časovým odstupům mezi jednotlivými znaky. Proto se mu také správě říká arytmický přenos (a-rytmický, neboli postrádající rytmus).

Nyní ovšem jedna velmi důležitá terminologická poznámka: v běžné odborné praxi se termín „arytmický" nepoužívá, a místo něho se právě popsanému (arytmickému) způsobu přenosu říká „asynchronní".

Synchronní přenos

Asynchronní (správně: arytmický) přenos tedy počítá s tím, že hodinky příjemce dokáží „jít" dostatečně přesně alespoň po dobu přenosu jednoho znaku, a potom se mohou vůči hodinkám odesilatele libovolně „rozejít" (protože na začátku dalšího znaku, díky jeho start bitu, dojde k jejich dalšímu seřízení, neboli tzv. „zasynchronizování").

Existuje však ještě třetí varianta řešení vzájemné synchronizace mezi příjemcem a odesilatelem, která počítá s trvalým udržování vzájemné koordinace hodinek obou zúčastněných stran (neboli s trvalým udržováním synchronizace) - zejména kvůli tomu, aby bylo možné co nejefektivněji přenášet libovolně dlouhé posloupnosti bitů.

Zde je ovšem nutné si uvědomit, že trvalé synchronizace (na předem neomezenou dobu) není možné dosáhnout zvyšováním kvality „hodinek" na obou stranách. Zde je nutné zvolit takové řešení, které zajistí jejich průběžné „seřizování". To je samozřejmě možné, a lze toho dosáhnout hned několika způsoby.

Principiálně nejjednodušším řešením je přenášet směrem k příjemci i „tikání" hodinek odesilatele. To ovšem vyžaduje samostatný přenosový kanál (vedle kanálu datového), a ten většinou nebývá k dispozici (s výjimkou přenosů na velmi malé vzdálenosti, kde je možné použít například vícevodičové kabely).

Alternativním řešením je smíchat hodinový signál se signálem, který reprezentuje „užitečná data", a přenášet vše jediným společným přenosovým kanálem. Například tak, aby v rámci jednoho bitového intervalu docházelo ke dvěma změnám signálu - jeden reprezentuje časování, a druhý data. Pak ovšem při stejné přenosové rychlosti stoupne rychlost modulační na dvojnásobek, a s ní i potřebná šířka přenosového pásma.

Další alternativou je umožnit příjemci, aby se synchronizoval ze samotných dat. Jsou-li například jednotlivé bity reprezentovány přechodem signálu mezi dvěma úrovněmi (hranou), pak není problém využít tuto hranu i pro seřízení hodinek příjemce. Problém je spíše v tom, aby byla zajištěna pravidelnost těchto hran, což zase souvisí s tím, že v přenášených datech nesmí být určité „synchronizaci nepřející" sekvence (například posloupnosti samých nul či naopak samých jedniček apod.). Ale i tomu se dá předejít, tím že se do přenášeného proudu dat uměle vloží vhodný bit navíc, který nebezpečí ztráty synchronizace odstraní (a příjemce takovýto bit vždy rozpozná a zahodí).