Syntax 有限状态机IF-ELSE块中的VHDL语法错误 如果((SW(17)='0')或((SW(17)='1')和(SW(16)='0'))或((SW(17)=1)和(SW(16)=0)和(SW(14)=1))和(tempCounter=1)),则 接下来,假设SW被声明为bit\u向量或STD\u逻辑向量,那么您的比较运算符就错了:请记住bit和STD\u逻辑实际上都是由模拟“实”值的值组成的枚举类型,而不是整数(在这种情况下,0和1将是一个有效的选择)

Syntax 有限状态机IF-ELSE块中的VHDL语法错误 如果((SW(17)='0')或((SW(17)='1')和(SW(16)='0'))或((SW(17)=1)和(SW(16)=0)和(SW(14)=1))和(tempCounter=1)),则 接下来,假设SW被声明为bit\u向量或STD\u逻辑向量,那么您的比较运算符就错了:请记住bit和STD\u逻辑实际上都是由模拟“实”值的值组成的枚举类型,而不是整数(在这种情况下,0和1将是一个有效的选择),syntax,vhdl,Syntax,Vhdl,因此,在这种情况下,您需要做的就是在0和1周围添加撇号。检查这是否有效(还假设tempCounter是STD\u逻辑或bit类型信号): 让我用另一种方式来说明问题: (((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) OR ((SW(17) = '1') AND (SW(16) = '0') AND (SW(14) = '1')) AND (tempCounter = '1')) 你现在有: A = ((SW(17) = '0')

因此,在这种情况下,您需要做的就是在
0
1
周围添加撇号。检查这是否有效(还假设
tempCounter
STD\u逻辑
bit
类型信号):


让我用另一种方式来说明问题:

(((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) OR ((SW(17) = '1') AND (SW(16) = '0') AND (SW(14) = '1')) AND (tempCounter = '1'))
你现在有:

A = ((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0')))
B = ((SW(17) = '1') AND (SW(16) = '0') AND (SW(14) = '1'))
C = (tempCounter = '1')
问题可以通过以下方式解决

if A or B and C then
   ...


重新格式化线路,问题更容易发现

if A or (B and C) then
   ...
在一个地方,
SW(17)=“0”
-这是一个标准逻辑或位值。正确。
在另一个例子中,
SW(17)=1
-这是一个整数,…不太多

我相信太多的括号会从清晰度中扣除,我会减少

IF (((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) 
 OR ((SW(17) = 1) AND (SW(16) = 0) AND (SW(14) = 1))
 AND (tempCounter = 1)) THEN


为了减少一点混乱。谁知道,稍微少一点混乱,你可能自己就发现了简单的打字错误?

是的,我意识到了。谢谢你。没有添加单引号是一个错误。但是,我忽略了这一点。非常感谢。
if A or (B and C) then
   ...
IF (((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) 
 OR ((SW(17) = 1) AND (SW(16) = 0) AND (SW(14) = 1))
 AND (tempCounter = 1)) THEN
(((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) 
 ... )
((SW(17) = '0' OR (SW(17) = '1' AND SW(16) = '0')) 
 ... )