Jak głosi główna odpowiedź, zalecana metoda jest następująca:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Chciałbym jednak wyjaśnić, dlaczego jest to zalecane i dlaczego VHDL ma tak pozornie skomplikowany sposób przekształcania liczb całkowitych na wektory standardowe.
Wszystko sprowadza się do tego, jak narzędzia te postrzegają te typy.
Vector_logic_vector to dosłownie kilka zer lub jedynek. Mam 10001. Jaki to numer? Cóż, to zależy. Czy jest podpisany czy niepodpisany? SLV nie wie ani nie obchodzi. Ile bitów? Jak długi jest twój SLV?
Liczba całkowita jest podpisana i zwykle 32 bity (jeśli dobrze pamiętam).
Etap 1: Spraw, aby moja liczba całkowita była krótsza i niepodpisana. To jest ta część:
to_unsigned(my_int, my_slv'length));
„Mam tę liczbę całkowitą, chcę, aby była bez znaku i chcę, aby pasowała do długości mojego SLV”.
Etap 2: Następnie weź te bity i użyj ich do sterowania my_slv.
my_slv <= std_logic_vector(...)
„Weź te bity i użyj ich, by prowadzić mój slv”
(Uwaga na temat terminologii. A <= B
W VHDL jest odczytywana na głos, ponieważ „A kieruje B”)
W połączeniu daje to:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Pochodząc z tradycyjnego programowania, bardzo łatwo utknąć w programistycznym sposobie myślenia. Ale w VHDL kod, który piszesz, ma fizyczne implikacje sprzętowe. Wiedza, dlaczego ta metoda działa i jest zalecana, jest o krok bliżej do zastanowienia się nad tym, co piszesz w kategoriach sprzętowych.
Dodatkowa wskazówka: funkcje poprzedzone przez to_ to te, które skracają / zmieniają operandy. Sprawiają, że stają się niepodpisane, mają określoną długość lub oba. Dlatego to_unsigned wymaga określenia długości. Funkcje bez to_ (w tym przykładzie prosty std_logic_vector (...)) są używane, gdy typy są już bezpośrednio kompatybilne. „Weź te bity i włóż je do tego typu, nie wymaga modyfikacji”. Nie mają one argumentu długości, ponieważ obie strony są już takie same. Więc konstruując takie rzeczy, nie muszę tego sprawdzać, po prostu myślę o tym, jak zmieniam dane.