Как говорится в основном ответе, рекомендуемый метод следующий:
use ieee.numeric_std.all;
...
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Тем не менее, я хотел бы уточнить, почему это рекомендуется и почему VHDL имеет такой, казалось бы, запутанный способ преобразования целых чисел в std_logic_vectors.
Все сводится к тому, как эти типы рассматриваются инструментами.
Standard_logic_vector - буквально группа 1 или 0. У меня 10001. Какой это номер? Смотря как. Это подписано или не подписано? Это SLV не знает или не заботится. Сколько бит? Ну, как долго твой SLV?
Целое число подписано и обычно 32 бита (если я правильно помню).
Этап 1: сделать мое целое число короче и без знака. Вот эта часть:
to_unsigned(my_int, my_slv'length));
«У меня есть это целое число, я хочу, чтобы оно было без знака, и я хочу, чтобы оно вписывалось в длину моего SLV».
Этап 2: Затем возьмите эти биты и используйте их для управления my_slv.
my_slv <= std_logic_vector(...)
«Возьми эти биты и используй их, чтобы управлять моим slv»
(Примечание по терминологии. A <= B
В VHDL читается вслух как «A управляется B»)
В сочетании это дает вам:
my_slv <= std_logic_vector(to_unsigned(my_int, my_slv'length));
Исходя из традиционного программирования, очень легко застрять в мышлении программирования. Но в VHDL код, который вы пишете, имеет физическое значение для аппаратного обеспечения. Знание того, почему этот метод работает и рекомендуется, на один шаг ближе к размышлению о том, что вы пишете в терминах оборудования.
Бонусный совет: функции с префиксом to_ - это те, которые сокращают / меняют операнды. Они делают их без знака или определенной длины или обоих. Вот почему to_unsigned требует от вас указать длину. Функции без to_ (прямой std_logic_vector (...) в этом примере) используются, когда типы уже напрямую совместимы. Msgstr "Возьми эти биты и наполни их этим типом, никаких изменений не требуется" У них нет аргумента длины, потому что обе стороны уже одинаковы. Поэтому при создании таких вещей мне не нужно искать это, я просто думаю о том, как я изменяю данные.