Obsah
1. Mikrořadiče a DSP společnosti Infineon – vylepšená šestnáctibitová jádra C166S V2
2. Centrální procesorová jednotka: ALU, MAC a ADU
5. Predikce skoků a nápověda předaná překladačem či uživatelem
6. Rozšíření sady pracovních registrů, mapování registrů do paměti
7. Rozšíření registru PSW (Program Status Word)
8. Paměťový prostor větší než 64kB
9. Rozdělení programové paměti na segmenty
11. Obejití funkce stránkových registrů DPP instrukcemi EXT??
13. Nové adresovací režimy pro DSP operace
1. Mikrořadiče a DSP společnosti Infineon – vylepšená šestnáctibitová jádra C166S V2
Původní šestnáctibitová mikrořadičová jádra C166, s nimiž jsme se seznámili v předchozím článku, sice nabízela dostatečný výpočetní výkon pro mnoho řídicích aplikací, ovšem ve chvíli, kdy bylo nutné provádět nějaké DSP operace (zesílení/zeslabení, konvoluce, korelace, FIR) již bylo výhodnější přejít na výkonnější mikrořadič, digitální signálový procesor či ještě lépe na kombinaci MCU+DSP. Jádra pojmenovaná C166S V2 představují právě onu zajímavou kombinaci šestnáctibitového mikrořadiče a rychlé jednotky určené pro provádění DSP operací se šestnáctibitovými vstupy a čtyřicetibitovými mezivýsledky. I přesto, že se tato jádra jmenují V2, se ve skutečnosti jedná již o třetí (nikoli druhou) generaci jader C166, ovšem s odlišnou vnitřní architekturou a několika vylepšeními, která se týkají jak instrukční sady (nové instrukce, nové adresovací režimy), tak i například instrukční pipeline umožňující dokončit většinu instrukcí v jednom cyklu.
2. Centrální procesorová jednotka: ALU, MAC a ADU
Centrální procesorová jednotka použitá u čipů s jádry C166S V2 obsahuje následující moduly:
- ALU (Aritmeticko-logická jednotka doplněná o samostatnou násobičku a děličku)
- MAC (Modul Multiply Accumulate, ten je zcela oddělený od výše zmíněné násobičky a děličky)
- ADU (Address Data Unit)
- IPIP (instrukční pipeline)
- IFU (jednotka řídicí načítání instrukcí, práci se zásobníkem návratových adres atd.)
- WB (Write-back buffer pro data)
- RF (dvě interní sady pracovních registrů, viz další text)
Aritmeticko-logická jednotka se skládá z klasické ALU, ovšem doplněné o barrel shifter, násobičku a děličku (pracující podobně jako u C166) a taktéž o novou jednotku MAC popsanou v navazující kapitole. Dále se v centrální procesorové jednotce nachází dvě sady pracovních registrů a modul ADU (Address Data Unit), jenž kromě speciálních registrů použitých pro adresování (DPP0..DPP3, SPSEG, SP, STKOV..) obsahuje i dvojici samostatně (paralelně s hlavní ALU) pracujících sčítaček používaných pro postinkrement/dekrement a preinkrement/dekrement adresy.
3. MAC – Multiply Accumulate
Jednotka MAC (Multiply Accumulate) tvoří základ pro ty aplikace, v nichž je nutné nějakým způsobem zpracovávat signály (většinou plynulý tok dat). Interně se MAC skládá z rychlé násobičky se šestnáctibitovými vstupy, která je propojena s barrel shifterem a akumulátorem. Jak posuvný registr, tak i akumulátor mají šířku čtyřicet bitů, což efektivně umožňuje výpočty s hodnotami reprezentovanými v systému pevné řádové čárky (FX – Fixed Point). Výpočty je možné provádět s automatickou saturací výsledků (nedojde k přetečení) a vzhledem k tomu, že násobička dokončí operaci v jediném cyklu, mohou být DSP operace prováděné na C166S V2 až desetkrát rychlejší v porovnání s původními jádry C166 (samozřejmě pokud porovnáváme čipy se shodným hodinovým signálem).
Modul MAC je doplněn registry nazvané MAH, MAL a MAE s obsahem akumulátoru (první dva registry jsou šestnáctibitové, poslední je jen osmibitový), dále registr MRW použitý při opakování programových smyček, MCW (MAC Unit Control Word) pro nastavení režimu saturace i posunu mezivýsledku po násobení a MSW (MAC Unit Status Word), což je registr se stavem celé jednotky MAC (přenos, přetečení, záporný výsledek poslední operace, nulový výsledek apod.)
4. Instrukční pipeline
Instrukční pipeline je u jader C166S V2 rozdělena na dvě části, přičemž první část se stará o načtení instrukce (fetch) a část druhá o její vykonání. První část má dva řezy, část druhá pak pět řezů. Navíc první část obsahuje logiku pro predikci skoků a dvojici bufferů pro přednačtené instrukce. Podívejme se, jak tato první část instrukční pipeline vypadá, protože se jedná o zajímavé a současně i výkonné řešení:
Obrázek 1: První část instrukční pipeline jader C166 V2.
Na diagramu můžeme vidět, že pipeline na vstupu obsahuje relativně malý buffer, který může obsahovat až šest instrukcí. Instrukční kódy (popř. konstanty) jsou z paměti programu načítány po interní sběrnici o šířce 64 bitů, takže je možné (například po skoku) tento buffer naplnit relativně rychle. Za vstupním bufferem se nachází logika pro detekci skokových instrukcí a pro predikci skoků v prvních třech instrukcích z bufferu. Pokud je skok detekován a logika usoudí, že bude proveden, je možné přeskočit (bypass) další buffer a FIFO, u běžných instrukcí jsou pak instrukce ukládány přes další buffer do FIFO. Instrukce skoku jsou prováděny paralelně s instrukcí, která skoku předchází (což je opak klasického RISCového branch delay slotu), což ovšem znamená, že logika v této části pipeline musí instrukci skoku pozměnit (vypočítat absolutní adresu skoku atd.).
5. Predikce skoků a nápověda předaná překladačem či uživatelem
S instrukční pipeline, resp. přesněji řečeno s její první částí (prefetch) poměrně úzce souvisí predikce skoků. Ta je u jader C166S V2 řešena poměrně jednoduchým způsobem, který ovšem umožňuje, aby centrální procesorové jednotce mohl pomoci překladač či sám programátor používající assembler. Prediktor skoků rozděluje všechny skokové instrukce do několika kategorií a u jednotlivých kategorií určuje, v jakém případě se má skok provést. Navíc existuje i kategorie skokových instrukcí, u nichž je predikce provedena na základě bitu zapsaného do instrukčního slova. Tento bit nastavuje překladač (na základě statické či runtime analýzy) či přímo programátor pracující s assembleru:
- U instrukcí JMPS a CALLS se předpokládá, že se skok vždy provede.
- Totéž platí u instrukcí RET, RETS, RETP a RETI.
- U instrukcí JMPI a CALLI se předpokládá, že se skok provede ve chvíli, kdy podmínka není zadána (suffix _UC), v ostatních případech se předpokládá, že se skok neprovede.
- U relativních podmíněných skoků se předpokládá, že skok bude proveden ve chvíli, kdy se skáče směrem zpět (tj. skok je velmi pravděpodobně umístěn na konci programové smyčky).
- Totéž platí u všech skokových instrukcí „booleovského procesoru“, tj. JB, JBC, JNB a JNBS.
- U instrukcí JMPA a CALLA může programátor/překladač určit, zda skok bude či nebude pravděpodobně proveden. Zápis je jednoduchý: JMPA+ podmínka, adresa a JMPA- podmínka, adresa.
6. Rozšíření sady pracovních registrů, mapování registrů do paměti
U původních mikrořadičových jader C166 existovala sada šestnácti šestnáctibitových pracovních registrů, přičemž osm z těchto registrů bylo možné rozdělit na dvojice osmibitových registrů. U novějších jader C166S V2 existují hned tři sady (resp. přesněji řečeno banky) pracovních registrů, přičemž jedna banka se nazývá globální a zbylé dvě banky pak lokální. Globální banka registrů je mapována do operační paměti, takže tyto registry je vlastně možné považovat „jen“ za speciální formu offsetu použitého při adresování. To, ve které části paměti se tato banka nachází, je určeno obsahem registru CP (Context Pointer), v jehož horních čtyřech bitech jsou vždy uloženy jedničky, aby se zaručilo, že banka pracovních registrů bude vždy uložena v interní paměti.
Počáteční adresu globální banky registrů je možné nastavit instrukcí:
SCXT CP, #konstanta
Lokální banky nejsou mapovány do RAM (jsou součástí centrální procesorové jednotky) a tudíž je nelze adresovat nepřímo. To, která banka registrů je použita, je určeno dvěma novými bity v PSW a protože je tento registr automaticky obnoven při ukončení přerušovací rutiny, je možné například jednu interní banku používat právě v přerušovacích rutinách a nestarat se o to, aby přerušovací rutina nenarušila obsah pracovních registrů používaných hlavním programem.
7. Rozšíření registru PSW (Program Status Word)
Původní jádra C166 obsahovala stavový registr, v němž nebyly některé bity využity. Jen pro připomenutí, struktura stavového registru PSW byla následující:
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í |
U jader C166S V2 se využily i zbývající tři bity, a to následujícím způsobem:
Bit | Označení | Význam |
---|---|---|
7 | USR1 | uživatelsky nastavitelný bit |
8 | BANK | výběr banky pracovních registrů |
9 | BANK | výběr banky pracovních registrů |
Bity 8 a 9 společně určují, jaká banka pracovních registrů se použije:
Bit 9 a 8 PSW | význam |
---|---|
00 | globální banka (mapovaná do paměti) |
01 | rezervováno |
10 | první lokální banka registrů |
11 | druhá lokální banka registrů |
8. Paměťový prostor větší než 64kB a rozdělení programové paměti na segmenty
Na rozdíl od některých dalších mikrořadičů se u jader C166S V2 používá jeden lineární adresový prostor společný jak pro datovou paměť, tak i pro paměť programu, což mj. zjednodušuje instrukční soubor. Konkrétně to znamená, že existuje prostor o maximální teoretické velikosti 16 MB, do něhož se mapuje interní ROM, interní paměť Flash, interní DRAM, speciální funkční registry (SFR) a popř. i všechny externí paměti. Na druhou stranu je však nutné kvůli této konfiguraci vyřešit problém, jak efektivně adresovat teoretický rozsah 16 MB na šestnáctibitovém mikroprocesoru.
O přenos instrukcí a konstant z paměti programu se stará modul nazvaný PMU neboli Program Management Unit, který je s centrální procesorovou jednotkou propojen přes již zmíněnou 64bitovou interní sběrnici. Většina čipů limituje velikost paměti programu na 4MB (což v reálných aplikacích prakticky nebude vadit).
9. Rozdělení programové paměti na segmenty
Při načítání instrukcí z programové paměti je použita metoda segmentování. Již zmíněný rozsah adres do 16 MB (224 adres) je rozdělen do 256 vzájemně se nepřekrývajících segmentů, takže každý segment má velikost přesně 65536 adres. Pro uložení aktuálně používaného segmentu je využit osmibitový registr CSP, ukazatel na zpracovávanou instrukci IP je pouze šestnáctibitový a navíc je jeho nejnižší bit vždy nulový, protože instrukce jsou zarovnány na šestnáctibitová slova. Explicitní změnu obsahu registru CSP provádí instrukce JMPS a CALLS, u nichž je kromě adresy skoku v rámci segmentu použita i osmibitová konstanta značící nový segment:
CALLS segment, adresa JMPS segment, adresa
Poznámka: tyto instrukce mají šířku čtyř bajtů – jeden bajt pro kód instrukce, další bajt pro segment a dvojice bajtů pro adresu v rámci segmentu.
Implicitní změnu obsahu registru CSP provádí instrukce RETS a RETI. V případě potřeby je možné segmentaci (vliv registru CSP na výpočet absolutní adresy) zakázat nastavením bitu SGTDIS v konfiguračním registru CPUCON1 (po resetu je segmentace implicitně povolena).
10. Adresování dat
Datová paměť je s centrální procesorovou jednotkou propojena pouze po šestnáctibitové sběrnici a maximální kapacita interní datové paměti dosahuje u většiny čipů „jen“ 24 KB. Na druhou stranu se jedná o SRAM, takže lze relativně nízkou kapacitu pochopit. K této paměti můžeme připočíst ještě rychlejší DPRAM o kapacitě typicky 3 KB, které je přes High Speed System Bus propojena s MPU (s CPU je propojena přímo – je dokonce jeho součástí) a slouží především pro DSP operace. Pro komunikaci s externími paměťmi se používá EBC neboli External Bus Controller, velikost těchto pamětí již není nijak významně omezena, takže prakticky vždy přesáhne 64 KB. A právě proto je nutné i při práci s datovou pamětí použít nějaký systém adresování, který obejde omezení 64 KB při použití šestnáctibitových registrů.
Existuje několik režimů adresování datové paměti, ovšem základní režim je založen na použití stránkových registrů nazvaných Data Page Pointer neboli DPP. Tyto registry obsahují horních deset bitů adresy (její celková šířka je 24 bitů). Přímo v instrukcích sloužících pro manipulaci s daty se většinou specifikuje pouze šestnáctibitová adresa (obsah pracovního registru, konstanta atd.). Tato část je rozdělena na offset o šířce čtrnácti bitů a dvoubitový index, který vybírá jeden z Data Page Pointerů (registry DPP0 až DPP3). Z těchto registrů se přečte již zmíněných spodních deset bitů (horních šest bitů se ignoruje), které společně vytvoří výslednou fyzickou adresu:
15 pracovní registr či konstanta 0 +---------------------------------+ | r r b b b b b b b b b b b b b b | +---------------------------------+ | | | 15 DPP0 v v 0 | +---------------------------------+ | | 0 0 0 0 0 0 a a a a a a a a a a | rr=00 | +---------------------------------+ | | | | 15 DPP1 v v 0 | +---------------------------------+ | | 0 0 0 0 0 0 a a a a a a a a a a | rr=01 | +---------------------------------+ | | | | 15 DPP2 v v 0 | +---------------------------------+ | | 0 0 0 0 0 0 a a a a a a a a a a | rr=10 | +---------------------------------+ | | | | 15 DPP3 v v 0 | +---------------------------------+ | | 0 0 0 0 0 0 a a a a a a a a a a | rr=11 | +---------------------------------+ | | 31 24 23 16 15 v 0 +---------------------------------+----------------------------+ | 0 0 0 0 0 0 a a a a a a a a a a |b b b b b b b b b b b b b b | +---------------------------------+----------------------------+
11. Obejití funkce stránkových registrů DPP instrukcemi EXT??
V některých případech je možné adresování s využitím stránkových registrů DPPx zcela obejít. K tomu slouží čtyři nové „blokové“ instrukce EXTP, EXTPR, EXTS a EXTSR.
Instrukci EXTP a EXTPR se předává desetibitové číslo stránky a velikost bloku (počet instrukcí), pro něž se adresa vypočte právě na základě předaného čísla stránky a čtrnáctibitového offsetu (horní dva bity se ignorují):
EXTP #stránka, velikost_bloku
EXTPR #stránka, velikost_bloku
Třetí instrukce EXTS i čtvrtá instrukce EXTSR spočítá adresu na základě šestnáctibitového offsetu a osmibitového segmentu, přičemž osmibitový segment je součástí blokové instrukce:
EXTS #segment, velikost_bloku
EXTSR #segment, velikost_bloku
Poznámka: při provádění celého bloku instrukcí se změněným adresovacím režimem je zakázáno přerušení. Blok však ve skutečnosti není příliš dlouhý, protože počitadlo velikosti bloku je jen dvoubitové.
12. DSP operace
Modul pro DSP operace se svým interním uspořádáním podobá většině dalších digitálních signálových procesorů. Ostatně se podívejme na následující obrázek, na němž je naznačena jeho struktura:
Obrázek 2: DSP modul
(upraveno podle materiálů firmy Infineon)
Na vstupu se nachází sběrnice, po které lze přenášet dvojici šestnáctibitových operandů. Ty lze buď navzájem vynásobit nebo je lze spojit do jednoho 32bitového slova. Výsledek násobení/spojení je přenesen do sčítačky a odčítačky tvořící druhou část operace MAC (Multiply Accumulate). Tato sčítačka je již čtyřicetibitová, aby nebylo nutné po každém součtu kontrolovat, zda došlo k přetečení. Výsledek operace MAC je uložen do akumulátoru, z něhož může být přečten (popř. lze navíc aplikovat různé konverze, saturace, limitaci výsledků na 16bitové hodnoty apod.) nebo přes shifter přenesen ve zpětnovazební smyčce do sčítačky. Režim DSP je řízen několika bity v řídicím registru MSW (MAC Status Word).
13. Nové adresovací režimy pro DSP operace
Pro DSP operace bylo do jader C166S V2 přidáno několik nových adresovacích režimů a taktéž několik nových registrů. Nejjednodušší je funkce nových registrů QR0 a QR1, které mohou být použity pro postinkrementaci či postdekrementaci adresy po přístupu do paměti. Tyto operace tedy již nejsou omezeny na přičtení či odečtení jedničky:
instrukce [Rw+QRx] ; postinkrement o QRx po přístupu do paměti instrukce [Rw-QRx] ; postdekrement o QRx po přístupu do paměti
Další dva registry IDX0 a IDX1 lze použít pro reprezentaci offsetu. V tomto případě se horní dva bity registrů použijí pro výběr jednoho stránkového registru DPPx podle schématu, který již známe. Při použití IDX0 či IDX1 lze jejich hodnotu automaticky zvýšit či snížit o jedničku nebo o hodnotu uloženou v jednom z registrů QX0 či QX1 (mnemotechnická pomůcka – QRx slouží pro změnu registrů, jejichž jména začínají na R zatímco QXx mění indexové registry IDXx).
14. Instrukce ATOMIC
Zajímavý koncept představuje instrukce ATOMIC. Této instrukci lze předat dvoubitovou hodnotu specifikující velikost bloku (1–4) instrukcí, které se provedou atomicky, tj. bez přerušení (povolena jsou jen některá vybraná hardwarová přerušení). S touto technikou jsme se již vlastně setkali – nalezneme ji i u čtyř instrukcí EXTP, EXTPR, EXTS a EXTSR popsaných v jedenácté kapitole. Uvnitř atomického bloku je možné použít libovolné instrukce, tj. mj. i instrukce DSP, komunikaci s periferními zařízeními, podmíněné skoky apod.
15. Odkazy na Internetu
- C166®S V2 Architecture & Core
http://www.infineon.com/cms/en/product/microcontroller/16-bit-c166-microcontroller/c166-s-v2-architecture-and-core/channel.html?channel=db3a304312bef5660112c3011c7d01ae - Memory segmentation
https://en.wikipedia.org/wiki/Memory_segmentation - 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