0
我一直在努力實現異步計數器之外保持其價值,而模擬是正確的,但我一直在從的Quartus錯誤(10818):無法推斷註冊,因爲它沒有時鐘邊沿
收到此錯誤錯誤(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;
你能在你自己的話描述瞭如何'encoderCounta'應該以'了'和'B'反應? – mkrieger1
您的工具抱怨你試圖同時分配encoderCounta時鐘邊沿和異步。而不必限定與時鐘分配邊緣上的分配,如'encoderCounta <= encoderCounta + 1;'是一個組合循環(張弛振盪器與由增量提供的延遲)。如果你通過這個錯誤,你會看到關於組合循環的警告。模擬顯示正確,因爲在靈敏度列表中只有一個。 – user1155120
IF(rising_edge(a))'後的'ELSE'應該做什麼?你需要完全失去它才能合成,這正是錯誤信息告訴你的。 –