6.4seqr&driver-seqr的lock与grab操作
注:该部分内容可参考uvm cookbook进行补充;
1.seqr的lock与grab操作
(1) lock: sequence向sequencer发送一个请求,这个请求与其他sequence发送transaction的请求一同被放入sequencer的仲裁队列中.当前面的所有请求处理完毕, sequencer就开始响应这个lock请求,此后sequencer会一直连续发送此sequence的transaction,直到unlock操作被调用.
注1:从效果上看,调用lock操作后,sequencer的所有权并没有被所有的sequence共享,而是被申请lock操作的sequence独占了;
注2:下面code中,lock语句前,sequence0和sequence1交替产生transaction; lock语句后,一直发送sequence1的transaction,直至unlock语句被调用后,sequence0和sequence1又开始交替产生transaction;
(2) grab: grab操作也用于暂时拥有sequencer的所有权,但是grab操作比lock操作优先级更高. lock请求是被插入sequencer仲裁队列的最后面,而grab请求则被放入sequencer仲裁队列的最前面.
注1: 如果两个sequence都试图用lock任务(或grab任务)来获取sequencer的所有权,先获得所有权的sequence在执行完毕后,才会将所有权交还给另外一个sequence;
注2:如果一个sequence在使用grab任务获取sequencer的所有权前,另外一个sequence已经使用lock任务获得了sequencer的所有权,grab任务会一直等待lock的释放;
2.seqr lock与grab操作示例
注1:下面的代码中,将lock的调用改为了m_sequencer.lock(this),其实是将uvm_sequence_base.svh的lock task中的内容拿了出来;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?