Od mikrořadičů k digitálním signálovým procesorům (DSP)

Pavel Tišnovský 5. 4. 2011

Dnes na chvíli opustíme téma osmibitových mikrořadičů a začneme se věnovat dalšímu typu (mikro)procesorů. Jedná se o digitální signálové procesory (DSP), což jsou procesory s architekturou navrženou tak, aby mohly optimálně, tj. s malou latencí a vysokou propustností, zpracovávat číslicové signály.

Obsah

1. Digitální signálové procesory (DSP)

2. Vznik digitálních signálových procesorů

3. Latence při zpracování signálů

4. Zpracování signálu pomocí digitálních signálových procesorů

5. Podpora FIR a IIR filtrů v digitálních signálových procesorech

6. Instrukce typu Multiply and Accumulate (MAC) a buffery

7. Násobení a sčítání se saturací

8. Shrnutí a obsah následující části seriálu

9. Odkazy na Internetu

1. Digitální signálové procesory (DSP)

V předchozích osmnácti částech seriálu o architekturách počítačů jsme se zabývali především popisem osmibitových mikrořadičů, které se velmi často používají v různých vestavěných systémech, v nichž tyto čipy slouží například pro sběr dat z měřicích sond, základní zpracování dat, řízení různých elektronických zařízení, řízení komunikace mezi jednotlivými uzly systému atd. Osmibitové mikrořadiče jsou díky některým svým výhodným vlastnostem, zejména nízké ceně, malým nárokům na připojení pomocných obvodů (většinou postačuje jen napájení a někdy též externí oscilátor) a většinou i velmi malé spotřebě elektrické energie, využívány i v současnosti – prakticky se jedná o jednu z posledních oblastí, kde se ještě komerčně využívají mikroprocesory založené na osmibitové aritmeticko-logické jednotce. Ovšem osmibitová procesorová jádra se v některých případech nahrávají taktéž do FPGA, kde typicky slouží pro řízení toku dat a implementaci složitějších algoritmů s mnoha podmínkami a programovými smyčkami.

Obrázek 1: Univerzální mikroprocesory, jakým je například zde zobrazený 32bitový mikroprocesor AMD 386DX, nejsou pro některé typy aplikací příliš vhodné. Tyto mikroprocesory totiž sice obsahují většinu prvků použitých i v DSP (hardwarovou násobičku, adresní režimy s index registry, u procesorů s instrukcemi MMX i aritmetiku se saturací,…), ovšem jejich interní uspořádání se od DSP v mnoha ohledech odlišuje.

Ovšem osmibitové či vícebitové mikrořadiče a běžné mikroprocesory využívané například v osobních počítačích nejsou v žádném případě jedinými programovatelnými čipy, které se v současnosti používají. Poměrně významnou skupinu programovatelných součástek tvoří takzvané digitální signálové procesory, neboli DSP (Digital Signal Processors). Tyto čipy můžeme najít ve všemožných zařízeních, protože slouží pro filtraci signálů, jejich komprimaci či dekomprimaci, rekonstrukci dat z analogových signálů obsahujících šum atd. Ostatně s velkou pravděpodobností je alespoň jeden digitální signálový procesor použit i v počítači či mobilním telefonu, na kterém čtete tento článek – v počítači je DSP například součástí elektroniky pevného disku, kde slouží pro převod analogového signálu posílaného čtecí hlavičkou na digitální signál, což není jednoduchá činnost, protože spolu se zhušťováním zápisu bitů na disk dochází k různým překryvům sousedních oblastí a průběh signálu přečtený hlavičkami se ani zdaleka nepodobá pěknému obdélníkovému průběhu používanému při vysvětlování funkce disků v literatuře :-). Další DSP v elektronice pevného disku slouží k dekódování dat a případnou opravu chybně přečtených bitů.

Obrázek 2: Na další vývoj digitálních signálových procesorů měl značný vliv čip TMS32010 firmy Texas Instruments, který konstruktérům nabídl vysoký výpočetní výkon v základních operacích se signálem (součet + násobení). Jedná se o jeden z 25 čipů, které podle některých autorů nejvíce ovlivnily vývoj digitální techniky. Mezi další čipy z této „síně slávy“ patří MOS 6502, Zilog Z80, Intel 8088, časovač 555 či první CCD čip.

2. Vznik digitálních signálových procesorů

První typy digitálních signálových procesorů, tj. DSP umístěných na jediném čipu, vznikly až na přelomu sedmdesátých a osmdesátých let minulého století, ovšem o zpracování číslicových signálů v reálném čase se inženýři a posléze i programátoři pokoušeli již dříve. První úspěšné a dá se říci i reálně použitelné systémy vznikly již na minipočítačích na počátku sedmdesátých let minulého století, ovšem vzhledem k poměrně vysoké ceně minipočítačů, jejich velikosti i spotřebě (nenechme se zmýlit předponou mini-, ta vyjadřovala cenu, velikost a výkonnost minipočítačů vzhledem k mainframům) byla oblast jejich nasazení omezená pouze na ty technologické provozy, kde nebyla k dispozici dostatečně robustní alternativa. Pokud nebylo možné minipočítače použít, používaly se buď signálové procesory sestavené z více čipů (viz též v další části popsaná architektura AMD Am2900), nebo se namísto zpracování číslicových signálů používala mnohem starší, a nutno říci, že v dané době i propracovanější technologie – analogové počítače, které ovšem pracují na zcela jiném principu, než programovatelné číslicové počítače.

Obrázek 3: Před vznikem specializovaných DSP se pro číslicové zpracování signálu používaly mj. i takzvané procesorové řezy, v nichž byl procesor sestaven z většího množství čipů. Na tomto obrázku je čip AMD Am2901 tvořící ústřední část modulární architektury AMD Am2900. Zde zobrazený čip pochází z řady určené mj. i pro armádní účely (jeho charakteristiky tedy umožňují práci ve větším teplotním rozsahu atd.).

Pokrok ve vývoji polovodičových čipů, ať již založených na bipolární nebo unipolární technologii, ovšem nutně vedl i k postupné náhradě analogových počítačů za DSP procesory. Díky výzkumu možností zpracování číslicových signálů na minipočítačích a později i specializovaných systémech složených například z procesorových řezů, vznikl celý nový obor, v němž se v praxi aplikovaly například teorie o vzorkování signálů (Shannonův-Nyquistův-Kotělnikovův teorém…), číslicových filtrech typu FIRIIR, transformacích signálu (diskrétní Fourierova transformace, rychlá diskrétní Fourierova transformace, Z-transformace,…) atd. Nejednalo se ovšem o vývoj bez slepých uliček, protože především na samotném začátku boomu digitálních signálových procesorů ty firmy, které již měly velké zkušenosti s návrhem polovodičových čipů a především mikroprocesorů a mikrořadičů, navrhly několik DSP, kterým však chyběly některé důležité vlastnosti a proto byly tyto typy signálových procesorů mnoha konstruktéry elektronických zařízení ignorovány.

Obrázek 4: Klon výše zobrazeného čipu AMD Am2901, který pochází ze SSSR.

3. Latence při zpracování signálů

Termínem „zpracování signálu“ budeme v kontextu tohoto článku rozumět zejména modifikaci analogového nebo digitálního signálu v reálném čase, přesněji řečeno takový způsob jeho zpracování, u něhož je předem známá latence (zpoždění), která je většinou nezávislá na tom, jaký má signál skutečný průběh. Nejedná se tedy o práci se signálem, který byl například zaznamenán na nějaké datové médium a poté byl zpracován a následně uložen zpět na datové médium – v tomto případě totiž uživatele takového systému zajímá především jeho celková propustnost, ale nikoli dopředu známá latence. Příkladem systémů, kde je předem známá hodnota zpoždění velmi důležitá, může být digitální signálový procesor použitý pro zpracování zvuku, například pro implementaci ekvalizéru, v němž se sice digitalizovaný a navzorkovaný („nasamplovaný“) zvuk zpracovává s určitým zpožděním (které je ovšem v tomto případě velmi krátké a dopředu známé), ale díky tomu, jak je zpracování signálu naprogramováno, je zaručeno, že nebude docházet ke změnám tohoto zpoždění.

pc93

Obrázek 5: Jeden digitální signálový procesor jsme si v tomto seriálu již popsali. Jednalo se o mikroprocesor Intel i860, který mj. obsahoval i podporu pro provádění různých grafických operací.

Příliš velké a zejména nepravidelné zpoždění by například mohlo způsobit slyšitelné chyby na výstupu celého filtračního řetězce, tj. na sluchátkách či reproduktorech. Podobné chyby je ostatně možné slyšet například při přehrávání úvodní melodie po spuštění GUI jednoho nejmenovaného operačního systému, a to mnohdy i na velmi výkonných počítačích, které však i přes svůj úctyhodný výpočetní výkon nedokážou (kvůli nedokonalosti SW i HW) zajistit pevnou latenci. Dalším příkladem systému, kde je nutné signál zpracovávat v reálném čase, může být použití digitálního signálového procesoru v modemu. Modem přijímá kontinuální analogový signál z komunikační (například telefonní) linky a DSP musí dokázat tento signál zpracovat, aniž by došlo ke ztrátě některého ze vzorků (samplů). Pokud by ke ztrátám vzorků docházelo, například z toho důvodu, že by program uložený v DSP nedokázal vzorky dostatečně rychle zpracovat, musel by se přenos celého datového bloku opakovat a při neustálém „ztrácení“ vzorků by se komunikace stala prakticky nemožnou. Ostatně první pokusy o čistě softwarovou implementaci modemu na běžném CPU a driverech operačního systému trpěly mj. právě tímto nedostatkem.

pc79

Obrázek 6: Blokové schéma digitálního signálového procesoru Motorola 56000.

4. Zpracování signálu pomocí digitálních signálových procesorů

Celý řetězec zpracování analogového signálu, například obrazu čteného z CCD čipu, signálu přijímaného modemem nebo signálu získaného čtecí hlavou pevného disku, na jiný analogový signál, je zobrazen na následujícím obrázku (7). Analogový signál čtený na vstupu je přiváděn na analogově-digitální převodník (A/D converter), v němž dochází k jeho digitalizaci a současně i ke vzorkování – původní spojitý průběh je tedy převeden na proud číslicových vzorků (v některých systémech je vzorkování odděleno od A/D převodníku, v těchto případech je před A/D převodníkem zařazen vzorkovací obvod – Sample-and-Hold, neboli S&H). Jedná se vlastně o diskretizaci signálu ve dvou rozměrech – na časové ose (vzorkování) i na ose představující aktuální hodnotu signálu (analogová→di­gitální hodnota). Výsledné vzorky, nazývané též samply, jsou přiváděny do digitálního signálového procesoru (DSP), který je na základě programu uloženého v jeho programové paměti nějakým způsobem zpracuje, přičemž výsledkem zpracování je většinou opět proud číslicových vzorků. Ten se buď přímo pošle do dalšího digitálního zařízení (což je případ modemu nebo DSP použitého na pevném disku) nebo je možné tento číslicový signál převést zpět na signál analogový v D/A převodníku a rekonstrukčním filtru.

Obrázek 7: Řetězec zpracování analogového signálu pomocí DSP. Toto schéma je poněkud zjednodušené, protože neobsahuje například obvod typu Sample and Hold (S&H) před A/D převodníkem ani rekonstrukční filtr umístěný za D/A převodníkem.

Analogově-digitální a digitálně-analogový převodník může být přímo součástí digitálního signálového procesoru, nebo se může jednat o samostatné obvody. Mnoho typů DSP tyto převodníky vůbec neobsahuje, protože vstupní a/nebo výstupní signál může být zpracováván pouze v číslicové podobě (ani my se nebudeme A/D a D/A převodníky v dalším textu do větších podrobností zabývat). Digitální navzorkovaný signál je možné zpracovávat mnoha způsoby, ovšem v aplikacích využívajících digitální signálové procesory se velmi často používají takzvané filtry s konečnou impulsní odezvou (FIR – Finite Impulse Response), filtry s nekonečnou impulsní odezvou (IIR – Infinite Impulse Response) a v některých aplikacích taktéž diskrétní Fourierova transformace (DFT – Discrete Fourier Transform), zpětná diskrétní Fourierova transformace nebo taktéž diskrétní kosinová transformace (DCT – Discrete Cosine Transform), kterou jsme si podrobněji popsali v seriálu o grafických formátech.

Obrázek 8: Zpracování obrazového signálu při jeho převodu na formátu JFIF (JPEG), kde je mj. použita i diskrétní kosinová transformace (DCT). Podobné blokové schéma lze najít u čipů pro komprimaci videa podle normy MPEG.

5. Podpora FIR a IIR filtrů v digitálních signálových procesorech

Mnohé signálové procesory jsou navrženy s ohledem na to, aby se právě FIRIIR filtry a někdy taktéž DFT (implementovaná některým rychlým algoritmem – FFT) či DCT daly naprogramovat co nejjednodušším způsobem, čemuž je uzpůsobena jak aritmeticko-logická jednotka (zejména uspořádání sčítačky a násobičky) a pracovní registry, tak i instrukční sada těchto typů procesorů. Podívejme se nejdříve na základní požadavky, které jsou na digitální signálový procesor kladeny v případě implementace filtrů typu FIR a IIR. Mezi jednu z výhodných vlastností těchto typů filtrů patří fakt, že je lze implementovat pouze pomocí základních aritmetických operací sčítání a násobení, které ovšem musí splňovat určité podmínky zmíněné v navazujících kapitolách. Mezi další operace používané při implementaci FIR a IIR filtrů patří čtení či zápis hodnot do polí pevné délky. Schéma filtru s konečnou odezvou je zobrazeno na následujícím obrázku:

Obrázek 9: Schéma FIR filtru.

Na tomto obrázku znamená symbol x[n] vstupní signál (tj. jednotlivé vzorky), y[n] je výstupní signál, symbolem v kruhu jsou označeny sčítačky, trojúhelníkem násobičky sloužící pro vynásobení vzorku konstantou bn a čtvercem zpoždění vstupního signálu. V aplikaci určené pro běžný procesor či DSP by se takový filtr mohl v programu zapsat například pomocí následujícího výrazu:

y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ... + b[N] * x[n-N]

Tento výraz se při překladu transformuje na jednotlivé instrukce signálového procesoru. Těmi se ovšem dnes nebudeme podrobněji zabývat, jen si uvedeme, jakým způsobem se – velmi zjednodušeně řečeno – předchozí výraz transformuje na jednodušší snáze zpracovatelné čás­ti:

accumulator = 0
accumulator = accumulator + b[0] * x[n]
accumulator = accumulator + b[1] * x[n-1]
accumulator = accumulator + b[2] * x[n-2]
...
accumulator = accumulator + b[N] * x[n-N]
y[n] = accumulator

Obrázek 10: Násobičky ve schématu FIR filtru.

6. Instrukce typu Multiply and Accumulate (MAC) a buffery

Již z výše uvedeného výrazu pro realizaci FIR filtru (nebo spíše z jeho rozepsané formy) je patrné, které základní operace by měl digitální signálový procesor podporovat. Jedná se zejména o aritmetické operace násobení a sčítání, které jsou někdy prováděné nad celými čísly, nebo častěji nad hodnotami reprezentovanými v systému pevné řádové čárky (FP – Fixed Point, viz další díly tohoto seriálu), přičemž je z uvedeného výrazu patrné, že tyto operace je možné vykonávat souběžně – vždy jednu operaci násobení a součtu by bylo možné sloučit do jediné instrukce, která by navíc svůj výsledek ukládala do akumulátoru, jenž by současně sloužil jako jeden z operandů této instrukce. Podobná instrukce je skutečně na mnoha digitálních signálových procesorech implementována – nazývá se Multiply-And-Add nebo též příznačněji Multiply-And-Accumulate (MAC), protože se jednotlivé výsledky skutečně akumulují v jediném pracovním registru, nazývaném – nikoli překvapivě – akumulátor.

Obrázek 11: Sčítačky ve schématu FIR filtru.

Vzhledem k tomu, že jeden z operandů této instrukce zůstává vždy stejný, musí instrukce typu Multiply-And-Accumulate přečíst zbylé dva operandy x[n] a b[n], což navíc znamená, že DSP musí podporovat i efektivní adresování dat uložených v polích a/nebo musí mít k dispozici oddělenou a samostatně adresovatelnou paměťovou oblast, do níž by bylo možné uložit koeficienty filtru b[n]. To však není z požadavků konstruktérů elektronických zařízení zdaleka vše. Povšimněte si, že hodnoty x[n], tj. digitalizované vzorky vstupující do DSP, jsou použity pro výpočet více výstupních hodnot y[n]. V praxi to znamená, že pro určitý FIR filtr délky N, je každý vstupní vzorek x[n] použit N-krát. Z toho vyplývá další požadavek na vlastnosti DSP – signálové procesory by měly mít velký počet pracovních registrů nebo by měly podporovat současný přístup do více oblastí datové paměti. Do jedné oblasti by byly ukládány vzorky x[n], ideálně do kruhového bufferu, ve druhé paměťové oblasti by se ukládaly koeficienty filtru b[n]. V ideálním případě by se tak celý výraz:

accumulator=accumulator + b[i] * x[n-i]

provedl v jediném strojovém cyklu, a to i s případným zvýšením indexu i!

Obrázek 12: Zpožďovací členy (implementované pomocí polí či kruhových bufferů) ve schématu FIR filtru.

7. Násobení a sčítání se saturací

Podívejme se ještě jednou (dnes již naposledy) na jeden krok používaný v případě filtrace signálu pomocí FIR nebo IIR filtru. Jedná se o operaci, v níž se hodnota vstupního vzorku x[n-i] vynásobí koeficientem filtru b[i] a výsledek této operace se přičítá k mezivýsledku uloženému v akumulátoru:

accumulator = accumulator + b[i] * x[n-i]

Tento zdánlivě jednoduchý výraz v sobě ukrývá jedno nebezpečí – akumulátor i registry (či paměť) obsahující koeficienty filtru b[i] a vstupní vzorky x[i] totiž mají omezenou bitovou šířku a při provedení operace násobení a posléze součtu se již nemusí výsledná hodnota do akumulátoru vejít. Na běžných procesorech je operace součtu většinou řešena takovým způsobem, že se při přetečení do výstupního registru o šířce n zapíše jen spodních n bitů a současně se nastaví příznak carry, který vlastně nahrazuje hodnotu n+1 bitu. Díky tomuto řešení je velmi snadné implementovat aritmetické operace s prakticky libovolnou bitovou šířkou, takže například osmibitový mikroprocesor je schopen sčítat 64bitová čísla (i když minimálně osmkrát pomaleji). Jenže v případě, že je příznak carry ignorován, bude výsledek uložený do výstupního registru (akumulátoru) nekorektní: nebude se jednat o hodnotu x=a+b, ale o hodnotu x=(a+b) mod 2n-1. Ještě horší je situace v případě násobení, kde výsledek součinu dvou n-bitových čísel může mít šířku až 2n bitů.

Obrázek 13: Zdrojový rastrový obrázek (známá fotografie Lenny), který tvoří zdroj pro jednoduchý konvoluční (FIR) filtr, jenž zvyšuje hodnoty pixelů o pevně zadanou konstantu (offset).

Z tohoto důvodu je v DSP šířka akumulátoru někdy větší než bitová šířka ostatních registrů i buněk operační paměti – například mnohé digitální signálové procesory určené pro práci s audio signálem zpracovávají sice šestnáctibitové vzorky, ovšem mezivýsledky jsou ukládány do akumulátoru o šířce 20 či 24 bitů. Druhou modifikací sčítačky a násobičky v DSP je to, že pracují s takzvanou saturací. Její princip je velmi jednoduchý – výsledky aritmetických operací nepřetíkají (nepočítá se tedy „modulo N“), ale v případě, že je výsledek operace větší než nejvyšší reprezentovatelná hodnota, zapíše se do výstupního registru maximální hodnota, například 65535 u DSP pracujícího s šestnáctibitovými čísly bez znaménka. Podobně je tomu u minimálních hodnot, pokud jsou vzorky reprezentovány čísly se znaménkem. Kvůli saturaci sice taktéž dochází ke ztrátě informace – například ořezání maximálních hodnot u audio signálu – jedná se ovšem o mnohem menší zlo, než kdyby došlo k přetečení a uložení pouze spodních bitů výsledku se zanedbáním bitů s nejvyššími váhami. Rozdíl mezi oběma přístupy při implementaci operace součtu je patrný na obrázcích.

Obrázek 14: Pokud je pro přičtení offsetu použita operace součtu se zanedbáním přenosu (carry), tj. když se počítá systémem „modulo N“, dochází při překročení maximální hodnoty pixelu (čistě bílá barva) k viditelným chybám.

8. Shrnutí a obsah následující části seriálu

Shrňme si nyní vlastnosti, které by měl splňovat digitální signálový procesor, aby s ním bylo možné efektivně provádět základní filtrace signálu:

  • Digitální signálový procesor byl měl obsahovat rychlou sčítačku a násobičku, ideálně pracující současně s automatickým uložením mezivýsledku do akumulátoru (MAC – Multiply and Accumulate).
  • DSP by měl v ideálním případě obsahovat akumulátor s větší bitovou šířkou, než jakou mají vstupní a výstupní vzorky (například 12 bitů namísto 8 bitů, či 20/24 bitů namísto 16 bitů).
  • Násobení a sčítání by mělo být prováděno se saturací, tj. nikoli s využitím „modulo N“ aritmetiky běžné u klasických mikroprocesorů a mikrořadičů.
  • DSP by měl mít velký počet pracovních registrů pro uložení koeficientů filtrů.
  • Adresní režimy by měly umožňovat snadnou implementaci kruhového bufferu.
  • Datová paměť by měla být rozdělena na dvě až tři oblasti s možností současného přístupu do těchto oblastí v jediném taktu.
  • Poslední vlastnost se týká rychlé Fourierovy transformace (FFT) – DSP by měl umožňovat adresování, při němž je adresa chápána jako bitově převrácená (reverzovaná) hodnota uložená v adresním registru. Pokud je například v adresním registru uložena bitová hodnota 00101011, je tato hodnota převedena na adresu 11010100.

Obrázek 15: Při použití operace součtu se saturací sice taktéž dojde ke ztrátě informace (vzniknou oblasti s pixely majícími hodnotu 255), ovšem viditelná chyba je mnohem menší než na předchozím obrázku.

widgety

V následující části seriálu o architekturách počítačů se seznámíme se sadou čipů z rodiny AMD Am2900 vyrobených bipolární technologií, z nichž bylo možné sestavit procesor s prakticky jakoukoli bitovou šířkou zpracovávaných hodnot. V praxi se z těchto čipů tvořily čtyřbitové až 64bitové procesory a v neposlední řadě se tyto obvody taktéž používaly pro konstrukci specializovaných digitálních signálových procesorů. Díky tomu, že instrukční sadu mohl navrhovat přímo programátor (nebyla tedy pevně zvolena výrobcem čipu tak, jak je tomu u běžných mikroprocesorů), mohli konstruktéři různých zařízení využívajících obvody z rodiny AMD Am2900 experimentovat s tím, jak má instrukční sada vypadat, aby se dosáhlo optimálního výkonu a popřípadě i malé latence při zpracování signálů. Rodina AMD Am2900 však byla populární i v dalších oborech; byla například několikrát použita pro konstrukci experimentálních grafických akcelerátorů.

Obrázek 16: Jednoduchý FIR filtr aplikovaný na 2D signál. Jedná se o konvoluční filtr známý pod jménem emboss.

9. Odkazy na Internetu

  1. Great Microprocessors of the Past and Present: Part IX: Signetics 8×300, Early cambrian DSP ancestor (1978):
    http://www.cpushac­k.com/CPU/cpu­2.html#Sec2Par­t9
  2. Introduction to DSP – DSP processors:
    http://www.bo­res.com/courses/in­tro/chips/index­.htm
  3. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspgu­ide.com/
  4. Digital signal processor (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Di­gital_signal_pro­cessor
  5. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Di­gitální_signá­lový_procesor
  6. Digital Signal Processing FAQs
    http://dspguru­.com/dsp/faqs
  7. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.ro­ot.cz/clanky/fi­xed-point-arithmetic/
  8. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.ro­ot.cz/clanky/nor­ma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  9. Aritmetické operace s hodnotami uloženými ve formátu FP
    http://www.ro­ot.cz/clanky/a­ritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/
  10. Výpočet goniometrických funkcí pomocí algoritmu CORDIC
    http://www.ro­ot.cz/clanky/vy­pocet-goniometrickych-funkci-algoritmem-cordic/
  11. Použití CORDICu pro výpočet dalších funkcí
    http://www.ro­ot.cz/clanky/me­toda-cordic-a-vypocet-funkci-tan-atan-a-length/
  12. Čtyři základní způsoby uložení čísel pomocí FX formátů
    http://www.ro­ot.cz/clanky/bi­narni-reprezentace-numerickych-hodnot-v-fx-formatu/
  13. Základní aritmetické operace prováděné v FX formátu
    http://www.ro­ot.cz/clanky/za­kladni-aritmeticke-operace-provadene-ve-formatu-fx/
  14. Implementace algoritmů pro aritmetické operace
    http://www.ro­ot.cz/clanky/im­plementace-aritmetickych-operaci-s-fx-formatem-v-cecku/
  15. Algoritmus CORDIC s hodnotami uloženými ve formátu FX
    http://www.ro­ot.cz/clanky/al­goritmus-cordic-s-hodnotami-ulozenymi-ve-formatu-fx/
  16. Algoritmus CORDIC v FX formátu a goniometrické funkce
    http://www.ro­ot.cz/clanky/al­goritmus-cordic-v-fx-formatu-a-goniometricke-funkce/
  17. FIR Filter FAQ
    http://dspguru­.com/dsp/faqs/fir
  18. Finite impulse response (Wikipedia)
    http://en.wiki­pedia.org/wiki/Fi­nite_impulse_res­ponse
  19. DSPRelated
    http://www.dspre­lated.com/
  20. Uzebox project home page
    http://code.go­ogle.com/p/Uze­box/
  21. The AVR Eclipse Plugin home page
    http://source­forge.net/pro­jects/avr-eclipse/
  22. The AVR Eclipse Plugin description
    http://avr-eclipse.source­forge.net/wiki/in­dex.php/The_AV­R_Eclipse_Plu­gin
  23. AVRDUDE – AVR Downloader/UploaDEr
    http://www.non­gnu.org/avrdu­de/
  24. AVRDUDE-gui
    http://source­forge.net/pro­jects/avrdude-gui/
  25. USBtiny
    http://www.xs4a­ll.nl/~dicks/a­vr/usbtiny/
  26. USBtinyISP
    http://www.la­dyada.net/make/us­btinyisp/
  27. Uzebox pages: introduction
    http://belogic­.com/uzebox/ho­witsmade.htm
  28. Uzebox pages: hardware description
    http://belogic­.com/uzebox/har­dware.htm
  29. Uzebox pages: Video primer
    http://belogic­.com/uzebox/vi­deo_primer.htm
  30. Uzebox pages: schemas
    http://belogic­.com/uzebox/dow­nloads.htm
  31. AVRFreaks Wiki
    http://www.avrfre­aks.net/wiki/in­dex.php/Main_Pa­ge
  32. Atmel AVR 8– and 32-bit
    http://www.at­mel.com/produc­ts/avr/
  33. tinyAVR
    http://www.at­mel.com/dyn/pro­ducts/devices­.asp?category_id=163&fa­mily_id=607&sub­family_id=791
  34. AT-Mini
    http://www.mi­kroe.com/eng/pro­ducts/view/649/at-mini-board/
  35. Arduino
    http://www.ar­duino.cc/
  36. AVR Microcontroller
    http://www.en­gineersgarage­.com/articles/a­vr-microcontroller
  37. Atmel AVR – Wikipedia
    http://en.wiki­pedia.org/wiki/At­mel_AVR
  38. AVR instruction set
    http://avr.hw­.cz/architektu­ra/instukce.html
  39. Porovnání jednotlivých procesorů AVR
    http://avr.hw­.cz/architektu­ra/porovnani.html
  40. 68HC11 Instruction Set
    http://www.cs­.uaf.edu/2007/fa­ll/cs441/proj1no­tes/sawyer/in­st.html
  41. 68HC11 OpCode Map
    http://home.e­arthlink.net/~tdic­kens/68hc11/68h­c11_opcode_map­.html
  42. A Simple Robot Using the 68HC11 Processor
    http://home.e­arthlink.net/~tdic­kens/68hc11/trp­2/trp2.html
  43. 68HC11 C-Compiler (Imagecraft)
    http://microcon­trollershop.com/pro­duct_info.php?pro­ducts_id=188
  44. GNU Development Chain for 68HC11&68HC12
    http://www.gnu­.org/software/m68hc11/
  45. GNU C for 68HC11 – documentation
    http://www.gnu­.org/software/m68hc11/m­68hc11_doc.html
  46. The P-Brain tm Microcontroller Kit
    http://www.fu­turebots.com/bra­in.htm
  47. Wikipedia: Motorola 68HC05
    http://en.wiki­pedia.org/wiki/Mo­torola_68HC05
  48. Wikipedia: Freescale 68HC08
    http://en.wiki­pedia.org/wiki/68HC08
  49. Wikipedia: Freescale 68HC11
    http://en.wiki­pedia.org/wiki/68HC11
  50. Wikipedia: Freescale 68HC12
    http://en.wiki­pedia.org/wiki/Fre­escale_68HC12
  51. HC05 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­98633
  52. HC08 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­97663
  53. Digital Core Design 68HC08 – HDL IP Core
    http://www.dcd­.pl/acore.php?id­core=82
  54. Freescale 68HC11
    http://www.fre­escale.com/we­bapp/sps/site/ta­xonomy.jsp?no­deId=016246844­98635
  55. Lifecycle of a CPU:
    http://www.cpushac­k.net/life-cycle-of-cpu.html
  56. Most wanted CPU of the world:
    http://www.cpu-galaxy.at/CPU/In­tel%20CPU/3002–8008/4004%20G­rey.jpg
  57. Wikipedia: 6502:
    http://en.wiki­pedia.org/wiki/6502
  58. The Western Design Center, Inc.:
    http://www.wes­terndesigncen­ter.com/
  59. Apple II History Home:
    http://apple2his­tory.org/
  60. www.6502.org:
    http://www.6502­.org/
  61. Stránky firmy Microchip Technology
    http://www.mi­crochip.com/
  62. Výběr z různých modelů (osmibitových) mikrořadičů PIC
    http://www.mi­crochip.com/ste­llent/idcplg?Id­cService=SS_GET_PA­GE&nodeId=2661
  63. Řada (rodina) osmibitových mikrořadičů PIC 10
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1009&mi­d=10&lang=en&pa­geId=74
  64. Řada (rodina) osmibitových mikrořadičů PIC 12
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1001&mi­d=10&lang=en&pa­geId=74
  65. Řada (rodina) osmibitových mikrořadičů PIC 14
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1008&mi­d=10&lang=en&pa­geId=74
  66. Řada (rodina) osmibitových mikrořadičů PIC 16
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1002&mi­d=10&lang=en&pa­geId=74
  67. Další výběr z různých modelů mikrořadičů PIC
    http://www.mi­crochip.com/map­s/microcontro­ller.aspx
  68. PIC microcontroller (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/PIC_mi­crocontroller
  69. Mikrokontrolér PIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Mi­krokontrolér_PIC
  70. FLASHFORTH for the PIC18F and the dsPIC30F
    http://flashf­orth.sourcefor­ge.net/
  71. FlashForth
    http://www.sou­rceforge.net/pro­jects/flashfor­th
  72. Free Pic software tools
    http://softwa­repic.50webs.com/fre­esoft.html
  73. What is Amicus?
    http://www.pic­basic.org/pro­ton_lite.php
  74. Amicus FAQ
    http://www.my­amicus.co.uk/faq­.php?s=2e8d12e7f4c23e775­776f4916876354b&
  75. Microcontrollers development tools
    http://www.gnu­pic.dds.nl/
  76. gpsim (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Gpsim
  77. gpsim home page
    http://gpsim.sou­rceforge.net/gpsim­.html
  78. The FreeRTOS Project
    http://www.fre­ertos.org/
  79. FreeRTOS (Wikipedia)
    http://en.wiki­pedia.org/wiki/Fre­eRTOS
  80. Serial EEPROM (93C46 / 93CS46) Routines
    http://www.pjrc­.com/tech/8051/se­rial-eeprom.html
  81. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko­.sasktelwebsi­te.net/cpu.html
  82. SPI interface tutorial
    http://www.best-microcontroller-projects.com/spi-interface.html
  83. Serial Peripheral Interface Bus
    http://en.wiki­pedia.org/wiki/Se­rial_Peripheral_In­terface_Bus
  84. EUSB to SPI bus Kit
    http://www.ei­dusa.com/Elec­tronics_Kits_E­USB_To_SPI_BUS­.htm
  85. SPI Block Guide V03.06, Freescale Semiconductor
    http://www.fre­escale.com/fi­les/microcontro­llers/doc/ref_ma­nual/S12SPIV3­.pdf
  86. What is SPI?
    http://www.fpga4fun­.com/SPI1.html
  87. SPI – A simple implementation
    http://www.fpga4fun­.com/SPI2.html
  88. Bit-banging
    http://en.wiki­pedia.org/wiki/Bit-banging
  89. Joint Test Action Group
    http://en.wiki­pedia.org/wiki/JTAG
  90. I2C
    http://en.wiki­pedia.org/wiki/I2C
  91. Seriál o programovacím jazyce Forth:
    seriál o programovacím jazyce Forth
  92. Display Data Channel
    http://en.wiki­pedia.org/wiki/Dis­play_Data_Chan­nel
  93. I2 Background
    http://www.mi­croport.tw/blog­new.php?blog_no­=7#theory
  94. PIC16F87X, 28/40-pin 8-Bit CMOS FLASH Microcontrollers
    Microchip Technology Inc.
    http://www.mi­crochip.com
Našli jste v článku chybu?
Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Vitalia.cz: 5 pravidel proti infekci močových cest

5 pravidel proti infekci močových cest

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Vitalia.cz: Antibakteriální mýdla nepomáhají, spíš škodí

Antibakteriální mýdla nepomáhají, spíš škodí

DigiZone.cz: Sat novinky: NASA Ultra HD (4K)

Sat novinky: NASA Ultra HD (4K)

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

Podnikatel.cz: Nemá dluhy? Zjistíte to na poště

Nemá dluhy? Zjistíte to na poště

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

120na80.cz: Pálení žáhy: která jídla ne a co nás uzdraví?

Pálení žáhy: která jídla ne a co nás uzdraví?

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

120na80.cz: Nejsilnější alergeny jsou pryč

Nejsilnější alergeny jsou pryč

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují