Dacă fiecare pas necesită un singur ciclu de ceas, atunci de exemplu în cazul lui TMS320C55x, ei pot fi executaţi printr-o secvenţă de până la 7 instrucţiuni care necesită de asemenea câte un ciclu de ceas. Arhitectura paralelă se bazează în totalitate pe descompunerea sistematică a instrucţiunilor în multiple operaţii elementare succesive. În Fig.2.3 se poate observa că multiplicatorul şi ALU permit operarea paralelă. În timp ce multiplicatorul realizează operarea sa specifică la momentul de timp i, adică înmulţirea bix(n-i), ALU adună produsul calculat anterior, bi-1x(n-i+1), la acumulator. Arhitectura paralelă este utilă datorită paralelismului implicat de algoritmii DSP şi de aplicaţii. În aceeaşi figură se observă că toate unităţile de procesare, configurate într-o structură paralelă, pot primi şiruri de date diferite şi pot executa operaţii distincte în acelaşi ciclu. De exemplu, multiplicatorul accesează doi operanzi şi îi înmulţeşte; în acelaşi timp, blocurile DAGEN actualizează pointerii de adrese, iar ALU adună rezultatul produsului calculat anterior la acumulator cu (sau fără) rotunjire. Tehnica de suprapunere a paşilor de operare în unităţi de procesare distincte se numeşte pipelining. Uneori, acest calcul paralel poate implica unele dificultăţi în programare dacă execuţia unei instrucţiuni trebuie să fie întârziată până când un rezultat anterior devine disponibil. Magistralele Magistralele, precum şi alte interconexiuni, permit realizarea unor căi de comunicaţie între unităţile care alcătuiesc un procesor DSP. Viteza de execuţie a filtrării descrise în relaţia (2.1) poate fi şi mai mult îmbunătăţită dacă se utilizează magistrale de date distincte pentru fiecare din cele două intrări ale multiplicatorului. În loc de a solicita extragerea unui operand pentru bi şi pe celălalt, x(n-i), pe aceeaşi magistrală de date, ambii operanzi pot fi aduşi simultan pe două magistrale de date distincte, aşa cum se arată în Fig.2.3. Cele două magistrale de date şi magistralele de adrese specifice se conectează la două memorii separate: memoria A pentru coeficientul bi şi memoria B pentru semnalul x(n-i). Această configuraţie înlătură conflictul care ar apare la accesarea celor doi operanzi de la aceeaşi memorie, în acelaşi timp. O a treia memorie, cu magistralele sale de date şi adrese, este utilizată pentru stocarea valorii din acumulator înapoi în memoria C. În afara acestor blocuri de memorie de date, există şi o memorie program cu magistrale de date şi de adrese specifice (dedicate) pentru extragerea instrucţiunilor şi a împiedica astfel întârzierile în accesarea datelor. Generatorul de adrese pentru date După cum se vede în Fig.2.3, fiecare memorie dispune de magistrala sa proprie de adrese creată de blocul DAGEN. Accesarea secvenţială a operanzilor bi şi a celor Procesoare numerice de semnal - Cap.2
11
corespunzători x(n-i), i=0,1,...,L-1, reprezintă o operaţie secvenţială naturală în care aceşti operanzi sunt stocaţi în locaţii consecutive ale memoriei. Fiecare bloc DAGEN determină doar incrementarea (sau decrementarea) indicatorului de adrese pentru poziţionarea la data următoare în acelaşi ciclu de ceas în care multiplicatorul şi ALU realizează operaţii aritmetice; ca urmare, nu este necesar un ciclu de ceas suplimentar pentru a actualiza pointerul de adrese. După accesarea ultimului coeficient, bL-1, indicatorul de coeficienţi trebuie iniţializat la adresa lui b0, în vederea execuţiei iteraţiei următoare. Această operaţie poate fi realizată uşor prin organizarea buffer-ului de coeficienţi într-o manieră ciclică, sau prin implementarea unei aritmetici modulo L în buffer-ele circulare. În plus, DAGEN permite şi adresarea cu bit inversat pentru calculul algoritmilor FFT (Fast Fourier Transform). 2.4.3 Configuraţii ale memoriei Cele două tipuri comune de memorie sunt RAM şi ROM. Memoria RAM poate fi scrisă / citită în mod dinamic; astfel, ea este cel mai flexibil mod de stocare a datelor în procesul de dezvoltare. Totuşi, ea nu permite o stocare permanentă a programelor şi datelor decât în tampon cu o baterie de alimentare. Pe de altă parte, memoria ROM, folosită cel mai adesea sub formă EPROM (erasableprogrammable ROM), permite stocarea permanentă şi poate fi ştearsă şi reînscrisă prin procedee electrice. Sistemele DSP moderne utilizează cu precădere memorie FLASH în locul memoriei EPROM, care poate fi ştearsă şi reprogramată direct pe placă, ceea ce este extrem de util pentru dezvoltarea unui produs. Memoria TMS320 este organizată în trei spaţii individuale: program, date şi I/O. În cadrul fiecăruia dintre aceste trei spaţii, memoria ROM, RAM, sau perifericele mapate în memorie pot fi rezidente pe cip, sau în afara acestuia. Memoria de program conţine instrucţiunile care implementează algoritmii DSP. Aceste instrucţiuni pot conţine date (constante), adrese de memorie pentru ramificaţiile din program şi comenzi care controlează funcţionarea procesorului. Memoria de date stochează coeficienţi şi eşantioane de semnal utilizate în instrucţiuni. Spaţiul de memorie I/O se interfaţează cu perifericele mapate în memoria externă. Multe dintre procesoarele DSP evoluate dispun de memorii cache, de program şi de date pe cip şi pot accesa spaţii largi de memorie externă. În majoritatea procesoarelor DSP moderne este inclusă şi o facilitate de manipulare a blocurilor de date, fie din memoria internă, fie în cea externă, ceea ce face posibil ca volume mari de date sau programe să fie stocate în afara cip-ului, în memorii mai lente şi care să fie transferate în memoria internă, mai rapidă, atunci când este necesar. De exemplu, procesoarele TMS320C2000 nu au două blocuri de memorie de date pe cip împreună cu magistralele aferente. Un bloc de memorie internă poate fi configurat software să îndeplinească rolul de memorie de program, sau memorie de date. 12
Procesoare numerice de semnal - Cap.2
Spaţiul de memorie Procesorul DSP trebuie să poată adresa şi accesa o memorie. Multe procesoare utilizează o memorie de program programabilă pe cip pentru aplicaţii complexe, aceasta permiţând cel mai eficient acces. Adăugând o memorie flash pe cip se face un pas important spre aplicaţiile compacte, cu cost scăzut, şi în special pentru fazele de dezvoltare şi pentru aplicaţii relativ simple. Unele procesoare dispun şi de un mic spaţiu de memorie RAM pe cip, care poate fi configurată în mod dinamic ca memorie de program. Atunci când este necesară o memorie program externă, trebuie avute în vedere mărimea memoriei şi viteza de acces. Cu cât frecvenţa ceasului procesoarelor DSP creşte, cu atât timpul de acces la memoria externă trebuie să scadă. Un exemplu de hartă de memorie pentru TMS 320C5510 este dat în Fig.2.4. Aşa cum se poate observa, acest procesor dispune de o hartă de memorie unificată, astfel încât accesurile la program şi la date au loc în acelaşi spaţiu fizic. Memoria totală de pe cip, incluzând 32Kb de ROM, este de 352Kb (sau 176 Kcuvinte de 16 biţi). RAM-ul cu acces dual (DARAM - Dual-access RAM) se compune din 8 blocuri a câte 8Kb fiecare. Fiecare bloc DARAM poate realiza două accesuri pe ciclu (două citiri, două scrieri, sau o scriere şi o citire). Atât CPU, cât şi perifericele, pot citi sau scrie în memoria DARAM în acelaşi ciclu. Memoria DARAM este întotdeauna mapată în spaţiul de date şi are rolul de a stoca date. Memoria RAM cu acces unic (SARAM - Single-access RAM) se compune din blocuri de 8Kb. Fiecare bloc SARAM poate realiza un singur acces pe ciclu (fie o citire, fie o scriere). Atunci când viteza procesorului nu este un factor critic, timpul de acces la memorie poate fi extins utilizând o frecvenţă a ceasului mai mică. Această metodă duce la încetinirea ciclului procesorului, reducând astfel şi timpul de acces la memorie. O altă metodă este de a lăsa procesorul să ruleze la întreaga sa viteză, dar incluzând o serie de stări de aşteptare pentru accesarea memoriei. Stările de aşteptare permit procesoarelor DSP să aştepte execuţia operaţiilor efectuate de interfeţele externe mai lente. Aceste procesoare au de obicei pe cip memorie configurabilă ca memorie de program, permiţând astfel stocarea unor mici programe care să poată fi executate cu întreaga viteză. Încărcarea iniţială a programului din memoria de program externă mai lentă se poate realiza prin inserarea stărilor de aşteptare. Această metodă ocoleşte necesitatea utilizării unor memorii ROM rapide, care sunt scumpe, fără a sacrifica viteza de procesare.
Procesoare numerice de semnal - Cap.2
13
Fig.2.4 Harta memoriei procesorului TMS320C5510 Cantitatea de memorie ROM disponibilă on-chip variază de la un procesor la altul. Unele procesoare utilizează o memorie ROM restrânsă care conţine un program de încărcare (boot loader) care face legătura la memoria rapidă RAM de pe circuit sau externă. Aproape toate procesoarele DSP actuale dispun de memorie de date RAM on-chip. Pentru multe aplicaţii, memoria internă on-chip înlătură necesitatea accesului la o memorie de date externă. Procesoarele TMS320 utilizează unele locaţii ale memoriei de date pentru uz intern, aşa cum sunt vectorii de întreruperi şi registrele mapate în memorie. Aceste registre furnizează o modalitate convenabilă pentru a salva şi stoca conţinutul registrelor atunci când au loc schimbări de context sau în cazul transferului de date între acumulatoare şi alte registre. Memoria cache Sistemele de memorie ale procesoarelor pot fi optimizate prin utilizarea unei mici memorii rapide între procesor şi spaţiul mai larg de memorie lentă. Această memorie de mare viteză poartă numele de cache şi ea conţine cele mai recent accesate instrucţiuni sau date din memoria principală. Există două tipuri de cache: cache de tip L1, care este mică şi se plasează în apropierea nucleului procesorului, şi un cache mai mare, L2. Acestea se utilizează în mod curent în microprocesoare, 14
Procesoare numerice de semnal - Cap.2
iar noile generaţii de DSP-uri le utilizează şi ele pentru a stoca cele mai utilizate secţiuni de program sau de date. De exemplu, TMS320C55x dispune de un buffer de instrucţiuni de 64 biţi, care poate fi tratat ca un cache de program. Multe dintre instrucţiunile care se referă la bucle repetitive pot fi stocate în cache şi vor fi executate în mod repetat fără alte cicluri de fetch din memoria externă. Utilizarea memoriei cache grăbeşte accesul la codul şi la datele critice, dar poate fi afectat determinismului datelor şi creşterea complexităţii codului. Deplasarea memoriei Procesarea digitală permite partajarea sarcinilor unui procesor la prelucrarea mai multor semnale prin time-sharing, reducându-se astfel costul per semnal prelucrat. De exemplu, un singur procesor DSP poate prelucra mai multe canale ale unei linii T1, la care 24 de canale sunt combinate într-unul prin multiplexarea cu timp divizat. Semnalul multiplexat poate fi aplicat unui singur procesor. Prin schimbarea în procesor a coeficienţilor care corespund acelui canal înainte de a se aplica fiecare semnal component la intrarea procesorului, sistemul va funcţiona ca şi cum fiecare canal ar dispune de câte un procesor DSP specific. Această aplicaţie necesită utilizarea unei metode eficiente de deplasare a coeficienţilor şi a bufferelor de semnal între diferite locaţii ale memoriei. 2.4.4 Periferice şi sisteme de intrare / ieşire Procesoarele DSP dispun în mod obişnuit on-chip de periferice sau interfeţe pentru periferice pentru a facilita interfaţarea acestora la dispozitive externe precum un DAC, un ADC sau alte procesoare DSP sau microprocesoare. În plus, unele periferice interne sunt utilizate pentru a controla şi a coordona ceasurile procesoarelor DSP, mecanismul de transfer al datelor, precum şi facilităţile de gestiune a puterii (power management). De aceea este importantă o scurtă trecere în revistă a acestor periferice înaintea unei descrieri de detaliu a procesorului DSP şi a programării sale. Portul serial Interfaţarea unui procesor DSP cu dispozitive periferice implică utilizarea magistralelor de date, a magistralelor de adrese şi a semnalelor de control. Multe procesoare utilizează o magistrală de date comună pentru memoria de program externă, memoria de date, intrări / ieşiri digitale şi comunicaţiile de tip multiprocesor. Pentru a împiedica două dispozitive de a utiliza magistrala comună în acelaşi timp, aceste dispozitive sunt echipate cu un control de tip enable / disable (validare / invalidare). Timpul cerut de un dispozitiv pentru accesarea şi utilizarea magistralei de date determină timpul disponibil pentru alte periferice să opereze. Multe dintre procesoarele DSP actuale dispun atât de capacitate I/O serială, cât şi Procesoare numerice de semnal - Cap.2
15
paralelă. Portul serial are avantajul de a fi separat de magistrala de date. Astfel, el nu este limitat de un timp de acces rapid şi de posibile conflicte pe magistrală. Atunci când se transferă date spre şi dnspre procesorul DSP, un port serial (tipic de 16 biţi) este utilizat pentru a reţine datele transmise sau recepţionate, astfel încât procesorul DSP să poată opera cu acestea. Procesoarele actuale dispun de următoarele tipuri diferite de porturi seriale: 1) Un port serial standard utilizează 2 registre, unul pentru datele transmise şi unul pentru cele recepţionate. Procesorul este întrerupt la fiecare transfer de date. 2) Un port serial bufferat (BSP - Buffered Serial Port) constă dintr-o interfaţă pentru portul serial full-duplex şi dublu bufferată cu o unitate de autobufferare pentru transferul rapid al datelor între portul serial şi memoria internă a procesorului. DSP-ul este întrerupt doar dacă bufferul este fie gol, fie plin. 3) Portul serial cu multiplexare în timp divizat permite comunicaţia între mai multe procesoare DSP. De exemplu, procesorul TMS320C54x se poate conecta cu până la alte 7 dispozitive DSP prin portul serial cu multiplexare în timp divizat. El împarte intervalul de timp dat într-un număr de subintervale şi alocă câte un subinterval la fiecare canal. 4) Portul serial bufferat multicanal (McBSP - Multichannel BSP) este un BSP fullduplex de viteză ridicată. El este de obicei utilizat pentru a conecta un procesor DSP cu alte DSP-uri şi dispozitive. Este o facilitate nouă, inclusă doar în procesoarele TMS320 de ultimă generaţie. Interfaţa "host-port" (port gazdă) Interfaţa host-port (HPI - Host-Port Interface) este utilizată pentru a interfaţa un procesor gazdă (de exemplu un microprocesor) cu procesorul DSP. Ambele procesoare, şi cel gazdă şi DSP, schimbă informaţii prin memoria on-chip a DSPului, care poate fi programată ca memorie internă de date sau de program. Datele transferate sunt sub forma cuvintelor de 8 sau 16 biţi. Controlerul DMA Controlerul pentru accesul direct la memorie (DMA - Direct Memory Access) este utilizat pentru controlul transferului de date în spaţiul de memorie al procesorului DSP, spaţiu care include memoria şi perifericele interne sau externe. El operează independent de procesor. Transferul datelor se realizează sub forma blocurilor, iar controlerul DMA transmite o întrerupere procesorului când transferul s-a încheiat. De obicei, prin DMA se pot manipula canale multiple (de exemplu, 6 canale în cazul C54x), iar utilizatorul poate ataşa priorităti diferite sau aceeaşi prioritate acestor canale.
16
Procesoare numerice de semnal - Cap.2
Portul paralel Portul paralel se diferenţiază de cel serial prin aceea că el transmite şi recepţionează simultan mai mulţi biţi de date (în mod obişnuit, 8 sau 16). Cu toate că el poate asigura de obicei un transfer mai rapid, necesită mai mulţi pini pentru implementare. O altă diferenţă între porturile paralele şi cele seriale este că liniile de conectare şi de strobare sunt utilizate în comunicaţia paralelă pentru a indica transferul corect al datelor. În cazul comunicaţiei seriale, este utilizat un impuls de sincronizare sau un semnal de ceas derivat din datele însele. Pentru a păstra numărul pinilor folosiţi în comunicaţia paralelă cu dispozitive externe sau cu alte procesoare, un procesor DSP utilizează magistrala de date principală ca un port paralel. Procesorul DSP realizează această sarcină rezervând o parte a adreselor pentru spaţiul I/O şi prinutilizarea unui număr redus de pini de I/O pentru funcţii de conectare. Timerul hardware Cea mai mare parte a procesoarelor DSP dispun de timere hardware programabile care se utilizează ca surse de întreruperi periodice pentru procesor şi care mai pot fi folosite ca generatoare de semnal controlate prin software. Timerul constă dintr-o sursă de ceas, un divizor (pentru a reduce frecvenţa ceasului) şi un numărător cu decrmentare. Numărătorul este decrementat cu o unitate la fiecare front al ceasului şi întrerupe procesorul atunci când în numărător se atinge zero. Generatorul de ceas şi PLL Ceasul principal al procesoarelor DSP provine în mod normal fie de la surse externe de tact, fie de la un cristal exterior. Atunci când se foloseşte un cristal, procesorul DSP trebuie să aibă un oscilator intern care să fie pilotat de cristalul extern pentru a genera ceasul necesar. Pe de altă parte, dacă nu este inclus un oscilator intern, atunci trebuie implementat un circuit de ceas extern. Unele procesoare DSP posedă sintetizatoare interne de frecvenţă, numite PLL (Phase-Locked Loop), care pot creşte frecvenţa ceasului aplicat din exterior. Deci, un PLL crează o frecvenţă superioară a ceasului intern pe baza unui ceas extern cu frecvenţă scăzută, ceea ce are avantajul reducerii interferenţei electromagnetice a ceasului. Mai mult, un generator de ceas extern de frecvenţă joasă este mai ieftin. Funcţia PLL poate fi realizată fie prin hardware, fie se poate realiza un PLL programabil prin soft. PLL-ul hardware dispune de factori de multiplicare limitaţi de la 1 la 5, în timp ce PLL-ul software poate fi ajustat sub controlul soft-ului şi furnizează un set mai larg de factori de multiplicare (de exemplu, de la 0,25 la 16 în cazul procesoarelor TMS320C54x). Procesoare numerice de semnal - Cap.2
17
Gestiunea puterii Odată cu cererea crecândă de produse bazate pe DSP care să consume cât mai puţin şi să prelungească astfel durata de utilizare a bateriei de alimentare, procesorul DSP a început să încorporeze soluţii de gestiune a puterii (power management) alături de utilizarea tensiunii reduse (low-voltage). Se utilizează mai multe metode în gestiunea puterii: (1) controlul frecvenţei ceasului, (2) modul "power-down" şi (3) deconectarea perifericelor neutilizate. Mecanismele de control a frecvenţei ceasului pot fi programate să forţeze procesorul să ruleze la o fracţiune din viteza sa, deoarece majoritatea aplicaţiilor nu necesită o funcţionare la întreaga viteză a procesorului tot timpul. Se poate folosi acest timp inutil şi se poate forţa procesorul să lucreze la o viteză redusă. Cea mai mare parte a procesoarelor DSP dispun de mijloace prin care dispozitivul să fie adus în starea de "adormire" (sleep, sau power-down), în care se consumă cea mai mică putere, dar totuşi conţinutul curent al CPU este păstrat. Există mai multe nivele ale modului power-down, corespunzând situaţiei în care procesorul este oprit sau nu; ceasul procesor sau ceasul perifericelor este oprit; liniile externe de date, adrese şi control sunt aduse în starea de înaltă impedanţă; etc. Procesorul DSP poate fi "trezit" fie de către activitatea perifericelor, fie prin întreruperi externe. O altă cale de gestiune a puterii este de a deconecta complet perifericele neutilizate.
2.5 Dezvoltări software De obicei, proiectarea se focalizează pe dezvoltarea şi implementarea algoritmilor DSP pentru a obţine funcţionarea dorită pentru o aplicaţie dată. Odată ce algoritmii cei mai potriviţi au fost aleşi, sarcina rămasă este de a dezvolta şi testa programul. Folosind un limbaj de programare se transpune algoritmul într-o formă care să poată fi prelucrată pe baza resurselor disponibile dintr-un anumit procesor. Algoritmul este iniţial descris prin intermediul ecuaţiilor sau a organigramelor care utilizează nume simbolice pentru intrări şi ieşiri. Această formă de reprezentare a algoritmului este utilă pentru documentare şi pentru generarea datelor de test. În documentarea unui algoritm este adesea util să se clarifice care intrări şi ieşiri sunt implicate în concordanţă cu diagramele de semnale în timp. Este esenţial ca documentarea programelor să posede cât mai multe titluri şi comentarii pentru a uşura munca de depanare ulterioară şi este de ajutor în procesul de întreţinere a programului. Pentru uşurinţa înţelegerii este important să se folosească mnemonici cu înţeles rapid pentru variabile, etichete, nume de subrutine, etc. În multe aplicaţii, timpul de execuţie şi mărimea memoriei sunt dictate de rata de eşantionare şi de complexitatea algoritmului implementat pe un anumit procesor DSP. Fig.2.3 arată diagrama bloc a unui CPU de date din structura unui procesor DSP. Arhitectura şi setul de instrucţiuni a procesorului DSP au un impact major 18
Procesoare numerice de semnal - Cap.2
asupra implementării algoritmilor într-o formă optimală. Sarcinile programatorului se rezumă la deplasarea datelor între memorie şi registre şi de a gestiona unităţile de operare astfel încât ALU şi MAC să opereze corect asupra eşantioanelor de date pentru a realiza procesarea dorită. Timpul de execuţie al unui algoritm particular depinde atât de eficienţa codului, cât şi de durata unui ciclu instrucţiune. Dezvoltarea soft-ului pentru DSP trebuie să exploateze în totalitate procesarea paralelă şi capacităţile de "pipeline" care se regăsesc în structura hard şi în cea dată de setul de instrucţiuni asociate unui procesor dat. Utilizarea unei tehnici adecvate de programare este esenţială în utilizarea cu succes a DSP-urilor. O abordare structurată şi bine documentată a programului trebuie avută în vedere încă de la început. Trebuie ţinut cont de o serie întreagă de factori care influenţează semnificativ procesarea digitală, precum: cerinţele de memorie, limitările procesorului, mărimea programului, timpul de execuţie, etc. Blocurile de memorie program şi de date trebuie organizate astfel încât să se minimizeze timpul de acces. Există două limbaje de programare curent utilizate pentru scrierea codului DSP: asamblare şi C. Deoarece procesorul permite ca mai multe unităţi de procesare să lucreze în paralel, limbajele de programare de nivel înalt, precum C, sunt adesea ineficiente. 2.5.1 Setul de instrucţiuni Instrucţiunea defineşte operaţiile ce trebuie executate de către procesorul DSP la fiecare ciclu de ceas. Setul de instrucţiuni reprezintă totalitatea operaţiilor pe care un anumit procesor le poate efectua. Setul de instrucţiuni cuprinde instrucţiuni pentru procesarea aritmetică, pentru manipularea datelor, deplasarea datelor în memorie, operaţii logice, testarea unor condiţii şi pentru controlul programului astfel încât să se optimizeze exploatarea memoriei şi timpul de execuţie. Multe dintre procesoarele TMS320 suportă două forme pntru setul de instrucţiuni: o formă mnemonică şi o formă algebrică. Forma mnemonică este cea folosită cel mai des. Instrucţiunile aritmetice realizează operaţiile de bază folosind registre de deplasare, multiplicatorul şi ALU. Aceste instrucţiuni includ: adunarea, scăderea, calculul valorii absolute, înmulţirea, înmulţirea cu sumare, înmulţirea cu scădere, negarea şi deplasările spre stânga sau spre dreapta. În funcţie de arhitectura procesorului, pot exista o serie de operaţii care specifică registrele implicate, rolul bitului de transport şi dacă o extensie de semn ar trebui apelată. Multiplicatorul are asociat un set specific de instrucţiuni de înmulţire cu acumulare care manipulează şi eventualele depăşiri intermediare. Operaţiile logice, precum AND, OR, deplasările logice, de testare a stării logice şi XOR (eXclusive-OR) sunt şi ele ataşate ALU şi se folosesc pentru mascare sau pentru setarea unor anumiţi biţi ai operanzilor. Aceste instrucţiuni pot fi de Procesoare numerice de semnal - Cap.2
19
asemeni utilizate pentru manipularea biţilor (de exemplu testare, setare, resetare, complementare, etc.). Ele pot opera asupra orcărui bit (sau perechi de biţi) din componenţa unui cuvânt din memorie sau dintr-un registru intern. Instrucţiunile pentru deplasarea datelor acoperă încărcarea şi stocarea datelor (sau a unui bloc de date) din şi în memoria de date, între memoria de program şi cea de date, sau între registrele interne. Instrucţiunile pentru testarea condiţiilor furnizează suportul pentru operaţiile de control ale programului, ca de exemplu instrucţiunea IF-ELSE din C. Condiţiile care pot fi testate variază de la unprocesor la altul, dar de obicei includ valoarea acumulatorului (adică zero, pozitivă sau negativă), starea unor linii de intrare, precum şi starea unor flag-uri specifice, precum carry (transport), overflow (depăşire), etc. Instrucţiunile de control ale programului includ ramificări, apeluri de subrutine, reveniri din subrutine şi întreruperi. Instrucţiuni de repetare, repetare a unui bloc şi de întârziere a ramificărilor sunt disponibile doar pentru procesoarele din generaţiile avansate. Aceste instrucţiuni pot fi executate de obicei într-o manieră condiţionată de rezultatele testării anumitor condiţii. 2.5.2 Programe de asamblare Pentru a proiecta cel mai eficient sistem DSP, codul scris trebuie optimizat pentru a exploata cât mai bine resursele disponibile ale unui procesor. Limbajul de asamblare constituie prima etapă situată deasupra codului maşină utilizat direct de către procesor; astfel, el determină cea mai rapidă execuţie şi cea mai compactă formă de reprezentare a unui algoritm. Instrucţiunile sunt desemnate prin mnemonici, registre interne şi simboluri predefinite. Numerele pot fi reprezentate în formă hexazecimală, zecimală, sau binară, sau prin intermediul unor simboluri definite de către utilizator. Asamblorul (assembler) plasat în calculatorul gazdă traduce programul de asamblare în cod obiect, care poate fi descărcat direct în memoria de program a procesorului în vederea execuţiei. Scrierea în cod de asamblare permite specificarea modului de generare a adreselor, modul de exploatare a resurselor procesorului (registre şi unităţi funcţionale), setarea modului de lucru, precum şi alte operaţii de administrare, dând astfel programatorului posibilitatea de a deţine controlul total asupra performanţelor. Instrucţiunile de asamblare sunt alcătuite din câmpuri separate de spaţii, pentru etichetă, mnemonică, informaţia de adresă, şi pentru comentarii. Atunci când sunt acceptate operaţiile paralele, mai sunt necesare unele câmpuri suplimentare. Pentru a facilita trecerea de la diagramă la programul de asamblare, adresele tuturor variabilelor şi ale constantelor trebuie să primească nume simbolice care să corespundă cu cele din diagramă.
20
Procesoare numerice de semnal - Cap.2