【问题标题】:VHDL Array element in if-statementif 语句中的 VHDL 数组元素
【发布时间】:2014-04-12 16:27:16
【问题描述】:

这是我第一次使用 VHDL,所以它肯定是一些基本的东西,但不知道该怎么做。

我有这个代码:

--this is in the architecture segment
type my_code is array(0 to 15) of integer;
signal code: my_code;
....
--here I use the array
code(count) <=0; --I save a value into the array on position defined by the count variable
if (code(0) = '0') then --fail line (want to do something if the first element is 0)
--do something
end if;

编译器阻止了我,因为“在这种情况下不能有这样的操作数”。问题出在 if 语句上。这有什么问题?

我基本上是在做一个数字锁,就像你写代码一样,如果代码错误,它会打开或保持关闭,所以我只想检查按下的按键数组是否正确。

抱歉打扰了,但我就是不明白。谢谢,祝你有愉快的一天^^

【问题讨论】:

    标签: arrays if-statement vhdl operands


    【解决方案1】:

    你有一个整数数组,所以code(0) 必须是一个整数。您不能将整数与字符文字 '0' 进行比较。

    检查code(0) = 0 或将您的数组重新定义为type my_code is array(0 to 15) of bit; 您可以使用bitstd_logic,或将'0' 作为有效元素的任何其他类型。

    【讨论】:

      【解决方案2】:

      code 是一个整数数组。您正在尝试将其与字符文字“0”进行比较,该字符文字在整数上下文中没有作为枚举文字的解释。换成 0 试试。

      表达式(code(0) = '0') 周围的括号也是多余的。

      没有定义运算符来将整数与代码上下文中的字符文字表示的类型进行比较(您的示例中没有显示,没有任何上下文子句可见,也没有其他声明)。

      通过比较输入操作数和结果类型来选择要使用的“=”等式运算符。通过选择提供整数的左参数和某些(从您的代码片段中未知)类型的右参数可见的运算符,由字符文字“0”表示为枚举文字。

      可以根据操作数类型从多种可能性中选择的操作符称为overloaded

      经过一番谷歌搜索并找到此 Xilinx 错误消息提出的一般问题的答案后,我发现了一些您可以了解问题的地方。

      参考文本:

      IEEE 标准 VHDL 语言参考手册(LRM,例如 IEEE Std 1076-2008,-1993)中有两个子部分,标题为子程序重载(非预定义类型的运算符是函数)子程序和包部分,以及 范围和可见性部分中的重载解决方案的上下文。

      VHDL:硬件描述和设计,Lipsett、Schaefer 和 Ussery,1989 年,Kluwer Academic Publishers。

      还有 Peter Ashenden 和 Jim Lewis 的 The Designer's Guide to VHDL 第 3 版,Morgan Kaufman,2008 年。

      解决方案可以是扩展或添加上下文子句以丢失对重载运算符的引用或修复(如您的情况)语法错误。两者中的哪一个可以根据具体情况而定。

      【讨论】:

      • 如果您在谷歌上搜索引用的部分和 VHDL,错误消息的引用部分足以引导您找到答案。很大一部分点击将导致 Stackoverflow 显示类似的问题和答案。在 Stackoverflow 上进行搜索会产生两个问题,问题标题中有错误消息。
      • 对不起,我检查了其他一些帖子,但没有更聪明:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多