仲裁与lock_grab

返回知识网络总入口 · 运行与激励

核心结论

仲裁解决同一 sequencer 的争用,lock/grab 申请独占。grab 影响后续授权,不能抢断已执行的总线事务。

关键机制

  • 多个 sequence 可并发 start,item 顺序由策略决定;普通 FIFO 模式不会因设置 priority 自动变抢占。
  • lock 正常排队,grab 将请求放队列前部,两者可能等待已有持有者释放。
  • 持有者及允许的子 sequence 可发送,其他竞争者等待。
  • unlock/ungrab 释放,异常与复位也纳入清理。

小例子或流程

// body片段,req已创建且不被其他线程复用
lock();
repeat (4) begin
  start_item(req);
  if (!req.randomize()) `uvm_fatal("RAND","randomization failed")
  finish_item(req);
end
unlock();

仅约束该 sequencer,不等于锁住 DUT 或其他 master。

易错点

  • 持锁等另一个被此锁挡住的 sequence 会死锁。
  • 优先级不保证跨 sequencer 原子性。
  • 缩短独占范围以避免饥饿。

关联知识

原文出处与已有面试题