xdma_multi_interrupt
module xdma_multi_interrupt (
input wire clk,                      // 时钟信号
input wire rst_n,                    // 复位信号,低电平有效
input wire [15:0] event_trigger,     // 16 位事件信号,触发多个中断
output reg [15:0] usr_irq_req,       // 用户中断请求信号(16 个中断)
input wire [15:0] usr_irq_ack        // 用户中断确认信号(16 个中断)
);
// 状态定义
localparam IDLE        = 2'b00;      // 空闲状态
localparam IRQ_ASSERT  = 2'b01;      // 发送中断请求
localparam IRQ_WAIT_ACK = 2'b10;     // 等待中断确认
// 状态机寄存器,每个中断有独立状态
reg [1:0] state [15:0];              // 当前状态
reg [1:0] next_state [15:0];         // 下一个状态
integer i;
// 状态机和中断请求的处理
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        usr_irq_req <= 16'b0;
        for (i = 0; i < 16; i = i + 1) begin
            state[i] <= IDLE;        // 初始化每个中断为 IDLE 状态
        end
    end else begin
        for (i = 0; i < 16; i = i + 1) begin
            state[i] <= next_state[i];  // 更新每个中断的状态
            case (state[i])
                IDLE: begin
                    // 等待事件触发
                    usr_irq_req[i] <= 1'b0;  // 确保中断请求信号低电平
                    if (event_trigger[i]) begin
                        next_state[i] <= IRQ_ASSERT;  // 事件触发,准备发送中断
                    end else begin
                        next_state[i] <= IDLE;        // 保持在空闲状态
                    end
                end
                IRQ_ASSERT: begin
                    // 发送中断请求
                    usr_irq_req[i] <= 1'b1;  // 设置中断请求
                    next_state[i] <= IRQ_WAIT_ACK;  // 切换到等待确认状态
                end
                IRQ_WAIT_ACK: begin
                    // 等待主机确认中断
                    if (usr_irq_ack[i]) begin
                        usr_irq_req[i] <= 1'b0;      // 主机确认后清除中断请求
                        next_state[i] <= IDLE;       // 返回空闲状态
                    end else begin
                        next_state[i] <= IRQ_WAIT_ACK;  // 等待确认
                    end
                end
                default: begin
                    next_state[i] <= IDLE;  // 默认状态为 IDLE
                end
            endcase
        end
    end
end
endmodule
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号