Obsah
1. Digitální signálové procesory před rokem 1980
2. Integrované obvody řady AMD Am2900 aneb zlatá střední cesta pro konstruktéry
3. Procesory sestavované z „bitových řezů“
4. Čip Am2901 – základní aritmeticko-logická jednotka
6. Vylepšené ALU: čipy Am2903 a Am29203
7. Sekvencér a programový řadič
8. Použití řady Am2900 v praxi i ve výuce
1. Digitální signálové procesory před rokem 1980
V předchozí části seriálu o architekturách počítačů jsme si řekli základní informace o některých typických vlastnostech digitálních signálových procesorů (DSP). Vlastnosti DSP vyžadované jejich uživateli (což jsou většinou konstruktéři a/nebo programátoři různých elektronických zařízení) se v některých ohledech poněkud odlišují od vlastností běžných mikroprocesorů (CPU) či mikrořadičů (MCU). Jedná se především jak o odlišnou architekturu operačních pamětí (digitální signálový procesor by měl implementovat kruhové buffery a taktéž současné čtení ze dvou paměťových oblastí), tak i o požadavek na provádění základních aritmetických operací s takzvanou saturací. Digitální signálový procesor by měl taktéž podporovat instrukci pro násobení operandů (opět se saturací), měl by obsahovat větší množství pracovních registrů a v ideálním případě by jeho akumulátor (popř. akumulátory) měly mít větší bitovou šířku, než je bitová šířka vstupních a výstupních dat. Data na vstupu DSP jsou většinou získávána ze vstupního analogového signálu pomocí A/D převodníku a vzorkovacího/samplovacího obvodu typu Sample & Hold. Na výstup DSP může být připojen D/A převodník, popř. může digitální signál přicházet do dalšího článku celého výpočetního řetězce.
Obrázek 1: Typický představitel klasických mikroprocesorů osmibitové éry: MHB 8080A, což je československý klon mikroprocesoru Intel 8080A. I přesto, že se tento osmibitový mikroprocesor používal ve velkém množství zařízení (zpočátku dokonce suploval roli mikrořadičů, což je poněkud paradoxní, protože pro svoji korektní funkci vyžadoval kooperaci s minimálně dvěma dalšími čipy 8224 a 8228), neměl některé vlastnosti požadované při zpracování signálů v reálném čase.
V současnosti je nabídka digitálních signálových procesorů velmi široká, takže si konstruktéři různých elektronických zařízení mohou vybírat DSP podle jejich výpočetního výkonu, bitové šířky zpracovávaných dat (vzorků – samplů), kapacity datových i programových pamětí, ceny, spotřeby čipu atd. Taktéž je možné v případě potřeby celý digitální signálový procesor implementovat na FPGA (mnohé FPGA již obsahují sčítačky či dokonce násobičky, čímž se celá problematika zjednodušuje). Ovšem v minulosti – myšlena je v tomto případě přibližně doba před rokem 1980 – nebyly možnosti konstruktérů při výběru DSP zdaleka tak velké, protože se tehdejší výrobci mikroprocesorů a mikrořadičů teprve seznamovali s novými požadavky na vlastnosti těchto čipů. To ovšem znamenalo, že se pro implementaci elektronického obvodu určeného pro zpracování signálů, například při konstrukci digitální pásmové propusti, musel použít buď existující mikroprocesor nebo mikrořadič se všemi jeho nevýhodami v této poměrně specifické oblasti, nebo bylo nutné celé zařízení implementovat vlastní logickou sítí, například pomocí bipolárních integrovaných obvodů řady 7400.
Obrázek 2: Jedna z variant mikrořadiče Intel 8048. Osmibitové mikrořadiče sice mají některé společné vlastnosti s digitálními signálovými procesory (například oddělenou paměť programu a paměť dat, někdy i existenci A/D převodníku či modulu pro PWM), nicméně ani tyto čipy se pro zpracování signálů příliš nehodí.
2. Integrované obvody řady AMD Am2900 aneb zlatá střední cesta pro konstruktéry
Ve skutečnosti obě možnosti, které byly naznačené na konci předchozí kapitoly, nejsou pro konstruktéry elektronických zařízení mnohdy ani zdaleka ideální. Při použití běžného mikroprocesoru či mikrořadiče jako náhrady za DSP většinou citelně chyběla neexistence hardwarové násobičky, popř. její nízká výpočetní výkonnost. To je případ původní verze již popsaného osmibitového mikrořadiče 8051, který sice násobičku obsahoval, ale násobení bylo současně i nejpomalejší instrukcí tohoto MCU. Mnohdy taktéž konstruktérům vadilo to, že osmibitové CPU/MCU byly nevýkonné a naproti tomu šestnáctibitové mikroprocesory byly na konci sedmdesátých let minulého století ještě velmi drahé, takže by jejich použití například v běžných elektronických zařízeních nebylo ve velké většině případů rentabilní. Konstrukce logických sítí sestavených z hradel, klopných obvodů, posuvných registrů, pamětí atd., tj. z integrovaných obvodů o poměrně nízké integraci, již v sedmdesátých letech taktéž nebylo příliš rentabilní a navíc velký počet těchto obvodů znamenal komplikace při tvorbě plošného spoje, napájení součástek i jejich chlazení.
Obrázek 3: Osmibitový mikrořadič 68HC11 řady E se v některých zařízeních doposud používá ve funkci digitálního signálového procesoru (například i kvůli existenci A/D převodníků, násobičky a podpory šestnáctibitové aritmetiky), nicméně jde to i levněji/rychleji/elegantněji :-)
Ovšem již v roce 1975, tedy pouze několik měsíců po vytvoření prvního mikroprocesoru, přišla firma AMD s velmi zajímavou a v mnoha ohledech i revoluční technologií – takzvanou rodinou Am2900. Jednalo se o skupinu více než čtyřiceti typů integrovaných obvodů o střední až vysoké integraci, která byla navržena takovým způsobem, že se pomocí těchto čipů mohl sestavit plnohodnotný procesor zpracovávající data o bitové šířce, která byla násobkem čtyř. S trochou praxe tedy mohli konstruktéři sestavit čtyřbitový, osmibitový, dvanáctibitový, šestnáctibitový atd. atd. procesor, u nějž si dokonce mohli zvolit vlastní instrukční sadu odpovídající povaze řešeného problému. Navíc, což se ukázalo být v oblasti zpracování signálu poměrně důležité, existoval v rodině Am2900 čip implementující aritmeticko-logickou jednotku, a to i s hardwarovou násobičkou. Prakticky všechny integrované obvody z rodiny Am2900 používaly bipolární technologii, což mj. znamenalo i vyšší rychlost, než tomu bylo u tehdejších mikroprocesorů, které používaly technologii NMOS či PMOS (popř. později i CMOS).
Obrázek 4: Již minule zmíněný digitální signálový procesor TMS32010 firmy Texas Instruments, který konstruktérům nabídl na svou dobu vysoký výpočetní výkon v základních operacích se signálem (součet + součin).
3. Procesory sestavované z „bitových řezů“
Firma AMD prezentovala rodinu Am2900 pod názvem „bit slice processor“. Tímto názvem je řečeno přibližně to, že aritmeticko-logická jednotka implementovaná v samostatném čipu, má relativně malou bitovou šířku (v případě rodiny Am2900 se jednalo pouze o čtyři bity, v minulosti se však používaly i jednobitové a dvoubitové ALU), protože výrobce čipové sady předpokládá, že se při konstrukci procesorů použije větší množství aritmeticko-logických jednotek pracujících sériově či paralelně, a to takovým způsobem, aby bylo možné zpracovávat operandy o větší bitové šířce.
Obrázek 5: Integrovaný obvod 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.).
To ovšem taktéž znamenalo, že se v čipové sadě musel (minimálně při řazení ALU paralelně) nacházet i integrovaný obvod, který dokázal správně rozpoznat příznaky přetečení (overflow flag) a přenosu (carry flag) na základě stavových signálů přijímaných od jednotlivých ALU, jiný obvod musel vyhodnocovat příznak nuly (zero flag) atd. Další integrovaný obvod se staral o to, aby jednotlivé ALU mohly pracovat skutečně paralelně – zajišťoval tedy sčítání a odčítání operandů se zrychleným přenosem, kdy se příznak přenosu (carry) generuje již v průběhu sčítání obou operandů.
Obrázek 6: Klon výše zobrazeného čipu AMD Am2901, který pochází ze SSSR.
4. Čip Am2901 – základní aritmeticko-logická jednotka
Ústředním prvkem procesorů sestavených z bitových řezů byl v případě rodiny AMD Am2900 čip nesoucí označení Am2901. Tento integrovaný obvod (někdy označovaný za samostatný procesor, což však není zcela korektní) obsahoval především dva důležité bloky. Jednalo se o blok sestavený ze šestnácti čtyřbitových registrů a taktéž o blok, v němž byla implementována čtyřbitová aritmeticko-logická jednotka. Oba bloky byly ovládány externími řídicími signály: pro ovládání funkce bloku registrů se používaly signály pro výběr registrů pro čtení a zápis operandů (tyto signály lze považovat za čtyřbitové adresy sloužící pro výběr jednoho ze šestnácti pracovních registrů), aritmeticko-logická jednotka byla naproti tomu řízena mikroinstrukcemi o šířce devíti bitů, v nichž se určovala funkce prováděná ALU, zdrojové operandy a taktéž umístění výsledku. Jako jeden z operandů mohla taktéž sloužit data přiváděná po čtyřech samostatných externích linkách – tímto způsobem se například mohla přičíst konstanta k libovolnému pracovnímu registru apod.
Obrázek 7: Integrovaný obvod Am2901.
Vzhledem k tomu, že pro výběr funkce provedené aritmeticko-logickou jednotkou, byly určeny pouze tři bity z devítibitové mikroinstrukce, bylo možné vybrat jednu z osmi operací: R+S, S-R, R-S (prohozené operandy v porovnání s předchozí instrukcí), R or S, R and S, (not R) and S, R xor S a konečně neg (R xor S). Operandy R a S byly vybírány taktéž na základě trojice bitů z devítibitové mikroinstrukce, přičemž jednou z možností bylo dosazení konstanty 0 za jeden z operandů R nebo S. S využitím této možnosti se daly implementovat některé unární aritmetické operace, například změna znaménka operandu, negace operandu, vynulování operandu, inkrementace či dekrementace s využitím jedničkového přenosu (carry) na vstupu ALU atd. Kromě čtyřbitového výsledku byly na výstupní piny čipu Am2901 přiváděny i další stavové signály: příznak přetečení (carry), příznak záporného výsledku (negative), příznaky P (propagate) a G (generate) používané při zřetězení ALU se zrychleným přenosem a taktéž příznak přetečení overflow používaný při výpočtech s čísly se znaménkem (ten měl význam pouze u ALU počítající čtyři bity s nejvyšší váhou).
Obrázek 8: Zjednodušený blokový diagram čipu Am2901.
Zdroj: technické materiály firmy AMD.
5. Integrovaný obvod Am2902
Dalším integrovaným obvodem patřícím do rodiny AMD Am2900 byl čip Am2902, který sloužil v případě paralelního spojení většího počtu aritmeticko-logických jednotek k rychlému generování příznaků přenosu carry, které tvoří jeden z nezbytných vstupů ALU. Díky existenci tohoto čipu, jehož vnitřní schéma je mimochodem poměrně jednoduché, bylo umožněno paralelně zapojit až čtyři aritmeticko-logické jednotky a vytvořit tak vlastně ALU se šířkou šestnácti bitů. Při implementaci obvodu Am2902 se využívala dvojice bitových příznaků propagate a generate vytvářená samotnými ALU přímo na základě vstupních hodnot operandů a popř. i příznaku přenosu C0, který může být použit například pro přičtení jedničky k výsledku aritmetické operace. Příznak propagate značí, že přenos z ALU může být vypočten a přiveden na vstup následující ALU, a to ještě předtím, než je samotná operace součtu či rozdílu vůbec vykonána. Příznak generate naopak značí, že přenos bude skutečně ALU generován, což je opět možné zjistit pomocí základních logických operací ještě před vlastním provedením součtu či rozdílu.
Obrázek 9: Šestnáctibitová ALU sestavená ze čtveřice čipů Am2901 a jednoho čipu Am2902.
Zdroj: technické materiály firmy AMD.
Kvůli tomu, že integrovaný obvod Am2902 má počet párů vstupních signálů propagate+generate omezen na tři, je možné paralelně zapojit „pouze“ čtveřici čtyřbitových aritmeticko-logických jednotek, což sice ve výsledku vede ke konstrukci šestnáctibitového procesoru (mimochodem levnějšího, než první procesory řady Intel 8086), ovšem v některých zařízeních byla požadována i větší bitová šířka zpracovávaných operandů. V tomto případě bylo možné buď navrhnout vlastní logickou síť simulující vícebitový obvod Am2902 (což ovšem vyžaduje použití logických hradel s mnoha vstupy), nebo bylo možné zapojit větší množství čipů Am2902 způsobem, který je naznačen na následujícím obrázku, kde je zobrazena aritmeticko-logická jednotka 32bitového procesoru. Povšimněte si, že jednotlivé dílčí čtyřbitové ALU jsou rozděleny na dvě čtveřice, přičemž vstup carry do druhé čtveřice sčítaček je generován samostatným třetím obvodem Am2902, ovšem s určitým časovým zpožděním, které však není tak velké jako v případě, že by se součet či rozdíl 32bitových operandů realizoval programově jako součet či rozdíl dvou dvojic 16bitových operandů.
Obrázek 10: 32bitová ALU sestavená z osmice čipů Am2901 a trojice čipů Am2902.
Zdroj: technické materiály firmy AMD.
6. Vylepšené ALU: čipy Am2903 a Am29203
Ve čtvrté kapitole byl popsán základní typ aritmeticko-logické jednotky rodiny AMD Am2900. Jednalo se o čip Am2901 s podporou tří základních aritmetických operací (součet, rozdíl a rozdíl s otočením významu operandů) a pěti operací logických prováděných bit po bitu. Ovšem namísto této základní ALU bylo taktéž možné použít složitější integrovaný obvod nesoucí označení Am2903 či Am29203. Tento obvod byl v několika ohledech oproti Am2901 vylepšen, zejména v tom ohledu, že obsahoval podporu pro násobení a dělení dvou operandů. Násobení (a taktéž dělení) nebylo prováděno v jednom taktu, ale v n mikroinstrukčních cyklech pro operandy o šířce n bitů s tím, že výsledek měl délku 2n bitů. Tento čip dále umožňoval provádět aritmetický nebo logický posuv operandu a to dokonce s tím rozšířením, že se jedním příznakem signalizovalo dokončení posuvu (vysunutí poslední nuly) při normalizaci čísel reprezentovaných ve formátu plovoucí řádové čárky (tento formát sice nebyl přímo podporován, ovšem i jednoduchou FPU bylo možné pomocí řady Am2900 sestavit, dokonce se nejednalo o nijak složité zapojení).
Obrázek 11: Sovětská varianta čipu Am2903.
Celkový počet operací podporovaných integrovaným obvodem Am2903 se oproti Am2901 zvýšil na šestnáct – sedm aritmetických operací a devět operací logických (bitových). Při vzájemném spojování několika integrovaných obvodů Am2903 takovým způsobem, aby tvořily vícebitovou aritmeticko-logickou jednotku, se muselo pomocí dvojice vstupních signálů pro každý čip Am2903 určit, v jakém místě celé „baterie ALU“ se tento čip nachází – buď se mohlo jednat o ALU zpracovávající čtyři bity s nejmenší váhou (LSS – Least Significant Slice), ALU zpracovávající naopak čtyři bity s největší váhou (MSS – Most Significant Slice), popř. o ALU ležící v celém řetězci uprostřed (IS – Intermediate Slice). Na základě této informace byly některé operace v aritmeticko-logických jednotkách prováděny poněkud odlišným způsobem – týká se to jak násobení či dělení, tak i bitových posunů a rotací.
Obrázek 12: Blokové schéma integrovaného obvodu Am2903.
Zdroj: technické materiály firmy AMD.
7. Sekvencér a programový řadič
Skutečný procesor však není tvořen pouze aritmeticko-logickou jednotkou, ale i řadičem. V případě procesorů sestavovaných z bitových řezů musel být řadič implementován s využitím dalších specializovaných obvodů, většinou pomocí sekvencéru a paměti o relativně malé kapacitě, v níž se strojové instrukce rozkládaly na mikroinstrukce, tj. signály řídicí přístup do paměti, funkce aritmeticko-logických jednotek atd. Záleželo jen na konstruktérovi procesoru (tím mohl být samotný programátor), jaký formát instrukcí si zvolí, které instrukce bude implementovat atd. Navíc bylo možné díky oddělení aritmeticko-logické jednotky od řadiče v procesoru poměrně jednoduše implementovat i další funkce, které nebyly původní ALU prováděny. Mohlo jít například o děličku sestavenou ze samostatné ALU (či dvojice ALU), pomocného čipu implementujícího registr a několika běžných logických hradel. Požadavky kladené na programátora těchto typů procesorů tak sice byly o něco vyšší, než u programátora využívajícího plnohodnotný mikroprocesor připravený výrobcem, ovšem i jeho volnost a možnosti byly mnohem větší.
Obrázek 13: Velmi jednoduchý čtyřbitový procesor sestavený z čipů rodiny Am2900.
Zdroj: technické materiály firmy AMD.
Podívejme se nyní na obrázek číslo 13, na němž je znázorněn velmi jednoduchý čtyřbitový (popř. n×4 bitový) procesor sestavený z čipů patřících do rodiny Am2900. Tento procesor se skládá ze dvou hlavních bloků. Na pravé straně schématu se nachází aritmeticko-logická jednotka s pomocnými obvody a taktéž stavovým registrem Am2918. Na levé straně můžeme vidět řadič sestavený především ze sekvencéru a mikroprogramové paměti (což je ve skutečnosti běžná paměť typu ROM, ovšem s větší bitovou šířkou slov). Sekvencér společně s mikroprogramovou pamětí na základě instrukčního kódu a různých bitových příznaků generuje mikroinstrukce prováděné aritmeticko-logickou jednotkou, které však zpětně ovlivňují i instrukční registr a další části procesoru. Sekvencér je tvořen čipem Am2909, jenž dokáže generovat čtyřbitové adresy, což je však většinou nedostatečný adresový rozsah. Z tohoto důvodu je možné spojit dvojici čipů Am2909 pro generování osmibitové adresy (256 slov) či trojici čipů pro generování adresy dvanáctibitové (4096 slov). Formát mikroinstrukcí a samozřejmě i vlastní obsah mikroprogramové paměti je zcela ponechán na vůli konstruktéra procesoru; jediné omezení spočívá v kapacitě této paměti a taktéž nutnosti dodržení časování jednotlivých částí procesoru.
Obrázek 14: Jedna z publikací, která se věnuje procesorům sestaveným z bitových řezů.
8. Použití řady Am2900 v praxi i ve výuce
Rodina čipů AMD Am2900 se již krátce po svém uvedení na trh v roce 1975 stala mezi konstruktéry i mezi některými programátory poměrně populární, protože jim nabízela velkou flexibilitu při návrhu procesoru (včetně jeho instrukční sady) a současně se díky použité bipolární technologii jednalo i o relativně rychlé řešení, ovšem na úkor větší spotřeby a nižší integrace. Integrované obvody Am2900 se z tohoto důvodu používaly například při konstrukcích minipočítačů, některých méně známých typů mikropočítačů, specializovaných zařízení (například prototypů 2D grafických akcelerátorů), ale i pro realizaci digitálních signálových procesorů, kde se mohlo využít například možnosti pracovat s osmibitovými vzorky, ovšem aritmeticko-logická jednotka mohla zpracovávat dvanáctibitová data (tři čtyřbitové ALU zapojené paralelně). Navíc se samotné aritmeticko-logické jednotky, tj. integrované obvody Am2901 a/nebo Am2903, používaly i při návrzích různých zapojení specializovaných pro provádění maticových operací (součty matic, násobení matic apod.).
Obrázek 15: Grafický akcelerátor (2D) používající čipy z rodiny Am2900.
Dokonce i některé matematické koprocesory pracující s numerickými hodnotami reprezentovanými v systému plovoucí řádové čárky byly implementovány s využitím integrovaných obvodů patřících do rodiny Am2900. Navíc se díky velké otevřenosti celé architektury Am2900 (zejména v porovnání s běžnými mikroprocesory) používala rodina Am2900 i pro výuku na univerzitách, protože na vodiče mezi jednotlivými čipy bylo možné zapojit osciloskop nebo logický analyzátor, takže se Am2900 mohlo použít i při výuce (v sedmdesátých letech minulého století se informatika většinou vyučovala současně s elektronikou, popř. matematikou). Teprve o mnoho let později se tyto bipolární obvody začaly postupně nahrazovat buď obecnými jednočipovými mikroprocesory, popř. programovatelnými FPGA, které jsou v některých ohledech ještě flexibilnější (a dnes již samozřejmě i mnohem výkonnější), než dnes již poněkud zastaralá řada AMD Am2900.
Obrázek 16: Deska obsahující mj. i ALU Am2901.
9. Odkazy na Internetu
- Bit slicing
http://en.wikipedia.org/wiki/Bit_slicing - Bitslice DES
http://www.darkside.com.au/bitslice/ - Great Microprocessors of the Past and Present: Part VII: Advanced Micro Devices Am2901, a few bits at a time …
http://www.cpushack.com/CPU/cpu1.html#Sec1Part7 - Great Microprocessors of the Past and Present: Part IX: Signetics 8×300, Early cambrian DSP ancestor (1978):
http://www.cpushack.com/CPU/cpu2.html#Sec2Part9 - Introduction to DSP – DSP processors:
http://www.bores.com/courses/intro/chips/index.htm - The Scientist and Engineer's Guide to Digital Signal Processing:
http://www.dspguide.com/ - Digital signal processor (Wikipedia EN)
http://en.wikipedia.org/wiki/Digital_signal_processor - Digitální signálový procesor (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Digitální_signálový_procesor - Digital Signal Processing FAQs
http://dspguru.com/dsp/faqs - Reprezentace numerických hodnot ve formátech FX a FP
http://www.root.cz/clanky/fixed-point-arithmetic/ - IEEE 754 a její příbuzenstvo: FP formáty
http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/ - Aritmetické operace s hodnotami uloženými ve formátu FP
http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/ - Výpočet goniometrických funkcí pomocí algoritmu CORDIC
http://www.root.cz/clanky/vypocet-goniometrickych-funkci-algoritmem-cordic/ - Použití CORDICu pro výpočet dalších funkcí
http://www.root.cz/clanky/metoda-cordic-a-vypocet-funkci-tan-atan-a-length/ - Čtyři základní způsoby uložení čísel pomocí FX formátů
http://www.root.cz/clanky/binarni-reprezentace-numerickych-hodnot-v-fx-formatu/ - Základní aritmetické operace prováděné v FX formátu
http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/ - Implementace algoritmů pro aritmetické operace
http://www.root.cz/clanky/implementace-aritmetickych-operaci-s-fx-formatem-v-cecku/ - Algoritmus CORDIC s hodnotami uloženými ve formátu FX
http://www.root.cz/clanky/algoritmus-cordic-s-hodnotami-ulozenymi-ve-formatu-fx/ - Algoritmus CORDIC v FX formátu a goniometrické funkce
http://www.root.cz/clanky/algoritmus-cordic-v-fx-formatu-a-goniometricke-funkce/ - FIR Filter FAQ
http://dspguru.com/dsp/faqs/fir - Finite impulse response (Wikipedia)
http://en.wikipedia.org/wiki/Finite_impulse_response - DSPRelated
http://www.dsprelated.com/ - Uzebox project home page
http://code.google.com/p/Uzebox/ - The AVR Eclipse Plugin home page
http://sourceforge.net/projects/avr-eclipse/ - The AVR Eclipse Plugin description
http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin - AVRDUDE – AVR Downloader/UploaDEr
http://www.nongnu.org/avrdude/ - AVRDUDE-gui (nadstavba nad AVRDUDE)
http://sourceforge.net/projects/avrdude-gui/ - USBtiny
http://www.xs4all.nl/~dicks/avr/usbtiny/ - USBtinyISP
http://www.ladyada.net/make/usbtinyisp/ - Uzebox pages: Introduction
http://belogic.com/uzebox/howitsmade.htm - Uzebox pages: Hardware Description
http://belogic.com/uzebox/hardware.htm - Uzebox pages: Video primer
http://belogic.com/uzebox/video_primer.htm - Uzebox pages: Schemas
http://belogic.com/uzebox/downloads.htm - AVRFreaks Wiki
http://www.avrfreaks.net/wiki/index.php/Main_Page - Atmel AVR 8-bit and 32-bit
http://www.atmel.com/products/avr/ - tinyAVR
http://www.atmel.com/dyn/products/devices.asp?category_id=163&family_id=607&subfamily_id=791 - AT-Mini
http://www.mikroe.com/eng/products/view/649/at-mini-board/ - Arduino
http://www.arduino.cc/ - AVR Microcontroller
http://www.engineersgarage.com/articles/avr-microcontroller - Atmel AVR – Wikipedia
http://en.wikipedia.org/wiki/Atmel_AVR - AVR instruction set
http://avr.hw.cz/architektura/instukce.html - Porovnání jednotlivých procesorů (mikrořadičů) AVR
http://avr.hw.cz/architektura/porovnani.html - 68HC11 Instruction Set
http://www.cs.uaf.edu/2007/fall/cs441/proj1notes/sawyer/inst.html - 68HC11 OpCode Map
http://home.earthlink.net/~tdickens/68hc11/68hc11_opcode_map.html - A Simple Robot Using the 68HC11 Processor
http://home.earthlink.net/~tdickens/68hc11/trp2/trp2.html - 68HC11 C-Compiler (Imagecraft)
http://microcontrollershop.com/product_info.php?products_id=188 - GNU Development Chain for 68HC11&68HC12
http://www.gnu.org/software/m68hc11/ - GNU C for 68HC11 – documentation
http://www.gnu.org/software/m68hc11/m68hc11_doc.html - The P-Brain tm Microcontroller Kit
http://www.futurebots.com/brain.htm - Wikipedia: Motorola 68HC05
http://en.wikipedia.org/wiki/Motorola_68HC05 - Wikipedia: Freescale 68HC08
http://en.wikipedia.org/wiki/68HC08 - Wikipedia: Freescale 68HC11
http://en.wikipedia.org/wiki/68HC11 - Wikipedia: Freescale 68HC12
http://en.wikipedia.org/wiki/Freescale_68HC12 - HC05 Processor Families
http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=01624684498633 - HC08 Processor Families
http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=01624684497663 - Digital Core Design 68HC08 – HDL IP Core
http://www.dcd.pl/acore.php?idcore=82 - Freescale 68HC11
http://www.freescale.com/webapp/sps/site/taxonomy.jsp?nodeId=01624684498635 - Lifecycle of a CPU:
http://www.cpushack.net/life-cycle-of-cpu.html - Most wanted CPU of the world:
http://www.cpu-galaxy.at/CPU/Intel%20CPU/3002–8008/4004%20Grey.jpg - Wikipedia: 6502:
http://en.wikipedia.org/wiki/6502 - The Western Design Center, Inc.:
http://www.westerndesigncenter.com/ - Apple II History Home:
http://apple2history.org/ - www.6502.org:
http://www.6502.org/ - Stránky firmy Microchip Technology
http://www.microchip.com/ - Výběr z různých modelů (osmibitových) mikrořadičů PIC
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2661 - Řada (rodina) osmibitových mikrořadičů PIC 10
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1009&mid=10&lang=en&pageId=74 - Řada (rodina) osmibitových mikrořadičů PIC 12
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1001&mid=10&lang=en&pageId=74 - Řada (rodina) osmibitových mikrořadičů PIC 14
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1008&mid=10&lang=en&pageId=74 - Řada (rodina) osmibitových mikrořadičů PIC 16
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002&mid=10&lang=en&pageId=74 - Další výběr z různých modelů mikrořadičů PIC
http://www.microchip.com/maps/microcontroller.aspx - PIC microcontroller (Wikipedia EN)
http://en.wikipedia.org/wiki/PIC_microcontroller - Mikrokontrolér PIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Mikrokontrolér_PIC - FLASHFORTH for the PIC18F and the dsPIC30F
http://flashforth.sourceforge.net/ - FlashForth
http://www.sourceforge.net/projects/flashforth - Free Pic software tools
http://softwarepic.50webs.com/freesoft.html - What is Amicus?
http://www.picbasic.org/proton_lite.php - Amicus FAQ
http://www.myamicus.co.uk/faq.php?s=2e8d12e7f4c23e775776f4916876354b& - Microcontrollers development tools
http://www.gnupic.dds.nl/ - gpsim (Wikipedia EN)
http://en.wikipedia.org/wiki/Gpsim - gpsim home page
http://gpsim.sourceforge.net/gpsim.html - The FreeRTOS Project
http://www.freertos.org/ - FreeRTOS (Wikipedia)
http://en.wikipedia.org/wiki/FreeRTOS - Serial EEPROM (93C46 / 93CS46) Routines
http://www.pjrc.com/tech/8051/serial-eeprom.html - Great Microprocessors of the Past and Present (V 13.4.0)
http://jbayko.sasktelwebsite.net/cpu.html - SPI interface tutorial
http://www.best-microcontroller-projects.com/spi-interface.html - Serial Peripheral Interface Bus
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus - EUSB to SPI bus Kit
http://www.eidusa.com/Electronics_Kits_EUSB_To_SPI_BUS.htm - SPI Block Guide V03.06, Freescale Semiconductor
http://www.freescale.com/files/microcontrollers/doc/ref_manual/S12SPIV3.pdf - What is SPI?
http://www.fpga4fun.com/SPI1.html - SPI – A simple implementation
http://www.fpga4fun.com/SPI2.html - Bit-banging
http://en.wikipedia.org/wiki/Bit-banging - Joint Test Action Group
http://en.wikipedia.org/wiki/JTAG - I2C
http://en.wikipedia.org/wiki/I2C - Seriál o programovacím jazyce Forth:
seriál o programovacím jazyce Forth - Display Data Channel
http://en.wikipedia.org/wiki/Display_Data_Channel - I2 Background
http://www.microport.tw/blognew.php?blog_no=7#theory - PIC16F87X, 28/40-pin 8-Bit CMOS FLASH Microcontrollers
Microchip Technology Inc.
http://www.microchip.com