ฉันจะเริ่มจากระดับต่ำสุดที่อาจมีความเกี่ยวข้อง (ฉันสามารถเริ่มต้นจากระดับต่ำกว่า แต่พวกเขาอาจจะไม่เกี่ยวข้องมากเกินไป) เริ่มต้นจาก Atom, ไฟฟ้า, ทรานซิสเตอร์, ทรานซิสเตอร์, ประตูตรรกะ, วงจรรวม (ชิป / ซีพียู) ) และจบที่ Assembly (ฉันคิดว่าคุณคุ้นเคยกับระดับที่สูงขึ้น)
ในตอนเริ่มต้น
อะตอม
อะตอมเป็นโครงสร้างที่ประกอบด้วยอิเล็กตรอนโปรตอนและนิวตรอน (ซึ่งประกอบไปด้วยอนุภาคพื้นฐาน ) ส่วนที่น่าสนใจที่สุดของอะตอมสำหรับคอมพิวเตอร์และอุปกรณ์อิเล็กทรอนิกส์คืออิเล็กตรอนเนื่องจากอิเล็กตรอนเคลื่อนที่ได้ง่าย (เช่นเคลื่อนที่ได้ค่อนข้างง่ายซึ่งแตกต่างจากโปรตอนและนิวตรอนซึ่งเคลื่อนที่ได้ยากกว่า) และพวกมันสามารถลอยได้เองโดยไม่ต้องอยู่ภายใน อะตอม
โดยปกติอะตอมแต่ละอันมีจำนวนโปรตอนและอิเล็กตรอนเท่ากันเราเรียกสถานะนี้ว่า "เป็นกลาง" เมื่อมันเกิดขึ้นมันเป็นไปได้ที่อะตอมจะสูญเสียหรือรับอิเล็กตรอนพิเศษ อะตอมในสถานะที่ไม่สมดุลนี้ถูกกล่าวว่าเป็นอะตอมที่มีประจุบวก (โปรตอนมากกว่าอิเล็กตรอน) และอะตอมที่มีประจุลบ (อิเล็กตรอนมากกว่าโปรตอน) ตามลำดับ
อิเล็กตรอนนั้นไม่มีโครงสร้างและไม่สามารถทำลายได้ (ไม่ใช่ในกลศาสตร์ควอนตัม แต่ไม่เกี่ยวข้องกับจุดประสงค์ของเรา) ดังนั้นถ้าอะตอมสูญเสียอิเล็กตรอนอะตอมอื่นที่อยู่ใกล้เคียงจะต้องรับอิเล็กตรอนเพิ่มหรืออิเล็กตรอนจะต้องปล่อยอิเล็กตรอนอิสระที่ลอยได้ออกจากกันตรงกันข้ามเนื่องจากอิเล็กตรอนไม่สามารถแยกกันได้เพื่อให้ได้อิเล็กตรอนเพิ่มขึ้นอะตอมต้องดูดซับอะตอมที่อยู่ใกล้เคียง หรือจากอิเล็กตรอนลอยอิสระ กลไกของอิเล็กตรอนเป็นเช่นนั้นถ้ามีอะตอมที่มีประจุลบใกล้กับอะตอมที่มีประจุเป็นบวกอิเล็กตรอนบางตัวจะเคลื่อนที่จนกว่าอะตอมทั้งสองจะมีประจุเท่ากัน
ไฟฟ้า
กระแสไฟฟ้าเป็นเพียงการไหลของอิเล็กตรอนจากพื้นที่ที่มีอะตอมที่มีประจุลบจำนวนมากไปยังพื้นที่ที่มีประจุที่มีประจุบวกจำนวนมาก ปฏิกิริยาเคมีบางอย่างสามารถสร้างสถานการณ์ที่เรามีหนึ่งโหนดที่มีอะตอมที่มีประจุลบจำนวนมาก (เรียกว่า "แอโนด") และอีกโหนดที่มีอะตอมที่มีประจุบวกจำนวนมาก (เรียกว่า "แคโทด") หากเราเชื่อมต่อสองโหนดที่มีประจุตรงข้ามกับลวดมวลของอิเล็กตรอนจะไหลจากขั้วบวกไปยังแคโทดและการไหลนี้เป็นสิ่งที่เราเรียกว่า "กระแสไฟฟ้า"
สายไฟทั้งหมดไม่สามารถส่งอิเล็กตรอนได้อย่างเท่าเทียมกันอย่างง่ายดายอิเล็กตรอนไหลได้ง่ายมากในวัสดุ "ทำ" มากกว่าวัสดุ "ต้านทาน" วัสดุ "ตัวนำ" มีความต้านทานไฟฟ้าต่ำ (เช่นสายทองแดงในสายเคเบิล) และวัสดุ "ต้านทาน" มีความต้านทานไฟฟ้าสูง (เช่นฉนวนสายยาง) วัสดุที่น่าสนใจบางอย่างเรียกว่าเซมิคอนดักเตอร์ (เช่นซิลิกอน) เนื่องจากสามารถเปลี่ยนความต้านทานได้ง่ายภายใต้เงื่อนไขบางประการเซมิคอนดักเตอร์อาจทำหน้าที่เป็นตัวนำและในสภาวะอื่น ๆ มันอาจกลายเป็นตัวต้านทาน
กระแสไฟฟ้ามักชอบที่จะไหลผ่านวัสดุที่มีความต้านทานน้อยที่สุดดังนั้นหากขั้วลบและขั้วบวกเชื่อมต่อกับสายไฟสองเส้นสายหนึ่งมีความต้านทานสูงมากและอีกสายหนึ่งที่มีความต้านทานต่ำมากอิเล็กตรอนส่วนใหญ่จะไหลผ่านสายต้านทานต่ำและเกือบ ไม่มีการไหลผ่านวัสดุที่มีความต้านทานสูง
ยุคกลาง
สวิทช์และทรานซิสเตอร์
Switch / Flip-Flops เป็นเหมือนสวิตช์ไฟปกติของคุณสามารถวางสวิตช์ไว้ระหว่างลวดสองชิ้นเพื่อตัดและ / หรือคืนกระแสไฟฟ้า ทรานซิสเตอร์ทำงานเหมือนกับสวิตช์ไฟยกเว้นว่าแทนที่จะเชื่อมต่อและปลดสายไฟทางกายภาพทรานซิสเตอร์ก็จะเชื่อมต่อ / ตัดการไหลของกระแสไฟฟ้าโดยการเปลี่ยนความต้านทานของมันขึ้นอยู่กับว่ามีกระแสไฟฟ้าในโหนดฐานและคุณอาจเดาได้แล้ว / รู้, ทรานซิสเตอร์ทำจากเซมิคอนดักเตอร์เพราะเราสามารถเปลี่ยนเซมิคอนดักเตอร์ให้เป็นตัวต้านทานหรือตัวนำในการเชื่อมต่อหรือตัดกระแสไฟฟ้า
ประเภทสามัญหนึ่งของทรานซิสเตอร์คือNPN Bipolar Junction Transistor (BJT) มีสามโหนด: "ฐาน", "ตัวสะสม" และ "ตัวส่งสัญญาณ" ใน NPN BJT กระแสไฟฟ้าสามารถไหลจากโหนด "ตัวปล่อย" ไปยังโหนด "ตัวสะสม" เฉพาะเมื่อมีการเรียกเก็บค่าโหนด "ฐาน" เมื่อไม่ได้ชาร์จโหนดฐานจะไม่มีอิเล็กตรอนไหลผ่านและเมื่อมีการชาร์จโหนดฐานอิเล็กตรอนก็จะไหลระหว่างอิมิตเตอร์และตัวสะสม
พฤติกรรมของทรานซิสเตอร์
(ฉันขอแนะนำให้คุณอ่านสิ่งนี้ก่อนดำเนินการต่อเพราะสามารถอธิบายได้ดีกว่าฉันด้วยกราฟิกแบบอินเทอร์แอคทีฟ)
สมมติว่าเรามีทรานซิสเตอร์เชื่อมต่อกับแหล่งจ่ายไฟที่ฐานและตัวสะสมแล้วเราต่อสายเอาท์พุทใกล้กับตัวสะสม (ดูรูปที่ 3 ในhttp://www.spsu.edu/cs/faculty/bbrown/web_lectures / ทรานซิสเตอร์ / )
เมื่อเราใช้กระแสไฟฟ้ากับฐานหรือตัวสะสมจะไม่มีกระแสไฟฟ้าไหลเลยเนื่องจากไม่มีไฟฟ้าที่จะพูดถึง:
B C | E O
0 0 | 0 0
เมื่อเราใช้ไฟฟ้ากับตัวสะสม แต่ไม่ใช่ฐานไฟฟ้าจะไม่สามารถไหลไปยังตัวปล่อยเนื่องจากฐานกลายเป็นวัสดุที่มีความต้านทานสูงดังนั้นไฟฟ้าจึงหนีไปยังสายออก:
B C | E O
0 1 | 0 1
เมื่อเราใช้ไฟฟ้ากับฐาน แต่ไม่ใช่ตัวเก็บประจุก็ไม่มีกระแสไฟฟ้าไหลได้เนื่องจากไม่มีความแตกต่างของประจุระหว่างตัวสะสมและตัวปล่อย:
B C | E O
1 0 | 0 0
เมื่อเราใช้ไฟฟ้ากับทั้งฐานและตัวสะสมเราจะได้กระแสไฟฟ้าที่ไหลผ่านทรานซิสเตอร์ แต่เนื่องจากตอนนี้ทรานซิสเตอร์มีความต้านทานต่ำกว่าเอาท์พุทเกือบจะไม่มีกระแสไฟฟ้าไหลผ่านเอาท์พุต:
B C | E O
1 1 | 1 O
ประตูลอจิก
เมื่อเราเชื่อมต่ออีซีแอลของทรานซิสเตอร์หนึ่ง (E1) กับตัวเก็บรวบรวมของทรานซิสเตอร์อีกตัว (C2) แล้วเราเชื่อมต่อเอาท์พุทใกล้กับฐานของทรานซิสเตอร์ตัวแรก (O) (ดูรูปที่ 4 ในhttp://www.spsu.edu / cs / คณะ / bbrown / web_lectures / ทรานซิสเตอร์ / ) แล้วสิ่งที่น่าสนใจเกิดขึ้น สมมุติว่าเราใช้กระแสไฟฟ้ากับตัวเก็บรวบรวมทรานซิสเตอร์แรก (C1) เสมอและดังนั้นเราจึงเล่นกับโหนดฐานของทรานซิสเตอร์ (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
ขอสรุปตารางเพื่อให้เราเห็นเฉพาะ B1, B2 และ O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
แท้จริงและดูเถิดถ้าคุณคุ้นเคยกับบูลีนลอจิกและ / หรือจิกเกตคุณควรสังเกตว่าเรื่องนี้เป็นอย่างแม่นยำประตู NAND และถ้าคุณคุ้นเคยกับบูลีนลอจิกและ / หรือลอจิกเกตคุณอาจรู้ว่า NAND (รวมถึง NOR) นั้นใช้งานได้อย่างสมบูรณ์เช่นใช้ NAND เท่านั้นคุณสามารถสร้างประตูตรรกะอื่น ๆ ทั้งหมดและส่วนที่เหลือของความจริง ตาราง คุณสามารถออกแบบชิปคอมพิวเตอร์ทั้งหมดโดยใช้ประตู NAND เพียงอย่างเดียว
ในความเป็นจริงแล้วซีพียูส่วนใหญ่เป็น (หรือเคยเป็นหรือไม่) ได้รับการออกแบบโดยใช้ NAND เท่านั้นเนื่องจากมีราคาถูกกว่าการผลิตมากกว่าการใช้ NAND, NOR, AND, OR เป็นต้น
รับตัวดำเนินการบูลีนอื่นจาก NAND
ฉันจะไม่อธิบายถึงวิธีการทำให้ผู้ประกอบการบูลีนทั้งหมดเพียงไม่และประตูและคุณสามารถหาส่วนที่เหลือที่อื่น
ให้โอเปอเรเตอร์ NAND จากนั้นเราสามารถสร้างประตูไม่ได้
Given one input B
O = NAND(B, B)
Output O
ให้โอเปอเรเตอร์ NAND และ NOT จากนั้นเราสามารถสร้างประตู AND:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
เราสามารถสร้างประตูตรรกะอื่น ๆ ในลักษณะที่คล้ายกัน เนื่องจากเกต NAND ทำงานได้อย่างสมบูรณ์จึงเป็นไปได้ที่จะสร้างลอจิกเกตที่มีอินพุตมากกว่า 2 อินพุตและเอาต์พุตมากกว่า 1 อันฉันจะไม่พูดถึงวิธีสร้างเกทลอจิกที่นี่
อายุตรัสรู้
สร้างเครื่องทัวริงจากประตูบูลีน
CPU เป็นเพียงรุ่นที่ซับซ้อนกว่าของทัวริง การลงทะเบียน CPU เป็นสถานะภายในของเครื่องทัวริงและ RAM เป็นเทปของทัวริง
เครื่องทัวริง (CPU) สามารถทำสามสิ่ง:
- อ่าน 0 หรือ 1 จากเทป (อ่านเซลล์ของหน่วยความจำจาก RAM)
- เปลี่ยนสถานะภายใน (เปลี่ยนการลงทะเบียน)
- เลื่อนไปทางซ้ายหรือขวา (อ่านหลายตำแหน่งจาก RAM)
- เขียน 0 หรือ 1 ลงในเทป (เขียนไปยังเซลล์ของหน่วยความจำถึง RAM)
เพื่อจุดประสงค์ของเราเรากำลังสร้างเครื่องทัวริง 2 สัญลักษณ์ 3 สถานะของ Wolfram โดยใช้ combinatorial logic (CPU สมัยใหม่จะใช้ไมโครโค้ด แต่มันซับซ้อนกว่าที่จำเป็นสำหรับวัตถุประสงค์ของเรา)
ตารางสถานะของเครื่องทัวริงของ Wolfram (2,3) มีดังนี้:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
เราต้องการเข้ารหัสตารางสถานะด้านบนใหม่เป็นตารางความจริง:
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
ฉันจะไม่สร้างตรรกะประตูแบบนี้ (ฉันไม่แน่ใจว่าจะวาดมันใน SE อย่างไรและมันอาจจะมีขนาดใหญ่มาก) แต่เนื่องจากเรารู้ว่าประตู NAND เสร็จสมบูรณ์ตามหน้าที่เราจึงมีวิธี เพื่อค้นหาชุดประตู NAND ที่จะใช้ตารางความจริงนี้
คุณสมบัติที่สำคัญของเครื่องทัวริงคือมันเป็นไปได้ที่จะจำลองคอมพิวเตอร์โปรแกรมที่เก็บไว้โดยใช้เครื่องทัวริงที่มีตารางสถานะคงที่เท่านั้น ดังนั้น Universal Turing Machine สามารถอ่านโปรแกรมได้จาก Tape (RAM) แทนที่จะต้องมีคำสั่งฮาร์ดโค้ดในตารางสถานะภายใน กล่าวอีกนัยหนึ่ง (2,3) เครื่องทัวริงของเราสามารถอ่านคำแนะนำได้จาก I1, I2 พิน (เป็นซอฟต์แวร์) แทนที่จะเป็นฮาร์ดโค้ดในการติดตั้งลอจิกเกท (เป็นฮาร์ดแวร์)
Microcodes
เนื่องจากความซับซ้อนที่เพิ่มขึ้นของซีพียูสมัยใหม่มันจึงยากที่จะใช้ตรรกะ combinatorial เพียงอย่างเดียวในการออกแบบ CPU ทั้งหมด CPU ที่ทันสมัยมักจะออกแบบมาเป็นล่ามของคำสั่งไมโคร microcode เป็นโปรแกรมขนาดเล็กที่ฝังอยู่ใน CPU ที่ CPU ใช้เพื่อแปลรหัสเครื่องจริง ตัวแปลไมโครโค้ดตัวนี้ได้รับการออกแบบโดยใช้ตรรกะเชิงผสม
ลงทะเบียนแคชและ RAM
เราลืมอะไรบางอย่างข้างต้น เราจะจำบางสิ่งได้อย่างไร เราจะใช้เทปและ RAM ได้อย่างไร คำตอบนั้นอยู่ในส่วนประกอบอิเล็กทรอนิกส์ที่เรียกว่าตัวเก็บประจุ ตัวเก็บประจุเป็นเหมือนแบตเตอรี่ที่ชาร์จไฟได้หากประจุถูกเก็บประจุมันจะเก็บอิเล็กตรอนเพิ่มและมันก็สามารถคืนอิเล็กตรอนกลับไปยังวงจรได้
ในการเขียนถึงตัวเก็บประจุเราเติมตัวเก็บประจุด้วยอิเล็กตรอน (เขียน 1) หรือระบายอิเล็กตรอนทั้งหมดลงในตัวเก็บประจุจนกว่ามันจะว่างเปล่า (เขียน 0) ในการอ่านค่าของตัวเก็บประจุเราพยายามปลดปล่อยมัน ถ้าเมื่อเราพยายามที่จะปล่อยไม่มีกระแสไฟฟ้าไหลตัวเก็บประจุจะว่างเปล่า (อ่าน 0) แต่ถ้าเราตรวจจับกระแสไฟฟ้าจะต้องชาร์จตัวเก็บประจุ (อ่าน 1) คุณอาจสังเกตเห็นว่าการอ่านตัวเก็บประจุจะเก็บประจุอิเล็กตรอนของมัน RAM ที่ทันสมัยมีวงจรที่จะชาร์จตัวเก็บประจุเป็นระยะเพื่อให้พวกเขาสามารถเก็บความทรงจำไว้ได้ตราบใดที่มีกระแสไฟฟ้า
มีหลายประเภทของตัวเก็บประจุที่ใช้ใน CPU, CPU ที่ลงทะเบียนและแคช CPU ระดับสูงทำโดยใช้ "ตัวเก็บประจุ" ความเร็วสูงที่สร้างขึ้นจริงจากทรานซิสเตอร์ (ดังนั้นจึงแทบจะไม่มี "ความล่าช้า" ในการอ่าน / เขียนจาก พวกเขา) สิ่งเหล่านี้เรียกว่าสแตติกแรม (SRAM); ในขณะที่แรมหน่วยความจำหลักใช้พลังงานต่ำ แต่ตัวเก็บประจุที่ช้ากว่าและราคาถูกกว่ามากเรียกว่า Dynamic RAM (DRAM)
นาฬิกา
ส่วนประกอบที่สำคัญมากของ CPU คือนาฬิกา นาฬิกาเป็นองค์ประกอบที่ "ติ๊ก" เป็นประจำเพื่อประสานการประมวลผล โดยทั่วไปนาฬิกาจะประกอบด้วยควอตซ์หรือวัสดุอื่น ๆ ที่มีระยะเวลาการสั่นที่รู้จักกันดีและค่อนข้างคงที่และวงจรนาฬิการักษาและวัดการแกว่งนี้เพื่อรักษาความรู้สึกของเวลา
การทำงานของ CPU นั้นทำระหว่างสัญญาณนาฬิกาและการอ่าน / เขียนจะถูกทำในเห็บเพื่อให้แน่ใจว่าส่วนประกอบทั้งหมดมีการเคลื่อนไหวแบบซิงโครนัสและไม่เหยียบย่ำกันในขณะที่อยู่ในสถานะระหว่างกลาง ในเครื่องทัวริงของเรา (2,3) ระหว่างนาฬิกาจะทำเครื่องหมายไฟฟ้าผ่านประตูลอจิกเพื่อคำนวณเอาต์พุตจากอินพุต (I1, I2, R (t)) และในติ๊กนาฬิกาตัวเขียนเทปจะเขียน O1, O2 ลงบนเทปมอเตอร์จะเคลื่อนที่ขึ้นอยู่กับค่าของ M และการลงทะเบียนภายในจะถูกเขียนจากค่า R (t + 1) จากนั้นตัวอ่านเทป จะอ่านเทปปัจจุบันและทำการชาร์จลงใน I1, I2 และรีจิสเตอร์ภายในจะอ่านกลับไปที่ R (t)
การพูดคุยกับอุปกรณ์ต่อพ่วง
สังเกตวิธีการ (2,3) ทัวริงเครื่องเชื่อมต่อกับมอเตอร์ นั่นคือมุมมองที่ง่ายมากของวิธีที่ CPU อาจเชื่อมต่อกับฮาร์ดแวร์ที่กำหนดเอง ฮาร์ดแวร์โดยพลการสามารถฟังหรือเขียนลงในสายสัญญาณที่เฉพาะเจาะจงสำหรับอินพุต / เอาต์พุต ในกรณีของเครื่องทัวริง (2,3) ส่วนต่อประสานกับมอเตอร์นั้นเป็นเพียงสายไฟเส้นเดียวที่สั่งให้มอเตอร์หมุนตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา
สิ่งที่เหลือที่ไม่ได้กล่าวไว้ในเครื่องนี้คือมอเตอร์ต้องมี "นาฬิกา" อีกอันที่ทำงานพร้อมกันกับ "นาฬิกา" ภายในของเครื่องเพื่อให้ทราบว่าเมื่อใดจะเริ่มและหยุดการทำงานดังนั้นนี่คือตัวอย่างของการส่งข้อมูลแบบซิงโครนัส ทางเลือกอื่นที่ใช้กันทั่วไปการส่งแบบอะซิงโครนัสจะใช้สายอื่นที่เรียกว่าสายการขัดจังหวะเพื่อสื่อสารจุดการซิงโครไนซ์ระหว่าง CPU และอุปกรณ์แบบอะซิงโครนัส
ยุคดิจิทัล
รหัสเครื่องและส่วนประกอบ
ภาษาแอสเซมบลีเป็นตัวช่วยจำที่มนุษย์สามารถอ่านได้สำหรับรหัสเครื่อง ในกรณีที่ง่ายที่สุดมีการแม็พแบบหนึ่งต่อหนึ่งระหว่างชุดประกอบกับรหัสเครื่อง แม้ในภาษาแอสเซมบลีที่ทันสมัยคำแนะนำบางอย่างอาจแมปกับหลาย opcodes
ภาษาโปรแกรม
เราทุกคนคุ้นเคยกับสิ่งนี้ใช่ไหม?
ในที่สุดก็เสร็จฉันพิมพ์ทั้งหมดนี้ในเวลาเพียง 4 ชั่วโมงดังนั้นฉันแน่ใจว่ามีข้อผิดพลาดบางอย่าง (โดยหลักแล้วฉันเป็นโปรแกรมเมอร์ไม่ใช่วิศวกรไฟฟ้าหรือนักฟิสิกส์ดังนั้นอาจมีหลายสิ่งที่ผิดอย่างโจ่งแจ้ง) กรุณาถ้าคุณพบข้อผิดพลาดอย่าลังเลที่จะให้ @yell หรือแก้ไขด้วยตัวคุณเองถ้าคุณมีตัวแทนหรือสร้างคำตอบเพิ่มเติม