Home
Accesso / Registrazione
 di 

DSP: Cosa sono i Digital Signal Processor? - terza parte

DSP: Cosa sono i Digital Signal Processor?

DSP: Cosa sono i Digital Signal Processor? Per conoscere ed imparare ad utilizzare questi nuovi processori che stanno rivoluzionando il sistema di elaborazione delle informazioni digitali. Una serie di articoli dedicati alla programmazione dei chip TMS320C5X della Texas Instruments, appartenenti ad una delle più flessibili e diffuse famiglie di DSP. Seconda puntata. Nella scorsa puntata abbiamo sottolineato l’importanza delle possibili applicazioni dei processori disegnali digitali.

Proseguiamo con l’approccio con i DSP ed entriamo nel vivo dell’argomento analizzando l’architettura interna del processore TMS320C50 che, come sipuò notare dal relativo schema a blocchi, si sviluppa attraverso due bus principali: il ProgramBus e il Data Bus. 

Il primo effettua il trasferimento delle istruzioni dalla memoria programma alle varie unità interne del dispositivo, mentre il secondo collega tra loro tutti gli elementi del processore DSP,compresa l’unitàaritmetico-logica, i vari registri ausiliari e la memoria dati. Sia il DataBus che il Program Bus sono disponibili all’esterno del chip per permettere l’espansione del processore.L’unità matematica principale è la ALU(Arithmetic Logic Unit) a cui appartengono i due registri accumulatori contraddistinti dalle sigle ACC(Accumulator) e ACCB (Accumulator Buffer). L’ACC,un registro a 32 bit composto da una parte alta(ACCH) e da una parte bassa (ACCL), viene impiegato dalla ALU per trasferire il risultato delle operazioni compiute.L’altro accumulatore(ACCB) è anch’esso a 32bit ma a differenza del primo viene usato dalla ALU come registro temporaneo(buffer) dei dati provenienti dall’accumulatore principale.

L’ACCB viene anche utilizzato nelle operazioni di somma a 32 o 64 bit come registro di riporto quando,attraverso l’istruzione ADDB, si addizionano direttamente i contenuti di due registri. Come èintuibile, la ALU è il vero cuore di questo dispositivo:essa dispone di due“porte” per l’ingresso di dati a 16 bit e di una “porta” di uscita a 32 bit. La ALU risulta direttamente connessa a tre registri, ST0 (StatusRegister 0), ST1 (Status Register 1) ePMST (Processor Mode StatusRegister), che rappresentano quelli principali con cui l’unità logica aritmetica si interfaccia al software utente.All’interno di questi registri troviamo dei particolari bit di controllo qual il’OVM (Overflow mode) che consente di selezionare il tipo di overflow dell’unitàdi calcolo e l’SXM (Sign ExtensionMode) che esprime il segno del numero con cui stiamo lavorando, indica cioèse il numero è positivo o negativo. Le informazioni sull’esito delle operazioni che sta compiendo la ALU sono riportate in tre flag siglati OV (OverflowFlag), TC (Test/Control Flag) e C(Carry).

Descriveremo in seguito dettagliatamente ognuno di questi flag.Proseguiamo nell’analisi dello schema a blocchi con gli altri registri disponibili nel TMS320C50. Il registro a 16 bitDBMR (Dynamic Bit ManipulationRegister) svolge la funzione di bufferdei dati in arrivo dall’unità logicaparallela PLU (Parallel Logic Unit). Le istruzioni che interessano il DBMRsono soprattutto quelle di comparazione tra due dati disponibili in memoriaoppure tra un dato in memoria e il contenuto del registro stesso. In quest’ultimocaso, un esempio di possibile istruzioneè la CPL (Compare DBMR orLong Immediate With Data Value) che compara il contenuto del registro DBMR con il valore contenuto nella locazione di memoria specificata nell’istruzione,il risultato della comparazioneè indicato dallo stato del bit TC.

DSP TMS320C50 - schema a blocchi

TMS320C50_schema_blocchi

Il registro denominato MULTIPLIER ha il compito di eseguire la moltiplicazione parallela di due numeri a 16 bit; i fattori della moltiplicazione sono disponibili nella memoria dati o nel registro TREG0 (TemporaryMultiplicand) mentre il risultato viene memorizzato nel registro PREG(Product Register). Ad esempio, invocando l’istruzione “MPY 40Dh” il chip esegue una moltiplicazione tra il contenuto della locazione di memoria40D Hex e il contenuto del registroTREG0. Il risultato viene memorizzato in PREG.

DSP: Il program counter

Continuiamo nella descrizione con il registro PC (Program Counter) che contiene l’indirizzo di memoria dell’istruzione da eseguire, esattamente come avviene nei classici microprocessori. Vicino al PC troviamo una particolare area di memoria di 8x16 bit denominata Stack in cui il processore salva il contenuto del Program Counter durante la gestione delle interruzioni. Accanto allo Stack troviamo il registro a 16 bit BMAR (BlockMove Address Register) usato per il trasferimento dei dati da una zona di memoria ad un’altra. Ad esempio, con l’istruzione BLDD (Block Move FromData Memory to Data Memory) possiamo spostare dei dati da una locazione specificata nel primo operando alla locazione indicata dal contenuto del BMAR. Scrivendo “BLDD300h,BMAR”, il processore sposta i dati contenuti nella locazione 300 hex alla locazione indicata dal contenuto del registro BMAR. Durante le operazioni di moltiplicazione possiamo utilizzare il registro BMAR per indicare in quale zona di memoria è contenuto uno dei due fattori della moltiplicazione,possiamo così realizzare il prodotto tradue dati contenuti in due diverse locazioni di memoria senza passare per la ALU che quindi rimane libera per compiere altre operazioni.

Proseguendo nell’analisi incontriamo i registri degli interrupt e precisamente, l’IPTR(Interrupt Pointer), l’INT (InterruptNumber), l’INTM (Interrupt Mask Bit),l’IMR (Interrupt Mask Register) el’IFR (Interrupt Flag Register). Il TMS320C50 dispone di ben 2K di memoria dedicata ai vettori di interrupt;questa zona è gestita dall’IPTR,un particolare registro a 5 bit che serveper individuare la porzione di memoria relativa all’interrupt in corso.

Il numero dell’interrupt processato è determinato dal valore che assume il registroINT#. Quest’ultimo, composto da quattro bit, identifica 16 tipi di interruzioni.L’INTM non è un vero e proprio registro,ma semplicemente un bit del registroST0 che viene utilizzato per abilitare o disabilitare l’uso degli interrupt.

DSP TMS320C50 registri principali

TMS320C50_registri_principali

Gli ultimi due registri di interrupt disponibili sono l’IFR e l’IMR. L’IFR èun registro a 16 bit in cui vengono memorizzati gli interrupt avvenuti: ad ogni bit di tale registro è associato un diverso tipo di interruzione, in questo modo possiamo rilevare la provenienza dell’interruzione. Il registro IMR,anch’esso a 16 bit, consente di mascherare(abilitare/disabilitare) le varie possibili fonti di interrupt. Non approfondiamo ulteriormente la descrizione delle interruzioni poichédedicheremo a loro (interrupt, vettori e registri di interrupt) una puntata aparte in quanto sono numerose ed alcune di esse anche complesse da gestire.

DSP: Registri di ripetizione

Proseguiamo perciò l’analisi dello schema a blocchi con i registri PAER (Block Repeat Address End Register) ePASR (Block Repeat Address StartRegister) entrambi a 16 bit che consentono,mediante una sola istruzione, la ripetizione dell’esecuzione di un intero blocco di programma. Per fare ciòoccorre utilizzare il registro PASR in cui si trasferisce l’indirizzo iniziale del blocco di istruzioni da ripetere e il registro PAER in cui si carica l’indirizzo dell’istruzione finale del blocco. Il dato relativo al numero di volte che devono essere ripetute le istruzioni è contenuto nel registro BRCR (Block RepeatCounter Register). L’operazione di ripetizione viene controllata dall’unitàsiglata COMPARE. La ripetizione avviene se il flag siglato BRAF (BlockRepeat Active Flag) è attivo: quest’ultimo viene comandato automaticamente dall’istruzione di ripetizione.

Quanto finora descritto rappresenta uno dei possibili modi per la ripetizione di un blocco di istruzioni ma possiamo decidere di ripetere anche una sola istruzione invocando il comando di ripetizione.Per chiarire meglio l’utilizzo dei registri e dei comandi di ripetizione riportiamo un breve esempio.Supponendo di voler ripetere un blocco di programma, dovremo per prima cosa memorizzare nel registro BRCR il numero delle ripetizioni scrivendo“SPLK #010h,BRCR”; il simbolo #indica che il valore contenuto nel primo operando è un numero e non un indirizzo di memoria, mentre il valore 10 hex indica che vogliamo ripetere il blocco di istruzioni per 16 volte.Digitiamo poi l’istruzione “RPTBFINE” allo scopo di trasferire nel registro PASR il contenuto del PC relativoall’istruzione seguente: nel PAER verràcaricato il valore dell’indirizzo a cui corrisponde la label FINE.

Digital Signal Processor - condivisione memoria dati

dsp_condivisione_memoria_dati_esterna

Da qui in poi ci sarà il blocco di istruzioni da ripetere: alla fine di quest’ultimo dovremo specificare la label FINE. Se,al contrario, desideriamo ripetere una singola istruzione, dovremo usare l’istruzione RPT. Quest’ultima fa uso del registro RPTC a 16 bit che in pratica èun contatore a decremento: quando selezioniamo l’istruzione di ripetizione,nell’RPTC viene caricato l’operando specificato di seguito alla RPT che rappresenta il numero di volte che l’istruzione seguente deve essere ripetuta.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 3 utenti e 51 visitatori collegati.

Ultimi Commenti