Saat ini saya terlibat dalam proyek universitas untuk mengimplementasikan prosesor dari set instruksi yang ada. Idenya adalah bahwa pada akhir proyek saya harus dapat mensintesis desain ini dan menjalankannya dalam FPGA. Semuanya berjalan dengan baik sejauh ini, saya mulai mengimplementasikan desain di Verilog HDL beberapa hari yang lalu dan membuat versi yang sangat sederhana berfungsi. Sekarang masalahnya: Saya menghubungi beberapa orang yang telah terlibat dalam desain perangkat keras selama bertahun-tahun dan mereka menyarankan sebelum saya melangkah lebih jauh saya harus beralih menggunakan SystemC untuk implementasi. Sekarang, membuat saya sangat bingung karena ini adalah pikiran saya:
Verilog -> Sebagai bahasa HDL secara khusus menargetkan desain perangkat keras. Memiliki beberapa level abstraksi seperti Verilog struktural dan perilaku, tetapi ini adalah bentuk yang sangat rapi untuk menentukan RTL suatu desain. Anda pasti dapat mensintesisnya menggunakan banyak alat tergantung pada FPGA yang Anda pilih (dalam kasus saya saya menggunakan Xilinx Vivado 2014 dan papan Zynq). Di sisi bawah, Verilog polos tidak menawarkan abstraksi yang cukup untuk verifikasi dan itulah sebabnya Anda memiliki hal-hal seperti System Verilog.
SystemC -> Ini adalah pustaka kelas C ++ yang secara efektif memperkenalkan konsep waktu dalam C ++ dan memungkinkan Anda untuk melakukan simulasi yang didorong oleh peristiwa. Jelas itu jauh lebih tinggi daripada HDL dan hal-hal di sini dapat diimplementasikan lebih cepat. Ini membuatnya menjadi alat yang sangat baik untuk hal-hal seperti verifikasi dan bahkan implementasi simulator sehingga orang dapat mulai merancang driver dan hal-hal untuk sebuah chip sebelum hal itu benar-benar dibuat. Rupanya, ada juga subset dari SystemC yang dapat disintesis (saya pikir bahkan Xilinx Vivado dapat melakukan ini) dan dalam beberapa kasus itu memungkinkan SystemC untuk digunakan untuk merancang sistem yang sangat besar di mana tingkat abstraksi yang lebih tinggi berguna.
Jadi, pertanyaan saya adalah:
- Apakah pengertian ini tentang apa yang systemC dan Verilog (atau bahasa HDL jika Anda suka) benar?
- Kapan saya harus menggunakan SystemC dan kapan Verilog?
- Saya diberitahu bahwa bahkan di Verilog, menggunakan banyak kode perilaku dapat sedikit bermasalah di bagian-bagian penting dari implementasi karena Anda pada dasarnya memberikan kendala yang jauh lebih sedikit pada alat sintesis tentang cara mensintesisnya. Dengan tingkat abstraksi yang lebih tinggi, bukankah ini akan menjadi masalah? yaitu Jika saya menggunakan systemC saya mungkin berakhir dengan desain yang sangat lambat, haus daya, besar ...
- Orang yang menyarankan SystemC menyebutkan bahwa sepertinya saya sedang melakukan "eksplorasi arsitektural" dan itulah sebabnya dia lebih suka Verilog. Apa sebenarnya artinya itu? Saya mendapat kesan bahwa arsitektur biasanya merujuk pada set instruksi dan mikroarsitektur ke implementasi set instruksi (jadi mikroarsitektur adalah rtl aktual yang mengeksekusi instruksi). Jadi, apakah eksplorasi arsitektural berarti bahwa menurutnya saya sedang mengimplementasikan prosesor untuk melihat seberapa layak sebuah set instruksi?
- Dia mengatakan bahwa argumen untuk menggunakan SystemC adalah bahwa itu jauh lebih mudah karena tingkat abstraksi yang lebih tinggi daripada HDL. Dia juga mengklaim bahwa lebih mudah untuk mendapatkan pengaturan waktu yang tepat. Sejauh mana ini benar?
Bantuan akan sangat dihargai, saya agak bingung dan sulit mendapatkan informasi yang jelas tentang ini secara online. Terima kasih!
Jawaban:
Teman Anda salah memahami apa yang Anda lakukan atau sedang memikirkan SystemC sebagai langkah awal. HDL adalah satu-satunya pilihan. Dalam hal apa pun, dan saya sarankan Anda menggunakan SystemVerilog yang dapat disintesis yang cukup kuat untuk melakukan banyak eksplorasi keseluruhan yang pada dasarnya sama dengan Verilog untuk yang lainnya.
Sebagian. Anda membedakan antara Verilog sebagai HDL, SystemVerilog sebagai bahasa verifikasi, dan mengatakan bahwa SystemC memiliki abstraksi yang lebih tinggi tetapi juga subset yang dapat disintesis. Ada dua kesalahan di sini. Pertama, SystemVerilog juga merupakan HDL dengan subset yang sepenuhnya dapat disintesis yang dapat dilanjutkan sebagai Verilog dengan perbaikan yang jelas (misalnya satu
logic
jenis tunggal untuk kabel) dan banyak mekanisme abstraksi yang dapat disintesis (misalnya Antarmuka). Ini didukung oleh banyak alat termasuk Vivado. SystemC di sisi lain, bukanlangsung disintesis (bahkan tidak ada subset apa pun), ini dimaksudkan untuk pemodelan tingkat tinggi dan eksplorasi arsitektur meskipun beberapa subset dapat dimasukkan dalam alat Sintesis Tingkat Tinggi seperti Vivado HLS yang kemudian menerjemahkannya ke Verilog yang dapat disintesis (meskipun tidak dapat dibaca manusia) .Verilog dan subset SystemVerilog yang dapat disintesis adalah bahasa untuk desain HW, biasanya digunakan untuk menggambarkan HW pada level register-transfer, yaitu sebagai sekumpulan blok seperti register, fungsi kombinasional, mesin negara terbatas, dll. Verilog-2001 juga dapat dengan tepat menggambarkan hw sebagai netlist tingkat gerbang, sementara SV juga dapat digunakan untuk tingkat abstraksi yang jauh lebih tinggi sehingga kemampuan verifikasi. Di sisi lain, SystemC sesuai untuk pemodelan sistem tingkat tinggi di mana seluruh blok dijelaskan hanya dengan cara perilaku tingkat tinggi. Ini juga sangat kuat untuk eksplorasi arsitektur, yaitu parameter dan karakteristik arsitektur yang bervariasi dan mengevaluasi perubahan dalam kinerja keseluruhan.
Itu benar hanya jika Anda mencoba untuk menggambarkan hal-hal dengan cara non-RTL saat mengembangkan model RTL. Sebagai contoh, cara yang tepat untuk menggambarkan sebuah blok yang melakukan akumulasi-berulang berulang adalah sebuah mesin keadaan terbatas yang menggerakkan sebuah pengganda kombinasional, sebuah adder kombinasional, dan sebuah register - jika secara perilaku Anda bermaksud menggambarkan ini seperti dalam perangkat lunak (untuk loop) maka ya, kode perilaku tidak akan berfungsi. Jika Anda bermaksud menjelaskan setiap blok yang saya jelaskan (mult, tambah, reg, dan FSM) via
always
blok, itu sangat baik dan akan bekerja di netlist menyadari apa yang Anda tentukan dengan hasil yang sangat baik (seringkali lebih baik daripada pendekatan yang sangat struktural yang membatasi kemampuan alat sintesis untuk mengoptimalkan logika). Faktanya, sintesis tingkat tinggi SystemC akan sering menghasilkan hasil yang baik hanya jika Anda berpegang pada pola yang sangat mirip, secara efektif menghilangkan keuntungan dalam menggunakan bahasa tingkat yang lebih tinggi. Bagaimanapun, SystemC adalah pilihan yang buruk untuk mengimplementasikan prosesor.Arsitektur adalah istilah yang sangat luas yang tidak terbatas pada ISA, pada kenyataannya dalam prosesor modern desain ISA hanya sebagian kecil dari teka-teki. Dalam konteks desain suatu sistem, arsitektur biasanya berarti serangkaian pilihan tingkat sistem (misalnya, apakah DMA dapat dikendalikan oleh inti atau hanya satu inti khusus? Apakah L1 cache sepenuhnya atau atur asosiatif? Apakah Anda memiliki cache sama sekali, atau mengelola memori dalam SW?), termasuk ISA dan juga arsitektur mikro prosesor. Saya pikir apa yang dimaksud teman Anda adalah bahwa Anda menjelajahi berbagai konfigurasi prosesor Anda, yang sebenarnya adalah eksplorasi arsitektur (atau eksplorasi arsitektur mikro jika Anda mau). Namun, dia mungkin melewatkan fakta bahwa Anda akan mengimplementasikan ini pada FPGA, yang membuat opsi SystemC tidak masuk akal.
Ini salah. Jika Anda merancang akselerator yang sangat sederhana, seperti filter streaming, itu mungkin benar karena alat HLS memungkinkan untuk dengan mudah memasukkan tahapan pipa, sedangkan Anda harus melakukannya secara manual di RTL (atau menggunakan retiming datapath, tapi saya pikir itu tidak mungkin di Vivado). Dalam semua kasus lain, dan terutama pada objek yang sangat kompleks dan terstruktur seperti prosesor, HLS akan menghasilkan Verilog yang salah, yang tidak dapat dibantah, dan seringkali salah, yang kemudian harus disintesis - alat tidak dirancang untuk pekerjaan ini.
sumber
Anda kuliah dan belajar (mungkin) untuk menjadi insinyur. Sebagai seorang insinyur Anda harus memahami bagaimana segala sesuatunya bekerja pada level rendah. Untuk mencapai ini, Anda perlu menghapus lapisan abstraksi, bukan menambahkannya.
Untuk alasan ini, saran saya adalah Anda tidak menggunakan SystemC untuk proyek ini. Anda mungkin akhirnya menggunakannya dalam karier profesional Anda, tetapi itu untuk masa depan.
Jika Anda memilih untuk menggunakannya, maka Anda harus berbicara dengan dosen Anda terlebih dahulu. Ketika saya melakukan tugas serupa di universitas, kami secara eksplisit diberitahu untuk tidak menggunakan SystemC karena alasan yang telah saya uraikan di atas.
sumber
Jujur saja, itu semua pemrograman. Apa yang dapat Anda lakukan di SystemC, Anda juga dapat memprogram dalam VHDL atau Verilog. Ini hanya masalah dukungan alat. Tidak butuh SystemC atau SystemVerilog.
Jika vendor apa solusi yang jelas untuk mengkonversi desainer RTL ke pemrograman Sistem, mereka hanya perlu memberikan dukungan bahasa yang sesuai untuk desain FPGA. Menurut survei Mentor 2012 Wilson, bahasa untuk FPGA adalah VHDL. Lihat http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/
sumber
SystemC digunakan untuk desain yang kompleks. Untuk misalnya Menentukan sesuatu di tingkat arsitektur. Keuntungannya, lebih sedikit garis kode daripada desain Verilog, waktu simulasi lebih cepat, model siklus yang akurat. Jangan percaya orang mengatakan bahwa SystemC "tidak" dapat disintesis. Tentu saja. Untuk memberi Anda ide, Di Verilog kami memiliki level abstraksi, Anda dapat memodelkan dengan level switch / level perilaku. Pilihan dibuat berdasarkan kompleksitas desain.
Cara yang lebih akrab untuk menggambarkan perangkat keras adalah menggunakan Verilog, yang sintesisnya didukung di banyak alat EDA.
Biasanya untuk desain yang lebih besar, model SystemC dan testbench dirancang oleh perancang arsitektur. Model-model ini kemudian diberikan kepada perancang elektronik untuk mengubahnya menjadi RTL menggunakan Verilog / VHDL.
sumber