Индексирование массивов в VHDL - PullRequest
3 голосов
/ 02 мая 2011

У меня есть массив:

type offsets_type is array (4 downto 0) of std_logic_vector (4 downto 0); 
signal av     : offsets_type;

Я хочу сделать это, по сути: av[addr] += 1;
Но эта строка:

 av(to_integer(unsigned(addr))) <= unsigned(av(to_integer(unsigned(addr))) + 1;

выдает эту ошибку:
to_integer can not have such operands in this context.

Я также пытался использовать conv_integer, но это выдает Wrong type of index как ошибку.

Есть какие-нибудь решения? Спасибо.

1 Ответ

13 голосов
/ 02 мая 2011

В вашем коде есть несколько проблем:

  1. Вы приводите результат своего вычисления к unsigned, в то время как левая часть равна std_logic_vector
  2. Возможно, что-то не так с типом данных addr, но вы не поделились этим с нами.
  3. В назначении отсутствует закрывающая скобка.

Будет проще, если вы будете использовать «unsigned» в своих определениях типов. Таким образом, вы выражаете, что битовый шаблон - это то, что вы хотите использовать в целочисленной арифметике.

type offsets_type is array (4 downto 0) of unsigned (4 downto 0);
signal av     : offsets_type;
signal addr :unsigned(2 downto 0);

Это сэкономит вам несколько преобразований типов:

av(to_integer(addr)) <= av(to_integer(addr)) + "1";

Редактировать: вы использовали ieee.numeric_std.all не так ли?

...