Comme le dit la réponse principale, la méthode recommandée est la suivante:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Cependant, je voudrais expliquer pourquoi cela est recommandé et pourquoi VHDL a une manière si compliquée de convertir des entiers en std_logic_vectors.
Cela revient à la façon dont ces types sont vus par les outils.
Un standard_logic_vector est littéralement un groupe de 1 ou de 0. J'ai 10001. De quel numéro s'agit-il? En fait ça dépend. Est-il signé ou non signé? Ce SLV ne sait pas ou ne se soucie pas. Combien de bits? Eh bien, combien de temps dure votre SLV?
Un entier est signé, et généralement 32 bits (si je me souviens bien).
Étape 1: rendre mon entier plus court et non signé. Voilà cette partie:
to_unsigned(my_int, my_slv'length));
"J'ai cet entier, je veux qu'il ne soit pas signé, et je veux qu'il tienne dans la longueur de mon SLV."
Étape 2: Ensuite, prenez ces bits et utilisez-les pour piloter le my_slv.
my_slv <= std_logic_vector(...)
"Prenez ces morceaux et utilisez-les pour conduire mon slv"
(Une note sur la terminologie. A <= B
En VHDL est lue à haute voix comme "A est entraîné par B")
Combiné, cela vous donne:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
En venant d'un contexte de programmation traditionnel, il est très facile de rester coincé dans une manière de penser la programmation. Mais en VHDL, le code que vous écrivez a des implications physiques sur le matériel. Savoir pourquoi cette méthode fonctionne et est recommandée est un pas de plus vers la réflexion sur ce que vous écrivez en termes matériels.
Astuce bonus: les fonctions préfixées par to_ sont celles qui raccourcissent / modifient les opérandes. Ils les rendent non signés ou d'une certaine longueur ou les deux. C'est pourquoi to_unsigned vous oblige à spécifier la longueur. Les fonctions sans to_ (straight std_logic_vector (...) dans cet exemple) sont utilisées lorsque les types sont déjà directement compatibles. "Prenez ces bits et remplissez-les de ce type, aucune modification requise". Ceux-ci n'ont pas d'argument de longueur car les deux côtés sont déjà identiques. Donc, quand je construis des choses comme ça, je n'ai pas besoin de le chercher, je pense juste à la façon dont je modifie les données.