Saat ini saya masih sekolah menengah pertama, dan saya sudah tertarik dengan teknik komputer / elektro, khususnya desain mikroprosesor. Saya telah membaca Kode oleh Charles Petzold ,, dan telah mulai membaca Wikibook Desain Mikroprosesor (yang tampaknya tidak lengkap.) Melalui membaca Kode , saya memahami logika dasar di balik CPU, dan mulai membangun satu di LogiSim. Bab 17 dalam Kode merinci CPU yang ingin saya bangun, tetapi sirkuit tidak memiliki komponen utama - sinyal jam, dan decoding instruksi. Beberapa sinyal clock tampaknya cukup jelas (PC tampaknya membutuhkan sinyal clock yang stabil) tetapi yang lain (seperti cara mengunci nilai RAM) Saya harus memikirkan dan mencoba untuk bekerja.
Saya dapat membangun akumulator yang berfungsi (itu tidak dapat secara akurat disebut ALU, saya pikir, karena tidak memiliki bagian L) yang beralih antara penambahan dan pengurangan dengan satu input, dan saya mengerti ini yang saya butuhkan untuk bagian aritmatika - begitu saya mendapatkan opcodes lompat bekerja, saya dapat menerapkan perkalian dan pembagian dalam kode. Bagian yang saya perjuangkan adalah decoding instruksi. Melalui beberapa pencarian google, saya melihat bahwa setiap opcode perlu diinterpretasikan sebagai beberapa microinstructions, tetapi saya bingung bagaimana saya membutuhkan ini untuk bekerja. Saat ini, instruksi decoder saya hanyalah rangkaian analisis kombinasional dengan output biner tunggal untuk setiap opcode - 13 secara keseluruhan.
Cara kode bekerja adalah ia memiliki satu nilai kode 8 bit (saya hanya menggunakan byte low-end), dan kemudian dua nilai alamat 8 bit terpisah yang kemudian saya gabungkan menjadi input alamat 16 bit ke RAM. Untuk mengunci nilai, saya memiliki penghitung terpisah yang menghitung hingga 10b dan kemudian reset ke 00b. Ini adalah input jam untuk setiap kait secara bergantian (untuk tiga kait, ada a, b, dan c. Jam kedua memiliki be 1 sedangkan b & c adalah 0, kemudian b adalah 1 dan 1 & c adalah 0, lalu c adalah satu dan 1 & b adalah 0, lalu reset). Tetapi pada instruksi seperti ADD 000Ah, PC melompat ke 000AH ... yang seharusnya ditambahkan ke dalam akumulator, tetapi sebenarnya terkunci ke dalam kait kode, dan kemudian ditafsirkan sebagai opcode berikutnya, yang membuat semuanya berjalan gila.
Saya merasa seperti saya kehilangan beberapa informasi besar mengenai decoding instruksi dan bagaimana saya perlu melakukan sinyal jam ...
Berikut adalah file .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/u/6167645/Petzold ID.circ https://dl.dropboxusercontent.com/u/61676438/PetzoldMk5/PetzoldMk5.circ
PetzoldMk5 adalah CPU utama, bergantung pada file lain yang akan diimpor sebagai perpustakaan.
Berikut daftar opcode (semua biner):
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