Saya akan mulai dari level terendah yang mungkin relevan (saya bisa mulai dari level yang lebih rendah lagi, tetapi mereka mungkin terlalu tidak relevan), mulai dari Atom, ke Listrik, ke Transistor, ke Logic Gates, ke Sirkuit Terpadu (Chip / CPU ), dan selesai di Assembly (saya anggap Anda terbiasa dengan level yang lebih tinggi).
Pada awalnya
Atom
Atom adalah struktur yang terdiri dari elektron, proton, dan neutron (yang terdiri dari partikel elementer ). Bagian yang paling menarik dari atom untuk komputer dan elektronik adalah elektron karena elektron bergerak (yaitu dapat bergerak dengan relatif mudah, tidak seperti proton dan neutron yang lebih sulit untuk bergerak) dan mereka dapat mengambang bebas dengan sendirinya tanpa ditahan di dalam sebuah atom.
Biasanya, setiap atom memiliki jumlah proton dan elektron yang sama, yang kita sebut keadaan "netral". Ketika itu terjadi, adalah mungkin bagi sebuah atom untuk kehilangan atau mendapatkan elektron ekstra. Atom-atom dalam keadaan tidak seimbang ini disebut sebagai atom "bermuatan positif" (lebih banyak proton daripada elektron) dan atom "bermuatan negatif" (lebih banyak elektron daripada proton).
Elektron tidak dapat dibangun dan tidak dapat dihancurkan (tidak demikian halnya dalam mekanika kuantum, tetapi itu tidak relevan untuk tujuan kita); jadi jika sebuah atom kehilangan satu elektron, beberapa atom lain di dekatnya harus menerima elektron ekstra atau elektron harus dilepaskan menjadi elektron mengambang bebas, sebaliknya karena elektron tidak dapat dibangun, untuk mendapatkan elektron ekstra, sebuah atom harus menyerapnya dari atom terdekat atau dari elektron mengambang bebas. Mekanika elektron sedemikian rupa sehingga jika ada atom bermuatan negatif di dekat atom bermuatan positif, maka beberapa elektron akan bermigrasi hingga kedua atom memiliki muatan yang sama.
Listrik
Listrik hanyalah aliran elektron dari suatu daerah dengan jumlah atom bermuatan negatif sangat tinggi ke suatu daerah dengan jumlah atom bermuatan positif sangat tinggi. Reaksi kimia tertentu dapat menciptakan situasi di mana kita memiliki satu simpul dengan banyak atom bermuatan negatif (disebut "anoda"), dan simpul lain dengan banyak atom bermuatan positif (disebut "katoda"). Jika kita menghubungkan dua node yang bermuatan berlawanan dengan kawat, massa elektron akan mengalir dari anoda ke katoda, dan aliran ini adalah apa yang kita sebut "arus listrik".
Tidak semua kabel dapat mentransmisikan elektron dengan sama mudahnya, elektron mengalir lebih mudah pada material "konduksi" daripada pada material "resisten". Bahan "konduktor" memiliki resistansi listrik yang rendah (mis. Kabel tembaga pada kabel) dan bahan "resistan" memiliki resistansi listrik yang tinggi (mis. Isolasi kabel karet). Beberapa bahan yang menarik disebut semi-konduktor (misalnya silikon), karena mereka dapat mengubah resistensi dengan mudah, dalam kondisi tertentu semikonduktor dapat bertindak sebagai konduktor dan pada kondisi lain itu dapat berubah menjadi resistor.
Listrik selalu lebih suka mengalir melalui material dengan resistansi paling rendah, jadi jika katoda dan anoda dihubungkan dengan dua kabel, satu memiliki resistansi sangat tinggi dan lainnya dengan resistansi sangat rendah, mayoritas elektron akan mengalir melalui kabel resistansi rendah dan hampir tidak ada yang mengalir melalui material resistansi tinggi.
Abad Pertengahan
Sakelar dan Transistor
Switches / Flip-Flops seperti saklar lampu biasa Anda, saklar dapat ditempatkan di antara dua potong kawat untuk memotong dan / atau mengembalikan aliran listrik. Transistor bekerja persis sama dengan sakelar lampu, kecuali bahwa alih-alih secara fisik menghubungkan dan melepaskan kabel, transistor menghubungkan / memutus aliran listrik dengan mengubah resistansi tergantung pada apakah ada listrik di simpul dasar, dan, seperti yang mungkin sudah Anda duga. Saya tahu, transistor dibuat dari semikonduktor karena kita dapat mengubah semikonduktor menjadi resistor atau konduktor untuk menghubungkan atau memutus arus listrik.
Salah satu jenis transistor yang umum, NPN Bipolar Junction Transistor (BJT), memiliki tiga simpul: "base", "collector", dan "emitter". Dalam NPN BJT, listrik dapat mengalir dari simpul "emitor" ke simpul "kolektor" hanya ketika simpul "basis" diisi. Ketika node dasar tidak diisi, praktis tidak ada elektron yang dapat mengalir dan ketika node dasar diisi, maka elektron dapat mengalir antara emitor dan kolektor.
Perilaku transistor
(Saya sangat menyarankan Anda membaca ini sebelum melanjutkan, karena dapat menjelaskan lebih baik daripada saya dengan grafis interaktif)
Katakanlah kita memiliki transistor yang terhubung ke sumber listrik di pangkalan dan pengumpulnya, dan kemudian kita memasang kabel Output di dekat pengumpulnya (lihat Gambar 3 di http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistor / ).
Ketika kita menerapkan listrik ke basis atau pengumpul, maka tidak ada listrik yang dapat mengalir sama sekali karena tidak ada listrik untuk dibicarakan:
B C | E O
0 0 | 0 0
Ketika kita menerapkan listrik ke pengumpul tetapi tidak ke basis, listrik tidak dapat mengalir ke emitor karena basis menjadi bahan resistensi tinggi, sehingga listrik lolos ke kawat Output:
B C | E O
0 1 | 0 1
Ketika kita menerapkan listrik ke pangkalan tetapi bukan kolektor, juga tidak ada listrik yang dapat mengalir karena tidak ada perbedaan muatan antara kolektor dan emitor:
B C | E O
1 0 | 0 0
Ketika kita menerapkan listrik ke basis dan pengumpul, kita mendapatkan listrik yang mengalir melalui transistor, tetapi karena transistor sekarang memiliki resistansi yang lebih rendah daripada kabel Output, hampir tidak ada aliran listrik melalui kabel Output:
B C | E O
1 1 | 1 O
Gerbang Logika
Ketika kita menghubungkan emitor dari satu transistor (E1) ke kolektor dari transistor lain (C2) dan kemudian kita menghubungkan output di dekat basis transistor pertama (O) (lihat Gambar 4 di http://www.spsu.edu / cs / fakultas / bbrown / web_lectures / transistor / ), maka sesuatu yang menarik terjadi. Katakanlah kita selalu menerapkan listrik ke pengumpul transistor pertama (C1) dan jadi kita hanya bermain-main dengan basis node dari transistor (B1, B2):
B1 B2 C1 E1/C2 | E2 O
----------------------+----------
0 0 1 0 | 0 1
0 1 1 0 | 0 1
1 0 1 0 | 0 1
1 1 1 1 | 1 0
Mari kita simpulkan tabelnya sehingga kita hanya melihat B1, B2, dan O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
Lihatlah , jika Anda terbiasa dengan Boolean Logic dan / atau Logic Gates, Anda harus memperhatikan bahwa inilah tepatnya gerbang NAND. Dan jika Anda terbiasa dengan Boolean Logic dan / atau Logic Gates Anda mungkin juga tahu bahwa NAND (dan juga NOR) secara fungsional lengkap , yaitu hanya menggunakan NAND, Anda dapat membangun semua gerbang logika lainnya dan kebenaran lainnya. meja. Dengan kata lain, Anda dapat mendesain chip komputer secara keseluruhan menggunakan gerbang NAND saja.
Bahkan, sebagian besar CPU (atau dulu?) Dirancang menggunakan NAND hanya karena lebih murah untuk diproduksi daripada menggunakan kombinasi NAND, NOR, AND, OR, dll.
Turunan dari operator boolean lain dari NAND
Saya tidak akan menjelaskan cara membuat semua operator boolean, hanya gerbang NOT dan AND, Anda dapat menemukan sisanya di tempat lain.
Diberikan operator NAND, maka kita dapat membangun gerbang NOT:
Given one input B
O = NAND(B, B)
Output O
Diberi operator NAND dan NOT, maka kita dapat membangun gerbang AND:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
Kita dapat membangun gerbang logika lain dengan cara yang sama. Karena gerbang NAND secara fungsional lengkap , dimungkinkan juga untuk membangun gerbang logika dengan lebih dari 2 input dan lebih dari 1 output, saya tidak akan membahas bagaimana membangun gerbang logika seperti itu di sini.
Zaman Pencerahan
Membangun Mesin Turing dari Boolean Gates
CPU hanyalah versi yang lebih rumit dari Mesin Turing. Register CPU adalah kondisi internal Turing Machine, dan RAM adalah tape Turing Machine.
Mesin Turing (CPU) dapat melakukan tiga hal:
- baca 0 atau 1 dari kaset (baca sel memori dari RAM)
- ubah status internalnya (ubah registernya)
- bergerak ke kiri atau ke kanan (baca beberapa posisi dari RAM)
- tulis 0 atau 1 ke kaset (tulis ke sel memori ke RAM)
Untuk tujuan kami, kami sedang membangun Mesin Turing 3-simbol 2-simbol Wolfram menggunakan logika kombinatorial (CPU modern akan menggunakan mikrokode, tetapi mereka lebih kompleks daripada yang diperlukan untuk tujuan kami).
Tabel keadaan Mesin Turing Wolfram (2,3) adalah sebagai berikut:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
Kami ingin me-encode ulang tabel negara di atas sebagai tabel kebenaran:
Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)
R 0 1
I1,I2
(0,0) (0,1),1,1 (1,0),0,0
(0,1) (1,0),0,0 (1,0),1,1
(1,0) (0,1),0,0 (0,0),1,0
The truth table for the state table above:
I1 I2 R(t) | O1 O2 M R(t+1)
-------------+--------------------
0 0 0 | 0 1 1 1
0 0 1 | 1 0 0 0
0 1 0 | 1 0 0 0
0 1 1 | 1 0 1 1
1 0 0 | 0 1 0 0
1 0 1 | 0 0 1 0
Saya tidak benar-benar akan membangun gerbang logika seperti itu (saya tidak yakin cara menggambarnya di SE dan mungkin akan cukup besar), tetapi karena kita tahu bahwa gerbang NAND secara fungsional lengkap , maka kita memiliki cara untuk menemukan serangkaian gerbang NAND yang akan mengimplementasikan tabel kebenaran ini.
Properti penting dari Turing Machine adalah memungkinkan untuk meniru komputer program tersimpan menggunakan mesin Turing yang hanya memiliki tabel status tetap. Oleh karena itu, Mesin Universal Turing apa pun dapat membaca programnya dari Tape (RAM) alih-alih harus memiliki instruksinya yang telah dikodekan ke dalam tabel keadaan internal. Dengan kata lain, Mesin Turing (2,3) kami dapat membaca instruksi dari I1, pin I2 (sebagai perangkat lunak) alih-alih di-hardcode dalam implementasi gerbang logika (sebagai perangkat keras).
Kode mikro
Karena meningkatnya kompleksitas CPU modern, menjadi sangat sulit untuk menggunakan logika kombinatorial sendiri untuk merancang CPU secara keseluruhan. CPU modern biasanya dirancang sebagai interpreter dari instruksi mikrokode; Microcode adalah program kecil yang tertanam dalam CPU yang digunakan oleh CPU untuk menginterpretasikan kode mesin yang sebenarnya. Penerjemah mikrokode ini sendiri umumnya dirancang menggunakan logika kombinatorial.
Daftar, Cache, dan RAM
Kami telah melupakan sesuatu di atas. Bagaimana kita mengingat sesuatu? Bagaimana kita menerapkan kaset dan RAM? Jawabannya ada pada komponen elektronik yang disebut Capacitor. Kapasitor seperti baterai yang dapat diisi ulang, jika kapasitor diisi maka akan mempertahankan elektron tambahan dan juga dapat mengembalikan elektron ke sirkuit.
Untuk menulis ke kapasitor, kita mengisi kapasitor dengan elektron (tulis 1) atau tiriskan semua elektron dalam kapasitor sampai kosong (tulis 0). Untuk membaca nilai kapasitor, kami mencoba untuk melepaskannya. Jika, ketika kami mencoba melepaskan, tidak ada listrik yang mengalir, maka kapasitor kosong (baca 0), tetapi jika kami mendeteksi listrik, maka kapasitor harus diisi (baca 1). Anda mungkin memperhatikan bahwa membaca kapasitor menghabiskan penyimpanan elektronnya, RAM modern memiliki sirkuit untuk mengisi ulang kapasitor secara berkala sehingga mereka dapat mempertahankan ingatan mereka selama ada listrik.
Ada beberapa jenis kapasitor yang digunakan dalam CPU, register CPU dan cache tingkat yang lebih tinggi dibuat menggunakan "kapasitor" berkecepatan sangat tinggi yang sebenarnya dibangun dari transistor (oleh karena itu hampir tidak ada "jeda" untuk membaca / menulis dari mereka), ini disebut RAM statis (SRAM); sementara RAM memori utama dibuat menggunakan daya yang lebih rendah, tetapi kapasitor lebih lambat dan jauh lebih murah, ini disebut Dynamic RAM (DRAM).
Jam
Komponen CPU yang sangat penting adalah jam. Jam adalah komponen yang "menandai" secara teratur untuk menyinkronkan pemrosesan. Jam biasanya berisi kuarsa atau bahan lain dengan periode osilasi yang terkenal dan relatif konstan, dan sirkuit jam mempertahankan dan mengukur osilasi ini untuk mempertahankan indera waktu.
Operasi CPU dilakukan antara tick tick dan baca / tulis dilakukan pada tick untuk memastikan bahwa semua komponen bergerak secara sinkron dan tidak saling menginjak satu sama lain saat berada dalam kondisi perantara. Dalam Mesin Turing (2,3) kami, antara clock ticks listrik melewati gerbang logika untuk menghitung output dari input (I1, I2, R (t)); dan pada clock ticks, penulis kaset akan menulis O1, O2 ke tape, motor akan bergerak tergantung pada nilai M, dan register internal ditulis dari nilai R (t +1), kemudian pembaca kaset akan membaca rekaman saat ini dan memasukkan muatan ke I1, I2 dan register internal dibaca kembali ke R (t).
Berbicara dengan Periferal
Perhatikan bagaimana (2,3) Mesin Turing berinteraksi dengan motornya. Itu adalah pandangan yang sangat sederhana tentang bagaimana CPU dapat berinteraksi dengan perangkat keras yang sewenang-wenang. Perangkat keras sewenang-wenang dapat mendengarkan atau menulis ke kawat tertentu untuk input / output. Dalam kasus untuk Mesin Turing (2,3), antarmuka dengan motor hanya satu kawat yang memerintahkan motor untuk memutar searah atau berlawanan arah jarum jam.
Yang tertinggal dalam mesin ini adalah bahwa Motor harus memiliki "jam" lain yang berjalan selaras dengan "jam" internal Mesin untuk mengetahui kapan harus mulai dan berhenti berjalan, jadi ini adalah contoh dari pengiriman data yang sinkron . Alternatif lain yang biasa digunakan, transmisi asinkron menggunakan kabel lain, yang disebut jalur interupsi, untuk mengkomunikasikan titik sinkronisasi antara CPU dan perangkat asinkron.
Era digital
Kode dan Perakitan mesin
Bahasa assembly adalah mnemonik yang bisa dibaca manusia untuk kode mesin. Dalam kasus yang paling sederhana, ada pemetaan satu-ke-satu antara perakitan ke kode mesin; meskipun dalam bahasa assembly modern beberapa instruksi dapat memetakan ke beberapa opcode.
Bahasa pemrograman
Kita semua akrab dengan ini bukan?
Fiuh, akhirnya selesai, saya mengetik semua ini hanya dalam 4 jam, jadi saya yakin ada kesalahan di suatu tempat (saya terutama seorang programmer, bukan insinyur listrik atau fisikawan, jadi mungkin ada beberapa hal yang salah secara terang-terangan). Silakan jika Anda menemukan kesalahan, jangan ragu untuk memberikan @ yell atau memperbaikinya sendiri jika Anda memiliki perwakilan atau membuat jawaban pelengkap.