我们使用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