Plan wykładu rchitektura systemów komputerowych Poziom układów logicznych. Układy mnoŝące i dzielące Cezary Bolek Katedra Informatyki Układy mnoŝące liczby całkowite MnoŜenie liczb bez znaku MnoŜarka sekwencyjna dla liczb bez znaku MnoŜenie liczb ze znakiem MnoŜarka sekwencyjna dla liczb U Szybkie mnoŝarki Sumator z zachowaniem przeniesień MnoŜenie przy poszerzonej bazie Układy dzielące liczby całkowite Dzielenie liczb bez znaku Sekwencyjny układ dzielący liczby bez znaku Dzielenie ze znakiem rchitektura systemów komputerowych Cezary Bolek MnoŜenie liczb bez znaku Papier i ołówek = = Iloczyn = 56 m-bitowa mnoŝna n-bitowy mnoŝnik = (mn)-bit. iloczyn Operacje: przesuwanie i dodawanie Binarne mnoŝenie jest proste mnoŝna = mnoŝna = mnoŝna MnoŜenie realizacja sprzętowa (wersja ) Warunki początkowe: rejestru Iloczyn na Rozszerzenie zerowe mnoŝnej = []? = shift left a. Iloczyn = Iloczyn 6-bit LU add. Przesuń MnoŜną o b w lewo. Przesuń b. w prawo Iloczyn powtórzenie? MnoŜarka bity [] rchitektura systemów komputerowych Cezary Bolek rchitektura systemów komputerowych Cezary Bolek
MnoŜenie (wersja ) - przykład Operacja:, Iloczyn = rgumenty -bitowe, wynik 8-bitowy jest rozszerzony zerami (mnoŝenie bez znaku) [] = => DD SLL i SRL [] = => Nic nie rób SLL i SRL SLL i SRL SLL i SRL [] = => DD [] = => DD Iloczyn MnoŜarka wersja wnioski MoŜna dokonać optymalizacji w celu uproszczenia sprzętu Zamiast przesuwać mnoŝną w lewo: Przesuwanie iloczynu w prawo Generuje identyczny wynik Uproszczenie realizacji sprzętowej: Rejestr mnoŝnika moŝe zostać zmniejszony do bitów Rozmiar sumatora moŝe być takŝe zmniejszony do bitów Pojedynczy krok moŝe być wykonany w jednym cyklu Przesunięcie rejestru iloczynu i sumowanie w tym samym czasie rchitektura systemów komputerowych Cezary Bolek 5 rchitektura systemów komputerowych Cezary Bolek 6 MnoŜarka wersja MnoŜarka sekwencyjna wersja ostateczna Iloczyn w rejestrze podzielonym na dwie części: HI i LO Iloczyn przesuwany w prawo i sumator -bitowe bity -bit LU bity bity carry HI bity add LO bity [] = HI = HI []? powtórzenie? = Przesuń Iloczyn (HI,LO) w prawo Przesuń w prawo Eliminacja rejestru mnoŝnika LO = Iloczyn = HI i LO bity bity -bit LU add bity bity carry HI LO LO[] LO= = LO[]? = HI = HI Przesuń Iloczyn (HI,LO) w prawo powtórzenie? rchitektura systemów komputerowych Cezary Bolek 7 rchitektura systemów komputerowych Cezary Bolek 8
MnoŜarka sekwencyjna - przykład Operacja:, Iloczyn = rgumenty -bitowe, wynik 8-bitowy -bitowy sumator daje 5-bitowy wynik (carry) (LO = ) Przesuń w prawo Iloczyn = (HI, LO) LO[] = => Nic nie rób LO[] = => DD Carry Iloczyn = HI, LO Przesuń w prawo Iloczyn = (HI, LO) LO[] = => DD Przesuń w prawo Iloczyn = (HI, LO) LO[] = => DD Przesuń w prawo Iloczyn = (HI, LO) MnoŜenie liczb ze znakiem (U) MoŜliwe rozwiązanie (nieoptymalne) Konwersja mnoŝnej i mnoŝnika na liczby dodatnie Jeśli liczba jest ujemna obliczenie uzupełnienia dwójkowego i zapamiętanie znaku Przeprowadzenie mnoŝenia liczb bez znaku Wyznaczenie znaku wyniku Jeśli wynik ma być ujemny, konwersja uzyskanego wyniku na liczbę ujemną (uzupełnienie dwójkowe) Rozwiązanie optymalne MnoŜarka jak dla liczb dodatnich, lecz: Przy przesuwaniu Iloczynu w prawo rozszerzenie znakowe Jeśli mnoŝnik jest ujemny ostatni krok: odejmowanie rchitektura systemów komputerowych Cezary Bolek 9 rchitektura systemów komputerowych Cezary Bolek MnoŜenie liczb U MnoŜarka sekwencyjna dla liczb U Przypadek : Dodatni mnoŝnik = - = 5 Rozszerzenie znakowe Iloczyn = - Przypadek : Ujemny mnoŝnik = - = - Rozszerzenie znakowe (uzupelnienie dwójkowe liczby ) Iloczyn = rchitektura systemów komputerowych Cezary Bolek Podobna do mnoŝarki dla liczb bez znaku LU generuje wynik -bitowy i HI są rozszerzane znakowo Do rozszerzenia HI wykorzystuje się bit znaku (najstarszy bit LU) operacji dodawania (nie carry) bity -bit LU bity bity HI bity add, sub LO LO[] rchitektura systemów komputerowych Cezary Bolek = LO=, HI= LO[]? Pierwsze iteracji: HI = HI Ostatnia iteracja: HI = HI powtórzenie? = Przesuń Iloczyn (HI, LO) w prawo
MnoŜarka sekwencyjna U - przykład Operacja: (-) (-), Iloczyn = i HI są rozszerzane znakowo przed dodawaniem Ostatnie iteracja: dodanie uzupełnienia dwójkowego mnoŝnej (LO = ) Przesuń w prawo Iloczyn = (HI, LO) LO[] = => Nic nie rób LO[] = => DD Znak Iloczyn = HI, LO Przesuń w prawo Iloczyn = (HI, LO) LO[] = => DD Przesuń w prawo Iloczyn = (HI, LO) LO[] = => SUB (DD uzupełn. ) Przesuń w prawo Iloczyn = (HI, LO) rchitektura systemów komputerowych Cezary Bolek Szybkie układy mnoŝące mnoŝarka tablicowa Zastosowanie -bitowego sumatora dla kaŝdego bitu mnoŝnika sumatorów dla mnoŝenia liczb -bit Operacja ND z kaŝdym bitem mnoŝnika Iloczyn = zakumulowana, przesunięta suma KaŜdy sumator daje wynik -bit (carry) Najstarszy bit jest bitem przeniesienia Najmniej znaczący wynik mnoŝenia Starsze bity na wejście nast. sum. MoŜe być optymalizowana Zastosowanie sumatora z zachowaniem przeniesień (CS-Carry Save dder) Zastosowanie potokowości rchitektura systemów komputerowych Cezary Bolek B bits B bits -bit B B bits -bit -bit bits B bits bits bits... -bit bits bits bits bit bits bits bits P 6.. P.. P P P P Sumator z zachowaniem przeniesień Przykład dodawanie czterech liczb CS Carry Save dder a b a b a b a b a b c a b c a b c a b c Stosowany gdy sumowane musi być kilka argumentów (np. mnoŝarki Posiada wejścia i dwa wyjścia dla kaŝdego zestawu bitów (argumenty i wyniki) sumuje trzy liczby dając w wyniku sumę częściową i przeniesienie Wszystkie człony sumatora działają równolegle Przeniesienie nie musi być propagowane (RC) lub antycypowane (CL) Znaczenie szybszy niŝ inne sumatory s 5 s c c d d s s c d s B c d s s 5 s d s d d s s B C d s c out a b... s a b s Ripple Carry dder a b s c in a b c c' s'... a b c a b c c' s' Carry Save dder c' s' C Ripple Carry dder D Ripple Carry dder Ripple Carry dder S D Carry Save dder Carry Save dder Ripple Carry dder S rchitektura systemów komputerowych Cezary Bolek 5 rchitektura systemów komputerowych Cezary Bolek 6
MnoŜenie przy poszerzonej bazie typowe wartości składników (np. dla radix-) moŝna obliczać wstępnie lub stosować sumator CS rytmetyka liczb bez znaku Iloczyn Przesunięcie -bit Iloczyn x x x x -bity Przesunięcie -bit CS Dzielenie liczb bez znaku = 9 Iloraz Dzielnik = 7 Dzielna - Dzielnik = Iloraz Dzielnik Reszta 7 = 9 8 - - Operację dzielenia binarnego uzyskuje się za pomocą przesuwania i odejmowania = 8 Reszta rchitektura systemów komputerowych Cezary Bolek 7 rchitektura systemów komputerowych Cezary Bolek 8 Dzielenie realizacja sprzętowa (wersja ) : Reszta = Dzielna (uzupełniona ) Załadowanie dzielnika do starszych bitów Iloraz = RóŜnica 6-bit LU Reszta Dzielnik Iloraz bity sub shift left set lsb rchitektura systemów komputerowych Cezary Bolek 9. Przesuń w prawo Dzielnik Przesuń w lewo Iloraz RóŜnica = Reszta Dzielnik RóŜnica?. Reszta = RóŜnica Ustaw najmniej znaczący bit Ilorazu powtórzenie? < Dzielenie (wersja ) - przykład Operacja: / (-bitowe dzielna i dzielnik) Iloraz:, Reszta = 8-bitowe rejestry dla Reszty i Dzielnika (8-bitowe LU) : Z < => Nic nie rób : R = Z, ustaw LSB Ilorazu : Z < => Nic nie rób : Z < => Nic nie rób Reszta (R) Dzielnik (D) RóŜnica (Z) Iloraz (I) : SRL: D; SLL: I; oblicz Z : SRL: D; SLL: I; oblicz Z : SRL: D; SLL: I; oblicz Z : SRL: D; SLL: I; oblicz Z rchitektura systemów komputerowych Cezary Bolek
Układ dzielący wersja wnioski MoŜna dokonać optymalizacji w celu uproszczenia sprzętu Zamiast przesuwać dzielnik w prawo: Przesuwanie reszty w lewo Generuje identyczny wynik Uproszczenie realizacji sprzętowej: Rejestr dzielnika moŝe zostać zmniejszony do bitów Rozmiar LU moŝe być takŝe zmniejszony do bitów Reszta i Iloraz mogą zostać umieszczone w tym samym rejestrze Sekwencyjny układ dzielący wersja ostateczna Przesuwania reszty w lewo daje taki sam efekt jak przesuwanie dzielnika w prawo Iloraz = Dzielna, Reszta = Dzielnik -bit LU RóŜnica bits Reszta bits Iloraz bits sub Control shift left set lsb. Przesuń w lewo (Reszta, Iloraz) RóŜnica = Reszta Dzielnik RóŜnica?. Reszta = RóŜnica Ustaw najmniej znaczący bit Ilorazu powtórzenie < rchitektura systemów komputerowych Cezary Bolek rchitektura systemów komputerowych Cezary Bolek Sekwencyjny układ dzielący przykład Operacja: / (-bitowe dzielna i dzielnik) Iloraz:, Reszta = -bitowe rejestry dla Reszty i Dzielnika (-bitowe LU) : Z < => Nic nie rób : R = Z, ustaw LSB Ilorazu : Z < => Nic nie rób : Z < => Nic nie rób Reszta (R) Iloraz (I) Dzielnik (D) RóŜnica (Z) : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z Dzielenie liczb ze znakiem Najprostszy sposób: pamiętanie znaków Przekształć dzielną i dzielnik na wartości dodatnie Wyznacz uzupełnienie dwójkowe gdy ujemne, nic nie rób gdy dodatnie Przeprowadź dzielenie bez znaku Wyznacz znak ilorazu i reszty Znak ilorazu = Znak dzielnej XOR Znak dzielnika Znak reszty = Znak dzielnik Przekształć iloraz i resztę na ujemne jeśli ich znaki są ujemne Wyznacz uzupełnienie dwójkowe gdy mają być ujemne rchitektura systemów komputerowych Cezary Bolek rchitektura systemów komputerowych Cezary Bolek
Dzielenie ze znakiem - przykłady. Dodatnia Dzielna i dodatni Dzielnik Przykład: 7 / Iloraz = 5 Reszta =. Dodatnia Dzielna i ujemny Dzielnik Przykład: 7 / Iloraz = 5 Reszta =. Ujemna Dzielna i dodatni Dzielnik Przykład: 7 / Iloraz = 5 Reszta =. Ujemna Dzielna i ujemny Dzielnik Przykład: 7 / Iloraz = 5 Reszta = Zawsze musi zachodzić zaleŝność: Dzielna = Iloraz Dzielnik Reszta rchitektura systemów komputerowych Cezary Bolek 5 Operacje przesunięć Operacje arytmetyczne Operacje logiczne MnoŜenie i dzielenie w oparciu o LU None = SLL = SRL = SR = DD = SUB = ND = OR = NOR = XOR = B Jednostka logiczna Shift mount lsb 5 Shifter rchitektura systemów komputerowych Cezary Bolek 6 c dd e r < MnoŜenie i dzielenie sekwencyjne moŝna zrealizować w oparciu wielofunkcyjne LU (w wielu krokach) overflow Wybór typu oper. Shift = SLT = rith = Logic = LU Result zero rchitektura systemów komputerowych Cezary Bolek 7