Mantiqiy ventillar
Bir nechta tranzistor — bitta ventil. Ventillardan yig'uvchi (hisoblaydi) va flip-flop (eslaydi) quriladi; qolgan hamma narsa shu ikki g'ishtdan.
Bitta tranzistor — oddiy kalit. Lekin bir nechta tranzistorni ma'lum tartibda ulasak, mantiqiy ventil (logic gate) hosil bo'ladi. Ventil bir yoki bir nechta kirish bitini qabul qilib, aniq qoida bo'yicha bitta chiqish biti beradi. Bu qoidalar 1854-yilda Jorj Bul tomonidan ishlab chiqilgan Bul algebrasiga asoslanadi. Ventilning ishlashi haqiqat jadvali bilan to'liq tavsiflanadi — unda barcha kirish kombinatsiyalari va ularga mos chiqish ko'rsatiladi.
AND (VA) — ikkala kirish ham 1 bo'lsagina chiqish 1. Elektr sxemasida ketma-ket ulangan ikkita kalitga o'xshaydi: chiroq yonishi uchun ikkalasi ham yopiq bo'lishi kerak. OR (YOKI) — kamida bitta kirish 1 bo'lsa, chiqish 1; bu parallel ulangan kalitlar. NOT (EMAS) — kirishni teskarisiga aylantiradi. NAND va NOR — AND va OR ning teskarisi. XOR (istisno qiluvchi YOKI) — kirishlar har xil bo'lsagina 1 beradi.
Dasturlashda ham shu amallarni ishlatasiz: JavaScript'dagi && — AND, || — OR, ! — NOT. Bitli amallar esa &, |, ^ (XOR), ~ (NOT). Siz if (user && user.isAdmin) yozganingizda, protsessor ichida haqiqatan ham AND ventillari ishlaydi.
4.1. Ventillardan hisoblashgacha: yarim yig'uvchi
Endi eng qiziq qismi: ventillar yordamida qanday qilib sonlarni qo'shish mumkin? Ikkilik tizimda bir xonali qo'shish qoidalari: 0+0=0, 0+1=1, 1+0=1, 1+1=10 (ya'ni natija 0, keyingi xonaga 1 ko'chadi). E'tibor bering: yig'indi biti (S) aynan XOR jadvaliga, ko'chirish biti (C) esa aynan AND jadvaliga mos keladi! Demak bitta XOR va bitta AND ventilini ulasak, bir bitli sonlarni qo'shadigan yarim yig'uvchi (half adder) hosil bo'ladi.
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
4.2. To'liq yig'uvchi va ko'p bitli qo'shish
Ko'p xonali sonlarni qo'shganda har bir xona oldingi xonadan kelgan ko'chirishni ham hisobga olishi kerak. Buning uchun ikkita yarim yig'uvchi va bitta OR ventilidan to'liq yig'uvchi (full adder) yasaladi — u uchta kirishni (A, B va ko'chirish) qabul qiladi. To'liq yig'uvchilarni zanjir qilib ulasak, istalgan uzunlikdagi sonlarni qo'shish mumkin. 64 ta to'liq yig'uvchi — 64 bitli protsessordagi qo'shish bloki.
Ayirish qo'shish orqali bajariladi: sonning qo'shimcha kodi (barcha bitlarni teskari qilib, 1 qo'shish) olinadi va qo'shiladi. Ko'paytirish — ko'p marta surish va qo'shish. Bo'lish — ko'p marta ayirish va solishtirish. Shunday qilib, barcha arifmetika bir necha turdagi ventillardan qurilgan sxemalarga keltiriladi.
4.3. Xotira elementi: flip-flop
Hisoblash — ishning yarmi. Kompyuter natijalarni eslab qolishi ham kerak. Agar ventilning chiqishini qaytadan uning kirishiga ulasak (teskari aloqa), sxema o'z holatini "ushlab turadi". Ikki NOR yoki ikki NAND ventilini kesishgan holda ulash natijasida SR-latch hosil bo'ladi — u bitta bitni saqlaydi. Uning takomillashgan varianti D flip-flop — takt signalining har bir chetida kirishdagi qiymatni "suratga olib", keyingi taktgacha saqlaydi.
Bir nechta flip-flop birlashsa registr hosil bo'ladi: 8 ta — 8 bitli registr, 64 ta — 64 bitli registr. Registrlar protsessor ichidagi eng tez xotira. Shunday qilib, biz tranzistordan boshlab kompyuterning ikki asosiy qobiliyatiga — hisoblash (yig'uvchi) va eslash (flip-flop) ga yetib keldik. Qolgan hamma narsa shu ikki g'ishtdan qurilgan.