Seperti jawaban utama mengatakan, metode yang disarankan adalah sebagai berikut:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Namun, saya ingin menguraikan tentang mengapa ini direkomendasikan, dan mengapa VHDL memiliki cara yang tampaknya berbelit-belit untuk mengubah bilangan bulat menjadi std_logic_vectors.
Turun ke bagaimana jenis ini dilihat oleh alat.
Standard_logic_vector secara harfiah adalah sekelompok 1s atau 0s. Saya punya 10001. Nomor apa ini? Yah, itu tergantung. Apakah ditandatangani atau tidak ditandatangani? SLV tidak tahu atau tidak peduli. Berapa banyak bit? Nah, berapa lama SLV Anda?
Integer ditandatangani, dan biasanya 32 bit (jika saya ingat dengan benar).
Tahap 1: Buat bilangan bulat saya lebih pendek, dan tidak ditandatangani. Itu bagian ini:
to_unsigned(my_int, my_slv'length));
"Saya memiliki bilangan bulat ini, saya ingin itu tidak ditandatangani, dan saya ingin itu sesuai dengan panjang SLV saya."
Tahap 2: Lalu, ambil bit-bit itu dan gunakan untuk menggerakkan my_slv.
my_slv <= std_logic_vector(...)
"Ambil bit ini, dan gunakan untuk menggerakkan slv saya"
(Catatan tentang terminologi. A <= B
Dalam VHDL dibaca keras-keras karena "A digerakkan oleh B")
Gabungan, ini membuat Anda:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Ketika datang dari latar belakang pemrograman tradisional, sangat mudah terjebak dalam cara berpikir pemrograman. Tetapi dalam VHDL kode yang Anda tulis memiliki implikasi fisik dalam perangkat keras. Mengetahui mengapa metode ini bekerja dan direkomendasikan adalah satu langkah lebih dekat untuk memikirkan apa yang Anda tulis dalam istilah perangkat keras.
Kiat bonus: fungsi yang diawali oleh to_ adalah fungsi yang mempersingkat / mengubah operan. Mereka membuat mereka tanpa tanda tangan atau panjang tertentu atau keduanya. Inilah sebabnya mengapa to_unsigned mengharuskan Anda menentukan panjangnya. Fungsi tanpa to_ (std_logic_vector lurus (...) dalam contoh ini) digunakan ketika jenis sudah langsung kompatibel. "Ambil bit-bit ini dan masukkan mereka dalam tipe ini, tidak perlu modifikasi". Ini tidak memiliki argumen panjang karena kedua belah pihak sudah sama. Jadi ketika membangun hal-hal seperti ini, saya tidak perlu mencarinya, saya hanya berpikir tentang bagaimana saya mengubah data.