【问题标题】:Can't infer register for ... at ... because it does not hold its value outside the clock edge无法推断 ... at ... 的寄存器,因为它不会在时钟沿之外保持其值
【发布时间】:2011-05-13 03:26:35
【问题描述】:

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

感谢您的宝贵时间。

【问题讨论】:

  • 也许您需要在ELSE 子句中为spiclk_out 分配IF

标签: vhdl fpga intel-fpga


【解决方案1】:

正如所写,即使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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多