p. /33 Prosty procesor dla framgent listy rozkazów IPSa (rysnki pochodza z ksiażki Hennessy ego i Pattersona)
p. 2/33 Wstęp Naszym celem będzie zaprojektowanie prostego procesora realizjacego fragment listy rozkazów IPS: rozkazy komnikacji z pamięcia: lw, sw rozkazy arytmetyczno-logiczne: add, sb, and, or, slt skoki beq, j Obejrzymy trzy rozwiazania: Implementacja jednocyklowa Implementacja wielocyklowa Przetwarzanie potokowe
p. 3/33 Implementacja jednocyklowa wstęp Wykonanie każdego z naszych rozkazów zaczyna się tak samo: Wysłanie licznika rozkazów (PC) do jednostki pamięci i odczytanie stamtad odpowiedniego rozkaz. Odczytanie wartości jednego lb dwóch rejestrów (specyfikowanych przez pięciobitowe pola rozkaz) Dalsze czynności zależa od rozkaz, chociaż sa one podobne, szczególnie dla rozkazów z jednej grpy. Każdy rozkaz (oprócz j) żyje np.. W naszej pierwszej implementacji wykonanie każdego rozkaz będzie zajmowało jeden cykl zegarowy. Zapis (do pamięci lb do rejestrów) następje raz w całym cykl (na zbocz opadajacym). Odczyt jest możliwy w każdym momencie.
p. 4/33 Ogólny schemat połączeń 4 PC ress Instrction Instrction Register # Registers ress Register # Register #
p. 5/33 Pobranie rozkaz Zakładamy, że mamy dwie jednostki pamięci: osobna dla rozkazów (instrction ) oraz dla danych ( ). 4 PC address Instrction Instrction
p. 6/33 Rejestry i Register nmbers 5 5 5 register register 2 register Registers 2 4 operation Zero reslt Reg a. Registers b.
p. 7/33 Pamięć danych i rozszerzanie danych em ress 6 Sign 32 etend em a. nit b. Sign-etension nit
p. 8/33 Skok warnkowy Wykonanie rozkaz skok warnkowego polega na: Odczytani dwóch rejestrów Porównani ich przez (operacja odejmowania) Przekształceni stałej: rozszerzenie stałej 6-bitowej do 32-bitowej i przesnięcie o dwa bity w lewo Dodani stałej do PC+4
p. 9/33 Skok warnkowy PC+4 from instrction path Shift left 2 Sm Branch target Instrction register register 2 register Registers 2 4 operation Zero To branch control logic Reg 6 Sign 32 etend
p. /33 Uwaga o opóźnionych skokach IPS realizje tzw. opóźnione skoki (delayed branches) rozkaz znajdjacy się w pamięci bezpośrednio za rozkazem skok wykonje się niezależnie od tego, czy skok następje, czy nie. Nie implementjemy tego rozwiazania. Podobnie zreszta jak SPI (chociaż tam można je wymsić, rchamiajac program z odpowiednim parametrem).
p. /33 Układ dla rozkazów arytm.-log. oraz lw, sw Instrction register register 2 Registers register Reg 2 Src 4 operation Zero reslt ress em emtoreg 6 Sign 32 etend em
p. 2/33 PCSrc 4 reslt Shift left 2 PC address Instrction Instrction register register 2 Registers register Reg 2 Src 4 operation Zero reslt ress em emtoreg 6 Sign 32 etend em
Formaty rozkazów przypomnienie Typ R: 6 bitów kod operacji (bity 3:26) 5 bitów nmer rejestr źródłowego, rs (bity 25:2) 5 bitów nmer rejestr źródłowego 2, rt (bity 2:6) 5 bitów nmer rejestr wynikowego, rd (bity 5:) 5 bitów shamt (my je ignorjemy) 6 bitów rodzaj operacji, fnkcja (bity 5:) Typ I, lw, sw: 6 bitów kod operacji (bity 3:26) 5 bitów nmer rejestr bazowego adres (bity 25:2) 5 bitów nmer rejestr (źródłowego dla sw, wynikowego dla lw (bity 2:6) 6 bitów stała (bity 5:) Typ I, beq: jak wyżej, oba nmery rejestów to rejestry źródłowe do porównania. p. 3/33
p. 4/33 PCSrc 4 reslt Reg Shift left 2 PC address Instrction [25:2] register Instrction [2:6] Src register 2 Zero Instrction [3:] 2 reslt Instrction Instrction [5:] register Registers RegDst em ress emtoreg Instrction [5:] 6 Sign 32 etend control em Instrction [5:] Op
p. 5/33 Sterowanie Na podstawie bitów 3:26 (kod operacji) generowane sa odpowiednie sygnały sterjace (prosty kład kombinacyjny) Sygnał Op jest dwbitowy: lw lb sw (dodawaj), - beq (odejmj), - typ R Rodzaj operacji dla przy kodzie dospecyfikowywany przez bity fnkcyjne 5:
p. 6/33 Pełny kład (ale jeszcze bez skok j) 4 reslt Instrction [3 26] Control RegDst Branch em emtoreg Op em Src Reg Shift left 2 PC address Instrction [25 2] register Instrction [2 6] register 2 Zero Instrction [3 ] 2 reslt Instrction Instrction [5 ] register Registers ress Instrction [5 ] 6 Sign 32 etend control Instrction [5 ]
p. 7/33 add $t, $t, $t2 4 reslt Instrction [3 26] Control RegDst Branch em emtoreg Op em Src Reg Shift left 2 PC address Instrction [25 2] register Instrction [2 6] register 2 Zero Instrction [3 ] 2 reslt Instrction Instrction [5 ] register Registers ress Instrction [5 ] 6 Sign 32 etend control Instrction [5 ]
p. 8/33 lw $t, 8($t2) 4 reslt Instrction [3 26] Control RegDst Branch em emtoreg Op em Src Reg Shift left 2 PC address Instrction [25 2] register Instrction [2 6] register 2 Zero Instrction [3 ] 2 reslt Instrction Instrction [5 ] register Registers ress Instrction [5 ] 6 Sign 32 etend control Instrction [5 ]
p. 9/33 beq $t, $t, 8 4 reslt Instrction [3 26] Control RegDst Branch em emtoreg Op em Src Reg Shift left 2 PC address Instrction [3 ] Instrction Instrction [25 2] Instrction [2 6] Instrction [5 ] register register 2 register 2 Registers Zero reslt ress Instrction [5 ] 6 Sign 32 etend control Instrction [5 ]
p. 2/33 Dodajemy skok bezwarnkowy 4 Instrction [25 ] Shift Jmp address [3 ] left 2 26 28 PC + 4 [3 28] reslt Instrction [3 26] Control RegDst Jmp Branch em emtoreg Op em Src Reg Shift left 2 PC address Instrction [3 ] Instrction Instrction [25 2] Instrction [2 6] Instrction [5 ] register register 2 register 2 Registers Zero reslt ress Instrction [5 ] 6 Sign 32 etend control Instrction [5 ]
p. 2/33 Wady i zalety implementacji jednocyklowej Przedstawiona implementacja nie jest żywana w praktyce Konieczność dplikacji sprzęt dodatkowe smatory Cykl zegarowy dopasowany do najwolniejszego rozkaz (operacje na pamięci) Zaleta: prostota Inne rozwiazania: zmienna dłgość cykl skomplikowane technicznie, implementacja wielocyklowa o tym za chwilę, przetwarzanie potokowe o tym za tydzień,...
Wady i zalety implementacji jednocyklowej Przykładowe czasy działania naszych podkładów i wykonywania rozkazów: Iem 2 ps, Reg, 2, Dem 2, Reg Rozkaz typ R: 2 + + 2 + + = 6 lw: 2 + + 2 + 2 + = 8 sw: 2 + + 2 + 2 + = 7 Skok warnkowy: 2 + + 2 + + = 5 Skok bezwarnkowy: 2 + + + + = 3 Potrzebjemy zatem cykl dłgości 8 ps. Rozważmy następjacy zestaw rozkazów: 25% odczytów pamięci, % zapisów, 45% rozkazów typ R, 5% skoków warnkowych, 5% skoków bezwarnkowych Średni czas wykonania instrkcji:, 25 8 +, 7 +, 45 6 +, 5 5 +, 5 3 = 63 ps. p. 22/33
p. 23/33 Implementacja wielocyklowa Krótszy cykl zegarowy rozkazy dzielone na fazy (kroki), każda faza jeden cykl. Rozkazy moga mieć różne liczby faz. Jedna (bez żadnych dodatkowych smatorów). Wspólna pamięć program i danych. Kilka dodatkowych rejestrów przechowjacych dane potrzebne w kolejnych fazach PC ress Instrction register A Instrction or emory emory register Register # Registers Register # Register # B Ot
p. 24/33 Implementacja wielocyklowa cd. Każdy z rejestrów DR, A, B, Ot przechowje dane z fazy k dla fazy k + Rejestr IR przechowje rozkaz przez wszystkie fazy jego wykonania. Dlatego tylko IR potrzebje sygnał zezwolenia na zapis. Niektóre kłady będa żywane więcej niż raz na rozkaz, dlatego msimy dodać kilka mltiplekserów (i rozszerzyć wcześniejsze) np.: mamy teraz dwa źródła adresów dla pamięci wylicza adresy skoków
p. 25/33 Implementacja wielocyklowa (bez skoków j) PC ress emory em Instrction [25 2] Instrction [2 6] Instrction [5 ] Instrction register Instrction [5 ] Instrction [5 ] register register 2 Registers register 2 A B 4 2 3 Zero reslt Ot emory register 6 Sign 32 etend Shift left 2
p. 26/33 Pełna implementacja wielocyklowa PCCond PCSorce PC ress emory em Instrction [25-] Instrction [3 26] Instrction [25 2] Instrction [2 6] Instrction [5 ] Instrction register Instrction [5 ] emory register PC IorD em em emtoreg IR Otpts Control Op [5 ] Instrction [5 ] Op SrcB SrcA Reg RegDst register register 2 Registers register 6 Sign 32 etend 2 A B Shift left 2 4 26 Shift 28 left 2 2 3 PC [3 28] Zero reslt control Jmp address [3 ] Ot 2 Instrction [5 ]
p. 27/33 F - Pobranie rozkaz IR <= emory[pc] PC <= PC + 4 Powyższe operacje moga wykonywać się równolegle. Sygnały sterjace: em - IR - IorD - SrcA - (PC) SrcB - (stała 4) Op (dodawanie) PCSorce PC
p. 28/33 F2 - Dekodowanie oraz odczyt rejestrów A <= Reg[IR[25:2]] B <= Reg[IR[2:6]] Ot <= PC + (sign-etend (IR[5-] «2) Powyższe operacje wykonjemy przy każdej instrkcji - niezależnie od kod operacji. Zaważmy, że nawet jeśli konkretna instrkcja tego nie wymaga, to wykonane operacje w niczym nie zaszkodza. Sygnały sterjace: SrcA - (PC) SrcB - (przesnięta i rozszerzona stała z rozkaz) Op - (dodawanie)
p. 29/33 F3 - Wykonanie, obliczenie adres lb skok Pierwszy cykl, który zależy od kod operacji. wykonje jedna z czterech możliwych akcji (na danych przygotowanych w poprzednich cyklach): Obliczenie adres: Ot <= A + sign-etend (IR[5:]) SrcA -, SrcB -, Op - (dodawanie) Operacja arytmetyczno-logiczna (typ R): Ot <= A op B SrcA -, SrcB -, Op - (decydje pole fnk.) Skok warnkowy: if (A==B) PC <=Ot SrcA -, SrcB -, Op - (odejmowanie), PCCond -, PCSorce - Skok: PC <= konkatenacja(pc[3:28], IR[25:], ) PC -, PCSorce -
p. 3/33 F4 - Dostęp do pamięci lb dokończenie R- rozkaz Dostęp do pamięci: DR <= emory [Ot] lb emory [Ot] <= B em lb em -, IorD - Dokończenie rozkaz arytmetyczno-logicznego: Reg[IR[5-]] <= ot RegDst -, Reg -, emtoreg -,
p. 3/33 F5 - Dokończenie odczyt pamięci Reg[IR[2-6]] <= DR RegDst -, Reg -, emtoreg -,
p. 32/33 Jednosta sterjąca Tym razem jednostaka sterjaca będzie kładem sekwencyjnym, dokładniej atomatem oore a. Wejście kod operacji, stany to fazy, wyjścia sygnały sterjace. Start Instrction fetch em SrcA = IorD = IR SrcB = Op = PC PCSorce = Instrction decode/ Register fetch SrcA = SrcB = Op = (Op = 'LW') or (Op = 'SW') (Op = R-type) (Op = 'BEQ') (Op = 'J') emory-reference FS (Figre 5.33) R-type FS (Figre 5.34) Branch FS (Figre 5.35) Jmp FS (Figre 5.36)
p. 33/33 Start Instrction fetch em SrcA = IorD = IR SrcB = Op = PC PCSorce = Instrction decode/ register fetch SrcA = SrcB = Op = (Op = 'LW') or (Op = 'SW') (Op = R-type) (Op = 'BEQ') (Op = 'J') 2 emory address comptation SrcA = SrcB = Op = 6 Eection SrcA = SrcB = Op = 8 Branch completion SrcA = SrcB = Op = PCCond PCSorce = 9 Jmp completion PC PCSorce = 3 (Op = 'LW') emory access (Op = 'SW') emory access 5 7 R-type completion em IorD = em IorD = RegDst = Reg emtoreg = 4 emory read completon step RegDst = Reg emtoreg =