background image

1.  Możliwości implementacyjne filtrów SOI i NOI 

w procesorze 

TMS320C6713

4: 

 

FILTR SOI 

w procesorze TMS320C6713

4

 

/*genearalnie obowiązuje większośd komentarzy z ECHA.*/  
 
//zmienne globalne  
int16 BUF[8]; //tymczasowy bufor  
int pos*8+; //zmienna określająca pozycje  
float H*8+ = ,-; //tablica ze współczynnikami filtru  
int ch; //zmienna określająca aktualny kanał, bo na jeden wysyłaliśmy 0, na drugi // //sygnał, zeby 
wyciszyc dzwiek w jednej sluchawce  
 
//definicja i deklaracja funkcji przerwania  
interrupt void FILTR_SOI(){  
int s;  
s = MCBSP__read();  
f(ch==0) ,s=0; //jeśli kanał pierwszy, to wstaw tam zero, i zmien na drugi  
ch=1;  
}  
else{  
int y = 0; //zmienna do sumowania wartosci  
BUF[pos] = s;  
for(i=0; i <7; ++i){  
y+=H * BUF*pos+; //przetwarzanie sygnału – pod jakas /*zmienna y cały czas pakujemy sume 
iloczynow wspolczynnikow filtru i elementuBUF[pos] */  
pos = (pos-1) & (8-1);  
} //koniec petli for  
 
pos = ((pos+2) & 7)); //inkrementacja pos o 2.  
s = y;  
MCBSP_write(s, … )  
}while(.....)  

background image

 

FILTR NOI 

w procesorze TMS320C6713

 

 
//zmienne globalne  
int16 BUF[8]; //tymczasowy bufor  
int pos; //zmienna określająca pozycje  
float H*8+ = ,-; //tablica ze współczynnikami filtru  
ch = 0; //zmienna określająca aktualny kanał, bo na jeden wysyłaliśmy 0, na drugi sygnał, zeby 
wyciszyc //dzwiek w jednej sluchawce  
 
//definicja i deklaracja funkcji przerwania  
interrupt void filtr_noi(){  
 
int s;  
s = MCBSP__read();  
f(ch==0) ,s=0; //jeśli kanał pierwszy, to wstaw tam zero, i zmien na drugi  
ch=1;  
}  
else{  
int y = 0; //zmienna do sumowania wartosci  
BUF[pos] = s;  
for(i=0; j=pos; i<8; i++){  
y+=H * BUF[j];  
j = (j+1) & (8 - 1);  
}  
 
BUF[(pos+4) & 7] = y;  
pos = (pos+1) & 7;  
s = y;  
ch = 0;  
MCBSP_write(s,...);  
}while(...) 

background image

2. Cechy procka sygnałowego: 

● 

Szybkie układy mnożące 

● 

Układy typu mnóż i akumuluj 

● 

Kilka jednostek obliczeniowych 

● 

Efektywny dostęp do pamięci 

● 

Większośd procesorów sygnałowych operuje na liczbach 

stałoprzecinkowych ( są wyjątki) 

● 

Możliwośd implementacji pętli programowych bez opóźnienia dla 

obliczenia warunku wyjścia 

● 

Zintegrowane urządzenia wejścia wyjścia wraz efektywnym układem 

kontroli przerwao i układem bezpośredniego dostępu do pamięci 

● 

Specjalne instrukcje umożliwiające wykonanie kilku operacji w ramach 

jednej instrukcji Duża ilośd rejestrów przeznaczonych do 
przechowywania tymczasowych wyników obliczeo 

● 

Specjalnie zaprojektowane generatory adresów do odczytywania tablic z 

pamięci 

● 

Sprzętowe wsparcie obsługi buforów kołowych  

3. Klasyfikacja proc sygnałowych:  

● 

Niska cena, niski pobór mocy, niska wydajnośd (20-50 MHz) 

– zawierają jeden mnożnik i jedną jednostkę arytmetyczno-logiczną 
– wykonują jedną instrukcję w jednym cyklu 
– zawierają specjalne rozkazy wykonujące kilka operacji równolegle 
– stosowane w różnego rodzaju napędach dysków i automatycznych sekretarkach (ADADSP 
21xx, TI – TMS320C2xx, M- DSP 560xx, LT- DSP16xx) 

● 

Średnia wydajnośd (100-150 MHz), niski pobór mocy, mimo wszystko niska cena 

– dodatkowe układy (przesuwnik, pamięd podręczna instrukcji) 
– więcej faz w potokowym przetwarzaniu instrukcji 
– stosowane w bezprzewodowej telekomunikacji i szybkich modemach (TITMS320C54x, 
M- DSP563xx) 

● 

Wyższa wydajnośd, cena i pobór mocy porównywalne 

– dodatkowe układy mnożnik, sumator 
– szersze słowo instrukcji szersze magistrale 
– więcej operacji wykonywanych równolegle 
(LT- DSP16xxx) 

● 

Bardzo wysoka wydajnośd, ale kosztem ceny i poboru mocy(1GHz dla p. 

stałoprzecinkowych) 
– architektura VLIW 
– kompilatory produkują efektywny kod 
– pamięd podręczna instrukcji i danych lub kilka magistral i pamięci wieloportowe 
– zwykle dwie ścieżki danych 
– od 4 do 8 operacji wykonywanych w jednym cyklu 

 

 

background image

4. Przetwarzanie potokowe w procesorze TMS320C6713

 

Ogólnikowo:  Dzięki  przetwarzaniu  potokowemu  co  jeden  cykl  zegarowy  jedna  instrukcja 
kooczy  działanie,  a  w  jednym  cyklu  zegarowym  wykonywane  jest  kilka  rozkazów  (  w 
przykładzie  pokazanym  na  rysunku  wykonywane  są  4  instrukcje)  Przetwarzanie  potokowe 
zakłócają występujące w kodzie instrukcje skoków warunkowych.  Prowadzi do równoległego 
przetwarzania więcej niż jednego polecenia w danej chwili co zwiększa wydajnośd CPU.  

 

● 

Faza wczytywania instrukcji 

– etap generacji adresu pakietu instrukcji 
(PG
– etap wysłania adresu pakietu na 
magistralę adresową (PS
– etap oczekiwania na pakiet instrukcji (PW
– etap pobrania pakietu instrukcji (PR

● 

Faza dekodowania instrukcji 

– etap rozsyłania instrukcji (DP
– etap dekodowania instrukcji (DC

● 

Faza wykonania instrukcj (E1-E10)

 

 

Faza wczytywania instrukcji 

● 

Etap (PG)- obliczenie adresu pakietu 

instrukcji 

● 

Etap (PS)- adres pakietu jest przsyłany do 

pamięci 

● 

Etap (PW)- trwa dostęp do danych w pamięci 

● 

Etap (PR)- pakiet jest zapamiętywany w 

obrębie jednostki centralnej 

Faza dekodowania instrukcji 

● 

Etap (DP)- określany jest kolejny pakiet 

wykonywalny i odpowiednie kody operacji 
przesyłane są do odpowiednich jednostek 
funkcjonalnych 

● 

Etap (DC)- dekodowanie kodów operacji w 

poszczególnych jednostkach funkcjonalnych 

Faza wykonywania instrukcji 

● 

Etap (E1) 

– dla wszystkich instrukcji sprawdzane są warunki wykonania i 
wczytywane są argumenty 
– dla operacji odczytu/zapisu wykonywane są modyfikacje 
adresów i zapisywane w rejstrach wynikowych 
– dla instrukcji rozgałęzieo modyfikowany jest adres 
wczytywanego pakietu na etapie PG 
– dla instrukcji wykonywanych w jednym cyklu wyniki są 

background image

zapisywane w rejestrach 
– dla operacji z podwójną precyzją wczytywane są młodsze 32 
bity argumentów 
– dla operacji z podwójną precyzją wykonywanych w 2 cyklach 
zapisywane są młodsze 32 bity wyników 

Faza wykonywania instrukcji 

● 

Etap (E2) 

– dla operacji odczytu do pamięci przesyłany jest adres, dla 
operacji zapisu adres i dane 
– dla operacji wykonywanych jednym cyklu, które stosują 
nasycenie wyników, ustawiany jest bit SAT w rejestrze SCR (o 
ile nasycenie wystąpiło) 
– dla operacji mnożenia i porównania, wykonywanych w 2 
cyklach z podwójną precyzją, zapisywane są wyniki 
– dla operacji porównania i rozkazów ADDDP/SUBDP z 
podwójną precyzją wczytywane są starsze 32 bity 
argumentów 
– dla operacji MPYDP odczytywane są młodsze 32 bity src1 
starsze 32 bity src2 
– dla operacji MPYI i MPYID wczytywane są argumenty 

Faza wykonywania instrukcji 

● 

Etap (E3) 

– oczekiwanie na dostęp do danych w pamięci 
– operacje mnożenia, które nasyciły swoje wyniki ustawiają bit 
SAT w rejestrze SCR 
– instrukcja MPYDP wczytuje starsze 32 bity src1 i młodsze 32 
bity src2 
– instrukcje MPYI i MPYID odczytują swoje argumenty 

● 

Etap (E4) 

– dane do instrukcji odczytu odbierane 
– instrukcje MPYI i MPYID pobierają argumenty 
– instrukcje wykonujące się w 4 cyklach zapisują swoje wyniki 
– instrukcja INTDP zapisuje wynik obliczeo w rejestrze 

● 

Etap (E5) 

– instrukcje odczytu zapisują dane w rejestrach 
– instrukcja INTDP zapisuje starsze 32 bity wyniku 

Faza wykonywania instrukcji 

● 

Etap (E6)- instrukcje ADDDP i SUBDP 

zapisują młodsze 32 bity wyników 

● 

Etap (E7)- instrukcje ADDDP i SUBDP 

zapisują starsze 32 bity wyników 

● 

Etap (E8)- etap pusty 

● 

Etap(E9)- 

– Instrukcja MPYI zapisuje wyniki do rejestrów 
– Instrukcje MPYDP i MPYID zapisują młodsze 32 bity wyników 

background image

● 

Etap (E10)- instrukcje MPYDP i MPYID 

zapisują starsze 32 bity wyników 

5. Architektura procesora 

TMS320C6713:

 

Procesor pobiera z pamięci podręcznej pakiety 8 instrukcji. Każdy pakiet może składad się z 
od  1  do  8  pakietów  wykonawczych.  W  pojedynczym  pakiecie  wykonawczym  znajdują  się 
rozkazy wykonywane równolegle w jednym cyklu. 
Ścieżki danych: 32 x 32bitowe rejestry ogólnego przeznaczenia 8 jednostek funkcjonalnych: 
jednostki L i S do obliczeo arytmetycznych i logicznych oraz instrukcji rozgałęzieo, jednostki 
M  zawierające  szybkie  równoległe  mnożniki,  jednostki  D  odpowiadające  za  generację 
adresów, ścieżki odczytu/zapisu do pamięci LD i ST. 

 

 

6. Obsługa przerwao 

w procesorze TMS320C6713

4: 

Uint32 DevId; //identyfikator urządzenia potrzebny do prawidłowej konfiguracji przerwao 
extern far void vectors(void); //deklaracja wskaznika do tablicy kodu obslugi przerwan (16 
blokow po 8 rozkazow) 
IRQ_setVecs(vectors); //ustawienie zadeklarowanej tablicy kodu 
obslugi przerwan 
hDev = DEV_open( ... ); // wlaczenie obslugi urzadzenia 
DevId = DEV_getEventId(hDev); //pobranie identyfikatora dla zdarzeo pochodzących od 
urzadzenia 
IRQ_map(DevId, 15); //mapowanie zdarzenia od urzadzenia z numerem przerwania 
IRQ_reset(DevId); //resetowanie przerwania od URZĄDZENIA 
IRQ_enable(DEV); //wlaczenie obslugi przerwania od urzadzenia 
IRQ_globalEnable(); //wlacznie obclugi przerwan procesora 
IRQ_nmiEnable(); //wlacznie przerwan niemaskowanych 

 

 

7. Obsługa urządzeo za pomocą przerwao w procesorze TMS320C6713

4

● 

Sygnalizacja przerwania od urządzenia zewnętrznego 

● 

Zapamiętanie bieżącej wartości licznika rozkazów 

● 

Wpisanie do licznika rozkazów adresu początku funkcji obsługi przerwania 

● 

Wykonywanie rozkazów funkcji obsługi przerwania 

● 

Rozkaz powrotu z przerwania przywraca zapamiętaną wartośd licznikowi rozkazów 

● 

W następnym takcie procesor rozpoczyna wykonanie programu od rozkazu następnego po 

rozkazie, w którym wystąpiło przerwanie 
 
 
 

background image

 

8. Transmisja wielokanałowa w procesorze TMS320C6713

4:

 

● 

Transmisja wielokanałowa zrealizowana jest za pomocą 

multipleksowania kanałów w czasie 

● 

Układ umożliwia transmisję do 32 dwóch elementów w ramce 

spośród maksymalnie 128 kanałów 

● 

Jeżeli kanał odbiornika jest zablokowany 

– RRDY nie jest ustawiany na 1 jeżeli zostanie odczytany 
ostatni bit elementu nadawanego 
– RBR nie jest kopiowany do DRR 

● 

Jeżeli kanał nadajnika jest zablokowany 

– Linia DX jest w stanie wysokiej impedancji 
– XRDY i XEMPTY nie są ustawiane w przypadku nadawania 
danych 
– Zakooczenie wysyłania danej nie generuje ani przerwania 
procesora ani zdarzenia dla układu EDMA 

● 

Odblokowany kanał nadajnika może byd w dowolnym momencie 

zamaskowany (dane są wysyłane do układu nadajnika ale 
nadajnik ich nie przesyła linią DX 

 

9. Struktura pamięci 

w procesorze TMS320C6713

4:  

 

background image

9. Bufor kołowy - opis, zasada działania i implementacje.

 

Bufor kołowy można porównad do tablicy danych która nie ma początku ani kooca. Do pracy 
na takim buforze niezbędne są dwa wskaźniki. Pierwszy z nich pokazuje gdzie należy zapisad 
daną  w  buforze,  drugi  skąd  odczytad.  Po  każdej  operacji  zapisu  lub  odczytu  odpowiedni 
wskaźnik  jest  inkrementowany,  aby  pokazywad  na  następny  element  bufora  (wskaźnik  do 
zapisu  pokazuje  następny  wolny  element  a  wskaźnik  do  odczytu  pierwszy  nieodczytany 
element).  Jeżeli  wskaźnik  dojdzie do  kooca  tablicy, to  po  kolejnym  zapisie  danej do  bufora 
powinien on ustawid się na pierwszy element tablicy. 
 
REALIZACJA BUFORA KOŁOWEGO 
Do pracy na takim buforze niezbędne są: 
● tablica o określonej długości N, 
● wskaźnik do zapisu danych, 
● wskaźnik do odczytu danych. 
Dla wygody korzystania z bufora warto stworzyd gotowe procedury do jego obsługi: 
● inicjacja wskaźników, 
● zapis danej 
● odczyt danej 
 
 

10. Bufor Ping-Pong

- opis, zasada działania i implementacje. 

 

Metoda  ta  polega  na  takim  oprogramowaniu  układu  DMA,  aby  zapisywał  dane 
naprzemiennie  do  dwóch  buforów  –  bufora  ping  i  bufora  pong.  Wówczas  układ  DMA 
synchronizuje się procesorem po przesłaniu całego jednego bufora. W czasie gdy układ DMA 
zapisuje  lub  odczytuje  dane  z  bufora  ping,  mikroprocesor  przetwarza  bufor  pong,  a  potem 
odwrotnie.  W  tej  metodzie  układ  DMA  pracuje  najefektywniej,  dlatego  jest  ona 
wykorzystywana do przetwarzania sygnałów VIDEO. 
 

11. Układ EDMA

 

 

Uk

ład EDMA jest to układ tzw. bezpośredniego dostępu do pamięci. Bezpośredniość 

ta polega na tym, 

że do kopiowania danych z jednego miejsca pamięci do drugiego 

nie  jest  w  najmniejszym  nawet  stopniu  wykorzystywany  rdze

ń  procesora.  Dane 

przesy

łane  są  po  magistrali  danych  z  jednego  miejsca  pamięci  do  drugiego.  W 

klasycznym  kopiowaniu  danych  natomiast  dana  jest  pobierana  do  rejestru 
mikroprocesora i za pomoc

ą drugiego rozkazu zapisywana z rejestru do 

pami

ęci.  Przepływ  danych  zatem  odbywa  się  poprzez  mikroprocesor.  Przesyłanie 

danych  za  pomoc

ą  układu  DMA  jest  efektywne  wtedy,  gdy  mikroprocesor  w  tym 

samym czasie realizuje inne zadania. Typow

ą sytuacją, w której wykorzystywany jest 

uk

ład  DMA  jest  akwizycja  danych  z  przetworników  analogowo  –  cyfrowych  i 

wysy

łanie  przetworzonych  danych  do  przetworników  cyfrowo  –  analogowych. 

Zaanga

żowanie układu DMA do odbierania i nadawania danych jest w 

takiej  sytuacji  niezwykle  efektywne,  poniewa

ż  procesor,  pracujący  zwykle  z 

cz

ęstotliwością  wielokrotnie  większą  niż  układy  przetworników,  nie  musi  czekać  aż 

przetwornik b

ędzie gotowy do odebrania nadawanej danej. Zamiast tego umieszcza 

background image

on  przetworzon

ą  próbkę  w  specjalnym  buforze  obsługiwanym  przez  układ  DMA  i 

zaczyna kolejny cykl przetwarzania, pozostawiaj

ąc zadanie wysłania próbki układowi 

DMA.  Jeszcze  bardziej  efektywnym  sposobem  wykorzystania  uk

ładu  DMA  jest 

zastosowanie 

podwójnego  buforowania  albo inaczej  buforowania  typu  ping  –  pong. 

Metoda  ta  polega  na  takim  oprogramowaniu  uk

ładu  DMA,  aby  zapisywał  dane 

naprzemiennie do dwóch buforów – bufora ping i bufora pong. Wówczas układ DMA 
synchronizuje  si

ę  procesorem  po  przesłaniu  całego  jednego  bufora.  W  czasie  gdy 

uk

ład  DMA  zapisuje  lub  odczytuje  dane  z  bufora  ping,  mikroprocesor  przetwarza 

bufor pong, a potem odwrotnie. W tej metodzie uk

ład DMA pracuje najefektywniej, 

dlatego jest ona wykorzystywana do przetwarzania sygna

łów VIDEO. 

 

hEDMA_Handle EDMA_open(int chaNum, Uint32 flags) 

Aktywowanie miejsca w pamięci do przechowywania parametrów aktualnie wykonywanego 
transferu. 

hEDMA_Handle EDMA_allocTable(int tableNum); 

Alokuje miejsce dla konfiguracji, która będzie przeładowywana po wykonaniu transferu. Aby 
wybrad pierwsze wolne miejsce, należy wywoład funkcję z argumentem „-1”. Układ DMA nie 
może modyfikowad zawartości tej tablicy. 

gEdmaConfigXmt.dst = MCBSP_getXmtAddr(hMcbsp1); 

pobiera adres rejstru nadajnika portu szeregowego i wpisuje go do adresu przeznaczenia dla 
DMA. 

int EDMA_intAlloc(int tcc); 

Alokuje Transfer Completion Code. Jest to kod zgłaszany po zakooczeniu transferu i jest 
indywidualny dla każdego kanału DMA. Aby wybrad pierwszy wolny kod należy użyd 
argumentu „-1”. 

gEdmaConfigXmt.opt |= EDMA_FMK(OPT,TCC,gXmtChan); 

Zapisanie kodu TCC dla kanału nadawczego. 

EDMA_config(EDMA_Handle hEdma, EDMA_Config *config); 

Wpisanie konfiguracji pod wskazany adres. 

gEdmaConfigXmt.src= EDMA_SRC_OF(gBufferXmtPong); 

Wskazanie źródła(buforu), z którego kopiowane są dane. 

EDMA_link(EDMA_Handle parent,EDMA_Handle child); 
Linkowanie konfiguracji(transferów). Pierwszy argument funkcji to „rodzic”, a drugi to 
„dziecko”. Najpierw należy użyd wskaźnika który był używany z EDMA_open, aby przypisad 
go do konkretnego urządzenia(czyli McBSP1). Następnie wpisujemy konfiguracje do tablicy 
parameters RAM. Do konfiguracji Pong linkowana jest struktura Ping, a Ping jest łączone z 
Pong, czyli wracamy następuje zapętlenie. W późniejszej fazie wzajemne linkowanie 
następuje tylko dla transferów zainicjowanych funkcją EDMA_allocTable. Należy również 
zwrócid uwagę na zamianę miejsc pomiędzy parent child w następnych linkowaniach. 
EDMA_intEnable(intNum); 
Aktywuje przerwanie dla wybranego kodu TCC poprzez modyfikację rejestru CIER. 
EDMA_enableChannel(EDMA_Handle hEdma); 
Musi nastąpid jawne aktywowanie kanału. Przyjmuje tylko uchwyty od EDMA_open.