Come dice la risposta principale, il metodo raccomandato è il seguente:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Tuttavia, vorrei approfondire il motivo per cui questo è raccomandato e perché VHDL ha un modo così apparentemente contorto di convertire numeri interi in std_logic_vectors.
Dipende da come questi tipi vengono visualizzati dagli strumenti.
Uno standard_logic_vector è letteralmente un gruppo di 1 o 0 secondi. Ho 10001. Che numero è questo? Beh, dipende. È firmato o non firmato? Questo SLV non lo sa e non gliene importa. Quanti bit? Bene, quanto dura il tuo SLV?
Un numero intero è firmato e di solito a 32 bit (se ricordo bene).
Fase 1: rendere il mio numero intero più breve e senza segno. Questa è questa parte:
to_unsigned(my_int, my_slv'length));
"Ho questo numero intero, voglio che sia senza segno e voglio che si adatti alla lunghezza del mio SLV."
Fase 2: Quindi, prendi quei bit e usali per guidare my_slv.
my_slv <= std_logic_vector(...)
"Prendi questi bit e usali per guidare il mio slv"
(Una nota sulla terminologia. A <= B
In VHDL viene letta ad alta voce come "A è guidato da B")
Combinato, questo ti dà:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Quando proviene da un background di programmazione tradizionale, è molto facile rimanere bloccati in un modo di pensare di programmazione. Ma in VHDL il codice che scrivi ha implicazioni fisiche nell'hardware. Sapere perché questo metodo funziona ed è consigliato è un passo in avanti verso pensare a ciò che stai scrivendo in termini hardware.
Suggerimento bonus: le funzioni precedute da to_ sono quelle che accorciano / modificano gli operandi. Li rendono non firmati o una certa lunghezza o entrambi. Questo è il motivo per cui to_unsigned richiede di specificare la lunghezza. Le funzioni senza to_ (straight std_logic_vector (...) in questo esempio) vengono utilizzate quando i tipi sono già direttamente compatibili. "Prendi questi bit e riempili in questo tipo, non sono necessarie modifiche". Questi non hanno un argomento lungo perché entrambe le parti sono già le stesse. Quindi, quando costruisco cose come questa, non ho bisogno di cercarle, penso solo a come sto cambiando i dati.