Saya agak bingung apakah saya harus menggunakan bilangan bulat di VHDL untuk sinyal dan porta sintesis, dll.
Saya menggunakan std_logic di pelabuhan tingkat atas, tetapi secara internal saya telah menggunakan bilangan bulat berkisar di semua tempat. Namun, saya telah menemukan beberapa referensi kepada orang-orang yang mengatakan Anda hanya boleh menggunakan kode yang ditandatangani / tidak ditandatangani untuk sintesis.
Saya telah pergi dan mengerjakan ulang proyek saya saat ini untuk menggunakan yang tidak ditandatangani ... dan, yah, itu terasa lebih buruk.
Apakah praktik buruk menggunakan bilangan bulat? Apa masalahnya? Apakah ada ketidakpastian berapa lebar alat akan memetakan bilangan bulat?
Jawaban:
Integer baik-baik saja dalam sintesis, saya menggunakannya sepanjang waktu.
Tidak apa-apa!
Waspadalah:
unsigned
signed
Sisi baiknya:
Ketika Anda menggunakan jenis vektor, Anda menggunakan
ieee.numeric_std
, bukanieee.std_logic_arith
?Saya menggunakan
integer
s di mana saya bisa, tetapi jika saya secara eksplisit ingin "roll-over n-bit counters", saya cenderung menggunakannyaunsigned
.sumber
Jan Decaluwe menulis seluruh kertas putih tentang masalah bilangan bulat versus vektor bit. Saya berharap jawabannya akan menggunakan bilangan bulat bila memungkinkan . http://www.jandecaluwe.com/hdldesign/counting.html
sumber
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
danunsigned
. 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 portMisalnya 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 pertamaJuga, 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 / promptKerugian menggunakan
integer
: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
dansigned
bukannya integer, dan karena itu, biasanya menempel pada mereka.sumber