UVM中断处理机制
UVM中断处理机制
1. 中断处理概述
在SoC系统中,中断作为IP模块的边带信号,通常通过中断控制器传递至CPU。主要应用场景包括:
graph TD
A[中断源] --> B[中断控制器]
B --> C[CPU响应]
C --> D[执行ISR]
2. UVM实现方案
2.1 核心机制
- 使用
grab()/ungrab()实现序列抢占 - ISR序列优先获得sequencer控制权
- 支持多级中断嵌套处理
2.2 架构设计
class top_level_seq extends uvm_sequence #(transaction);
// 主序列与中断监测并行执行
fork
MAIN_SEQ.start();
forever begin
fork
wait_for_IRQ0();
wait_for_IRQ1();
wait_for_IRQ2();
wait_for_IRQ3();
join_any
disable fork;
ISR.start(); // 触发中断服务
end
join_any
endclass
3. 关键代码实现
3.1 顶层序列结构
class top_level_seq extends uvm_sequence #(transaction);
`uvm_object_utils(top_level_seq)
task body;
fork
// 主业务流
main_seq.start(m_sequencer);
// 中断监控流
begin
forever begin
fork
INT_CONF.wait_for_IRQ0();
INT_CONF.wait_for_IRQ1();
INT_CONF.wait_for_IRQ2();
INT_CONF.wait_for_IRQ3();
join_any
disable fork;
isr.start(m_sequencer);
end
end
join_any
endtask
endclass
3.2 中断服务例程(ISR)
class isr extends uvm_sequence #(transaction);
`uvm_object_utils(isr)
task body;
m_sequencer.grab(this); // 抢占sequencer
// 读取中断状态寄存器
read_status_reg(32'h0010_0000);
// 根据中断位清除状态
if (status[0]) clear_irq(0);
if (status[1]) clear_irq(1);
if (status[2]) clear_irq(2);
if (status[3]) clear_irq(3);
m_sequencer.ungrab(this); // 释放sequencer
endtask
endclass
4. 关键技术点
4.1 序列抢占机制
| 方法 | 作用描述 | 使用场景 |
|---|---|---|
| grab() | 独占sequencer资源 | ISR开始前 |
| ungrab() | 释放sequencer控制权 | ISR完成后 |
| lock() | 排队等待sequencer(非抢占) | 优先级较低的中断 |
| unlock() | 释放lock获得的sequencer控制权 | 顺序任务处理 |
4.2 中断优先级处理
graph LR
IRQ3-->IRQ2
IRQ2-->IRQ1
IRQ1-->IRQ0
style IRQ3 fill:#f96
style IRQ2 fill:#f96
style IRQ1 fill:#f96
style IRQ0 fill:#f96
5. 验证注意事项
- 中断竞争条件测试
- 嵌套中断处理验证
- 中断屏蔽功能检查
- 中断响应时间测量
- 多核场景下的中断路由
6. 典型调试场景
`uvm_info("ISR_DEBUG", $sformatf("检测到IRQ[%0d]触发", irq_id), UVM_LOW)
`uvm_info("ISR_DEBUG", "开始清除中断状态", UVM_MEDIUM)
`uvm_info("ISR_DEBUG", "sequencer控制权已释放", UVM_HIGH)
7. 最佳实践
- 为不同中断源创建独立ISR序列
- 在virtual sequence中协调多个中断
- 使用config_db动态配置中断优先级
- 添加覆盖率收集点:
covergroup interrupt_cg;
coverpoint irq_id {
bins irq0 = {0};
bins irq1 = {1};
bins irq2 = {2};
bins irq3 = {3};
}
endgroup
重要提示:
- grab/ungrab需成对使用以避免资源锁死
- ISR执行时间应短于中断间隔
- 建议结合uvm_event实现跨组件同步

浙公网安备 33010602011771号