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

alu-2.jpg


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: 1, 0 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 1, 0 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...

alu-5-b.jpg


Ben Eater'in de benzer içerikleri var. Her ne kadar bu projedekinden farklı olsa da, izlemenizi tavsiye ederim. :)

alu-3-ben-eater.jpg
 
Hocam, çok karışık bu konular ya :( Kafam basmıyor bir türlü.

Ayrıca ilk fotoğrafta gözüm direkt Arduino Nano'yu gördü :)
Zaten öyle hemen okuyupta öğrenilecek bir şey değil.

Ardunio Nano biraz daha büyük değil miydi? Yoksa ben mi yanlış hatırlıyorum?
 
Yıllar yıllar önce uçak için elektrik eğitimi alırken hepsini adım gibi biliyordum. Özellikle gate'lar ve binary işlemleri ilk başlarda beyin yaksa da sonra 2+2=4 yapar gibi beyniniz kodluyor kendince. Gövde motorcu olduğum için şu an pek konuşmak istemiyorum... :D

Kısa bir süre önce bir savunma sanayi şirketinin mülakatına girmiş biri olarak söylüyorum, eğer gelecekte iş pozisyonu bulmak istiyorsan geçen söylediği gibi, böyle projeleri bırakma ve devam et. İşe alımda rakiplerine fark atabileceğin bir kol oluşturmuşsun, ayrıca hobi.

Çoğu mühendisin diploma için okuduğu bir ülkede mesleğine sarılan her türlü öne çıkar, unutmayın.
 
Eline sağlık hocam, güzel anlatım olmuş. O jumperlar çok hoşuma gidiyor, diğerleri gibi kalabalık oluşturmuyor, salgın bitsin gidip alayım biraz kendime.

O bilgisayar powerbank ile mi şarj oluyor?

Bu konuyu neden konu dışına açtınız @SideWinder, farkedemiyordum?

Evet, Elektrik/Elektronik kısmında olması gerekmiyor muydu?

O jumperlardan bende bol bol var keşke fazla almasaymışım. Fazla lazım olur dedim ama arttı.
 
Son düzenleme:

Yeni konular

Geri
Yukarı