Kısım I · Makine · Bölüm 3

Elektrikten Mantığa

Transistör ve mantık kapıları (Transistors and logic gates)

Neden burada · Neye dayanıyor

Neden burada: Bölüm 2'de elektriğin bir telden yalnızca iki şey söyleyebildiğini, bu yüzden her şeyin bitlerle yazıldığını gördük. Ama bitler durdukça hiçbir şey olmaz; sayı, harf ya da renk olarak yazılmış bir bit dizisi pasif bir yazıdır. Bu bölüm, bitlerle karar veren en küçük parçayı kuruyor: elektrikle açılıp kapanan anahtarı (transistör) ve onlardan yapılan VE, VEYA, DEĞİL kararlarını (mantık kapıları). Bilgisayarın bütün "zekâsı", bu küçücük kararların çok büyük sayıda birleşiminden ibarettir.

Neye dayanıyor: Bölüm 2: özellikle 2.1 ve 2.2. Orada bit'i bir ampulün yanık/sönük olmasına, transistörü de "açık ya da kapalı bir anahtar"a benzetmiştik ve "bu yüzden ikilik sistem" demiştik. Bu bölüm o cümleyi açıyor: o anahtar tam olarak nedir, iki anahtarı art arda bağlayınca ne olur, ve neden kapı denen küçük bir tablo her türlü hesaba yeter.

  1. Kat 2–10Devreler, işlemci, diller, işletim sistemi, web, uygulamaHepsi bu bölümde kurulan kapıların birleşimidir. Bölüm 4 ve sonrası.
  2. Kat 1Transistör ve mantık kapılarıElektrikle açılıp kapanan anahtarlar ve onlardan yapılan VE, VEYA, DEĞİL kararları.
  3. Kat 0Elektrik ve bitVar ya da yok, 1 ya da 0. Bölüm 2.

Bu bölümde dört adım atacağız. Önce elektriğin kendisini, yalnızca ihtiyacımız kadar: gerilim nedir, "1" ve "0" fiziksel olarak neye karşılık gelir. Sonra transistörü: onu bir anahtar olarak nasıl düşüneceğimizi, neden silikondan yapıldığını ve bir çipe neden milyarlarcasının sığdığını. Sonra anahtarların yaptığı işi kâğıt üzerinde ifade etmenin yolunu: Boole mantığı ve doğruluk tablosu. Son olarak da tek bir kapının (NAND) bütün öbürlerini üretebildiği şaşırtıcı gerçeği. Bölümün sonunda, JavaScript'te yazdığın &&, || ve ! işaretlerinin en alttaki karşılığını bileceksin.

3.1 Elektrik akımı ve gerilim, çok kısaca

Elektrik hakkında bilmen gereken şey bir elektrik mühendisinin bildiğinin yüzde biri bile değil; yalnızca iki kavram yeter. İkisini de bir su tesisatı benzetmesi ile anlatacağım. Benzetme kusurludur (elektron su değildir) ama burada iş görür.

Dijital bir devrede bir telin durumunu "akım var/yok" diye değil, genellikle gerilimin yüksek mi düşük mü olduğuna bakarak okuruz. Telin gerilimi yüksekse bunu 1, düşükse 0 sayarız.1 Yani Bölüm 2'deki "açık/kapalı" ayrımı, fiziksel olarak "yüksek gerilim / düşük gerilim"dir. "Yüksek" ve "düşük"ün tam volt değerleri çip teknolojisine göre değişir; bu kitabın konusu değil, bilmen gereken, iki geniş aralık olduğudur.

İki geniş aralık olması bir güvenlik payı sağlar. Gerçek bir telde gerilim hiçbir zaman tam kesin değildir; küçük dalgalanmalar, komşu tellerden sızan parazitler olur. Ama telin gerilimi "yüksek bölgede mi, düşük bölgede mi" sorusuna cevap verildiği sürece küçük dalgalanmalar sonucu değiştirmez. Bölüm 2'de "neden on değil de iki?" sorusuna verdiğimiz cevabın fiziksel ayrıntısı budur: iki seviyeyi birbirine karıştırmak, on seviyeyi karıştırmaktan çok daha zordur. Bu yüzden bit, doğa ile mühendislik arasındaki ilk büyük uzlaşmadır: sürekli bir niceliği (gerilim) iki kesikli değere ("yüksek", "düşük") indirgiyoruz ve karşılığında dayanıklılık kazanıyoruz.

3.2 Transistör: elektrikle açılıp kapanan anahtar

Gündelik bir anahtar düşün: duvardaki ışık düğmesi. Elinle basarsın, devre kapanır, akım geçer, ampul yanar. Şimdi aynı düğmeyi elinle değil, başka bir telin gerilimiyle çevirebildiğini hayal et. Bu, tam olarak bir transistör (transistor)dür. Wikipedia'nın tanımıyla transistör, elektrik sinyallerini yükseltmek ya da anahtarlamak için kullanılan bir yarı iletken aygıttır; bir uç çiftine uygulanan gerilim ya da akım, başka bir uç çiftinden geçen akımı kontrol eder.2 Bizi ilgilendiren yalnızca anahtar rolü: bir girdi teli (kontrol) yüksekse anahtar kapanır ve akım geçer; düşükse anahtar açılır ve akım kesilir.

Bilgisayarlarda en yaygın tür MOSFET'tir (metal–oksit–yarı iletken alan etkili transistör). Adının bizim işimize yarayan kısmı şu: MOSFET'in yalıtılmış bir kapı ucu (gate) vardır ve bu uca uygulanan gerilim aygıtın iletkenliğini belirler.3 Yani kontrol telinin gerilimi, akımın geçip geçemeyeceğine karar verir.

Aynı kelime, iki ayrı şey: "kapı"

Transistörün kontrol ucuna İngilizce gate denir, mantık kapılarına da logic gate. İkisi farklı şeylerdir ve karışması kolay. Transistörün gate ucu tek bir transistörün üstündeki bir bağlantı noktasıdır. Mantık kapısı ise birkaç transistörün birleşiminden oluşan, 3.3'te göreceğimiz bir karar devresidir. Bu kitapta "kapı" her zaman mantık kapısıdır; transistörün ucu için "kontrol ucu" diyeceğim.

Yarı iletken, silikon, çip

"Yarı iletken" adı, malzemenin tam iletken (bakır tel gibi) ya da tam yalıtkan (plastik gibi) olmayıp, koşullara göre ikisi arasında davranabilmesinden gelir. Kontrol edilebilir bir iletkenlik tam da anahtar için gereken şeydir. Transistörlerin çoğu çok saf silikondan (silicon) yapılır; bazıları germanyum ya da başka yarı iletkenlerden.2

Tek bir transistör çok küçüktür; asıl iş onları aynı silikon parçasının üzerinde, çok büyük sayıda ve birbirine bağlı olarak üretmektir. Bir silikon dilimi üzerinde birbirine bağlanmış çok sayıda transistör barındıran böyle bir parçaya entegre devre (integrated circuit), günlük adıyla çip (chip) denir.4 Bir çip, bütün bu transistörler ve aralarındaki bağlantılarla bir paket halinde satılır; işlemci de, bellek çipi de böyle üretilir. Mantık kapıları ise bu çiplerin içinde, transistörlerin belli desenlerde bağlanmasıyla oluşur.

Ölçeği hissetmek için iki gerçek sayı. Intel'in 1971'de çıkan ilk mikroişlemcisi olan 4004, tek çipte 2.300 transistör taşıyordu.5 Apple'ın 2020 Kasım'ında duyurduğu M1 çipi ise 16 milyar transistör içerir.6 49 yılda yaklaşık 7 milyon kat artış. Hesap: 16.000.000.000 ÷ 2.300 ≈ 6,96 milyon; bu da ikiye katlamaların sayısı olarak log₂(6,96 milyon) ≈ 22,7 eder; 49 yıl ÷ 22,7 ≈ 2,2 yıl. Yani ortalama her iki yılda bir sayı ikiye katlanmış.

Moore yasası

Bu hesabın bir adı var: Moore yasası (Moore's law). Bir entegre devredeki transistör sayısının yaklaşık iki yılda bir ikiye katlandığı, maliyetin ise belirgin şekilde artmadığı gözlemidir. Gordon Moore 1965'te bileşen sayısının her yıl ikiye katlandığını söylemiş, 1975'te tahminini iki yılda bir ikiye katlanma olarak düzeltmiştir.7 Adı "yasa" olsa da, Wikipedia'nın vurguladığı gibi bir doğa yasası değil, deneyime dayalı bir gözlemdir.7 Hukukçu için yararlı bir ayrım: Moore'un "yasası" bir norm değil bir tespit; kimseyi bağlamaz, sadece üretici firmaların uzun süre izlediği bir hedef çizgisi olmuştur. Bunun yazılım için sonucu şu: elinizdeki telefon, birkaç on yıl önceki bir süper bilgisayarın yapabildiğinin çoğunu yapabilir; çünkü aynı anahtardan çok daha fazlasını aynı yere sığdırabiliriz.

Neden anahtar bir "iş yapar"?

Peki iki transistörü birleştirmek ne işe yarar? Basit bir düşünce deneyi: iki anahtarı art arda (seri) bağla. Akımın geçmesi için ikisinin de kapalı (iletken) olması gerekir. Şimdi anahtarları yan yana (paralel) bağla: ikisinden biri kapalıysa akım geçer. Seri bağlantı bir VE kararıdır, paralel bağlantı bir VEYA kararıdır. Bir kapıyı oluşturan şey, işte bu bağlantı desenleridir. Gerçek çiplerdeki "CMOS" tekniğinde bu iş, birbirini tamamlayan iki tür transistör çiftiyle yapılır; ayrıntı donanım tasarımına aittir.12 Bize gereken, Nand2Tetris'in şu tespitidir: bilgisayar bilimcisi bu fiziksel ayrıntıyla uğraşmak zorunda değildir; kapıyı, mantıksal işlevi belli bir kara kutu olarak alıp ondan yukarısını kurar. Fiziksel gerçekleme (elektrik, başka teknolojiler) değişebilir, mantıksal davranış aynı kalır.9 Bu, Bölüm 1.4'teki arayüz ile gerçekleme ayrımının donanımdaki ilk örneğidir: kapının arayüzü bir doğruluk tablosudur, gerçeklemesi transistörlerdir.

3.3 Boole mantığı: doğru/yanlış, VE, VEYA, DEĞİL

Kapıların yaptığı işi, transistör çizmeden anlatabilmek için bir dile ihtiyacımız var. Bu dil, George Boole'un adını taşıyan Boole mantığı (Boolean logic)dır. Nand2Tetris'in tanımıyla: ikilik (Boole) değerlerle çalışan cebir; değerler doğru/yanlış, 1/0, evet/hayır, açık/kapalı diye etiketlenebilir; biz 1 ve 0 kullanacağız.9 Bölüm 1.3'te gördüğün "Boole ifadesi" (doğru ya da yanlış çıkan ifade), bu mantığın üst kattaki hali.

Üç temel işlem

Bunların davranışını yazmanın en kesin yolu doğruluk tablosu (truth table)dur: girdilerin bütün olası kombinasyonlarını sırayla yazar, her biri için çıktıyı söylersin. İki girdili bir işlemde 2 × 2 = 4 satır vardır (girdi başına iki durum: 0 ya da 1). Genel olarak n girdi için 2n satır.9 Bu, Bölüm 2.2'de gördüğün "her yeni bit olasılıkları ikiye katlar" ilkesinin aynısıdır.

aba VE ba VEYA bDEĞİL a
00001
01011
10010
11110

Hukukçunun bildiği iki mantık: kümülatif ve seçimlik şartlar

Hukuk okuyan biri bu tabloyu zaten biliyor, yalnızca adını bilmiyor. Bir hükmün uygulanması için sayılan şartların hepsinin birlikte gerçekleşmesi aranıyorsa bunlar kümülatif şartlardır: VE. Şartlardan birinin gerçekleşmesi yetiyorsa seçimlik (alternatif) şartlardır: VEYA. "Yaş sınırını aşmış ve ehliyet sahibi olan" kişi ile "iki tanıktan biri veya yazılı belge" arasındaki fark, 0 ve 1'lerle yazılmış hâliyle yukarıdaki tablodaki sütunlardır. DEĞİL ise "...olmamak" şartı: "ceza almamış olmak".

Bir dikkat: hukuk metninde ve gündelik dilde "veya" kelimesi bazen "ya … ya da" (ikisi birden olamaz) anlamında yorumlanır. Mantıktaki VEYA ise ikisi birden doğru olduğunda da doğrudur (tablonun son satırı: 1 VEYA 1 = 1). "Yalnızca biri doğruysa doğru" diyen işlemin ayrı bir adı var: XOR, 3.4'te.

Üç fonksiyonla her şey

Şimdi merak edilecek bir soru: üç temel işlem yetiyor mu? Yani 3 girdili, 5 girdili, 100 girdili herhangi bir karar tablosu bunlarla ifade edilebilir mi? Evet; Nand2Tetris bunun için "kanonik gösterim" denen basit bir yöntem verir. Bir doğruluk tablosunda sonucun 1 olduğu her satır için, o satırın girdi değerlerini tam olarak "yakalayan" bir VE terimi yazarsın (girdi 0 ise DEĞİL'li hali, 1 ise kendisi). Sonra bu terimleri VEYA ile birleştirirsin.9 Kitabın örneğini kullanalım, f(x, y, z) = (x VEYA y) VE (DEĞİL z):

xyzf
0000
0010
0101
0110
1001
1010
1101
1110

Sonucun 1 olduğu üç satır var: (0,1,0), (1,0,0), (1,1,0). Her biri için bir terim: "x değil VE y VE z değil", "x VE y değil VE z değil", "x VE y VE z değil". Üçünü VEYA ile birleştirince tablonun aynısı çıkar. Sonuç genel: her Boole fonksiyonu yalnızca VE, VEYA ve DEĞİL ile yazılabilir. İki girdili durumda toplam 222 = 16 farklı fonksiyon vardır (4 satırın her birine 0 ya da 1 koyabilirsin: 24); bunların bazılarının adı var: VE, VEYA, XOR, NOR, NAND ve diğerleri.9

3.4 NAND ve evrensellik; XOR

Üç temel işlem yetiyorsa, fiziksel olarak üç ayrı kapı mı yapmak gerekir? Hayır; daha da güzeli var. NAND (NOT-AND), VE'nin tersidir: ikisi de 1 ise 0, diğer bütün durumlarda 1.9

aba NAND b
001
011
101
110

Bu masum görünen kapının olağanüstü bir özelliği var: VE, VEYA ve DEĞİL'in her biri yalnızca NAND'dan kurulabilir.9 Buna evrensellik (universality, functional completeness) denir. Ve 3.3'ten hatırla: her Boole fonksiyonu VE/VEYA/DEĞİL ile yazılabiliyor. İkisini birleştirince: her Boole fonksiyonu yalnızca NAND ile yazılabilir. Fiziksel olarak tek bir kapı türünü çok sayıda üretip uygun şekilde bağlamak, her türlü mantığı kurmaya yeter; hatta bütün bir işlemci yalnızca NAND kapılarından yapılabilir.98 Nand2Tetris da tam bu yöntemi izler: projenin başındaki tek ilkel parça NAND'dır, bütün diğer kapılar onun üstüne kurulur.10

NAND'dan her şeyi kurmak

Nasıl olduğunu kendi gözünle gör. Aşağıdaki JavaScript'te yalnızca nand var; gerisi onun üstüne kurulu. Bitleri 0 ve 1 sayılarıyla tutuyoruz:

const nand = (a, b) => 1 - (a & b);        // 1. İlkel parça: ikisi 1 ise 0, değilse 1

const not = a => nand(a, a);                   // 2. DEĞİL: aynı girdiyi iki ayağa da ver
const and = (a, b) => not(nand(a, b));         // 3. VE: NAND'ın tersi
const or  = (a, b) => nand(not(a), not(b));    // 4. VEYA: önce her ikisini ters çevir, sonra NAND
const xor = (a, b) => {                        // 5. XOR: dört NAND ile
  const n = nand(a, b);
  return nand(nand(a, n), nand(b, n));
};

Satır satır:

  1. nand: a & b JavaScript'in bit düzeyinde VE işlemidir (iki biti 1 ise 1 verir); 1 - … ile sonucu ters çeviriyoruz. Gerçek donanımda bu satır bir kapının kendisidir; biz onu "ilkel" kabul ediyoruz.
  2. not: nand(a, a). Her iki girdiye de aynı değeri verince NAND tablosunda yalnızca 0-0 ve 1-1 satırlarına bakıyoruz: 0-0 → 1, 1-1 → 0. Bu, DEĞİL'in tablosudur.
  3. and: NAND'ın çıktısını DEĞİL'den geçirmek, VE'yi verir (çift tersleme).
  4. or: a ve b'yi önce ters çevirip NAND'lamak, VEYA'dır. Kontrol et: a=1, b=0 → not(a)=0, not(b)=1 → nand(0,1)=1. VEYA'nın tablosunda 1 VEYA 0 = 1 ✓.
  5. xor: dört NAND. Bunu aşağıda bir tabloyla göreceğiz.

Bu kodu çalıştırıp dört girdi çiftinin hepsi için sonuçları kontrol ettim; not, and, or ve xor beklenen tabloları veriyor. Kapı sayıları: DEĞİL 1, VE 2, VEYA 3, XOR 4 NAND.

XOR: "ya biri ya öbürü"

XOR (exclusive or, dışlayıcı veya), iki girdisi birbirinden farklıysa 1 verir.9 Tablo:

aba XOR b
000
011
101
110

VEYA'dan tek farkı son satır: 1 XOR 1 = 0. Gündelik dildeki "ya … ya da" bu işlemdir. XOR'u hatırlamanda fayda var, çünkü Bölüm 4'te toplama yapacak devrenin kalbinde o olacak: iki bit toplayınca "toplam" biti tam olarak XOR'dur (1 + 1 = 10; toplam bit 0, elde 1).

Bir kapı daha: seçici

İleride (Bölüm 5) hafıza kurarken işimize yarayacak bir parça daha var: seçici (multiplexer, Mux). İki girdiden birini, üçüncü bir "seçme" girdisine göre geçirir: seçme 0 ise a, 1 ise b çıkar. NAND, VE, VEYA, DEĞİL ile kurulabilir: or(and(a, not(s)), and(b, s)). Mantığı bir yol ayrımına benzer: seçme teli, trafik polisi gibi iki yoldan hangisinin açık olacağına karar verir. Şimdilik yalnızca varlığını bil; asıl işi Bölüm 5'te görünecek.

3.5 Köprü: JavaScript'teki &&, ||, ! ve if

Şimdiye kadar anlattığımız her şey tek bir yere varıyor: senin yazacağın koşullara. JavaScript'te şunları göreceksin:

MantıkJavaScriptÖrnek
VE&&yasUygun && ehliyetVar
VEYA||tanikVar || belgeVar
DEĞİL!!cezaAlmis

Bunlar Bölüm 1.3'te gördüğün koşulun (if) içine girer: if (yasUygun && ehliyetVar) { … }. Parantez içindeki Boole ifadesi doğru çıkarsa kod gövdesi çalışır. Bu iş, bir üst kattan bakınca "komut" ve "koşul"; altına inince, bir kapı deseni ve bir doğruluk tablosudur. Her if sonunda bir yerde bir devrenin karar vermesine dönüşür (Bölüm 6 ve 7'de bunun tam olarak nasıl olduğunu göreceğiz).

Bir fark: yazılımdaki kısa devre

Yazılım ile donanım arasında dikkat edilmesi gereken bir fark var. JavaScript'teki && operatörü kısa devre yapar: soldaki ifade yanlışsa sağdakini hiç değerlendirmez, çünkü sonuç zaten yanlıştır.11 Bu, yazılımda iş kolaylaştıran bir kuraldır:

if (kullanici && kullanici.can > 0) {   // kullanici yoksa, ikinci kısım hiç çalışmaz
  dersiBaslat();
}

Satır satır: kullanici boş (örneğin null) ise JavaScript soldaki ifadeyi yanlış sayar ve kullanici.can kısmına hiç bakmaz; aksi hâlde "boş bir şeyin canı olmaz" hatası çıkardı. Bir fiziksel VE kapısında böyle bir ayrıcalık yoktur: iki girdi de her zaman ayrı birer teldir ve ikisi de aynı anda devredir. Yani && mantığın üst kat uyarlamasıdır: aynı doğruluk tablosunu kullanır ama üstüne yazılımın bir kolaylığını ekler. JavaScript && ve || operatörlerinin döndürdüğü şey her zaman 0 ya da 1 de değildir; operandlardan birinin kendisini döndürebilir. Bu ayrıntıyı Bölüm 25'te JavaScript'i öğrenirken göreceğiz.

Bit düzeyinde işlemler de var: &, |, ^ (XOR). Bunlar bir sayının her bitine ayrı ayrı uygulanır. Örneğin 12 & 10: 1100 ile 1010'un bit bit VE'si 1000, yani 8. 12 | 10 = 1110 = 14. 12 ^ 10 = 0110 = 6. (Hesabı JavaScript'te çalıştırıp doğruladım.) İlk bakışta nadir işlere benzeyen bu işlemler, aslında yukarıdaki kapıların tek tek bitlere uygulanmış halidir. Bölüm 4'te ALU'yu tasarlarken yine karşına çıkacaklar.

Uygulamamızda

Uygulamamızda "Bu bölümü açabilir miyim?" sorusu, kapıların dilinde yazılabilir. Örneğin bir hukuk dersinin kilidi, önceki bölüm tamamlandı VE can sayısı sıfırdan büyük koşuluna bağlı olabilir. Prototipinde muhtemelen buna benzer bir satır vardır:

const acilabilir = oncekiTamamlandi && can > 0;
if (!acilabilir) { kilitGoster(); }

Satır satır: ilk satırda iki Boole değeri VE ile birleşiyor; ikisi birden doğruysa acilabilir doğru. İkinci satırda ! (DEĞİL) onu tersine çeviriyor: açılamıyorsa kilit göster. "Streak korunuyor mu?", "puan eşiği geçildi mi?", "kullanıcı giriş yapmış mı veya misafir mi?" gibi her karar benzer bir tablodur. Bu mantığı agent'a "doğruluk tablosunu çıkar" diye yazdırdığında, kodun hangi satırının hangi durumu kapsadığını artık okuyabilirsin.

Bölüm 2 ile bağlantı

Bölüm 2 bitin ne olduğunu anlattı: yüksek/düşük gerilim, 1/0. Bu bölüm bitle ne yapılabileceğini anlatıyor: bitleri alıp yeni bit üreten bir kapı. İkisi birlikte, kat planında Kat 0 ve Kat 1'i oluşturuyor. Bölüm 2'deki "anlam bağlamdadır" ilkesi burada da geçerli: aynı kapı, bir yerde "toplama devresinin parçası", başka yerde "bu kullanıcı giriş yapmış mı" kararının parçasıdır; kapı yalnızca bitleri işler, bitlerin ne anlama geldiğini üst kat belirler.

Bu bölümde neler kuruldu

Dijital devrede bir telin gerilimi yüksek ya da düşük olabilir; bunlar 1 ve 0'dır. Bu iki seviyeyi bir başka telin gerilimiyle açılıp kapanan transistör değiştirir; transistörler silikondan yapılır ve bir çip (entegre devre) üzerinde milyarlarcası bir araya getirilir; her iki yılda ikiye katlanma eğilimine Moore yasası denir (bir gözlemdir, yasa değildir). Transistörlerin belirli desenlerde bağlanmasıyla mantık kapıları doğar. Kapıların davranışını Boole mantığı ve doğruluk tablosu ile yazarız: VE (ikisi de), VEYA (en az biri), DEĞİL (tersi). Her Boole fonksiyonu bu üçüyle yazılabilir; üçünün de tek bir kapıdan, NAND'dan kurulabilmesi evrensellik özelliğidir. Bir de XOR ve seçici var. JavaScript'in &&, ||, ! işaretleri bu mantığın üst kattaki karşılığıdır.

Terimler sözlükte, Bölüm 3 başlığı altında. Sırada Bölüm 4 var: kapıları uygun şekilde bağlayınca toplama yapan bir makine çıkıyor.

Birincil okuma

Nisan & Schocken, The Elements of Computing Systems, Bölüm 1: Boolean Logic (Nand2Tetris sitesindeki ücretsiz bölüm), özellikle 1.1.1 Boolean Algebra ve 1.1.2 Gate Logic başlıkları. Derinleşmek istersen: Wikipedia'nın NAND gate maddesi (evrensellik ve gerçek çipler), ve Charles Petzold'un Code kitabının (basılı) kapılara ayrılmış bölümleri.

Takıldığın her yeri yapay zekâ öğretmenine sor. Bir öneri: ondan 3 girdili bir karar kuralı (ör. "ders açık mı?") tasarlamasını iste; sen doğruluk tablosunu 8 satır olarak elle çıkar, sonra kanonik yöntemle (sonucu 1 olan satırlardan VE terimleri, hepsi VEYA'lı) ifadeyi yaz.

Bölüm sonu soruları

Kitaba bakmadan cevapla. Yanlış yaparsan geri bildirim seni ilgili alt bölüme yönlendirir.

1. Dijital bir devrede "1" fiziksel olarak neye karşılık gelir?
Bit, telin gerilimi yüksek mi düşük mü olduğuna bakılarak okunur: yüksek 1, düşük 0. Bölüm 2'deki "açık/kapalı"nın fiziksel hali budur. Bkz. 3.1.
2. Transistörün bu kitaptaki rolü nedir?
Bir kontrol ucunun gerilimi, başka iki ucun arasından akım geçip geçmeyeceğine karar verir; bizi ilgilendiren anahtar rolüdür. Bkz. 3.2.
3. Moore yasası aşağıdakilerden hangisini söyler?
Moore yasası bir gözlemdir: transistör sayısı yaklaşık iki yılda bir ikiye katlanmış, maliyet fazla artmamıştır. Bir doğa yasası ya da norm değildir. Bkz. 3.2.
4. İki şartın da gerçekleşmesini isteyen "kümülatif" kural hangi işleme denk gelir?
Kümülatif şartlar hepsinin birlikte gerçekleşmesini ister: VE. Seçimlik şartlar (biri yeter) VEYA'dır. Bkz. 3.3.
5. Üç girdili bir doğruluk tablosunda kaç satır vardır?
n girdi için 2ⁿ satır: 2³ = 8. Her girdi iki değer alır ve ikisi çarpılır. Bkz. 3.3.
6. NAND kapısı için "evrensel" denmesinin anlamı nedir?
VE, VEYA ve DEĞİL NAND'dan kurulabilir; her Boole fonksiyonu bu üçüyle yazılabildiği için her fonksiyon tek bir kapı türünden kurulabilir. Bkz. 3.4.
7. XOR kapısı ne zaman 1 verir?
XOR "ya biri ya öbürü"dür: girdiler farklıysa 1, aynıysa 0. VEYA'dan tek farkı 1 XOR 1 = 0 olmasıdır. Bkz. 3.4.
8. JavaScript'te a && b yazınca a yanlışsa ne olur?
&& kısa devre yapar: soldaki yanlışsa sonuç zaten yanlıştır ve sağdaki ifadeye bakılmaz. Bu, mantığın üstüne yazılımın eklediği bir kolaylıktır. Bkz. 3.5.
9. Kendi cümlenle: NAND neden "evrensel"dir? Bir hukuk karar kuralı (ör. iki kümülatif şart ve bir olumsuz şart) örneği vererek, bunun donanım için ne sonuç doğurduğunu açıkla.
Örnek cevabı göster

Her Boole fonksiyonu VE, VEYA ve DEĞİL ile yazılabilir (doğruluk tablosunda 1 olan satırlardan kanonik biçim). Bu üçü de NAND'dan kurulabildiği için her karar kuralı tek bir kapı türünden elde edilir. Örneğin "yaş uygun VE ehliyet var VE ceza yok" kuralı, VE ve DEĞİL kapılarıyla yazılır; bunların her biri NAND'ın bağlantısıdır. Donanım için sonuç: tek tür kapıyı çok sayıda, aynı tasarımla üretmek yeter; çip üreticisi başka bir kapı türüne ihtiyaç duymaz.

10. NOT, AND ve OR'u sırasıyla yalnızca NAND ile nasıl kurarsın? Kaç NAND gerekir? Bir tanesi için doğruluk tablosuyla kontrol et.
Örnek cevabı göster

NOT(a) = NAND(a, a): 1 kapı. AND(a, b) = NOT(NAND(a, b)): 2 kapı. OR(a, b) = NAND(NOT(a), NOT(b)): 3 kapı. Kontrol, OR için a=0, b=0: NOT(0)=1, NOT(0)=1, NAND(1,1)=0; OR tablosunda 0 VEYA 0 = 0 ✓. a=1, b=0: NOT(1)=0, NOT(0)=1, NAND(0,1)=1; 1 VEYA 0 = 1 ✓.

Kaynaklar

  1. Nisan & Schocken, The Elements of Computing Systems, Bölüm 1 (Boolean Logic), 1.1.2 Gate Logic: kapıların Boole fonksiyonlarının fiziksel gerçeklemesi olduğu; elektriğin dışındaki teknolojilerin de kullanılabileceği. Gerilim düzeyi → bit eşlemesi için ayrıca CS50x Hafta 0 notları ("transistörlerin açılıp kapanması").
  2. Wikipedia, Transistor: yarı iletken aygıt, anahtarlama; bir uç çiftinin gerilimi/akımı başka bir çiftten geçen akımı kontrol eder; çoğu transistör çok saf silikondan yapılır.
  3. Wikipedia, MOSFET: yalıtılmış kapı ucu; kapı gerilimi aygıtın iletkenliğini belirler.
  4. Wikipedia, Integrated circuit: transistör gibi bileşenlerin ve bağlantılarının ince bir yarı iletken (çoğunlukla silikon) parça üzerinde üretilmesi; "microchip" ya da "chip" olarak da bilinir.
  5. Wikipedia, Intel 4004: 15 Kasım 1971, tek çipte 2.300 transistör.
  6. Apple Newsroom, Apple unleashes M1 (10 Kasım 2020): 5 nanometre üretim süreci, 16 milyar transistör.
  7. Wikipedia, Moore's law: 1965 gözlemi (yılda iki katına), 1975 revizyonu (iki yılda iki katına), "doğa yasası değil, deneysel ilişki". Hesaplar (≈ 6,96 milyon kat, ≈ 22,7 ikiye katlama, ≈ 2,2 yıl) bu bölümün yazarı tarafından yapılmıştır.
  8. Wikipedia, NAND gate: NAND ve NOR kapılarının işlevsel olarak tam (evrensel) olması; yalnızca NAND ile bir işlemcinin kurulabilmesi. CMOS ile ilgili ayrıntı için kaynak 4.
  9. Nisan & Schocken, The Elements of Computing Systems, Bölüm 1, 1.1.1 Boolean Algebra (doğruluk tablosu, 2ⁿ satır, kanonik gösterim, 22ⁿ fonksiyon, Xor ve Nand tanımları, NAND evrenselliği) ve 1.2 Specification (Nand, Not, And, Or, Xor).
  10. Nand2Tetris, Project 1: Boolean Logic: tek ilkel parçanın NAND olması ve bütün kapıların onun üzerine kurulması.
  11. MDN, Logical AND (&&): kısa devre değerlendirmesi; ayrıca Bitwise AND (&): sayıları 32 bitlik tamsayıya çevirip bit bit uygular. Örnekler (12 & 10 vb.) Node.js'te çalıştırılarak doğrulanmıştır.
  12. Wikipedia, CMOS: mikroişlemci ve bellek çiplerinde mantık kapılarını kurmak için tamamlayıcı p ve n tipi MOSFET çiftlerini kullanan üretim süreci.