Tôi sẽ bắt đầu từ cấp thấp nhất có thể có liên quan (tôi có thể bắt đầu từ cấp thấp hơn, nhưng chúng có thể quá không liên quan), bắt đầu từ Atom, đến Điện, đến Transitor, tới Cổng logic, cho Mạch tích hợp (Chip / CPU ) và kết thúc tại hội (Tôi giả sử bạn đã quen thuộc với các cấp cao hơn).
Ở thời điểm bắt đầu
Nguyên tử
Nguyên tử là một cấu trúc bao gồm các electron, proton và neutron (bản thân chúng bao gồm các hạt cơ bản ). Phần thú vị nhất của nguyên tử cho máy tính và điện tử là các electron vì electron là điện thoại di động (nghĩa là nó có thể di chuyển xung quanh tương đối dễ dàng, không giống như các proton và neutron khó di chuyển hơn) và chúng có thể tự trôi nổi mà không bị giữ bên trong Một nguyên tử.
Thông thường, mỗi nguyên tử có số lượng proton và electron bằng nhau, chúng ta gọi đây là trạng thái "trung tính". Khi nó xảy ra, một nguyên tử có thể bị mất hoặc có thêm electron. Các nguyên tử ở trạng thái không cân bằng này được gọi là nguyên tử "tích điện dương" (nhiều proton hơn electron) và nguyên tử "tích điện âm" (nhiều electron hơn proton) tương ứng.
Các điện tử là không thể cấu trúc và không thể phá hủy (không như vậy trong cơ học lượng tử, nhưng điều đó không liên quan đến mục đích của chúng tôi); vì vậy nếu một nguyên tử mất electron, một số nguyên tử khác ở gần đó phải nhận thêm electron hoặc electron phải giải phóng thành electron nổi tự do, ngược lại vì electron không thể bị phá hủy, để có thêm electron, một nguyên tử phải loại bỏ các nguyên tử gần đó hoặc từ một electron nổi tự do. Cơ học của các electron là nếu có một nguyên tử tích điện âm gần một nguyên tử tích điện dương, thì một số electron sẽ di chuyển cho đến khi cả hai nguyên tử có cùng điện tích.
Điện lực
Điện chỉ là một dòng điện tử từ một khu vực có số lượng nguyên tử tích điện âm rất cao đến khu vực có số lượng nguyên tử tích điện dương rất cao. Một số phản ứng hóa học có thể tạo ra tình huống trong đó chúng ta có một nút có nhiều nguyên tử tích điện âm (gọi là "cực dương") và một nút khác có nhiều nguyên tử tích điện dương (gọi là "cực âm"). Nếu chúng ta kết nối hai nút tích điện trái dấu bằng một dây, khối lượng electron sẽ chảy từ cực dương sang cực âm, và dòng chảy này là cái mà chúng ta gọi là "dòng điện".
Không phải tất cả các dây có thể truyền các electron dễ dàng như nhau, các electron dễ dàng di chuyển trong các vật liệu "dẫn" hơn so với các vật liệu "kháng". Vật liệu "dẫn điện" có điện trở thấp (ví dụ dây đồng trong cáp) và vật liệu "kháng" có điện trở cao (ví dụ cách điện cáp cao su). Một số vật liệu thú vị được gọi là chất bán dẫn (ví dụ như silic), vì chúng có thể dễ dàng thay đổi điện trở của chúng, trong một số điều kiện, chất bán dẫn có thể hoạt động như một chất dẫn và trong các điều kiện khác, nó có thể biến thành điện trở.
Điện luôn thích truyền qua vật liệu có điện trở nhỏ nhất, vì vậy nếu cực âm và cực dương được nối với hai dây, một dây có điện trở rất cao và dây còn lại có điện trở rất thấp, phần lớn các electron sẽ chạy qua cáp điện trở thấp và gần như không có dòng chảy qua vật liệu kháng cao.
Thời trung cổ
Công tắc và bóng bán dẫn
Công tắc / Dép lật giống như công tắc đèn thông thường của bạn, một công tắc có thể được đặt giữa hai phần dây để cắt và / hoặc khôi phục dòng điện. Các bóng bán dẫn hoạt động giống hệt như một công tắc đèn, ngoại trừ việc thay vì kết nối và ngắt kết nối vật lý, một bóng bán dẫn kết nối / ngắt kết nối dòng điện bằng cách thay đổi điện trở của nó tùy thuộc vào việc có điện trong nút cơ sở hay không, như bạn có thể đã đoán / biết, bóng bán dẫn được chế tạo từ chất bán dẫn vì chúng ta có thể thay đổi chất bán dẫn để trở thành điện trở hoặc dây dẫn để kết nối hoặc ngắt dòng điện.
Một loại bóng bán dẫn phổ biến, Transitor Bipolar Junction Transitor (BJT), có ba nút: "cơ sở", "bộ thu" và "bộ phát". Trong NPT BJT, điện có thể truyền từ nút "bộ phát" đến nút "bộ thu" chỉ khi nút "cơ sở" được sạc. Khi nút cơ sở không được tích điện, thực tế không có electron nào có thể chảy qua và khi nút cơ sở được tích điện, thì các electron có thể chảy giữa bộ phát và bộ thu.
Hành vi của một bóng bán dẫn
(Tôi thực sự khuyên bạn nên đọc qua điều này trước khi tiếp tục, vì nó có thể giải thích tốt hơn tôi với đồ họa tương tác)
Giả sử chúng ta có một bóng bán dẫn được kết nối với một nguồn điện ở cơ sở và bộ thu của nó, và sau đó chúng ta nối dây cáp Đầu ra gần bộ thu của nó (xem Hình 3 trong http://www.spsu.edu/cs/facemony/bbrown/web_lectures / bóng bán dẫn / ).
Khi chúng ta áp dụng điện cho cả cơ sở lẫn người thu gom, thì không có dòng điện nào có thể chảy cả vì không có điện để nói về:
B C | E O
0 0 | 0 0
Khi chúng ta sử dụng điện cho bộ thu nhưng không phải là cơ sở, điện không thể chạy đến bộ phát vì cơ sở trở thành vật liệu có điện trở cao, do đó, điện thoát ra khỏi dây Đầu ra:
B C | E O
0 1 | 0 1
Khi chúng ta áp dụng điện cho cơ sở nhưng không phải là bộ thu, cũng không có dòng điện nào có thể chảy do không có sự chênh lệch điện tích giữa bộ thu và bộ phát:
B C | E O
1 0 | 0 0
Khi chúng ta sử dụng điện cho cả cơ sở và bộ thu, chúng ta sẽ có dòng điện chạy qua bóng bán dẫn, nhưng vì bóng bán dẫn bây giờ có điện trở thấp hơn dây Đầu ra, gần như không có dòng điện nào chạy qua dây Đầu ra:
B C | E O
1 1 | 1 O
Cổng logic
Khi chúng ta kết nối bộ phát của một bóng bán dẫn (E1) với bộ thu của một bóng bán dẫn khác (C2) và sau đó chúng ta kết nối một đầu ra gần đế của bóng bán dẫn đầu tiên (O) (xem Hình 4 trong http://www.spsu.edu / cs / khoa / bbrown / web_lectures / bóng bán dẫn / ), sau đó một cái gì đó thú vị xảy ra. Chúng ta cũng nói rằng chúng ta luôn luôn sử dụng điện cho bộ thu của bóng bán dẫn đầu tiên (C1) và vì vậy chúng ta chỉ chơi xung quanh với các nút cơ sở của bóng bán dẫn (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
Hãy tóm tắt bảng để chúng ta chỉ thấy B1, B2 và O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
Xin lưu ý , nếu bạn quen thuộc với Logic Boolean và / hoặc Cổng logic, bạn nên chú ý rằng đây chính xác là cổng NAND. Và nếu bạn đã quen thuộc với Logic Boolean và / hoặc Cổng logic, bạn cũng có thể biết rằng một NAND (cũng như NOR) đã hoàn thành về mặt chức năng , tức là chỉ sử dụng NAND, bạn có thể xây dựng tất cả các cổng logic khác và phần còn lại của sự thật những cái bàn. Nói cách khác, bạn có thể thiết kế toàn bộ chip máy tính chỉ sử dụng cổng NAND.
Trên thực tế, hầu hết các CPU được (hoặc trước đây là?) Được thiết kế chỉ sử dụng NAND vì nó rẻ hơn để sản xuất so với sử dụng kết hợp NAND, NOR, AND, OR, v.v.
Xuất phát từ các toán tử boolean khác từ NAND
Tôi sẽ không mô tả làm thế nào để tạo tất cả các toán tử boolean, chỉ cổng KHÔNG và cổng AND, bạn có thể tìm thấy phần còn lại ở một nơi khác.
Đưa ra một toán tử NAND, sau đó chúng ta có thể xây dựng một cổng KHÔNG:
Given one input B
O = NAND(B, B)
Output O
Đưa ra một toán tử NAND và KHÔNG, sau đó chúng ta có thể xây dựng một cổng AND:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
Chúng ta có thể xây dựng các cổng logic khác theo cách tương tự. Vì cổng NAND đã hoàn thành về mặt chức năng , nên cũng có thể xây dựng các cổng logic có nhiều hơn 2 đầu vào và hơn 1 đầu ra, tôi sẽ không thảo luận về cách xây dựng các cổng logic như vậy ở đây.
Thời đại khai sáng
Xây dựng máy Turing từ Boolean Gates
CPU chỉ là phiên bản phức tạp hơn của Máy Turing. Các thanh ghi CPU là trạng thái bên trong của Turing Machine và RAM là băng của Turing Machine.
Một máy Turing (CPU) có thể làm ba việc:
- đọc 0 hoặc 1 từ băng (đọc một ô nhớ từ RAM)
- thay đổi trạng thái bên trong của nó (thay đổi thanh ghi của nó)
- di chuyển sang trái hoặc phải (đọc nhiều vị trí từ RAM)
- ghi 0 hoặc 1 vào băng (ghi vào ô của bộ nhớ vào RAM)
Với mục đích của chúng tôi, chúng tôi đang xây dựng Máy Turing 2 biểu tượng 3 trạng thái của Wolfram bằng logic tổ hợp (CPU hiện đại sẽ sử dụng vi mã, nhưng chúng phức tạp hơn mức cần thiết cho mục đích của chúng tôi).
Bảng trạng thái của Máy Turing của Wolfram (2,3) như sau:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
Chúng tôi muốn mã hóa lại bảng trạng thái ở trên dưới dạng bảng chân lý:
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
Tôi thực sự sẽ không xây dựng một cổng logic như vậy (Tôi không chắc chắn làm thế nào để vẽ nó trong SE và nó có thể sẽ khá lớn), nhưng vì chúng tôi biết rằng cổng NAND đã hoàn thiện về mặt chức năng , nên chúng tôi có cách để tìm một loạt các cổng NAND sẽ thực hiện bảng chân lý này.
Một tính chất quan trọng của Turing Machine là có thể mô phỏng một máy tính chương trình được lưu trữ bằng máy Turing chỉ có bảng trạng thái cố định. Do đó, bất kỳ Máy Turing phổ dụng nào cũng có thể đọc chương trình của nó từ Băng (RAM) thay vì phải được mã hóa cứng vào bảng trạng thái bên trong. Nói cách khác, Máy Turing (2,3) của chúng tôi có thể đọc hướng dẫn của nó từ các chân I1, I2 (dưới dạng phần mềm) thay vì được mã hóa cứng khi triển khai cổng logic (dưới dạng phần cứng).
Mã vi
Do sự phức tạp ngày càng tăng của các CPU hiện đại, việc sử dụng logic tổ hợp trở nên cực kỳ khó khăn để thiết kế toàn bộ CPU. CPU hiện đại thường được thiết kế như một trình thông dịch của hướng dẫn vi mã; một microcode là một chương trình nhỏ được nhúng trong CPU được CPU sử dụng để diễn giải mã máy thực tế. Bản thân trình thông dịch vi mã này thường được thiết kế bằng logic tổ hợp.
Đăng ký, Cache và RAM
Chúng tôi đã quên một cái gì đó ở trên. Làm thế nào để chúng ta nhớ một cái gì đó? Làm thế nào để chúng tôi thực hiện các băng và RAM? Câu trả lời là trong một thành phần điện tử gọi là Tụ. Một tụ điện giống như một pin sạc, nếu một tụ điện được sạc, nó sẽ giữ lại các điện tử phụ và nó cũng có thể trả lại các điện tử cho mạch điện.
Để ghi vào tụ điện, chúng ta lấp đầy tụ điện bằng điện tử (viết 1) hoặc rút hết điện tử trong tụ điện cho đến khi trống (viết 0). Để đọc giá trị của một tụ điện, chúng tôi cố gắng xả nó. Nếu, khi chúng ta cố gắng phóng điện, không có dòng điện chạy, thì tụ điện trống (đọc 0), nhưng nếu chúng ta phát hiện ra điện thì phải sạc tụ điện (đọc 1). Bạn có thể nhận thấy rằng việc đọc một tụ điện làm cạn kiệt kho điện tử của nó, RAM hiện đại có mạch để sạc lại định kỳ tụ điện để chúng có thể giữ lại bộ nhớ của mình miễn là có điện.
Có nhiều loại tụ điện được sử dụng trong CPU, các thanh ghi CPU và bộ nhớ CPU cấp cao hơn được tạo ra bằng cách sử dụng các "tụ điện" tốc độ rất cao thực sự được chế tạo từ các bóng bán dẫn (do đó hầu như không có "độ trễ" để đọc / ghi từ chúng), chúng được gọi là RAM tĩnh (SRAM); trong khi RAM bộ nhớ chính được tạo ra bằng cách sử dụng công suất thấp hơn, nhưng tụ điện chậm hơn và rẻ hơn nhiều, chúng được gọi là RAM động (DRAM).
Đồng hồ
Một thành phần rất quan trọng của CPU là đồng hồ. Đồng hồ là một thành phần "đánh dấu" thường xuyên để đồng bộ hóa quá trình xử lý. Đồng hồ thường chứa thạch anh hoặc các vật liệu khác có chu kỳ dao động nổi tiếng và tương đối ổn định, và mạch đồng hồ duy trì và đo dao động này để duy trì cảm giác về thời gian.
Các hoạt động của CPU được thực hiện giữa các dấu đồng hồ và đọc / ghi được thực hiện trong các dấu tick để đảm bảo rằng tất cả các thành phần di chuyển đồng bộ và không chà đạp vào nhau trong khi ở trạng thái trung gian. Trong (2,3) Máy Turing của chúng tôi, giữa các đồng hồ tích điện đi qua các cổng logic để tính toán đầu ra từ đầu vào (I1, I2, R (t)); và trong tiếng tích tắc của đồng hồ, người viết băng sẽ ghi O1, O2 vào băng, động cơ sẽ di chuyển tùy theo giá trị của M và thanh ghi bên trong được ghi từ giá trị của R (t + 1), sau đó là đầu đọc băng sẽ đọc băng hiện tại và nạp điện vào I1, I2 và thanh ghi bên trong được đọc lại về R (t).
Nói chuyện với thiết bị ngoại vi
Lưu ý cách (2,3) Turing Machine giao tiếp với động cơ của nó. Đó là một cái nhìn rất đơn giản về cách CPU có thể giao tiếp với một phần cứng tùy ý. Phần cứng tùy ý có thể nghe hoặc ghi vào một dây cụ thể cho đầu vào / đầu ra. Trong trường hợp cho (2,3) Turing Machine, giao diện của nó với động cơ chỉ là một dây duy nhất hướng dẫn động cơ quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ.
Điều còn lại chưa được trả lời trong chiếc máy này là Motor phải có một "đồng hồ" khác chạy đồng bộ với "đồng hồ" bên trong của Máy để biết khi nào bắt đầu và dừng chạy, vì vậy đây là một ví dụ về truyền dữ liệu đồng bộ . Cách truyền khác, truyền không đồng bộ thường được sử dụng khác sử dụng một dây khác, được gọi là đường ngắt, để giao tiếp các điểm đồng bộ hóa giữa CPU và thiết bị không đồng bộ.
Thời đại kỹ thuật số
Mã máy và lắp ráp
Ngôn ngữ hội là một bản ghi nhớ dễ đọc của con người đối với mã máy. Trong trường hợp đơn giản nhất, có một ánh xạ một-một giữa lắp ráp với mã máy; mặc dù trong các ngôn ngữ lắp ráp hiện đại, một số hướng dẫn có thể ánh xạ tới nhiều opcode.
Ngôn ngữ lập trình
Tất cả chúng ta đều quen thuộc với điều này phải không?
Phew, cuối cùng cũng xong, tôi đã gõ tất cả những thứ này chỉ trong 4 giờ, vì vậy tôi chắc chắn có lỗi ở đâu đó (tôi chủ yếu là lập trình viên, không phải kỹ sư điện cũng không phải nhà vật lý, vì vậy có thể có một số điều sai trái rõ ràng). Vui lòng nếu bạn tìm thấy một lỗi, đừng ngần ngại đưa ra @yell hoặc tự sửa nó nếu bạn có đại diện hoặc tạo một câu trả lời bổ sung.