Digitální signálové procesory zpracovávající hodnoty s plovoucí řádovou čárkou

19. 1. 2017
Doba čtení: 14 minut

Sdílet

Všechny digitální signálové procesory, které jsme si až doposud popisovali, byly optimalizovány pro zpracování signálů složených z celočíselných vzorků. Existují však i mnohdy velmi výkonné DSP určené pro zpracování hodnot s plovoucí řádovou čárkou.

Obsah

1. Digitální signálové procesory zpracovávající hodnoty s plovoucí řádovou čárkou

2. Historický čip TMS320C30

3. Paralelní spouštění vybraných instrukcí a branch delay slot

4. Moduly čipu TMS320C30

5. Sada registrů čipu TMS320C30

6. Celočíselné operace

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

12. Odkazy na Internetu

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í:

  1. Aritmetická instrukce+instrukce typu store
  2. Logická instrukce+instrukce typu store
  3. Načtení dvou registrů (load+load)
  4. Uložení dvou registrů (store+store)
  5. 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:

bitcoin_skoleni

+-----------------+-----------------+
|   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

  1. VLIW: Very Long Instruction Word: Texas Instruments TMS320C6×
    http://www.ecs.umass.edu/e­ce/koren/architecture/VLIW/2/ti1­.html
  2. An Introduction To Very-Long Instruction Word (VLIW) Computer Architecture
    Philips Semiconductors
  3. VLIW Architectures for DSP: A Two-Part Lecture (PDF, slajdy)
    http://www.bdti.com/MyBDTI/pub­s/vliw_icspat99.pdf
  4. Very long instruction word (Wikipedia)
    https://en.wikipedia.org/wi­ki/Very_long_instruction_word
  5. TMS320C3× User's Guide
    https://www.manualslib.com/ma­nual/169818/Texas-Instruments-Tms320c3×.html
  6. A VLIW Approach to Architecture, Compilers and Tools
    http://www.vliw.org/book/
  7. VEX Toolchain (VEX = VLIW Example)
    http://www.hpl.hp.com/downloads/vex/
  8. Elbrus (computer)
    https://en.wikipedia.org/wi­ki/Elbrus_%28computer%29
  9. Super Harvard Architecture Single-Chip Computer
    https://en.wikipedia.org/wi­ki/Super_Harvard_Architec­ture_Single-Chip_Computer
  10. Digital Signal Processors (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/overview.page
  11. C674× Low Power DSP (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/c6000_dsp/c674×/o­verview.page
  12. TMS320C30 (stránky TI)
    http://www.ti.com/product/tms320c30
  13. TMS320C6722B
    http://www.ti.com/product/tms320c6722b/des­cription
  14. Introduction to DSP
    http://www.ti.com/lit/wp/spry281/spry­281.pdf
  15. The Evolution of TMS (Family of DSPs)
    http://www.slideshare.net/mo­to_modx/theevo1
  16. Datasheet k TMS32010
    http://www.datasheetarchi­ve.com/dlmain/49326c32a52050140ab­ffe6f0ac4894aa09889/M/TMS32010
  17. 1979: Single Chip Digital Signal Processor Introduced
    http://www.computerhistory­.org/siliconengine/single-chip-digital-signal-processor-introduced/
  18. The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
    http://www.tihaa.org/histo­rian/TMS32010–12.pdf
  19. Texas Instruments TMS320 (Wikipedia)
    https://en.wikipedia.org/wi­ki/Texas_Instruments_TMS320
  20. 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
  21. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko.sasktelwebsi­te.net/cpu.html
  22. Introduction to DSP – DSP processors:
    http://www.bores.com/courses/in­tro/chips/index.htm
  23. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspguide.com/
  24. Digital signal processor (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Digital_signal_processor
  25. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Digitální_signálový_pro­cesor
  26. Digital Signal Processing FAQs
    http://dspguru.com/dsp/faqs
  27. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.root.cz/clanky/fixed-point-arithmetic/
  28. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  29. Č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/
  30. Základní aritmetické operace prováděné v FX formátu
    http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/
  31. 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/
  32. FIR Filter FAQ
    http://dspguru.com/dsp/faqs/fir
  33. Finite impulse response (Wikipedia)
    http://en.wikipedia.org/wi­ki/Finite_impulse_response
  34. DSPRelated
    http://www.dsprelated.com/
  35. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  36. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  37. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  38. TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
    https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423
  39. COSC2425: PC Architecture and Machine Language, PC Assembly Language
    http://www.austincc.edu/rblac­k/courses/COSC2425/index.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.