Tidak ada yang salah tentang menggunakan integer untuk RTL per se , tetapi ada beberapa alasan yang menghindarinya. Ini benar-benar pertanyaan tentang "praktik terbaik" subyektif dan pada akhirnya Anda harus mencari tahu sendiri apa yang Anda sukai. Sebagai bantuan untuk itu, saya akan membagikan pengalaman dan pemikiran saya tentang ini.
Pada prinsipnya , saya mendukung penggunaan bilangan bulat (dibatasi), juga saat menulis untuk sintesis. Saya terkadang melakukannya, tetapi dalam praktiknya , biasanya saya berpegang teguh pada signed
dan unsigned
. Saya akan menjelaskan mengapa.
Anda akan dipaksa untuk menggunakan tipe data vektor di bagian dari desain Anda:
Hampir tidak ada vendor-IP atau IP pihak ketiga yang akan menggunakan integer
tipe untuk port
Misalnya ketika mengirim data melalui BlockRam, bahkan jika Anda menyimpulkannya dan karenanya tidak perlu antarmuka ke IP / makro / primitif, Anda kemungkinan besar perlu mengonversi ke tipe vektor pula
Bahkan jika hal tersebut di atas berlaku, Anda akan sebagian besar perlu antarmuka untuk sesuatu yang lain di beberapa titik (port tingkat atas, jika tidak ada yang lain)
Karena Anda tidak dapat menggunakan integer
untuk desain penuh, Anda mungkin ingin melewatkan semuanya bersama-sama, karena:
Di beberapa titik, Anda harus tetap melakukan konversi, dan ini menghilangkan sebagian dari titik penggunaan integer
di tempat pertama
Juga, untuk simulasi, konversi ini biasanya akan dipanggil dengan vektor 'U'
atau 'X'
, baik sebelum direset, atau di waktu lain, dan setiap panggilan fungsi semacam itu akan menghasilkan pesan peringatan dari fungsi paket, mengacaukan peringatan simulasi Anda / prompt
Kerugian menggunakaninteger
:
Berlawanan dengan tipe vektor, bilangan bulat tidak memiliki 'U'
dan 'X'
; Saya menemukan mereka sangat membantu dalam simulasi. Anda melihat bagaimana sinyal yang tidak diinisialisasi merambat melalui desain, dan Anda mungkin akan bereaksi jika Anda melihat banyak sinyal yang tidak diinisialisasi setelah reset. Ini tidak akan menjadi masalah jika menggunakan bilangan bulat.
Dengan bilangan bulat, ada risiko ketidakcocokan simulasi / sintesis yang lebih besar saat menambahkan atau mengurangi yang mengakibatkan under- / overflow. (Seperti yang sudah ditunjukkan oleh orang lain.)
Kasus umum yang menurut saya integer
benar-benar menjadi pilihan yang baik:
Untuk men-debug sinyal / penghitung yang Anda monitor melalui chipScope / signalTap dll.
Benar-benar representasi internal penghitung, yang tidak pernah masuk atau keluar dari kode Anda sendiri. Ya, ada kasus seperti itu, misalnya jika Anda sedang menulis FIFO dan Anda menulis mati-hisab / membaca untuk membentuk sinyal full
, empty
, almostFull
dll (namun aritmatika pada pointer adalah cara yang lebih baik daripada mati-hisab dalam hal ini. ..)
Kesimpulan saya sendiri: Saya kadang menggunakan integer, tetapi hemat, dan sebagian besar dalam kasus yang dijelaskan di atas. Saya tidak melihat banyak overhead dalam menggunakan unsigned
dan signed
bukannya integer, dan karena itu, biasanya menempel pada mereka.