Wie die Hauptantwort sagt, lautet die empfohlene Methode wie folgt:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Ich möchte jedoch erläutern, warum dies empfohlen wird und warum VHDL eine scheinbar verschlungene Art der Konvertierung von Ganzzahlen in std_logic_vectors hat.
Es kommt darauf an, wie diese Typen von den Tools angezeigt werden.
Ein standard_logic_vector ist buchstäblich ein Bündel von Einsen oder Nullen. Ich habe 10001. Welche Nummer ist das? Es hängt davon ab. Ist es signiert oder nicht signiert? Das SLV weiß es nicht oder kümmert sich nicht darum. Wie viele Bits? Na, wie lange ist dein SLV?
Eine ganze Zahl ist vorzeichenbehaftet und normalerweise 32 Bit (wenn ich mich richtig erinnere).
Stufe 1: Verkürzen Sie meine Ganzzahl und geben Sie kein Vorzeichen ein. Das ist dieser Teil:
to_unsigned(my_int, my_slv'length));
"Ich habe diese Ganzzahl, ich möchte, dass sie ohne Vorzeichen ist und dass sie in die Länge meines SLV passt."
Stufe 2: Nehmen Sie diese Bits und verwenden Sie sie, um my_slv zu steuern.
my_slv <= std_logic_vector(...)
"Nehmen Sie diese Bits und verwenden Sie sie, um meine SLV zu fahren"
(Eine Anmerkung zur Terminologie A <= B
in VHDL wird laut vorgelesen, wenn "A wird von B gesteuert".)
In Kombination erhalten Sie:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Wenn man von einem traditionellen Programmierhintergrund kommt, ist es sehr einfach, sich auf eine Programmier-Denkweise festzulegen. In VHDL hat der von Ihnen geschriebene Code jedoch physische Auswirkungen auf die Hardware. Zu wissen, warum diese Methode funktioniert und empfohlen wird, ist einen Schritt näher dran, darüber nachzudenken, was Sie hardwaremäßig schreiben.
Bonus-Tipp: Mit dem Präfix to_ gekennzeichnete Funktionen verkürzen / ändern die Operanden. Sie machen sie unsigniert oder eine bestimmte Länge oder beides. Aus diesem Grund müssen Sie bei to_unsigned die Länge angeben. Die Funktionen ohne to_ (in diesem Beispiel straight std_logic_vector (...)) werden verwendet, wenn Typen bereits direkt kompatibel sind. Msgstr "Nimm diese Bits und stopfe sie in diesen Typ, keine Modifikationen erforderlich". Diese haben kein Längenargument, da beide Seiten bereits gleich sind. Wenn ich solche Dinge konstruiere, muss ich nicht nachschlagen, sondern denke nur darüber nach, wie ich die Daten ändere.