Hlavní navigace

Digitální signálové procesory řady TMS320

20. 12. 2016
Doba čtení: 13 minut

Sdílet

Po popisu osmibitových mikrořadičů se v seriálu začneme věnovat dalším typům čipů. Jedná se o digitální signálové procesory (DSP), přičemž jedním z revolučních čipů v této oblasti je slavný TMS32010.

Obsah

1. Digitální signálové procesory řady TMS320

2. TMS32010: čip, který změnil budoucnost firmy Texas Instruments

3. Interní struktura TMS32010

4. Paměťový subsystém

5. Aritmeticko-logická jednotka

6. Násobička

7. Obvody pro bitové posuny (shifters)

8. Pracovní registry

9. Instrukční sada DSP TMS32010

10. Odkazy na Internetu

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ů):

  1. 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).
  2. 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ů.
  3. 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).
  4. Č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.
  5. 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.
  6. 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.
  7. 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).

UX DAy - tip 2

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

  1. Digital Signal Processors (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/overview.page
  2. Introduction to DSP
    http://www.ti.com/lit/wp/spry281/spry­281.pdf
  3. The Evolution of TMS (Family of DSPs)
    http://www.slideshare.net/mo­to_modx/theevo1
  4. Datasheet k TMS32010
    http://www.datasheetarchi­ve.com/dlmain/49326c32a52050140ab­ffe6f0ac4894aa09889/M/TMS32010
  5. 1979: Single Chip Digital Signal Processor Introduced
    http://www.computerhistory­.org/siliconengine/single-chip-digital-signal-processor-introduced/
  6. The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
    http://www.tihaa.org/histo­rian/TMS32010–12.pdf
  7. Texas Instruments TMS320 (Wikipedia)
    https://en.wikipedia.org/wi­ki/Texas_Instruments_TMS320
  8. 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
  9. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko.sasktelwebsi­te.net/cpu.html
  10. Introduction to DSP – DSP processors:
    http://www.bores.com/courses/in­tro/chips/index.htm
  11. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspguide.com/
  12. Digital signal processor (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Digital_signal_processor
  13. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Digitální_signálový_pro­cesor
  14. Digital Signal Processing FAQs
    http://dspguru.com/dsp/faqs
  15. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.root.cz/clanky/fixed-point-arithmetic/
  16. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  17. Č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/
  18. Základní aritmetické operace prováděné v FX formátu
    http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/
  19. 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/
  20. FIR Filter FAQ
    http://dspguru.com/dsp/faqs/fir
  21. Finite impulse response (Wikipedia)
    http://en.wikipedia.org/wi­ki/Finite_impulse_response
  22. DSPRelated
    http://www.dsprelated.com/
  23. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  24. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  25. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  26. TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
    https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423

Byl pro vás článek přínosný?