Obsah
1. Digitální signálové procesory řady TMS320
2. TMS32010: čip, který změnil budoucnost firmy Texas Instruments
5. Aritmeticko-logická jednotka
7. Obvody pro bitové posuny (shifters)
9. Instrukční sada DSP TMS32010
1. Digitální signálové procesory řady TMS320
V předchozích částech seriálu o architekturách počítačů jsme se zabývali především popisem osmibitových a vybraných šestnáctibitových mikrořadičů, které se (stále) velmi často používají v různých vestavěných systémech, v nichž tyto čipy slouží například pro sběr dat z měřicích sond, pro základní zpracování dat, řízení různých elektronických zařízení, řízení komunikace mezi jednotlivými uzly systému atd. Osmibitové mikrořadiče jsou díky některým svým výhodným vlastnostem, zejména nízké ceně, malým nárokům na připojení pomocných obvodů (většinou postačuje jen napájení a někdy též externí oscilátor, pokud nedostačuje přesnost oscilátoru interního) a většinou i velmi malé spotřebě elektrické energie (zařízení napájené z akumulátoru či jen monočlánku), využívány i v současnosti – prakticky se jedná o jednu z posledních oblastí, kde se ještě komerčně využívají mikroprocesorová jádra založená na „předpotopní“ osmibitové aritmeticko-logické jednotce.
Obrázek 1: Integrovaný obvod AMD Am2901 tvořící ústřední část modulární architektury AMD Am2900. Zde zobrazený čip pochází z řady určené mj. i pro armádní účely (jeho charakteristiky tedy umožňují práci ve větším teplotním rozsahu atd.). Z těchto čipů se v případě potřeby mohl poskládat digitální signálový procesor, resp. přesněji řečeno jeho značně primitivní varianta
Ovšem osmibitové či vícebitové mikrořadiče a běžné mikroprocesory využívané například v osobních počítačích nejsou v žádném případě jedinými programovatelnými čipy, které se v současnosti používají. Poměrně významnou skupinu programovatelných součástek tvoří takzvané digitální signálové procesory, neboli DSP (Digital Signal Processors).
Obrázek 2: Klon výše zobrazeného čipu AMD Am2901, který pochází ze SSSR.
První typy digitálních signálových procesorů, tj. DSP umístěných na jediném čipu, vznikly až na přelomu sedmdesátých a osmdesátých let minulého století, ovšem o zpracování číslicových signálů v reálném čase se inženýři a posléze i programátoři pokoušeli již dříve. První úspěšné a dá se říci i reálně použitelné systémy vznikly již na minipočítačích na počátku sedmdesátých let minulého století, ovšem vzhledem k poměrně vysoké ceně minipočítačů, jejich velikosti i spotřebě (nenechme se zmýlit předponou mini-, ta vyjadřovala cenu, velikost a výkonnost minipočítačů vzhledem k mainframům :-) byla oblast jejich nasazení omezená pouze na ty technologické provozy, kde nebyla k dispozici dostatečně robustní alternativa. Pokud nebylo možné minipočítače použít, používaly se buď signálové procesory sestavené z více čipů, nebo se namísto zpracování číslicových signálů používala mnohem starší, a nutno říci, že v dané době i propracovanější technologie – analogové počítače, které ovšem pracují na zcela jiném principu, než programovatelné číslicové počítače.
Obrázek 3: Řetězec zpracování analogového signálu pomocí DSP. Toto schéma je poněkud zjednodušené, protože neobsahuje například obvod typu Sample and Hold (S&H) před A/D převodníkem ani rekonstrukční filtr umístěný za D/A převodníkem.
2. TMS32010: čip, který změnil budoucnost firmy Texas Instruments
„The world is recognizably a different place as a result of our DSP efforts“
Tony Leigh, člen skupiny, která navrhla TMS32010.
Na další vývoj digitálních signálových procesorů měl značný vliv čip TMS32010 vyvinutý v roce 1982 ve společnosti Texas Instruments. Tento digitální signálový procesor konstruktérům nabídl vysoký výpočetní výkon v základních operacích se signálem (součet, násobení, MAC). Jedná se dokonce o jeden z 25 čipů, které podle některých autorů nejvíce ovlivnily další vývoj digitální techniky a na ní postaveného průmyslu. Mezi další čipy z této „síně slávy“ patří MOS 6502, Zilog Z80, Intel 8088, samozřejmě časovač 555 či první CCD čip. Zajímavé je, že i když je dnes podstatná část produkce Texas Instruments zaměřena na DSP, vznikl digitální signálový procesor TMS32010 vlastně jen souhrou náhod; nejednalo se tedy o důsledek přesného plánování do budoucna (to je ostatně v IT poměrně běžné). Jeden z důvodů úspěchu TMS32010 spočíval v efektivním použití jednotlivých funkčních bloků (ty mohou pracovat paralelně) a odstraněním těch instrukcí či registrů, které nejsou v oblasti DSP nezbytné.
Obrázek 4: Různé varianty DSP řady TMS320.
Čip TMS32010 existoval v několika variantách a vyráběl se s použitím technologie NMOS i CMOS:
Čip | Technologie | Délka hodinového cyklu | Spotřeba |
---|---|---|---|
TMS32010–25 | NMOS | 160 ns | 900 mW |
TMS32010 | NMOS | 200 ns | 900 mW |
TMS32010–14 | NMOS | 280 ns | 900 mW |
TMS32011 | NMOS | 200 ns | 900 mW |
TMS320C10–25 | CMOS | 160 ns | 200 mW |
TMS320C10 | CMOS | 200 ns | 165 mW |
TMS320C10–14 | CMOS | 280 ns | 140 mW |
TMS320C15–25 | CMOS | 160 ns | 250 mW |
TMS320C15 | CMOS | 200 ns | 225 mW |
TMS320E15 | CMOS | 200 ns | 300 mW |
TMS320C17–25 | CMOS | 160 ns | 275 mW |
TMS320C17 | CMOS | 200 ns | 250 mW |
TMS320E17 | CMOS | 200 ns | 325 mW |
Poznámka: TMS32010 nemá prakticky nic společného s již popsanými šestnáctibitovými mikrořadiči řady MSP430, s nimiž jsme se již v tomto seriálu setkali [1] [2] [3].
3. Interní struktura TMS32010
Interní struktura digitálních signálových procesorů TMS32010 je v určitých ohledech podobná klasickým mikrořadičům. Celý čip obsahuje několik funkčních bloků, které jsou mezi sebou propojeny interní datovou sběrnicí a sběrnicí, po které jsou posílány kódy instrukcí (obě sběrnice mají šířku šestnácti bitů):
- Na čipu je umístěna paměť ROM či EPROM s kapacitou 1,5 kiloslov (1536 slov), přičemž každé slovo má šířku 16 bitů (povšimněte si, že v dalším textu se prakticky vůbec nebudeme bavit o bajtech, protože tato jednotka nemá u TMS32010 žádný praktický význam; to ostatně platí i o mnoha dalších DSP).
- Kromě paměti ROM/EPROM obsahuje DSP i paměť RAM, která má kapacitu 144 slov, přičemž opět platí, že slovo má šířku šestnáct bitů.
- Další paměť (se speciálním významem) tvoří zásobník návratových adres. Jeho kapacita je 4×12 bitů (což vlastně přímo určuje maximální rozsah paměti programu na 4096 slov).
- Čip obsahuje aritmeticko-logickou jednotku (ALU), k níž je připojen akumulátor se šířkou 32 bitů. Novější čipy postavené na TMS320 obsahují větší počet akumulátorů (například čtyři), které navíc mohou mít větší šířku, aby bylo možné detekovat přetečení či ořezání výsledku.
- Jeden operand vstupující do ALU může být posunut v barrel shifteru. I výsledek vypočtený v ALU může být před uložením posunut v dalším barrel shifteru.
- Důležitou součástí DSP je i rychlá násobička s dvojicí 16bitových vstupů a 32bitovým výstupem. K násobičce jsou připojeny registry T a P.
- Na čipu se dále nachází registr PC (šířka 12 bitů), registr DP (jeden bit), registr ARP (taktéž jeden bit) a konečně dvojice registrů AR0 a AR1, jejichž význam si vysvětlíme níže (právě použití těchto registrů může vést k tvorbě efektivního kódu, proto se jejich počet v dalších generacích DSP zvýšil). Modernější DSP mají větší počet těchto registrů, například osm (v tomto případě musí mít ARP větší bitovou šířku, v tomto případě tři bity).
Obrázek 5: Interní struktura nejdůležitější části DSP, v níž se provádí všechny výpočty.
4. Paměťový subsystém
O paměťovém subsystému TMS32010 jsme se již částečně zmínili v předchozí kapitole, takže si tyto informace nyní upřesněme. Základní čip TMS32010 měl kapacitu paměti programu ROM (resp. ROM programovatelné maskou) 1,5 kiloslov (slovo=16 bitů), ovšem u dalších modelů se tato kapacita mohla zvýšit až na 4 kiloslova a některé čipy nabízely namísto ROM paměť EPROM. Paměť programu navíc bylo možné rozšířit externím čipem o další 4 kiloslova (mohlo se jednat o EPROM a při vývoji i o RAM, což bylo podporováno v instrukční sadě instrukcí TBLW). Datová paměť RAM měla v základní konfiguraci kapacitu 144 slov, některé čipy pak obsahovaly 256 slov. Ostatně se podívejme na následující tabulku s čipy odvozenými od základního TMS32010:
Čip | Technologie | RAM | ROM | EPROM | Externí EPROM |
---|---|---|---|---|---|
TMS32010–25 | NMOS | 144 | 1,5k | × | 4k |
TMS32010 | NMOS | 144 | 1,5k | × | 4k |
TMS32010–14 | NMOS | 144 | 1,5k | × | 4k |
TMS32011 | NMOS | 144 | 1,5k | × | × |
TMS320C10–25 | CMOS | 144 | 1,5k | × | 4k |
TMS320C10 | CMOS | 144 | 1,5k | × | 4k |
TMS320C15–25 | CMOS | 256 | 4k | × | 4k |
TMS320C15 | CMOS | 256 | 4k | × | 4k |
TMS320E15 | CMOS | 256 | × | 4k | 4k |
TMS320C17–25 | CMOS | 256 | 4k | × | × |
TMS320C17 | CMOS | 256 | 4k | × | × |
TMS320E17 | CMOS | 256 | × | 4k | × |
Pro adresaci operandů v paměti dat je zapotřebí osm bitů, ve skutečnosti se však adresa rozděluje na 1+7 bitů, přičemž první bit je uložen v registru DP (data page). U původních čipů obsahovala nultá stránka 128 slov a první stránka jen 16 slov (144–128), u čipů s větší RAM měly obě stránky shodně 128 slov. Adresa instrukcí má šířku dvanáct bitů, což bez problémů umožňuje adresaci 4096 slov.
Poznámka: později vydané čipy, například TMS320C16, obsahovaly 8 kB ROM a dokázaly adresovat až 64 kB externí paměti.
5. Aritmeticko-logická jednotka
DSP řady TMS320 mají konfiguraci ALU odlišnou od konfigurace, na níž jsme byli zvyklí z osmibitových mikrořadičů. Aritmeticko-logická jednotka totiž může zpracovávat 32bitové operandy, i když v paměti (či na vstupu čipu) se nachází šestnáctibitová data. Na šestém obrázku je ukázáno, jakým způsobem je aritmeticko-logická jednotka zapojena:
Obrázek 6: ALU a k ní připojené moduly.
Ze způsobu zapojení nepřímo vychází i princip získání 32bitových operandů:
- Přes datovou sběrnici (naznačená obdélníkem zcela napravo) vstupují data buď do barrel shifteru či do registru T (ten je šestnáctibitový).
- Výstupem z barrel shifteru je již 32bitový operand, který může být přes multiplexor přiveden na jeden vstup ALU.
- Na výstupu násobičky je umístěn 32bitový registr P, který opět může být přes multiplexor přiveden na jeden vstup ALU.
- Samotná ALU je 32bitová, takže i výsledek je ukládán do 32bitového akumulátoru. Při sčítání je možné použít režim se saturací.
- Akumulátor je současně druhým vstupem do ALU (což se odráží na instrukčním souboru).
- Akumulátor lze buď rozdělit na dvě 16bitové části nebo je možné jeho obsah přes druhý barrel shifter uložit zpět do paměti dat.
6. Násobička
Ústředním prvkem mnoha algoritmů, které se provádí na digitálních signálových procesorech, je násobení. Proto i tak jednoduchý čip, jakým z dnešního pohledu TMS32010 je, obsahuje výkonnou násobičku, která dokáže vynásobit dva šestnáctibitové operandy s 32bitovým výsledkem, který je dále zpracován v ALU. Před násobičkou je umístěn registr T (temporary) s šířkou šestnácti bitů, do kterého se ukládá jeden z činitelů. Druhý činitel je načten buď z datové paměti (16 bitů), nebo je možné použít konstantu o šířce třinácti bitů, která je uložena přímo v kódu instrukce (MPYK). Součin se ukládá do registru P (product) a pomocí instrukcí PAC, APAC a SPAC se buď může výsledek uložit do akumulátoru nebo se může provést operace acc+P či acc-P.
Obrázek 7: Násobička v blokovém schématu TSM32010.
Poznámka: další generace DSP společnosti Texas Instruments používají odlišné značení registrů P a T: PR a TR.
7. Obvody pro bitové posuny (shifters)
Mezi datovou sběrnicí a aritmeticko-logickou jednotkou (resp. multiplexorem připojeným na ALU) je umístěn barrel shifter, který dokáže vstupní šestnáctibitová data posunout o 0 až 16 bitů doleva, což se může hodit například při práci s formátem numerických hodnot uložených v systému pevné řádové čárky (viz odkazy). Naopak mezi akumulátorem a datovou sběrnicí nalezneme další shifter, který může posunout data o 0, 1 či 4 bity doleva. Z takto vypočteného výsledku se vybere horních šestnáct bitů, které se uloží zpět do datové RAM. Pro použití prvního shifteru se používají instrukce ADD, LAC a SUB, zatímco druhý shifter je použit v instrukcí nazvané SACH (viz navazující kapitoly).
Obrázek 8: Dvojice shifterů v blokovém schématu TSM32010.
8. Pracovní registry
Na rozdíl od klasických mikroprocesorů či mikrořadičů nalezneme na čipu TMS32010 jen velmi malé množství registrů, které navíc plní speciální funkce (nejedná se tedy o obecně použitelné registry). V praxi to příliš nevadí, protože do ALU může ve funkci druhého operandu vstupovat obsah libovolné buňky paměti RAM v případě potřeby posunutý v barrel shifteru. Všechny důležité registry, které jsou programátorům dostupné, jsou vypsány v následující tabulce:
Registr | Šířka | Použití |
---|---|---|
ACC | 32b | akumulátor, jeden ze vstupů ALU, ukládá se do něj výsledek ALU operace |
T | 16b | vstup do násobičky |
P | 32b | výsledek práce násobičky |
PC | 12b | programový čítač, měněn automaticky či pomocí skoků |
DP | 1b | vybírá banku 128 slov v RAM |
ARP | 1b | vybírá AR0 či AR1 při nepřímém adresování |
AR0 | 16b | použit při nepřímém adresování (může se automaticky inkrementovat či dekrementovat) |
AR1 | 16b | použit při nepřímém adresování (může se automaticky inkrementovat či dekrementovat) |
Poznámka: možnost autoinkrementace či autodekrementace registrů AR0 a AR1 lze využít i pro implementaci počítaných programových smyček. V tomto případě se použije nejnižších devět bitů registru ve funkci čítače. To je ostatně podporováno instrukcí BANZ, která se podobá již dříve několikrát zmíněné instrukci DJNZ (decrement and branch/jump if not zero) až na to, že se nejdříve provede porovnání s nulou a teprve poté skok+snížení hodnoty o jedničku.
Poznámka 2: registr DP a ARP je mapován do stavového registru, v němž mj. nalezneme příznak přetečení a taktéž bit, který dokáže nastavit režim výpočtů se saturací či naopak režim s přetečením.
9. Instrukční sada DSP TMS32010
Instrukční sada digitálních signálových procesorů řady TMS320 je optimalizována pro použití v algoritmech pro zpracování samplovaného digitálního signálu, přičemž jednotlivé vzorky (samply) jsou šestnáctibitové. Základ tvoří pouhých šedesát instrukcí, přičemž naprostá většina instrukcí je provedena v jednom taktu a instrukční slovo má šířku šestnáct bitů (což přesně odpovídá konstrukci paměti ROM či EPROM). Pouze skokové instrukce jsou výjimečné, protože jsou uloženy ve dvou slovech a pro jejich provedení jsou zapotřebí dva cykly (ve skutečnosti se však v klasických algoritmech typu FFT, konvoluce či korelace se skoky příliš často nesetkáme). Déle trvají i instrukce pro čtení či zápis dat přes I/O porty. Instrukční sada není v žádném případě ortogonální, naopak zde nalezneme některé ad-hoc instrukce, které jsou používány pro DSP operace a které by se do klasické ortogonální instrukční sady příliš nehodily (příkladem může být instrukce LTD kombinující instrukce LT, APAC a DMOV).
Instrukce podporují tři typy adresování: použití přímé sedmibitové adresy (k ní se do osmého bitu přidá registr DP, takže úplný rozsah je 256 slov), použití nepřímé adresy uložené v registru AR0 či AR1 (zde lze zvolit i způsob modifikace těchto registrů) a konečně použití konstanty (ta má šířku buď osm bitů nebo v jedné instrukci třináct bitů; pro DSP je typické, že tato jediná instrukce provádí násobení). Rozlišení mezi přímým a nepřímým adresováním se provádí jedním bitem v instrukčním slovu, pro použití konstanty se používají odlišné instrukce.
Skupina instrukcí | Počet |
---|---|
Operace s akumulátorem a ALU | 18 |
Operace s násobičkou a registry T či P | 8 |
Operace s registry ARP a DP | 7 |
Nepodmíněný skok a podmíněné skoky | 10 |
Volání subrutin a návrat ze subrutin | 3 |
Řídicí instrukce | 5 |
Práce se stavovým registrem | 4 |
Vstupně-výstupní operace | 5 |
Celkem | 60 |
Podrobnější popis instrukční sady bude – vzhledem k její odlišnosti od doposud popisovaných instrukcí – uveden v následující části tohoto seriálu.
10. Odkazy na Internetu
- Digital Signal Processors (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/overview.page - 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