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中的内容拿了出来;

 

 

 

 

posted on   知北游。。  阅读(671)  评论(0编辑  收藏  举报

编辑推荐:
· .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吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示