D.S. P
Digital signal
processing snadno, rychle a vykonne.
O tom, ze ATARI chysta novy pocitac se vedelo jiz delsi
dobu. Jen
byla otazka, cim bude pocitac zajimavy. Bude tam 68040, transputer nebo nejake
paralelni procesory
Uz v roce 1985 byl totiz pocitac ST
bombou na pocitacovem trhu diky svemu
vykoneho HW (tenkrat, bohuzel) a vyvazene kvalitnimu systemu (ano, GEM). Tim, ze
navrhali Falcona do nej vlozili krome vykonneho procesoru 68030 i cip DSP 56001, se
objevil na trhu stroj s obrovskymi moznostmi.
DSP
Nejprve si ale musime vysvetlit
zkratku DSP. Znamena Digital Signal Processor
(digitalni signalovy procesor). Signalove procesory jsou urceny predevsim na
vypocty v realnem case souvisejici se zpracovanim signalu. Napr. rychla Fourierova
transformace (FFT), autokorelace ci rekurzivni cislicove filtry. Tyto vsechny cinnosti
samozrejme muze provadet i normalni mikroprocesor, ovsem trva mu to dele a vetsinu
cinnosti potrebuje skutecne v realnem case, tj. tak rychle jak data prichazeji napr. z A/D
prevodniku. DSP jsou na tyto ukony specializovane. Maji tzv. Hardwardskou
architekturu (hlavne oddeleny pamet’ovy prostor a ridici signaly pro program a data) na
rozdil od mikroprocesoru s architekturou Neumannovou (jedna pamet’ova oblast
pro vsechno). Dale maji standardni mikroprocesory pestrou paletu ruznych prikazu a
operaci, ktera ovsem trvaji urcitou dobu. DSP vsak maji povelu mene , jsou vsak maximalne
casove optimalizavane, aby probehly vetsinou v jednom instrukcnim cyklu DSP. Navic
bezne procesory pocitaji s 16 – nebo 32 – bitovou presnosti. Pokud chceme odstranit
zaokrouhlovaci chyby pri vypoctech, je nutne provadet radu pocetnich
operaci navic. Operace s realnymi cisly (fioat’s) stoji casu jeste vice. Naproti tomu
DSP maji registry vicebitove a pri vypoctu se tak neztraci presnost. Navic ty lepsi
obsahuji Fioating – Point jednotku.
Seznamte se: DSP 56001
Motorolacky cip DSP 56001 je je den z jednodussich
signalnich procesoru tohoto vyrobce. Nema totiz jednotku pro vypocty s realnymi cisly,
pocita tedy jen celociselne. Je ovsem znacne levnejsi, nez jeho ’floatovy’ kolega
96001 a to pravdepodobne pri navrhu Falcona prevazilo. Navic pro uvazovane aplikace jeho
vykon plne postacuje. DSP 56001 je v 88-pinovem PGA (resp, 100 – pinovem SLAM) pouzdre.
Ma nasledujici I/O funkcni skupiny: Port A, ktery ma 24 – bitovou datovou a 16
– bitovou adresovou sbernici. Rizeni umoznuje pripojit i vice DSP nebo MPU (jednotky
rizeni pameti) v rezimu Master – Slave (nadrizeny a podrizeny). Dale muze toto rozhrani
slouzit k pripojeni procesoru a ostatnimu pocitacovemu hardware. Druhou I/O branou
je Port B, tzv. Host – Interface. Je urcen pro rychle prenosy pres MPU, DSP ci
DMA. Datova sbernice je 8 – bitova + ridici vodice. K tomuto rozhrani je mozno pripojit
napr. ex- terni 8 – bitovou EPROM a po RESETu DSP je mozno z ni bootovat.
Poslednim portem je Port C, ktery krome 9 vstupne – vystupnich signalu ve dvou
skupinach nabizi take po jednom synchronnim a asynchron- nim seriovem rozhrani. To
asynchronni (SCI) je v podstate vysokorychlostmi modemove rozhrani s 8 datovymi bity
a plne duplexnim provozem. Sklada se z ridicich signalu RxD, TxD a hodin tak, aby bylo mozno pripojit snadna dalsi DSP nebo s
prevodnikem urovni vytvorit RS – 232 rozhrani. Maximalni prenosova rychlost tohoto
rozhrani je dana taktovaci frekvenci DSP a je pri 20.5 MHz okolo 320 kBd (udaje z
katalogu Motorola). Synchronni seriove rozhrani (SSI) je velmi flexibilni rozhrani.
Flexibilita spociva v tom, ze uzivatel muze programovat pocet bitu, komunikacni
protokol, frekvenci a synchronizaci. Jak jiz bylo receno, pouzivaji DSP Hardwardskou
architekturu. Proto uvnitr najdeme 4 obousmerne sber nice o 24 – bitech, na ktere je
mozny paraleni pristup: Global data bus, Y – data bus, X – data bus a Prog. data bus.
24 bitu je take zakladni presnost vypoctu, dale DSP podporuje datove typy 4B a 56 bitu,
coz souvisi s dvema 56 – bitovymi registry pro nasobeni. Nektere
instruke mohou byt zpracova programova RAM s max. 64 kslov
externi pameti
– X – RAM s 64 kslov externi
– Y – RAM take s 64 kslov externi
(slovem se mysli 24 – bitu, vnitrne maji vsechny 3
pameti 512 slov) Pokud se
tyce rychlosti, zde jsou nektere hodnoty Benchmark testu podle kataiogovych udaju
Motoroly:
10.25 milionu instrukci za vterinu (MIPS) a FFT v
1024 bodech (komplexni]
za 3.23 ms pri taktu 20.5 MHz; pri taktu 27 MHz 13.5 MIPS a FFT za 2.45 ms
– 67 Tap FIR – Filtr za 5.4 s pri 27 MHz A
ostatni informace z katalogu:
– taktovaci frekvence 20.5/27/33 MHz
– 62 povelu s 12 miliony modifikaci
Aplikace
No a kde se da vysoky vykon DSP ve Falconu vyuzit ?
Kazdopadne v hudbe,
protoze pri uvazeni signalu samplovanych v CD kvalite (44.1 kHz) pripada na kazdy
vzorek okolo 232 jednocyklovych instrukci (a takovych ma DSP vetsinu). To cislo vzniklo z
taktovaci frekvence DSP 20.5 MHz deleno 44.1 kHz a 2 (jsou2 takty hodin na jeden
instrukcni cyklus). V pripade 32 MHz ve Falconu je to pak 363 cyklu. S tim uz Ize delat
ruzna kouzla bud’ upravou signalu, tj. filtry, efekty echo, hall, harmonizer...,
nebo Ize signaly primo generovat. A nezapominejme, ze to vse je v CD kvalite a navic to
krome prenosu DMA vubec neobtezuje hlavni procesor. Dalsi aplikaci DSP je napr.
vysokorychlostni modem, staci jen zvenci pripojit neco malo hardware k pripojeni k
telefonni siti a o zbytek se postaraji programy bezici v DSP a CPU (paralelne (!)). Ale
DSP se muze uplatnit i ve zpracovani obrazu pri ruznych transformacich, protoze ty jsou
slozeny nejcasteji z jednoduchych instrukci nad daty v pameti. A prave v tom je DSP mistr. Pri komunikacich se vyuziva i ruznych komprimacnich algoritmu,
napr pri plne duplxni ADPCM (adaptivni diferencialni pulsne – kodova modulace) koduje rec podle CCITT standartu. DSP pak je schopen komprimovat v realnem case
tok dat 32 kBit/s na 64 kBit/s, coz vyzaduji prenosy po telefonnich linkach. Takze nyni
nam uz zbyva jen cekat, jak softwarovy firmy vylepsi moznosti svych programu
zapojeni sil DSP. Aby jim to navrhari Falcona ulehcili, XBIOSU rozhrani pro komunikaci
programu s DSP, zde uvedu pouze prehled funkci ( bez naroku na uplnost):
Dsp _DoBlock(a,b,c,d) Dsp_
BlkHandShake(a,b,c,d)
Dsp_ BlkUnpacked(a,b,c,d)
Dsp_ InStream(a,b,c,d)
Dsp_ OutStrearn(a,b,c,d)
Dsp_ lOStream(a,b,c,d,e,f)
Dsp_ Removelnterrupts(a)
Dsp_ GetWordSizep
Dsp_ Lockp
Dsp_ Unlock()
Dsp_ Available(a,b)
Dsp_ Reserve(a,b)
Dsp_LoadProg(a,b,c)
Dsp_ ExecProg(a,b,c)
Dsp_ ExecBoot(a,b,c)
Dsp_ LodToBinary(a,b)
Dsp_ TriggerHC(a)
Dsp_ RequestUniqueAbilityp
Dsp_ GetProgAbilityp
Dsp_FlushSubroutines()
Dsp_LoadSu:t routine(a,b,c)
Dsp_InqSubrAbility(a)
Dsp_RunSubroutine(a)
Dsp_HfO(a)
Dsp_Hf1(a)
Dsp_Hf20
Dsp_Hf30
Dsp_BlkWords(a,b,c,d) |
(void) xbios(500,a,b,c,d) (voidl
xbios(501,a,b,c,d)
(void) xbios(502,a,b,c,d)
(void) xbios(503.a,b,c,d)
(void) xbios(504,a,b,c,d)
(void) xbios(505,a,b,c,d,e;f)
(void) xbios(506,a)
(int) xbios(507)
(int) xbios(508)
(void) xbiosl509)
(void) xbios(510,a,b)
(int) xbios(511,a,b)
(int) xbios(512,a,b,c)
(void) xbios(513,s,b,c)
(void) xbios(514,a,b,c)
(long) xbios(515,a,b)
(void) xbios(516,a)
(int) xbios(517)
(int) xbios(51B)
(void) xbios(519)
(int) xbios(520,a,b,e)
(int) xbios(521,a)
(int) xbios(522,a)
(int) xbios(523,a)
(int) xbios(524,a)
(int) xbios(525)
(int) xbios(526)
(void) xbios(527,a,b,c,d) |
|