Tôi hiện đang là học sinh trung học, và tôi đã quan tâm đến kỹ thuật điện / máy tính, đặc biệt là thiết kế bộ vi xử lý. Tôi đã đọc Code của Charles Petzold , và đã bắt đầu đọc Wikibook Thiết kế bộ vi xử lý (dường như chưa hoàn chỉnh.) Thông qua việc đọc Code , tôi hiểu logic cơ bản đằng sau CPU và đã bắt đầu xây dựng một trong LogiSim. Chương 17 trong Code chi tiết CPU tôi muốn xây dựng, nhưng các mạch thiếu các thành phần chính - tín hiệu đồng hồ và giải mã lệnh. Một số tín hiệu đồng hồ có vẻ khá rõ ràng (PC dường như cần tín hiệu đồng hồ ổn định) nhưng một số tín hiệu khác (như cách chốt giá trị RAM) tôi đã phải suy nghĩ và cố gắng làm việc.
Tôi có thể xây dựng một bộ tích lũy hoạt động (tôi không thể gọi chính xác là ALU, vì nó thiếu phần L) chuyển đổi giữa phép cộng và phép trừ với một đầu vào duy nhất và tôi hiểu đây là tất cả những gì tôi cần cho phần số học - một khi tôi nhận được các opcodes nhảy hoạt động, tôi có thể thực hiện phép nhân và chia trong mã. Phần tôi đang vật lộn với phần giải mã hướng dẫn. Thông qua một số tìm kiếm của google, tôi thấy rằng mỗi opcode cần được hiểu là nhiều vi lệnh, nhưng tôi không biết làm thế nào tôi cần nó để hoạt động. Hiện tại, bộ giải mã lệnh của tôi chỉ là một mạch phân tích kết hợp với đầu ra nhị phân duy nhất cho mỗi opcode - tất cả là 13.
Cách thức hoạt động của mã là nó có một giá trị mã 8 bit (tôi chỉ sử dụng byte cấp thấp) và sau đó hai giá trị địa chỉ 8 bit riêng biệt mà sau đó tôi kết hợp thành đầu vào địa chỉ 16 bit cho RAM. Để chốt các giá trị, tôi có một bộ đếm riêng đếm đến 10b và sau đó đặt lại thành 00b. Đây là đầu vào đồng hồ cho mỗi chốt lần lượt (đối với ba chốt, có a, b và c. Đồng hồ thứ hai có 1 trong khi b & c là 0, sau đó b là 1 và 1 & c là 0, sau đó b c là một và 1 & b là 0, sau đó nó đặt lại). Nhưng theo các hướng dẫn như ADD 000Ah, PC nhảy lên 000AH ... được cho là đã được thêm vào bộ tích lũy, nhưng thực sự bị khóa vào chốt mã, và sau đó được hiểu là opcode tiếp theo, khiến cho toàn bộ hoạt động khùng.
Tôi cảm thấy như mình đang thiếu một số thông tin lớn liên quan đến giải mã hướng dẫn và cách tôi cần thực hiện các tín hiệu đồng hồ ...
Dưới đây là các tập tin .circ LogiSim: https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitAdder.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitAdderSubtractor.circ https: // dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitInverter.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/8BitLatch.circ https://dl.dropboxusercontent.com/16/16 ID.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/PetzoldMk5.circ
PetzoldMk5 là CPU chính, dựa trên các tệp khác được nhập dưới dạng thư viện.
Đây là danh sách các mã (tất cả nhị phân):
Load 0001
Add 0010
Add w/ Carry 0011
Sub 0100
Sub w/ Borrow 0101
Jump 0110
Jump w/ Carry 0111
Jump W/ 0 1000
Jump w/o C 1001
Jump W/o 0 1010
Store 1011
Halt 1100
Reset 1101