İçeriğe geç
academia.sh

Ders 12 / 16

Aritmetiğin Donanımdaki Karşılığı

Mantık kapılarından toplayıcı devrelere, çıkarmanın aynı devrede yapılması ve durum bayraklarının üretimi.

İçindekiler

İkinci derste, topla komutunun 66 numaralı yazmaca bir sonuç yazdığı söylendi ama bu sonucun nasıl üretildiği açık bırakıldı. Bu ders o boşluğu doldurur: toplama işlemi, donanımda hangi yapılarla gerçekleşir?

Yanıt, ilk konudaki iki dersi birleştirir. Bit düzeyi işleçler dersinde tanımlanan VE, VEYA ve XOR işlemleri; işaretli tam sayılar dersinde tanımlanan ikiye tümleyen gösterimi. İkisi bir araya geldiğinde, aritmetik birimin tamamı kurulur.

Mantık Kapıları

Mantık kapısı (logic gate), bir veya iki giriş bitinden bir çıkış biti üreten fiziksel devre öğesidir. Davranışları, önceki konuda tanımlanan doğruluk tablolarının aynısıdır: VE kapısı yalnızca iki girişi de 11 ise 11 üretir, VEYA kapısı en az biri 11 ise, XOR kapısı girişler farklı ise.

Bu, o dersteki işleçlerin kaynağını da açıklar: a & b ifadesi, sözcük genişliği kadar VE kapısının aynı anda çalışması demektir. Bit düzeyi işlemlerin ucuz olmasının nedeni budur — her bit için tek bir kapı yeterlidir ve bitler birbirini beklemez.

Aritmetik ise bu bağımsızlığı bozar: bir basamağın sonucu, alt basamaklardan gelen elde bitine bağlıdır.

Yarım Toplayıcı

İki biti toplamak, elle yapılan toplamanın aynısıdır. 1+11 + 1 işlemi, o basamakta 00 bırakır ve bir üst basamağa 11 taşır.

aa bb Toplam Elde
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Toplam sütunu XOR tablosunun, elde sütunu VE tablosunun aynısıdır:

toplam=ab,elde=ab\text{toplam} = a \oplus b, \qquad \text{elde} = a \wedge b

Bu iki kapılık devreye yarım toplayıcı (half adder) denir. Adındaki eksiklik şudur: alt basamaktan gelen eldeyi hesaba katmaz.

Tam Toplayıcı

Gerçek bir toplamada her basamağın üç girdisi vardır: iki bit ve alt basamaktan gelen elde. Bu üç girdiyi işleyen devre tam toplayıcıdır (full adder):

toplam=abcgiris¸\text{toplam} = a \oplus b \oplus c_{\text{giriş}}

cc¸ıkıs¸=(ab)(cgiris¸(ab))c_{\text{çıkış}} = (a \wedge b) \vee \big(c_{\text{giriş}} \wedge (a \oplus b)\big)

Elde ifadesi sözle okunabilir: iki bit de 11 ise elde üretilir; ya da bitlerden tam biri 11 iken alt basamaktan elde geliyorsa yine üretilir.

Dalgalı Elde Toplayıcı

nn bitlik toplama, nn tam toplayıcının zincirlenmesiyle kurulur: her toplayıcının elde çıkışı, bir üstteki toplayıcının elde girişine bağlanır. Bu düzene dalgalı elde toplayıcı (ripple-carry adder) denir.

Zincirin bir maliyeti vardır: en üst basamağın sonucu, elde biti tüm basamaklardan geçene kadar kararlı değildir. Devrenin gecikmesi bit sayısıyla orantılı büyür.

Bu gecikmeyi azaltmak, sayısal tasarımın klasik problemidir. Elde bitlerini basamak basamak beklemek yerine, giriş bitlerinden doğrudan hesaplayan tasarımlar — elde öngörülü toplayıcılar — daha fazla kapı kullanarak daha kısa gecikme sağlar. Alan ile hız arasındaki bu değiş tokuş, donanım tasarımının her katmanında tekrarlanır.

Çıkarma İçin Ayrı Devre Yoktur

İşaretli tam sayılar dersinde, ikiye tümleyenin tercih edilme nedeninin toplama devresini değiştirmemesi olduğu söylenmişti. Bunun devredeki karşılığı şudur:

ab=a+(¬b)+1a - b = a + (\lnot b) + 1

¬b\lnot b değeri, bb’nin bitlerini XOR kapılarından geçirerek üretilir; sondaki +1+1 ise en alt toplayıcının elde girişine 11 verilerek sağlanır. Böylece tek bir denetim biti hem tersleme hem de elde girişini yönetir: 00 ise devre toplama, 11 ise çıkarma yapar.

Karşılaştırma işlemleri de aynı devreyi kullanır. İki değerin karşılaştırılması, farkın hesaplanıp sonucun bayraklarına bakılmasıdır; sonucun kendisi saklanmaz.

Durum Bayrakları

Aritmetik ve mantık birimi, sonucun yanı sıra sonucu niteleyen bitler üretir. Dört bayrak yaygındır:

Bayrak Kurulma koşulu
Sıfır Sonucun tüm bitleri 00
İşaret Sonucun en soldaki biti 11
Elde En üst basamaktan elde çıkışı 11 (işaretsiz taşma)
Taşma En üst basamağa giren elde ile çıkan elde farklı (işaretli taşma)

Son satır, işaretli taşmanın donanımdaki tanımıdır. İki pozitif sayı toplanırken en üst basamağa elde girip çıkmıyorsa, sonuç işaret bitine taşmış demektir — değer negatif görünür. 127+1127 + 1 örneğinde olan tam olarak budur.

Elde ve taşma bayraklarının ayrı tutulması, aynı toplama devresinin hem işaretsiz hem işaretli yorumu desteklemesini sağlar. Hangi bayrağın anlamlı olduğuna, değeri hangi yorumla kullandığını bilen program karar verir. Koşullu dallanma komutları da bu bayrakları okur.

Devreyi Programla Kurmak

Aşağıdaki program, tam toplayıcıyı ve sekiz bitlik dalgalı elde toplayıcıyı bit düzeyi işleçlerle kurar:

def tam_toplayici(a: int, b: int, elde_giris: int) -> tuple[int, int]:
    """Üç giriş bitinden toplam ve elde çıkışını üretir."""
    toplam = a ^ b ^ elde_giris
    elde_cikis = (a & b) | (elde_giris & (a ^ b))
    return toplam, elde_cikis


def topla(x: int, y: int, bit: int = 8, cikar: bool = False) -> dict:
    """Dalgalı elde toplayıcı; cikar=True ise x - y hesaplar."""
    elde = 1 if cikar else 0
    sonuc = 0
    for i in range(bit):
        a = (x >> i) & 1
        b = ((y >> i) & 1) ^ (1 if cikar else 0)   # çıkarmada b terslenir
        if i == bit - 1:
            elde_giris_ust = elde                  # en üst basamağa giren elde
        t, elde = tam_toplayici(a, b, elde)
        sonuc |= t << i
    return {
        "sonuc": sonuc,
        "sifir": sonuc == 0,
        "isaret": ((sonuc >> (bit - 1)) & 1) == 1,
        "elde": elde == 1,
        "tasma": elde_giris_ust != elde,
    }


print(topla(5, 3))                    # 8, taşma yok
print(topla(5, 3, cikar=True))        # 2, çıkarma aynı devrede
print(topla(127, 1)["tasma"])         # True  — işaretli taşma
print(topla(255, 1)["elde"])          # True  — işaretsiz taşma
print(topla(255, 1)["sonuc"])         # 0     — başa sardı

cikar bayrağının iki yerde birden kullanılması — hem b bitlerinin terslenmesinde hem de başlangıç eldesinde — donanımdaki tek denetim bitinin karşılığıdır.

Çıktılar, ilk konudaki iddiaları doğrular: 255+1255 + 1 işaretsiz yorumda başa sarar, 127+1127 + 1 işaretli yorumda taşma bayrağını kurar. O derste “donanım her iki taşmayı da ayrı bayraklarla bildirir” denmişti; bu dersteki devre, o bayrakları üreten yapının kendisidir.

Özet

  • Mantık kapıları, bit düzeyi işleçlerin fiziksel karşılığıdır; her bit bağımsız işlendiği için bu işlemler ucuzdur.
  • Yarım toplayıcı iki biti toplar: toplam XOR, elde VE kapısıyla üretilir.
  • Tam toplayıcı alt basamaktan gelen eldeyi de hesaba katar; nn tam toplayıcının zincirlenmesi nn bitlik toplayıcıyı verir.
  • Zincirleme gecikmesi bit sayısıyla artar; elde öngörülü tasarımlar daha çok kapı kullanarak gecikmeyi azaltır.
  • Çıkarma ayrı bir devre gerektirmez: ikinci işlenen terslenir ve elde girişine 11 verilir.
  • Aritmetik birim sonucun yanında sıfır, işaret, elde ve taşma bayraklarını üretir; elde işaretsiz, taşma işaretli yorumun taşmasını bildirir.

Sonraki Adım

Bu konu, verinin bellekte nasıl durduğunu ve komutların donanımda nasıl yürütüldüğünü kurdu. Geriye tek bir halka kaldı: bir programcının yazdığı metin, bu komutlara nasıl dönüşür? Sonraki konu, kaynak koddan çalışan sürece uzanan zinciri — derleme, bağlama ve yükleme adımlarını — ele alacak.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat