Układy liczące: sumator

Aby móc przeanalizować sposób, w jaki procesory wykonują podstawowe obliczenia matematyczne, należy zapoznać się z prostymi układami liczącymi. Zaliczymy do nich m. in. sumator.

Sumator

Układ kombinacyjny, który wykonuje dodawanie dwóch (lub więcej) liczb.

Układ kombinacyjny

Układ, w którym stan wyjść zależy jedynie od stanu wejść.

Dodawanie dwóch bitów

Rozważmy dodawanie dwóch liczb 1-bitowych, a i b.

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10

Widzimy, że wynik może być 1- lub 2-bitowy, w zależności od tego, jakie wartości dodajemy. Jest to ważna własność do zapamiętania.

Wynik dodawania dwóch liczb n-bitowych ma n+1 bitów.

Zastanówmy się jednak, czym są poszczególne cyfry w dodawaniu. Wiemy z matematyki, że wynikiem dodawania dwóch składników jest suma. Ale w przypadku, gdy przy dodawaniu wychodzi liczba (czyli co najmniej 2 cyfry), musimy wykonać przeniesienie. Zatem ostatnią sumę możemy zapisać jako

  • 1 + 1 = 0 i 1 dalej.

Uzupełnijmy teraz wszystkie powyższe warianty dodawania o wartości przeniesień. Oznaczmy przeniesienie jako c (od ang. carry), a sumę jako s (od ang. sum)

wejściawyjścia
abcs
0000
0101
1001
1110

Zatem widzimy, że bit sumy ma wartość 1, gdy jedno z wyjść ma wartość 1, ale nie oba jednocześnie, zaś bit przeniesienia ma wartość 1, gdy oba wejścia mają wartość 1. Zachowanie to jest zgodne z zachowaniem bramek logicznych XOR oraz AND, odpowiednio.

Możemy zatem zapisać to zachowanie jako następujące funkcje logiczne.


Półsumator.

Powyższy układ nazywamy półsumatorem.

Półsumator

Układ kombinacyjny dodający dwa bity – a i b – i produkujący bit s sumy oraz bit c przeniesienia.

Uwzględnienie przeniesienia

Półsumator nie uwzględnia przeniesienia z poprzedniej pozycji, dlatego należy rozważyć układ, który umożliwia dodanie trzeciego bitu.

Oznaczmy przez cin przeniesienie wejściowe (przeniesienie z poprzedniej pozycji) oraz przez cout generowane przeniesienie (to, które powstanie w wyniku dodawania).

wejściawyjścia
abcincouts
00000
01001
10001
11010
00101
01110
10110
11111

Bit przeniesienia

Aby teraz ustalić funkcję logiczną sumy i przeniesienia, trzeba rozważyć trzy wartości wejścia i możliwości, dla których bity te przyjmują wartość 1.

abcincout
0000
0100
1000
1101
0010
0111
1011
1111

Możemy zatem dojść do wniosku, że cout przyjmuje wartość 1, gdy:

  • cin ma wartość 1 oraz jedno z wejść a i b ma wartość 1, lub gdy
  • wejścia a i b mają wartość 1 (niezależnie od wejścia cin).

Zatem funkcja logiczna opisująca to wyjście przyjmie postać:

Bit sumy

Ponownie, aby ustalić funkcję logiczną opisującą bit sumy, musimy przeanalizować wartości, dla których funkcja ta przyjmuje wartość 1.

abcins
0000
0101
1001
1100
0011
0110
1010
1111

Tutaj możemy próbować znaleźć pewne wspólne cechy, jak np. to, że gdy cin=0 oraz a xor b = 1, to s = 1, jednak można zauważyć, że s przyjmuje wartość 1, gdy na wejściu ma nieparzystą liczbę „jedynek”. Takie zachowanie ma bramka XOR, zatem możemy ustalić następujący wzór funkcji logicznej:

Przygotowanie układu

Podsumowując, otrzymujemy następujące funkcje logiczne opisujące wyjścia budowanego sumatora.


Zwróćmy uwagę, że oba te wzory mają wspólny fragment – dzięki temu będziemy mogli użyć wyjścia takiej bramki w dwóch miejscach.

Sumator pełny.

Tak powstały układ nazywamy sumatorem pełnym.

Sumator pełny

Układ kombinacyjny dodający dwa bity – a i b – z uwzględnieniem bitu cin przeniesienia, produkujący bit s sumy oraz bit cout przeniesienia.

Uproszczenia notacji

Aby ułatwić notację powyższych układów (i nie powtarzać wciąż wszystkich bramek logicznych), wprowadza się symbole zastępcze zbudowanych układów.

Półsumator – symbol zastępczy.
Sumator pełny – symbol zastępczy.

3 myśli nt. „Układy liczące: sumator

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.