VHDL 中的索引数组

发布于 2024-11-04 03:35:58 字数 463 浏览 1 评论 0原文

我有一个数组:

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 在这种情况下不能有这样的操作数。

我也尝试过使用 conv_integer,但这会给出错误的索引类型错误。

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

I have an array:

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

I want to do this, essentially: av[addr] += 1;
But this line:

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

yields this error:
to_integer can not have such operands in this context.

I've also tried using conv_integer, but that gives Wrong type of index as an error.

Any solutions? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半枫 2024-11-11 03:35:58

您的代码中存在一些问题:

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

There are a few problems in your code:

  1. You cast the result of your calculation to an unsigned, while the left-hand side is std_logic_vector
  2. There might be something wrong with the data type of addr, but you have not shared that with us.
  3. There is a closing parenthese missing in the assignment.

It will be easier if you use "unsigned" in your type definitions. This way, you express that the bit pattern is actually something you want to use in integer arithmetic.

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

This will save you a few type conversions:

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

Edit: you did use ieee.numeric_std.all didn't you?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文