Как инициализировать битовый вектор в 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, обратите внимание, что:

  1. У компилятора нет проблем с исходным кодом, если вы объявляете константу вместо переменной:

constant const: bit_vector := b"00000000000000000000000000000100"; -- works OK

  1. Вы можете сделать литерал цепочки битов более читабельным, если вы напишите его в базе 10. Также вы можете указать количество бит литерала цепочки битов, как показано в примере ниже:

variable var: bit_vector(31 downto 0) := 32d"2";

Другие вопросы по тегам