Obsah
1. Instrukční soubor digitálních signálových procesorů řady Motorola 56000
3. Programový čítač a zásobník návratových adres
4. Speciální registry používané pro implementaci programových smyček
5. Registr s příznakovými bity
6. AGU a registry používané pro adresování operandů
8. Instrukční soubor DSP Motorola 56000
11. Manipulace s jednotlivými bity
12. Instrukce pro programové smyčky
1. Instrukční soubor digitálních signálových procesorů řady Motorola 56000
Na popis interní struktury a základních funkčních modulů digitálního signálového procesoru Motorola 56000 dnes navážeme, protože se budeme zabývat instrukčním souborem tohoto úspěšného a doposud používaného čipu. Nejdříve se však budeme muset zmínit o některých dalších funkčních blocích Motoroly 56000, protože právě tyto bloky slouží pro řízení celého čipu a mají tedy velký vliv na to, jak vlastně vypadá instrukční sada a jaké instrukce a adresovací režimy může obsahovat.
Podívejme se na blokové schéma DSP Motorola 56000:
Obrázek 1: Blokové schéma digitálního signálového procesoru Motorola 56000.
Stejný obrázek jsme si ukazovali již minule, ovšem to jsme se zajímali především o sběrnice (čtyři vodorovné šipky umístěné přibližně uprostřed), trojici paměťových bloků (vpravo nahoře) a taktéž o aritmeticko-logickou jednotku a násobičku (vpravo dole). Dnes si popíšeme bloky PCU (Program Control Unit, zobrazený vlevo dole) a AGU (Address Generation Unit, umístěn nad sběrnicemi), které vlastně zabezpečují funkci řadiče celého procesoru.
2. PCU a AGU
Bloky (či moduly) PCU a AGU mají následující význam:
- Program Control Unit neboli PCU je modul, který se primárně stará o vytváření adres instrukcí posílaných na sběrnici PDB, o níž jsme se již zmínili minule. Když se zamyslíme nad tím, jak se (i na běžných mikroprocesorech) generují adresy instrukcí, velmi přesně odhadneme, co tento modul obsahuje. V první řadě je to programový čítač (PC), dále zásobník návratových adres, ale i registr s příznakovými bity, protože u podmíněných skoků záleží generování adresy další instrukce právě na kombinaci příznaků. Nalezneme zde i další registry sloužící pro implementaci programových smyček.
- Address Generation Unit neboli AGU je taktéž modul určený primárně pro generování adres, ovšem v tomto případě se jedná o adresy operandů uložených v paměťovém bloku X či Y a posílaných přes sběrnice XDB a YDB. Adresování operandů se v mnoha ohledech odlišuje od adresování instrukcí, protože v oblasti DSP potřebujeme používat „kruhové adresování“ (filtr omezené délky) či speciální adresování pro rychlou Fourierovu transformaci.
3. Programový čítač a zásobník návratových adres
Nejprve si ve stručnosti popíšeme blok PCU (Program Control Unit). Tento blok je propojen s adresovými sběrnicemi PAB a PDB i s univerzální sběrnicí GDB. Dále do tohoto bloku vstupují další důležité signály, především hodiny a několik signálů oznamujících přerušení. Navíc tento blok obsahuje vlastní řídicí logiku a několik speciálních registrů. Základem prakticky každého procesoru je PC neboli programový čítač (Program Counter). Ten má v případě Motoroly 56000 šířku šestnácti bitů, což omezuje maximální velikost programového kódu. Z hlediska programátora se však jedná o 24bitový registr, neboť při přenosu dat se používají operandy o plné šířce 24 bitů (horních osm bitů je však v PCU ignorováno, což zaručuje dopřednou kompatibilitu, při čtení těchto osm bitů obsahuje nuly).
Kromě programového čítače nalezneme v tomto bloku i sadu patnácti registrů tvořících zásobník návratových adres. Toto označení však ve skutečnosti není příliš přesné, protože každý z těchto registrů má šířku 32 bitů a obsahuje kromě šestnáctibitové návratové adresy i hodnotu příznaků ve chvíli, kdy došlo k uložení informace do zásobníku. Jedná se vlastně o velmi elegantní řešení přerušovacích rutin, v nichž je uložení příznaků a na konci jejich obnovení provedeno „zadarmo“. Se zásobníkem souvisí i další speciální registr nazvaný SP ukazující na vrchol zásobníku (Stack Pointer). S tímto registrem se většinou pracuje pouze nepřímo.
4. Speciální registry používané pro implementaci programových smyček
V bloku PCU nalezneme i dva speciální registry určené pro efektivní implementaci programových smyček; typicky smyček tvořících jádra číslicových filtrů. Tyto dva registry se jmenují LA a LC. Registr LA obsahuje adresu poslední instrukce tvořící programovou smyčku (adresa první instrukce je přitom ukládána na zásobník) zatímco registr LC obsahuje počet opakování smyčky. K této dvojici registrů ještě musíme připočítat příznak nazvaný LF (Loop Flag), který je automaticky nastavován při vstupu do programové smyčky instrukcí DO. Ve chvíli, kdy je tento příznak nastaven, kontroluje PCU, zda se hodnota programového čítače rovná obsahu registru LA. Pokud dojde ke shodě, tj. nacházíme se na poslední instrukci ve smyčce, je otestováno počitadlo LC na jedničku. V případě, že LC!=1, je hodnota LC snížena a PC je nastaven na adresu přečtenu ze zásobníku (tj. provede se skok na začátek smyčky). Dokonce je možné smyčky vnořovat – PCU v tomto případě nejdříve uloží všechny potřebné registry na zásobník.
5. Registr s příznakovými bity
Jak jsme si již řekli ve druhé kapitole, obsahuje modul PCU i registr s příznakovými bity. Tento šestnáctibitový registr je rozdělen na dvě části nazvané MR (Mode Register) a CCR (Condition Code Register) tak, jak naznačuje následující tabulka:
Bit | Část | Označení | Název | Stručný popis |
---|---|---|---|---|
0 | CCR | C | Carry | příznak přenosu při aritmetické operaci |
1 | CCR | V | Overflow | příznak přetečení při aritmetické operaci |
2 | CCR | Z | Zero | příznak nulového výsledku |
3 | CCR | N | Negative | příznak záporného výsledku |
4 | CCR | U | Unnormalized | nenormalizovaný výsledek poslední operace |
5 | CCR | E | Extension | výsledek poslední operace nepřekročil binární tečku |
6 | CCR | L | Limit | překročení maximální či minimální hodnoty (8 bitů před tečkou) |
7 | CCR | S | Scaling | typicky použito při výpočtu FFT |
8 | MR | I0 | Interrupt mask | maska přerušení |
9 | MR | I1 | Interrupt mask | maska přerušení |
10 | MR | S0 | Scaling mode | režim změny měřítka (viz další tabulka) |
11 | MR | S1 | Scaling mode | režim změny měřítka (viz další tabulka) |
12 | MR | * | Reserved | rezervováno |
13 | MR | T | Trace mode | režim ladění |
14 | MR | DM | Double precision | volba režimu násobení |
15 | MR | LF | Loop Flag | provádí se programová smyčka (viz předchozí kapitolu) |
Bity S0 a S1 ovlivňují konverzi hodnot shifterem při ukládání akumulátorů zpět do paměti (na čtvrtém obrázku se jedná o dolní shifter):
S1 | S0 | Operace |
---|---|---|
0 | 0 | hodnoty se jen zkopírují |
0 | 1 | scale down, posun doprava o jeden bit |
1 | 0 | scale up, posun doleva o jeden bit |
1 | 1 | prozatím rezervováno |
Obrázek 2: Akumulátory (zvýrazněné modrou barvou) jsou připojeny k výstupu z aritmeticko-logické jednotky. Dále je možné do akumulátorů zapisovat data přímo z datových sběrnic. Z akumulátorů si operandy čte ALU, a to jak přímo, tak i přes shifter. Zápis zpět do paměti se provádí vždy přes shifter/limiter, který zajistí konverzi dat podle nastavení bitů S0 a S1.
6. AGU a registry používané pro adresování operandů
Druhým důležitým blokem ovlivňujícím instrukční sadu digitálních signálových procesorů Motorola 56000 je blok pojmenovaný Address Generation Unit neboli AGU. Tento blok slouží pro tvorbu adres použitých pro čtení vstupních operandů popř. pro zápis výsledků vypočtených v násobičce a aritmeticko-logické jednotce. Pro tyto účely obsahuje AGU vlastní sadu dvaceti čtyř registrů, které se na tvorbě adres podílí (designéři 56000 evidentně na registrech nešetřili, což ostatně souvisí se zaměřením tohoto DSP na co nejlepší využití ALU a násobičky). Všechny tyto registry, které jsou rozděleny do dvou samostatně pracujících skupin, jsou vypsány v následující tabulce:
Ukazatele | Offsety | Modifikátory |
---|---|---|
R0 | N0 | M0 |
R1 | N1 | M1 |
R2 | N2 | M2 |
R3 | N3 | M3 |
R4 | N4 | M4 |
R5 | N5 | M5 |
R6 | N6 | M6 |
R7 | N7 | M7 |
Všechny zmíněné registry mají šířku šestnáct bitů, z čehož opět vyplývají omezení na maximální kapacitu paměti, tentokrát paměti datové (ta je ovšem rozdělena na dva bloky a šířka dat je 24 bitů, takže se nejedná o omezení na pouhých 64 KB, ale na šestinásobek). U některých adresovacích režimů je nutné vybrat pouze ukazatel, tedy registr Rn. Registr s offsetem bude v takovém případě mít jméno Nn a modifikátor bude mít jméno Mn, přičemž n bude vždy stejná hodnota. Význam jednotlivých registrů lze shrnout takto:
- Registry R0 až R7 obsahují adresu zdrojového či cílového operandu. Tyto registry mohou být v závislosti na použitém adresovacím režimu automaticky modifikovány (adresu v nich uloženou lze zvýšit či naopak snížit, a to v rámci jediné instrukce).
- Registry N0 až N7 obsahují konstantu, o kterou se ve vybraných adresovacích režimech zvýší či sníží hodnota uložená v adresních registrech R0 až R7. Kromě toho lze vždy použít konstantu 1 či –1 (inkrementace, dekrementace). Tyto registry taktéž slouží jako běžné offsetové registry (viz navazující kapitolu).
- Registry M0 až M7 obsahují konstantu použitou v těch případech, kdy je vyžadováno použití cyklického adresování, například při použití jader číslicových filtrů nebo při implementaci fronty (FIFO). Opět platí, že obsah těchto registrů je použit jen v některých adresovacích režimech.
7. Adresovací režimy
V assembleru digitálních signálových procesorů Motorola 56000 je možné použít následující adresní režimy určené pro čtení operandů z vybraného paměťového bloku (X, Y) či naopak pro zápis výsledku zpět. Pro jednoduchost si jejich použití ukážeme na instrukci MOVE určené pro přenosy dat:
Instrukce | Význam |
---|---|
MOVE A0, X:$1234 | absolutní adresa v paměťovém bloku X |
MOVE A0, X:(R7) | efektivní adresa je uložena v R7, paměťový blok X |
MOVE B0, X:(R6) | efektivní adresa je uložena v R6, paměťový blok X |
MOVE A1, X:(R6) | efektivní adresa je uložena v R5, paměťový blok X |
MOVE B1, X:(R5) | efektivní adresa je uložena v R4, paměťový blok X |
MOVE A0, Y:(R0) | efektivní adresa je uložena v R0, paměťový blok Y |
MOVE A1, Y:(R0) | efektivní adresa je uložena v R0, paměťový blok Y |
MOVE A1, Y:(R0)+ | dtto, ale registr R0 se po zápisu zvýší o jedničku (postincrement) |
MOVE A1, Y:(R0)- | dtto, ale registr R0 se po zápisu sníží o jedničku (postdecrement) |
MOVE A1, Y:-(R0) | dtto, ale registr R0 se před zápisem sníží o jedničku (predecrement) |
MOVE A1, Y:(R0)+N0 | dtto, ale registr R0 se po zápisu zvýší o hodnotu uloženou v registru N0 |
MOVE A1, Y:(R0)-N0 | dtto, ale registr R0 se po zápisu sníží o hodnotu uloženou v registru N0 |
MOVE A1, Y:(R5+N5) | efektivní adresa je vypočtena součtem R5+N5 (běžná funkce offsetového registru) |
U těch režimů, v nichž se modifikuje adresa uložená v registru Rn, je možné použít „modulo“ registr Mn, jehož obsah má tento význam:
Mn= | Význam |
---|---|
0×ffff | normální (lineární) adresování |
0×0001 až 0×7fff | adresování modulo (modulo 2 až modulo 32768, hodnota „modulo“ je tedy o jedničku vyšší) |
0×0000 | „reverse carry“ adresování, carry bit je propagován od horních bitů adresy k bitům spodním, lze použít pro FFT atd. |
0×8000 až 0×fffe | (jen sudé hodnoty), rezervováno |
0×8001 až 0×fffd | (jen liché hodnoty), taktéž adresování modulo |
8. Instrukční soubor DSP Motorola 56000
V následujících šesti kapitolách si stručně popíšeme celý instrukční soubor digitálního signálového procesoru Motorola 56000. Instrukce se rozdělují do šesti skupin:
Aritmetické instrukce |
Logické instrukce |
Manipulace s jednotlivými bity |
Instrukce pro programové smyčky |
Řízení běhu programu |
Instrukce pro přenosy dat |
9. Aritmetické instrukce
Aritmetické instrukce mohou být kombinovány s přenosem dat po jedné z datových sběrnic, což znamená, že v průběhu výpočtu je možné si předpřipravit operandy pro další instrukci. Aritmetické instrukce mohou ovlivnit příznakové bity CCR (Carry, Zero atd.) a všechny instrukce jsou prováděny v násobičce, sčítačce a paralelně běžící ALU:
Obrázek 3: Struktura ALU (žluté bloky + zelená sčítačka).
Následuje seznam aritmetických instrukcí:
Instrukce | Stručný popis |
---|---|
ABS | absolutní hodnota operandu |
ADC | součet s carry |
ADD | součet |
ADDL | bitový posun doleva a součet |
ADDR | bitový posun doprava a součet |
ASL | aritmetický posun doleva |
ASR | aritmetický posun doprava |
CLR | vynulování operandu |
CMP | porovnání |
CMPM | porovnání |
DEC | snížení operandu o jedničku |
DIV | dělení (jen jedna iterace, je nutné opakovat podle požadované přesnosti) |
INC | zvýšení operandu o jedničku |
MAC | operace multiply-accumulate |
MACR | operace multiply-accumulate se zaokrouhlením |
MPY | násobení |
MPYR | násobení se zaokrouhlením |
NEG | negace akumulátoru |
NORM | normalizace operandu |
RND | zaokrouhlení |
SBC | rozdíl s carry |
SUB | rozdíl |
SUBL | bitový posun doleva a rozdíl |
SUBR | bitový posun doprava a rozdíl |
Tcc | přenos (při splněné podmínce) |
TFR | jen přenos dat |
TST | test akumulátoru a nastavení příznaků |
10. Logické instrukce
Taktéž logické instrukce se provádí v datové ALU a mohou nastavit (měnit) příznakové bity. Jedinou výjimku tvoří poslední dvě instrukce, které slouží pro provedení logické operace mezi konstantou a řídicím registrem:
Instrukce | Stručný popis |
---|---|
NOT | bitová negace |
AND | logický součin |
OR | logický součet |
EOR | logická noekvivalence |
ROL | rotace operandu doleva |
ROR | rotace operandu doprava |
LSL | logický posun doleva |
LSR | logický posun doprava |
ANDI | logický součin mezi konstantou a řídicím regisrem |
ORI | logický součet mezi konstantou a řídicím regisrem |
11. Manipulace s jednotlivými bity
Další čtyři instrukce slouží pro otestování aktuální hodnoty vybraného bitu v paměti nebo registru a popř. pro vynulování, nastavení či inverzi tohoto bitu. Výsledek testu je uložen do příznakového bitu Carry ve stavovém registru, takže ho lze ihned použít, například pro provedení podmíněného skoku apod.:
Instrukce | Stručný popis |
---|---|
BTST | jen test bitu |
BCLR | test bitu + jeho následné vynulování |
BSET | test bitu + jeho následné nastavení na jedničku |
BCHG | test bitu + jeho následná inverze |
Poznámka: ještě sem logicky patří instrukce JCLR a JSET popsané dále.
12. Instrukce pro programové smyčky
Jedná se o nejzajímavější skupinu instrukcí optimalizovaných pro implementaci počítaných programových smyček:
Instrukce | Stručný popis |
---|---|
DO | začátek programové smyčky |
ENDDO | explicitní opuštění smyčky (nahrazuje BREAK) |
Způsob zápisu smyčky:
DO #počet_opakování, návěští_poslední_instrukce
Popř.:
DO registr_obsahující_počet_opakování, návěští_poslední_instrukce
Instrukce DO provede následující kroky (většinu paralelně):
- Registry LA a LC jsou uloženy na zásobník (smyčky lze vnořovat).
- Do registru LC se uloží počet opakování smyčky.
- Aktuální hodnota PC (začátek smyčky) se uloží na zásobník společně se stavovým registrem.
- Do registru LA se uloží adresa konce smyčky.
- Nastaví se příznakový bit LF ve stavovém registru.
Způsob zápisu vnořených smyček:
DO #1234, END_LOOP_1 ... ... ... DO #5678, END_LOOP_2 ... ... ... END_LOOP_2: ... ... ... ... END_LOOP_1: ...
13. Řízení běhu programu
Zbývající skupina instrukcí slouží pro řízení běhu programu a taktéž pro přepínání stavu mikroprocesoru (ladicí režim, režim nízké spotřeby atd.):
Instrukce | Stručný popis |
---|---|
JMP | nepodmíněný skok |
Jcc | podmíněný skok |
JCLR | skok pokud je vybraný bit nulový |
JSET | skok pokud je vybraný bit nastavený na jedničku |
JSR | skok do podprogramu |
JScc | kombinace Jcc + JSR |
JSCLR | kombinace JCLR + JSR |
JSSET | kombinace JSET + JSR |
RTS | návrat z podprogramu |
RTI | návrat z přerušovací rutiny |
DEBUG | vstup do ladicího režimu |
DEBUGcc | vstup do ladicího režimu při splnění podmínky |
NOP | prázdná operace |
REP | opakování další instrukce |
RESET | reset periferních zařízení |
SWI | softwarové přerušení |
STOP | přepnutí do stavu snížené spotřeby |
WAIT | čekání na přerušení ve stavu snížené spotřeby |
14. Přenosy dat
Pro veškeré přenosy zpracovávaných dat (nikoli instrukčních kódů) se používají sběrnice XDB, YDB a GDB, které jsme si již popsali minule. S instrukcí MOVE jsme se již seznámili v kapitole o adresování, ovšem existují i další instrukce určené pro přenosy dat mezi pamětí a různými typy registrů. Instrukce přenášející data z akumulátorů mohou nastavit příznakové bity S a L:
Instrukce | Stručný popis |
---|---|
LUA | načtení a úprava adresy, odpovídá instrukci LEA z jiných typů mikroprocesorů |
MOVE | přenos mezi datovými registry (včetně akumulátorů) |
MOVEC | přenos mezi řídicími registry |
MOVEM | přenos z paměti programu či do paměti programu (pokud se nejedná o boot blok) |
MOVEP | přenos dat z/do periferních zařízení |
Poznámka: přenosy mohou být součástí běžných aritmetických instrukcí, potom se provádí paralelně:
ADD X0,A X0, X:(R3)+
Tento zápis znamená paralelní provedení těchto kroků:
- součet X0+A
- uložení výsledku do akumulátoru A
- přenos registru X0 do paměťového regionu X na adresu R3
- Registr R3 je zvýšen o jedničku (po uložení X0)
Povšimněte si, že se zde používají tři různé typy registrů: X0 je umístěn před násobičkou, A je akumulátor a R3 je adresový registr.
15. Odkazy na Internetu
- Motorola DSP56k
https://www.rockbox.org/wiki/MotorolaDSP56k - Motorola 56000 (Wikipedia)
http://en.wikipedia.org/wiki/Motorola_56000 - Using the Motorola DSP56002EVM for Amateur Radio DSP Projects
http://www.johanforrer.net/EVM/article.html - The Atari Falcon030 „Personal Integrated Media System“
http://www.atarimuseum.com/computers/16bits/falcon030.html - Turtle Beach Corporation (stránky společnosti)
http://www.turtlebeach.com/ - Turtle Beach Corporation (Wikipedia)
https://en.wikipedia.org/wiki/Turtle_Beach_Corporation - Atari Falcon 030 DSP 3D engine test
http://www.digiti.info/video/WHQwMjNRaExfLWs=/atari_falcon030_dsp_3d_engine_test - Atari Falcon030 (německy)
http://www.maedicke.de/atari/hardware/falcon.htm - Old-computers.com: Atari Falcon030
http://www.old-computers.com/museum/computer.asp?c=125&st=1 - Atari Falcon030 (Wikipedia)
http://en.wikipedia.org/wiki/Atari_Falcon - Past and current projects (including Falcon stuff)
http://os.inf.tu-dresden.de/~nf2/projects/projects.html - Atari Falcon 030: The Case For The Defence
http://www.soundonsound.com/sos/1994_articles/sep94/atarifalcon.html - DaVinci processor family
http://www.ti.com/general/docs/datasheetdiagram.tsp?genericPartNumber=TMS320DM365&diagramId=64193 - Texas Instruments DaVinci
https://en.wikipedia.org/wiki/Texas_Instruments_DaVinci - TMS320DM6446 (DaVinci)
http://www.ti.com/product/tms320dm6446 - Digital Media Video Processors (TI)
http://www.ti.com/lsds/ti/processors/dsp/media_processors/davinci/products.page# - TI Wiki
http://processors.wiki.ti.com/index.php/Main_Page - C5000 ultra-low-power DSP
http://www.ti.com/lsds/ti/processors/dsp/c5000_dsp/overview.page - OMAP (Wikipedia)
https://en.wikipedia.org/wiki/OMAP - OMAP – TI Wiki
http://processors.wiki.ti.com/index.php/OMAP - Why OMAP can't compete in smartphones
http://www.eetimes.com/author.asp?section_id=40&doc_id=1286602 - Applications Processors – The Heart of the Smartphone
http://www.engineering.com/ElectronicsDesign/ElectronicsDesignArticles/ArticleID/5791/Applications-Processors-The-Heart-of-the-Smartphone.aspx - TI cuts 1,700 jobs in OMAP shift
http://www.eetimes.com/document.asp?doc_id=1262782 - VLIW: Very Long Instruction Word: Texas Instruments TMS320C6×
http://www.ecs.umass.edu/ece/koren/architecture/VLIW/2/ti1.html - An Introduction To Very-Long Instruction Word (VLIW) Computer Architecture
Philips Semiconductors - VLIW Architectures for DSP: A Two-Part Lecture (PDF, slajdy)
http://www.bdti.com/MyBDTI/pubs/vliw_icspat99.pdf - Very long instruction word (Wikipedia)
https://en.wikipedia.org/wiki/Very_long_instruction_word - A VLIW Approach to Architecture, Compilers and Tools
http://www.vliw.org/book/ - VEX Toolchain (VEX = VLIW Example)
http://www.hpl.hp.com/downloads/vex/ - Elbrus (computer)
https://en.wikipedia.org/wiki/Elbrus_%28computer%29 - Super Harvard Architecture Single-Chip Computer
https://en.wikipedia.org/wiki/Super_Harvard_Architecture_Single-Chip_Computer - Digital Signal Processors (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/overview.page - C674× Low Power DSP (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/c6000_dsp/c674×/overview.page - TMS320C30 (stránky TI)
http://www.ti.com/product/tms320c30 - TMS320C6722B
http://www.ti.com/product/tms320c6722b/description - Introduction to DSP
http://www.ti.com/lit/wp/spry281/spry281.pdf - The Evolution of TMS (Family of DSPs)
http://www.slideshare.net/moto_modx/theevo1 - Datasheet k TMS32010
http://www.datasheetarchive.com/dlmain/49326c32a52050140abffe6f0ac4894aa09889/M/TMS32010 - 1979: Single Chip Digital Signal Processor Introduced
http://www.computerhistory.org/siliconengine/single-chip-digital-signal-processor-introduced/ - The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
http://www.tihaa.org/historian/TMS32010–12.pdf - Texas Instruments TMS320 (Wikipedia)
https://en.wikipedia.org/wiki/Texas_Instruments_TMS320 - 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 - Great Microprocessors of the Past and Present (V 13.4.0)
http://jbayko.sasktelwebsite.net/cpu.html - 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/ - Č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/ - 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/ - 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/ - Addressing mode (Wikipedia)
https://en.wikipedia.org/wiki/Addressing_mode - Orthogonal instruction set
https://en.wikipedia.org/wiki/Orthogonal_instruction_set - TI 16-bit and 32-bit microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/overview.page - TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423 - COSC2425: PC Architecture and Machine Language, PC Assembly Language
http://www.austincc.edu/rblack/courses/COSC2425/index.html