240 likes | 373 Views
Programowanie Procesorów Sygnałowych. Krzysztof Bikonis binio@eti.pg.gda.pl p. 738 tel. 347 1326. Architektura procesorów stałoprzecinkowych z rodziny 21xx. Architektura procesorów stałoprzecinkowych z rodziny 21xx. Jednostka arytmetyczno-logiczna
E N D
Programowanie Procesorów Sygnałowych Krzysztof Bikonis binio@eti.pg.gda.pl p. 738 tel. 347 1326
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Jednostka arytmetyczno-logiczna • wykonywane operacje: dodawanie, dodawanie z przeniesieniem, odejmowanie, odejmowanie z „pożyczką”, zmiana znaku, operacje logiczne AND, OR, XOR, NOT • 16-bitowe rejestry AX0 i AX1 – pierwszy argument operacji, AY0 i AY1 – drugi argument operacji, AR i AF – wynik operacji (AR -> DMD BUS, AF -> drugi argument operacji) • R BUS -> wyjścia innych układów jako drugi argument operacji • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu) • argumenty stałoprzecinkowymi liczbami ułamkowymi w formacie 1.15
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Jednostka arytmetyczno-logiczna • wykonywane operacje: dodawanie, dodawanie z przeniesieniem, odejmowanie, odejmowanie z „pożyczką”, zmiana znaku, operacje logiczne AND, OR, XOR, NOT • 16-bitowe rejestry AX0 i AX1 – pierwszy argument operacji, AY0 i AY1 – drugi argument operacji, AR i AF – wynik operacji (AR -> DMD BUS, AF -> drugi argument operacji) • R BUS -> wyjścia innych układów jako drugi argument operacji • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu) • argumenty stałoprzecinkowymi liczbami ułamkowymi w formacie 1.15 10000000000000000B = -1 11000000000000000B = -0.5 00000000000000000B = 0 00111111111111111B = 0.5 01111111111111111B = 1
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Jednostka arytmetyczno-logiczna • wykonywane operacje: dodawanie, dodawanie z przeniesieniem, odejmowanie, odejmowanie z „pożyczką”, zmiana znaku, operacje logiczne AND, OR, XOR, NOT • 16-bitowe rejestry AX0 i AX1 – pierwszy argument operacji, AY0 i AY1 – drugi argument operacji, AR i AF – wynik operacji (AR -> DMD BUS, AF -> drugi argument operacji) • R BUS -> wyjścia innych układów jako drugi argument operacji • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu) • argumenty stałoprzecinkowymi liczbami ułamkowymi w formacie 1.15 • Znaczenie bitów rejestru stanu ASTAT • AZ – oznacza AR=0 • AN – oznacza AR ujemne • AC – oznacza przeniesienie z najbardziej znaczącej pozycji wyniku dodawania • AV – oznacza przepełnienie AR • AS – znak argumentu pierwszego (X) dla ALU • AQ – bit wyniku generowany podczas dzielenia • Znaczenie bitów rejestru trybu MSTAT • 3 – ALU przechodzi do pracy z „nasyceniem” (gdy wystąpi przepełnienie -> AR największa/najmniejsza możliwa liczba dla tego rej.) • 2 – zatrzaskiwanie stanu przepełnienia • 0 – wybór zbioru rejestrów ALU 0 = pierwszy 1 = drugi 10000000000000000B = -1 11000000000000000B = -0.5 11111111111111111B = 0 00111111111111111B = 0.5 01111111111111111B = 1
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Układ mnożąco-akumulujący • wykonywane operacje: mnożenie liczb stałoprzecinkowych oraz mnożenie i akumulacja (dodawanie lub odejmowanie) • 16-bitowe rejestry MX0 i MX1 – pierwszy argument operacji, MY0 i MY1 – drugi argument operacji, 40-bitowy rejestr MR (MR2 8 bitów, MR1 i MR0 16 bitów) – rejestr wyjściowy • rejestr MR ma własność „nasycenia”, czyli jeśli zostanie wykryte przepełnienie to do MR zostanie zapisana największa/najmniejsza 32-bitowa liczba (Czy rejestr MR zostanie „nasycony”, czy nie, jest częścią kodu instrukcji) • możliwość zaokrąglania 40-bitowego wyniku obliczeń do 16 bitów, wynik zaokrąglenia do rejestru MF, lub MR1 (znak powielony w rejestrze MR2) • 16-bitowy rejestr MF – rejestr pośredniczący, można go wykorzystać w następnym rozkazie mnożenia przez podanie na wejście Y układu mnożącego • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu)
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Układ mnożąco-akumulujący • wykonywane operacje: mnożenie liczb stałoprzecinkowych oraz mnożenie i akumulacja (dodawanie lub odejmowanie) • 16-bitowe rejestry MX0 i MX1 – pierwszy argument operacji, MY0 i MY1 – drugi argument operacji, 40-bitowy rejestr MR (MR2 8 bitów, MR1 i MR0 16 bitów) – rejestr wyjściowy • rejestr MR ma własność „nasycenia”, czyli jeśli zostanie wykryte przepełnienie to do MR zostanie zapisana największa/najmniejsza 32-bitowa liczba (Czy rejestr MR zostanie „nasycony”, czy nie, jest częścią kodu instrukcji) • możliwość zaokrąglania 40 bitowego wyniku obliczeń do 16 bitów, wynik zaokrąglenia do rejestru MF, lub MR1 (znak powielony w rejestrze MR2) • 16-bitowy rejestr MF – rejestr pośredniczący, można go wykorzystać w następnym rozkazie mnożenia przez podanie na wejście Y układu mnożącego • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu) • Znaczenie bitów rejestru stanu ASTAT • MV – oznacza przepełnienie MR • Jeśli wynik operacji mnożenia i akumulacji nie mieści się w parze rejestrów MR1, MR0, to najbardziej znaczący bity wyniku znajdują się w rejestrze MR2 i ustawiana jest flaga MV przepełnienia akumulatora MR • Znaczenie bitów rejestru trybu MSTAT • 0 – wybór zbioru rejestrów 0 = pierwszy 1 = drugi • 4 – tryb pracy • 0 = liczby ułamkowe (1.15) • 1 = liczby całkowite (16.0) • Dla liczb 1.15 32-bitowy wynik mnożenia jest rozszerzany do 40 bitów poprzez powielenie bitu znaku, przesuwany w lewo o jeden bit i podawany na wejście układu sumatora • Dla liczb 16.0 rozszerzony do 40 bitów wynik jest bezpośrednio podawany na wejście układu sumatora
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Przesuwnik • pozwala jednym rozkazem umieścić 16-bitowy argument w dowolnym miejscu 32-bitowego rejestru wyjściowego, łącznie z sytuacją gdy argument pozostaje poza rejestrem wyjściowym (49 położeń w rejestrze wyjściowym) • 16-bitowy rejestr wejściowy SI – przesuwana liczba, 8-bitowy rejestr SE – liczba pozycji binarnych do przesunięcia (SE dodatnie – w lewo, SE ujemne – w prawo), 8-bitowy rejestr SB – argument w przypadku normalizacji lub denormalizacji bloku liczb, 32-bitowy rejestr SR (SR1 i SR0 po 16 bitów) – wynik operacji • rejestry mogą być odczytywane i zapisywane w jednym cyklu rozkazowym (odczyt na początku, zapis na końcu cyklu), są zdublowane (wybór poprzez bit 0 rejestru MSTAT)
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Generatory adresowe • I – rejestry indeksowe, M – rejestry modyfikacji, L – rejestry długości • wykorzystując rejestr długości L można zorganizować w pamięci bufor kołowy, wtedy rejestr indeksowy I jest używany jako wskaźnik, natomiast rejestr L przechowuje długość bufora, a kiedy wskaźnik I przekroczy górną granicę bufora, to do rejestru I zostanie załadowany adres bazowy bufora
Architektura procesorów stałoprzecinkowych z rodziny 21xx • Sterowanie procesorem • instrukcje są pobierane z kolejnych komórek pamięci programu wskazywanych przez licznik programu PC • każda instrukcja jest wykonywana w jednym cyklu zegarowym • zmiana kolejności realizacji instrukcji dokonuje się w wyniku wykonania instrukcji skoku, instrukcji skoku ze śladem (wywołanie podprogramu) lub instrukcji organizującej pętlę DO UNTIL (możliwość zagnieżdżania do czterech poziomów) • przerwania w sposób sztywny mają przypisany priorytet, mogą być maskowane (IMASK) • STATUS STACK stos sprzętowy, w trakcie obsługi przerwania są tam przechowywane rejestry ASTAT,MSTAT, IMASK • PC STACK stos sprzętowy, w trakcie obsługi przerwania przechowuje licznik rozkazów • tablica wektorów przerwań zaczyna się od adresu 0x0000, a program obsługi przerwania nie może przekraczać czterech instrukcji • powrót z obsługi przerwania za pomocą instrukcji RTI • ICNTL rejestr konfiguracji trybu pracy systemu przerwań, w ten sposób można uzyskać przerwania zewnętrzne czułe na wartość poziomu sygnału lub na jego zbocze lub zagnieżdżania przerwań • IFC rejestr za pomocą którego można programowo wymusić przerwanie sprzętowe lub wyzerować zamaskowane przerwanie oczekujące na obsługę
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwa generatory adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file)
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) • Jednostki obliczeniowe • ALU • jednostka mnożąca (multipler) • jednostka przesuwająca (shifter) • Jednostki te mogą przetwarzać dane • 32-bitowe stałoprzecinkowe • 32-bitowe zmiennoprzecinkowe • 40-bitowe zmiennoprzecinkowe • Właściwości jednostek obliczeniowych • wykonują obliczenia w jednym cyklu • dana wyjściowe z jednej jednostki mogą stanowić daną wejściową dla drugiej jednostki • możliwość równoległego wykonywania operacji np. dodawania i mnożenia, ze względu na to, że wykonywane są przez różne jednostki obliczeniowe (wymagany jest wtedy określony wybór rejestrów przechowujących argumenty operacji)
31 30 23 22 0 27 ………. 20 2-1 ………………………. 2-23 cecha mantysa znak –1znak * 2cecha – 127 * 1.mantysa 2 = 1*2128-127*1.0 = 01000000 00000000 00000000 00000000 = 40 00 00 00 440 = 1*2135-127*1.7188 = 01000011 11011100 00000000 00000000 = 43 DC 00 00 Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) • Jednostki obliczeniowe • ALU • jednostka mnożąca (multipler) • jednostka przesuwająca (shifter) • Jednostki te mogą przetwarzać dane • 32-bitowe stałoprzecinkowe • 32-bitowe zmiennoprzecinkowe • 40-bitowe zmiennoprzecinkowe • Właściwości jednostek obliczeniowych • wykonują obliczenia w jednym cyklu • dana wyjściowe z jednej jednostki mogą stanowić daną wejściową dla drugiej jednostki • możliwość równoległego wykonywania operacji np. dodawania i mnożenia, ze względu na to, że wykonywane są przez różne jednostki obliczeniowe (wymagany jest wtedy określony wybór rejestrów przechowujących argumenty operacji)
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) Zbiór rejestrów (data register files) Zawarte w „rdzeniu” rejestry są rejestrami ogólnego przeznaczenia i wykorzystywane są do przesyłania danych pomiędzy jednostkami obliczeniowymi a magistralami danych oraz do przechowywania wyników pośrednich. Zbiór rejestrów składa się z dwóch zestawów po 16 rejestrów 40-bitowych każdy.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) Sekwencer programu i generator adresów Dwa dedykowane generatory adresów oraz sekwencer programu wyznaczają adresy wykorzystywane w trakcie dostępu do pamięci. Pozwala to na wykonywanie operacji obliczeniowych z maksymalną efektywnością. Wykorzystując pamięć cache programu procesor jest w stanie w tym samym czasie pobrać instrukcję oraz dwa operandy z pamięci.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) Pamięć cache dla instrukcji Sekwencer programu zawiera 32-słowowy cache instrukcji, który pozwala w efekcie na trzymagistralową operację pobrania kodu rozkazu oraz dwóch argumentów.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Core Processor • rdzeń systemu, jednostka odpowiedzialna za wykonanie programu i wszystkie operacje obliczeniowe • trzy jednostki obliczeniowe (computation units) • sekwencera programu (program sequencer) • dwóch generatorów adresów dla danych (data adress generators DAG) • pamięci cache dla instrukcji (instruction cache) • zbioru rejestrów (data register file) Timer Programowany timer pozwala na cykliczne generowanie przerwania. Wyposażony jest w 32-bitowy rejestr, który jest dekrementowany w każdym cyklu. Gdy osiągnie 0, generowane jest przerwanie
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x Magistrale procesora „Rdzeń” procesora wyposażony jest w cztery magistrale: 24-bitową magistralę adresową pamięci programu (PMA), 32-bitową magistralę adresową pamięci danych (DMA), 48-bitową magistralę danych pamięci programu (PMD) i 32/40-bitową magistralę danych pamięci danych (DMD). Pamięć danych przeznaczona jest do przechowywania wartości zmiennych, natomiast pamięć programu przechowuje zarówno program, jak też dane nie ulegające zmianie w trakcie działania programu np. tablice współczynników.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x Dwuportowa pamięć wewnętrzna Procesor ADSP-21061 wyposażony jest w 1 Mb pamięci RAM w dwóch blokach po 0.5 Mb. Każdy blok pamięci ma dostęp dwuportowy co pozwala na jednoczesny dostęp „rdzenia” procesora oraz procesora wejścia/wyjścia lub sterownika DMA. Cała pamięć może być zorganizowana w słowa o długości 16, 32 lub 48 bitów. W procesorze ADSP-21061 pamięć może być skonfigurowana jako 32K słów 32-bitowych, 64K słów 16-bitowych lub 20K słów 48-bitowych dla instrukcji i 40-bitowych dla danych. Każdy z bloków pamięci może przechowywać zarówno dane jak i program. Jednak zalecana jest taka organizacja, w której jeden blok przechowuje program, a drugi dane. Wtedy magistrale danych obsługują jeden blok, a magistrale programu drugi.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x Pamięć zewnętrzna i interfejs urządzeń peryferyjnych Procesor ADSP-2106x jest wyposażony w interfejs komunikacyjny z pamięcią zewnętrzną i urządzeniami peryferyjnymi. Zewnętrzna pamięć może być rozbudowana do 4G słów. Wszystkie wewnętrzne magistrale są multipleksowane i przetwarzane na32-bitową zewnętrzną magistralę adresową i 48-bitową zewnętrzną magistralę danych. Zewnętrzna magistrala danych może być 16, 32 lub 48-bitowa. Interfejs procesora nadrzędnego Procesor ADSP-2106x może być w łatwy sposób dołączony do standardowej magistrali mikroprocesora tak 16 jak i 32-bitowego. Transmisja może być realizowana z prędkościami do szybkości zegara procesora DSP włącznie. Do połączenia tego dedykowane są cztery kanały DMA. Procesor nadrzędny może dzięki temu bezpośrednio odczytywać i zapisywać pamięć DSP.
Architektura procesorów zmiennoprzecinkowych z rodziny 2106x • Procesor wejścia/wyjścia • dwa synchroniczne porty szeregowe – pozwalają na połączenie z szeroką gamą cyfrowych i cyfrowo- analogowych urządzeń zewnętrznych. Mogą one działać z maksymalną prędkością odpowiadającą szybkości zegara procesora (do 40Mb/s). Funkcje nadawcze i odbiorcze każdego portu są niezależne. Dane z portów szeregowych mogą być transmitowane via DMA do lub z pamięci • porty równoległe – wykorzystywane najczęściej do komunikacji w systemach wieloprocesorowych. Każdy o wielkości 4 bitów, mogą być taktowane dwa razy na cykl procesora co pozwala na przesył 8 bitów na cykl. Procesor ADSP-21061 nie jest wyposażony w porty równoległe • sterownik DMA – procesor ADSP-21061 jako wersja uproszczona jest wyposażony w 6 kanałów (normalnie 10). Sterownik DMA pracuje niezależnie i niewidocznie dla „rdzenia” procesora, pozwalając (dzięki dwuportowej konstrukcji pamięci) na jednoczesny dostęp „rdzenia” procesora i DMA do pamięci. Poprzez DMA do procesora mogą być przesyłane zarówno dane jak i program. Możliwe są przesyły poprzez DMA pomiędzy pamięcią wewnętrzną i zewnętrzną lub urządzeniem zewnętrznym lub procesorem nadrzędnym. Również dane z/do portów szeregowych i równoległych mogą być przesyłane z wykorzystaniem DMA