Hlavní navigace

Princip činnosti řadiče v mikroprocesorech

26. 4. 2011
Doba čtení: 22 minut

Sdílet

Dnes se společně vrátíme k tématu, kterým jsme se již zabývali v úvodních částech seriálu, v nichž jsme si popisovali princip činnosti mikroprocesoru. Dnes si řekneme, jak mohou být v mikroprocesorech implementovány řadiče. Zaměříme se především na takzvané obvodové řadiče.

Obsah

1. Základní stavební bloky mikroprocesoru

2. Aritmeticko-logická jednotka a základní matematické operace

3. Činnost řadiče při práci mikroprocesoru

4. Demonstrační příklad – provedení instrukce součtu

5. Generování n-bitového vektoru řadičem

6. Obsah n-bitového vektoru generovaného řadičem

7. Obvodový řadič

8. Přednosti a zápory obvodového řadiče

9. Odkazy na Internetu

1. Základní stavební bloky mikroprocesoru

Již v úvodních částech seriálu o architekturách počítačů (konkrétně se jedná o díly 3 až 10) jsme si řekli, z jakých základních stavebních bloků se skládá prakticky libovolný moderní mikroprocesor či mikrořadič. Jedná se především o aritmeticko-logickou jednotku (zkráceně ALU), která provádí, jak již její název ostatně napovídá, výpočet základních aritmetických a logických funkcí. Aritmeticko-logická jednotka je většinou nedílnou součástí integrovaného obvodu, v němž je implementován mikroprocesor, ovšem v předchozích dvou částech tohoto seriálu jsme si taktéž řekli, že ALU může být v případě konstrukce procesoru z takzvaných procesorových řezů realizována pomocí většího množství samostatných integrovaných obvodů – většinou kaskády ALU zpracovávajících současně menší počet bitů (typicky dva či čtyři bity) a dále s využitím obvodu pro rychlé generování signálů přenosu pro všechny ALU v kaskádě. Vstup i výstup ALU je – většinou přes pomocné záchytné registry – připojen na interní datovou sběrnici, která může být v mikroprocesoru vytvořena pouze jedna, ovšem časté jsou i mikroprocesory s dvojicí či dokonce trojicí interních datových sběrnic, což umožňuje zmenšit počet cyklů nutných pro provedení některých instrukcí.

Obrázek 1: Blokové schéma velmi jednoduchého cvičného mikroprocesoru použitého v úvodních částech tohoto seriálu, na němž si vysvětlíme některé činnosti řadiče i aritmeticko-logické jednotky. Jedná se o velmi jednoduchý mikroprocesor s jedinou interní datovou sběrnicí, dvojicí pracovních registrů A a B, čítačem instrukcí, ukazatelem na vrchol zásobníku a příznakovým registrem uchovávajícím trojici příznaků C (carry), O (overflow) a Z (zero).

Další velmi důležitou součástí prakticky každého mikroprocesoru jsou pracovní registry, což jsou v podstatě paměťové bloky s velmi malou kapacitou, protože každý pracovní registr je schopný (většinou) uschovat vždy jen jedno slovo. Slovem je zde myšlena základní informační jednotka, se kterou mikroprocesor pracuje. U mnoha typů mikroprocesorů se jedná o šířku operandů vstupujících do aritmeticko-logické jednotky. Typická šířka slov, tj. počet současně zpracovávaných bitů, se pohybuje od 4 bitů do 128 bitů, dnes se nejčastěji jedná o 8, 16, 32 či 64 bitů (pouze u některých DSP se používají jiné bitové šířky nedělitelné osmi). Vzhledem k tomu, že je kapacita pracovních registrů velmi malá a současně se jedná o paměť využívanou prakticky všemi instrukcemi, je většinou pro jejich vytvoření použita ta nejrychlejší (a mnohdy taktéž nejdražší) dostupná technologie, což znamená, že se u běžných mikroprocesorů jedná o statické paměti, mnohdy založené na klopných obvodech typu D či JK (v minulosti se pracovní registry implementovaly i s využitím velmi rychlé bipolární technologie ECL).

Obrázek 2: Sada deseti integrovaných obvodů z rodiny Intel 3000 (viz též předchozí část tohoto seriálu), z nichž je možné zkonstruovat plnohodnotný šestnáctibitový mikroprocesor, u nějž se programuje přímo řadič (není zde použit ani dekodér instrukcí ani mikrosekvencér, který si popíšeme v následující části tohoto seriálu).

2. Aritmeticko-logická jednotka a základní matematické operace

S pomocí aritmeticko-logické jednotky je možné – samozřejmě v závislosti na její konstrukci vycházející z uvažované oblasti použití procesoru – provádět celou řadu aritmetických operací. Prakticky všechny mikroprocesory obsahují instrukci pro součet obsahu dvou registrů (mnemotechnická zkratka této instrukce je ADD), popř. součet obsahu dvou registrů s přičtením přenosu (mnemotechnická zkratka této instrukce je buď ADC nebo ADDC – Add with Carry). Většina mikroprocesorů (s výjimkou například mikrořadičů řady Intel 8048) obsahuje i instrukce pro provedení rozdílu obsahu dvou registrů (SUB), popř. rozdílu s použitím přenosu z předchozí operace (SBC, nebo při opačném chápání přenosu SBB, tj. rozdíl s výpůjčkou). Spolu se zvyšujícím se stupněm integrace a od ní odvozené možnosti použití více logických prvků se také rozšiřovaly aritmetické schopnosti ALU, což se projevilo například přidáním násobičky (obsahoval ji například i slavný osmibitový mikroprocesor Motorola 6809, o němž jsme se již v tomto seriálu zmiňovali) a později dokonce i děličky.

Obrázek 3: Šestnáctibitová aritmeticko-logická jednotka sestavená ze čtveřice čipů Am2901 a jednoho čipu Am2902.
Zdroj: technické materiály firmy AMD.

Princip práce aritmeticko-logické jednotky je poměrně jednoduchý: na její vstup jsou v typické konfiguraci přivedena dvě n-bitová čísla a dále řídicí signály, pomocí kterých se zvolí příslušná operace. Poněkud předbíháme, ale právě tyto řídicí signály jsou generovány řadičem. Pokud například ALU dokáže provést šestnáct různých operací, postačuje na její řídicí vstup přivést čtveřici signálů. Na výstup aritmeticko-logické jednotky je po určitém zpoždění posláno m-bitové číslo, které odpovídá výsledku zvolené operace. Kromě toho může být na výstupu ALU ještě několik dalších signálů, které se nazývají příznaky (flags) nastavované v závislosti na výsledku či průběhu výpočtu. Jedním z příznaků může být příznak nulovosti (Z – zero flag), příznak přetečení (O – overflow flag), nebo příznak přenosu (C – carry flag). Příznaky se většinou ukládají do registru příznaků, jehož obsah je využíván jak některými instrukcemi pro podmíněné skoky, tak i samotnou aritmeticko-logickou jednotkou, například při bitových posunech nebo při provádění operace součtu s přenosem (carry) nebo rozdílů s výpůjčkou (borrow, což není nic jiného, než negovaný příznak přenosu).

Obrázek 4: Schéma sčítačky se zrychleným přenosem. Povšimněte si, že se zvyšující se bitovou šířkou sčítaných operandů roste i počet vstupů do hradel typu AND.

3. Činnost řadiče při práci mikroprocesoru

Aritmeticko-logická jednotka i pracovní registry tvoří část mikroprocesoru, která je orientována prakticky výhradně na zpracovávaná data: v registrech jsou data po určitou dobu ukládána (popř. se trvalejší informace zapisují a posléze čtou z hlavní paměti právě s využitím pracovních registrů), v aritmeticko-logické jednotce jsou nad daty prováděny všechny potřebné operace. Ovšem ještě nám chybí jeden funkční blok, který by určoval, jakým způsobem budou data zpracovávaná a o která data se vlastně bude jednat. Tímto funkčním blokem, který je v jistém smyslu „mozkem“ celého mikroprocesoru, je řadič spojený s dekodérem instrukcí načítaných buď z operační paměti (platí v případě mikroprocesorů založených na von Neumannově architektuře) nebo z paměti programu (což je případ mikrořadičů založených na Harvardské architektuře). Řadič pracuje na základě instrukcí, které jsou přečteny z paměti a přes interní sběrnici a instrukční registr vstupují do dekodéru instrukcí. Ten instrukční kód rozloží na jednotlivé části (operační znak a adresní část) a takto předzpracovanou instrukci přenese do řadiče.

Obrázek 5: Použití mikroprogramového řadiče v jednoduchém procesoru.
(ofoceno z katalogu podniku Tesla).

Do řadiče navíc vstupuje hodinový signál, o němž budeme pro jednoduchost předpokládat, že ho tvoří pravidelné obdélníkové pulsy, přičemž řadič je synchronizován (opět pro jednoduchost) na vzestupnou hranu těchto pulsů. U mnohých mikroprocesorů je však namísto jednoho obdélníkového signálu použita dvojice navzájem posunutých signálů a řadič reaguje jak na vzestupnou, tak i na sestupnou hranu, což ve svém důsledku vede k rozložení každého taktu na čtyři stavy (i z tohoto důvodu prakticky není možné porovnávat výkonnost mikroprocesorů pouze na základě jejich taktovací frekvence). Řadič pracuje jako několikastavový konečný automat: na základě instrukčního kódu získaného z dekodéru instrukcí vygeneruje v každém taktu n-bitový vektor, kde hodnota n je závislá na interní architektuře mikroprocesoru – řádově se jedná o desítky a někdy i stovky bitů! Hodnoty těchto bitů, které jsou rozvedeny na všechna důležitá místa v čipu, pak řídí všechny další bloky mikroprocesoru, tj. například určují, jakou operaci má provést ALU, obsah kterého pracovního registru má být poslán na vstup ALU (každý registr reaguje na dvojici signálů load a store), jaká data jsou zapsána či naopak přečtena z operační paměti atd. Jeden z těchto bitů slouží i jako signál pro dekodér instrukcí, aby načetl další instrukční kód na základě aktuální hodnoty registru PC – řadič tedy ve skutečnosti řídí i svoji vlastní činnost.

Obrázek 6: Zapojení vstupních a výstupních pinů mikroprogramového řadiče MH3001.
(ofoceno z katalogu podniku Tesla)

4. Demonstrační příklad – provedení instrukce součtu

Princip činnosti mikrořadiče (přesněji řečeno jeho chování navenek) si nejlépe vysvětlíme na demonstračním příkladu. Jednou ze základních instrukcí implementovaných v prakticky každém mikroprocesoru, je instrukce sloužící pro součet dvou pracovních registrů s uložením výsledku aritmetické operace součtu do prvního z těchto registrů. Navíc se po provedení součtu na základě výsledku uloží do registru příznaků nové hodnoty příznaků nuly (Z), přetečení (O) a přenosu (C); u některých mikroprocesorů se navíc upravují i hodnoty dalších příznaků, například příznaku polovičního přenosu (H, AC) používaného v BCD aritmetice a příznaku parity (P) tak, jak tomu bylo u slavných mikroprocesorů Intel 8080 „BOBO“ a Zilog Z80. Z pohledu programátora v assembleru je operace součtu provedena pomocí dále nedělitelné instrukce nazvané ADD či ADC/ADDC, která má většinou dvojici operandů: jedná se o indexy pracovních registrů, jejichž součet má být uskutečněn s tím, že výsledek je většinou uložen do prvního z těchto registrů (výjimkou jsou zásobníkové procesory a procesory s tříadresními instrukcemi).

Obrázek 7: Načtení kódu další instrukce na základě aktuální hodnoty programového čítače PC, jehož obsah je přenesen na externí adresovou sběrnici mikroprocesoru. Po uplynutí časového intervalu odpovídajícího době přístupu do operační paměti se na externí datové sběrnici vystaví kód instrukce, který je přes instrukční registr přenesen do instrukčního dekodéru, jenž kód instrukce rozdělí na operační znak a adresní část.

Ovšem interně je zdánlivě nedělitelná instrukce typu ADC rozdělena do několika mezikroků, které jsou naznačeny na dvojici obrázků umístěných nad a pod tímto odstavcem. Vzhledem k tomu, že náš cvičný procesor obsahuje pouze jedinou datovou sběrnici, je počet těchto mezikroků (a tím i celková doba trvání instrukce) poněkud větší, než kdyby se jednalo o mikroprocesor s dvojicí datových sběrnic, ale princip práce zůstává stejný. Nejdříve je načten kód instrukce z operační paměti. To je provedeno takovým způsobem, že je obsah programového čítače PC poslán na externí adresní sběrnici, k níž je připojena operační paměť. Z operační paměti se následně přečte kód instrukce, který je přes externí datovou sběrnici zaslán do mikroprocesoru, kde je tento kód uložen do instrukčního registru a následně přenesen do dekodéru instrukcí. Právě v tomto okamžiku dochází k „přeprogramování“ řadiče, protože dekodér instrukcí změní jeho stav.

Obrázek 8: Provedení aritmetické operace součtu obsahu obou pracovních registrů A a B s uložením výsledku součtu zpět do registru A. Vzhledem k tomu, že náš cvičný mikroprocesor obsahuje pouze jednu interní sběrnici, je počet cyklů nutných pro provedení instrukce poněkud větší, než u reálných čipů.

5. Generování n-bitového vektoru řadičem

Od chvíle, kdy řadič získá z dekodéru instrukcí rozložené instrukční slovo představující instrukci ADD, začíná postupně generovat následující signály ve formě n-bitového vektoru:

  1. Přenesení obsahu pracovního registru A přes interní sběrnici do prvního pomocného registru připojeného na vstup aritmeticko-logické jednotky.
  2. Přenesení obsahu pracovního registru B přes interní sběrnici do druhého pomocného registru připojeného na vstup aritmeticko-logické jednotky.
  3. Provedení operace součtu, tj. výběr jedné operace aritmeticko-logické jednotky. Výsledek se automaticky uloží do třetího pomocného registru připojeného na výstup aritmeticko-logické jednotky. Nové příznaky jsou uloženy do příznakového registru.
  4. Přenos obsahu třetího pomocného registru (tj. vlastního součtu) přes interní sběrnici do pracovního registru A.
  5. Zvýšení obsahu čítače instrukcí PC o jedničku, což je provedeno v několika krocích s využitím ALU (viz následující animace).
  6. Načtení dalšího kódu instrukce.

Obrázek 9: Mezikroky prováděné při zvýšení obsahu čítače instrukcí o jedničku. Pro přičtení jedničky je v našem cvičném procesoru použita přímo aritmeticko-logická jednotka, zatímco v současných procesorech se jedná o zvláštní obvod pracující paralelně s ALU.

6. Obsah n-bitového vektoru generovaného řadičem

I v případě, že je struktura mikroprocesoru velmi jednoduchá, musí n-bitový vektor generovaný řadičem obsahovat velké množství logických signálů. V následující tabulce jsou některé z těchto signálů vypsány (jedná se o úpravu pro náš cvičební mikroprocesor):

01 generování externího signálu MEMR (čtení slova z operační paměti)
02 generování externího signálu MEMW (zápis slova do operační paměti)
03 přečtení slova z řadiče paměti a jeho přenesení na interní sběrnici
04 zápis slova na interní sběrnici do řadiče paměti
05 přenos obsahu pracovního registru A na interní sběrnici
06 přenos obsahu pracovního registru B na interní sběrnici
07 přenos obsahu čítače instrukcí PC na interní sběrnici
08 přenos obsahu ukazatele na vrchol zásobníku SP na interní sběrnici
09 přenos obsahu registru příznaků na interní sběrnici
10 zápis slova na interní sběrnici do pracovního registru A
11 zápis slova na interní sběrnici do pracovního registru B
12 zápis slova na interní sběrnici do čítače instrukcí PC
13 zápis slova na interní sběrnici do ukazatele na vrchol zásobníku SP
14 zápis slova na interní sběrnici do prvního pomocného registru před ALU
15 zápis slova na interní sběrnici do druhého pomocného registru před ALU
16 zápis slova na interní sběrnici do registru příznaků
17 přenos obsahu třetího pomocného registru za ALU na interní sběrnici
18 výběr aritmetické operace součtu pro ALU
18 výběr aritmetické operace součtu s přenosem pro ALU
19 výběr aritmetické operace rozdílu pro ALU
19 výběr aritmetické operace rozdílu s výpůjčkou pro ALU
20 výběr bitové operace AND pro ALU
21 výběr bitové operace OR pro ALU
22 výběr bitové operace XOR pro ALU
23 výběr bitové operace NOT pro ALU
24 výběr bitové operace rotace doleva pro ALU
25 výběr bitové operace rotace doprava pro ALU

Obrázek 10: Provedení velmi jednoduché instrukce typu MOV B,A, tj. přesun obsahu pracovního registru A do pracovního registru B.

Některé signály uvedené v předchozí tabulce mohou být aktivní ve stejný okamžik. Jedná se například o přenos obsahu pracovního registru A na interní sběrnici a současně o zápis slova ze sběrnice do prvního a/nebo druhého pracovního registru umístěného před ALU.

Obrázek 11: Funkční schéma řadiče při zpracování instrukcí podmíněných a nepodmíněných skoků (nejedná se o schéma zapojení).

7. Obvodový řadič

V předchozích dvou kapitolách jsme si vypsali jak sekvenci mezikroků, které je nutné provést pro vykonání zdánlivě velmi jednoduché operace součtu (ADD) a taktéž jsme si uvedli některé položky n-bitového vektoru, který musí řadič vygenerovat pro provedení každého mezikroku. Pokud by se například operace ADD měla vykonat v deseti mezikrocích, musí řadič vygenerovat korektní n-bitový vektor desetkrát – v každém hodinovém taktu jeden vektor. Řadič je z pohledu logických systémů vlastně konečným automatem, který je možné ručně navrhnout a optimalizovat pomocí klopných obvodů a běžných logických hradel. I když se tento způsob návrhu řadiče skutečně dá realizovat a byl dokonce v minulosti použit (například u první generace mikroprocesorů MIPS), mnohdy se používá obvodový řadič realizovaný buď na základě čítače, nebo s využitím posuvného registru, v němž je posouvána jediná logická jednička (ostatní bity posuvného registru jsou nulové).

Obrázek 12: Základ obvodového řadiče s posuvným registrem. Řídicí signály jsou označeny písmeny a, b a c.
Zdroj: Karel Kryštoufek, Kurs číslicových počítačů a mikropočítačů.

Základ řadiče využívajícího posuvného registru je v podstatě velmi jednoduchý. Jeho princip je zobrazen na obrázku umístěném před tímto odstavcem. Jedná se o řadič mající pět různých stavů. Činnost řadiče je zahájena signálem I, kterým se do prvního klopného obvodu zapíše logická jednička, zatímco všechny další klopné obvody jsou ve stavu logické nuly. S příchodem hodinového signálu H je tato logická jednička posunuta z prvního klopného obvodu do obvodu druhého, po dalším signálu H do obvodu třetího atd. Logická jednička je v kaskádě klopných obvodů pětkrát posunuta a klopné obvody se jako celek mohou nacházet v jednom z pěti stavů 0 až n-1. Z těchto pěti stavů lze pomocí běžných logických členů (typicky implementujících operace OR či častěji NOR) odvozovat libovolné množství řídicích signálů, které jsou v našem jednoduchém schématu označeny symboly a, b a c. Důležité je, že takto zapojený řadič může řídit sám sebe, protože libovolný řídicí signál může být přiveden jak na vstup I, tak i na vstup RESET klopných obvodů. V některých případech se namísto logických členů používají multiplexory, na jejichž vstup je přivedena trvalá logická jednička a jejichž výběrové vstupy jsou zapojeny na vhodná místa v posuvném registru.

Obrázek 13: Schéma obvodového řadiče s čítačem.
Zdroj: Karel Kryštoufek, Kurs číslicových počítačů a mikropočítačů.

8. Přednosti a zápory obvodového řadiče

Obvodový řadič, jehož princip jsme si vysvětlili v předchozí kapitole, tvoří ve skutečnosti pouze základ pro návrh skutečného řadiče vhodného pro řízení mikroprocesoru, protože jsme prozatím vůbec neuvažovali například o tom, jak je počáteční stav řadiče ovlivněn kódem instrukce (operačním znakem) či jakým způsobem se zpracovává adresní část kódu instrukce, pomocí níž se například vybírají pracovní registry. V reálném obvodovém řadiči je navíc možné ovlivňovat polohu jedničky, která je v klopných obvodech (realizujících posuvný registr) posouvána. My jsme prozatím uvažovali pouze o tom, že se jednička v každém taktu posune do dalšího klopného obvodu, ovšem v reálném řadiči je možné polohu jedničky v některém kroku neměnit nebo ji dokonce přesunout do jiné (obecně nesousední) polohy. Podobně je tomu v případě, že je řadič založen nikoli na posuvném registru, ale na čítači. Ostatně i v předchozí kapitole popsaný posuvný registr je ve skutečnosti čítačem pracujícím v kódu „1 z N“ :-).

Obrázek 14: Blokové schéma osmibitového mikroprocesoru Intel 8080, na němž můžeme rozeznat stejné části, jaké má i náš cvičný mikroprocesor. Samotný řadič je na tomto schématu představován spodním blokem, do nějž vstupují instrukce načtené z operační paměti a zpracované dekodérem instrukcí.

skoleni

Obvodové řadiče se při návrhu logických obvodů používají již po velmi dlouhou dobu, protože pro jednodušší úlohy (tj. menší počet stavů řadiče i menší počet řídicích signálů), je i návrh obvodového řadiče poměrně jednoduchý a řadič je možné realizovat s využitím existujících součástek s malou i střední integrací – zejména se používají integrované obvody implementující logická hradla, posuvný registr, multiplexor a demultiplexor (podobné typy řadičů se používaly ve spotřební elektronice před nástupem mikroprocesorů a mikrořadičů). Výhodou těchto typů řadičů je jejich vysoká rychlost. Ovšem s rostoucí složitostí řešené úlohy již počet stavů řadiče i počet řídicích signálů (n-bitový vektor) generovaných v každém stavu roste do takové míry, že je většinou ekonomičtější použít další typ řadiče. Jedná se o takzvaný mikroprogramový řadič, který obsahuje paměť s uloženým mikroprogramem. Těmto typům řadičů, které jsou z hlediska programátora mnohem zajímavější i flexibilnější, se budeme podrobněji věnovat v následující části tohoto seriálu.

Obrázek 15: Blokové schéma mikroprogramového řadiče, které si podrobněji vysvětlíme příště.
Zdroj: Karel Kryštoufek, Kurs číslicových počítačů a mikropočítačů.

9. Odkazy na Internetu

  1. Philip Koopman: Stack Computers: the new wave
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/index.html
  2. Philip Koopman: ARCHITECTURE OF THE WISC CPU/16
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/sec4_2­.html
  3. CPU World: Intel 3000 bit-slice processor family
    http://www.cpu-world.com/CPUs/30­02/
  4. Intel3000 – Schottky Bipolar LSI Microcomputer Set
    http://datashe­ets.chipdb.or­g/Intel/3002_Fa­mily/3001/Intel3001­.pdf
  5. Katalog součástek TESLA: MH3000
    http://www.ama­pro.cz/datove_zdro­je/katalogy/ka­talog_tesla/ka­talog_tesla127­.php
  6. MH3001 (Tesla)
    http://katalo­gy.ic.cz/MH3001­.html
  7. MH3002 (Tesla)
    http://katalo­gy.ic.cz/MH3002­.html
  8. MH3003 (Tesla)
    http://katalo­gy.ic.cz/MH3003­.html
  9. Russian and USSR (CPU, MCU, BSP and Multipliers)
    http://www.cpu­collection.ca/Rus­sian_and_ussr­.htm
  10. CPU-zone: 3001
    http://www.cpu-zone.com/3001.htm
  11. CPU-zone: 3002 3002 Support Chips
    http://www.cpu-zone.com/3002.htm
  12. CPU-zone: 3003 Look-Ahead Carry Generator
    http://www.cpu-zone.com/3003.htm
  13. CPU-Zone: RAM History
    http://www.cpu-zone.com/RAM_His­tory.htm
  14. Bit slicing
    http://en.wiki­pedia.org/wiki/Bit_sli­cing
  15. Bitslice DES
    http://www.dar­kside.com.au/bit­slice/
  16. Great Microprocessors of the Past and Present: Part VII: Advanced Micro Devices Am2901, a few bits at a time …
    http://www.cpushac­k.com/CPU/cpu­1.html#Sec1Par­t7
  17. 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
  18. Introduction to DSP – DSP processors:
    http://www.bo­res.com/courses/in­tro/chips/index­.htm
  19. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspgu­ide.com/
  20. Digital signal processor (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Di­gital_signal_pro­cessor
  21. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Di­gitální_signá­lový_procesor
  22. Digital Signal Processing FAQs
    http://dspguru­.com/dsp/faqs
  23. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.ro­ot.cz/clanky/fi­xed-point-arithmetic/
  24. 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/
  25. 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/
  26. Výpočet goniometrických funkcí pomocí algoritmu CORDIC
    http://www.ro­ot.cz/clanky/vy­pocet-goniometrickych-funkci-algoritmem-cordic/
  27. 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/
  28. Č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/
  29. 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/
  30. Implementace algoritmů pro aritmetické operace
    http://www.ro­ot.cz/clanky/im­plementace-aritmetickych-operaci-s-fx-formatem-v-cecku/
  31. 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/
  32. Algoritmus CORDIC v FX formátu a goniometrické funkce
    http://www.ro­ot.cz/clanky/al­goritmus-cordic-v-fx-formatu-a-goniometricke-funkce/
  33. FIR Filter FAQ
    http://dspguru­.com/dsp/faqs/fir
  34. Finite impulse response (Wikipedia)
    http://en.wiki­pedia.org/wiki/Fi­nite_impulse_res­ponse
  35. DSPRelated
    http://www.dspre­lated.com/
  36. Uzebox project home page
    http://code.go­ogle.com/p/Uze­box/
  37. The AVR Eclipse Plugin home page
    http://source­forge.net/pro­jects/avr-eclipse/
  38. The AVR Eclipse Plugin description
    http://avr-eclipse.source­forge.net/wiki/in­dex.php/The_AV­R_Eclipse_Plu­gin
  39. AVRDUDE – AVR Downloader/UploaDEr
    http://www.non­gnu.org/avrdu­de/
  40. AVRDUDE-gui (nadstavba nad AVRDUDE)
    http://source­forge.net/pro­jects/avrdude-gui/
  41. USBtiny
    http://www.xs4a­ll.nl/~dicks/a­vr/usbtiny/
  42. USBtinyISP
    http://www.la­dyada.net/make/us­btinyisp/
  43. Uzebox pages: Introduction
    http://belogic­.com/uzebox/ho­witsmade.htm
  44. Uzebox pages: Hardware Description
    http://belogic­.com/uzebox/har­dware.htm
  45. Uzebox pages: Video primer
    http://belogic­.com/uzebox/vi­deo_primer.htm
  46. Uzebox pages: Schemas
    http://belogic­.com/uzebox/dow­nloads.htm
  47. AVRFreaks Wiki
    http://www.avrfre­aks.net/wiki/in­dex.php/Main_Pa­ge
  48. Atmel AVR 8-bit and 32-bit
    http://www.at­mel.com/produc­ts/avr/
  49. tinyAVR
    http://www.at­mel.com/dyn/pro­ducts/devices­.asp?category_id=163&fa­mily_id=607&sub­family_id=791
  50. AT-Mini
    http://www.mi­kroe.com/eng/pro­ducts/view/649/at-mini-board/
  51. Arduino
    http://www.ar­duino.cc/
  52. AVR Microcontroller
    http://www.en­gineersgarage­.com/articles/a­vr-microcontroller
  53. Atmel AVR – Wikipedia
    http://en.wiki­pedia.org/wiki/At­mel_AVR
  54. AVR instruction set
    http://avr.hw­.cz/architektu­ra/instukce.html
  55. Porovnání jednotlivých procesorů (mikrořadičů) AVR
    http://avr.hw­.cz/architektu­ra/porovnani.html
  56. 68HC11 Instruction Set
    http://www.cs­.uaf.edu/2007/fa­ll/cs441/proj1no­tes/sawyer/in­st.html
  57. 68HC11 OpCode Map
    http://home.e­arthlink.net/~tdic­kens/68hc11/68h­c11_opcode_map­.html
  58. A Simple Robot Using the 68HC11 Processor
    http://home.e­arthlink.net/~tdic­kens/68hc11/trp­2/trp2.html
  59. 68HC11 C-Compiler (Imagecraft)
    http://microcon­trollershop.com/pro­duct_info.php?pro­ducts_id=188
  60. GNU Development Chain for 68HC11&68HC12
    http://www.gnu­.org/software/m68hc11/
  61. GNU C for 68HC11 – documentation
    http://www.gnu­.org/software/m68hc11/m­68hc11_doc.html
  62. The P-Brain tm Microcontroller Kit
    http://www.fu­turebots.com/bra­in.htm
  63. Wikipedia: Motorola 68HC05
    http://en.wiki­pedia.org/wiki/Mo­torola_68HC05
  64. Wikipedia: Freescale 68HC08
    http://en.wiki­pedia.org/wiki/68HC08
  65. Wikipedia: Freescale 68HC11
    http://en.wiki­pedia.org/wiki/68HC11
  66. Wikipedia: Freescale 68HC12
    http://en.wiki­pedia.org/wiki/Fre­escale_68HC12
  67. HC05 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­98633
  68. HC08 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­97663
  69. Digital Core Design 68HC08 – HDL IP Core
    http://www.dcd­.pl/acore.php?id­core=82
  70. Freescale 68HC11
    http://www.fre­escale.com/we­bapp/sps/site/ta­xonomy.jsp?no­deId=016246844­98635
  71. Lifecycle of a CPU:
    http://www.cpushac­k.net/life-cycle-of-cpu.html
  72. Most wanted CPU of the world:
    http://www.cpu-galaxy.at/CPU/In­tel%20CPU/3002–8008/4004%20G­rey.jpg
  73. Wikipedia: 6502:
    http://en.wiki­pedia.org/wiki/6502
  74. The Western Design Center, Inc.:
    http://www.wes­terndesigncen­ter.com/
  75. Apple II History Home:
    http://apple2his­tory.org/
  76. www.6502.org:
    http://www.6502­.org/
  77. Stránky firmy Microchip Technology
    http://www.mi­crochip.com/
  78. 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
  79. Ř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
  80. Ř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
  81. Ř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
  82. Ř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
  83. Další výběr z různých modelů mikrořadičů PIC
    http://www.mi­crochip.com/map­s/microcontro­ller.aspx
  84. PIC microcontroller (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/PIC_mi­crocontroller
  85. Mikrokontrolér PIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Mi­krokontrolér_PIC
  86. FLASHFORTH for the PIC18F and the dsPIC30F
    http://flashf­orth.sourcefor­ge.net/
  87. FlashForth
    http://www.sou­rceforge.net/pro­jects/flashfor­th
  88. Free Pic software tools
    http://softwa­repic.50webs.com/fre­esoft.html
  89. What is Amicus?
    http://www.pic­basic.org/pro­ton_lite.php
  90. Amicus FAQ
    http://www.my­amicus.co.uk/faq­.php?s=2e8d12e7f4c23e775­776f4916876354b&
  91. Microcontrollers development tools
    http://www.gnu­pic.dds.nl/
  92. gpsim (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Gpsim
  93. gpsim home page
    http://gpsim.sou­rceforge.net/gpsim­.html
  94. The FreeRTOS Project
    http://www.fre­ertos.org/
  95. FreeRTOS (Wikipedia)
    http://en.wiki­pedia.org/wiki/Fre­eRTOS
  96. Serial EEPROM (93C46 / 93CS46) Routines
    http://www.pjrc­.com/tech/8051/se­rial-eeprom.html
  97. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko­.sasktelwebsi­te.net/cpu.html
  98. SPI interface tutorial
    http://www.best-microcontroller-projects.com/spi-interface.html
  99. Serial Peripheral Interface Bus
    http://en.wiki­pedia.org/wiki/Se­rial_Peripheral_In­terface_Bus
  100. EUSB to SPI bus Kit
    http://www.ei­dusa.com/Elec­tronics_Kits_E­USB_To_SPI_BUS­.htm
  101. SPI Block Guide V03.06, Freescale Semiconductor
    http://www.fre­escale.com/fi­les/microcontro­llers/doc/ref_ma­nual/S12SPIV3­.pdf
  102. What is SPI?
    http://www.fpga4fun­.com/SPI1.html
  103. SPI – A simple implementation
    http://www.fpga4fun­.com/SPI2.html
  104. Bit-banging
    http://en.wiki­pedia.org/wiki/Bit-banging
  105. Joint Test Action Group
    http://en.wiki­pedia.org/wiki/JTAG
  106. I2C
    http://en.wiki­pedia.org/wiki/I2C
  107. Seriál o programovacím jazyce Forth:
    seriál o programovacím jazyce Forth
  108. Display Data Channel
    http://en.wiki­pedia.org/wiki/Dis­play_Data_Chan­nel
  109. I2 Background
    http://www.mi­croport.tw/blog­new.php?blog_no­=7#theory
  110. PIC16F87X, 28/40-pin 8-Bit CMOS FLASH Microcontrollers
    Microchip Technology Inc.
    http://www.mi­crochip.com

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.