【问题标题】:Indexing arrays in VHDLVHDL中的索引数组
【发布时间】:2011-05-01 23:28:39
【问题描述】:

我有一个数组:

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 视为错误。

有什么解决办法吗?谢谢。

【问题讨论】:

  • addr的类型是什么?从语法来看,我希望它是std_logic_vector(4 downto 0),但从错误消息来看,我猜它可能是别的东西?

标签: vhdl


【解决方案1】:

你的代码有几个问题:

  1. 您将计算结果转换为unsigned,而左侧为std_logic_vector
  2. addr 的数据类型可能有问题,但您尚未与我们分享。
  3. 作业中缺少右括号。

如果您在类型定义中使用“无符号”会更容易。这样,您就可以表达位模式实际上是您想要在整数运算中使用的东西。

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,不是吗?

【讨论】:

  • 我无法更改 addr 的类型,因为它是一个输入,但您的回答仍然对我有所帮助。这就是我的选择:av(conv_integer(unsigned(addr))) &lt;= av(conv_integer(unsigned(addr))) + "1";
  • @Pwngulator 我建议你使用ieee.numeric_std.all 库(而不是std_logic_unsigned)。这个库有转换函数to_integer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2019-08-27
相关资源
最近更新 更多