这是我第一次用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语句一致。这有什么问题?
我基本上像编写代码一样处理数字锁,如果代码错误,它会打开或保持关闭,所以我只想检查按键的数组,如果那里的代码是正确的。
很抱歉打扰但我只是不明白。谢谢,祝你有愉快的一天^^
答案 0 :(得分:1)
您有一个整数数组,因此code(0)
必须是整数。您无法将整数与字符文字'0'
进行比较。
检查code(0) = 0
或将您的数组重新定义为type my_code is array(0 to 15) of bit;
您可以使用bit
或std_logic
,或使用'0'
作为有效元素的任何其他类型
答案 1 :(得分:0)
代码是一个整数数组。您正在尝试将其与字符文字“0”进行比较,该字符在整数上下文中没有作为枚举文字的解释。请改为尝试0.
表达式(code(0) = '0')
周围的括号也是多余的。
没有运算符被定义为将整数与代码上下文中的字符文字所代表的类型进行比较(您未在示例中显示,没有任何上下文子句可见,也没有其他声明)。
通过比较输入操作数和结果类型来选择要使用的“=”相等运算符。通过选择提供左侧参数的整数和一些右侧参数(在您的代码片段中未知)类型由字符文字“0”表示为枚举文字,没有操作符可见。
可以根据操作数类型从多种可能性中选择的运算符被称为overloaded。
经过一些谷歌搜索并找到Xilinx错误消息提出的一般性问题的答案,总是纠缠于眼前的情况后,我找到了一些地方,你可以了解这个问题。
参考文献:
IEEE标准VHDL语言参考手册(LRM,例如IEEE Std 1076-2008,-1993)中有两个子部分,名为子程序重载(非预定义类型的运算符是函数)部分子程序和包,以及范围和可见性部分中的重载解析的上下文。
VHDL:HARDWARE DESCRIPTION AND DESIGN ,Lipsett,Schaefer和Ussery,1989,Kluwer Academic Publishers。
Peter Ashenden和Jim Lewis的第3版 VHDL设计师指南,Morgan Kaufman,2008年。
解决方案可以是扩展或添加上下文子句,用于缺少对重载运算符的引用,也可以修复(如您的情况)语法错误。这两者中的哪一个可以是具体案例。