我們使用OR1200作爲我們的項目,我們希望爲FPGA板的第8個按鈕分配一箇中斷。這裏是產生中斷的代碼:在VHDL中處理中斷
inrpt: process(CLK_I, RST_I)
begin
if RST_I = '1' then
butt_int_pul <= '0';
butt_int_tmp <= '0';
elsif rising_edge(CLK_I) then
if(DATA_I(8) = '1' and butt_int_tmp = '0') then
butt_int_pul <= '1';
else
butt_int_pul <= '0';
end if;
butt_int_tmp <= DATA_I(8);
end if;
end process inrpt;
process(CLK_I, RST_I)
begin
if RST_I = '1' then
butt_int <= '0';
elsif butt_int_pul = '1' then
butt_int <= '1';
elsif clear_int = '1' then
butt_int <= '0';
end if;
end process;
我們只希望這個中斷只進行一次處理(按住該按鈕,不應該再調用中斷),這就是爲什麼我們包括一個標誌,檢查這個(butt_int_tmp
)。
問題是中斷調用不穩定。我們每次按下按鈕都不會打電話。當我們移除標誌時,它會起作用,但在這種情況下,它的處理方式與我們按住按鈕一樣多。
我們做錯了什麼?
我嘗試了兩種解決方案,但它仍然不穩定。我需要做非常短暫而快速的印刷來使它工作。 – www
@www你使用什麼時鐘頻率?給定幾個到幾百MHz的典型時鐘,您執行的任何物理操作都是「很長」(~100000個時鐘週期),按下按鈕的速度應該沒有什麼區別。你確定你的按鈕被消除了嗎?該按鈕可能是低電平有效(即按下該按鈕時該信號爲0)? – zennehoy