Obsah
1. Digitální signálové procesory zpracovávající hodnoty s plovoucí řádovou čárkou
3. Paralelní spouštění vybraných instrukcí a branch delay slot
5. Sada registrů čipu TMS320C30
7. Operace s hodnotami s plovoucí řádovou čárkou
8. Typické doby trvání základních algoritmů pro zpracování signálu
9. Digitální signálový procesor TMS320C6701
10. Výkonné jednotky procesoru TMS320C6701
11. Interní struktura čipů TMS320C6701
1. Digitální signálové procesory zpracovávající hodnoty s plovoucí řádovou čárkou
V dnešním článku si popíšeme dva digitální signálové procesory navržené ve společnosti Texas Instruments, které jsou primárně určeny pro zpracování numerických hodnot reprezentovaných v systému plovoucí řádové čárky (FP – floating point). První z těchto DSP se jmenuje TMS320C30 a je odvozen od prapředka všech DSP TI – čipu TMS32010. Naproti tomu druhý procesor označovaný TMS320C6701 je založen na novější a výkonnější architektuře VLIW. V takzvané „první generaci“ digitálních signálových procesorů společnosti Texas Instruments nalezneme tyto čipy a jejich alternativy:
Čip | Stručný popis |
---|---|
TMS32010 | první celočíselný DSP, který jsme si již v tomto seriálu popsali |
TMS320M10 | podobný čip, ovšem s interní ROM o kapacitě tří kilobajtů |
TMS320C10 | podobný čip, ovšem vyrobený odlišnou technologií |
TMS320C30 | DSP s podporou operací s hodnotami s plovoucí řádovou čárkou |
TMS320C40 | DSP s podporou operací s hodnotami s plovoucí řádovou čárkou |
TMS320C80 | MVP neboli Multimedia Video Processor |
Další důležitou řadou je řada TMS320C6×x, v níž nalezneme procesory s architekturou VLIW. Již ve třetím článku o DSP jsme si řekli, že rodina digitálních signálových procesorů TMS320C6×x je poměrně rozsáhlá, protože v ní nalezneme čipy určené pro různé aplikační oblasti. Základní dělení je na čipy, které dokážou primárně zpracovávat celočíselná data popř. data s pevnou řádovou čárkou (FX – fixed point), a na čipy, které naopak zpracovávají hodnoty s plovoucí řádovou čárkou (FP – floating point). O jaké typy DSP se jedná, se dá poměrně jednoduše zjistit pohledem na číslo, které se nachází na devátém místě označení čipu. Prozatím se přidržíme původní rodiny TMS320 a nikoli složitějších integrovaných obvodů OMAP a DaVinci:
Označení | Fixed point | Floating point | Poznámka |
---|---|---|---|
TMS320C62× | ✓ | × | základní model digitálního signálového procesoru s VLIW |
TMS320C67× | × | ✓ | na úrovni zdrojového kódu kompatibilní s prvním čipem |
TMS320C64× | ✓ | × | na úrovni zdrojového kódu kompatibilní s prvním čipem |
TMS320C67×+ | × | ✓ | vylepšení čipu TMS320C67× |
TMS320C64×+ | ✓ | × | vylepšení čipu TMS320C64× |
TMS320C674× | ✓ | ✓ | vznikl sloučením vlastností TMS320C64×+ a TMS320C67×+ |
TMS320C66× | ✓ | ✓ | nová řada založená na TMS320C674× |
2. Historický čip TMS320C30
Digitální signálový procesor TMS320C30, který byl v úvodní kapitole vypsán v první tabulce, je z dnešního pohledu historickým čipem, který se již dále nevyrábí, i když firma TI alespoň zajišťuje formu zpětné kompatibility na úrovni zdrojových kódů (binárně již nikoli). To však nemusí vadit, protože tento DSP má jednu velkou výhodu – jeho interní struktura je poměrně jednoduchá a je tedy snadné celý čip prakticky kompletně pochopit (na rozdíl od procesorů VLIW, kde je to již komplikovanější). DSP TMS320C30 byl vyráběn v několika základních variantách, které se od sebe lišily především délkou hodinového cyklu (tedy přeneseně hodinovou frekvencí) a tím pádem i maximálním teoretickým výpočetním výkonem. Vzhledem k architektuře tohoto procesoru se výkon udává jak v MIPS (celočíselné operace), tak i v MFLOPS (operace s FP hodnotami):
Model | Délka cyklu | MIPS | MFLOPS |
---|---|---|---|
TMS320C30–27 | 74ns | 13,5 | 27 |
TMS320C30–33 | 60ns | 16,7 | 33,3 |
TMS320C30–40 | 50ns | 20 | 40 |
TMS320C30–50 | 40ns | 25 | 50 |
Z DSP je vyvedena externí datová sběrnice o šířce 32 bitů a adresová sběrnice o šířce 24 bitů. Vzhledem k tomu, že se instrukce i operandy adresují po 32bitových slovech, znamená to, že lze přistupovat k 16Mslovům (64 MB, kde MB v mých článcích odpovídá 220 bajtům). Ovšem tento DSP obsahuje i interní paměť, konkrétně dva bloky paměti RAM, každý o velikosti 1k×32 bitů, blok ROM o velikosti 4k×32 bitů (na začátku jsou umístěny vektory pro přerušovací rutiny atd.) a programovou cache o kapacitě 64×32 bitů. Existence těchto pamětí je velmi důležitá, protože umožňuje dosažení vyššího výpočetního výkonu, než při použití externí RAM/ROM (současně lze načítat dva operandy a jeden kód instrukce). Kromě těchto modulů nalezneme na TMS32C030 i dva sériové porty a dva časovače.
3. Paralelní spouštění vybraných instrukcí a branch delay slot
Na rozdíl od prvního DSP TMS32010 je čip TMS320C030 přece jen poněkud sofistikovanější, protože v některých případech dokáže spustit dvě instrukce současně (dalo by se říci, že se jedná o prozatím nenápadný zárodek VLIW). Současně lze spustit (párovat) tyto typy instrukcí:
- Aritmetická instrukce+instrukce typu store
- Logická instrukce+instrukce typu store
- Načtení dvou registrů (load+load)
- Uložení dvou registrů (store+store)
- To nejdůležitější na konec: instrukce násobení a součtu (multiply+add)
Paralelně spouštěné instrukce se zapisují způsobem, který již známe z předchozího článku:
ADDI R0, R1, R2 || MPYI R3, R4, R5
Kromě toho lze využít branch delay sloty, což znamená, že instrukce načtená ihned za instrukcí skoku je taktéž provedena (její kód je načten při výpočtu adresy skoku). Možnosti branch delay slotů jsou dále rozšířeny existencí dvou instrukcí RPTB (repeat block) a RPTS (repeat single), které slouží pro konstrukci počítaných programových smyček BEZ použití podmíněných skoků. Instrukce RPTS jednoduše opakuje zadanou instrukci (počitadlem je registr RC):
RPTS jedna_instrukce
Instrukce RPTB slouží pro implementaci konstrukce for. Této instrukci se předává adresa (návěští) konce bloku a počet opakování celého bloku:
RPTB konec_bloku, 42 ... ... ... konec_bloku:
Tyto dvě instrukce provádí inicializaci trvající čtyři cykly, ovšem další výpočty jsou již velmi rychlé, protože samotné zvýšení počitadla a opakování smyčky je provedeno paralelně s vykonávanými instrukcemi. Navíc se v případě RPTS opakovaná instrukce načte jen jednou.
4. Moduly čipu TMS320C30
Digitální signálový procesor TMS320C30 je postaven okolo důležitých modulů. Jsou jimi:
- Aritmeticko-logická jednotka určená pro provádění FX i FP operací.
- Nezávisle pracující násobička určená taktéž pro FX i FP operace.
Zajímavé je, že oba moduly dokážou pracovat jak s celočíselnými operandy popř. s operandy s pevnou řádovou čárkou (FX), tak i s operandy s plovoucí řádovou čárkou (FP). To je dosti odlišný přístup, než jaký známe z běžných desktopových a serverových mikroprocesorů (i386, x86–64, ARM32, AArch64, MIPS), v nichž je matematický koprocesor většinou zcela oddělen, a to jak kvůli samostatné sadě registrů, tak i rozdílnými instrukcemi.
Aritmeticko-logická jednotka na svém vstupu akceptuje 32bitové celočíselné operandy, přičemž i výstup je v tomto případě 32bitový. Pro hodnoty s plovoucí řádovou čárkou jsou akceptovány 32bitové operandy či operandy 40bitové, výsledek je vždy 40bitový. Násobička akceptuje v obou případech (FX i FP) 32bitové vstupní operandy a výsledek je taktéž v obou případech 40bitový.
Základním FP formátem je formát single/float částečně odvozený od formátu specifikovaného ve známé normě IEEE 754. Rozdíly spočívají v odlišném zaokrouhlení, chování některých speciálních hodnot a taktéž v tom, že jak mantisa, tak i exponent jsou vyjádřeny ve dvojkovém doplňku. 32bitové slovo obsahuje 24 bitů mantisy a osm bitů pro exponent. Hodnota exponentu leží v rozsahu –128..127 (u normy IEEE 754 jen v rozsahu –127..126, protože mezní hodnoty jsou rezervovány pro speciální použití – NaN, nekonečna atd.).
Pokud je zapotřebí pracovat s formátem single/float odpovídající přesně normě IEEE 754, lze samozřejmě použít pomalou softwarovou konverzi nebo speciální čip nazvaný TMS320C30-IEEE Floating-Point Format Converter, který dokáže konvertovat data v rychlosti odpovídající rychlosti samotného DSP (tedy z pohledu programátora v reálném čase, pouze se zpožděním).
5. Sada registrů čipu TMS320C30
Sada registrů čipu TMS320C30 je částečně odvozena od sady registrů, s nimiž jsme se setkali u prvního modelu TMS32010. Samozřejmě ovšem muselo dojít k úpravám a rozšířením, které souvisí jak s větší komplexností čipu (výrazně větší množství registrů použitelných pro adresování), tak i s tím, že jak ALU tak i násobička dokáže provádět operace s FX i FP formáty. Pracovní registry tedy mohou obsahovat buď FP hodnotu či FX hodnotu, mezi nimiž lze v případě potřeby provádět konverze pomocí speciálních instrukcí:
Registry | Šířka | Pojmenování | Význam |
---|---|---|---|
R0-R7 | 40 bitů | extender-precision registers | akumulátory pro FX i FP operace |
AR0-AR7 | 32 bitů | auxiliary registers | adresování, počitadla smyček, celočíselné operace |
různé (12×) | 32 bitů | control registers | stavový registr, ukazatel na vrchol zásobníku, maskování přerušení atd. |
Připomeňme si, že u původního čipu TMS32010 byl počet i bitová šířka registrů menší a mnohé registry byly přímo „zadrátovány“ na určitou pevně danou funkci. Povšimněte si rozšíření akumulátoru z jediného registru na osm registrů a taktéž rozšíření adresových registrů ze sady 2×16 bitů na sadu 8×32 bitů:
Registr | Šířka | Použití |
---|---|---|
ACC | 32 bitů | akumulátor, jeden ze vstupů ALU, ukládá se do něj výsledek ALU operace |
T | 16 bitů | vstup do násobičky |
P | 32 bitů | výsledek práce násobičky |
ARP | 1 bit | vybírá AR0 či AR1 při nepřímém adresování |
AR0 | 16 bitů | použit při nepřímém adresování (může se automaticky inkrementovat či dekrementovat) |
AR1 | 16 bitů | použit při nepřímém adresování (může se automaticky inkrementovat či dekrementovat) |
6. Celočíselné operace
Digitální signálové procesory TMS320C30 podporují následující instrukce prováděné v ALU a v násobičce s celočíselnými operandy:
Zkratka instrukce | Význam |
---|---|
ADDI | součet dvou FX hodnot |
ADDC | součet s carry (přenosem) |
SUBI | rozdíl dvou FX hodnot |
SUBB | rozdíl s borrow (výpůjčkou) |
SUBC | rozdíl za podmínky |
SUBRI | rozdíl dvou FX hodnot, otočení obou operandů |
SUBRB | rozdíl s borrow (výpůjčkou), otočení obou operandů |
ABSI | absolutní hodnota |
NEGI | změna znaménka FX hodnoty |
NEGB | změna znaménka s výpůjčkou |
AND | logický součin bit po bitu |
ANDN | logický součin bit po bitu (druhý operand je negován) |
OR | logický součet bit po bitu |
XOR | nonekvivalence bit po bitu |
NOT | negace všech bitů |
ROL | rotace doleva |
ROR | rotace doprava |
ROLC | rotace doleva přes carry |
RORC | rotace doprava přes carry |
ASH | aritmetický posun |
LSH | logický posun |
CMPI | porovnání dvou operandů s nastavením příznaků |
MPYI | součin (tato operace je samozřejmě prováděna v násobičce) |
7. Operace s hodnotami s plovoucí řádovou čárkou
Operace s hodnotami s plovoucí řádovou čárkou jsou pochopitelně odlišné od celočíselných operací, například chybí bitové rotace, posuny, logické operace atd. Na druhou stranu se však objevují nové instrukce pro normalizaci a zaokrouhlení FP hodnoty. Samozřejmě nechybí ani instrukce pro vynásobení dvou FP operandů prováděné v násobičce (se 40 bitovým výsledkem – dojde k rozšíření přesnosti):
Zkratka instrukce | Význam |
---|---|
ADDF | součet dvou FP hodnot |
SUBF | rozdíl dvou FP hodnot |
SUBRF | dtto, ale otočení obou operandů |
ABSF | absolutní hodnota |
NEGF | změna znaménka FP hodnoty |
CMPF | porovnání dvou FP hodnot |
MPYF | vynásobení dvou FP hodnot |
NORM | normalizace FP hodnoty |
RND | zaokrouhlení FP hodnoty |
Pro převod mezi celočíselnými hodnotami (s případnou pevnou řádovou čárkou) a FP hodnotami slouží dvě instrukce:
Zkratka instrukce | Význam |
---|---|
FIX | převod FP → FX |
FLOAT | převod FX → FP |
8. Typické doby trvání základních algoritmů pro zpracování signálu
Pro zajímavost a pro ukázku, jak pečlivě byl TMS320C30 navržen s ohledem na problematiku zpracování signálu, si uveďme typické doby trvání některých optimalizovaných algoritmů. Následující hodnoty byly získány z článku „The TMS320C30 Floating-Point Digital Signal Processor APPLICATION REPORT: SPRA397“, jehož autory jsou Panos Papamichalis a Ray Simar, Jr. Počet slov vyjadřuje počet 32bitových instrukcí nutných pro implementaci algoritmu, sloupce s počtem cyklů pak spodní a horní mez (například u dělení dochází buď jen k posunu či k posunu a rozdílu, proto se minimální a maximální počet cyklů liší):
Algoritmus | Počet slov | Min cyklů | Max cyklů |
---|---|---|---|
Převrácená hodnota FP | 31 | 31 | 31 |
Celočíselné dělení | 27 | 27 | 58 |
Druhá odmocnina | 32 | 35 | 35 |
Matice × vektor | 10 | 2+R(C+9) | dtto |
Skalární součin | 10 | 8+(N-1) | dtto |
FIR | 5 | 7+(N-1) | dtto |
IIR | 7 | 7 | dtto |
Komprese µ-law | 16 | 16 | dtto |
Dekomprese µ-law | 13 | 11 | 16 |
Komprese A-law | 18 | 18 | dtto |
Dekomprese A-law | 15 | 14 | 21 |
9. Digitální signálový procesor TMS320C6701
Výše popsaný DSP TMS320C30 byl jedním z prvních digitálních signálových procesorů zpracovávajících FP hodnoty, ovšem jeho výpočetní výkon pro mnohé aplikace nebyl dostačující. Proto pochopitelně vznikaly další čipy, z nichž si dnes popíšeme TMS320C6701. Z označení tohoto čipu (a při pohledu na tabulku uvedenou v první kapitole) vyplývá, že je tento čip postavený na architektuře VLIW a že je určen pro zpracování FP hodnot. Tyto procesory pracují na vyšších hodinových frekvencích (až 167 MHz) a díky tomu i díky architektuře VLIW je jejich výpočetní výkon mnohem větší, než u původního TMS320C30: teoretický 1 GFLOPS versus 50 MFLOPS u původního čipu.
10. Výkonné jednotky procesoru TMS320C6701
Vysoký výpočetní výkon čipu TMS320C6701 je zajištěn díky použití osmi samostatně pracujících výkonných jednotek:
- Čtyři aritmeticko-logické jednotky pro zpracování hodnot uložených v FP i FX formátu.
- Dvě aritmeticko-logické jednotky pouze pro FX formát.
- Dvě násobičky pro formáty FP i FX. Dokončení každé operace trvá jeden takt.
Zde můžeme vidět, jakým způsobem se vlastně došlo k teoretické maximální výpočetní rychlosti 1 GFLOPS. Existuje celkem šest jednotek pro výpočty s hodnotami reprezentovanými v systému plovoucí řádové čárky (4×ALU+2×násobičky) a maximální hodinová frekvence čipů je 167 MHz (přesněji 166 + 2/3 MHz). Proto maximální počet FP operací provedených za sekundu je roven (166+2/3)×6×106=109 FLOPS, tedy přesně 1 GFLOPS. Ve skutečnosti lze však této rychlosti dosáhnout jen ve chvíli, kdy jsou všechny operandy uloženy v pracovních registrech (akumulátorech) a kdy se skutečně využijí všechny možnosti nabízené architekturou VLIW – osm instrukcí v jednom „dlouhém“ slově, navíc musí být instrukce spuštěny paralelně.
11. Interní struktura čipů TMS320C6701
Zajímavé je, že interní struktura čipů TMS320C6701 je prakticky shodná s čipy popsanými minule. Jediný, zato však pro praxi podstatný rozdíl spočívá v tom, že některé výkonné jednotky zpracovávají FP hodnoty:
+-----------------+-----------------+ | Registry Ax | Registry Bx | +-----------------+-----------------+ ⇅ ⇅ ⇅ ⇅ ⇅ ⇅ ⇅ ⇅ +---+---+---+---+ +---+---+---+---+ |.L1|.S1|.M1|.D1| |.D2|.M2|.S2|.L2| +---+---+---+---+ +---+---+---+---+
Oproti minule popsaným čipům určeným pro zpracování celočíselných signálů se rozšířily možnosti šesti jednotek:
Jednotka | Fixed point | Floating point | Použití |
---|---|---|---|
.L1 | ✓ | ✓ | ALU pro FP i FX, porovnání |
.S1 | ✓ | × | ALU pro FX, skoky, načtení konstant |
.M1 | ✓ | ✓ | Násobička pro FP i FX |
.D1 | ✓ | ✓ | jednoduchá ALU pro FP i FX, load & store |
.L2 | ✓ | ✓ | ALU pro FP i FX, porovnání |
.S2 | ✓ | × | ALU pro FX, skoky, načtení konstant |
.M2 | ✓ | ✓ | Násobička pro FP i FX |
.D2 | ✓ | ✓ | jednoduchá ALU pro FP i FX, load & store |
Další podrobnosti o tomto čipu i o dalších VLIW pro FP operace si řekneme příště.
12. Odkazy na Internetu
- 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 - TMS320C3× User's Guide
https://www.manualslib.com/manual/169818/Texas-Instruments-Tms320c3×.html - 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