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'))
... )