【问题标题】:Error (10818): Can't infer register because it does not hold its value outside the clock edge错误 (10818):无法推断寄存器,因为它没有在时钟沿之外保持其值
【发布时间】:2017-02-20 20:15:47
【问题描述】:

我一直在尝试实现一个异步计数器,并且模拟是正确的,但我不断从 Quartus 收到此错误

错误 (10818):无法在 EncoderComputation.vhd(35) 中推断“encoderCounta[0]”的寄存器,因为它没有在时钟沿之外保持其值。

任何帮助将不胜感激!

GPIO_0(1) <= encoderBits(0);
GPIO_0(3) <= encoderBits(1);
GPIO_0(5) <= readPosition;
GPIO_0(7) <= clk;


PROCESS(a)
BEGIN
    IF (rising_edge(a)) THEN
        IF (b = '0') THEN
            IF (encoderCounta = 399) THEN
                encoderCounta <= 0;
            ELSE 
                encoderCounta <= encoderCounta + 1;
            END IF;
        ELSIF(b = '1') THEN
             IF (encoderCounta = 0) THEN
                encoderCounta <= 399;
             ELSE
                encoderCounta <= encoderCounta - 1;
             END IF;
        END IF;
    ELSE
        IF(b = '1') THEN
             IF (encoderCounta = 399) THEN
                encoderCounta <= 0;
             ELSE
                encoderCounta <= encoderCounta + 1;
             END IF;
        ELSIF (b = '0') THEN
             IF (encoderCounta = 0) THEN
                encoderCounta <= 399;
             ELSE
                encoderCounta <= encoderCounta - 1;
             END IF;
        END IF;
    END IF;
END PROCESS;


result <= encoderCounta;

【问题讨论】:

  • 你能用你自己的话描述一下encoderCountaab 的反应吗?
  • 您的工具抱怨您试图在时钟边沿和异步分配 encoderCounta。如果不使用时钟边沿限定分配,则诸如encoderCounta &lt;= encoderCounta + 1; 的分配是组合循环(具有由增量提供的延迟的张弛振荡器)。如果您克服了错误,您将看到有关组合循环的警告。模拟显示正确,因为敏感度列表中只有 a。
  • ELSEIF (rising_edge(a)) 之后应该做什么?您需要完全失去它才能使其可合成,这正是错误消息告诉您的内容。
  • 关于这个话题有很多现有的问题。搜索“错误的同步描述”。您的代码需要匹配 stackoverflow.com/a/34067908/4090959 之类的模板才能符合综合条件。

标签: asynchronous vhdl counter quartus


【解决方案1】:

当您想要一个可综合的代码时,按照它推断所需硬件的方式进行编码。

一个寄存器应该只在时钟边沿改变值并保持该值直到下一个时钟边沿。你说IF (rising_edge(a)) 赋值,没关系。但是你已经放了一个else!当计数器不是上升沿时,您还为计数器分配了一些值。这不是寄存器的工作方式。如果不是上升沿,请勿更改值,即删除 else 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多