FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ
Mikroprocesorová technika
Garant předmětu: Ing. Václav Michálek, CSc. Autoři textu: Ing. Jiří Šebesta
Mikroprocesorová technika
1
Obsah 1
ČÍSLICOVÉ ZPRACOVÁNÍ SIGNÁLŮ ......................................................................4 1.1 ÚVOD ..........................................................................................................................4 1.2 PRINCIP ČÍSLICOVÉHO ZPRACOVÁNÍ SIGNÁLŮ ..............................................................4 1.2.1 Vzorkování analogového signálu .......................................................................6 1.2.2 Analogově-číslicový převod................................................................................7 1.2.3 Číslicově analogový převod a rekonstrukce diskrétního signálu .......................9 1.3 ZOBRAZENÍ ČÍSEL V DSP TECHNICE ............................................................................9 1.4 SROVNÁNÍ METOD ČÍSLICOVÉHO ANALOGOVÉHO ZPRACOVÁNÍ SIGNÁLŮ ..................15
2
SIGNÁLOVÉ PROCESORY ........................................................................................16 2.1 OBECNÉ VLASTNOSTI SIGNÁLOVÝCH PROCESORŮ .....................................................16 2.2 GENERACE SIGNÁLOVÝCH PROCESORŮ......................................................................17 2.3 SIGNÁLOVÉ PROCESORY ANALOG DEVICES...............................................................19 2.4 SIGNÁLOVÉ PROCESORY FIRMY MOTOROLA ..............................................................20 2.5 SIGNÁLOVÉ PROCESORY FIRMY TEXAS INSTRUMENTS...............................................20 2.6 OBVODY SIGNÁLOVÝCH PROCESORŮ.........................................................................21 2.6.1 Aritmeticko-logická jednotka............................................................................22 2.6.2 Násobička .........................................................................................................24 2.6.3 Jednotka posuvu ...............................................................................................26 2.6.4 Adresní generátor .............................................................................................27
3
APLIKACE SE SIGNÁLOVÝMI PROCESORY ......................................................27 3.1 VÝVOJ APLIKACÍ S DSP .............................................................................................27 3.2 APLIKACE VHODNÉ PRO ZPRACOVÁNÍ DSP ...............................................................29 3.2.1 Aproximace funkcí ............................................................................................29
2
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Seznam obrázků OBRÁZEK 1.1:
TYPICKÉ USPOŘÁDÁNÍ DSP SYSTÉMU S ANALOGOVÝM VSTUPEM I VÝSTUPEM 5
Mikroprocesorová technika
3
Seznam tabulek TABULKA 2.1:
POROVNÁNÍ
RYCHLOSTI KLASICKÝCH A DSP PROCESORU PŘI PROVÁDĚNÍ ZÁKLADNÍCH MATEMATICKÝCH OPERACÍ A FUNKCÍ ..........................................................17
4
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
1 Číslicové zpracování signálů Cíle kapitoly: Seznámit studenty se základy číslicového zpracování signálů, technickými prostředky a metodikou. Definovat formáty reprezentující číselné hodnoty v číslicových systémech.
1.1 Úvod Moderní a progresivní metody zpracování signálů nejen ve sdělovací technice výrazně ovlivňují život naši civilizace. Příkladem je nepochybně rozvoj mobilních komunikací. Od klasických analogových modulačních metod bezdrátového přenosu signálů je vývojový trend směřován ke stále sofistikovanějším metodám digitálních modulací s lepší energetickou bilancí a efektivnějším využitím kmitočtového spektra. Tento přínos však musí být podpořen ekonomicky přístupnou a technickým požadavkům odpovídající technologií zařízení a jejich prvků.
1.2 Princip číslicového zpracování signálů Obecně je proces zpracování signálů pomocí digitálních prostředků nazýván termínem „Číslicové zpracování signálů“. Většina signálů, které je třeba zpracovat číslicovým systémem, však pochází z přírodních zdrojů a má charakter analogového signálu (lidská řeč, fyzikální veličina měřená v čase, rádiový signál zachycený anténou apod.). Před samotným digitálním zpracováním takových signálů je nutno převést signál z analogové podoby na tvar číselné posloupnosti pomocí vzorkování signálu a analogově-číslicového (A/D) převodu. Číslicové zpracování signálů se z hlediska času provádění daných algoritmů dělí na zpracování signálů v pozdější době (Post-Time Processing) a zpracování v reálném čase (Real-Time Processing). V prvním případě je signál nejprve uložen do paměťového media, číslicového (polovodičová paměť, diskový systém) nebo analogového (magnetický pásek), a následně zpracován například výkonným sálovým počítačem. Příkladem může být zpracování signálů z astronomických radioteleskopů, kdy záznam jednotlivých úseků signálu je v libovolném pozdějším čase číslicově zpracováván řadou výkonných počítačů po celém světě. Jiným příkladem může být filtrace zvukovou kartou sejmutého a v paměti počítače uloženého audiofrekvenčního signálu algoritmem v prostředí Matlabu. V případě ukládání signálu v číslicové podobě na digitální paměťové médium je nutno před archivací provést v reálném čase operace vzorkování a A/D převodu. U analogového paměťového média lze čtení signálu provádět podstatně pomaleji a je možno zpracovávat číslicovými metodami i signály s velmi vysokými kmitočtovými složkami. Příkladem mohou být digitální paměťové osciloskopy umožňující zpracování signálů z oblasti mikrovln se zápisem do média na optickém principu. Zpracování v reálném čase se uplatňuje zejména v oblasti komunikace a řízení systémů, kde je nutno znát výsledek zpracování s minimálním zpožděním. Do kategorie zpracování v reálném čase taktéž patří systémy, které mohou signál zpracovávat až po přijetí delšího úseku signálu (posloupnosti číslicového signálu určité délky). Typickým případem je zjišťování kmitočtového spektra signálu pomocí algoritmu FFT. Trvá-li výpočet jednoho bloku FFT dobu kratší než-li sejmutí potřebného množství vzorků (např. 256, 1024 apod.), jedná se o činnost v reálném čase. V opačném případě se následující sousedící blok signálu nestačí zpracovat a nejedná se tedy o činnost v reálném čase. Při blokovém zpracování
Mikroprocesorová technika
5
signálu se hovoří o blokových algoritmech. Pro zpracování v reálném čase je nutné užít vhodný rychlý výpočetní systém. Výhodným řešením může být číslicový signálový procesor. Číslicový signálový procesor DSP (Digital Signal Processor) definuje mikroprocesor nebo mikroprocesorový systém, který je přizpůsoben pro rychlé a pružné zpracování signálu v reálném čase. Koncepčně signálové procesory nejsou určeny jen pro realizaci jednotlivých algoritmů (např. systolické sítě = obvodová realizace požadovaného algoritmu) nebo pro mnohanásobné opakování jednotlivých operací (maticové a vektorové procesory = větší počet funkčních jednotek řeší současně tentýž algoritmus s různými daty). Signálové procesory jsou určeny pro realizaci celé škály algoritmů číslicového zpracování signálů (číslicová filtrace, spektrální analýza, adaptivní zpracování signálu, modulace, algoritmy pro přenos dat, zpracování řeči a obrazů, řízení procesů apod.). Typické blokové schéma systému se signálovým procesorem s analogovým vstupem i výstupem realizující například filtraci signálu či řídící člen regulační soustavy prezentuje obrázek 1.1. Prostřednictvím vytvořeného programu v DSP lze kombinovat provedení různých algoritmů a tím realizovat komplikované a časově náročné metody zpracování signálu. K tomu účelu je přizpůsobena architekturu DSP a do jejich struktury jsou zařazeny funkční bloky, které nejsou běžně aplikovány v klasických mikroprocesorových obvodech.
Obrázek 1.1:
Typické uspořádání DSP systému s analogovým vstupem i výstupem
Důležitým prvkem DSP systému je operace získání číslicové posloupnosti dat reprezentující vstupní analogový signál. Základním předpokladem pro zpracování signálu se spojitým časem diskrétním číslicovým systémem je omezené kmitočtové spektrum vstupního signálu. Druhou podmínkou je pak dodržení vzorkovacího Shanon - Kotělnikova teorému: f S ≥ 2 ⋅ f max ,
( 1.1 )
kde fmax je nejvyšší frekvenční složka vstupního signálu a fs je vzorkovací kmitočet. Pokud charakter signálu nezajišťuje omezení jeho kmitočtového spektra, musíme provést před zpracováním jeho filtraci tzv. antialiazingovým filtrem (viz. obrázek). Pokud bychom tak neučinili, mohlo by dojít k podvzorkování signálu a ztrátě užitečné informace tzv. aliazing. Vstupní filtr bývá obvykle řešen dolnofrekvenční propustí při zpracování nízkofrekvenčních signálů nebo při práci se signálem v základním pásmu. Je však možné zpracovávat i signály např. v mezifrekvenčním pásmu se zaručenou šířkou pásma B ≤ fs/2. Podmínku vzorkovacího teorému je vždy nutno splnit s jistou rezervou, reálný filtr není dokonalý (přechod mezi propustnou a nepropustnou částí kmitočtové charakteristiky). Například audiosignál přicházející na vstup zvukové karty je shora kmitočtově omezen v oblasti okolo 16 kHz při vzorkovacím kmitočtu 44,1 kHz.
6 1.2.1
Fakulta elektrotechniky a komunikačních technologií VUT v Brně Vzorkování analogového signálu
Pokud je první podmínka nutná k digitalizaci signálu splněna, můžeme přistoupit k převodu spojitého analogového signálu na digitální posloupnost dat zpracovávaný signál reprezentující (viz. obrázek 1.2.). Nejprve provedeme operaci vzorkování pomocí vzorkovacího obvodu. Jeho úkolem je v časových okamžicích daných vzorkovací periodou Ts = 1/fs sejmout úroveň (obvykle napěťovou) vstupního signálu. Způsobů vzorkování může být několik základních druhů. Vzorkování 1. druhu nebo také výšková impulsová modulace 1. druhu je metoda, kdy jsou ze signálu se spojitým časem vybírány krátké časové úseky. U vzorkování 2. druhu získáváme signál s výškou (amplitudou) po určitý krátký časový úsek konstantní a úrovní rovnou hodnotě vstupního signálu v okamžiku vzorkování. Ideální vzorkování představuje násobení vstupního signálu posloupností časově ekvidistantně vzdálenými Diracovými impulsy. Posloupnost získaná ideálním vzorkováním odpovídá matematické definici diskrétního signálu.
Obrázek 1.2:
Postup odvození číslicové reprezentace analogového signálu
V praxi je dnes využíváno zejména vzorkování druhého druhu a to vzhledem k procesu převodu analogového vzorku na číslicovou hodnotu. Převod analogového vzorku na digitální tvar určitý čas probíhá (doba ustálení číslicového výstupu), zejména u přesných aproximačních převodníků, a úkolem vzorkovače je sejmutou úroveň vstupního signálu po dobu převodu udržet na vstupu převodníku. Klasické typy vzorkovacích obvodů jsou na obrázku 1.3. Nejjednodušší je metoda s integračním článkem, kdy se přes vstupní rezistor nabíjí (ale také vybíjí) kapacitor C. Vstupní odpor musí být volen kompromisně. Nesmí být příliš malý, aby nezatěžoval zdroj vstupního signálu, ani nesmí být naopak velký, vzhledem odezvě na prudkou úrovňovou změnu vstupního signálu. Volba prvků integračního článku
Mikroprocesorová technika
7
bude záviset na daném vzorkovacím kmitočtu a požadovaném rozlišení signálu v číslicové podobě. Moderní vzorkovací obvody využívají obvody se spínanými kapacitory. Změnou taktovacího kmitočtu přepínače lze docílit využití tohoto obvodu pro široký rozsah vzorkovacích kmitočtů i digitálního rozlišení signálu. Na vstupu vzorkovače je obvykle umístěn analogový spínač řízený vzorkovacím kmitočtem. Jeho nutná doba otevření v okamžiku vzorkování závisí na přechodové charakteristice vzorkovače. Čím kratší je tato doba, tím více se blížíme ke splnění podmínek pro vzorkování druhého druhu (ustálení na konstantní výstupní úroveň proběhne rychleji).
Obrázek 1.3:
Vzorkovač se integračním článkem a se spínaným kapacitorem
1.2.2 Analogově-číslicový převod Po navzorkování signálu jsme získali v jistém smyslu diskrétní tvar vstupního analogového signálu a dalším krokem je převod na číselnou posloupnost. Analogově-číslicový převodník ADC (Analog to Digital Converter) může být také označen termínem kvantovač. Jeho funkcí je převést vstupní diskrétní signál na číslicovou hodnotu ze spočetné množiny čísel. Množina všech možných hodnot zobrazení signálu v digitální formě odpovídá kvantovacím úrovním převodníku. Pro určitou hodnotu vstupního signálu musí vždy převodník najít nejbližší kvantovací úroveň a prezentovat ji na výstupu její číselnou podobou. Po vzorkování získáváme signál diskrétní v čase, po A/D převodu signál diskrétní i v hodnotě (napětí). V praxi se nejčastěji setkáme s převodníky s ekvidistantně nastavenými kvantovacími hladinami. Například 8 bitový A/D převodník bude mít 256 kvantovacích úrovní reprezentovaných 28 číselnými hodnotami. Nepřesnost, které se dopouštíme tím, že hodnotu signálu v daném vzorkovacím okamžiku nahradíme (zaokrouhlíme) určitou kvantovací hladinou, se projeví vznikem kvantovací chyby (šumu). Na obrázku 1.2 je definována rozdílem diskretizovaného a digitalizovaného signálu. Maximální napěťová velikost absolutní hodnoty kvantovací chyby je rovná polovině rozdílu dvou sousedních kvantovacích hladin. V číslicovém vyjádření rozdíl dvou sousedních kvantizačních hladin odpovídá nejméně významné bitové pozici LSB (Least Significant Bit), což odpovídá nejmenšímu kroku při číslicovém zobrazení signálu. Samotný kvantizační šum se projeví pouze u ideálního převodníku. Skutečný převodník je navíc zatížen dalšími typy chyb. Statickými chybami A/D převodníku, které se projevují při převodu statických ss. signálů, jsou chyba ofsetu, chyba zisku a integrální a diferenciální nelinearita. Z hlediska dynamického rozsahu se uplatňují chyby nelinearity. Jejich definice je však poněkud
8
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
těžkopádná a v praxi se setkáme s tzv. zkreslením nízkého a vysokého řádu. Zkreslení nízkého řádu je analogické k nelineárnímu harmonickému a intermodulačnímu zkreslení u analogových obvodů. Přenosovou funkci lze vyjádřit polynomem nízkého řádu. Úroveň nežádoucích složek se snižuje při poklesu úrovně vstupních signálů a jejich kmitočty jsou dány vstupními frekvencemi (harmonické a intermodulační produkty). Rozdíl mezi skutečným zkreslením A/D převodníku a zkreslením nízkého řádu vyjadřuje zkreslení vysokého řádu. Úroveň složek tohoto zkreslení nemá jednoznačný vztah k hodnotám vstupních signálů a při zpracování signálů s malou vstupní amplitudou mohou být úrovně těchto parazitních produktů větší než složky samotného signálu určeného ke zpracování. K potlačení nežádoucích složek zkreslení vznikajících při A/D převodu se používají různé metody. Jednou z nejznámějších je dithering, metoda při níž se ke vstupnímu signálu přidává vhodná úroveň šumu nekorelovaného se signálem zpracovávaným, což způsobí znáhodnění parazitních složek a potlačení jejich spektrálních čar s velkou úrovní. Dynamický rozsah ideálního převodníku (s ekvidistantně vzdálenými sousedními kvantizačními hladinami) je obecně definován pouze počtem výstupních bitů n a platí pro něj vztah: DR = 6,02 ⋅ n + 1,76
( 1.2 )
Dynamický rozsah představuje maximální dosažitelný poměr signál šum S/N při plném využití vstupního rozsahu převodníku, tj. vstupní signál zesílen na maximální úroveň při níž nedochází k jeho limitaci převodníkem. Pro reálný převodník lze zpětně podle vztahu (1.2) určit tzv. počet efektivních bitů ze zjištěného (změřeného) dynamického rozsahu, který je závislý zejména na kmitočtu (chyba Aperture Jitter) zpracovávaného signálu. Prakticky to znamená, že u 12-ti bitového převodníku bude počet efektivních bitů pro vstupní signál o frekvenci 1 MHz 11,5 a pro kmitočet 50 MHz už jen 8,3.
Obrázek 1.4:
A/D převodník s přímou konverzí a se Σ-∆ modulátorem
Existují metody využívající neekvidistantní rozložení kvantovacích hladin (robustní kvantování), které umožňují dynamický rozsah zvýšit při stejném počtu kvatovacích hladin. Na obr.1.4 jsou prezentovány dva nejběžnější typy A/D převodníku. Velmi rychlé převodníky se nejčastěji realizují strukturou přímé konverze a jejich odvozenin. Převodník s přímou konverzí obsahuje 2n - 1 komparátorů, na jejichž jednu svorku jsou přiváděna napětí odpovídající rozhodovacím hladinám (střední úrovně mezi sousedními kvantizačními hladinami), určená rezistorovou sítí napájenou z referenčního zdroje napětí. Aktivní (výstup např. v log. "1") budou všechny komparátory s rozhodovacím referenčním napětím menším
Mikroprocesorová technika
9
než úroveň napětí vstupního signálu. Dekodér stav z komparátorů převede na určený formát číslicového výstupu, který je dále zachycen ve výstupním registru pro zpracování digitálním systémem. Zapojení převodníku se Σ-∆ modulátorem generuje výstupní n-bitové číslo postupně pomocí zpětnovazebního jednobitového číslicově-analogového převodníku DAC (Digital to Analog Converter) a integrátoru. Převod probíhá tak dlouho, dokud na výstupu integrátoru není vyvážené napětí (nulová úroveň). Ze získané posloupnosti na výstupu komparátoru číslicový filtr vygeneruje číslicový tvar vstupního signálu. Tyto převodníky umožňují především dosáhnout velmi vysokého rozlišení (až 24 bitů) a často se s nimi setkáváme u kodeků pro špičkové HiFi akustické aplikace. 1.2.3
Číslicově analogový převod a rekonstrukce diskrétního signálu
Po zpracování signálu v DSP systému příslušnými algoritmy je často nutno získat výsledek opět v analogové podobě. U těchto aplikací je za číslicovým systémem zařazen D/A převodník který z posloupnosti čísel vytvoří "diskrétní" analogový signál se schodovitým průběhem (tj. v čase spojitý, v amplitudě diskrétní). Každá bitová pozice v číslicovém signálu reprezentuje určitou aditivní část výstupní analogové veličiny. Jednoduchý D/A převodník lze tedy realizovat např. n napěťovými referenčními zdroji, které jsou přes spínači ovládané jednotlivými bity číslicového vstupu přivedeny do součtového obvodu. Na výstupu součtového obvodu získáváme analogový obraz vstupní číslicové veličiny. Abychom získali signál spojitý i v amplitudě, je nutno za D/A převodník zařadit rekonstrukční filtr (viz obr. 1.1). Jeho úkolem je odstranit ze schodovitého průběhu vyšší kmitočtové složky (vyhladit průběh) v souladu se Shanon - Kotělnikovým teorémem (vztah (1.1)). V praxi tedy použijeme dolnofrekvenční propust se zlomovým kmitočtem menším, než-li je polovina vzorkovací frekvence. Opět je nutno vzorkovací kritérium splnit s rezervou, aby nemohlo dojít k nežádoucím projevům aliazingu.
1.3 Zobrazení čísel v DSP technice K vyjádření hodnot číslicových signálů, koeficientů, vzorků na výstupu A/D převodníků nebo vstupu D/A převodníků se využívá vhodných číselných soustav. V DSP systémech s pevnou řádovou čárkou (Fixed Point Systems) je standardně používán doplňkový kód (dvojkový doplněk). Z praktických důvodů při operaci kvantování byl zaveden formát dvojkového doplňku pracujícího pouze s desetinnou částí. Nejvyšší bit MSB (Most Significant Bit) je nositelem znaménka. Záporná čísla mají nejvyšší bit roven "1", kladná "0". Ostatní bity vyjadřují mantisu v desetinném tvaru. Mezi MSB pozicí a pozicí MSB-1 je tedy definována fixní desetinná čárka. Dekadický ekvivalent pro kladná čísla s mantisou o délce b bitů je definován vztahem:
y =
b
∑
i =1
x i ⋅ 2 −i
( 1.3 )
kde xi je binární hodnota bitu na pozici i, přičemž pozice 0 odpovídá MSB a pozice b odpovídá LSB. Příklad 1.1:
Reprezentace kladného čísla ve dvojkovém doplňku
Osmibitové číslo 01100010 v doplňkovém kódu reprezentuje dekadickou hodnotu:
10
= = =
Fakulta elektrotechniky a komunikačních technologií VUT v Brně 0. + + +
1 1 -1 (1⋅2 + 1⋅2-2 + (0,5 + 0,25 0,765625
0 0⋅2-3 +
0 0 -4 0⋅2 + 0⋅2-5 + + 0,015625
1 1⋅2-6 +
0 0⋅2-7) )
U záporných čísel je desetinná mantisa inverzí mantisy kladného čísla zvýšená o 1 (přičtení 1 k LSB) a dekadický ekvivalent pro záporná čísla s mantisou o délce b bitů je definován vztahem:
y =
b
∑x i =1
Příklad 1.2:
i
⋅ 2 −i − 1
( 1.4 )
Reprezentace záporného čísla ve dvojkovém doplňku
Dekadické číslo vzniklé obrácením znaménka z předchozího příkladu –0,765652 bude v doplňkovém kódu zapsáno tvarem 10011110. Změnili jsme bit MSB (záporné znaménko) a invertovali všechny bity mantisy (0011101) a k těmto invertovaným bitů přičetli 1, tj. 0011101 + 0000001 = 0011110. Provedeme kontrolu podle definice 1. = = = =
-1 ( -1
0 (0⋅2-1 +
0 0⋅2-2 +
1 1⋅2-3 +
1 1⋅2-4 +
1 1⋅2-5 +
0,125 +
0,0625+
0,03125+ 0,015625
0,234375
1 1⋅2-6 +
-1
-0,765625
Obrázek 1.5:
Generování a řazení hodnot doplňkového kódu pro délku slova 4 bity
0 0⋅2-7) )
Mikroprocesorová technika
11
Výhodou doplňkového kódu je snadná manipulace při aritmetických operacích, neboť odpovídá klasické práci s binární číselnou soustavou a vyjádření nuly je reprezentováno nulami na všech bitových pozicích tak jako u binárního čísla. Tato situace je přehledně znázorněna na obrázku 1.5. Nejvyšší kladné číslo zobrazitelné doplňkovým kódem je 1-2-b, kde b je počet bitů mantisy. Největší záporné číslo v doplňkovém kódu je -1. Při bližším pohledu na doplňkový kód desetinného vyjádření dekadického čísla zjistíme, že číslem s b bity mantisy lze reprezentovat všechna desetinná čísla menší než 1 a současně větší nebo rovna –1 vyjádřitelná zlomkem, v jehož jmenovateli bude 2b. Nejmenší krok, rozdíl mezi sousedními dekadickými číselnými hodnotami, bude roven 1/2b. Často se hovoří o zlomkovém doplňkovém kódu. Na obrázku 1.5 pro kód se třemi mantisovými bity je krok 1/8, tj. 0,125. Pokud bude digitální systém pracovat s reprezentací čísel v doplňkovém kódu, lze z pohledu programátora chápat dekadická čísla nejen ve zlomkovém tvaru, ale také například ve tvaru celých čísel, když pomyslně přesuneme desetinnou čárku až za LSB pozici. S tím to vyjádřením jste se již setkali u klasických mikroprocesorů. Samozřejmě je možné desetinnou tečku přesunout na jakoukoli mezipozici v mantise. Procesor fyzicky žádnou desetinnou čárku nerespektuje a je jen na programátorovi jakým způsobem bude desítková čísla prezentovat. Důvod proč je přednostně využíváno zlomkové vyjádření je prostý. Snadno se s těmito hodnotami operuje s ohledem na rozsah zobrazení. Například násobení dvou čísel v absolutní hodnotě menších než jedna je opět číslo v absolutní hodnotě menší než jedna atd. Při větším množství aritmetických operací s použitím vyjádření v celých číslech můžeme velmi rychle ztratit orientaci v jakém řádu se pohybujeme a udělat chybu. Například násobením dvou 16bitových čísel sign(x)·x/215 a sign(y)·y/215 (tj. 1 bit znaménko + 15 bitů mantisa) získáme 1 znaménkový bit určený funkcí XOR mezi znaménkovými bity obou operandů a 30bitovou mantisu reprezentující zlomek ve tvaru r/230 = (x·y)/2(15+15). Konkrétní tvar uložení (1+30)bitového čísla ve výstupním registru násobičky je provedeno tak (do registru s délkou 32 bitů), aby nejvyšší bit odpovídal znaménku a dále následovala mantisa. LSB bit zůstává „0“, výsledná mantisa je jen 30bitová. Při další operaci s výsledkem se může použít jen horní polovina registru (16 bitů), čímž získáme opět operand ve tvaru 1 bit znaménko a 15 bitů mantisa (Fractional Format). Násobičky v signálových procesorech samozřejmě umožňují použít i jiný typ formátu dat, např. celá čísla bez znamének (Integer Format) nebo i kombinaci s znaménkovým formátem, který program oznámí násobičce příslušným tvarem instrukce. Další pozitivní vlastností doplňkového kódu je, že při překročení rozsahu zobrazení při sčítání či odečítání nedojde k chybě, jestliže při následující součtové (rozdílové) operaci padne výsledek opět do správného rozsahu. Příklad 1.3:
Ukázka výhodných vlastností doplňkového kódu při přetečení
Sčítejme čísla +0,785, +0,375 a –0,750 reprezentovaná v doplňkovém kódu se 3bitovou mantisou Dekadická soustava 0,875 + 0,375 --------------------------= 1,250 (přetečení) + 0,750 --------------------------= 0,500
Doplňkový kód 0.111 + 0.011 ------- ---------------= 1.010 + 1.010 ------- ---------------= (1) 0.100 ↑ zanedbáme
12
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Vyjádření desítkového čísla v doplňkovém kódu se v odborné literatuře označuje termínem „formát C.D“, kde C určuje počet bitů doplňkového kódu před desetinnou čárkou včetně znaménkového bitů a D počet bitů v desetinné části. 16bitový „fractional“ formát, tj. vyjádření se znaménkem a zlomkovou reprezentací (jen desetinná část mantisy), nese označení formát 1.15. „Integer“ formát, pouze celá čísla bez znaménkového bitu, 16.0 (rozsah zobrazení celých dekadických čísel od 0 do 65535) atd.. Pro maximální rozlišení např. koeficientů si programátor může definovat vlastní formát, tak aby postihl všechny možné hodnoty, se kterými může pracovat. Vlastní definice znaménkového formátu 13.3 představuje znaménko + dvanáctibitovou mantisu před desetinnou čárkou + tříbitovou mantisu za desetinnou čárkou a lze tudíž zobrazit dekadická čísla v rozsahu od –4096 do +(4096-⅛) s rozlišením po ⅛. Převod na jiný formát, který akceptuje jiná dílčí část programu, se provede aritmetickým bitovým posuvem čísla patřičným směrem o patřičný počet bitů. Binární reprezentaci čísla s pohyblivou řádovou čárkou lze vyjádřit vztahem:
X = M ⋅ 2E ,
( 1.5 )
kde M je mantisa a E je exponent. Mantisa i exponent jsou obvykle vyjádřeny v doplňkovém kódu. Z důvodu co největší přesnosti a optimálního využití zobrazení mantisy je mantisa normalizována. Normalizace mantisy je operace, při které je snaha umístit hodnotu mantisy do intervalu 0,5 ≤ M > 1, čímž informaci o hodnotě ponesou všechny její bity. Kdybychom pracovali s mantisou s řádem např. 10-3, část nejvyšších bitů by se na tvorbě dekadické hodnoty vůbec nepodílela, což by přineslo zhoršení rozlišení, resp. přesnosti. Příklad 1.4:
Reprezentace desítkového čísla v kódu s pohyblivou řádovou čárkou
Vyjádřeme dekadické číslo 3,14 v doplňkové reprezentaci s pohyblivou řádovou čárkou. Nalezneme nejbližší vyšší hodnotu dvojkového exponentu 2E, což je 4 = 22. E je tedy 2, ve dvojkovém doplňkovém tvaru např. 10.0. Mantisou je třeba vyjádřit číslo 3,14/22, což je 0,785 a ve dvojkovém doplňku 0.1110. Celkový zápis provedeme přehledně takto:
3,14 d = 0 .1110 ⋅ 2 10 .0 .
( 1.6 )
V číslicovém systému je číslo s pohyblivou řádovou čárkou opět vyjádřeno jako celé číslo s pomyslným (vhodným) umístěním řádových čárek pro mantisu a exponent. V mikroprocesorech bývá délka exponentu volena asi 25% celkové délky vyjádření čísla. Operace nad mantisou probíhají podobně jako v systémech s pevnou řádovou čárkou. S exponenty se provádějí operace poněkud odlišné. Při sčítání dvou čísel je nutno převést operandy na vyjádření se stejnými exponenty a poté mantisy sečíst. Exponent ve výsledku se shoduje s exponentem operandů. V případě násobení se mantisy obou čísel násobí a exponenty sčítají. Po provedení aritmetické operace se obvykle provádí normalizace, abychom výsledek ukládali do výstupního registru v co nejpřesnějším formátu(snaha obsadit nejvýznamnější bity mantisy). Většina signálových procesorů s plovoucí řádovou čárkou používá standardizovaný formát ANSI/IEEE 754 definovaný v roce 1985. Tento formát má délku 32 bitů, jeden bit pro znaménko, 8 bitů pro exponent a 23 bitů pro mantisu (viz obrázek 1.6).
Mikroprocesorová technika
Obrázek 1.6:
13
Bitové rozložení složek formátu ANSI/IEEE754
Exponent je zobrazen v „integer“ formátu 8.0 a jeho rozsah je od 0 do 255. Mantisa je reprezentována ve formátu bez znaménka (znaménko je na bitové pozici 31) 0.23 a nejmenší krok je tedy .
∆=
1 1 = ≅ 1,2 ⋅ 10 − 7 . 23 2 8388608
( 1.7 )
Vlastní dekadická hodnota, kterou mantisa vyjadřuje, je povýšena o 1 (tzv. skrytá 1), což odpovídá rozsahu zobrazení od 1 do přibližně 2 s výše uvedenou rozlišovací schopností. Exponent je upraven odečtením hodnoty 127 a rozsah upraveného exponentu je od –127 do 128. Nyní již známe všechna pravidla generace čísel ve 32bitovém formátu ANSI/IEEE 754 a můžeme vytvořit definiční vztah:
X = (− 1) ⋅ (1 + M ) ⋅ 2 ( E −127 ) , S
( 1.8 )
kde X je dekadické číslo, S je obsah znaménkového bitu, M je mantisa bez úpravy ve formátu 0.23 a E je exponent ve znaménkovém formátu 8.0. Největší kladné zobrazitelné číslo je
8388607 128 129 38 X max = 1 + ⋅ 2 ≅ 2 ≅ 6,8 ⋅ 10 8388608
( 1.9 )
a nejmenší kladné je
X min = 1⋅ 2−127 = 2−127 ≅ 5,9 ⋅ 10−39 . Příklad 1.5:
( 1.20 )
Reprezentace desítkového čísla v kódu ANSI/IEEE 754
ANSI/IEEE 754 kód ve tvaru 0 00001010 11000000000000000000000 reprezentuje desítkové číslo + 2(10-127) · (1 + 0,75) = + 2-117 · 1,75 = + 1,053242938 · 10-35 Dynamický rozsah zobrazení daného formátu čísel R je definován podílem maximálního kladného a minimálního kladného čísla. Dynamický rozsah zobrazení bývá udáván logaritmickém měřítku (v dB). Pro systémy s pevnou řádovou čárkou se zlomkovým doplňkovým kódem je maximální kladná hodnota zobrazitelného čísla 1-2-b, minimální pak
14
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
2-b, kde b je počet bitů mantisy. Dynamický rozsah zobrazení je tedy určen počtem bitů mantisy b:
Xmax 1− 2−b 1 R = 20log = 20log −b ≅ 20log −b = b ⋅ 20log2 = 6,02⋅ b 2 2 Xmin
( 1.21 )
Pro desítibitovou mantisu je R asi 60 dB, pro 15bitovou pak 90 dB. U systémů s pohyblivou řádovou čárkou s formátem typu ANSI/IEEE 754 s délkou mantisy bM a délkou exponentu bE bude mít největší zobrazitelné kladné číslo hodnotu:
(
)
X max= 2 − 2 − bM ⋅ 2 (2
( bE −1 )
) ≅ 2 (2 (
bE −1 ) +1
)
,
( 1.22 )
nejmenší kladné pak
X min= 1⋅ 2 (
) = 2−(2(
− 2 ( bE −1 ) −1
)
bE −1 ) −1
.
( 1.23 )
Dynamický rozsah zobrazení je tentokrát určen pouze délkou exponentu bE: bE X max 2(2 +1) R = 20 log = 20 log −(2(bE −1) −1) = 20 log 22 = 6,02 ⋅ 2bE X min 2
( bE −1)
( 1.24 )
Dvaatřicetibitový formát ANSI/IEEE 754 poskytuje dynamický rozsah zobrazení přibližně 6·256 = 1536 dB. Při aritmetických operacích v pevné řádové čárce s operandy a konečnou délkou slova musíme sledovat, jakým způsobem upravíme výsledek, případně koeficient. Ve stati, kde se hovořilo o násobení dvou operandů v pevné řádové čárce, jsme zjistili, že výsledek bude mít délku danou součtem délek vstupních operandů (16b + 16b = 32b). Pro další zpracování je 32bitový výsledek příliš dlouhý a je třeba použít pouze vyšší významovou polovinu nebo jen 10 nejvýznamnějších bitů výsledku, je-li určen k převodu 10bitovým D/A převodníkem do analogového tvaru. Existují dva způsoby zkrácení čísel, usekávání a zaokrouhlování. Při usekávání je jednoduše bráno v úvahu jen b nejvýznamnějších užitečných bitů bez ohledu na zanedbanou část. Při zaokrouhlování se provádí kontrola nejvyššího bitu zanedbávané části a podle jeho obsahu je rozhodnuto, zda se k výsledku přičte binární „1“ – zaokrouhlení nahoru či nepřičte – zaokrouhlení dolů. Podrobnější rozbor i s ohledem na vznik chyb čtenář nalezne v odborné literatuře.
Mikroprocesorová technika
15
1.4 Srovnání metod číslicového analogového zpracování signálů Principielním omezením číslicových metod zpracování signálů je limitace rozsahu kmitočtu zpracovávaného signálu do poloviny vzorkovacího kmitočtu. S rozvojem nových technologií integrovaných obvodů a výpočetní techniky roste významně nejvyšší technicky realizovatelný vzorkovací kmitočet a v současné době dosahuje ve špičkových aplikacích stovek MHz až jednotek GHz. Největší technologický problém nastává u realizace rychlých A/D a D/A převodníků. Při velmi vysokých vzorkovacích frekvencí musíme počítat s menším dynamickým rozsahem získané číslicové formy signálu. Určitý problém při realizaci systému pro číslicové zpracování signálu přináší zajištění omezenosti spektra zpracovávaných analogových signálů. Použití analogového filtru limituje rozsah použití systému pro širší skupinu signálů. Nutnosti zařazení antialiasingového filtru se často předchází volbou dostatečně vysokého vzorkovacího kmitočtu s následnou číslicovou filtrací a decimací (ponecháním pouze každého k-tého vzorku). Tento princip využívají kodeky pro audioaplikace, u nichž je možné programově volit vzorkovací frekvenci např. od 8 kHz (pro aplikace v telekomunikacích) až do 96 kHz (pro špičkové akustické systémy). Do osmdesátých let byla hlavní překážkou obecnějšího použití číslicových metod zpracování signálů cena příslušných zařízení. S rozvojem techniky vysoké integrace zvláště v oblasti číslicové techniky tato překážka postupně mizí a v současné době řad aplikací, v nichž se číslicového zpracování užívá nejen pro lepší technické parametry, ale i z ekonomických důvodů. Dosavadní těžiště využití číslicového zpracování v náročných, např. vědeckých a vojenských aplikacích a v investičních celcích přechází postupně i do oblastí multimediálních aplikací, spotřební elektroniky (např. technika kompaktních disků, číslicové zpracování obrazových signálů). Lze tedy očekávat s tím spojený nárůst hromadné výroby a další rychlý pokles cen. Mezi zásadní výhody číslicových metod zpracování signálů před analogovými patří flexibilita číslicových systémů. Charakteristiky diskrétního systému jsou dány konstantami, které lze snadno měnit. Přeladění frekvenční charakteristiky lze dosáhnout přeprogramováním konstant či dokonce pouhou změnou vzorkovacího kmitočtu. U systémů realizovaných číslicově je funkce dána vnitřním programem a je možno změnou tohoto programu (např. volbou různých programových větví) dosáhnout zcela libovolné změny funkce a tím i charakteristik systému. Dalším podstatným kladem číslicové techniky je časová stálost. Vlastnosti systému jsou dány programem a konstantami a nemůže dojít ke změně charakteristiky zpracování vlivem stárnutí, změn teploty, tlaku apod. Číslicové zpracování signálů a dat je proto dokonale reprodukovatelné. Odpadá jakékoliv nastavování a ladění, nutné obvykle u každého realizovaného analogového zařízení. Časově neomezená paměť číslicových systémů poskytuje možnost zpracovávat i velmi "pomalé" signály (např. při řízení rozsáhlých výrobních celků s časovými konstantami sekund až týdnů, popř. dokonce historická, ekonomická či astronomická data s periodami dnů či roků). Současně jsou digitální paměťové prvky pro dlouhé časové konstanty technicky daleko spolehlivější a nesrovnatelně snáze realizované než rozměrné paměťové prvky analogové s velkými hodnotami indukčností a kapacit. U číslicových systémů zcela odpadají problémy vzájemného ovlivňování spolupracujících bloků, které je třeba řešit u analogových soustav (impedanční přizpůsobení apod.). Obecně představuje vazba mezi jednotlivými bloky číslicového systému pouhou datovou komunikaci. Neméně podstatnou výhodou je snadná slučitelnost s informačními systémy, daná podstatou funkce a jednoduše dosažitelnou datovou kompatibilitou, a možnost multiplexního provozu. U systémů, jejichž výkonnost je vyšší, než vyžaduje zpracování jednoho signálu, lze v časovém multiplexu řešit více úloh zpracování signálů. Naopak je možno relativně snadno realizovat paralelní struktury pro zpracování velmi náročných úloh.
16
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
2 Signálové procesory Cíle kapitoly: Seznámit studenty s architekturou číslicových signálových procesorů a představit některé typy dostupných DSP
2.1 Obecné vlastnosti signálových procesorů Koncepce digitálních signálových procesorů je založena na principech harvardské architektury podobně jako například u mikroprocesorů řady MCS51 nebo PIC. Signálový procesor (viz. obrázek 2.1) charakterizuje oddělená paměť programu od paměti dat a použití zřetězeného zpracování instrukcí (Pipelining), které se před zpracováním ukládají do fronty rychlé vyrovnávací paměti CACHE. Ve struktuře matematických výkonných bloků je mimo aritmeticko-logické jednotky (ALU) zařazena i hardwarová násobička, případně jednotka aritmetického a logického posuvu. DSP obsahuje několik datových a adresních sběrnic (jeden pár pro přesun instrukcí z programové paměti a jeden či více párů pro přesun operandů z a do paměti dat). Řízení vstupních a výstupních (I/0) jednotek je odděleno od řízení signálového procesoru. DSP jsou procesory s omezeným instrukčním souborem RISC s dobou provedení instrukce o délce jednoho nebo dvou instrukčních cyklů.
Obrázek 2.1:
Typická bloková struktura DSP
Mikroprocesorová technika
17
Konkrétní typy jednotlivých výrobců se liší výpočetním výkonem, kapacitou a vybavením dílčích funkčních bloků DSP architektury. Názornou představu o možnostech a výkonu signálového procesoru z hlediska řešení matematických operací poskytuje tabulka 2.1. Porovnáním lze zjistit, že dnes spíše podprůměrný signálový procesor třetí generace dosahuje většího výkonu při zpracování matematických operací a funkcí než klasické procesory pro PC a to s menším příkonem. Příčinou je optimalizované jádro pro práci s aritmetickými úlohami. V dnešní době již technologie a schopnosti klasických procesorů dále mílovými kroky postupují k dokonalosti, avšak signálové procesory nezaostávají jak zjistíme dále. Tabulka 2.1:
Matematická operace R = X+Y R = X⋅Y R = X:Y R = X2 R = log (X) R = exp (X) R = XY R = sin (X) R = arctan(X)
Porovnání rychlosti klasických a DSP procesoru při provádění základních matematických operací a funkcí Potřebný čas v µs pro provedení operace se 16 bitovými operandy 80286 80486 PENTIUM TMS320C40 -12 MHz - 33 MHz - 100 MHz - 40 MHz 33 2,5 0,5 0,1 35 2,5 0,5 0,1 49 4,5 0,87 0,8 45 5,3 1,3 0,9 186 19 3,4 1,7 246 25 5,5 1,7 311 31 5,3 2,4 262 30 6,6 1,1 168 21 4,4 2,2
Výkonnost DSP se hodnotí pomocí zkušebních úloh (Benchmarks). V katalozích signálový procesorů můžeme najít hodnocení z hlediska rychlosti řešení typických úloh číslicového zpracování signálů (FIR filtr, algoritmus FFT apod.). Tento přístup umožňuje vývojovému pracovníkovi najít optimální typ procesoru pro řešení daného projektu. Obecně se výkonnost výpočetních systémů určuje jednoduše pomocí počtu instrukcí, které testovaný systém zpracuje za jednotku času. V literatuře se setkáme s jednotkou IPS (Instruction per Second) pro zařízení pracující v pevné řádové čárce, násobné jednotky jsou KIPS (210IPS), MIPS (220IPS) atd. U systémů s pohyblivou řádovou čárkou se setkáme s jednotkou FLOPS (Floating-Point Operation per Second) a jejich násobnými tvary KFLOPS, MFLOPS atp.
2.2 Generace signálových procesorů Podobný vývoj jako u klasických mikroprocesorů proběhl také u signálových procesorů. Nejprve byla snaha realizovat jejich strukturu z mikroprocesorových řezů a podpůrných specializovaných součástek. Po překonání technologických bariér dospěli výrobci k jednočipové verzi. Prvním pokusem přizpůsobit strukturu mikroprocesoru pro zpracování signálů byl signálový procesor I2920/21 firmy Intel v roce 1979. Tento procesor nezískal větší uplatnění, neboť výrobce nenarušil posloupnost analogových operací, pouze v jednom nebo několika blocích bylo vnitřní zpracování signálu provedeno číslicově. Na čipu byl umístěn devítibitový A/D a D/A převodník, jehož vzorkovací kmitočet závisel na délce programu. Bylo velmi nutné oddělit analogové a číslicové obvody procesoru, neboť šum číslicových obvodů mohl nepříznivě ovlivňovat přenos A/D převodu. Na čipu chyběla
18
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
hardwarová násobička a násobení bylo možné realizovat jen programově. Přes všechny tyto nedostatky měl signálový procesor I2920 jednoduchý programovací jazyk a bylo již možné realizovat i složitější algoritmy, např. číslicový filtr typu IIR až 20. řádu pro vzorkovací kmitočet kolem 13 kHz. Při aplikaci bylo kromě základního integrovaného obvodu požadováno jen velmi málo doplňujících součástek (krystal, kondenzátor vzorkovacího obvodu apod.). Skutečně prvním signálovým procesorem s charakteristickou harvardskou architekturou, která již odpovídala požadavkům zpracování číslicového signálu v reálném čase, byl signálový procesor µPD 7720 firmy NEC z roku 1980. Od té doby se vyvinuté signálové procesory člení do několika generací. Toto dělení však není striktně ohraničené. Parametry jednotlivých typů nemusí zrovna odpovídat generaci, do které byly zařazeny. Každý výrobce si vlastní výrobky řadí podle vlastních kritérií. Obecně byly zvoleny tři stupně dělení. První generaci tvoří prvotní typy signálových procesorů. Do druhé generace jsou zařazeny moderní typy signálových procesorů s pevnou řádovou čárkou a do třetí generace procesory s pohyblivou řádovou čárkou. Signálové procesory první generace (1979 - 1985) se vyznačují již harvardskou architekturou s oddělenou datovou a programovou sběrnicí. Ve struktuře je zařazena hardwarová násobička. Aritmeticko-logická jednotka provádí výpočet pouze v pevné řádové čárce. Rychlosti zpracování se dosahuje systémem více vnitřních sběrnic avšak nepoužívá se ještě ve větší míře proudové zpracování instrukcí. Až na některé výjimky (TMS 32010) není možné vnitřní paměti rozšířit připojením pamětí vnějších. Programovací jazyk je podobný jazyku symbolických adres. Zápis programu a jeho odladění v daném systému vyžadovalo znalost nejen jazyka signálového procesoru, ale i znalost struktury obvodu. Styk s vnějšími obvody je realizován sériovým nebo paralelním kanálem kompatibilním s mikroprocesory typu I8080 apod. Pro výrobu byla většinou použita technologie typu NMOS. Signálový procesor pracuje v nekonečné smyčce, která je přerušena příchodem vstupního vzorku. Po jeho zpracování se opět čeká ve smyčce na další vzorek. Z toho plyne, že signálový procesor provádí pouze výpočet algoritmu zpracování signálu a ostatní činnosti musejí být zajištěny např. nadřazeným procesorem nebo počítačem. Mezi představitele této generace patří již zmiňovaný I2920 (Intel), µPD7720 a µPD77C25 (NEC) a TMS32010 (Texas Instruments). Signálové procesory druhé generace (1983 - dosud) požívají také aritmetiku v pevné řádové čárce s délkou slova 16 nebo 24 bitů. Bylo však dosaženo podstatné snížení doby instrukčního cyklu. Je plně využito proudového zpracování instrukcí. Dokonce u některých typů je harvardská architektura zdvojena nebo ztrojena (rodina DSP56K) a do jednoho bloku je sloučena paměť pro koeficienty (typu ROM) a pro mezivýsledky/data (typu RAM). Paměťové datové bloky jsou vybaveny samostatnými adresovými jednotkami, které umožňují generaci adres v lineárním pořadí, skoky po blocích, i adresování v bitově rezervním pořadí (což je potřebné např. při realizaci některého z alogoritmů FFT). Stykové obvody pracují samostatně, mohou mít ve struktuře A/D a D/A převodníky a jsou také často vybavené jedním nebo několika kanály DMA. Tyto jednotky jsou přizpůsobeny spolupráci s běžnými typy 16 a 32 bitových mikroprocesorů. Kapacita vnitřních pamětí je běžně doplňována pomocí vnějších pamětí tak, že je možné připojovat vnější paměti s různými programy na jeden signálový procesor a tím realizovat odlišné algoritmy zpracování. Menší energetické náročnosti bylo dosaženo použitím technologie typu CMOS. U moderních typů je běžná návaznost na vyšší programovací jazyk (jazyk C apod.) Výrobci procesor vybavují obvodovým emulátorem na čipu OnCE, který podstatně usnadňuje práci při ladění realizovaných algoritmů. Mezi nejpoužívanější typy této generace patří: rodina DSP56000 (Motorola), TMS32020 a rodina TMS32050 apod. (Texas Instruments), rodina ADSP2100 (Analog Devices), DSP16A (AT & T) a µPD77220 (NEC) atd.
Mikroprocesorová technika
19
Signálové procesory třetí generace (1987 - dosud) pracují s aritmetikou v pohyblivé řádové čárce s operandy o délce 32 bitů. Mají řadu vlastností procesorů druhé generace. Od druhé generace se liší větší dynamikou zobrazení čísel. V porovnání s DSP druhé generace jsou dražší, cenové rozdíly však nejsou již tak markantní jako před pár lety. Instrukční soubor obsahuje zpravidla instrukce pro práci v pohyblivé řádové čárce i v pevné řádové čárce. Mezi typické představitele patří DSP96002 (Motorola), TMS320C30 (Texas Instruments), řada ADSP21000 (Analog Devices), DSP32C (AT&T), µPD77230 (NEC) atp. V současné době se můžeme setkat nejčastěji se signálovými procesory firem Motorola, Analog Devices a Texas Instruments. Následující řádky budou patřit právě těmto třem gigantům ve vývoji a produkci DSP součástek. Důvod je prozaický. DSP produkty těchto tří firem využívá při vývoji svých aplikací řada společností v České republice a budoucí technický či vývojový pracovník by měl mít alespoň základní přehled o možnostech a specifických odlišnostech jednotlivých řad.
2.3 Signálové procesory Analog Devices Americká firma Analog Devices je jedním z největších producentů elektronických prvků pro A/D a D/A převod. Dosažené parametry těchto produktů jsou v současnosti světovou špičkou. Signálové procesory do svého výrobního programu zavedli od poloviny 80. let. Prvním produktem byla rodina 16bitových signálových procesorů s pevnou řádovou čárkou ADSP2100. Jednotlivé typy se lišily pouze velikostí pamětí na čipu a implementací vstupně-výstupních zařízení. Vybrané typy této rodiny a jejich vlastnosti jsou naznačeny v tabulce 2.2. V posledních letech vývojáři doplnili tuto rodinu o procesory řady ADSP218X a ADSP219X rozšířením kapacity pamětí, zvýšením hranice taktovacího kmitočtu a drobnými úpravami vstupně-výstupních obvodů. Podstatného zvýšení taktovacího kmitočtu se dosahuje použitím nízkovoltové technologie. Aby tyto obvody byly úrovňově kompatibilní s dostupnou technologií, je výkonné jádro procesoru napájeno nižším napětím (1,8 V) a I/O obvody napětím 3,3 V. Obvodová struktura této rodiny bude použita při obecném popisu DSP v následujících kapitolách. Tabulka 2.2: ADSP Paměť dat [slov] Paměť prog. [slov] Časovač Sériový port Hostitelský port DMA port Analogové rozhraní Napájecí napětí [V] Výp.výkon [MIPS]
Vybrané typy signálových procesorů rodiny ADSP2100 a jejich parametry. 2101 1k 2k 1 2 0 0 0 5 20
2105 512 1k 1 1 0 0 0 5 20
2111 1k 2k 1 2 1 0 0 5 20
2115 512 1k 1 2 0 0 0 5 20
2171 2k 2k 1 2 1 0 0 5 20
2181 16k 16k 1 2 0 0 0 5 20
2183 16k 16k 1 2 0 0 0 3,3 20
21msp58 2k 2k 1 2 1 0 A/D,D/A 5 20
V oblasti DSP s pohyblivou řádovou čárkou se Analog Devices prezentuje řadou ADSP21000. Procesory této řady nabízejí široký rozsah vlastností, od levných typů 21065 s cenou okolo 15$ až po výkonné procesory s velkou kapacitou pamětí na čipu. Zajímavým produktem je procesor ADSP-TS101S s obchodním názvem TigerSHARC. Instrukční cyklus jádra je 4 ns, obsahuje 6 Mb paměti SRAM na čipu, dvě výkonné jednotky matematických operací. Tato struktura je schopná současně provádět osm 16bitových násobení se 40bitovou akumulací a dvě 32bitová násobení s 80bitovou akumulací během jednoho instrukčního cyklu. Výrobce udává výpočetní výkon 1500 MFLOPS.
20
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
2.4 Signálové procesory firmy Motorola V kategorii DPS s pevnou řádovou čárkou se vývojáři firmy Motorola zaměřili na procesory s délkou slova 24 bitů. Základem je řada procesorů DSP56000 a vývojově pokročilejší rodina DSP56300. Základní rozdíl mezi nimi je v rozšíření adresového slova ze 16 na 24 bitů, což představuje adresní prostor 16M slov. Výrobce však nezapomněl ani na procesory se délkou slova 16 bitů s řadou DSP56100. Při pohledu na vnitřní strukturu DSP Motorola s pevnou řádovou čárkou zaujme rozdělení datové paměti na dvě nezávislé části. Jedna je označena jako paměť dat X a druhá paměť dat Y. Každá datová paměť má svůj sběrnicový systém. Tato konfigurace umožňuje současný přesun dvou operandů z takto rozdělené datové paměti. Dalším sběrnicovým párem, který se ve struktuře DSP může objevit, se zajišťuje přímý přístup do externích paměťových systémů pomocí kanálů DMA (např. DSP56301). Některé levnější šestnáctibitové typy (DSP56156) obsahují pouze jednu datovou paměť RAM, sběrnicový systém X a tzv. obecnou sběrnici G (General Bus). Dosažení rychlého přesunu dvou operandů z datové paměti je zajištěno úpravami adresového generátoru. DSP56156 obsahuje na čipu i 16bitové A/D a D/A převodníky a umožňuje snadnou realizaci levného systému pro méně náročné aplikace. Dalšími novými řadami DSP s pevnou řádovou čárkou jsou procesory DSP56600 programově kompatibilní s DSP56300 a řada DSP56800. Reprezentantem třetí generace signálových procesorů Motorola je řada DSP96000. Architektura je velmi podobná s uspořádáním procesorů rodiny DSP56000. Aritmeticko-logická jednotka i násobička pracují s operandy s pohyblivou čárkou podle doporučení ANSI/IEEE Standard 754, přičemž je podporován jednoduchý formát SP (Single Precision) se známým 8bitovým exponentem a 24bitovou mantisou včetně znaménka a rozšířený formát SPE (Single Extended Precision) s 11 bity exponentu a 32bitovou mantisou. ALU a násobička akceptuje také dva 32bitové formáty s pevnou řádovou čárkou (bez znaménka a se znaménkem). Stejně jako u signálových procesorů Analog Devices se i vývojáři Motoroly snaží integrovat na jeden čip rozsáhlé specializované struktury, které v návaznosti na DSP jádro umožňují realizovat velmi rychlé systémy pro megabitové datové přenosy apod. Motorola nabízí řadu MSC8100(Star Core), na jejichž čipech je integrováno DSP jádro SC140 pracující s taktovacím kmitočtem až 300 MHz spolu s výkonným komunikačním procesorem CPM (Communication Processor Module). Obvody MCS8100 tak umožňují například realizaci ATM uzlů páteřní sítě nebo aplikaci s využitím Ethernetové sítě apod. Také tyto obvody jsou řešeny nízkovoltovou technologií vnitřní logiky (1,6 V) se vstupy a výstupy kompatibilními se 3,3 V technologií.
2.5 Signálové procesory firmy Texas Instruments Dalším velkým producentem signálových procesorů je americká firma Texas Instrumnents. První vlaštovkou byl procesor TMS32010, který ještě patřil k DSP první generaci. Instrukční cyklus trval v řádu stovek ns. Jádro je tvořeno 32bitovou ALU s akumulátorem, 16bitovou násobičkou a 16bitovým posuvnou jednotkou. Následovala řada TMS32020 a TMS32050 s pevnou řádovou čárkou. Např. procesor TMS320C25 pracuje s výpočetním výkonem 12.5 MIPS, na čipu má implementovánu datovou RAM o kapacitě 544 slov (16 bitů) a programovou paměť ROM 4k slova, umožňuje přímé adresování až do velikosti 64k pro externí datovou paměť i externí paměť programu. Představitelem DSP s plovoucí řádovou čárkou jsou řady TMS320C30 a TMS320C40. Nejnovější řady signálových procesorů označených C2000, C5000 a C6000 vycházejí z dlouholetých zkušeností vývojářů Texas Instruments a mimo klasické bloky DSP obsahují specializované
Mikroprocesorová technika
21
podpůrné obvody (procesor specializovaný na zpracování obrazu, komunikační síťový kontrolér, Viterbiho procesor aj.).
2.6 Obvody signálových procesorů. V předchozích podkapitolách jsme se seznámili se základními typy DSP největších světových výrobců. Pro úspěšnou vývojářskou práci je nutná hlubší znalost obvodové struktury signálových procesorů. Řada rysů je společná s klasickými mikroprocesory. Signálové procesory jsou založeny na harvardské architektuře. Na obrázku 2.2 je zobrazena vnitřní architektura procesorů řady ADSP2100. Programový řadič řídí činnost jednotlivých částí procesorů podle instrukcí programu. Výkonnými jednotkami jsou aritmeticko-logická jednotka ALU, násobička a jednotka posuvu. Aritmeticko-logická jednotka plní obdobné úkoly, které řešila ALU u klasických mikroprocesorů. Z důvodů časté operace násobení v algoritmech číslicového zpracování signálu je blok násobičky řešen jako samostatná jednotka. U některých řad DSP se dále ve formě samostatného bloku vyčlenila i jednotka posuvu. Její funkcí je provádění logických a bitových posuvů a operace normalizace. Samostatnost výkonných jednotek umožňuje jejich současnou činnost, což vede k podstatnému urychlení provádění matematických operací. V instrukčním souboru nalezneme tzv. multifunkční instrukce, kterými současnou činnost těchto jednotek aktivujeme. Pro rychlý přístup operandů jsou DSP vybaveny více datovými a adresovými sběrnicemi.
Obrázek 2.2:
Blokové schéma DSP jádra procesorů rodiny ADSP2100
22
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
V případě řady ADSP2100 lze pracovat současně s programovou a datovou pamětí. Této výhody se často využívá při frekventované operaci násobení proměnné s koeficientem, kdy proměnná je uložena v datové paměti a konstantní koeficient v paměti programové. U procesorů Motorola a Texas Instruments jsme v předchozí kapitole nastínili možnost pracovat se dvěmi datovými pamětmi současně (datová paměť X a datová paměť Y). Do vstupních registrů ALU či násobičky pak vstupují tyto operandy současně. Je zřejmé, že struktura DSP musí obsahovat samostatný generátor adres pro jednotlivé adresní sběrnice. Některé řady signálových procesorů obsahují sběrnici pro přenos výsledků operací výkonných jednotek R BUS (result). Důvodem je co nejrychlejší předávání mezivýsledků mezi výkonnými jednotkami bez zatěžování datových sběrnic. Každá řada DSP procesorů se ve vnitřní struktuře liší, obecné vlastnosti však zůstávají zachovány. Programátor je nucen seznámit se s těmito odlišnostmi, zejména při sestavování programů na nejnižší úrovni v jazyce symbolických adres. Při vývoji aplikace ve vyšších programovacích jazycích mohou znalosti struktury jádra procesoru pomoci k optimalizaci kódu a dosažení větší efektivity práce. Obrázek 2.3 prezentuje jádro signálového procesoru řady ADSP21000. Zásadním rozdílem proti výše popisované struktuře rodiny ADSP2100 je implementace pole 16 registrů s délkou 40 bitů, které jsou přístupné libovolné výkonné jednotce jádra ve formě vstupního operandu či registru pro uložení výsledků. Tato architektura zjevně přispěje k růstu výkonu jádra a jeho možnostem při řešení algoritmů zpracování signálů.
Obrázek 2.3: 2.6.1
Blokové schéma DSP jádra procesorů rodiny ADSP21000
Aritmeticko-logická jednotka
Aritmeticko-logická jednotka DSP je obdobou ALU v klasické mikroprocesorové technice. Obrázek 2.4 představuje blokové schéma ALU procesorů řady ADSP2100. Tato jednotka obsahuje dvojici 16-ti bitových vstupních registrů pro operandy X a Y. Registr AX je přístupný ze sběrnice DMD, registr AY pak ze sběrnice DMD nebo PMD. Koeficienty algoritmů uložených v programové paměti mohou tedy vystupovat pouze jako operand Y. Výsledek operace ALU je uchováván v16-ti bitovém registru AR (Result) nebo pomocném zpětnovazebním registru AF (Feedback). Registry AX, AY, AR a AF jsou zdvojeny a
Mikroprocesorová technika
23
aktuální sada (banka) je nastavitelná pomocí jednocyklové instrukce. ALU provádí standardní operace součtu dvou operandů, součtu dvou operandů a příznaku přenosu, rozdíl operandů, negaci, inkrement a dekrement, absolutní hodnotu a všechny logické operace. Podle výsledků operací jsou nastavovány jednotlivé příznakové bity (AZ - příznak nuly, AN - příznak záporného výsledku, AV – overflow příznak, AC - příznak přenosu, AS – příznak záporného znaménka operandu X, AQ – kvocient příznak při operacích dělení) ve stavovém registru. Nastavení těchto příznaků umožňuje řízení větvení programu pomocí podmínek.
Obrázek 2.4:
Vnitřní struktura ALU DSP procesorů rodiny ADSP2100
24
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Prakticky každá instrukce může být řízena podmínkou. Pro urychlení podmínkových operací je v DSP implementován logický blok sdružující stavy jednotlivých příznakových bitů. Např. podmínka je-li výsledek menší nebo roven nule je splněna při platnosti vztahu
(AN XOR AV) OR AZ = 1
( 2.1 )
a syntakticky je programátorovi dostupná symbolem LE (Less Than or Equal Zero) a zápis v JSA vypadá následovně: IF LE JUMP …, tzn. je-li výsledek předchozí operace záporný nebo nulový proveď skok na … . Z obrázku je patrno, že registr AR, AX a AY mohou sloužit jako běžný registr pro uchování proměnných. Přímá vazba registru AR na sběrnici R BUS umožňuje okamžité použití výsledků ALU ostatními výkonnými jednotkami DSP. Při pohledu na instrukční soubor zjistíme, že registr AR může být argumentem pro násobičku či jednotku posuvu. ALU nabízí dva typy instrukcí pro dělení DIVS pro znaménkové operátory a DIVQ pro operátory bez znaménka. Tyto instrukce nejsou klasickými typy instrukcí, struktura ALU operace dělení řeší sekvenčně. Doba výkonu těchto (pseudoinstrukcí) je 16 strojových cyklů. 2.6.2 Násobička Násobička MAC procesorů řady ADSP2100 je určena k násobení dvou 16bitových operandů bezznaménkového 16.0 i znaménkového 1.15 formátu. Popis programátor vyznačí v syntaxi instrukce symbolem S pro znaménkový formát a symbolem U pro bezznaménkový formát. Např. MR = MX0 ... MF (SU). Standardní funkce, které násobička nabízí, jsou součin dvou operandů, součet obsahu registru MR a součinu vstupních operandů a rozdíl MR od součinu vstupních operandů. Výsledek může být zaokrouhlen v souladu s pravidly osvětlenými v kapitole o číselných formátech. Výsledek operace je uložen do registru MR (Result) nebo zpětnovazebního registru MF (Feedback). Z teorie plyne, že součin dvou 16 - ti bitových čísel bude mít délku 32 bitů. Výstupní registr MR je rozšířen o dalších 8 bitů na 40 bitů, neboť při operaci součtu MR a součinu vstupních operandů může dojít snadno k přetečení. Tato varianta umožňuje snadnou realizaci několikanásobné akumulace bez nebezpečí vzniku chyby. Registr MR je rozdělen na část MR0 (bity 0 - 15) MR1 (bity 16 - 31) a MR2 (bity 32 - 39). Obsah každého z těchto dílčích registrů může být přenesen pro další zpracování buď do datové paměti prostřednictvím sběrnice DMD nebo do ostatních výkonných jednotek sběrnicí R BUS. Zřejmě nejčastěji používaným registrem pro výstup bude MR1, protože při součinu dvou 16 bitových operandů nese významnější polovinu výsledku. Pozorný čtenář si všimne, že i zpětnovazební registr MF využívá výsledku R1, který může být dále použit jako vstupní operand Y pro další operaci násobení. Pokud potřebujeme i rozšířenou část výsledku, nižší významová polovina je uložena v registru MR0. V MR2 se objeví užitečná hodnota při operacích akumulace. Násobička generuje jediný příznak MV (Overflow) při přetečení z MSB bitu registru MR2. Vstupní registry pro operandy X a Y jsou opět řešeny jako párové, tj. MX0 a MX1 pro operand X , resp. MY0 a MY1 pro operand Y. Registry MX, MY, MR a MF jsou stejně jako u ALU zdvojeny
Mikroprocesorová technika
25
a primární nebo sekundární banka se přepíná pomocí instrukce ENA SEC_REG, resp. DIS SEC_REG.
Obrázek 2.5:
Vnitřní struktura násobičky DSP procesorů rodiny ADSP2100
26 2.6.3
Fakulta elektrotechniky a komunikačních technologií VUT v Brně Jednotka posuvu
Třetím výkonným blokem DSP je jednotka posuvu (Barrel Shifter), u procesorů jiných výrobců bývá součástí ALU. Funkcí jednotky posuvu je realizovat aritmetický nebo logický posuv, normalizaci, detekci a adjustaci exponentu. Blokové schéma jednotky posuvu je na obrázku 2.6. Pro funkci aritmetického a logického posuvu a normalizace je určeno posuvné pole, jehož zdrojem je vstupní registr SI nebo registry výkonných jednotek přístupné přes sběrnici R BUS. Výsledek je uložen do 32 bitového registru SR, který je rozdělen na registr SR1 (bity 31 - 16) a registr SR0 (bity 15 - 0). Při pohledu na blokové schéma mohou registry SI, SR, SB a SE sloužit jako obecné registry pro uložení proměnných a jsou zdvojeny. I když signálové procesory rodiny ADSP2100 pracují v pevné řádové čárce, jednotka posuvu nabízí podpůrné obvody pro výpočty ve formátu s plovoucí čárkou. Pomocí detektoru exponentu získáme představu v jakém řádu se vstupní hodnota nachází a tento detekovaný řád využít pro definici exponentu (uložen do 8bitového registru SE). Hodnota exponentu může být následně použita ve formě zdroje řádu posuvu vstupního argumentu. Zjednodušeně řečeno, zjistíme kolik nejvýznamnějších bitů vstupního operandu je nulových. Tato hodnota se použije jednak pro připojení exponentu a jednak pro následný posuv vstupního operandu tak, aby byly obsazeny i nejvyšší významové bity.
Obrázek 2.6:
Vnitřní struktura jednotky posuvu DSP procesorů rodiny ADSP2100
Mikroprocesorová technika 2.6.4
27
Adresní generátor
Adresní generátory DAG1 a DAG2 v systému ADSP2100 slouží pro generování adres k přístupu do datové a programové paměti. Umožňují přímé a nepřímé registrové adresování, adresování modulo a DAG1 i bitově reverzní adresování. Každý DAG obsahuje 4 registry L určující délku bloku, 4 registry I s přímou adresou a 4 registry M pro adresní modifikaci. Jednotlivé adresovací módy jsou nastaveny hodnotou v modifikačních registrech. Konkrétní způsob a využití nastavení adresního generátoru jsou hojně citovány v odborných pramenech a aplikačních listech k jednotlivým typům signálových procesorů
Obrázek 2.7:
Vnitřní struktura adresového generátoru DSP procesorů rodiny ADSP2100
3 Aplikace se signálovými procesory Cíle kapitoly: Seznámit studenty se základními aplikacemi DSP a na jednoduchém úkolu předvést postup vývoje triviální aplikace na signálovém.
3.1 Vývoj aplikací s DSP Vývoj aplikací pro signálové procesory je obdobný práci s klasickými mikroprocesory. Na obrázku 3.1 je schematicky zobrazen postup vývoje aplikace. V prvním kroku je třeba definovat popis dané architektury DSP. Prakticky to znamená popis paměťového modelu, vstupně-výstupních zařízení a jejich komunikace s jádrem DSP atd. Tento krok za nás již udělal výrobce a ke každému typu procesoru dodává příslušný definiční soubor (XXX. LDF Linker Description File). Nejrozsáhlejší částí ve vývoji aplikace je krok druhý, kdy píšeme vlastní zdrojový kód aplikace. Standardně se používá jazyk symbolických adres JSA nebo z vyšších programovacích jazyků jazyk C. Pro zápis zdrojového kódu v jazyce C musíme mít
28
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
k dispozici C - kompilátor, který generovaný kód převede do JSA. Je možné oba způsoby tvorby algoritmu kombinovat, tzn. část programu psát v JSA a část v jazyce C. Pokud máme všechen zdrojový kód převeden do JSA, pomocí programu Assembler generujeme operační kód pro dané jádro procesoru. Snažíme se upřednostňovat strukturované programování, pro ucelené části algoritmů vygenerujeme jednotlivé smysluplné úseky programu, které představují tzv. moduly. Dalším prostředkem při vývoji aplikace je „Linker“. Ten jednotlivé moduly spojí dohromady s využitím popisu architektury DSP systému. Následuje proces „debuggingu“, který provede kontrolu a případné odstranění nesrovnalostí v celistvosti programu a pokud není objevena chyba závažného charakteru, vygeneruje již spustitelný program. V této fázi již hotový produkt testujeme na cílové aplikaci. Moderní signálové procesory jsou vybaveny emulační bránou, přes kterou pomocí emulátoru (HW zařízení) je možno ladit vyvíjenou aplikaci v cílovém zařízení. V cílovém systému musí být podpora emulace zajištěna vyvedením příslušných pinů procesoru na konektor. Pokud máme tuto funkci implementovánu, provádíme testování přímo na cílovém zařízení s emulátorem. V jiném případě můžeme provést částečný test na dostupných vývojových kitech. V případě nesprávně pracující aplikace se musíme vrátit k vytvořeným zdrojovým kódům a nesrovnalosti se snažíme napravit. Postupujeme tak dlouho, dokud cílová aplikace není plně funkční. V poslední etapě již vygenerovaný funkční kód programujeme do pamětí EPROM, které zasouváme do patic v cílových zařízeních, balíme je do krabic a za patřičný obnos distribuujeme ke koncovým uživatelům.
Obrázek 3.1:
Vývojový diagram postupu práce při vytváření aplikace DSP systému
Mikroprocesorová technika
29
3.2 Aplikace vhodné pro zpracování DSP Signálové procesory jsou svou architekturou předurčeny pro zpracování signálů v reálném čase. Mezi typické úlohy patří číslicová filtrace (FIR i IIR), výpočet kmitočtového spektra pomocí FFT, kódování a dekódování, řešení různých typů diskrétních transformací atd. Vyjmenovali jsme pouze dílčí úlohy, které se často stávají součástí větších programů. Pro naše první seznámení s činností DSP si ukážeme komplexní řešení relativně jednoduchého problému – aproximaci funkce. 3.2.1
Aproximace funkcí
Častým jevem při číslicovém zpracování signálů je řešení matematických funkcí y = f(x). V klasické mikroprocesorové technice jsme se setkali s metodou využití tabulek uložených v paměti, kde na příslušných adresách definovatelných pomocí proměnné x byly uloženy funkční hodnoty y. S rostoucí požadovanou přesností bylo nutno rozsah tabulky zvětšovat a alokovat pro její zápis velkou část paměti. Omezení rozsahu tabulky lze dosáhnout s využitím aproximace pro proměnné x mezi definovanými zobrazeními x→y v tabulce. Nejjednodušší metodou je využití aproximace pomocí lineárních úseků, kdy hodnota y = f(x) pro netabulkovou hodnotu x je dopočítána z hodnot y1 = f(x1) a y2 = f (x2), přičemž x1 je nejbližší nižší tabulková hodnota k x a x2 nejbližší vyšší. Výpočtem se určí směrnice lineárního úseku (x1, x2):
k =
y 2 − y1 x 2 − x1
.
( 3.1 )
Hledaná funkční hodnota y je pak dána vztahem: .
y = y 1 + k (x − x 1 )
( 3.2 )
Tato metoda sice přináší značné uvolnění paměti, je však nutno provést výpočet vztahů , který přes svou triviálnost určitý výpočetní čas procesoru potřebuje. Je taktéž nutnost zvážit zda aproximace po částech lineárními úseky bude vyhovovat potřebné přesnosti. Tabulkové hodnoty pro proměnné x nemusí být vzdáleny ekvidistantně, podle potřeby lze úseky v některých částech aproximované charakteristiky zkrátit (rychlá zněna směrnice). V tomto případě tak bude výpočet adresy uložené funkční hodnoty y ze vstupní hodnoty obtížnější. Třetí metodou vhodnou pro výkonné výpočetní jádro DSP je použití aproximace mnohočlenem vyššího řádu:
y = a 0 + a1 x + a 2 x 2 + a3 x 3 + a 4 x 4 + ... + a n x n
( 3.3 )
Místo rozsáhlé tabulky se do paměti uloží jen koeficienty a0, a1, a2,… u příslušných mocnin polynomu a zbytek činnosti obstará výpočetní jádro řešící algoritmus výpočtu mnohočlenu.
30
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Pro různé typy funkčních závislostí lze použít stejný algoritmus s různými koeficienty a. Matematický způsob hledání příslušných koeficientů je dobře znám a často je možno pro klasické matematické funkce využít rozvoje do Tylorových řad. V algoritmech číslicového zpracování signálu je nutno velmi nezřídka generovat harmonický signál. Typickou aplikací je konverze kmitočtového spektra nebo generace harmonických tonů apod. Prakticky si ukážeme realizaci programového modulu pro funkci sinus. Pro řešení s danou přesností je nutno zvolit řád mnohočlenu, číselné rozlišení koeficientů a vstupních a výstupních operandů. Tuto část úlohy lze řešit analyticky s tužkou v ruce nebo simulací v Matlabu. Některé funkce vykazují vhodné pravidelnosti (např. sudé a liché funkce) a nabízejí řešit úlohu jen pro jistý interval hodnot x a pro hodnoty mimo tento interval aplikovat příslušné matematické zákonitosti. Funkci y = sin(x) aproximujeme polynomem pátého řádu:
y = 3,140625 x + 0.02026367 x 2 − 5.325196 x 3 + 0.5546778 x 4 + 1.800293 x 5
( 3.4)
a to pro úsek x∈(0°,90°〉, tedy I. kvadrant. Pro ostatní kvadranty využijeme následujících pravidel:
sin (− x ) = − sin ( x )
( 3.5)
a
sin (180 ° − x ) = sin
(x )
( 3.6 )
Pro implementaci použijeme 16bitový DSP procesor s pevnou řádovou čárkou z řady ADSP2100. Vstupní veličina reprezentující argument bude ve formátu zlomkového doplňku 1.15. Musíme tedy definovat jakému úhlu ve stupních bude odpovídat dané číslicové vyjádření argumentu. Mohli bychom posunout desetinnou čárku na takovou pozici, při níž by byl argument ve stupních snadno definovatelný. Tím však nevyužijeme plný dynamický rozsah zobrazení. Přikloníme se tedy k vyjádření v π·rad, tj. pro -180° bude hodnota argumentu definována jako -1 [π·rad], pro –90° pak –0,5[π·rad], pro +90° jako 0,5[π·rad] atp. (viz. obrázek). Tím dosáhneme plného využití zobrazovaného rozsahu, neboť využíváme plného pokrytí zobrazení čísel ve zlomkovém tvaru dvojkového doplňku. Výstupní formát čísla y bude jednoznačný – zlomkový tvar doplňkového kódu, neboť s drobnou výjimkou (hodnota y = 1) odpovídá možnému rozsahu výsledků funkce sinus. Je třeba taktéž zvolit vhodný formát pro koeficienty, přesunout ve vyjádření koeficientu doplňkovým kódem desetinnou čárku tak, abychom postihli všechny koeficienty s maximální možnou přesností. Koeficient s nejvyšší absolutní hodnotou je a3 = - 5,325196. Volíme tedy formát 4.12, tj. znaménko + 3 bity mantisy před desetinnou čárkou + 12 bitů mantisy v desetinné části. V tomto formátu lze zobrazit dekadická čísla v rozsahu od - 8 do + 8 (přesněji do + 7,99976). I při této volbě formátu si nemůžeme být jistí, zda při výpočtu algoritmu nemůže dojít k přetečení dílčího výsledku. Tento fakt si musíme ověřit např. simulací v Matlabu.
Mikroprocesorová technika
Obrázek 3.2:
31
Vyjádření formátu vstupního argumentu funkce sinus
Program nejprve provede převod parametru x do I. kvadrantu. Následuje samotný výpočet algoritmu, přičemž první a poslední součin v mnohočlenu jsou provedeny samostatnými instrukcemi a druhý až čtvrtý v cyklu „aprox“. Při rozboru řešeného algoritmu s danými formáty čísel zjistíme že výstupní hodnota bude ve formátu 4.12. Po provedení výpočtu musíme realizovat zpětnou konverzi do formátu 1.15 pomocí instrukcí posuvu. Dalším krokem bude kontrola zda výsledek nepřekročil rozsah formátu 1.15. Jediný případ, kdy k tomuto jevu může dojít, nastává při výsledku 1. Vzhledem k tomu, že se v algoritmu vyskytují operace zaokrouhlování a pracujeme s operandy s konečnou délkou slova nemusí tato situace nastat pouze pro x = 90°. Na závěr se provede případná změna znaménka výsledku, pokud byl vstupní argument záporný. Algoritmus výpočtu funkce sinus je řešen formou volané funkce, poslední instrukcí bude RST (návrat z funkce). Postup při řešení algoritmu funkce sinus nejlépe nastíní komentovaný výpis programu. Komentář je psán kurzívou.
Výpis programu pro generování funkce sinus .MODULE Sin_Approximation;
{Hlavička modulu}
{Aproximace funkce sinus: y = sin(x) Volané parametry: AX0 = x ve formátu 1.15 M3 = 1 L3 = 0 (musí být zajištěno před voláním funkce) Návratová hodnota: AR = y ve formátu 1.15 Používané registry: AY0,AF,AR,MY1,MX1,MF,MR,SR,I3 (jejich obsah bude změněn – uložení do zásobníku nebo nastavení alternativní banky registrů
32
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Výpočetní čas: 25 strojových cyklů } .VAR/DM sin_coeff[5];
{Alokace datové paměti pro uložení koeficientů}
.INIT sin_coeff : H#3240, H#0053, H#AACC, H#08B7, H#1CCE; {Definice koeficientů ve formátu 4.12} .ENTRY sin; sin:
{Jméno modulu při volání hlavním programem}
I3=^sin_coeff; {Ukazatel na počáteční adresu koeficientů} AY0=H#4000; AR=AX0, AF=AX0 AND AY0; {Kontrola, zda vstupní parametr je ve II. nebo IV. kvandrantu} IF NE AR=-AX0; {Pokud ano provede se negace x (sin.(x) = sin.(180°-x))} AY0=H#7FFF; AR=AR AND AY0; {Odstranění znaménka u vstupní proměnné x} MY1=AR; { Přesun upravené proměnné do vstupního registru Y násobičky, tatáž hodnota zůstává v registru AR} MF=AR*MY1 (RND), MX1=DM(I3,M3); { Provedení operace druhé mocniny a zaokrouhlení výsledků (RND), načtení koeficientu a1 do registru X násobičky } MR=MX1*MY1 (SS), MX1=DM(I3,M3); { Vynásobení koeficientu a1 s hodnotou x (oba operandy se znaménky), načtení koeficientu a2} CNTR=3; {Definice počtu opakování smyčky DO UNTIL} DO approx UNTIL CE; {Hlavička cyklu DO UNTIL} MR=MR+MX1*MF (SS); {V každém cyklu provedení operace r+an·xn, kde r je dílčí výsledek, tj. součet součinů polynomu po řád n-1} approx: MF=AR*MF (RND), MX1=DM(I3,M3); {Provedení další mocniny parametru x a zaokrouhlení, načtení dalšího koeficientu a, po třech cyklech ukončení} MR=MR+MX1*MF (SS); {Provedení závěrečné operace r+a5·x5, kde r je dílčí výsledek} SR=ASHIFT MR1 BY 3 (HI); {Konverze do formátu 1.15} SR=SR OR LSHIFT MR0 BY 3 (LO); AR=PASS SR1; {Přesun výsledku do registru AR ke zjištění příznaků} IF LT AR=PASS AY0; {Kontrola saturace - je-li výsledek menší než 0, výsledek je roven 1 – H#7FFF (ošetření výjimky pro 90°)} AF=PASS AX0; {Přesun vstupu x do registru AF k zjištění příznaků} IF LT AR=-AR; { Je-li vstup x záporný, zamění se znaménko u výsledků (sin.(-x)= - sin.(x))}
Mikroprocesorová technika RTS; .ENDMOD;
33 {Návrat z funkce} {Ukončení zápisu modulu}
34
Fakulta elektrotechniky a komunikačních technologií VUT v Brně
Seznam použité literatury [1]
Jan J.: Číslicová filtrace, analýza a restaurace signálů. VUT v Brně 1997.
[2]
Oppenheim AV., Schafer RW.: Digital Signal Processing. Prentice Hall 1975.
[3]
Smékal Z., Vích R.: Zpracování signálů pomocí signálových procesorů. RADIX Praha 1998.
[4]
Digital Signal Processing Applications. Using the ADSP-2100 Family. Analog Devices 1990.
[5]
ADSP-2100 Family. User’s Manual. Analog Devices 1995.
[6]
Smékal Z.: Realizace číslicových filtrů a algoritmu FFT na signálových procesorech. Skriptum VUT v Brně 1995.