Terakhir kali saya melihat prosesor RISC 16-bit sederhana yang ditujukan untuk siswa. Butuh sedikit membantu pada dokumentasi serta memiliki file yang hilang, namun saya berhasil membuatnya mensimulasikan menggunakan alat internet gratis yang disebut Playground EDA. Kali ini, saya akan membawa Anda dengan detail kode serta persis bagaimana menjalankan simulasi.

Anda akan ingin merujuk ke publik sebelumnya jika Anda belum memeriksanya. Diagram serta tabel menyediakan ikhtisar tingkat tinggi yang akan membantu Anda memahami file yang dibahas dalam posting ini.

Jika Anda ingin memprogram ini pada FPGA asli, Anda akan memiliki sedikit pekerjaan yang harus dilakukan. Memori serta inisialisasi register dilakukan dalam metode yang berfungsi dengan baik untuk simulasi, namun tidak akan bekerja pada FPGA asli. Bagaimanapun, mari kita mulai!

File-by-File

Jika Anda mengambil setiap data secara individual, tidak satupun dari mereka yang sangat sulit untuk dipahami. Berikut ini kumuh cepat (saya memanfaatkan nama data yang akan saya gunakan dalam simulasi internet saya):

Parameter.v – Ini seperti data sertakan yang menetapkan beberapa definisi mendasar untuk setiap file lainnya.

prog.v – Ini adalah memori arah. Modul sederhana, dibutuhkan alamat serta menyajikan data untuk alamat itu. Petunjuk $ Readmemb membaca data dari data (test.prog).

register.v – file register. Ini hampir seperti memori arah namun memiliki dua port check out dan juga Anda dapat menuliskannya.

data.v – memori RAM. Ini hampir seperti register, namun lebih besar dengan port check out tunggal. Ada beberapa kode simulasi yang membuka data serta mencetak komentar memori, namun saya menghapusnya karena hanya untuk debugging. Konten pendahuluan berasal dari file test.data.

ALU.V – Anda akan percaya ini akan rumit, namun tidak. Hanya butuh dua input serta melakukan sesuatu untuk menghasilkan output. Sesuatu yang sederhana seperti menambah atau mengurangi. Selalu @ (*) memberi tahu Verilog untuk tidak menghasilkan logika clock untuk ini. Itu hanya berubah menjadi beberapa gerbang sederhana serta Muxes.

Datapath_unit.v – Ini adalah salah satu file yang lebih kompleks, meskipun jika Anda menggali, Anda akan melihatnya terutama massal. Data ini menghasilkan semua sumber daya (seperti register serta ingatan) serta kabelnya bersama.

Control_unit.v – satu lagi modul lagi, ini hanya mengimplementasikan tabel arah, mengatur garis kontrol berdasarkan instruksi saat ini.

Alucontrol.v – Data ini menerjemahkan instruksi untuk ALU. Itu hilang pada pos asli. Anehnya, ada satu lagi CPU serupa pada situs yang sama persis yang memiliki file alucontrol, namun jelas untuk set arah yang berbeda. Namun, mulai menjaga data itu serta memanfaatkan tabel gaya, saya dapat membuatnya kembali. Jika [FPGA4STUDENTS] mengoreksi ini, file mungkin terlihat sangat berbeda.

Design.SV – Data ini diperlukan untuk simulator Edaplayground yang saya gunakan. Ini berisi elemen tingkat atas (jalur data serta unit kontrol). Karena edaplayground hanya memproses file ini, perlu untuk memasukkan file-file lain yang disebutkan di atas. Ini menyebabkan beberapa peringatan karena masing-masing memiliki arahan skala waktu, namun ini tidak berbahaya.

Testbench.SV – Testbench bukan bagian dari desain asli, namun cukup menetapkan simulasi serta mengumpulkan hasil. Saya harus memodifikasinya sedikit untuk bekerja dengan edaplayground, namun operasinya sama. Itu hanya menghasilkan CPU, memberi makan jam, serta membiarkannya berjalan untuk sementara waktu. Program uji serta konten memori ada di Test.Prog maupun test.data.

Simulasi

Anda dapat melakukan satu dari dua hal. Anda dapat membuka salinan gaya saya yang siap pakai, namun itu mungkin bukan pilihan terbaik Anda. Saya sarankan Anda pergi saja ke edaplayground dan menghasilkan proyek Verilog baru. Kemudian mulailah memindahkan file dari pos asli. Anda akan mengalami kesalahan serta file yang hilang. Lihat persis berapa banyak yang bisa Anda perbaiki. Jika Anda bingung, maka Anda dapat memanfaatkan salinan saya untuk membantu Anda jika Anda bingung. Anda akan menemukan lebih dari itu.

Jika Anda memilih untuk mencobanya, di sini ada beberapa tips tentang edaplayground. Anda tidak memerlukan UVM / OVM yang dipilih, juga Anda juga tidak memerlukan jenis perpustakaan lain. Saya menggunakan iCarus Verilog 0.9.7, namun Anda mungkin kemungkinan besar memanfaatkan semua jenis alat Verilog yang tersedia. Anda ingin memeriksa kotak centang Epwave serta Anda akan membutuhkan untuk menambahkan ini ke bagian inital Testbench:

awal
mulai
$ dumpfile (“dump.vcd”);
$ dumpvars;
Gunakan indikasi + di sebelah tab nama data untuk membuat file baru. Edaplayground memiliki batas sepuluh file per panel. Ingat, Anda harus memasukkan semua jenis file .v yang Anda hasilkan di kedua testbench.sv atau design.sv. Anda tidak perlu memasukkan file data karena file lain memanfaatkannya secara tidak langsung.

Lari!

Setelah Anda memiliki semua kesalahan, Anda dapat menekan jalankan serta Anda akan mendapatkan pemirsa bentuk gelombang, Epwave. Kamu hav.e to add signals of rate of interest so you can watch the CPU at work. It would be fun to add some I/O devices in memory or some debugging ports so you might watch things a little better. I’ll usually watch the program counter as well as the register compose port to get an concept of what’s going on inside.

The original code had a program that exercised a great deal of instructions. I commented it out as well as replaced it with this:

0000_0100_0000_0000 // 0000: tons R0 <- Mem(R2+ 0) since R2=0 this puts 1 in R0 0000_0100_0100_0000 // 0002: tons the exact same in R1 (R1 will always contain 1) // place 8 (byte), 4 (word): 0010_0000_0101_0000 // 0004: R2= R0+ R1 0001_0010_1000_0000 // 0006: Mem[R1]=R2 (that is Mem[1]=R2 0000_0010_0000_0000 // 0008: R0=Mem[R1] 1101_0000_0000_0011 // 000A: jump to place #4 (CPU will multiply by 2 as well as add 2) // no direction at 000C, however PC will hang there while it processes jump You should be able to comply with the incrementing value composing to memory as well as watch the program counter cycle back to place 4 with each loop. Here’s a typical session: I left out a great deal of interior signals, however you can see that memory address 1 is set to 2 as well as then to 3 on the very first two iterations of the loop. Akhir permainan Is this a great academic CPU? I’m not sure. Some simpler CPUs exist, however they are frequently little since they are tricky or they are extremely impractical. Anything more challenging than this is most likely as well much to bite off for a beginner. While I believe you should have some grasp of fundamental Verilog before you tackle something like this, the documentation was a little sparse (and confusing) in some areas. Obviously, it was great sufficient since I got it working, however if you are just starting out, you most likely would appreciate a little more assist as well as explanations. Do you have a preferred academic Verilog CPU? I’m still looking for that a person that is “just right.”

Leave a Reply

Your email address will not be published. Required fields are marked *