首页 > 其他分享 >xdma_multi_interrupt

xdma_multi_interrupt

时间:2024-10-23 16:47:53浏览次数:1  
标签:multi wire 15 中断 irq localparam interrupt input xdma

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

标签:multi,wire,15,中断,irq,localparam,interrupt,input,xdma
From: https://www.cnblogs.com/zyk-2024/p/18497772

相关文章

  • Cinemachine系列——Noise&Basic Multi Channel Perlin
    在Cinemachine相机的游戏对象中使用基本多通道柏林噪声组件,以通过柏林噪声运动模拟相机抖动。柏林噪声是一种计算伪随机运动并具有自然行为的技术。简单来说,基本多通道柏林噪声组件应用了一个噪声配置资产,用于定义噪声随时间变化的行为。Cinemachine自带了一些噪声配置资产,你可以......
  • (multi)map和set--C++
    文章目录一、序列式容器和关联式容器二、set系列的使用1、set和multiset参考文档2、set类的介绍3、set的构造和迭代器4、set的增删查5、insert和迭代器遍历使用样例:6、find和erase使用样例:7、multiset和set的差异三、map系列的使用1、map和multimap参考文档2、map类的介......
  • 【论文阅读】【IEEE TGARS】RRNet: Relational Reasoning Network WithParallel Multi
    引言任务:光学遥感显著目标检测-关系推理论文地址:RRNet:RelationalReasoningNetworkWithParallelMultiscaleAttentionforSalientObjectDetectioninOpticalRemoteSensingImages|IEEEJournals&Magazine|IEEEXplore代码地址:rmcong/RRNet_TGRS2021(g......
  • ECE 4122/6122 OpenGL with OBJ files and Multiple Objects
    ECE4122/6122Lab3:OpenGLwithOBJfilesandMultipleObjects(100pts)Category:3DGraphicsDue:TuesdayOctober22th,2023by11:59PMObjective:Tocreateadynamic3Dgraphicsapplicationusinglighting,shading,modeltransformations,andkeyboa......
  • 为什么需要Multi-agent framework?
    为什么需要Multi-agentframework?Multi-agentframework(多智能体框架)之所以被需要,主要基于以下几个方面的原因:一、突破单智能体的限制上下文窗口大小限制:在处理长上下文(LongContext)时,单一的智能体可能会受到上下文窗口大小的限制,导致无法有效地处理和生成回复。通过拆分......
  • Multithreaded programming
    Lab02:MultithreadedprogrammingDuedatePleaserefertothelabassignmentrequirements.GoalThegoalofthisprojectis(1)toobtainagoodunderstandingofmulti-threading,(2)topracticecreatingthreadsandcoordinatetherunningofthethreads.......
  • 一篇文章弄懂Redission可重入、重试锁以及MultiLock原理
    Redisson的可重入锁(ReentrantLock)是基于Redis实现的分布式锁,用于在分布式系统中提供线程安全的锁机制。它允许同一个线程在不释放锁的情况下多次获得锁,并在所有锁操作完成后,锁才真正被释放。下面我们来详细解析Redisson可重入锁的原理。基本原理可重入锁的核心思想是,同一线......
  • 基于Multisim的密码锁的控制电路设计与仿真
    设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁从第一......
  • MultipartEncoder处理request请求为表单数据时
    -----------------------------7e713d354f0fa6Content-Disposition:form-data;name="username"log_username-----------------------------7e713d354f0fa6Content-Disposition:form-data;name="password"log_pwd----------------------------......
  • 【LaTeX】13表格梳理:基本表格、跨行(multirow)和跨列(multicolumn)表格
    【LaTeX】表格梳理:基本表格、跨行(multirow)和跨列(multicolumn)表格写在最前面一、基本表格1.表头标题2.常用选项[htbp]3.其他二、表格美化1.跨列(multicolumn)2.跨行(multirow)三、全部latex代码四、小结......