【问题标题】:Trouble using a variable as boundary in a std_logic_vector with the downto在 std_logic_vector 中使用变量作为边界时出现问题
【发布时间】:2016-12-11 00:03:38
【问题描述】:

我正在尝试执行以下操作:在一个进程中,在声明一个自然类型的变量之后...

VARIABLE Pointer: NATURAL := 0;

...我将它分配给一个值 Pnt,它是 std_logic_vector(3 downto 0) 类型的信号:...

Pointer := to_integer(unsigned(Pnt));

... 稍后(在流程的开始部分)我使用这个值 Pointer 来指向一个称为 Buffer 的大 std_logic_vector 的一部分(一个字节):

Buffer(Pointer*8+7 downto Pointer*8) <= ...something...

不幸的是,在编译时,我收到以下错误:

Error (10327): VHDL error at OutputInterface.vhd(38): can't determine definition of operator ""*"" -- found 0 possible definitions

我已经导入了 numeric_std,在我的文件的最顶部写了“use IEEE.numeric_std.all;”

为什么会发生这个错误?提前感谢您提供的宝贵帮助,我希望我围绕这个问题提供了足够且有条理的信息!

【问题讨论】:

  • 这将有助于发布错误所在的整个第 38 行,以及上面所有内容的声明。但最好将问题提炼成最小的自包含可编译示例,让人们重现您正在做的事情。鉴于上述声明,Pointer * 8 肯定不是问题。
  • buffer 是 VHDL 中的保留字。你的数组真的被称为“缓冲区”吗?如果是这样,那将无济于事;您需要更改其名称。 (缓冲端口是一种可以读取的输出端口。它很少使用,因为它引入了其他复杂性。)
  • @MatthewTaylor 好点:这可能会使一些 VHDL 解析器偏离轨道并导致令人困惑的错误消息。

标签: vhdl


【解决方案1】:

原因是你的 indexer: Pointer 变量正在改变。如果编译器无法将部分解析为组合逻辑,则在 VHDL 中不允许这样做。

如果编译器只能实现顺序实现,那么它会报错。

取决于您的供应商。有时很难让编译器理解您所描述的逻辑实际上可以是组合的。

另外确保检查你没有推断锁存,如果没有这肯定行不通

【讨论】:

  • 谢谢CJC,这就是问题所在!我必须指定一大堆“with xx select...”来明确考虑所有可能的情况,然后只使用“downto”周围的数字,现在一切正常:)
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多