这一定是VHDL新手中最常见的问题,但我不知道我在这里做错了什么!这似乎符合我在正确的状态机设计中看到的所有习语。我正在编译Altera Quartus 9.2,因为它的价值。实际错误是:
“无法在[文件] [行]处推断”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;
感谢您的时间。
答案 0 :(得分:4)
正如所写的那样,即使spiclk_out
处于活动状态,该过程也会导致spiclk_internal
在reset
边上切换,这不是异步复位的触发器应该如何表现的。
你可能想要的是
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;