Home
Accesso / Registrazione
 di 

DSP: Cosa sono i Digital Signal Processor? Quinta Parte

DSP: Cosa sono i Digital Signal Processor?

DSP: 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. Quinta puntata.

Nelle precedenti puntate abbiamo analizzato la struttura di base dei Digital Signal Processing, cercando di comprenderne il funzionamento ed evidenziando nel contempo le differenze rispetto ai tradizionali microprocessori. Abbiamo poi sottolineato la notevole velocità di processo dei DSP (50 ns per istruzione) e la presenza, nei moderni DSP, di tre unità distinte di elaborazione logica denominate ALU, PLU e ARAU. Giunti a questo punto, dobbiamo esaminare le istruzioni che consentono al DSP di elaborare segnali digitali nel modo più veloce possibile.

Per ovvie ragioni di spazio, descriviamo nell’articolo solo le istruzioni che meritano un po’ di attenzione, ovvero quelle che possono essere ritenute caratteristiche dei DSP. In effetti, basta sfogliare la “User’s Guide” del TMS320C50 per scoprire che questo chip dispone di ben 126 diverse istruzioni: è quindi intuibile come l’approccio al software sia molto diverso rispetto a quello che potremmo avere nei confronti di “normale” microprocessore.

Il DSP TMS320C50 della Texas Instruments

Il set di istruzioni del TMS320C50 della Texas Instruments può essere suddiviso in sette grandi gruppi ovvero in istruzioni dedicate all’accumulatore (Accumulator Instructions), ai registri ausiliari (Auxiliary Instructions), alle periferiche di ingresso/uscita (I/O Operations), alla PLU (Parallel Logic Unit Instructions), alla moltiplicazione (Multiply Instructions), ai salti condizionati o incondizionati (Branch Instructions) e al controllo dei parametri operativi (Control Instructions).

Tra questi gruppi di comandi, il primo da esaminare è senz’altro quello relativo all’accumulatore in cui, oltre alle solite operazioni di store (memorizzazione), di load (trasferimento) e di comparazione, troviamo anche istruzioni più complesse come la NORM, la BSAR e la CRLT che si rivelano particolarmente adatte alle elaborazioni di un DSP.

DSP Registro accumulatore

dsp_registro_accumulatore_istruzioni

La NORM (Normalize contents of ACC) consente di manipolare il risultato di operazioni matematiche complesse per poterlo utilizzare in istruzioni successive. Per essere più precisi, l’istruzione NORM esegue la normalizzazione del contenuto dell’accumulatore, ovvero converte il numero binario intero contenuto nell’accumulatore in un numero a virgola mobile (Floating Point). Quest’ultimo risulta più adatto alle problematiche di elaborazione numerica ove venga richiesta una notevole precisione di calcolo. Utilizzando la notazione in virgola mobile possiamo espandere la precisione nelle operazioni di somma e prodotto a scapito però di una più complessa sequenza di comandi.

Nella USER’S GUIDE a pagina 7-31 è possibile vedere due esempi di programmi contenenti operazioni in virgola mobile. Ricordiamo che, nel caso del TMS320, un numero in virgola mobile è caratterizzato da un bit di segno, da una mantissa a 24 bit e da un esponente a 8 bit.

Sempre all’interno del gruppo di comandi dedicati all’accumulatore troviamo delle particolari istruzioni che consentono di traslare i dati all’interno del registro accumulatore. Un esempio di tali istruzioni è la BSAR (Barrel-shift ACC right) che cambia di posizione i primi 16 bit del registro accumulatore con gli ultimi 16 bit. Questa istruzione risulta particolarmente utile quando si lavora con la notazione in virgola mobile.

E’ bene ricordare che molte istruzioni possono sembrare complesse, ma sono state create appositamente per semplificare la stesura del programma: infatti, alcune istruzioni rappresentano già da sole dei “micro programmi” e quando sono invocate compiono una serie diversificata di operazioni.

Sempre rimanendo nel gruppo dedicato all’accumulatore, un esempio di istruzione di tipo “micro programma” è la CRLT (Test for ACC smaller than ACCB) che impone al processore DSP di compiere una sequenza di operazioni sul registro accumulatore e sul relativo buffer (ACCB).

Per la precisione, l’istruzione CRLT copia il dato presente in ACC nel buffer ACCB e setta il bit di carry se il contenuto di ACC è minore del valore contenuto nell’ACCB. Al contrario, l’istruzione CRLT trasferisce il dato presente nel buffer ACCB all’interno dell’accumulatore se il contenuto di ACCB è minore del contenuto di ACC.

La condizione di uguaglianza tra ACC e ACCB non causa movimenti di dati ma solo il settaggio a zero del bit di carry. Tutte le operazioni appena citate, appartenenti all’istruzione CRLT, sono eseguite dal TMS320C50 in un solo ciclo macchina. Un’altra istruzione che lavora con l’accumulatore è la LACC (Load ACC with shift) che carica nell’accumulatore un dato indirizzato direttamente o indirettamente. Nell’indirizzamento diretto dopo l’istruzione LACC occorre scrivere l’indirizzo di memoria in cui si trova il dato da copiare.

Nell’indirizzamento indiretto, invece, la locazione dell’area di memoria in cui si trova il dato viene indicata da uno dei registri ausiliari AR.

DSP: Istruzioni di input/output

Una sezione software fondamentale in un processore DSP è quella relativa alla gestione della memoria dati e delle periferiche (I/O and Data Memory operation). Questo gruppo di comandi è stato pensato per rendere il microprocessore più flessibile alle varie applicazioni verso il mondo esterno. Qui troviamo istruzioni di uso comune come IN (Input data from port) e OUT (Output data to port) ma anche istruzioni come la IDLE (Idle until interrupt) o la RPTB (Repeat block) che consentono un uso avanzato della CPU. L’istruzione IDLE, ad esempio, consente l’attesa di una interruzione (interrupt) senza la necessità di creare una routine specifica. In pratica, quando la CPU incontra questa istruzione pone il DSP in un stato di funzionamento a basso consumo denominato “Power Down”.

In questa fase di attesa il DSP mantiene in funzione la porta seriale e la periferica timer. L’uscita dallo stato di Power Down avviene automaticamente quando sopraggiunge una richiesta hardware di interrupt che coincide nel TMS320C50 con il reset del bit INTM del registro di stato ST0.

Sempre all’interno del blocco di istruzioni di I/O troviamo la TBLR (Table read) e la TBLW (Table write). Queste ultime due istruzioni sono state implementate per gestire nel miglior modo possibile le zone di memoria contenenti dei dati sequenziali come ad esempio dei coefficienti di correzione o dei fattori di moltiplicazione. Le istruzioni TBLR e TBLW possono essere eseguite sia attraverso un indirizzamento diretto che indiretto. Nel primo caso, occorre scrivere di seguito all’istruzione l’indirizzo di memoria in cui vogliamo trasferire il dato letto, mentre la locazione di memoria in cui andare a leggere è presente nell’accumulatore.

Nel secondo caso, indirizzamento indiretto, le locazioni da elaborare sono indicate dai registri ausiliari AR. Questo secondo metodo di indirizzamento consente di “setacciare” un’area di memoria alla ricerca di un particolare dato oppure di leggere da una tabella o di creare una tabella in una zona di memoria esterna al microprocessore. Un’altra istruzione appartenente al blocco definito di I/O è la SMMR (Store memory-mapped register) che merita un breve approfondimento.

Quest’ultima serve per memorizzare il contenuto di un registro in una locazione di memoria RAM il cui indirizzo è indicato di seguito all’istruzione stessa. Fino a qui nulla di nuovo, ma abbinando all’istruzione SMMR il comando RPT risulta possibile incrementare di una unità in modo automatico la locazione RAM in cui scrivere il dato.

Istruzione analoga alla SMMR è la LMMR (Load memory-mapped register) che consente di copiare il contenuto di una locazione di memoria all’interno di un registro. Le istruzioni LMMR e SMMR sono particolarmente utili per gestire la comunicazione tra le porte parallele e la memoria interna e sono presenti (ovviamente con una diversa sintassi) in diversi modelli di DSP. Nel caso del TMS320C50 un esempio di sintassi corretta per trasferire dei dati dal mondo esterno alla memoria o viceversa è la seguente:

INPUT:
LDP #0h
RPT #0FFh
SMMR 50h,#0F00h
RET OUTPUT:
LDP #0h
RPT #0FFh
LMMR 51h,#0F00h RET

 

 

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

Ultimi Commenti