2011-05-13 54 views
4

這是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

也許你需要一個'ELSE'子句中爲'IF'賦值'spiclk_out'? – Marty

回答

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; 
相關問題