İçeriğe geç

Transistörler – Logic Gate: Binary toplama ve 4 Bit’lik Aritmetik Mantık Birimi (ALU)


Geçtiğimiz haftalarda, Transistörler – Logic Gate konusyla beraber birkaç konu sürecek bir yolculuğa başlamaıştık. O konuda genel olarak transistörlere, nasıl çalıştıklarına ve kullanım alanlarına değinmiştik. Konunun sonunda da, başlıkta bahsedilen ve bizim için asıl öneme sahip olan “Logic Gate” kavramına değinmiştik. Logic Gate yani “Mantık Kapıları”, kabaca Boolean matematiğini elektronik devrelere uyarlamamızı sağlar. Boolean kavramı, yazılımla uğraşanlara tanıdık gelmiştir. Lisede gördüğümüz Mantık dersleri de bunun temelini oluşturur aslında. Logic Gate’leri ve Mantık konusunu daha fazla anlatmayacağım, zira bunu zaten önceki konuda uzunca anlatmıştım.


Logic Gate’lerin bizi ilgilendiren en önemli kısmı, Binary yani İkili sayı sistemi söz konusu olduğunda, uygun kombinasyon ve devreler kullanılarak, basit matematik işlemleri yaptırabilmesidir.

İkili sayı sisteminde toplama

Binary Sayı Tablosu:

indir.png



İkili sistemde toplama yapmak, alıştığımız sayı sistemine oldukça benzerdir. Algoritmasını kavrayınca basittir de. Mesela 4 Bitlik iki tane sayıyı, 1010 ve 0111 (10 ve 7) sayılarını toplayalım.

Elimizde 4 Bit’lik iki sayı var, bunlardan ilkine A, ikincisine B sayısı diyelim. yani 1010 A ve 0111 B sayıları olacak. Bu sayıları normal toplama yapacakmışız gibi alt alta yazalım:

Kod:
  1010
0111
+______


Normal sayılarda alışık olduğumuz gibi iki sayıyı alt alta koyduk. Yine normal sayılarda olduğu gibi sağdan başlayıp sola doğru gideceğiz:

  • 1. Basamak: 0 + 1 1‘dir,
  • 2. Basamak: 1 + 1 ikili sistemde “iki” sayısına karşılık gelmektedir, gösterimi ise 10 şeklindedir. Fakat bizim bir basamağımız var ve iki basamak çıktı, bu nedenle ilk basamağı yani 0‘ı yazıyoruz ve 1‘i elimize alıyoruz. Aynı elde var yöntemi gibi. :)
  • 3. Basamak: 10 ve elimizde önceki basamaktan kalan 1 sayısı var, 1 + 0 + 1 = 10 çıktı, aynı önceki basamakta olduğu gibi. Yine sıfırı yazıp, biri elimize alıyoruz.
  • 4. Basamak yine 10 ve önceki basamaktan kalan 1 var. 1 + 0 + 1 = 10 çıktı. Fakat başka toplanacak basamak kalmadığı için, 10‘i olduğu gibi yazıyoruz.

Çıkan sonuç 10001, yani 15. :) Gördüğünüz gibi, iki 4 Bitlik sayıyı topladık ve sonuç bir fazlayla, 5 Bit olarak çıktı.

İşin elektronik kısmına girmeden önce biraz düşünelim. 4 Bit’lik bir toplayıcı yapmak istiyoruz ve elimizde iki adet 4 Bitlik bir sayı var. Buraya kadar her şey normal, fakat az önceki işlemde de gördüğümüz gibi, sistemimiz 4 Bit olsa bile sonuç 5 Bit çıkabiliyor. Kısaca düşünecek olursak, 4 Bitlik iki girişe ve 4 Bitlik bir çıkışa ihtiyacımız var. 4 Bitlik çıkışa ek olarak da, fazladan Bit’i taşıması için bir Bitlik çıkış daha eklemeliyiz.

Fakat her zaman bir işlem yapıp bırakmazsınız. Peş peşe işlem yapmanız gerekebillir ve çıkan bir sonucu hemen diğer işlemde girdi olarak kullandığınız durumlar olabilir. Biz iki adet 4 Bitlik giriş tanımladık ama az önce de gördüğümüz gibi, 5 Bitlik sonuç çıkabiliyor ve belki de bu sonucu, hemen başka bir işlemde kullanacağız.

Bu nedenle, nasıl çıkışa ek bir Bit eklediysek, girişe de önceki işlemden gelecek Bit için, bir Bitlik ek giriş ekliyoruz. Sistemimizin teorik yapısı şu şekilde:

9a.jpg



Logic Gate’ler ve Toplayıcılar (Adder)

Toplayıcı, sayıların birbirlerine eklenmesini sağlayan dijital bir devredir. Birçok bilgisayarda ve diğer işlemcilerde toplayıcılar, aritmetik mantık birimlerinde (ALU’da) kullanılır. Ayrıca, adresleri, tablo indekslerini, artırma ve azaltma operatörlerini ve benzer işlemleri hesaplamak için kullanıldıkları işlemcinin, diğer bölümlerinde de kullanılırlar. Toplayıcılar, ikili kodlu ondalık (binary-coded decimal) veya excess-3 gibi birçok sayı gösterimi için oluşturulabilse de, en yaygın toplayıcılar ikili sayılar (Binary) üzerinde çalışır. Bir toplayıcı, basit yollarla bir çıkarıcıya dönüştürülebilir.

Peki, Logic Gate’ler bunun neresinde?

Önceki konuda, Logic Gate’lerin Boolen matemetiğini temel aldığını ve belirli önerme durumlarına karşılık gediklerinden bahsetmiştim. Bu önermeleri ve Gate tiplerini yeniden hatırlayalım.

instrumentationtools.com_digital-logic-gates-truthtables.png



Farklı Gate türleri ve farklı kombinasyonlar kullanarak, bir algoritma oluşturmak mümkün. Bu yazıda OR, XOR ve AND Gate’leri kullanarak, 4 Bitlik bir toplayıcı oluşturacağız.

Ancak önce, bir Bit’in nasıl toplandığına bakalım.

Yarı toplayıcılar verilen iki değeri toplar ve bir elde dışarıya verir:

Halfadder.gif



Tam bir toplayıcı ise, verilen iki değerin ve bir eldenin girişine karşılık, toplam ve elde sonucu olarak çıkış verir. Yarı toplayıcıdan farkı elde girişidir.

Fulladder.gif



Tam toplayıcı, iki yarım toplayıcı ve ek olarak OR Gate içerir. Bir Bit’lik bir toplayıcı için, iki AND, iki XOR ve bir OR Gate gerekir. 4 Bitlik bir toplayıcı içinse, 4 adet bir Bit’lik toplayıcıyı birbirine bağlamak gerekir. Sırasıyla her toplayıcıdan bir basamağın sonucu çıkar ve fazladan basamağı bir sonraki toplayıcıya aktarırlar. Aynı bizim fazladan basamağı elimize aldığımız gibi, onlarda fazladan basamağı bir sonraki toplayıcıya aktarırlar.

4 Bit’lik bir toplayıcıyı birçok Gate kullanarak yapabilirsiniz. Ben 8 XOR, 8 AND ve 4 OR Gate kullanarak yaptım. Şemayı Logisim kullanarak çizdim:

EmGHR0KW0AYAKLM.png



Artık devre şememız da olduğuna göre, montaja geçebiliriz. :)

Devre montajı

3 farklı olmak üzere toplam 20 Gate kullanmamız gerekiyor. Bir Gate’in ortalama 3 transistör tuttuğunu düşünürsek, neredeyse 60 transistör kullanmamız gerekecek. Tabii ki bu çok fazla ve üzerinde çalışması zor bir sayı. Ben de bu nedenle, üzerinde 4 adet Gate olan entegrelerden aldım. Bu entegreler sayesinde işimiz oldukça kolaylaşacak. Entegrelerin listesi:

  • 2 x 74HC86 Entegre – XOR Gate
  • 2 x 74HC08 Entegre – AND Gate
  • 1 x 74HC32 Entegre – OR Gate

Ben Özdisan’dan aldım, fakat güvendiğiniz her yerden alabilirsiniz. Entegreleri breadboarda konumlandırdım. İki tane 4 Bit’i, A ve B Bit’lerini temsil etmek için, 2 adet 4 girişli DIP switch kullandım. Elektrikte 0 ve 1’i, Low ve High olarak karşılamaktayız. Yani 4 butonu sırasıyla, Low High Low Low olarak konumlandırırsak, bu 0100 rakamına ve ondalık sistemde 4 sayısına tekabül edecek. Yan, DIP switchleri kullanarak sayıları entegrelere bu şekilde vereceğiz. :)

Entegre inşa aşamasında:

alu-1.jpg



Ben, daha kolay ve düzgün olması açısından bakır jumper kablolar kullandım. yumuşak ve uzun, iğneli olanlar da kullanılabilir ama çok karmaşık oluyor. Her entegrenin 14 bacağı var, bunlardan ikisi + ve – voltajı için. Kalan 12 ayak ise, 4 Gate’i temsil ediyor. 2 ayak A ve B Bit’lerinin girişi için, diğer ayak ise sonucun çıkması için. Entegrelerden birinin datasheetinden bir kare:

datasheet.PNG



Devre tamamlandığında ise böyle görünüyor:

alu-2.jpg



Bu noktada, yapım aşamasında çıkan sorunlar nedeniyle, XOR AND ve OR Gate kullanan bu devre çalışmadı. Entegrelerden birinin türünün farklı olması ve pull-up rezistör gerektirmesi nedeniyle, devreyi verimli çalıştıramadım. Ancak bunun olacağını tahmin ediyordum, zira elektroniklerle uğraşırken her zaman temkinli olmak gerekiyor. Saatlerce uğraşsanız da (Bu devre için 2.5 – 3 saat uğraştım), devre çalışmayabiliyor. :)

Tüm bunlara bir son vermek ve konuyu daha fazla bekletmemek için, tüm bu Gate’leri içinde barındıran ve 4 Bit toplama işlemini tek başına yapabilen bir entegre siparişi verdim. Kısaca 20 Gate’i tek bir entegrede topluyor.

LED’ler ise, bizim sayılarımız, basamaklarımız. LED açıksa sonuç High yani 1. Kapalıysa sonuç Low yani 0. 4 Bit çıkış + 1 Bit elde olduğundan, 5 Bit kullandım.

Devre tamamlandığında, konu başında yaptığımız topla işlemini, 1010 + 0111 işlemini yaptım. Sonuç:


alu-4-tek-entegre.jpg



Sırasıyla 1 – 0 – 0 – 0 – 1 yani 10001 yani 15. :)

Bu konumuzda böylelikle noktalanmış oldu. Ancak Logic Gate’ler üzerine birkaç içerik daha üretmeyi düşünüyorum.

Umarım faydalı olabilmişimdir. Görüş ve sorularınızı belirtirseniz mutlu olurum. :)

Başka projelerde görüşmek üzere… 

Tarih:Uncategorized