Ücretsiz oyna

Aritmetik

İkili toplayıcı nasıl çalışır

Bilgisayarlar tıpkı okulda öğrendiğin gibi toplar: her seferinde bir sütun, eldeyi bir sonrakine aktararak. Tek fark, her sütunda yalnızca 0 ya da 1 olması; bu da kuralları kapılarla kurulabilecek kadar kısaltıyor.

3 dk okuma · Güncellendi

İkili sayma

Onluk sistemde her sütun sağındakinin on katı değerindedir: birler, onlar, yüzler. İkili sistemde ise her sütun sağındakinin iki katı eder: 1, 2, 4, 8, 16 diye gider. 13 sayısı 8 + 4 + 1’dir, yani 1101 diye yazılır. Sekiz bit bir bayt eder ve bir bayt 0’dan 255’e kadar herhangi bir tam sayıyı tutabilir.

Kâğıt üzerinde toplama

İkili toplamada öğrenilecek yalnızca dört kural var: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 ve 1 + 1 = 10, yani “0 yaz, 1 elde var”. Zaten iki tane 1 olan bir sütuna bir de elde gelirse 1 + 1 + 1 = 11 olur: 1 yaz, 1 elde var. Bütün algoritma bu kadar. A ve B’nin bitlerine tıklayarak aşağıda dene.

elde111111 A B toplam010100001
A 107B 54A+B 1618 bitlik sonuç 161elde çıkışı 0
A ya da B’nin herhangi bir bitine tıkla. Eldeler (turuncu) sola doğru dalga gibi ilerler; en soldaki sütundan çıkan elde, sonucun dokuzuncu biti olur.

Yarım toplayıcı: tek sütun, iki bit

En basit toplama devresi, içine elde gelmeyen tek bir sütunla ilgilenir. İki bit alır ve iki bitlik bir cevap üretir: bu sütun için bir toplam biti ve bir sonraki sütun için bir elde biti.

ABELDETOPLAM
0000
0101
1001
1110

İki çıkış sütununa ayrı ayrı bak. Her biri, belki daha önce mantık kapıları sayfasında gördüğün bir doğruluk tablosu. Bunların hangi kapılar olduğunu tanımak, yarım toplayıcıyı kurmanın yarısı. Öbür yarısı oyundaki bir bulmaca, o yüzden burada bırakıyoruz.

Tam toplayıcı: tek sütun, üç bit

En sağdaki hariç her sütuna bir elde gelebilir, yani gerçek bir sütun üç bit toplar: A, B ve elde girişi (Cin). Cevap yine en fazla 3’tür (ikilide 11), dolayısıyla toplam ve elde çıkışı (Cout) olmak üzere iki çıkış biti hâlâ yeterli.

ABCinCoutTOPLAM
00000
00101
01001
01110
10001
10110
11010
11111

İki örüntü dikkat çekiyor. 1 olan girişlerin sayısı tek olduğunda TOPLAM 1’dir. Cout ise girişlerden en az ikisi 1 olduğunda 1’dir; yani bir çoğunluk oylaması. Tam toplayıcı küçük ve çok iyi incelenmiş bir devredir; yalnızca NAND’lerle kurulan en küçük hâli klasik bir optimizasyon hedefidir.

Dalgalı elde: sütunları zincirlemek

Sekiz tam toplayıcıyı yan yana koy, her birinin elde çıkışını bir sonrakinin elde girişine bağla: elinde 8 bitlik bir toplayıcı var. Buna ripple-carry (dalgalı elde) toplayıcı denir ve kâğıt üzerindeki yöntemin donanımdaki birebir karşılığıdır.

CinTTbit 3TTbit 2TTbit 1TTbit 0
4 bitlik ripple-carry toplayıcının blok şeması: her tam toplayıcı (TT) bir sütunu hesaplar ve eldesini soldakine aktarır.

Basit ve küçük, ama bir püf noktası var. En üst sütun, alttaki sütundan elde gelmeden cevabına karar veremez; o sütun da kendi altındakini bekler ve bu böyle sürüp gider. En kötü durumda, örneğin 11111111’e 1 eklerken, bir elde bütün sütunlardan sırayla geçmek zorundadır. Gecikme bit sayısıyla doğru orantılı büyür; yani 64 bitlik bir ripple toplayıcı, 8 bitlik olandan sekiz kat yavaştır.

Daha hızlı toplayıcılar

Bir işlemcinin yaptığı neredeyse her şey (adresler, döngü sayaçları, karşılaştırmalar) toplama içerdiği için tasarımcılar bu elde zinciri üzerine çok kafa yormuş. Carry-lookahead (elde öngörülü), carry-select ve prefix toplayıcılar (Kogge–Stone, Brent–Kung ve diğerleri) birçok eldeyi aynı anda hesaplamak için daha fazla kapı harcar; böylece gecikme genişliğin kendisiyle değil, kabaca logaritmasıyla büyür. Bu, alanı hıza takas etmenin klasik örneği ve oyundaki isteğe bağlı meydan okumalardan biri.

Taşma ve elde çıkışı

Sekiz bit 0 ile 255 arasını tutabilir. 200 ile 100’ü topla: gerçek cevap olan 300 dokuz bit ister. 8 bitlik bir toplayıcı alttaki sekiz biti tutar (300 − 256 = 44) ve elde çıkışını 1 yapar. İşlemciler bunu bir elde bayrağına (carry flag) kaydeder; böylece programlar toplamaları birden çok sözcük boyunca zincirleyebilir. İşaretli sayılarda alarm işareti farklıdır, çünkü orada sorun en büyük pozitif değerden en negatif değere atlamaktır. İkiye tümleyen aynı toplayıcının negatif sayılarda da neden çalıştığını anlatıyor; işlemcilerde işaretli sayılar için ayrı bir çıkarma devresi olmamasının nedeni de bu.