Akademia Techniczno-Humanistyczna w Bielsku-Białej
Anatoliy Melnyk
Seminarium
Projektowanie komputera architektury RISC
Kurs - “Architektura komputerów”
Bielsko-Biała-2014
Spis treści
1.Wstęp.
2. Tor informacyjny.
3. Kesz.
4. Pamięć
5. Sterowanie.
6. Struktura podstawowa (generalna).
7. Literatura.
1. Wstęp
Celem pracy semesrovej jest opanowanie przez studenta wiedzy, na temat zasady działania oraz architektury współczesnych prototypów komputerów wersji RISC (Reduced Instruction Set Computing) oraz systemów, znajdujących się na granicy wcześniejszej CISC (Complex Instruction Set Computing ) i architektur nowoczesnych.
Istota RISC metody polega na przegrupowaniu złożoności układu typu aparat-program systemowy w sposób uproszczenia układu instrukcji procesora, zwiększenia częstotliwości taktowania, wprowadzenia przenośnikowej zasady spełnienia instrukcji szeregowego programowego strumienia z jednoczesnym podwyższeniem złożoności kompilatora. Kosztem przegrupowania oraz przeniesienia dodatkowej części wydatków czasowych na etap przygotowania programu (compile time) są skrócone wydatki czasowe na wykonanie kodu maszynowego (run-time). Osiąga się to nawet w warunkach wzrostu liczby uproszczonych zawartych w programie instrukcji maszynowych. Natomiast RISC- kierunek udoskonalenia środków komputerowych nie wydaje się bezsprzeczny. Obecnie prowokuje on niewątpliwie, powstanie kierunku bezgranicznego wzrostu złożoności jak aparatury, tak i programów systemowych współczesnych przenośnikowych super-skalarnych RISC maszyn.
Przykładem tego jest odmówienie w wykorzystaniu przez firmę INTEL i jej wspólnika HP podejścia RISC w najnowszym opracowaniu procesora typu Merced firmy INTEL (INT- skalowana EL -elektronika) na korzyść „nie-riscowej” architektury tryger-komunikacyjnej z wprost równoległym a nie tylko przenośnikowym opracowaniem instrukcji. Ta metoda znajduje się poza granicami pracy rocznej.
Rozpatrzmy ilustrację oprogramowania RISC maszyny, a konkretnie, dokonamy oprogramowania operatora C przy A=B+C. Fragment programu asemblerowego ma postać:
LW R1, B
LW R2, C
ADD R3, R1, R2
SW A, R3.
W tym fragmencie przez A,B,C oznaczono adresy komórek pamięci danych, w których przechowywane są odpowiednie po nazwie operandy (argumenty operacji) i wyniki. LW jest instrukcją stopnia załadowania operandu z komórki pamięci do rejestru, instrukcja SW wykonuje działanie odwrotne, ADD jest instrukcją dodania. Widać, że działania, stosujące się załadowania operandów do rejestrów z komórek pamięci oraz przechowywania wyników w komórce pamięci, są oddzielone od wykonania właśnie operacji dodania. Funkcje różnego typu instrukcji wtedy mają mniej więcej podobną złożoność, co jest niezbędne dla wykonania szeregowego strumienia takich instrukcji na przenośniku w celu znacznego przyśpieszenia opracowania kodu programowego. Najczęściej w maszynie RISC długości formatów wszystkich instrukcji są stałe, liczba warunków adresowych jest najmniejsza. Ograniczenie złożoności jest metodą przyśpieszonego opracowania uproszczonej instrukcji w procesorze.
Tor informacyjny
Struktura prototypu skalarnego komputera RISC.
Pierwszym etapem opracowania prototypowej (nie przenośnikowej) odmiany skalarnego komputera RISC jest synteza blokowego schematu proceduralnego maszyny. Taka synteza jest bazowana na diagramie czasowym wykonania reprezentatywnej instrukcji procesora, czyli takiej instrukcji, która ma największą czasową złożoność wykonania. W naszym przypadku jest nią instrukcja załadowania słownego operandu z pamięci danych do pewnego rejestru z pliku rejestrowego albo odmiana tej instrukcji, na przykład
LW R7, 14(R5).
Opisanie czasowe wykonania odpowiedniego tej instrukcji załadowania 32- bitowego słowa z komórki pamięci według adresu
ADDRESS=(R5)+14
do rejestru R7 poprzez uporządkowany ciąg (kolejność) wykonania mikrodziałań (czyli mikroprogramem) są nadane:
-wybór instrukcji z pamięci instrukcji według adresu, zawierający licznik komendy (rozkazu) PC ( Program Counter);
-wybór zawartości komórki R5 z pliku rejestrowego;
-obliczenie wartości adresy efektywnej (wartości zmiennej ADDRESS);
-wybór z pamięci danych według określonego efektywnego adresu operandu oraz jego tymczasowe zapisywanie do programowo nieosiągalnego rejestru danych pamięci LMD (Load Memory Data );
-następne przysyłanie zawartego rejestru danych pamięci LMD do komórki R7 pliku rejestrowego.
Jeżeli każdy oddzielny mikro krok w przedstawionym programie nazwać cyklem mikroprogramu, wtedy każdy czasowy diagram wykonania instrukcji załadowania operandu będzie składać się z dostosowanego w czasie ciągu o pięciu cyklach (złożoność czasowa dorównuje 5). Analizując podany w tablicy 2 system instrukcji komputera, dochodzimy do wniosku, że założenie o największej złożoności instrukcji typu LW jest poprawne. Należy zauważyć, że:
-po pierwsze, projektowanie maszyny współczesnej architektury jest w znacznym stopniu związano z jej zachowaniem czasowym;
-po drugie, z punktu widzenia programisty lub translatora intelektualnego z języka wysokiego poziomu istnieje mnogość rejestrów. W naszym przypadku są to programowo osiągane rejestry R0…,R31. Natomiast programista nie projektuje zaznaczone rejestry przez to, że w rzeczywistości on stosuje mnogość komórek o zbieżnym do nazwy rejestru adresem R0-R31 pamięci wewnętrznej. Taka pamięć nosi nazwę pliku rejestrowego. Koncepcja pliku rejestrowego ma podłoże technologiczne, co pozwala zwiększać liczbę rejestrów logicznych ogólnego przeznaczenia (w procesorach firmy SUN liczy 256). Jednocześnie komórki pliku rejestrowego nie ustępują w szybkości działania „prawdziwym” rejestrom dlatego, że taki plik jest ulokowany na krysztale procesora. Diagram wydatków czasowych oraz ich uporządkowanie przy wykonaniu instrukcji LW przedstawiono na rys.1.
Rys.1. Diagram czasowy wykonania instrukcji 5-cyklowej „załadowania” LW.
Rys.1 zawiera następujące skróty nazwy cyklów:
- IF: wybór bieżącej instrukcji z pamięci instrukcji (instruction memory czyli IM); nazwa cyklu - Instruktion Fetch,
- ID: dekodowanie instrukcji (Instruction Decoding) oraz wybór operandów;
- EX: wykonanie działań według wykonywanych instrukcji (EXecution);
- MEM: czytanie lub zapisywanie operandów/wyników (access) z/do pamięci danych (data memory); obecność oddzielających y się urządzeń data memory ta instruction memory oraz według architektury harwardowskiej Harvard Architecture;
-WB: odwrotne zapisywanie (Write Back) wyników operacji UAL lub wydobytych z pamięci kodów operandów do komórek pliku rejestrowego. UAL - skrót nazwy „urządzenie arytmetyczne i logiczne”.
Zastosowanie nazwy cyklów (inaczej - faz) nieco uogólnia użytą tylko w instrukcji LW semantykę każdej osobnej fazy. Jest to poprawne, gdyż naszym celem jest przybliżenie do takiego cyklowego ciągu, która zadowalałaby wymaganiom pewnej instrukcji zrealizowania mnogości o największej szybkości działania. Jednocześnie należy orientować się na najbardziej skomplikowaną instrukcję.
Zauważmy również, że w naszym przypadku w sensie fizycznym każdy cykl w czasie odpowiada jednemu przedziałowi czasowemu przy stałej ich liczbie na wykonanie pewnej instrukcji procesora (najczęściej równej 5). Przy tym pewne instrukcji mogą mieć nadmiarowe (zbyteczne) cykle. Jeżeli wewnętrzna taktowa częstotliwość procesora jest równa 500 MHz, wtedy na każdy takt lub cykl jednotaktowy przypada 2 nsek, czas wykonania każdej instrukcji wynosi 2x5=10 nsek. W tych warunkach według wersji prototypowej osiąga się szybkość działania równa 100 milionów instrukcji na 1 sek (100 MIPS).
Na rys.2 przedstawiono odmianę (by J. Hennessy and D. Patterson, Stanford University та Berkeley University, USA) budowy toru informacyjnego skalarnego prototypu RISC komputera, znanego w świecie pod nazwą DLX (DeLuXe) procesora (maszyny). Nazwa „tor informacyjny” (Datapath) powstała poprzez całkowe przedstawienie oraz opisanie rejestrowej struktury razem z urządzeniem pamięci danych DM i pamięci instrukcji (komendy) IM. Jest to realizacja architektury harwardowskiej (Harvard University in the USA).
Rys.2. Struktura toru informacyjnego prototypu skalarnego RISC komputera.
Skrótem PC jest oznaczony licznik instrukcji (Program Counter ). Zawartość PC określa adres instrukcji w pamięci instrukcji IM. Dodatek kombinacyjny Adder oblicza adres (kolejnej) instrukcji. Przy tym uwzględniono, że uporządkowano kolejność instrukcji albo program, który zawiera 4-bajtowe i tylko 4-bajtowe instrukcje (wszystkie instrukcją mają formaty o długości 32 bity), które ulokowano w IM według kolejnych adresów 0,4,8,C i in. Dlatego stała przesunięcia adresu (przesunięcia wskaźnika na kolejną instrukcję) dorównuje +4. Określona przy pomocy sumatora (Adder) wartość adresu wyboru następnej instrukcji jest przechowywana w rejestrze NPC (next PC). Pola wybranej przed chwilą instrukcji (rys.6), zawierające dwójkowe kody-identyfikatory rejestrów-operandów faktycznie są adresami komórek procesorowej pamięci wewnętrznej, która emuluje pól (mnogość) osiągniętych programowo (widocznych programiście) rejestrów. Zawartości tych pól formatu instrukcji są wysyłane do wejść adresowych pliku rejestrowego Registers lub Regs, a odpowiednio tym adresom dwójkowe kody operandów rejestrowych załadowane są do wewnętrznych programowo-nieosiągalnych czyli służbowych rejestrów A i B.
Istnieje jeszcze jeden typ operandu, zadany bezpośrednio w formacie instrukcji pod nazwą „bezpośredni” (Immediate - Imm), zadany w formacie instrukcji. Z reguły długość bezpośredniego operandu nie przekracza połowy długości formatu instrukcji. W naszym przypadku bezpośredni operand ma długość 32/2=16 bitów. Razem z tym należy utrwalić (odnotować) taką długość formatu danych, która dorównuje długości formatu instrukcji (różnica długości formatów znacznie opóźnia (hamuje) maszynę. Przy formatach danych dorównujących formatowi instrukcji 32-bitowej bezpośredniemu operandowi będzie brakować 16 bajtów do standardu. Dlatego znakowe rozszerzenie 16-bitowego bezpośredniego operandu do 32-bitowego wykonuje węzeł kombinacyjny Sign Extend. Rezultat znakowego rozszerzenia przez pewien czas jest przechowywany w rejestrze służbowym Immediate IMM. Istnieje cztery możliwe operandy na wejściu UAL:
z rejestrów A, B, Imm;
zawartość rejestru adresu następnej do wykonania instrukcji NPC.
Odznaczymy, że ostatni operand- adres jest opracowywany w UAL przy wykonaniu instrukcji umownego i bezwzględnego przejścia , kiedy w dodatek do naturalnego niezbędny jest jeszcze jeden adres, wytworzony dodaniem do zawartości NPC pewnej stałej przejścia.
Wybór dwóch operandów UAL z czterech możliwych wykonywany jest przy pomocy multiplekserów operandów MUX, które są ulokowane na jego wejściach. Wynik operacji UAL jest czasowo zapamiętywany w pośrednim rejestrze służbowym ALUoutput (ALUout). Jeżeli rezultatem operacji jest pewna liczba, to ona jest zaniesiona do komórki pliku rejestrowego, jeżeli adres- to on jest nadsyłany do górnego według rysunku multipleksera wyboru adresy MUX. Przy pomocy tego multipleksera wybrany jest adres przejścia (kolejny lub przejście), nadsyłany do licznika instrukcji PC w celu poprawnego wykonania programu.
Sterowanie multiplekserem wyboru adresu kolejnej instrukcji wykonuje się węzłem Zero, w którym zawartość służbowego rejestru A jest porównywane z 0 (dorównuje 0, większa od 0, mniejsza od 0 i in. w zależności od rodzaju wykonywanej w tej chwili operacji umownego przejścia). Wynik porównania jest dwójkową logiczną wartością (tak lub nie) i umożliwia wybór adresu multiplekserem.
Wynik-adres z wyjścia UAL może być nadesłany do pamięci danych jako adres komórki tej pamięci w instrukcji przechowania/załadowania.
Wynikiem na wyjściu multipleksera (podano z prawej strony rysunku 2), może służyć zawartość pamięci danych (przy wykonaniu instrukcji załadowania LW słowa z pamięci danych do rejestru pliku rejestrowego) lub rezultat operacji arytmetycznych, przesuniętych lub logicznych działań w UAL (na przykład, przy wykonaniu instrukcji ADD, SUB i in). Taki wynik otrzymano metodami mikroprogramowania jest przechowywany w rejestrze pliku rejestrowego. Tak, więc, wskazany multiplekser, który jest sterowany od rejestru instrukcji bieżącej komutuje do wejścia pliku rejestrowego niezbędną informację.
Przy opracowaniu przenośnikowym ciągłego strumienia instrukcji wykonywanego programu nie było uwzględnione 5-cyklowego opóźnienia wykonania pierwszej instrukcji w założeniu dostatecznie długiego strumienia. W tym przypadku (rys.3) równoważne czasowe wydatki (nakłady) na wykonanie jednej instrukcji dorównują tylko jednemu cyklowi lub taktowemu przedziałowi. Przy tym szczytowa szybkość działania w doskonałej wersji przenośnika rośnie w porównaniu ze skalarnym prototypem nie przenośnikowym do wartości 500 mln instrukcji w sekundę przy częstotliwości taktowej 500 MHz.
Zauważmy, że w sensie teoretycznym przyśpieszenie przenośnika (do stosunku 5:1 w naszym przypadku) jest najwyższym (szczytowym) i osiąga się tylko w warunkach doskonałych (idealnych) czyli przy braku żadnych związków pomiędzy sąsiednimi instrukcjami ciągłego strumienia, które już załadowano na wykonanie do przenośnika oraz kiedy w tym strumieniu są nieobecne instrukcję przejścia. W rzeczywistości do diagramu czasowego powinni być wprowadzone opóźnienia (puste fazy) w tym celu, ażeby wyniki nie przenośnikowego i przenośnikowego opracowania strumienia instrukcji pokrywałyby się. Dlatego rzeczywista wydajność przenośnika jest mniejsza w porównaniu ze szczytową i, więc, budowa przenośnika jest bardziej złożona.
Rys.3.Zasada opracowania przenośnikowego ciągłego strumienia instrukcji.
Na rys.3 podano kolejność opracowania trzech sąsiednich instrukcji z ciągłego strumienia programowego. Wydatki czasowe na każdą instrukcję są oznaczone przez osobne poziome pasy, podzielone na 5 faz lub cyklów.
Rys.3a. Przejście od nie przenośnikowego do przenośnikowego opracowania ciągłego strumienia instrukcji ( doskonała odmiana przenośnika).
Załóżmy, że wydatki czasowe przy opracowaniu pewnych etapów (cyklów) wykonania instrukcji znajdują się w granicach 50-60 nsek. Wtedy wydatki czasowe niezbędne do zrealizowania przenośnikowej metody opracowania określa się jak to podano na rys.3a. Nadmiar w 5 nsek (około 10%) w każdym cyklu przenośnika w porównaniu z wersją nie przenośnikową jest dodany wskutek pewnego opóźnienia pracy maszyny. Jest to pewną kompensacją za przyśpieszenie. Tak, więc, od zaplanowanego 100%-wego wyniku pozostaje się tylko 100-10=90%.
Rys.4 ilustruje przenośnikowe wykorzystanie (załadowanie w czasie) środków aparatowych.
Rys.4. Wykorzystanie aparatury przy opracowaniu przenośnikowym (wersja doskonała).
Na rys.5 podano przenośnikową wersję budowy toru informacyjnego. Rejestry przenośnikowe zwykle są programowo „przezroczyste” czyli niewidoczne i zawierają całkowite informacyjne „otoczenie” instrukcji, które już jest w przenośniku dla wytworzenia „wrażenia wirtualnego” o klasycznym izolowanym od opracowania sąsiednich instrukcji.
Rys.5. Przenośnikowa (podstawowa) wersja budowy toru informacyjnego w maszynie typu DLX.
Na rys.5 zaciemniono tzw. rejestry „przenośnikowe”, które ulokowano na „granicy cyklów”. Ich nazwy. odpowiadają sąsiedniej granicy, na przykład, IF/ID, ID/EX, EX/MEM, MEM/WB. Każda opracowywana bieżąca instrukcja jest niby przesuwana przez schodki IF, ID, EX przenośnika. W przypadku doskonałym każda instrukcja nie „odczuwa” obecności „sąsiadów - konkurentów” na innych schodkach przenośnika w torze informacyjnym.
Przypomnijmy sobie, że w pracy należy opracować nie przenośnikowy prototyp skalarnego procesora RISC. Przedstawiona informacja jest podana w celu pogłębienia wiedzy oraz prawidłowego opracowania.
Formaty instrukcji maszyny DLX.
Są podane na rys.6 razem z komentarzem.
Rys.6. Formaty instrukcji maszyny DLX.
Na rys.6 użyto następujących skrótów:
1. I-typ: instrukcję działające z bezpośrednim operandem (Immediate);
2. R-typ: instrukcję otrzymujące parę operandów z rejestrów (Registers) pliku rejestrowego procesora z powrotem wyniku do rejestru pliku;
3. J-typ: instrukcję przejść bezwarunkowych (jump );
4. Opcode: pole kodu operacji o długości równej 6 bitów;
5. rs1,rs2 pola o długości 5 bitów, określające numery rejestrów -zapewniaczy operandów (regiser of source),mianowicie, programowo osiągalne rejestry R0….R31.
6. rd: 5-bajtowe pole numeru rejestrowego -odbiornika wyniku działania (register of destination), również R0….R31.
7. Immediate :16-bitowe pole, zawierające bezpośredni operand; przy tym skrajnie lewa pozycja uważa się za znakową; przy tym jest możliwe rozszerzenie formatu przez pozycję znakowego bitu według reguł dopełniającego kodu.
8. Funktion: pole, określające funkcję, która rozszerza ograniczoną liczbę (na 211 -1 = 2047 pozycji) zezwolonych kodów operacji;
9. Offset added to PC: 26-bitowa stała, która dodaje się do zawartości rejestru następnego adresu pod czas wykonania instrukcji przejścia bezwarunkowego.
Zaznaczymy następne cechy szczególne formatów instrukcji:
1.Długość wszystkich formatów -32 bity
2.Realizacja ustalonego systemu rozdzielenia formatów na pola
3.Realizacja wzornictwa architektury load/store.
4.Formaty podzielono na 3 grupy:
-formaty operacji UAL
-formaty operacji load/store
-formaty operacji sterowania programem.
Formaty UAL- operacji - 3-adresowe rodzaju OP RX,RY,RZ. Jedna instrukcja zadaje operację OP, wskazuje dwa rejestry operandów RY,RZ oraz rejestr RZ przechowywania wyniku.
Cykl wyboru instrukcji (Instruktion Fetch cycle-IF)
W tym cyklu są wykonywane następujące mikrodziałania (mikrooperacji):
IR = IM [PC];
NPC = PC+4.
Wykonanie pierwszego mikrodziałania wywołuje załadowanie do 32-bitowego rejestru bieżącej instrukcji IR zawartości 4-ch szeregowo ulokowanych komórek pamięci instrukcji (na początku adres (PC)+0 i na końcu (PC)+3. Jako PC oznaczono licznik instrukcji PC.
Drugie mikrodziałanie (NPC=PC+4) oblicza „planowy adres” kolejnej instrukcji z bieżącego strumienia czyli określa następną zawartość licznika programowego (przechowuje się czasowo w rejestrze Next PC, albo NPC). „Logiczny” wybór zawartości 4-ch szeregowo ulokowanych bitowych komórek zamiast jednej 4-bajtowej wskazuje na to, że nawet na poziomie mikrodziałania adresowania komórek pamięci są logiczne. Kiedy adres bajta jest krotny do 4, czyli jest otrzymane wyrównanie granic adresy instrukcji, z pamięci fizycznej w ciągu jednego obiegu są wybierane 4 bajty, a nawet całe pakiety po 4 bajtów). Wydobyty z pamięci danych kod jest tłumaczony jak 32-pozycyjne słowo, z pamięci instrukcji- jako jedna instrukcja.
Zauważmy, że obaj mikrodziałania teoretycznie są zgodne w czasie, dlatego mogą i powinni być wykonane równolegle. Takie mikrodziałania tworzą jedyną mikroinstrukcję; w naszym przypadku (ale nie zawsze) kolejność zapisywania mikrodziałania w mikroinstrukcji nie jest ważna.
Cykl IF nie uwzględnia „paradoksu pamięci”. Rzeczywiście, że w cyklu IF według wydatków czasowych mikrodzałanie wyboru z powolnych komórek pamięci instrukcji utożsamia mikrodziałania, które działają z wewnętrznymi (nad szybkimi) rejestrami procesora.
Wiadomo, że w sposób statystyczny „przyśpieszyć” powolne komórki głównej pamięci udaje się przy pomocy pamięci kesz. Dlatego kesz (cache - przechowana od programisty lub kompilatora dodatkowa bardzo szybka buforowa lub cząstkowo-asocjatywna pamięć) jest koniecznie wykorzystywana w procesorach RISC. Na poziomie z reguły przezroczystej pamięci kesz, którą podzielono na osobne keszy instrukcji oraz danych zachodzi metamorfoza lub przekształcenie Princeton Computers Architekture (lub John von Neumann Architekture) na modified Harward Computers Architekture. Takie przekształcenie odczuwa tylko inżynier, lecz programista (lub kompilator) odczuwa architekturę nojmanowską. W architekturze harwardowskiej nie ma miejsca dla paradygmatu (niezbędne dla programisty) oprogramowania zwanego „dane-komlilator-linkier-program”.
Cykl dekodowania instrukcji (wybierania operandów z pliku rejestrowego)
W tym cyklu są wykonywane następne mikrodziałania (mikrooperację):
A = Regs [IR 6..10 ];
B = Regs [IR 11..15];
Imm = ((IR16)16 ## IR 16..31).
W przedstawionym mikro kodzie ,złożonym z trzech skoordynowanych w czasie ,czyli w którym jest możliwe jednocześnie równolegle wykonanie mikrodziałania ,są zastosowane następne oznaczenia:
1. A, B, Imm - wewnętrzne służbowe 32-bitowe rejestry pośredniego przechowywania kodów, wszystkie trzy rejestry są „przezroczyste” dla programisty czyli są nieobecne w instrukcjach maszynowych;
2. Regs[adress] - komórka pamięci procesora z wiadomą nazwą pliku rejestrowego;
3. R x..y - bitowe pole rejestru instrukcji zawierające grupę szeregowo ulokowanych bitów- od bitu pod numerem X do bitu z numerem Y włącznie; zwróćmy uwagę na numerację bitów w słowie procesora- lewy bit ma 0-wy numer, prawy - 31-j numer;
4. ІR6..10 - bitowe pole rejestru instrukcji zawierającego dwójkowy numer rejestru - źródła kodu (patrz format instrukcji), długość pola dorównuje 5 bitów, co pozwala oznaczyć i zrealizować 32 rejestru- od R0 do R31;
5. IR11..15 - również 5-bitowe pole numeru jeszcze jednego rejestru źródła z mnogości R0….R31.
Pole bezpośredniego operandu (IMM) w formacie instrukcji ma długość tylko 16 bitów. Jednocześnie pozycje toru informacyjnego i wszystkich trzech rejestrów służbowych są równe 32. Przed tym jak zapisać 16-bitowy kod IR16..31 bezpośredniego operandu z rejestru instrukcji do służbowego rejestru Imm, ten kod należy rozszerzyć, uwzględniając przy tym znak (lub pozycję IR16) do wartości 32-bitowej według następnego standartowego algorytmu znakowego rozszerzenia:
IR16 ## IR16 ##...## IR16 # IR16..31.
Przy tym symbolem ## jest oznaczona operacja sprzężenia (konkatenacja).
Ważne, że w cyklu ID wykonuje się dekodowanie (rozszyfrowania) instrukcji oraz dla zwiększenia szybkości działania wybór wszystkich możliwych wersji operandów bieżącej instrukcji niezależnie od jej typu. Z innej strony, możliwość jednoczesnego wyboru wszystkich odmian operandów jest wywołana odpowiednią strukturą formatów instrukcji, w których fiksuje się ulokowanie pól - wskaźników na źródła oraz odbiorniki operandów i wyników. Innymi słowy, formaty instrukcji procesora realizują technikę kodowania formatów instrukcji pod nazwą fixed-field coding.
Cykl wykonania/określenie efektywnego adresu
(Execution / effective address cycle - EХ)
Wykonywane w cyklu EX mikrodziałania są już zależne od typu bieżącej instrukcji. Dlatego należy podzielić wszystkie instrukcję procesora na 3 następujące grupy:
-operację urządzenia arytmetyczno-logicznego;
-operację załadowania operandów z głównej pamięci oraz przechowanie wyników w głównej pamięci;
-operację umownych oraz bezwzględnych przejść.
Opiszemy charakterystyczne dla każdego typu instrukcji makrodziałania.
Operację zwracania się do pamięci danych
(load/store instructions)
Wskazane operację w cyklu EX przygotowują wartości adresu efektywnego czyli obliczają wartości kodu dwójkowego, który bezpośrednio określa adres komórki pamięci danych. Wykonywane jest następujące mikrodziałanie:
ALUoutput = A + Imm.
Oznaczone w mikrodziałaniu dodanie bezpośredniego operandu (jednego ze składowych adresu) z zawartością roboczego rejestru A (drugiej składowej) jest zrealizowane w UAL (ALU). Otrzymaną sumę (która jesz liczbą cała i dodatnią, przenoszenie pomijamy) zapisuje się do jeszcze jednego przezroczystego dla programisty rejestru ALUoutput, który ma ilość pozycji równą 32 bity. Ten rejestr przechowuje kody wyników powstałych na wyjściu sieci kombinacyjnej pod nazwą ALU. Jeżeli przypomnieć działania instrukcji LW, wtedy przeznaczenie i kształt zapisywania tego mikrodziałania staje się przezroczyste.
ALU- instrukcja typu rejestr-rejestr
(na przykład ADD R1,R2,R3)
Zgodnie z instrukcją wykonuje się następujące działanie:
ALUoutput = A op B.
Uogólnione oznaczenie (op) może być konkretyzowane jako (add), (sub) i in. w zależności od konkretnego rodzaju bieżącej instrukcji, opracowanej w informacyjnym torze maszyny. Pokreślimy, że w poprzednim do EX cyklu, mianowicie w cyklu ID do rejestrów służbowych już załadowana jest zawartość wybranych komórek pamięci „plik rejestrowy” z adresem R2 i R3. Rezultat działania jeszcze nie jest przechowany w R1 i jego czasowo zapisano do rejestru służbowego ALUoutput.
2.5.3. ALU-instrukcją typu rejestr - operand bezpośredni (na przykład ADD,R1,R2,#23)
Wykonywane jest następne mikrodziałanie:
ALUoutput = A op Imm.
Zamiast zawartego R3 w operacji bierze udział operand bezpośredni, który z uwzględnieniem „znakowego” rozszerzenia do 32 bitów jest zabrany do służbowego rejestru Imm.
2.5.4. Umowne przyjście lub branch (na przykład, BNEZ R5, data)
Wykonywane są następne mikrodziałania:
ALUoutput = NPC + Imm;
Cond (ition) = (A op 0).
Obaj mikrodziałania są skoordynowane w czasie. Przy pomocy pierwszego z nich oblicza się celowy adres umownego przejścia. Przy tym do już określonego adresu następnej instrukcji (NPC) ulokowanej bezpośrednio według instrukcji umownego przejścia dodana jest znakowa stała z rejestru służbowego Imm (zawiera wartość data). Drugie mikrodziałanie określa (rzeczywistą lub niepoprawną) wartość warunku Condition umownego przejścia. Dlatego zawartość służbowego rejestru A, który jest zbieżny z zawartym R5 (w przykładzie instrukcji) porównuje się na podstawie operacji (op) z zero. Według semantyki instrukcji BNEZ otrzymujemy, że Cond=true, kiedy zawartość R5 jest niezerowa, lubCond=false, jeżeli R5 zawiera 0. Faktycznie Cond jest jednobitowym rejestrem w węzła Zero?.
Zwróćmy uwagę na to, że teraz są sformowane tylko wartości dwóch niezbędnych elementów wykonania Branch, mianowicie-jednobitowy kod warunku Cond oraz celowy adres przejścia, który czasowo przechowuje się w służbowym wyjściowym rejestrze UAL, czyli w ALUoutput. Bezpośrednie wykonanie umownego przejścia, polegającego w naturalnej (kolejnej) lub nienaturalnej (skok do adresu celowego) zmianie zawartości PC i spełniony jest w następnym cyklu.
Cykl obrócenia (postępowania) do pamięci/zakończenie umownego przyjęcia (memory access/branch completion cycle - MEM)
2.6.1. Obrócenie do pamięci
Wykonywane są następujące mikrodziałania:
LMD = DM [ALUoutput];
DM [ALUoutput] = B.
Obrócenie do pamięci stosowano w instrukcji załadowania (na przykład LW, R6,112 (R3)) oraz w instrukcjach przechowania (na przykład, SW 112(R3),R6)
Pierwsze mikrodzałanie wykonywane jest w przypadku instrukcji Load (załadowanie). Przy pomocy poprzednio obliczonego adresu pamięci danych, która jest czasowo przechowana w rejestrze służbowym ALUoutput, zachodzi dostęp do pamięci przy oznaczeniu DM[ALUoutput].
Fizycznie z pamięci zawsze jest z czytywano 32 bity lub nawet całe pakiety z 32-bitowej jednostki strukturalnej). Otrzymany z pamięci danych kod dwójkowy czasowo załadowano do jeszcze jednego rejestru służbowego LMD (Load Memory Data). I tylko w następnym cyklu WB (jeszcze nie rozglądanego) z czytany kod MLD przysyłany jest do konkretnej komórki (w naszym przypadku- do adresy R6) pliku rejestrowego.
Drugie mikrodzałanie zrealizowano tylko w instrukcji Store (przechowywanie). Do komórki pamięci danych pod wskazany adres w rejestrze służbowym ALUoutput = (R3) + 112 posyłana jest zawartość rejestru służbowego B. W przedstawionym przykładzie dla instrukcji SW spełnia się tożsamość (B)=(R6).
2.6.2. Przejście umowne (branch)
Wykonuje się następne umowne mikrodziałanie:
if (condition) PC = ALUoutput else PC = NPC.
Spełnia się naturalna (cond=0) lub nienaturalna (cond =1) zamiana zawartości PC dla zrealizowania kolejnej za branch instrukcji .
2.7. Cykl zapisywanie odwrotnego (write-back cycle - WB)
W tym ostatnim cyklu z konieczności wynik otrzymany w fazach poprzednich zapisuje się do pewnej komórki RX pliku rejestrowego. Na przykład, w R1 w bieżącej instrukcji ADD R1,R2,R3 lub R6 przy bieżącej instrukcji LW R6,#112(R3).
Uwaga! Ten cykl zmienia programowy stan komputera i po jego wykonaniu odnowienie poprzedniego stanu nie jest możliwe.
2.7.1. ALU-operacja „rejestr-rejestr”
Wykonuje się następne mikrodziałanie:
Regs[IR16..20] = ALUoutput.
Mikrodziałanie przechowuje wynik ALU - operacji w rejestrze punktu docelowego (na przykład w rejestrze R1 z instrukcji ADD). Zrozumiało, że bity 16…20 odpowiedniego formatu instrukcji zawierają dwójkowy numer rejestru punktu docelowego.
2.7.2. ALU-operacja rejestr-operand bezpośredni
Wykonuje się następne mikrodziałanie:
Regs[IR11..15 ] = ALUoutput.
To mikrodziałanie przechowuje wynik operacji, na przykład, SUB R5, R4, #1002 w komórce R5 pliku rejestrowego.
2.7.3. Instrukcja załadowanie (na przykład, LW,R6,112 (R3))
Wykonuje się następna operacja:
Regs[IR 11..15 ] = LMD.
Przedstawiona mikroinstrukcja nadsyła do komórki R6 pliku rejestrowego zawartość komórki pamięci danych pod adres 112+(R3), która na poprzednich cyklach już była wybrana z pamięci i czasowo przechowywało się w rejestrze służbowym LMD.
Na tym opisanie mikrodziałań sterowania pracą DLX maszyny jest zakończone.
Po dalsze czynności stoją się opracowania zjednoczonego algorytmu działania komputera w całości. Algorytm należy układać na podstawie opisanych do tej pory działań. Wyniki podano w tablicy 1. Instrukcja Load wymaga spełnienia całkowitego łańcucha zmiany cyklów, mianowicie IF, ID, EX, MEM, WB. Dla instrukcji branch pustym okazał się cykl WB. Wprowadzenie pewnej nadmiarowości do diagramu cyklowego wspomaga unifikować i umożliwić konwertowanie naszego prototypu do standartowego przenośnikowego RISC komputera.
Tablica 1. Warianty roboczych mikroprogramów nie przenośnikowego prototypu maszyny DLX.
Cykl |
instrukcje |
||
IF |
IR = IM [PC]; NPC = PC + 4; |
||
ID |
A = Regs [ IR6..10 ]; B = Regs [ IR11..14 ]; Imm = (IR16 )16 ## IR16..31; |
||
ALU instrukcje |
Load albo Store instrukcje |
Branch instrukciji |
|
EX |
ALUout = A op B; or ALUout = A op Imm; Zero(cond) = 0; |
ALUoutput = A + Imm;
Zero(cond) = 0; |
ALUoutput = NPC + Imm;
Zero(cond) = A op 0; |
MEM |
PC = {if cond then ALUoutput else NPC}; |
LMD = DM[ALUoutput]; or DM [ALUoutput] = B; PC = {if cond then ALUoutput else NPC}; |
PC = {if cond then ALUoutput else NPC}; |
WB |
Regs [IR16..20 ] = ALUoutput; or Regs [ IR11..15 ] =ALUoutput; |
Regs [ IR11..15 ] = LMD; |
Nema microdij, Vykonannja instrukcji jush skonchono |
Tablica 1 nie wykazuje tego, w jaki sposób wykonywane jest rozgałęzienie na 3 gałęzi w cyklu EX (w zależności od typu wykonywa mej instrukcji). Słowo „or”(jeżeli jest obecne) należy rozumieć w znaczeniu „albo”, lecz nie „czy”. Nie odznaczono również, że wskazane w cyklu WB mikrodziałania niezbędne są tylko w warunkach opracowania instrukcji Load, a nie Store. Przedstawiony mikroprogram należy realizować urządzeniem sterującym (tutaj nie opisany).Zaznaczmy, że korekta generacja kolejności mikrokodów jest łatwo podtrzymywana przez kod instrukcji bieżącej, poczynając od fazy ID i zawiera rejestr IR.
2.8. System instrukcji maszynowej
Pełny wykaz mnogości instrukcji podano w tablicy 2. Zauważmy, że w sposób nietypowy jest wykorzystywany rejestr R31 pliku rejestrowego, który mieści adres powrotu przy wykonaniu pewnych typów przejść bezwarunkowych.
Rejestr R0 pliku rejestrowego zawsze zawiera bity zerowe (lub po prostu zero) i zawartość zerowa nawet nie zmienia zapisywanie do R0, co pozwala realizować bezwzględne warunki adresowania ,kiedy
address = offset + [R0] = offset + 0 = offset.
gdzie; offset oznacza przesunięcie.
Tablica 2. Mnogość instrukcji maszyny DLX.
№ пп |
Kod instrukcji |
Sutnost Instrukcij DLX Maszyny |
Data pshesylannje |
Move data between registers and memory, or between the integer and FP or special registers; only memory address mode is 16-bit displacement + contents of an integer register |
|
1 |
LB, LBU, SB |
Load byte, load byte unsigned, store byte |
2 |
LH, LHU, SH |
Load halfword, load halfword unsigned, store halfword |
3 |
LW, SW |
Load word, store word |
4 |
LF, LD, SF, SD |
Load single precision float, load double precision float, store single precision float, store double precision float |
|
MOVI2S, MOVS2I |
Move from/to integer register to/from a special register |
|
MOVF, MOVD |
Copy one floating point register or a DP pair to another register or pair |
|
MOVFP2I, MOVI2FP |
Move 32 bits from/to a FP register to/from an integer register |
Arytmetyczne I logiczne |
Operations on integer or logical data in integer registers; signed arithmetic instructions trap on overflow |
|
5 |
ADD, ADDI, ADDU, ADDUI |
Add, add immediate (all immediates are 16 bits); signed and unsigned |
6 |
SUB, SUBI, SUBU, SUBUI |
Subtract, subtract immediate; signed and unsigned |
7 |
MULT, MULTU, DIV, DIVU |
Multiply and divide, signed and unsigned; operands must be floating-point registers; all operations take and yield 32-bit values |
8 |
AND, ANDI |
And, and immediate |
9 |
OR, ORI, XOR, XORI |
Inclusive or, Inclusive or immediate, exclusive or, exclusive or immediate |
10 |
LHI |
Load high immediate - loads upper 16 bits of register with immediate and zeros the lower 16 bits |
11 |
SLL, SRL, SRA, |
Shifts; both immediate (S__I) and variable form (S__); shifts are left logical, right logical and right arithmetic |
12 |
SEQ, SNE, SLT, |
Set conditional; set equal zero, set not equal zero, set less than, set greater than, set less than or equal, set greater than or equal |
Sterowannja |
|
|
13 |
BEQZ, BNEZ |
Branch integer register equal/not equal to zero; 16 bit offset from PC+4 |
|
BFPF, BFPT |
Test comparison bit in the FP status register and branch; 16 bit offset from PC+4 |
14 |
J, JR |
Jumps; 26 bit offset from PC+4 (J) or target register (JR) |
15 |
JAL, JALR |
Jump and link; save PC+8 to R31, target is 26 bit offset from PC+4 (JAL) or a register (JALR) |
|
TRAP |
Transfer to operating system at a vectored address |
|
RFE |
Return to user code from an exception; restore user mode |
przycinek ruchomy |
Operacje z przecinkiem ruchomym: DP (double precision) and SP (single precision) |
|
|
ADDD, ADDF |
Add DP and SP floats |
|
SUBD, SUBF |
Subtract DP and SP floats |
|
MULTD, MULTF |
Multiply DP and SP floats |
|
DIVD, DIVF |
Divide DP and SP floats |
|
CVTD2F, CVTD2I, |
Convert instructions; CVTx2y converts from type x to type y, where x and y are one of D (double precision float), F (single precision float) or I (integer); both operands are in floating point registers |
|
EQD, EQF, NED, NEF, LTD, LTF, |
DP and SP compares; set comparison bit in FP status register |
Realizowano następujące typy instrukcji (analizując tabl.2).
Przesyłanie danych między rejestrami oraz pamięcią danych lub między rejestrami całych operandów i rejestrów operandów z ruchomym przecinkiem oraz specjalnymi rejestrami; adresacja pamięci wykonuje się tylko przy pomocy jednej adresowalnej mody (mode), gdzie 16-bitowe przysunięcie, które jest ulokowane w formacie instrukcji, dodaje się do zawartości jednego z rejestrów ogólnego przeznaczenia (czyli rejestru, który zawiera cały operand-bazowy adres). Instrukcje załadowania (load) lub przechowania (store), należące do tego typu są wolne od dodatkowej funkcji arytmetycznego, logicznego i innego opracowania operandów. To po pierwsze, zadowolenia niezbędnemu warunkowi wytworzenia mnogości instrukcji (komendy maszynowej) RISC architektury, po drugie, pozwala wyznaczać projektowaną architekturę jako Load/store architecture.
Arytmetyczno/logiczne instrukcję są wywoływane od operacji wymiany między programowo sterowanymi rejestrami procesora oraz komórkami pamięci danych. Przy pomocy danej grupy instrukcji są wykonywane działania dodania lub odejmowania operandów, obróbką logiczną oraz przesunięcia operandów.
Instrukcje sterowania nad wykonaniem programu(przejścia umowne i bezwarunkowe i in), na przykład TRAP (w tej ostatniej czasowo na krótki termin czasu jak gdyby „przekazuje” sterowanie układem pewnemu modułowi systemu operacyjnego), jak również instrukcja obrócenia z wyłączenia (obróbka szczególnej sytuacji powstałej przy wykonaniu operacji) RFE (Return From Exeption)
Instrukcje obróbki liczby w formacie z przecinkiem ruchomym- wykonywane są operacje dodania, odejmowania, mnożenia, dzielenia i in. Nad odpowiednimi kodami z reguły w dwóch wersjach (dokładność normalna i podwójna).
Opiszemy przykład syntaksysu zapisywania algorytmów wykonania pewnych maszynowych instrukcji DLX (patrz tabl.3) Podano zapis
Regs[R19] 16..31 = 16(DM[Regs[R8]]0 )8 ## DM[Regs[R8]].
On utrwala następne. Odnowione są tylko 16 młodszych (prawych) bajtów rejestru R19. Do nich nadsyłany jest 2-bitowy dwójkowy kod, w którym młodszy prawy bit wybiera się z pamięci danych DM pod adresem zbieżnym z zawartością rejestru R8. Starszy lewy bit tworzy się 8-krotnym powtórzeniem 0-j (starszej) pozycji dopiero co wspominanego prawego bita. Symbolem ## oznaczono operacje konkatenacji (sprzężenia) dwóch bitów do 2-bitowego pół słowa. Tabl. 3 podaje dostateczną dla syntezy nieobecnych w niej algorytmów informacje.
Tablica 3. Przykłady algorytmów wykonania instrukcji DLX.
Przykład instrukcji |
Algorytmy wykonywania instrukcji |
Arytmetyczne I logiczne instrukcje |
|
ADD R1, R2, R3 |
Regs[R1] = Regs[R2} + Regs[R3] |
ADDI R1, R2, #3 |
Regs[R1] = Regs[R2] + 3 |
LHI R1, #42 |
Regs[R1] = 42 ## 016 |
SLLI R1, R2, #5 |
Regs[R1] = Regs[R2} << 5 |
SLT R1, R2, R3 |
if (Regs[R2] < Regs[R3]) Regs [R1] = 1 else Regs[R1] = 0 |
Instrukciji load/store |
|
LW R1, 30(R2) |
Regs [R1] = 32 DM [30 + Regs[R2]] |
LW R1, 1000(R0) |
Regs [R1] = 32 DM [1000 + 0] |
LB R1, 40(R3) |
Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 24 ## DM [40 + Regs[R3]] |
LBU R1, 40(R3) |
Regs [R1] = 32 0 24 ## DM [40 + Regs[R3]] |
LH R1, 40(R3) |
Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 16 ## DM [40 + Regs[R3]] ## DM [41 + Regs[R3]] |
SW 500(R4), R3 |
DM[500 + Regs[R4]] = 32 Regs[R3] |
SH 502(R2), R3 |
DM[502 + Regs[R2]] = 16 Regs[R3] 16…31 |
SB 41(R3), R2 |
DM[ 41 + Regs[R3]] = 8 Regs[R2] 24…31 |
Instrukcje sterowania program |
|
J name |
PC = name; ((PC + 4) - 2 25) =< name =< ((PC + 4) + 2 25); |
JAL name |
R31 = PC + 4; PC = name; ((PC + 4) - 2 25) =< name =< ((PC + 4) + 2 25); |
JALR R2 |
Regs[R31] = PC + 4; PC = Regs[R2]; |
BEQZ R4, name |
if (Regs[R4] == 0) PC = name; ((PC + 4) - 2 15) =< name =< ((PC + 4) + 2 15); |
BNEZ R4, name |
if (Regs[R4] != 0) PC = name; ((PC + 4) - 2 15) =< name =< ((PC + 4) + 2 15); |
3.Kesz
Wiadomo, że tzw. paradoks pamięci czyli pamięć jądra komputera (jądro komputera= procesor + pamięć) może być albo małą , lecz szybką i dorównuje wymaganiom procesora dotyczącym szybkości działania albo względnie wielką i powolną. Nie istnieje pamięci jednocześnie wielkiej i szybkiej. Przedwczesnym jest problem pamięci dla programisty systemowego dlatego, że pojemność pamięci jest zawsze mała.
W celu pokonania tej nieodpowiedniości wbudowuje się wielopoziomowy układ hierarchiczny, w którym na górnym poziomie hierarchii znajduje się programowo-sterowane rejestry procesora, na drugim poziomie - kesz, następnie komórki głównej pamięci w architekturze prinstonowskiej lub komórki pamięci danych w architekturze harwardowskiej, dalej systemy pamięci zewnętrznej (dysk, taśmy magnetyczne, pamięć archiwalna z technologią laserową i in). Według poziomu hierarchicznego z góry do dołu pojemność urządzeń pamięci wzrasta, a szybkość działania maleje. System operacyjny jest odpowiedzialny za informacyjny odmian między poziomami.
Kiedy wielokrotny poziom i hierarchia pamięci jest ukryta od programisty, mówi się o realizacji pamięci wirtualnej, w której niby jest nieobecny zaznaczony paradoks pamięci i programiście wydaje się użycie jedynej względnie wielkiej i szybkiej pamięci.
Ważne jest to, że obieg procesora do pamięci jest zlokalizowany w niewielkim zakresie zmiany adresów, który pozwala wykorzystywać hierarchiczny system pamięci w celu pokonania niezgodności szybkości działania procesora i podukładu pamięci z jednym poziomem hierarchii.
Rys.7. Kesz jako składowa cześć jądra komputera (CPU-główny procesor, .pamięć, Cache-kesz).
Kesz-szybka pamięć buforowa z niewielką pojemnością, która jest ulokowana między procesorem i główną pamięcią. Kesz działa na pełnej szybkości procesora i nie hamuje jego działania. Kesz (angl-schowek) pozostaje się przezroczysty dla programisty, gdyż system instrukcji procesora najczęściej nie zawiera komend działania z keszem.
Zakłada się ,że procesor również nie „widzi” kesz i generuje adresy pamięci tak niby jego niema. Natomiast kesz, z reguły, istnieje i przechwyca sygnały procesora wczytywanie/zapisywanie i w potrzebie nadaje procesorowi szybkie kopie kodu informacyjnego, które przechowuje we własnej roboczej pamięci. Jeżeli kesz może zamienić pamięć ( 96-98% przypadków) ,wtedy on własnymi siłami dorównuje wymaganiom procesora. Procesor wtedy nie hamuje się i działa na maksymalnej szybkości. Kiedy „zamiana” pamięci jest możliwa (2-4% przypadków), wtedy kesz wykorzystuje pamięć, a więc nieco hamuje procesor.
Kontroler kesza jest przeznaczony do przechwycenia komendy od procesora do działań z pamięcią i jest częścią urządzenia. Inna część aparatury kesza zawiera niewielką roboczą pamięć, w której mieści się zawartość kopii komórek głównej pamięci, uczestniczących w obsługiwaniu ostatnich krewendów procesora. Ważne, że zawartość komórek głównej pamięci jest kopiowana do pamięci komputera razem z adresami. Właśnie oni umożliwiają keszu decydować o możliwościach pamięci buforowej co do konkretnej krawendy bez uczestnictwa powolnej głównej pamięci.
3.2. Charakterystyki i działanie kesza.
Kesz charakteryzuje się:
funkcją rzutu bloków pamięci na bloki kesza (rzut prosty w naszym przypadku);
algorytmem zamiany bloków kesza na bloki pamięci ( w naszym przypadku-najprostszy, przymusowy);
algorytmem wykonania zapisu słowa, które jest wynikiem wykonania działań w procesorze do ułożonego systemu kesz-pamięć ( u nas użyto uproszczonego algorytmu ogólnego zapisu);
Dokładne opisanie systemu kesza jest poza granicami danych wskazówek metodycznych. Podano jest opisanie tylko uproszczonej wersji p.t. „kesz w rzucie prostym z ogólnym zapisem” (rys.8). Pojęcie „blok” na trzy możliwe tłumaczenia:
-blok jako jednostka informacyjna, która składa się z sąsiednich od siebie słów bez uwzględnienia typu pamięci;
-blok jako mnogość komórek pamięci danych lub pamięci instrukcji;
-blok jako mnogość komórek roboczej (wewnętrznej) pamięci kesza.
Przedstawimy pewne wyjaśnienia.
Każdy blok pamięci, który zawiera średnio 16-64 sąsiednich z punktu widzenia rozmieszczenia słów można kopiować nie do byle jakiego, a tylko do określonego wcześniej bloku roboczej pamięci kesza. U nas numer bloku kesza, który bierze udział w kopiowaniu ,jednoznacznie określa się przy pomocy 7 pozycji adresu procesora (zawiera pole Block-rys.8) Procesor „nie rozumie” i nie „odczuwa” strukturalnej interpretacji generowanego adresu. Taką interpretacje nadaje tylko kontroler kesza, kiedy on „bez zezwolenia procesora” przechwyci ten adres, przeznaczony pamięci danych lub pamięci instrukcji.
Załóżmy, że adres, który generuje procesor przy z czytywaniu zawartości jednej komórki pamięci (czyli słowa) do własnego rejestru ma długość 16 bajtów. Wtedy kontroler kesza przy pomocy 7 średnich pozycji adresowego słowa zwraca się do określonego przez te pozycję bloku własnej pamięci. Dwójkowy numer kesza jest zbieżnym z dwójkowym napełnieniem pola Blok adresu procesora. Poszukiwany w taki sposób blok zawsze jest obecny w roboczej pamięci kesza. Przy tym kesz składa się z 2….=128 bloków. Zawartość odnalezionego bloku roboczej pamięci kesza może być kopią nie jednego, lecz jednego z kilku zezwolonych do kopiowania plików pamięci. Na przykład, do 0-bloku kesza pozwolono kopiować następne bloki pamięci: 0,128,256,512 i t.d. Sumarycznie do każdego bloku kesza można skopiować tylko jeden z 2…=32 bloków pamięci. Oczywiście, że pojemność informacyjna pamięci w 32 razy większa od pojemności kesza. Taki stosunek pojemności odpowiada pojęciu paradoksu pamięci. Dochodzimy do wniosku, że nas zadowala tylko jeden z 32-ch możliwych wersji kopiowania. Czy jest bieżące napełnienie określonego bloku kesza odpowiadającym pytaniu procesora? Zadanie jest rozwiązywane przy pomocy zawartości starszych 5 bitów adresy procesora tworzących pole pod nazwą Tag.
Rys.8. Wewnętrzna struktura kesza z prostym rzutem; wewnętrzna struktura (mnogość słów) każdego bloku w keszu jest pokazana, w pamięci- ukryta.
Skoro w już określonym numerze bloku zawartość bloku kesza jest odpowiednia, wtedy zawartość pól tag z pola adresu procesora i ze znaku bloku roboczej pamięci nakładają się, oznacza to, że blok kesza w tej chwili zawiera potrzebną kopie. W tym przypadku fiksuje się sytuacja „trafianie do kesza” (cache hit). Następnie, przy pomocy bitów prawego pola formatu adresu Word należy określić poszukiwane słowo w granicach znalezionej w keszu znalezionej w tej chwili i sprawdzonej na adekwatność kopii bloku i następnie nadesłać to słowo na wejście procesora. Widać, że adresowe zapytanie procesora na z czytywanie zawartości komórki było przechwycono i zadowolniono przez szybki kesz, przy tym powolna pamięć nie działała.
Inna sytuacja pod nazwą „błąd (chybienie)” wynika przy rozbieżności wymienionych wyżej dwóch tegów. Kontroler kesza zmuszony jest ponownie przykazywane adresowe pytanie od procesora do powolnej pamięci i przejść (razem z procesorem) do stanu oczekiwania wyników pracy pamięci na z czytywanie. W celu zmniejszenia liczby zwróceń do pamięci nawet w tej sytuacji należy z czytywać nie jedno wskazane przez adres procesora słowo, lecz cały blok informacyjny ( 16-64 sąsiednich słów) zawierające poszukiwane przez procesor słowo pamięci. Wykonuje się zasada lokalizacji adresowych zwróceń procesora czyli „następne słowo potrzebne procesorowi najczęściej będzie mieć i następny adres”.
Blok nadsyła się do kesza, w którym jest kopiowany w bloku roboczej pamięci z wiadomym numerem i jednocześnie niezbędne słowo z tego bloku podano do informacyjnego wejścia procesora. Przy kopiowaniu informacyjnego bloku z pamięci do bloku roboczego pamięci kesza ponownie określają zawartość odpowiedniego pola tegowego.
Pod czas zapisywania (przesyłania słowa z rejestru procesora do komórki pamięci) praca kontrolera składa się z następnych operacji. Najpierw określa się obecność lub nieobecność kopii bloku, który
zawiera poprzednią wartość odpowiedniego do nadanego przez procesor adresu. W przypadku trafienia do kesza zapisy dokonuje się jak do bloku kesza, tak również i do bloku pamięci lub tylko do bloku pamięci. W obu przypadkach zapis wykonuje się powolnie poprzez konieczny udział w nim powolnej pamięci danych. Ten algorytm realizuje tzw. kesz z ogólnym zapisem. Bardziej złożone algorytmy są dostępne w specjalnej literaturze.
4.Pamięć
Opracowanie struktury systemu pamięci jest zadaniem pospolitym. Uproszczony schemat pamięci podano na rys.9.
Rys.9. Struktura pamięci.
Pamięć składa się z rejestru adresy (MAR) i buforowego rejestru czasowego przechowywania danych (MDR). Bezpośrednie wykonanie funkcji zapamiętywania wykonuje matryca Memory Matrix. Do pamięci doprowadza się dwa sygnały określające mikrodziałania z czytywania (Memory Read) oraz zapisu (Memory Write). Strumień (Stream) danych jest dwu skierowanym, strumień adres- jedno skierowanym. Współczesne odmiany pamięci są bardzo skomplikowane.
5. Sterowanie.
Sterowanie jest opisywane przy pomocy modelu matematycznego tzw. abstrakcyjnego automatu Moora (AA) Mikroprogram działania przyrządem sterującym podano na rys.10 (schemat graficzny algorytmu-SGA) bez całkowitej zgodności z algorytmem z tablicy 1. Gwarancja odpowiednożci powien być uwzględniony stunenten przy wykonaniu pracy. W SGA wprowadzono następujące oznaczenia:
-mikrodziałania generujące przyrząd sterujący;
sygnały stanów przyrządów toru informacyjnego.
Mikrodziałania wysyła przyrząd sterujący do węzłów toru informacyjnego. Sprzężenie zwrotne (od toru informacyjnego do przyrządu sterującego) realizują sygnały stanów (patrz rys.13).
Rys.10. SGA przyrządu sterującego prototypu skalarnego RISC procesora DLX.
Należy zbudować abstrakcyjny automat (AA) Moora, który jesz równoważnikiem kodowego SGA.
AA Moora opisywany jest pięcioma z trzech mnogości:
- mnogość stanów wewnętrznych
;
mnogość sygnałów wejściowych
;
mnogość sygnałów wyjściowych
??????????????
i dwóch funkcji, mianowicie: odpowiedź jednostkowa skokowa i funkcję wyjściowe . Skończony AA na skończone mnogości A,X,Y. Inicjowany AA Moora ma określony wcześniej początkowy stan wewnętrzny . Odpowiedź jednostkowa skokowa określa następny stan, który jest zależny od stanu bieżącego i sygnału wejściowego. Funkcja wyjściowa określa sygnał wyjściowy (makrodziałanie) w zależności od stanu wewnętrznego. Dla przejścia od SGA do AA Moora należy określić wszystkie 5 elementów.
Mnogości
, które składają się z 20 elementów (mikrodziałań) oraz
z 3 elementów określonych przy kodowaniu SGA.
Mnogość
określa się następująco:
-początkowy szczyt oznacza się symbolem stanu wewnętrznego
.
-każdy szczyt operatorowy oznaczono osobnym nie zbieżnym z już użytymi, symbolem stanu wewnętrznego, wynik podano n a rys…,u nas mnogość
zawiera 16 stanów wewnętrznych od
do
(rys.11).
Wyznaczymy odpowiedź jednostkową skokową i funkcję wyjść. Te funkcję określono bezpośrednio przy sporządzeniu grafa AA Moora (rys.12).
Rys.11. Kodowany SGA przyrządu sterującego prototypu skalarnego RISC procesora DLX z oznaczeniem stanów przez interpretację automatem Moora.
Rys.12 zawiera tylko fragment automatu AA Moora, cały graf można zbudować samodzielnie.
Rys.12. Graf Moora, określający roboczy algorytm przyrządu sterującego.
Sygnał Reset zmusza automat do przejścia w stan inicjowania. AA Moora działa tylko wtedy, kiedy sygnał Reset usunięto. Przejście od pierwotnego do drugiego szczytu wykonuje się po impulsie taktowym. Przejście do szczytów а3, а4, а5, а6 wykonuje się według pełnego zestawu warunków w obecności impulsu taktowego. Na szczycie a0 formują pusty sygnał mikrodziałania y0. Na szczycie a3 formują sygnały mikrooperacji y5 i y6.Oznaczone na grafie skierowane krawędzie określają funkcję przejść. Funkcję wyjścia oznaczono znakami mikrooperacji w pobliżu szczytów automatu. Automat wreszcie zbudowano, projektowanie przyrządu sterującego dobiegło końca. Wiadome CAD na bazie grafa AA formują konfiguracyjne pliki FPGA. Pozostałe działania wykonuje automatyka.
6.Struktura podstawowa (generalna)
Uproszczony schemat takiej struktury prototypu skalarnego RISC komputera podano na rys.13. Przyrząd sterujący (Control Unit) nadsyła sygnały sterujące (MicroCode) do drogi informacyjnej (DataPath) i do pamięci (Memory). Z drogi informacyjnej sygnały stanów (Signal of States),na przykład bity rejestru instrukcji i in. nadchodzą do przyrządu sterującego dla rozgalęzienia mikroprogramu. Podzielone pamięci danych DM i instrukcji IM architektury harwardowskiej zamienia się na szybkie keszy D-Cache i I-Cache, odpowiednio. Keszy są połączone z jedyną pamięcią architektury prinstonowskiej. Wymiana w podukładzie pamięć/kesz danych jest dwu stronna, w podukładzie pamięć/kesz- jednostronna.
Rys.13. Wariant struktury podstawowej prototypu skalarnego RISC komputera.
Podana struktura doskonale połączyła cechy architektur prinstonowskiej i harwardowskiej.
9. Literatura.
Hamacher V., Vranesic Z., and Safwat G. Computer Organization. - McGraw-Hill Publishing Company, International Edition, 2002. - 617 p.
A. Melnyk. Computer Architecture. Lutsk. 2008.
Andrew S. Tanenbaum, Todd Austin, "Structured Computer Organization (6th Edition)" 2012 | ISBN-10: 0132916525 | 800 pages |
Podstawowa książka- pod N 1.