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? Ths SLV no sabe ni se preocupa. ¿Cuántos bits? Bueno, ¿cuánto tiempo es tu SLV?
Se firma un entero, y generalmente 32 bits (si recuerdo bien).
Etapa 1:
Haz mi entero más corto, y sin firmar. Esa es la parte:
to_unsigned(my_int, my_slv'length));
"Tengo este entero, quiero que esté sin firmar y quiero que encaje
en la longitud de mi SLV ".
Etapa 2: Luego, toma esos bits y utilízalos para controlar my_slv.
my_slv <= std_logic_vector(...)
"Toma estos bits y utilízalos para conducir mi slv"
(Una nota sobre la terminología. A <= B
en VHDL se lee en voz alta ya que "A es manejado por B")
Combinado, esto te pone:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Al provenir de un fondo de programación tradicional, es muy fácil quedarse atascado en una forma de pensar de la 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 es un paso más cerca de pensar en lo que está escribiendo en términos de hardware.
Bonus tip: las funciones con el prefijo to_ son aquellas que acortan / cambian los operandos. Los hacen sin firmar o una cierta longitud o ambos. Esta es la razón por la 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. "Tome estos bits y rellénelos en este tipo, no se requieren modificaciones". Estos no tienen un argumento de longitud porque ambos lados ya son iguales. Así que cuando construyo cosas como esta, no necesito buscarlas, solo pienso en cómo estoy cambiando los datos.