这肯定是刚接触 VHDL 的人最常见的问题,但我不明白我在这里做错了什么!这似乎符合我在正确的状态机设计中看到的所有习惯用法。我正在 Altera Quartus 9.2 中进行编译,无论其值(value)如何。实际错误是:
“无法推断 [文件] [行] 处的“spiclk_out”寄存器,因为它在时钟沿之外不保存其值”
ENTITY spi_state_machine IS
PORT(
spiclk_internal : IN STD_LOGIC;
reset : IN STD_LOGIC;
spiclk_out : BUFFER STD_LOGIC
);
END spi_state_machine;
PROCESS(spiclk_internal, reset)
BEGIN
IF reset = '1' THEN
spiclk_out <= '0';
END IF;
IF spiclk_internal = '1' AND spiclk_internal'EVENT THEN --error here
spiclk_out <= NOT spiclk_out;
END IF;
END PROCESS;
感谢您的宝贵时间。
最佳答案
正如所写,即使reset
处于事件状态,该过程也会导致spiclk_out
在spiclk_internal
边缘上切换,这不是触发器的工作方式异步重置应该表现良好。
你可能想要的是
SPICLK: process(spiclk_internal, reset)
if reset = '1' then
spiclk_out <= '0';
elsif spiclk_internal'event and spiclk_internal='1' then
spiclk_out <= not spiclk_out;
end if;
end process SPICLK;
关于vhdl - 无法推断寄存器...在...,因为它在时钟边沿之外不保存其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986966/