Saya ingin memahami bagaimana berbagai konstruksi dalam kode VHDL disintesis dalam RTL.
- Adakah yang bisa memberi tahu saya perbedaan antara konstruksi If-Else dan konstruksi Case statement dari suatu proses dalam VHDL dalam hal bagaimana kode tersebut disimpulkan ke dalam rangkaian RTL oleh alat sintesis?
- Pertimbangkan kasus multi-if bersarang dan campur aduk-case dengan konstruksi if-else di dalam suatu proses.
- Juga kapan harus menggunakan konstruksi mana?
PS: Saya telah melihat pertanyaan terkait "Pernyataan berganda jika sedang diproses dalam vhdl" tetapi itu tetap saja tidak menjawab pertanyaan saya.
vhdl
code-design
rtl
nurabha
sumber
sumber
dec
/jz
instruksi, yang jauh lebih efisien. Mungkin optimasi serupa diterapkan di sini.Jawaban:
The
if-elsif-else
membangun menyimpulkan prioritas routing jaringan:mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab
Ini sesuai dengan
The
case
membangun, di sisi lain, menyimpulkan besar ol' mux:Ini sesuai dengan
Jelas ini adalah desain yang sangat sederhana dengan hanya satu ekspresi nilai, menghasilkan satu output.
Per di atas, Anda dapat melihat bagaimana mereka akan bersarang / bercampur.
Karena
if-else
diprioritaskan, itu harus digunakan ketika lebih dari satu kondisi input dapat terjadi. Menggunakancase
, satu sisi lain, adalah tepat ketika input saling eksklusif.sumber
if-else
konstruk itu adalah di mana rantai itu muncul. Kondisi pertama harus gagal agar kondisi kedua diuji. Ini bukan kasus untuk, eh,case
konstruk, dan inilah sebabnyaif-else
pernyataan tidak dapat disintesis sebagai mux besar tunggal.case
pernyataan dapat menghasilkan logika sekuensial juga. Saya menemukan "Dunia Nyata VHDL" , serangkaian slide ceramah dari Universitas Glasgow, yang mungkin bermanfaat bagi Anda.Dalam posting blog lama ini , penulis menulis dan mensintesis dua versi kode VHDL yang secara fungsional setara. Satu menggunakan if-else, lainnya menggunakan case. Hasil:
Dan kesimpulannya:
Ada juga puluhan posting tentang subjek ini di Stack Overflow untuk setiap bahasa yang mungkin. Kesimpulannya pada umumnya sama, bahwa tidak ada perbedaan kinerja-bijaksana. Kadang-kadang, jika ada banyak kasus, kompiler mungkin cukup pintar untuk membuat tabel pencarian yang akan menghasilkan kinerja yang sedikit lebih baik.
VHDL synthesizer mungkin dapat melakukan hal serupa. Tetapi Anda masih membutuhkan sejumlah besar kasus dalam hal ini (maksud kata) Anda mungkin ingin menggunakan pernyataan kasus karena memberikan keterbacaan yang lebih baik di mana ada sejumlah besar opsi.
sumber