Sumator (układ logiczny)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Sumatorcyfrowy układ kombinacyjny, który wykonuje operacje dodawania dwóch (lub więcej) liczb dwójkowych. Sumatory dzielimy na:

  • szeregowe (ang. serial adder): podczas każdej operacji dodają dwa bity składników oraz bit przeniesienia;
  • równoległe (and. paralel adder): wielopozycyjne, dodają do siebie jednocześnie bity ze wszystkich pozycji, a przeniesienie realizowane jest w zależności od sposobu połączenia sumatorów jednobitowych

Są dwa główne rodzaje sumatorów równoległych:

  • z przeniesieniami szeregowymi (ang. ripple-carry adder)
  • z przeniesieniami równoległymi (ang. carry look-ahead adder)

Teoria[edytuj | edytuj kod]

Full-adder.svg

Tabela prawdy dla sumatora 1-bitowego:

ai bi ci-1 si ci
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1

gdzie:

  • ai – pierwszy składnik sumy
  • bi – drugi składnik sumy
  • ci−1 – przeniesienie z poprzedniej pozycji
  • si – suma
  • ci – przeniesienie

Wyrażenia boolowskie opisujące sumę i przeniesienie:

s_i = c_{i-1} \oplus a_i \oplus b_i
c_i = a_i b_i + c_{i-1} (a_i \oplus b_i)

Wprowadza się jeszcze oznaczenia:

g_i = a_i b_i – grupa generacyjna
p_i = a_i + b_i – grupa propagacyjna

Można wówczas zapisać:

c_i = g_i + c_{i-1} p_i

Sumator z przeniesieniami szeregowymi[edytuj | edytuj kod]

Sumator ten zbudowany jest z bloków funkcjonalnych, które realizują funkcje s_i i c_i. Bloki są połączone kaskadowo (ripple), tzn. wyjście c_i jest łączone z wejściem c_{i+1} bloku następnego.

Aby np. otrzymać bit sumy s_4 uprzednio muszą zostać wyznaczone sygnały przeniesień c_1, c_2 oraz c_3 (c_3 zależy od c_2, a ten zależy od c_1).

Czas otrzymania ostatecznego wyniku jest więc ograniczony do dołu przez n × czas generacji przeniesienia c, gdzie n to liczba elementarnych bloków z których zbudowanych jest sumator.

Sumator z przeniesieniami równoległymi[edytuj | edytuj kod]

W sumatorze z przeniesieniami równoległymi bity przeniesień są wyznaczane równolegle. Wyrażenia opisujące c_i są [rekursywnie] rozwijane, tzn. występujący w nich składnik c_{i-1} jest zastępowany stosownym wyrażeniem, np.:

c_0 = \textrm{const}
c_1 = g_1 + c_{1-1} p_1 = g_1 + c_0 p_1
c_2 = g_2 + c_{2-1} p_2 = g_2 + c_1 p_2 = g_2 + (g_1 + c_0 p_1) p_2

Układ buduje się z dwóch głównych części:

  1. bloków wyznaczających sumę s_i oraz grupy generacyjne g_i i propagacyjne p_i (które są liczone niezależnie!)
  2. bloku generującego przeniesienia, zgodnie z rozwiniętymi wyrażeniami

W praktyce buduje się 4-bitowe sumatory tego typu, ze względu na znaczne skomplikowanie wyrażeń (a więc obwodów elektrycznych bloku nr 2).

Sumator z przeniesieniami równoległymi jest ok. 20-40% szybszy niż sumator z przeniesieniami szeregowymi