我知道這個錯誤已經遇到好幾次了,但作爲一個初學者我仍然無法看到如何在我自己的代碼中解決這個錯誤。錯誤和代碼都打印在下面,感謝任何人的輸入。VHDL代碼錯誤:「錯誤(10818):無法推斷<name>在<location>的寄存器,因爲它不保留其時間邊緣以外的值」
Error (10818): Can't infer register for count[0] at 5bit_PHreg_vhdl.vhd(21) because it does not hold its value outside the clock edge
對'count'的每一位重複出錯,並引用代碼中提到的行。
ARCHITECTURE behavioral OF 5bit_PHreg_vhdl IS
SIGNAL count : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(reset, clk, SHR_EN)
BEGIN
-- Check if asynchronous reset is 0
IF reset = '0' THEN --ERROR OCCURS HERE
count <= "00000";
-- Check if rising edge
ELSIF (clk'EVENT AND clk = '1') THEN
IF LD_EN = '1' THEN
count <= FA_in;
END IF;
-- Check if SHR_EN is active
ELSIF (SHR_EN = '1') THEN
count(4) <= c_in;
count(3) <= count(4);
count(2) <= count(3);
count(1) <= count(2);
count(0) <= count(1);
c_out <= count(0);
END IF;
END PROCESS;
PH_reg_out <= count;
END behavioral;
不要在IF(clk'EVENT AND clk ='1')後面使用'else'或'elsif''。此外,使用'rising_edge(clk)'代替'clk'EVENT AND clk ='1''。閱讀[這裏](http://vhdlguru.blogspot.com/2010/04/difference-between-risingedgeclk-and.html)爲什麼。我不能給你詳細的答案,因爲你只提供了一部分代碼,並沒有解釋它應該做什麼。提供[mcve]。 – Staszek
'ELSIF(SHR_EN ='1')THEN'在復位和時鐘邊沿條件之外,它的形式不被識別用於合成。如果它已註冊,則將其移動到前一端內的以下分配中。從進程敏感性列表中刪除SHR_EN。 – user1155120
感謝所有評論過的人。我現在意識到,我衝動地發佈了信息,並沒有堅持提供「最小,完整和可驗證」的問題。 –