You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MicroBlaze通过AXI_GPIO接收gen_data模块中断失效问题求助

问题分析与解决方案

核心问题

你的gen_data模块输出的out_data信号仅会被置为高电平,之后没有拉低动作,导致信号持续保持高电平。而AXI_GPIO的中断(默认多为边沿触发)需要信号存在电平跳变(如低→高的上升沿)才能触发,按键模块因有按下/松开的电平变化能满足触发条件,而你的模块输出无跳变,因此中断无法触发。

具体修改方案

  1. 修改gen_data模块,生成脉冲信号
    修改代码让out_data产生1个时钟周期的高电平脉冲,确保每次计数到目标值时,信号有明确的上升沿和下降沿:

    entity generate_data is
      port (
            clk : in std_logic;
            out_data : out std_logic
        );
    end generate_data;
    
    architecture Behavioral of generate_data is
    
    begin
        process (clk)
            variable counter : integer := 0;
        begin
            if rising_edge(clk) then
                -- 默认拉低输出,仅在计数达标时输出1个时钟周期的高脉冲
                out_data <= '0';
                counter := counter + 1;
                if counter = 100000 then
                    out_data <= '1';
                    counter := 0;
                end if;                       
            end if;
        end process;
    end Behavioral;
    

    该修改后,out_data每1ms(100MHz时钟下,100000个周期)产生一次1时钟周期的高脉冲,刚好能触发AXI_GPIO的上升沿中断。

  2. 确认AXI_GPIO中断配置

    • 在Vivado块设计中双击AXI_GPIO核,检查中断触发模式,确保设置为上升沿触发(若需电平触发也可调整,但脉冲触发更稳定)。
    • 确认MicroBlaze驱动代码中已正确使能该AXI_GPIO的中断位,并配置好中断服务函数。
  3. 重新验证流程
    重新综合、实现设计,生成比特流后下载到FPGA中测试中断触发情况。

内容的提问来源于stack exchange,提问作者Andry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:47:41