Mikroprocesory z architekturą RISC Koncepcja mikrokomputerów z architekturą RISC (Reduced Instruction Set Computer), pozwala na przejęcie sterowaniem mikrokomputerem na niskim poziomie przez oprogramowanie. Nadrzędnym celem architektury tego typu jest zmniejszenie liczby taktów zegarowych, składających się na cykl rozkazowy. Obecnie produkowane procesory RISC, pozwalają na osiągnięcie rezultatujeden lub więcej skończonych rozkazów w ciągu kaŝdego cyklu rozkazowego. Takie wyniki uzyskuje się nie na zasadzie, iŝ jeden rozkaz zajmuje jeden cykl zegarowy, ale na drodze przetwarzania strumieniowego i jest wynikiem średniej prędkości przetwarzania rozkazów. Podstawowe własności mikroprocesora z architekturą RISC to: - Wszystkie rozkazy mają ten sam format. - Wszystkie rozkazy zajmują ten sam czas wykonania. - Wymiana informacji z pamięcią i rozkazy arytmetyczno- logiczne wykonują się niezaleŝnie. - Sterowanie przepływem rozkazów i ich wykonaniem jest realizowane sprzętowo. Powszechną w mikroprocesorach RISC metodą zmniejszającą średnią liczbę taktów zegara na rozkaz, bez wydłuŝania czasu taktu zegara jest metoda strumieniowego wykonywania rozkazów. Istnieją jednak pewne ograniczenia w stosowaniu strumieniowej metody przetwarzaniꗬá Еꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬ 2
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬЕꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬ 3
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬlꗬꗬꗬꗬ 4
5
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ8ꗬꗬꗬ4ꗬꗬꗬ ŤꗬꗬꗬꗬꗬꗬꗬIJꗬꗬꗬꗬꗬꗬꗬ"ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ$ꗬꗬꗬꗬꗬꗬꗬtꗬꗬꗬĵꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ 6
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ 7
8
ꗬꗬꗬꗬꗬꗬꗬꗬҢꗬꗬꗬꗬꗬꗬꗬVꗬꗬꗬ@ꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ 9
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ 10
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬ0ꗬꗬꗬꗬꗬꗬꗬ0ꗬꗬꗬꗬꗬꗬꗬ ꗬꗬ 11
12
ꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬꗬÙꗬ ꗬ Mikroprocesory z architekturą RISC Koncepcja mikrokomputerów z architekturą RISC (Reduced Instruction Set Computer), pozwala na przejęcie sterowaniem mikrokomputerem na niskim 13
poziomie przez oprogramowanie. Nadrzędnym celem architektury tego typu jest 14
15
ją na osiągnięcie rezultatu- jeden lub więcej skończonych rozkazów w ciągu 16
17
muje jeden cykl zegarowy, ale na drodze przetwarzania strumieniowego i jest 18
m średniej prędkości przetwarzania rozkazów. 19
20
- EXECUTE - WRITE SC to: Wszowania rozkazu (ustalenie rodzaju operacji i miejsca argumentów). Faza wykonania rozkazu. Faza zapisu wyniku (w przypadku operacji arytmetycznologicznych wynik jest zapisywany w odpowiednim rejestrze, przy rozkazach komunikacji z pamięcią wykonany jest cykl odczytu lub zapisu pamięci). PoniewaŜ proces przetwarzania strumieniowego jest najbardziej efektywny, gdy wszystkie fazy mają ten sam czas trwania, czas ten jest przyjęty jako czas trwania cyklu zegarowego. DłuŜszym czasem trwania odznaczać się będą z pewnością rozkazy, wymagające kontaktu z pamięcią zewnętrzną (czas potrzebny na obliczenie adresu fizycznego i pobranie argumentu). Dlatego w procesorach RISC przyjęto zasadę stosowania architektury Load/Store (ładuj i pamiętaj) w której wszystkie rozkazy arytmetyczno- logiczne wykonywane są na argumentach zawartych w rejestrach wewnętrznych. Na rysunku 1.1 pokazano porównanie przetwarzania skalarnego (klasyczne mikroprocesory CISC) i strumieniowego- RISC. Rys.1.1. Przetwarzanie a) skalarne, b) strumieniowe. Aby procesory typu RISC mogły pracować efektywnie, istnieje potrzeba zapewnienia odpowiedniego środowiska sprzętowego. Współcześnie produkowane procesory RISC cechuje: - wyposaŝenie mikroprocesora w duŝą liczbę rejestrów uniwersalnych (32, 64, 128), - wyposaŝenie w duŝą pamięć notatnikową CACHE, - wykonywanie operacji arytmetyczno-logicznych w układach kombinacyjnych, co powoduje rozbudowanie arytmometrów, ale zapewnia wykonanie operacji w jednym takcie zegara, 21
- jednolity format rozkazów (poszczególne rozkazy mają tę samą ilość bitów i takie same pola funkcjonalne), - aby ograniczyć ilość przesłań, operacje arytmetyczno logiczne odnoszą się do trzech operandów: dwa źródła jeden przeznaczenia. - Aby ograniczyć ilość rozkazów stosuje się duŝą długość słowa maszynowego (32, 64 do 128 bitów). Struktura stanowiska laboratoryjnego z mikroprocesorem Power PC603 Na rysunku 1.1. pokazano kasetę z modułami systemu Power PC603. Rys.1.1. Struktura stanowiska Na rysunku 1.2. przedstawiono rozmieszczenie przycisków manipulacyjnych na konsoli obserwacyjno sterującej. 22
Rys.1.2. Konsola obserwacyjno-sterująca Ćwiczenie Część 1- pokazowa Rejestr stanu procesora MSR (machine state register) Zawartość MSR moŝna zmienić rozkazami: mtmsr sc rfi Mfmsr (move to msr) (system call) (return from interrupt Odczyt zawartości MSR (move from msr) 0...12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28...31 0...0 POW TGPR 0 EE PR FP ME FE0 SE 0 FE1 0 EP IT DT 0...0 23
TGPR POW EE PR FP ME FE0, FE1 SE EP IT DT czasowa zmiana połoŝenia rejestrów GPR0-3 ustawienie poboru mocy zezwolenie na przerwanie zewnętrzne poziom uprzywilejowania zezwolenie na wykonywanie operacji zmiennoprzecinkowych zezwolenie na przerwanie błędu sprzętowego tryb obsługi przerwań zmiennoprzecinkowych praca krokowa prefix przerwań EP=0 - programy obsługi stanów wyjątkowych zaczynają się od adresów 000n nnnn EP=1 - programy obsługi stanów wyjątkowych zaczynają się od adresów FFFn nnnn translacja adresu rozkazu translacja adresów danych Wpisz do pamięci następujący program: adres dana rozkaz komentarz FFF00100 70 21 00 00 andi r 1,0000 Iloczyn logiczny z argumentem 0000 dolnej połowy r 1 FFF00104 74 21 00 00 andis r 1,0000 Iloczyn logiczny z argumentem 0000 górnej połowy r 1 FFF00108 64 21 FF F0 oris r 1,FFF0 Suma logiczna z argumentem FFF0 górnej połowy r 1 FFF0010C 7C 60 00 A6 mfmsr r 3,MSR Przenoszenie z rejestru stanu procesora do r 3 FFF00110 90 61 00 00 stw (r 1 ),r 3 Zapis zawartości r 3 pod adres pamięci zawarty w r 1 Przekrokuj po wyzerowaniu wpisany program. Po załadowaniu do kolejki następnego rozkazu (spod adresu FFF00114- przypadkowa wartość), nastąpi wykonanie zapisu do pamięci pod adres FFF0 0000 zawartości rejestru r 3 czyli stanu rejestru MSR. Odpisz wyświetlaną daną. Sprawdź który bit lub bity są ustawione w stan logiczny 1 za co te bity odpowiadają i jaki jest obecny stan procesora. PoniŜej pokazano sposób numeracji bitów (dolna połowa długiego słowa). 24
EP IT DT 24 25 26 27 28 29 30 31 Reakcja procesora Power PC 603 na stany wyjątkowe, Obsługa stanów wyjątkowych w PC 603 Generalnym załoŝeniem w działaniu procesorów RISC, w porównaniu z CISC-ami jest ograniczenie kontaktów z pamięcią zewnętrzną, poprzez stosowanie rejestrów wewnętrznych o róŝnym przeznaczeniu. A zatem nie istnieje stos umieszczony w pamięci zewnętrznej- taki jak w procesorach CISC. W Power PC603 jest oddzielny stos wewnętrzny (zrealizowany sprzętowo), w przeznaczonych do tego celu rejestrach, uŝywany przy obsłudze wyjątków. Jest on jednopoziomowy. Pamiętany jest stan: licznika rozkazów PC i rejestru stanu MSR. Działanie stosu pokazuje poniŝszy program. Zapisać program do pamięci od wskazanych adresów. adres dana rozkaz komentarz FFF00100 C8 20 04 00 lfd fr 1,(adres) Ładowanie słowa zmiennoprzecinkowego podwójnej precyzji (wykonywanie operacji zmiennoprzecinkowych zablokowane) FFF00104 64 21 00 00 oris r 1,0000 Suma logiczna z argumentem FFF0 górnej połowy r 1 Obsługa wyjątku FFF00800 7C 5A 02 A6 mfspr r 2,SRR0 Załaduj zawartość rejestru SRR0 do r 2 FFF00804 70 21 00 00 andi r 1,0000 Iloczyn logiczny z argumentem 0000 dolnej połowy r 1 FFF00808 74 21 00 00 andis r 1,0000 Iloczyn logiczny z argumentem 0000 górnej połowy r 1 FFF0080C 64 21 FF F0 oris r 1,FFF0 Suma logiczna z argumentem FFF0 górnej połowy r 1 FFF00810 90 41 00 00 stw (r 1 ),r 2 Wyślij zawartość r 2 pod adres pamięci zawarty w r 1 FFF00814 7C 9B 02 A6 mfmsr r 4,SRR1 Załaduj zawartość 25
rejestru SRR1 do r 4 FFF00818 90 81 00 04 stw (r 1 +4),r 4 Wyślij zawartość r 2 pod adres pamięci zawarty w r 1 zwiększony o 4 FFF0081C 4C 00 00 64 rfi Powrót ze stanu wyjątkowego FFF00820 64 21 00 00 oris r1,0000 Suma logiczna z argumentem FFF0 górnej połowy r 1 Po wpisaniu programu wyzerować system (gorący reset HRESET), przekrokować program. Po HRESET zablokowane jest wykonywanie operacji zmiennoprzecinkowych ( w rejestrze stanu procesora MSR: bit FP=0). Po HRESET początkowa wartość licznika rozkazów PC wynosi FFF00100. Pod tym adresem znajduje się instrukcja lfd fr 1,(adres). Jest to rozkaz ładowania słowa zmiennoprzecinkowego podwójnej precyzji. Po stwierdzeniu wyjątku, jego obsługa zaczyna się od ustalonego (stałego) adresu (dla EP=1) FFF00800. W rejestrach zapamiętywane są: SRR0- bieŝący PC, SRR1- MSR (słowo stanu). NaleŜy przeanalizować program i zapisać stan rejestru PC oraz MSR (widoczny na wyświetlaczu konsoli w trakcie zapisu do pamięci). Na liście rozkazów procesora Power PC 603 nie ma rozkazu NOP. Jego rolę mogą pełnić rozkazy: ori r x,0000, oris r x,0000, andi r x,ffff, andis r x,ffff (nie zmieniające zawartości rejestru). Wykorzystanie rejestru LR (Link Register) Kolejną cechą róŝniącą RISC od CISC- jest sposób przechowywania adresów powrotnych z podprogramów. Nie ma moŝliwości zorganizowania stosu w pamięci zewnętrznej- tak jak w CISC. A zatem, jeden z rejestrów wewnętrznych specjalnego przeznaczenia, zwany LINK REGISTER (LR) został przeznaczony wyłącznie do przechowywania adresów powrotnych z podprogramów. Rejestr LR to jednopoziomowy stos wewnętrzny dla procedur, obsługiwany programowo. Rejestr LR jest rejestrem specjalnego przeznaczenia (spr- special purpose register), a zatem nie moŝna bezpośrednio zapisać do niego danych ani wysłać jego zawartości do pamięci. NaleŜy dokonać tego pośrednio, przez któryś z rejestrów ogólnego przeznaczenia (GPR0-31). Ilustruje to poniŝszy przykład. 26
W terminologii stosowanej dla Power PC 603 stosuje się zamiast określenia wywołanie procedury- terminu skok ze śladem. Podwójna pętla programowa (pętla zewnętrzna, w niej pętla wewnętrzna). Wpisz do pamięci procesora poniŝszy program od podanych adresów. adres dana rozkaz komentarz FFF00100 40 00 00 11 bcl Skok ze śladem pod adres FFF00110- pętla zewnętrzna FFF00104 42 80 00 00 bc Skok do samego siebie FFF00108 64 21 00 00 oris r 1,0000 Jako NOP FFF0010C 64 21 00 00 oris r 1,0000 Jako NOP FFF00110 7C 48 02 A6 mfspr r 2,LR Przenoszenie zawartości LR do r 2 FFF00114 70 21 00 00 andi r 1,0000 Iloczyn logiczny z argumentem 0000 dolnej połowy r 1 FFF00118 74 21 00 00 andis r 1,0000 Iloczyn logiczny z argumentem 0000 górnej połowy r 1 FFF0011C 64 21 FF F0 oris r 1,FFF0 Suma logiczna z argumentem FFF0 górnej połowy r 1 FFF00120 90 41 00 00 stw (r 1 ),r 2 Wysłanie zawartości r 2 (LR) pod adres wskazany przez r 1 FFF00124 40 00 00 0D bcl Skok ze śladem pod adres FFF00130- pętla wewnętrzna 27
FFF00128 64 21 00 00 oris r 1,0000 Jako NOP FFF0012C 42 80 00 00 bc Skok do samego siebie FFF00130 7C 68 02 A6 mfspr r 3,LR Przenoszenie zawartości LR do r 3 FFF00134 90 61 00 04 stw (r 1 +4),r 3 Wysłanie zawartości r 3 (LR) pod adres wskazany przez r 1+4 FFF00138 4C 00 00 21 bclr Skok według śladu (czyli powrót z podprogramu wewnętrznego) FFF0013C 64 21 00 00 oris r 1,0000 Jako NOP Po wpisaniu programu zresetuj system i przekrokuj program. Zwróć uwagę na kolejne zapisy stanu rejestru LR do komórek pamięci pod adresy FFF00000 i FFF00004. Jak widać z powyŝszego programu, poprzedni LR (z pierwszej pętli), został utracony. Aby go odzyskać, naleŝy programowo czyli osobnym rozkazem (mtspr) wpisać go z r 2 (gdzie został zachowany) do LR. NaleŜy w tym celu zmienić program następująco (od adresu FFF00138): FFF00138 7C 48 03 A6 Mtspr LR,r 2 Przenoszenie zawartości rejestru r 2 do LR FFF0013C 7C 00 00 21 bclr Skok według nowego śladu (czyli powrót z podprogramu zewnętrznego) FFF00140 64 21 00 00 oris r 1,0000 Jako NOP Po wyzerowaniu systemu przekrokuj program. Zanotuj stan rejestru LR po pierwszym i drugim skoku ze śladem. Jak widać teraz po odzyskaniu zawartości LR z zewnętrznej (pierwszej) pętli, moŝliwy jest powrót na jej początek. Część 2- praktyczna Opracuj program obliczający wartość n! Wskazówki: - wartość n podajemy w lokacji pamięciowej FFF00000h - wynik µp. wpisuje do lokacji FFF00000h (tej samej) - aby wprowadzić daną natychmiastową do wybranego rejestru naleŝy uŝyć instrukcji: andi 0000h dolnej połowy andis 0000h górnej połowy wyzerowanie rejestru 28
ori - dolnej połowy oris - górnej połowy wprowadzenie danej do wynika to z przyjęcia sztywnego formatu instrukcji (32 bity). - wykorzystaj rejestr CTR (do bieŝącego n i od razu jako licznik pętli) - do zamknięcia pętli wykorzystać rozkaz bc (kod 16-dziesiętnie, wybierz pole B0, B1-nieistotne, LK=0 (bez śladu), wygodniej jest dla adresacji absolutnej AA=1 - jeden z rejestrów GPR przeznacz na iloczyn cząstkowy, do mnoŝenia uŝyj instrukcji mullw - jednego z rejestrów uŝyj jako rejestru adresujacego (FFF00000h) do odczytu n uŝyj instrukcji lwz, a do zapisu n! stw - komunikacja z rejestrami specjalnymi (obok nich jest numer własny dziesiętnie) poprzez rejestry GPR 0 31 instrukcjami mtspr, mfspr - naleŝy pamiętać Ŝe GPR0 nie moŝe być rejestrem adresującym (jest to adresacja względna zera) - kody operacyjne podane są w zapisie dziesiętnym trzeba je zapisać binarnie w normalnym porządku (MSB... LSB) - w pętli wstaw instrukcję stw do kontroli poprawności obliczeń - instrukcja bc pole BI dowolne (np. 00000) pole B0 takie jak dla funkcji: -CTR, skok gdy CTR 0, bit przewidywania skoku y=0, zastosuj przesunięcie względne (AA=0) (LK=0) pamiętając Ŝe wynosi ono 0...0 dla skoku do siebie, F... F dla 1 rozkazu wstecz itd. (2 LSB są zawsze 00 bo rozkazy są cztero bajtowe) przykładowy szkic procedury: r1 FFF0 0000 r2 (r1) r3 1 (iloczyn częściowy) CTR r2 r2 CTR 29
r3 r2 r3 bc (r1) r3 daje to instrukcje: andi r1,0000h andis r1,0000 oris r1,fff0 lwz r2,o(r1) andi r3,0000 andis r3,0000 ori r3,0001 mtspr CTR,r2 mfspr r2,ctr mullw r3,r2,r3 stw r3,(r1) bc dalej dowolnie, i tak mikroprocesor zablokuje się w stanie wyjątkowymnielegalnej instrukcji. Po zamianie na kody heksadecymalne, do komórki o adresie FFF00000 wpisz dowolną cyfrę- np. 5. Wpisz program od adresu FFF00100. Wyzeruj system i przekrokuj program zapisując kolejne iloczyny, widoczne podczas zapisu do komórki FFF00000 (uwaga pierwszy kontkat z komórką FFF00000 to odczyt argumentu). Zamień odpisane liczby na kod dziesiętny. Przykład kodowania instrukcji- rozkaz andi r 1,0000 Format rozkazu: Kod rozkazu Źródło S Przeznaczenie A Dana natychmiastowa 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 28 01 01 0000 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 21 00 00 30
Lista rozkazów procesora Power PC 603 31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47