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.
İ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.
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.
| A | B | ELDE | TOPLAM |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
İ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.
| A | B | Cin | Cout | TOPLAM |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
İ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.
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.