Как инициализировать битовый вектор в VHDL
Я хочу иметь битовый вектор, я хочу, чтобы он имел значение 2. Я пробовал много вещей, но всегда получаю ошибку. Теперь у меня есть это:
variable var : bit_vector := B"00000000000000000000000000000100";
Я получаю эти ошибки:
не может сопоставить целочисленный литерал с типом массива типа "bit_vector"
а также
объявление переменной "var" с неограниченным типом массива "bit_vector" не допускается
Как я могу это исправить? Благодарю.
3 ответа
Вы должны дать var
диапазон (ограничить его), например:
variable var : bit_vector(31 downto 0) ...
Затем вы можете присвоить ей постоянную, например, с помощью:
library ieee;
use ieee.numeric_bit_unsigned.all;
...
variable var : bit_vector(31 downto 0) := to_bit_vector(2, 32);
или с начальным значением, заданным как битовая строка как:
variable var : bit_vector(31 downto 0) := "00000000000000000000000000000010";
Использование to_bit_vector
как вы можете видеть, менее подвержен ошибкам, поскольку константа в вашем примере кода не 2, а фактически 4;-)
Более объективным, общим назначением является следующее:
var: = (1 => '1', другие =>'0');
Добавляя к ответу @MortenZilmer, обратите внимание, что:
- У компилятора нет проблем с исходным кодом, если вы объявляете константу вместо переменной:
constant const: bit_vector := b"00000000000000000000000000000100"; -- works OK
- Вы можете сделать литерал цепочки битов более читабельным, если вы напишите его в базе 10. Также вы можете указать количество бит литерала цепочки битов, как показано в примере ниже:
variable var: bit_vector(31 downto 0) := 32d"2";