Como dice la respuesta principal, el método recomendado es el siguiente:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Sin embargo, me gustaría explicar por qué se recomienda esto y por qué VHDL tiene una forma aparentemente complicada de convertir enteros en std_logic_vectors.
Se trata de cómo estos tipos son vistos por las herramientas.
Un standard_logic_vector es literalmente un grupo de 1s o 0s. Tengo 10001. ¿Qué número es este? Bueno, eso depende. ¿Está firmado o sin firmar? El SLV no lo sabe ni le importa. Cuantos pedazos Bueno, ¿cuánto dura tu SLV?
Se firma un número entero, y generalmente 32 bits (si no recuerdo mal).
Etapa 1: acortar mi número entero y sin firmar. Esa es esta parte:
to_unsigned(my_int, my_slv'length));
"Tengo este número entero, quiero que no esté firmado y quiero que se ajuste a la longitud de mi SLV".
Etapa 2: Luego, toma esos bits y úsalos para manejar my_slv.
my_slv <= std_logic_vector(...)
"Toma estos bits y úsalos para manejar mi slv"
(Una nota sobre terminología. A <= B
En VHDL se lee en voz alta como "A es impulsado por B")
Combinado, esto te lleva a:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Cuando proviene de un fondo de programación tradicional, es muy fácil quedarse atrapado en una forma de pensar de programación. Pero en VHDL, el código que escribe tiene implicaciones físicas en el hardware. Saber por qué este método funciona y se recomienda está un paso más cerca de pensar en lo que está escribiendo en términos de hardware.
Consejo adicional: las funciones con el prefijo to_ son las que acortan / cambian los operandos. Los hacen sin firmar o una cierta longitud o ambos. Es por eso que to_unsigned requiere que especifique la longitud. Las funciones sin to_ (straight std_logic_vector (...) en este ejemplo) se usan cuando los tipos ya son directamente compatibles. "Toma estos bits y mételos en este tipo, no se requieren modificaciones". Estos no tienen un argumento de longitud porque ambos lados ya son iguales. Entonces, cuando construyo cosas como esta, no necesito buscarlo, solo pienso en cómo estoy cambiando los datos.