Prosesor TTA. Bagian 1

Kata pengantar


Gagasan untuk membuat prosesor sederhana saya sendiri, jika boleh saya sebut itu, saya bersemangat untuk waktu yang lama. Pilihan arsitektur adalah masalah yang ambigu, tetapi karena sebagian minimalis, saya ingin mengimplementasikan sesuatu yang sederhana, pada saat yang sama kuat dan dapat diperluas, TTA sempurna untuk ini.
Bagian 1.
Bagian 2.
Singkatnya, idenya adalah bahwa unit kontrol hanya akan memiliki satu perintah pergerakan data, dan perhitungan akan menjadi produk sampingan dari gerakan ini.

Saya akan menghidupkannya dalam sebuah program sederhana untuk menyusun dan mensimulasikan rangkaian logis dan listrik - Logisim , memilihnya karena kesederhanaan dan aksesibilitasnya, jika implementasi yang berhasil, direncanakan untuk menulis ulang ke Verilog .

Ketika membacanya lebih baik menyentuh proyek segera, itu dapat ditemukan di akhir artikel.

Blok kontrol


Unit kontrol adalah komponen utama. Untuk kesederhanaan, diputuskan untuk memilih 16 input dan 16 output, sebagai hasilnya, perintah yang diterima di unit kontrol adalah 8-bit, paruh pertama menunjuk ke salah satu input, yang lain ke salah satu output. Agar blok penerima memahami bahwa data datang kepadanya, 1 bit ditambahkan ke setiap input dari blok, biasanya disebut blok-blok ini blok fungsional.

Begitu:



Penyimpanan


Agar unit kontrol untuk menjalankan program, itu harus disimpan di suatu tempat, memori akan menjadi unit fungsional, salah satu output yang akan terhubung ke bus unit kontrol.

Begitu:


Input terendah adalah sinyal jam, yang paling kiri adalah data input, yang paling kanan adalah data output, mereka juga perintah BU dan yang terakhir adalah yang berfungsi sebagai bendera, melaporkan kedatangan data. Ketika data diterima, itu ditulis ke penghitung, yang menunjukkan perintah saat ini, dengan setiap pulsa jam, penghitung meningkat, dan unit kontrol mentransfer data dari satu FU ke yang lain.

Fu sederhana lainnya


Buat FU sederhana yang akan melakukan tindakan penambahan dan pengurangan biasa.
Templat FU terlihat seperti ini: pada input terdapat register 8-bit sesuai dengan jumlah input, penulisan kepada mereka dilakukan setelah menerima data. Keluaran juga dapat berisi register tempat jawaban akan disimpan, tetapi ini tidak perlu bagi penambah.

Dengan demikian, penambah dan subtrakter akan terlihat seperti ini:



Perangkat jadi


Mari kita hubungkan memori dan unit kontrol, dan setelah itu kita akan mencoba membuat unit kontrol baru dan menulis sebuah program.
Tombol akan bertindak sebagai sinyal jam.

Jadi koneksinya:


Sekarang hubungkan adder dan subtracter, serta dua konstanta input:


Semuanya siap untuk menulis sebuah program, ia akan melakukan serangkaian aksi dangkal: menambahkan satu ke nilai sebelumnya dari penambah, dan kemudian pergi ke permulaan dengan menggunakan transisi relatif (untuk ini, sebuah subtractor dibuat: 3).

Mari kita menulis sebuah program.

Awalnya, semua register adalah nol, sehingga tidak masuk akal, perintah pertama adalah mengirim unit ke salah satu input adder (In3 -> O2), mengirim output adder ke input kedua (In1 -> O1), mengirim alamat memori saat ini ke input subtractor (In0 -> O3), mengirim perubahan alamat ke input lain dari subtractor, itu akan dikurangi (In4 -> O4), setelah subtractor pergi ke input dari pointer alamat, sehingga menyelesaikan transisi (In2 -> O0).

Programnya terlihat seperti ini:

1. In3 -> O2
2. In1 -> O1
3. In0 -> O3
4. In4 -> O4
5. In2 -> O0

Dalam memori:


Itu saja. Program ini berfungsi dengan baik. Saya berencana untuk membuat lebih banyak FU dan membuat koneksi mereka dengan unit kontrol lebih nyaman, dengan cara FU praktis perangkat ControlFlow. Anda juga dapat menghubungkan beberapa unit kontrol bersama, yaitu, membuat jaringan perangkat tersebut.

Terimakasih atas perhatiannya!

GitHub

All Articles