0

这是我第一次使用 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 语句上。那有什么问题?

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

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

4

2 回答 2

1

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

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

于 2014-04-13T17:35:04.183 回答
0

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

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

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

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

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

经过一番谷歌搜索并找到此 Xilinx 错误消息提出的一般问题的答案以始终关注直接案例后,我发现了一些您可以查看的地方来了解该问题。

参考文字:

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

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

还有 Peter Ashenden 和 Jim Lewis 的VHDL 设计师指南第三版,Morgan Kaufman,2008。

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

于 2014-04-12T16:57:00.683 回答