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

posted @ 2024-10-23 16:57  小狼与草原  阅读(15)  评论(0编辑  收藏  举报