Como a resposta principal diz, o método recomendado é o seguinte:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
No entanto, gostaria de explicar por que isso é recomendado e por que o VHDL tem uma maneira aparentemente complicada de converter números inteiros em std_logic_vectors.
Tudo se resume a como esses tipos são visualizados pelas ferramentas.
Um standard_logic_vector é literalmente um monte de 1s ou 0s. Eu tenho 10001. Que número é esse? Bem, isto depende. É assinado ou não assinado? O SLV não sabe nem se importa. Quantos bits? Bem, quanto tempo dura o seu SLV?
Um número inteiro é assinado e, geralmente, 32 bits (se bem me lembro).
Etapa 1: Tornar meu número inteiro mais curto e sem sinal. Essa é essa parte:
to_unsigned(my_int, my_slv'length));
"Eu tenho esse número inteiro, quero que ele não seja assinado e quero que ele caiba no comprimento da minha SLV".
Etapa 2: Pegue esses bits e use-os para conduzir o my_slv.
my_slv <= std_logic_vector(...)
"Pegue esses bits e use-os para dirigir meu slv"
(Uma observação sobre terminologia. A <= B
Em VHDL é lida em voz alta como "A é dirigido por B")
Combinado, você recebe:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Quando vem de um background de programação tradicional, é muito fácil ficar preso em uma maneira de pensar em programação. Mas em VHDL o código que você escreve tem implicações físicas no hardware. Saber por que esse método funciona e é recomendado está a um passo de pensar no que você está escrevendo em termos de hardware.
Dica bônus: funções prefixadas por to_ são aquelas que reduzem / alteram os operandos. Eles os fazem sem assinatura ou com um certo comprimento ou ambos. É por isso que to_unsigned exige que você especifique o comprimento. As funções sem to_ (straight std_logic_vector (...) neste exemplo) são usadas quando os tipos já são diretamente compatíveis. "Pegue esses bits e encha-os nesse tipo, não são necessárias modificações". Estes não têm um argumento de comprimento porque os dois lados já são os mesmos. Portanto, ao construir coisas como essa, não preciso procurar, apenas penso em como estou alterando os dados.