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
next_state <= STATE1;
resetTempCounter <= '1';
ELSE
next_state <= STATE0;
END IF;
上面的代码会引发语法错误。我检查了括号,我不认为这是问题所在。我最初打破了长队并认为这是问题,但事实并非如此。我也应该告诉你代码在进程声明中,这不是问题。
错误:
错误(10500):Lab4b.vhd(241)处文本“AND”附近的VHDL语法错误;期待“)”或“,”
错误(10500):Lab4b.vhd(244)附近文本“ELSE”的VHDL语法错误;期待“结束”,或“(”或标识符(“else”是保留关键字)或顺序语句
我是VHDL编程的新手,所以请耐心等待,我将非常感谢您的帮助。
答案 0 :(得分:0)
假设SW
被声明为bit_vector
或STD_LOGIC_VECTOR
,您的比较运算符错误:请记住bit
和STD_LOGIC
是真正枚举的类型,包含模仿“真实”值的值,而不是整数(在这种情况下0
和1
将作出有效选择)。
因此,您需要做的就是在这种情况下在0
和1
周围添加撇号。检查这是否有效(同时假设tempCounter
是STD_LOGIC
或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'))
答案 1 :(得分:0)
让我以不同的方式撰写您的陈述以表明问题:
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
...
或
if A or (B and C) then
...
答案 2 :(得分:0)
重新格式化该行,问题更容易发现...
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'
- 这是std_logic或位值。正确的。
在另一个,SW(17) = 1
- 这是一个整数,......不是那么多。
我相信太多的括号从清晰度中扣除,我会减少
(((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0')))
... )
到
((SW(17) = '0' OR (SW(17) = '1' AND SW(16) = '0'))
... )
减少一点混乱。谁知道,你可能会发现这个简单的拼写错误而不那么混乱?