4

这一定是 VHDL 新手最常见的问题,但我看不出我在这里做错了什么!这似乎符合我在正确的状态机设计中看到的所有习惯用法。我在 Altera Quartus 9.2 中编译,值得。实际错误是:

“无法推断 [file] [line] 处的“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;

谢谢你的时间。

4

1 回答 1

4

如前所述,即使处于活动状态,该过程也会导致spiclk_out在边沿上切换,这不是具有异步复位的触发器应有的行为方式。spiclk_internalreset

你可能想要的是

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;
于 2011-05-13T05:20:38.640 回答