【问题标题】:VHDL Syntax error in IF-ELSE block of finite state machine有限状态机的 IF-ELSE 块中的 VHDL 语法错误
【发布时间】:2013-03-29 19:53:08
【问题描述】:
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 语法错误;期望“end”,或“(”,或标识符(“else”是保留关键字),或顺序语句

我对 VHDL 编程相当陌生,所以请多多包涵,我将感谢您的帮助。

【问题讨论】:

    标签: syntax vhdl


    【解决方案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
       ...
    

    if A or (B and C) then
       ...
    

    【讨论】:

      【解决方案2】:

      假设SW 被声明为bit_vectorSTD_LOGIC_VECTOR,那么您的比较运算符就搞错了:请记住bitSTD_LOGIC 都是由模仿“真正的”,而不是整数(在这种情况下,01 将是一个有效的选择)。

      因此,在这种情况下,您只需在 01 周围添加撇号即可。检查这是否有效(还假设 tempCounterSTD_LOGICbit 类型的信号):

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

      【讨论】:

      • 不添加单引号是一个错误。然而,这是我忽略的一个。非常感谢。
      【解决方案3】:

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

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

      为了减少一点混乱。谁知道呢,你可能自己发现了一些简单的错别字?

      【讨论】:

      • 是的,我意识到了这一点。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多