Obsah
1. Mikrořadiče a DSP společnosti Infineon: šestnáctibitové čipy C166 a XC166
3. Řada XC166 (Classic Series)
7. PSW – Processor Status Word
8. Podmínky používané při skocích
10. Instrukční soubor jader C166
11. Aritmetické a logické instrukce
12. Porovnání operandů, rotace a posuny
13. Bitové operace – Booleovský Processor
14. Podmíněné i nepodmíněné skoky, skoky do subrutin
15. Instrukce pro násobení a dělení
1. Mikrořadiče a DSP společnosti Infineon: šestnáctibitové čipy C166 a XC166
Minule jsme se seznámili s mikrořadiči řady XC800 vyráběnými společností Infineon. Připomeňme si, že tyto mikrořadiče jsou postaveny na osmibitovém jádru 8051, které je již v mnoha ohledech zastaralé, což se negativně projevuje zejména při snaze psát aplikace pro tyto mikrořadiče ve vyšších programovacích jazycích (typicky v céčku). Osmibitová jádra 8051 jsou či byla používána v mnoha firmách vyrábějících čipy. Mezi tyto firmy patří například Atmel, Infineon, NXP, Microchip, ST Microelectronic, TI, Analog Devices a dalších několik desítek (!) společností. Většina výrobců si uvědomovala zastaralost 8051 a proto není divu, že vznikly různé čipy, které měly tuto řadu nahradit. Nové čipy nabídly především vylepšenou instrukční sadu vhodnější pro použití vyšších programovacích jazyků; mnohé mikrořadiče navíc zvýšily šířku ALU a datových sběrnic na šestnáct bitů.
V tomto seriálu jsme se již zmiňovali o některých osmibitových alternativách k 8051. Kromě řady Motorola 68HC11 se jedná například o Atmel AVR (dnes populární mj. i díky Arduinu), H8, eZ8 či Rabbit (poslední dva čipy jsou založeny na Zilogu Z80). Nutno podotknout, že osmibitové mikrořadiče se v současnosti stále používají a v některých oblastech se s velkou pravděpodobností budou používat i nadále, protože pořád existují požadavky na sice málo výkonný, ale levný čip s malou spotřebou, který lze v případě potřeby doplnit o pomocné koprocesory (FOC apod.).
Logickým krokem při vývoji výkonnějších mikrořadičů je zvýšení šířky ALU, pracovních registrů a datových sběrnic z osmi na šestnáct bitů. I těmito čipy jsme se již zabývali (i když ne v plné šíři). Připomeňme si zejména řadu MSP 430 společnosti TI či čipy H8/300H vyráběné holdingem Renesas. Podobnou cestou, tj. zvětšením šířky ALU a pracovních registrů, se vydali inženýři ve formách ST Microelectronic a Infineon při vývoji šestnáctibitových mikrořadičových jader C166, na něž navázala zpětně kompatibilní jádra XC166.
2. Řada C166
Při návrhu mikrořadičových jader C166 si inženýři dobře uvědomovali, že pouhé rozšíření ALU a registrů z osmi na šestnáct bitů není dostačující. Pro efektivní práci se strojovým kódem vzniklým překladem z céčka je totiž důležité mít k dispozici větší sadu univerzálně použitelných pracovních registrů (8051 naproti tomu měla jen akumulátor, dalších osm registrů mělo jen omezené možnosti) a taktéž adresovací režimy korespondující s možnostmi céčka, tj. práci s poli, práci s offsety při použití struktur atd. (opět – možnosti 8051 jsou zde velmi omezené na použití šestnáctibitového registru DPTR, osmibitových registrů R0, R1 a akumulátoru ve funkci offsetového registru). Navíc se ukázalo, že v mnoha aplikacích je vhodné mít k dispozici násobičku a děličku o šířce alespoň šestnácti bitů, která ovšem u těchto typů mikrořadičů nemusí být tak rychlá, jako u klasických DSP (v nichž zabírala násobička velkou část čipu).
Při návrhu C166 již navíc byly k dispozici dobré i špatné zkušenosti s vývojem RISCových mikroprocesorů s instrukční pipeline, takže C166 mají pipeline se čtyřmi řezy a jejich instrukční sada se v některých ohledech podobá RISCovým procesorům, i když je nutné poznamenat, že se nejedná o čistý RISC s Load a Store architekturou. Na druhou stranu se návrháři C166 snažili zachovat dobré vlastnosti 8051, takže na těchto čipech nalezneme Booleovský procesor, dokonce oproti 8051 v několika ohledech vylepšený.
Většina mikrořadičových jader postavených nad C166 podporuje adresování až 16 MB paměti, výjimkou jsou jen některé čipy s adresovým rozsahem 256 KB (SAB 8XC166). Proto je nutné pro adresy vyhradit 24 (resp.18 u menších čipů) bitů.
3. Řada XC166 (Classic Series)
Společnost Infineon používá jádra C166 vylepšená o další funkce (několik nových instrukcí) a doplněná o různé rozšiřující moduly, které okolo těchto jader vytváří plnohodnotný mikrořadič. Řada XC166 nazývaná taktéž „Classic Series“ je založena na jádrech C166S V2, která mohou používat hodinovou frekvenci až 80 MHz a teoreticky tak dosahovat maximální výpočetní rychlosti 80 MIPS (reálně to však bude méně, zhruba 75% špičkové rychlosti, i když je většina instrukcí v sedmiřezové pipeline dokončena v jediném taktu). Kromě vlastního jádra je na mikrořadiči umístěna i jednotka MAC (Multiply & Accumulate), paměť RAM o typické kapacitě 24 KB až 82 KB (v závislosti na konkrétní verzi čipu), Flash paměť o kapacitě až 768 KB, modul pro PWM (pulsně-šířkovou modulaci), až šest modulů USIC a některé čipy mají i řadič pro CAN nebo MultiCAN. Zajímavé je, že je podporován ECC, a to jak pro SRAM, tak i pro paměť Flash, což je vlastnost více než vítaná (a patřičně drahá :-), především v průmyslových aplikacích.
4. Řada XC166H (High Line)
Poněkud výkonnější řada se jmenuje XC166H neboli „High Line“. Mikrořadičová jádra používají poněkud vyšší hodinovou frekvenci (až 100 MHz, tedy teoreticky výkon 100 MIPS), mají čtyři jednotky PWM používané například pro řízení motorů (včetně třífázových motorů), rychlé A/D převodníky (taktéž používané při řízení motorů), počet USIC se zvýšil na deset (tedy celkově dvacet kanálů!) a používají dvouvodičový JTAG (původně se používal klasický pětivodičový JTAG). I zde se můžeme setkat s použitím ECC jak pro SRAM, tak i pro paměť Flash.
5. Moduly USIC
V mikrořadičích Infineon řady XC166 se používají moduly USIC neboli Universal Serial Interface Channel. Každý z těchto modulů obsahuje dva konfigurovatelné kanály s totožnou strukturou. Tyto kanály lze použít pro napojení mikrořadiče na různé typy portů a sběrnic, včetně klasického UARTu, SPI a I2C. Každý USIC také může generovat vlastní hodinový signál pro řízení rychlosti přenosu dat (baudrate). Tento signál je nezávislý na dalších USIC, takže je možné jeden mikrořadič propojit s různě rychlými zařízeními po samostatných a oddělených SPI (navíc s volbou poloduplexního či plně duplexního režimu).
6. Sada pracovních registrů
Mikrořadiče C166 obsahují šestnáct pracovních registrů, z nichž každý má šířku šestnáct bitů. To je poměrně vysoký počet, a to i v porovnání s konkurencí, protože i když například MSP430 od TI má „papírově“ tentýž počet registrů, jsou čtyři z nich použity pro jiné účely (čítač instrukcí, ukazatel na vrchol zásobníku, stavový registr a generátor konstant). Zajímavé a užitečné je, že u C166 je možné k osmi registrům přistupovat i po bajtech. K pracovním registrům lze připočítat i dvojici registrů použitou pro násobení a dělení:
Registry | Šířka | Význam |
---|---|---|
R0..R15 | 16 bitů | šestnáct pracovních registrů (GPR) |
RL0..RL7 | 8 bitů | spodní bajty prvních osmi registrů R0..R7 |
RH0..RH7 | 8 bitů | horní bajty prvních osmi registrů R0..R7 |
MDH | 16 bitů | použit ve dvojici MDH:MDL při dělení 32÷16 bitů |
MDL | 16 bitů | použit jako dělenec při dělení 16÷16 bitů |
7. PSW – Processor Status Word
Stav procesoru je z velké části uložen v registru nazvaném PWD neboli Processor Status Word. Podobně jako další registry má i tento šířku šestnácti bitů a je rozdělen na několik bitových polí a na samostatné bitové příznaky (ty se nijak zvlášť neliší od dalších typů CPU a MCU):
Bit | Označení | Význam |
---|---|---|
0 | N | příznak záporného výsledku |
1 | C | příznak přenosu |
2 | V | příznak přetečení |
3 | Z | příznak nulovosti |
4 | E | výsledkem operace je nejmenší hodnota (0×80 či 0×8000) |
5 | MULIP | došlo k přerušení násobení či dělení (tyto operace lze přerušit během výpočtu) |
6 | USR0 | uživatelsky nastavitelný bit |
7 | × | |
8 | × | |
9 | × | |
10 | HLDEN | povolení externího řízení sběrnice jiným čipem přes signály BREQ, HOLD a HLDA |
11 | IEN | povolení či zákaz přerušení |
12 | ILVL | úroveň přerušení |
13 | ILVL | úroveň přerušení |
14 | ILVL | úroveň přerušení |
15 | ILVL | úroveň přerušení |
Nejvyšší čtyři bity definují jednu ze šestnácti úrovní přerušení.
Poznámka: k bitům 7 až 9 mohou mít na novějších čipech přiřazeny další funkce.
8. Podmínky používané při skocích
U instrukcí JMPA, JMPI, JMPR, CALLA, CALLI a CALLR, které jsou popsány ve čtrnácté kapitole je možné s využitím čtyř bitů specifikovat podmínku, při jejímž splnění se skok či volání subrutiny provede. Jedná se o následující podmínky (některé jsou zdvojeny, takže tabulka má více řádků). Neobvyklá je poslední podmínka, která používá příznak E a zjišťuje tak hodnoty MIN_INT:
Postfix | Testovaná podmínka | Význam |
---|---|---|
_UC | 1 == 1 | (instrukce je provedena vždy) |
_Z | Z == 1 | (alias pro _EQ) |
_NZ | Z == 0 | (alias pro _NE) |
_V | V == 1 | přetečení |
_NV | V == 0 | nedošlo k přetečení |
_N | N == 1 | operace skončila se záporným výsledkem |
_NN | N == 0 | výsledek je kladný nebo nulový |
_C | C == 1 | přenos |
_NC | C == 0 | nedošlo k přenosu |
_EQ | Z == 1 | (alias pro _Z) |
_NE | Z == 0 | (alias pro _NZ) |
_ULT | C == 1 | < bez znaménka (alias pro _C) |
_ULE | (Z ∨ C) == 1 | ≤ bez znaménka |
_UGE | C == 0 | ≥ bez znaménka (alias pro _NC) |
_UGT | (Z ∨ C) == 0 | > bez znaménka |
_SLT | (N ⊕ V) == 1 | < se znaménkem |
_SLE | (Z ∨ (N ⊕ V)) == 1 | ≤ se znaménkem |
_SGE | (N ⊕ V) == 0 | ≥ se znaménkem |
_SGT | (Z ∨ (N ⊕ V)) == 0 | > se znaménkem |
_NET | (Z ∨ E) == 0 | ≠ |
9. Adresovací režimy
Vzhledem k tomu, že registry používané pro adresování mají šířku jen šestnáct bitů a teoreticky je nutné adresovat až 224 bajtů v paměti, bylo nutné použít techniku známou z dalších mikrořadičů – fyzická adresa (ta se objeví na interní adresové sběrnici) je vypočtena součtem nějaké bázové adresy a offsetu.
Přímo v instrukcích se většinou specifikuje pouze šestnáctibitová adresa (obsah pracovního registru, konstanta atd.). Tato část je rozdělena na 14bitový offset a dvoubitový index, který vybírá jeden ze SFR nazvaných DPP0 až DPP3 (Data Page Pointer). Z těchto registrů se přečte spodních deset bitů (horních šest bitů se ignoruje), které společně vytvoří výslednou fyzickou adresu: [10bitů z DPPx] + [14bitů adresy z instrukce].
U skoků je situace odlišná, protože tam se namísto registrů DPPx používá registr nazvaný CSP (Code Segment Pointer). Ten lze změnit jen některými instrukcemi: JMPS, CALLS, RETS, RETI.
Při čtení či zápisu operandů je možné využít adresovací režimy zmíněné v následující tabulce. Povšimněte si, že každý pracovní registr může současně sloužit pro adresování, což (společně s režimy post-inkrementace a pre-dekrementace) umožňuje efektivní provádění mnoha céčkových konstrukcí:
Zápis | Adresovací režim |
---|---|
Rw | libovolný 16bitový pracovní registr R0..R15 |
Rb | libovolný osmibitový pracovní registr RL0..RL7, RH0..RH7 |
reg | speciální funkční registr 0×ff .. 0×ef |
bitaddr | použito při adresování bitů 0..15 na adresách 0×00 až 0×ff |
[Rw] | obsah adresy, na níž ukazuje zvolený GPR |
[Rw+] | obsah adresy, na níž ukazuje zvolený GPR, post-inkrement obsahu registru |
[-Rw] | obsah adresy, na níž ukazuje zvolený GPR, pre-dekrement obsahu registru |
[Rw+#data] | zvolit lze i šestnáctibitový offset |
#data3 | tříbitová konstanta (součástí instrukce) |
#data4 | čtyřbitová konstanta (součástí instrukce) |
#data8 | osmibitová konstanta |
#data16 | šestnáctibitová konstanta |
Poznámka: SFR = speciální funkční registr, GPR = pracovní registr.
10. Instrukční soubor jader C166
Instrukční soubor jader C166 obsahuje 75 instrukcí, v jádrech XC166 se jejich počet ještě nepatrně zvyšuje. V navazujících kapitolách jsou popsány všechny základní instrukce; prozatím jsou však vynechány instrukce určené pro přenosy dat a taktéž instrukce, které nejsou ve všech jádrech používány – ATOMIC, BFLDxxx a EXTxxx.
11. Aritmetické a logické instrukce
Sada základních aritmetických instrukcí se podobá nabídce známé z dalších typů mikrořadičů (kromě 8048, která neobsahuje instrukce rozdílu a 8051, která neobsahuje SUB ale jen SUBB). Zajímavé ovšem je, že všechny instrukce existují v šestnáctibitové i osmibitové variantě:
Instrukce | Varianta | Stručný popis |
---|---|---|
ADD | ADDB | součet |
ADDC | ADDCB | součet + carry |
SUB | SUBB | rozdíl |
SUBC | SUBC | rozdíl – carry |
CPL | CPLB | jedničkový doplněk (negace) |
NEG | NEGB | dvojkový doplněk (změna znaménka) |
Poznámka: tyto instrukce nastavují příznaky N, Z, V, C i E.
Podobně je tomu u logických instrukcí, které se provádí bit po bitu; opět buď pro šestnáctibitové operandy nebo i pro operandy osmibitové. Instrukce nastavují příznaky N, Z a E podle výsledku, zatímco příznaky V a C jsou vynulovány:
Instrukce | Varianta | Stručný popis |
---|---|---|
AND | ANDB | logický součin |
OR | ORB | logický součet |
XOR | XORB | logická nonekvivalence |
SUBC | SUBC | rozdíl – carry |
Poznámka: instrukce pro násobení a dělení jsou prováděny mimo hlavní aritmeticko-logickou jednotku a proto jsou popsány v samostatné kapitole.
12. Porovnání operandů, rotace a posuny
Zajímavá je sada instrukcí určených pro porovnání dvou operandů. Kromě běžné instrukce CMP jsou podporovány i instrukce, které po porovnání zvýší či sníží obsah prvního operandu (registru) o jedničku či dvojku. Tímto operandem je vždy nějaký šestnáctibitový pracovní registr. Pravděpodobně jste již uhodli, k čemu se tyto instrukce používají – jde o implementaci různých typů počítaných programových smyček (procesor naproti tomu nemá instrukci typu DJNZ či CJNE):
Instrukce | Varianta | Stručný popis |
---|---|---|
CMP | CMPB | porovnání dvou operandů a nastavení příznaků |
CMPD1 | × | porovnání + snížení obsahu registru o 1 |
CMPD2 | × | porovnání + snížení obsahu registru o 2 |
CMPI1 | × | porovnání + zvýšení obsahu registru o 1 |
CMPI2 | × | porovnání + zvýšení obsahu registru o 2 |
Dalších pět instrukcí opět pracuje se šestnáctibitovými pracovními registry a umožňuje jejich rotaci, logický posun či aritmetický posun. I přesto, že druhý operand může teoreticky obsahovat jakoukoli hodnotu, je rotace/posun provedena maximálně o patnáct bitů (vyšší hodnoty se maskují 0×0f, resp. se jejich vyšší bity úspěšně ignorují):
Instrukce | Varianta | Stručný popis |
---|---|---|
SHL | × | bitový posun doleva (0..15) |
SHR | × | bitový posun doprava (0..15) |
ROL | × | rotace doleva (0..15) |
ROR | × | rotace doprava (0..15) |
ASHR | × | aritmetický posun doprava |
13. Bitové operace – Booleovský Processor
V oblasti mikrořadičů se již od dob čipu Intel 8051 (MCS-51) můžeme setkat s implementací takzvaného Booleovského procesoru. Tímto poněkud nadneseným jménem se označuje sada instrukcí, které dokážou pracovat na úrovni jednotlivých bitů a nikoli celých slov, a to (většinou) dokonce takovým způsobem, že i přístup do paměti či do řídicích registrů periferních zařízení je prováděn po jednom bitu (například negace jediného bitu je rozdílná operace od přečtení bajtu/slova do akumulátoru, negace vybraného bitu a zápis celého bajtu/slova zpět). Jen pro zajímavost: na již zmíněném mikrořadiči MCS-51 je implementován úplný Booleovský procesor s jednobitovým akumulátorem (tím je příznak C/carry), 128 bitovou oblastí RAM a 128 bitovou oblastí speciálních řídicích registrů (SFR). Tento Booleovský procesor měl k dispozici sedmnáct instrukcí.
U čipů C166 se jedná o osm instrukcí doplněných o čtyři podmíněné skoky popsané v další kapitole:
Instrukce | Stručný popis |
---|---|
BCLR | vynulování bitu |
BSET | nastavení bitu na jedničku |
BMOV | přenos bitu |
BMOVN | přenos bitu s jeho negací |
BCMP | porovnání dvou bitů |
BAND | operace AND se dvěma bity |
BOR | operace OR se dvěma bity |
BXOR | operace XOR se dvěma bity |
Poznámka: instrukce BCLR a BSET obsahují index nulovaného či naopak nastavovaného bitu přímo v operačním kódu instrukce. Vzhledem k tomu, že lze vybírat ze šestnácti bitů, znamená to, že BCLR zabírá celých 16 instrukčních kódů z 256 a totéž platí i pro BSET (tímto odstavcem jsme si tedy popsali celých 12,5% všech instrukčních kódů :-).
Poznámka2: ostatních šest instrukcí má délku čtyř bajtů, protože je nutné zakódovat typ instrukce (jeden bajt), zdrojový operand (jeden bajt), cílový operand (taktéž jeden bajt) a následně 4+4 bity reprezentující indexy bitů ve zdrojovém a v cílovém operandu.
14. Podmíněné i nepodmíněné skoky, skoky do subrutin
V této sekci se nejdříve zmíníme o podmíněných i nepodmíněných skocích. Pro jejich implementaci lze použít čtyři instrukce, přičemž pouze v poslední instrukci JMPS není možné použít podmínku. Naopak se jedná o jedinou instrukci umožňující skok do jiného segmentu:
Instrukce | Stručný popis |
---|---|
JMPA | absolutní skok při splnění podmínky |
JMPI | nepřímý skok při splnění podmínky |
JMPR | relativní skok při splnění podmínky |
JMPS | absolutní skok do vybraného segmentu (bez podmínky) |
Následují čtyři instrukce doplňující výše popsaný Booleovský procesor. Jedná se o skoky vykonané ve chvíli, kdy je zvolený bit nastaven na jedničku popř. na nulu. Poslední dvě instrukce navíc dokážou hodnotu testovaného bitu znegovat:
Instrukce | Stručný popis |
---|---|
JB | relativní skok za podmínky, že je bit nastaven na 1 |
JNB | relativní skok za podmínky, že je bit vynulován |
JBC | relativní skok za podmínky, že je bit nastaven a vynulování bitu |
JNBS | relativní skok za podmínky, že je bit vynulován a nastavení bitu |
Další sada instrukcí slouží pro skok do subrutin (podprogramů) a návrat z nich. První čtyři instrukce odpovídají již popsaným skokům, ovšem návratová adresa je uložena na zásobník:
Instrukce | Stručný popis |
---|---|
CALLA | zavolání subrutiny při splnění podmínky |
CALLI | nepřímé volání subrutiny při splnění podmínky |
CALLR | relativní volání subrutiny při splnění podmínky |
CALLS | |
PCALL | uložení registru na zásobník a zavolání subrutiny |
RET | návrat ze subrutiny (stejný segment) |
RETS | návrat ze subrutiny (jiný segment) |
RETP | návrat ze subrutiny a obnovení registru |
RETI | návrat z přerušovací rutiny |
15. Instrukce pro násobení a dělení
Samostatnou skupinu tvoří instrukce určené pro násobení a dělení. U těchto instrukcí se operandy ukládají jak do běžných pracovních registrů, tak i do dvou již zmíněných speciálních funkčních registrů nazvaných MDH a MDL. Tyto registry tvoří dvojici MDH:MDL a slouží například pro uložení dělence při dělení 32÷16 bitů. Násobička a dělička podporuje těchto šest instrukcí:
Instrukce | Typ operandů | Stručný popis |
---|---|---|
MUL | se znaménkem | násobení 16×16 bitů |
MULU | bez znaménka | násobení 16×16 bitů |
DIV | se znaménkem | dělení 16÷16 bitů |
DIVU | bez znaménka | dělení 16÷16 bitů |
DIVL | se znaménkem | dělení 32÷16 bitů |
DIVLU | bez znaménka | dělení 32÷16 bitů |
Poznámka: tyto instrukce lze přerušit, což se projeví nastavením příznaku MULIP v PSW. Důvod je zřejmý – u mikrořadičů požadujeme rychlou reakci na přerušení, takže je výhodnější nečekat vždy na dokončení těchto dlouhotrvajících instrukcí.
16. Odkazy na Internetu
- Bus mastering
https://en.wikipedia.org/wiki/Bus_mastering - ST10 16-bit MCUs
http://www.st.com/en/microcontrollers/st10–16-bit-mcus.html?querycriteria=productId=LN1111 - XC800 family
https://en.wikipedia.org/wiki/XC800_family - C166 (stránky společnosti Infineon)
https://www.infineon.com/cms/en/product/microcontroller/16-bit-c166-microcontroller/channel.html?channel=ff80808112ab681d0112ab6b2eaf0759#ispnTab3 - C166 Family
https://en.wikipedia.org/wiki/C166_family - Permanent Magnet Synchronous Motor
https://en.wikipedia.org/wiki/Synchronous_motor#Permanent_magnet_motors - Implementing field oriented control of a brushless DC motor
http://www.eetimes.com/document.asp?doc_id=1279321 - Vector control (motor)
https://en.wikipedia.org/wiki/Vector_control_(motor) - 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