Như câu trả lời chính nói, phương pháp được đề xuất như sau:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Tuy nhiên, tôi muốn giải thích lý do tại sao điều này được khuyến nghị và tại sao VHDL có cách chuyển đổi số nguyên dường như phức tạp như vậy thành std_logic_vector.
Các công cụ này được xem như thế nào.
Một Standard_logic_vector đúng nghĩa là một bó 1 hoặc 0. Tôi có 10001. Đây là số nào? Vâng, nó phụ thuộc. Được ký hay chưa ký? Ths SLV không biết hoặc quan tâm. Có bao nhiêu bit? Chà, SLV của bạn dài bao nhiêu?
Một số nguyên được ký và thường là 32 bit (nếu tôi nhớ chính xác).
Giai đoạn 1: Làm cho số nguyên của tôi ngắn hơn và không dấu. Đó là phần này:
to_unsigned(my_int, my_slv'length));
"Tôi có số nguyên này. Tôi muốn nó không được ký và tôi muốn nó phù hợp với chiều dài của SLV của tôi."
Giai đoạn 2: Sau đó, lấy các bit đó và sử dụng chúng để lái my_slv.
my_slv <= std_logic_vector(...)
"Lấy các bit này và sử dụng chúng để lái slv của tôi"
(Một lưu ý về thuật ngữ. A <= B
Trong VHDL được đọc thành tiếng "A được điều khiển bởi B")
Kết hợp, điều này giúp bạn:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Khi đến từ một nền tảng lập trình truyền thống, rất dễ bị mắc kẹt trong lối suy nghĩ lập trình. Nhưng trong VHDL, mã bạn viết có ý nghĩa vật lý trong phần cứng. Biết lý do tại sao phương pháp này hoạt động và được khuyến nghị là một bước gần hơn để suy nghĩ về những gì bạn viết bằng thuật ngữ phần cứng.
Tiền thưởng: các hàm có tiền tố là to_ là các hàm rút ngắn / thay đổi toán hạng. Họ làm cho chúng không dấu hoặc một độ dài nhất định hoặc cả hai. Đây là lý do tại sao to_unign yêu cầu bạn chỉ định độ dài. Các hàm không có to_ (std_logic_vector thẳng (...) trong ví dụ này) được sử dụng khi các loại đã tương thích trực tiếp. "Lấy các bit này và nhét chúng vào loại này, không cần sửa đổi". Chúng không có đối số độ dài vì cả hai bên đều giống nhau. Vì vậy, khi xây dựng những thứ như thế này, tôi không cần phải tìm kiếm nó, tôi chỉ nghĩ về cách tôi thay đổi dữ liệu.