DSP: Cosa sono i Digital Signal Processor? – quarta parte

DSP: Cosa sono i Digital Signal Processor?

DSP: Cosa sono i Digital Signal Processor? – quarta parte. Veniamo ora alla sezione che si occupa di generare gli indirizzi per leggere o scrivere in memoria. Al centro di questa sezione troviamo l’unità di calcolo degli indirizzi denominata ARAU(Auxiliary Register Arithmetic Unit)avente il compito di generare gli indirizzi e di gestire i registri ausiliari di indirizzamento rappresentati nello schema a blocchi con la sigla AUXREGS.

Il contenuto di questi ultimi rappresenta la locazione di memoria in cui prelevare o scrivere dei dati. Il compito di scegliere un registro ausiliario piuttosto che un altro è affidato al registro denominato ARP (Auxiliary Register Pointer). Quest’ultimo è un registro a 3 bit in grado di selezionare8 diversi registri ausiliari che prendono il nome di AR0, AR1, AR2, AR3,AR4, AR5, AR6 e AR7. Per meglio comprenderei registri ausiliari facciamo un esempio.

Se il registro ARP contiene il valore 010 binario significa che il registro ausiliario interessato è il secondo ovvero l’AR2. Se quest’ultimo contiene, ad esempio, il valore 0617hex significa che il dato interessato èalla locazione di memoria 0617 hex. I registri ausiliari possono essere caricati direttamente con un valore specifico attraverso l’istruzione MAR (Modify Auxiliary Register) o LAR (Load Auxiliary Register).

DSP: TMS320C50 top view

TMS320C50_top_view

Tratteremo i modi di indirizzamento più avanti in modo dettagliato fornendo anche qualche esempio. L’ARAU risulta connessa anche al registro CBCR (CircularBuffer Control Register) che viene utilizzato per definire un buffer “circolare”, ovvero una sequenza di locazioni di memoria in cui memorizzare o leggeredei dati.

DSP: Il buffer circolare

A sostegno del CBCR ci sono i registriCBER (Circular Buffer End Address),CBER1, CBER2 nonché i registri CBSR (Circular Buffer Start Address),CBSR1 e CBSR2. I primi tre registri definiscono l’indirizzo finale della zona di memoria che abbiamo scelto come buffer circolare, mentre i secondi definiscono l’indirizzo di partenza. Il concetto di buffer circolare può risultare un po’ difficile da comprendere, mauna volta impadroniti della tecnica,rende molto più veloci le operazioni dilettura sequenziale dei dati.

Per creare un buffer circolare occorre dapprima decidere quale circular buffer usare se il CBCR1 o il CBCR2. I tre bit piùbassi (b0-b2) di CBCR determinano quale registro ausiliario usare; il b3, se posto a uno, seleziona il buffer CBCR1mentre se è posto a zero lo disabilita.Dal bit b4 al b6 possiamo scegliere gli AR per il CBCR2 e con il b7 scegliamo se abilitarlo oppure no. Una volta settato il registro CBCR dobbiamo caricare gli indirizzi relativi al buffer circolare.La sequenza di istruzioni può essere:SPLK #200h,CBSR1 (carica il valore200 hex nel registro che deve contenere l’indirizzo di partenza); SPLK#203h,CBER1 (carica il registro di fine buffer con il valore 203 hex); SPLK#0Eh,CBCR (trasferisce nel CBCR il valore 0E hex, ovvero il numero binario00001110, allo scopo di selezionare il buffer circolare numero 1 e il registro ausiliario AR6 che ci servirà come puntatore alle varie locazioni di memoria che rappresentano il nostro buffercircolare).

DSP Digital Signal Processor indirizzi di memoria interna

dsp_indirizzi_memoria_interna

Concludiamo il processo con le istruzioni LAR AR6,#200h (trasferisce il valore di partenza del buffer nel registro ausiliario prescelto) e LACC *+. Quest’ultima istruzione èmolto potente poiché consente di trasferire nell’accumulatore il valore contenuto nella locazione di memoria individuata dal registro AR in uso corrente e di incrementare quest’ultimo a fine operazione. Torniamo ora alla descrizione dei blocchi fondamentali del nostro processore DSP occupandoci del registro a 16 bit INDX (Index Register).La sua funzione risulta importante in alcuni modi di indirizzamento poichè il contenuto di questo registro può essere sommato o sottratto al contenuto dei registri ausiliari. Risulta così possibile compiere dei salti in memoria senza dover caricare il nuovo indirizzo negli appositi registri, semplicemente compiendo un’operazione di somma o sottrazione.Da quanto finora esposto possiamo dedurre che i modi di indirizzamento possibili all’interno dei processori della Texas Instruments sono molteplici e alcuni di essi risultano anche abbastanza complicati da utilizzare;d’altro canto sono stati concepiti per rendere il più veloce possibile l’esecuzione delle varie operazioni.

DSP: La Global Memory

Proseguiamo nella descrizione dei registri con il GREG (Global MemoryAllocation Register), il cui compito è di definire la dimensione massima del blocco di memoria globale. Attraverso questo registro è possibile controllare una zona di memoria esterna come se fosse interna al dispositivo. Il registro GREG consente l’utilizzo di una memoria esterna, denominata globale, anche se condivisa con un altro dispositivo. Quando si indirizza nell’area globale,automaticamente vengono generati dei segnali di controllo per impedire ad altri dispositivi esterni di accedere,nello stesso momento, alla medisima zona di memoria. Le linee di controllo generate sono adatte qualora il TMS320C50 lavori con la global memory in concomitanza a microprocessori della stessa famiglia. In caso contrario occorre realizzare un circuito logico esterno per rendere compatibili i segnali. La memoria del TMS320C50 può assumere due diversi significati in funzione del modo di utilizzo del DSP.:come microprocessore o come microcontrollore.

Le due configurazioni DSP

Nella configurazione a microprocessore nell’area dedicata al programma troviamo: le tabelle di allocazione degli interrupt, la zona RAM dove scrivere il programma, una zona dedicata alla RAM o ROM esterna e un blocco dedicato alla RAM ad accesso duale. Se utilizziamo il DSP come microcontrollorel’area di memoria compresa tra gli indirizzi 0030 hex e 07FF hex è dedicata ad una ROM interna. La parte centrale rimane invariata, così come la zona di memoria esterna e la zona di RAM ad accesso duale.

Nella sezione relativa ai dati troviamo un primo blocco in cui risiedono i registri del dispositivo.Il processore possiede ben 28tipi di registri diversi; molti di questi li abbiamo già incontrati nella descrizione della struttura a blocchi. Partendo dall’ indirizzo 0060 hex fino a 007F hex troviamo una zona di DARAM (Dual Access Ram) identificata dal bloccoB”.

All’interno della zona dei dati esistono altri due banchi di memoria DARAM siglati B0 e B1. A questi tre blocchi di memoria possono accedere simultaneamente i due bus presenti all’interno del dispositivo. All’ indirizzo0800 troviamo la SARAM ovvero laRAM a singolo accesso.L’unità aritmetico-logica (ALU)La ALU è un’ unità a 32 bit a cui possono arrivare dati attraverso l’accumulatore,il data bus, l’ ACCB oppure attraverso il registro di prodotto(PREG). Oltre a svolgere le classiche operazioni aritmetiche, la ALU puòcalcolare funzioni logiche e manipolare bit in modo molto veloce.Nonostante la ALU lavori con parole a 32 bit, i suoi ingressi sono a 16 bit.La suddivisione di una parola a 32 bit in due da 16 bit viene fatta automaticamente dal registro di POSTSCALER, il quale si occupa di dividere il contenuto dell’ accumulatore e di memorizzarlo in due locazioni contigue. La stessa operazione è compiuta dal PRESCALER ma in senso opposto:quest’ultimo invia alla ALU i primi 16 bit e poi gli altri 16 bit di memoria in modo da riformare il dato originale.

Legati ai risultati delle operazioni della ALU vi sono ben 14 “salti” di programma condizionati. Alcuni di essi testano direttamente l’unità centrale, altri l’ accumulatore. Come abbiamo già avuto modo di dire, questo dispositivo è in grado di compiere operazioni di moltiplicazione a 16 bit con una sola istruzione, ma risulta molto semplice moltiplicare anche numeri più grandi. La ALU per compiere le operazioni di moltiplicazione si serve di registri dedicati quali il TREG0 e ilPREG il cui contenuto può essere traslato a destra o a sinistra di un numero di bit pari al contenuto del registro PM. La ALU è in grado anche di elevare al quadrato un dato; questa operazione, che in un dispositivo di tipo tradizionale richiede una sequenza di istruzioni, nel nostro DSP è svolta con una singola istruzione, la SQRA o SQRS, con un notevole guadagno di tempo.

Leave a Reply