Architektura systemów komputerowych Poziom układów logicznych. Układy mnoŝące i dzielące Cezary Bolek Katedra Informatyki Plan wykładu 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 Architektura systemów komputerowych Cezary Bolek
MnoŜenie liczb bez znaku Papier i ołówek MnoŜna = MnoŜnik = 3 Binarne mnoŝenie jest proste mnoŝna = mnoŝna = mnoŝna Iloczyn = 56 m-bitowa mnoŝna n-bitowy mnoŝnik = (mn)-bit. iloczyn Operacje: przesuwanie i dodawanie Architektura systemów komputerowych Cezary Bolek 3 MnoŜenie realizacja sprzętowa (wersja ) Warunki początkowe: Start Inicjalizacja rejestru Iloczyn na Rozszerzenie zerowe mnoŝnej = MnoŜnik[]? = MnoŜna shift left a. Iloczyn = Iloczyn MnoŜna 64-bit ALU add. Przesuń MnoŜną o b w lewo write Iloczyn Sterow. shift right MnoŜarka MnoŜnik 3 bity MnoŜnik[] 3. Przesuń MnoŜnik b. w prawo Nie 3 powtórzenie? Tak Koniec Architektura systemów komputerowych Cezary Bolek 4
MnoŜenie (wersja ) - przykład Operacja:, Iloczyn = Argumenty 4-bitowe, wynik 8-bitowy MnoŜnik jest rozszerzony zerami (mnoŝenie bez znaku) Iteracja 3 4 Inicjalizacja MnoŜnik[] = => ADD SLL MnoŜna i SRL MnoŜnik MnoŜnik[] = => Nic nie rób SLL MnoŜna i SRL MnoŜnik SLL MnoŜna i SRL MnoŜnik SLL MnoŜna i SRL MnoŜnik MnoŜna MnoŜnik MnoŜnik[] = => ADD MnoŜnik[] = => ADD Iloczyn Architektura systemów komputerowych Cezary Bolek 5 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 3 bitów Rozmiar sumatora moŝe być takŝe zmniejszony do 3 bitów Pojedynczy krok moŝe być wykonany w jednym cyklu Przesunięcie rejestru iloczynu i sumowanie w tym samym czasie Architektura systemów komputerowych Cezary Bolek 6
MnoŜarka wersja Iloczyn w rejestrze podzielonym na dwie części: HI i LO Iloczyn przesuwany w prawo MnoŜna i sumator 3-bitowe 3 bity MnoŜna 3-bit ALU 33 bity 3 bity carry HI 3 bity add LO MnoŜnik 3 bity shift right write shift right Sterow. MnoŜnik[] HI = HI MnoŜna Architektura systemów komputerowych Cezary Bolek 7 = Start MnoŜnik[]? 3 powtórzenie? Koniec Tak = Przesuń Iloczyn (HI,LO) w prawo Przesuń MnoŜnik w prawo Nie MnoŜarka sekwencyjna wersja ostateczna Eliminacja rejestru mnoŝnika Inicjalizacja LO = MnoŜnik Iloczyn = HI i LO Start LO=MnoŜnik MnoŜna = LO[]? = 3 bity 3 bity HI = HI MnoŜna 3-bit ALU 33 bity add Przesuń Iloczyn (HI,LO) w prawo carry 3 bity HI LO shift right Sterow. write LO[] 3 powtórzenie? Koniec Tak Nie Architektura systemów komputerowych Cezary Bolek 8
MnoŜarka sekwencyjna - przykład Operacja:, Iloczyn = Argumenty 4-bitowe, wynik 8-bitowy 4-bitowy sumator daje 5-bitowy wynik (carry) Iteracja 3 4 Inicjalizacja (LO = MnoŜnik) Przesuń w prawo Iloczyn = (HI, LO) LO[] = => Nic nie rób MnoŜna LO[] = => ADD Przesuń w prawo Iloczyn = (HI, LO) LO[] = => ADD Carry Iloczyn = HI, LO Przesuń w prawo Iloczyn = (HI, LO) LO[] = => ADD Przesuń w prawo Iloczyn = (HI, LO) Architektura systemów komputerowych Cezary Bolek 9 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 Architektura systemów komputerowych Cezary Bolek
MnoŜenie liczb U Przypadek : Dodatni mnoŝnik MnoŜna = -4 MnoŜnik = 5 Rozszerzenie znakowe Iloczyn = - Przypadek : Ujemny mnoŝnik MnoŜna = -4 MnoŜnik = -3 Rozszerzenie znakowe (uzupelnienie dwójkowe liczby ) Iloczyn = Architektura systemów komputerowych Cezary Bolek MnoŜarka sekwencyjna dla liczb U Podobna do mnoŝarki dla liczb bez znaku ALU generuje wynik 33-bitowy MnoŜna i HI są rozszerzane znakowo Do rozszerzenia HI wykorzystuje się bit znaku (najstarszy bit ALU) operacji dodawania (nie carry) = Start LO=MnoŜnik, HI= = LO[]? 3 bity MnoŜna 3 bity Pierwsze 3 iteracji: HI = HI MnoŜna Ostatnia iteracja: HI = HI MnoŜna 33-bit ALU add, sub Przesuń Iloczyn (HI, LO) w prawo sign 33 bity Nie 3 powtórzenie? 3 bity shift right Tak HI LO Sterow. Koniec write LO[] Architektura systemów komputerowych Cezary Bolek
MnoŜarka sekwencyjna U - przykład Operacja: (-4) (-3), Iloczyn = MnoŜna i HI są rozszerzane znakowo przed dodawaniem Ostatnie iteracja: dodanie uzupełnienia dwójkowego mnoŝnej Iteracja 3 4 Inicjalizacja (LO = MnoŜnik) Przesuń w prawo Iloczyn = (HI, LO) LO[] = => Nic nie rób MnoŜna LO[] = => ADD Znak Iloczyn = HI, LO Przesuń w prawo Iloczyn = (HI, LO) LO[] = => ADD Przesuń w prawo Iloczyn = (HI, LO) LO[] = => SUB (ADD uzupełn. ) Przesuń w prawo Iloczyn = (HI, LO) Architektura systemów komputerowych Cezary Bolek 3 Szybkie układy mnoŝące mnoŝarka tablicowa Zastosowanie 3-bitowego sumatora dla kaŝdego bitu mnoŝnika 3 sumatorów dla mnoŝenia liczb 3-bit Operacja AND z kaŝdym bitem mnoŝnika Iloczyn = zakumulowana, przesunięta suma KaŜdy sumator daje wynik 33-bit (carry) Najstarszy bit jest bitem przeniesienia Najmniej znaczący wynik mnoŝenia Starsze 3 bity na wejście nast. sum. MoŜe być optymalizowana Zastosowanie sumatora z zachowaniem przeniesień (CSA-Carry Save Adder) Zastosowanie potokowości Architektura systemów komputerowych Cezary Bolek 4 B 3 3 bits A B 3 3 bits 3-bit B B 3 bits A A 3-bit 3-bit A 33 bits B 3 bits 3 bits A 33 bits... 3-bit 3 bits 33 bits 3 bits bit 33 bits 3 bits 3 bits P 63..3 P 3.. P 3 P P P
Sumator z zachowaniem przeniesień CSA Carry Save Adder Stosowany gdy sumowane musi być kilka argumentów (np. mnoŝarki Posiada 3 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 (RCA) lub antycypowane (CLA) Znaczenie szybszy niŝ inne sumatory a 3 b 3 a b a b a 3 b 3 c 3 a b c a b c c out... s 3 s s c in c' 3 s' 3... c' s' c' s' Ripple Carry Adder Carry Save Adder Architektura systemów komputerowych Cezary Bolek 5 Przykład dodawanie czterech liczb a 3 b 3 a b a b a b a 3 b 3 c 3 a b c a b c a b c c 3 c c c d 3 d d d d 3 d d d s 5 s 4 s 3 s s s s 5 s 4 s 3 s s s A B A B C C Ripple Carry Adder D Carry Save Adder D Ripple Carry Adder Carry Save Adder Ripple Carry Adder S Ripple Carry Adder S Architektura systemów komputerowych Cezary Bolek 6
MnoŜenie przy poszerzonej bazie Nietypowe wartości składników (np. 3A dla radix-4) moŝna obliczać wstępnie lub stosować sumator CSA Arytmetyka liczb bez znaku Iloczyn MnoŜnik Przesunięcie -bit Iloczyn x x x x MnoŜnik Przesunięcie -bit A A A A -bity CSA Architektura systemów komputerowych Cezary Bolek 7 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 Architektura systemów komputerowych Cezary Bolek 8
Dzielenie realizacja sprzętowa (wersja ) Inicjalizacja: Reszta = Dzielna (uzupełniona ) Załadowanie dzielnika do starszych 3 bitów Iloraz = Dzielnik shift right Start. Przesuń w prawo Dzielnik Przesuń w lewo Iloraz RóŜnica = Reszta Dzielnik RóŜnica? < 64-bit ALU RóŜnica Reszta sub sign write Sterow.. Reszta = RóŜnica Ustaw najmniej znaczący bit Ilorazu Iloraz 3 bity shift left set lsb 3 powtórzenie? Koniec Tak Nie Architektura systemów komputerowych Cezary Bolek 9 Dzielenie (wersja ) - przykład Operacja: / (4-bitowe dzielna i dzielnik) Iloraz:, Reszta = 8-bitowe rejestry dla Reszty i Dzielnika (8-bitowe ALU) Iteracja 3 4 Inicjalizacja : 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 Architektura 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 3 bitów Rozmiar ALU moŝe być takŝe zmniejszony do 3 bitów Reszta i Iloraz mogą zostać umieszczone w tym samym rejestrze Architektura systemów komputerowych Cezary Bolek Sekwencyjny układ dzielący wersja ostateczna Przesuwania reszty w lewo daje taki sam efekt jak przesuwanie dzielnika w prawo Inicjalizacja Iloraz = Dzielna, Reszta = Start. Przesuń w lewo (Reszta, Iloraz) RóŜnica = Reszta Dzielnik RóŜnica? < Dzielnik 3 bits. Reszta = RóŜnica Ustaw najmniej znaczący bit Ilorazu 3-bit ALU RóŜnica sub sign 3 powtórzenie Nie Reszta 3 bits Iloraz 3 bits write Control shift left set lsb Koniec Tak Architektura systemów komputerowych Cezary Bolek
Sekwencyjny układ dzielący przykład Operacja: / (4-bitowe dzielna i dzielnik) Iloraz:, Reszta = 4-bitowe rejestry dla Reszty i Dzielnika (4-bitowe ALU) Iteracja 3 4 Inicjalizacja : 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) : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z : Przesuń w lewo, oblicz Z RóŜnica (Z) Architektura systemów komputerowych Cezary Bolek 3 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 Architektura systemów komputerowych Cezary Bolek 4
Dzielenie ze znakiem - przykłady. Dodatnia Dzielna i dodatni Dzielnik Przykład: 7 / 3 Iloraz = 5 Reszta =. Dodatnia Dzielna i ujemny Dzielnik Przykład: 7 / 3 Iloraz = 5 Reszta = 3. Ujemna Dzielna i dodatni Dzielnik Przykład: 7 / 3 Iloraz = 5 Reszta = 4. Ujemna Dzielna i ujemny Dzielnik Przykład: 7 / 3 Iloraz = 5 Reszta = Zawsze musi zachodzić zaleŝność: Dzielna = Iloraz Dzielnik Reszta Architektura systemów komputerowych Cezary Bolek 5 MnoŜenie i dzielenie w oparciu o ALU Operacje przesunięć None = SLL = SRL = SRA = 3 Shift Amount lsb 5 Shifter MnoŜenie i dzielenie sekwencyjne moŝna zrealizować w oparciu wielofunkcyjne ALU (w wielu krokach) A 3 c sign < ALU Result 3 Operacje arytmetyczne Operacje logiczne ADD = SUB = AND = OR = NOR = XOR = B Jednostka logiczna 3 3 A dd e r 3 overflow 3 Wybór typu oper. Shift = SLT = Arith = Logic = zero Architektura systemów komputerowych Cezary Bolek 6
Koniec Architektura systemów komputerowych Cezary Bolek 7