无法推断...的注册...因为它不在时钟边缘之外保持其值

时间:2011-05-13 03:26:36

标签: vhdl fpga intel-fpga

这一定是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;

感谢您的时间。

1 个答案:

答案 0 :(得分: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;
相关问题