If statement 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())与任

我通过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())
与任何已定义且通过选择可见的运算符(例如,上下文子句指定的包可见性)不兼容

尝试将
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)