8. Sumatory.
Sumator jest to układ elektroniczny wykonujący dodawanie liczb binarnych. Sumatory są elementami jednostki arytmetyczno-logicznej (ALU) wchodzącej w skład procesora.
Operację dodawania można wykonać np. za pomocą bramek logicznych realizujących funkcje logiczne AND oraz OR. Pozwalają one wyznaczyć zarówno wartość bitu na danej pozycji (0 lub 1), jak i stwierdzić, czy zachodzi przeniesienie wartości, które należy uwzględnić przy ustaleniu wartości bitu na pozycji następnej - podobnie zresztą, jak to wykonujemy w rachunkach odręcznych. [5]
8.1. Sumatory jednobitowe.
Sumatory realizują sumę arytmetyczną dwu liczb binarnych. Dodanie dwu liczb dwójkowych (operandów) A i B ilustruje rys.8.1.
Ai |
Bi |
Si |
Ci+1 |
0 |
0 |
0 |
0 |
Rys. 8.1. Suma S i przeniesienie C dodawania jednobitowych liczb dwójkowych A i B.
Zmienna Si reprezentuje rezultat operacji, jej wartość jest sumą modulo 2 (exclusive OR) składników Ai, Bi i Ci. Zmienna Ci reprezentuje przeniesienie z pozycji młodszej sumatora wielopozycyjnego. Ci+1 jest przeniesieniem do pozycji starszej. Ci nie występuje w tzw. pólsumatorze, obecność Ci daje sumator pełny. Z wartości przedstawionych na rys. 8.1 można określić wyrażenia logiczne dla półsumatora:
suma Si = Ai-Bi + ~AiBi = Ai (+) Bi,
przeniesienie Ci+1 = AiBi.
Zasada działania sumatora pełnego została opisana siatkami Karnaugha przedstawionymi na rysunku.8.2.
Rys. 8.2. Sumator dwuargumentowy jednobitowy: a) symbol, b) siatka zależności dla sumy, c) siatka zależności dla przeniesienia.
Z siatek tych otrzymujemy zależności:
suma Si = Ci(AiBi + ~Ai~Bi) + ~Ci(Ai~Bi + ~AiBi)= Ci ~(Ai (+) Bi) + ~Ci(Ai (+) Bi) = Ci (+) Bi (+) Ai,
przeniesienie Ci+1 = AiBi + AiCi + BiCi.
Schemat sumatora pełnego (dwuargumentowego) z przeniesieniem z pozycji poprzedniej Ci oraz przeniesienie do pozycji wyższej Ci+1 przedstawiono na rys. 8.3a. Sumator jednobitowy pokazany na rys. 8.3b jest podstawową komórką występującą w sumatora średniej skali integracji: 480, 482 i 483.
Rys. 8.3. Schemat logiczny sumatora pełnego dwuargumentowego (a), jednobitowego (b).
Szczególnym przypadkiem sumatora jest układ realizujący odejmowanie dwu liczb dwójkowych. Wartości funkcji dla różnicy D i pożyczki V i-tej komórki sumatora odejmującego ilustruje tabela z rys. 8.4.
Pożyczka |
Odjemna |
Odjemnik |
Różnica |
Pożyczka |
0 |
0 |
0 |
0 |
0 |
Rys. 8.4. Sumator jednobitowy odejmujący: a) symbol, b) siatka zależności, c) tabela zależności.
Z siatki zależności przedstawionej na rys. 8.4c znajdujemy wyrażenia logiczne dla sumatora odejmującego. Jak można zauważyć, różnica Di jest identyczna z sumą Si , natomiast różne są wyrażenia dla pożyczki Vi+1 i przeniesienia Ci+1. Jeśli jednak w wyrażeniach opisujących działanie sumatora odejmującego zamiast Bi wstawić ~Bi, a zamiast Ci wstawić ~Vi, otrzymujemy: Ci+1 = ~Vi+1, Si=Di.
Korzystając z tej własności, znajdujemy:
Di = Vi (+)Ai(+)Bi,
~Vi+1=Ai~Bi + ~Vi(Ai+ ~Bi).
Sumator może być zatem stosowany jako układ odejmujący po dokonaniu powyższych przełączeń. [5]
8.2. Sumatory wielobitowe równoległe.
Ze względu na sposób wytwarzania przeniesień dzielimy je na:
a) sumatory z przeniesieniem szeregowym, zwane również sumatorami kaskadowymi albo iteracyjnymi,
b) sumatory z przeniesieniem równoległym.
Sumator kaskadowy n-bitowy jest układem powstałym przez połączenie n sumatorów jednobitowych. Schemat blokowy takiego sumatora przedstawiono na rys. 8.5. Przy sumowaniu liczb dodatnich wejście przeniesienia początkowego C0 nie jest wykorzystywane (C0=0).
Rys. 8.5. Schemat blokowy sumatora kaskadowego.
W sumatorze kaskadowym wszystkie cyfry dodawanych liczb dwójkowych podawane są na sumator jednocześnie. Czas uformowania się wyniku zależy od prędkości propagacji sygnału przeniesienia przez kolejne komórki sumatora. W najbardziej niekorzystnym przypadku sygnał C musi przejść przez wszystkie komórki sumatora. Czas sumowania można znacznie skrócić przez zastosowanie sumatora z równoległym przeniesieniem. Sumator z przeniesieniem równoległym generuje wszystkie wartości przeniesień jednocześnie na podstawie wartości na poszczególnych bitach obu operandów. Przeniesienie Ci+1 = AiBi + AiCi + BiCi = AiBi + (Ai+Bi)Ci można wyrazić w postaci: Ci+1= Gi+TiCi, gdzie: Gi=AiBi, Ti=Ai+Bi.
Dla modułu czterobitowego i <{0,1,2,3}:
C4=G3+T3G2+T3T2G1+T3T2T1G0+T3T2T1T0 lub C4 = G + TC0,
gdzie G= G3+T3G2+T3T2G1+T3T2T1G0; T=T3T2T1T0,
gdzie:
G - przeniesienie generowane w bloku,
T - sygnał warunkujący transmisję przeniesienia początkowego C0.
Wyrażenie dla sumy: Si = Ai (+) Bi(+)Ci można przekształcić do postaci:
Si = Ci(+)~(AiBi)(Ai+Bi)= Ci (+) ~GiTi.
Układy wielobitowe (nx4 bity) montuje się, wykorzystując powyższy sumator oraz expander, zwany generatorem przeniesień równoległych (4182). Ze względów praktycznych (minimalizacja struktury logicznej) zarówno w sumatorze, jak i generatorze przeniesień równoległych zamiast zmiennych G i T występują ich negacje ~G i ~T. Ze wzrostem ilości bitów przewaga sumatora z przeniesieniami równoległymi nad sumatorem z przeniesieniami kaskadowymi staje się coraz bardziej widoczna. Omówione wyżej sumatory mogą wykonywać oprócz operacji arytmetycznych również operacje logiczne. Sumator z przeniesieniami równoległymi jest zawarty w czterobitowym elemencie scalonym 4181, zwanym jednostką arytmetyczno-logiczną. [5]
8.3. Dodawanie i odejmowanie wielobitowe równoległe.
Operacji dodawania i odejmowania równoległego liczb wielobitowych dokonuje się za pomocą sumatorów wielobitowych. Dodawanie dwu liczb binarnych odbywa się przez dodanie poszczególnych pozycji binarnych, z uwzględnieniem przeniesienia z każdej pozycji. Przy zapisie binarnym liczb pozycja pierwsza jest znakiem liczby. Znak + oznacza się zerem, a znak - jedynką. Po bicie znaku następuje przecinek, a następnie zadana liczba binarna (przeniesienie z bitu znaku pominąć). Oto przykłady operacji dodawania:
+13 : 0,1101
+15 : 0,1111 |
|
-13 : 1,01101
- 20: 1,10100 |
Liczba pozycji sumatora jest określona na podstawie wyniku dodawania, nie może bowiem wystąpić jego przepełnienie. Podczas dyskusji odejmowania jednobitowego stwierdzono bardzo istotną zależność, że odejmowanie polega na dodawaniu negacji ( uzupełnienia do 1) odjemnika. Zasada ta jest również podstawą odejmowania wielobitowego. Operacje dodawania i odejmowania są zwykle realizowane w bloku arytmetycznym wykonującym też operacje mnożenia i dzielenia. W niniejszym rozdziale zostaną omówione trzy podstawowe algorytmy dodawania i odejmowania o różnym stopniu złożoności tych operacji. [2]
8.4. Dodawanie w zapisie "znak- moduł".
Operacje dodawania i odejmowania sprowadzono tu do operacji dodawania. Wyróżnia się trzy przypadki dodawania:
dodawanie liczb o jednakowych znakach:
+13 : 0,01101
+20 : 0,10100 |
|
-13 : 1,01101
-20 : 1,10100 |
dodawanie liczb o przeciwnych znakach; moduł dodajnej większy od modułu dodajnika:
I
+ 6 |
|
II
- 6 |
do modułu dodajnej dodajemy moduł uzupełnienia do 1 (negację) dodajnika
01101
00101
00110 |
|
01101
00101
00110 |
wynikowy dodawania przypisujemy znak dodajnej; otrzymujemy:
0,00110 : +6 |
|
1,00110 : -6 |
dodawanie liczb o przeciwnych znakach; moduł dodajnika większy od modułu dodajnej:
I
|
|
II
|
do modułu dodajnej dodajemy moduł uzupełnienia do 1 dodajnika, wynik otrzymuje znak dodajnika.
01010
11100 |
|
11100 |
z braku przeniesienia cyklicznego otrzymany wynik należy uzupełnić do 1 i nadać znak dodajnika.
1,0011: -3 |
|
0,00011: +3 |
[2]
8.5.Dodawanie w zapisie "uzupełnień do 1"
różni się od poprzedniej metody tym, że wszystkie liczby ujemne są rejestrowane w zapisie "dopełnień do 1" i dodawane wraz z bitem znaku. W metodzie tej wyróżniono cztery przypadki:
dodawanie liczb dodatnich jest takie samo jak w poprzedniej metodzie;
dodawanie liczb ujemnych: liczby ujemne są przedstawione w zapisie "uzupełnień do 1" , dodawanie odbywa się wraz z bitem znaku:
-10: 1,10101
1,00111
1,01000 |
|
wynikiem ostatecznym jest uzupełnienie do 1 modułu otrzymanej liczby z zachowaniem znaku; dostajemy: 1,10111: -23
dodawanie liczb o przeciwnych znakach ( wynik dodatni) :
-10: 1,10101
0,00010
|
|
0,00011 |
: + 3 |
dodawanie liczb o przeciwnych znakach (wynik ujemny):
+10: 0,01010
1,11100 |
Otrzymany wynik jest uzupełnieniem do 1 modułu otrzymanej liczby z zachowaniem znaku: 1,00011 : -3.
[2]
8.6. Dodawanie w zapisie " uzupełnień do 2".
Podczas dyskusji nad zasadami odejmowania jednobitowego stwierdzono bardzo istotną zależność, a mianowicie odejmowanie polega na dodaniu negacji odjemnika (~Bi). Drugi wniosek dotyczył pożyczki, a więc w miejsce przeniesienia Ci sumatora należy podać wartość ~Vi. Oznacza to, że pierwsza komórka sumatora w czasie odejmowania ma na wejściu Co jedynkę logiczną, czyli do najmniej znaczącej pozycji sumatora dodajemy wartość 1. Zasada ta została wykorzystana w algorytmie "uzupełnień do 2" . Liczby ujemne są zapisywane jako dopełnienie do 1 modułu plus 1 na pozycji najmniej znaczącej. Metoda ta sprowadza się właściwie do jednego przypadku: dodawania liczb z dowolnym znakiem. Liczby dodatnie są dodawane podobnie jak w poprzednich metodach. [2]
8.6.1. Liczby ujemne:
-10 : 1,10101
-10 : 1,10110
1,01001 |
|
bez dodawania przeniesienia cyklicznego. W przypadku gdy otrzymany wynik ma znak ujemny, odczyt wartości ostatecznej polega na uzupełnieniu do 2 modułu z zachowaniem znaku. Dostajemy: 1,10111: -23. [2]
8.6.2. Dodawanie liczb o różnych znakach:
+10 : 0,01010
1,11101 |
|
-10 : 1,10110
0,00011 |
|
Wynik ujemny: znajdujemy uzupełnienie do 2 modułu, otrzymamy: 1,00011 : -3 |
|
bez dodawania przeniesienia cyklicznego. |
[2]
8.6.3. Porównanie zapisów.
W operacjach dodawania i odejmowania najprostszy jest zapis "uzupełnień do 2" ze względu na prostotę układów wykonujących te operacje. Pozostałe zapisy są mniej wygodne, przy czym zapis "znak-moduł" pozwala na prostą realizację operacji mnożenia i dzielenia. Z kolei zapis "uzupełnień do 2" jest przypadkiem pośrednim (kompromisowym). Wybór zapisu będzie oczywiście rzutował na konstrukcję układów wykonujących wspomniane operacje arytmetyczne. [2]
63