If statement VHDL中的If语句错误
我通过ModelSim在VHDL中遇到了一个问题。这是我的if语句中的一个错误If statement VHDL中的If语句错误,if-statement,vhdl,fpga,hdl,modelsim,If Statement,Vhdl,Fpga,Hdl,Modelsim,我通过ModelSim在VHDL中遇到了一个问题。这是我的if语句中的一个错误 if ((s(0) = c(0)) AND (NOT(x1(0)))) THEN I:= (others => '0'); end if; 这是我的if语句,错误是:中缀运算符“and”没有可行的条目。 但是,在我尝试检查程序后,我意识到问题在于使用(而不是gate)。也许,在vhdl中还有另一种使用它的方法。 有人能帮忙吗?? 谢谢您没有关于x1类型的指示。它告诉您表达式NOT(x1())与任
if ((s(0) = c(0)) AND (NOT(x1(0)))) THEN
I:= (others => '0');
end if;
这是我的if语句,错误是:中缀运算符“and”没有可行的条目。
但是,在我尝试检查程序后,我意识到问题在于使用(而不是gate)。也许,在vhdl中还有另一种使用它的方法。
有人能帮忙吗??
谢谢您没有关于
x1
类型的指示。它告诉您表达式NOT(x1())
与任何已定义且通过选择可见的运算符(例如,上下文子句指定的包可见性)不兼容
尝试将x1(0)
计算为一个值,而不是简单地使用反转运算符
例如:
if s(0) = c(0) AND x1(0) = '0' THEN
I:= (others => '0');
end if;
应x1
是其元素类型可以用枚举值“0”指定的类型
(运算符有一个优先顺序,表示所有括号都是多余的)。如果
x1
是std_逻辑向量
,那么x1(0)
是std_逻辑
,就像不是x1(0)
一样,和
运算符变成{code>{boolean}和{std_逻辑
,但是对于这种类型的组合,没有定义和,这正是ModelSim试图用消息“没有中缀运算符的可行条目”和“”来说明的。应用Davids示例将使第二个参数成为和布尔值,这将起作用,因为和是为两个布尔值参数定义的。更具体地说,相等的关系运算符(“=”)输出一个类型为布尔值的二进制结果。逻辑运算符不会生成与类型(在本例中)x1
兼容的值。没有定义将布尔左参数和元素类型作为右参数的和。IEEE Std 1076中有一个关于表达式的广泛章节,其中有一个关于运算符的小节。我非常同意你的想法,但是我应该如何处理这种情况?@user3300910:正如David和Morten所说的那样-使用x1(0)='0'
而不是而不是x1(0)