在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6212|回复: 21

[原创] UVM 源码 uvm_sequencer_base grant_queued_locks

[复制链接]
发表于 2021-12-10 10:04:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
这张图其实就是展示了这个函数做的事情,但是我有一点不太明白,既然b之前的请求都是REQ,那为什么还能用is_blcok的函数过滤出not_blocked并存放到lock_list的队列里面呢?

我的理解描述

我的理解描述

代码

代码
 楼主| 发表于 2021-12-10 13:34:07 | 显示全部楼层
哈哈哈,中午睡了一觉,突然灵光一现,知道为什么了,其实就是一个很简单的问题,因为sequencer里面的arb_sequence_q其实是存放了多个sequence,但是你lock的话,其实就是lock的某一个sequence.这个时候你就要把其他的sequence放到lock_list[]里面啊。
 楼主| 发表于 2021-12-10 13:35:26 | 显示全部楼层
这是我的理解也欢迎大家跟我积极探讨。
发表于 2021-12-10 14:27:21 来自手机 | 显示全部楼层


许晴125 发表于 2021-12-10 13:34
哈哈哈,中午睡了一觉,突然灵光一现,知道为什么了,其实就是一个很简单的问题,因为sequencer里面的arb_s ...


看来楼主还没理解到,这里放入lock_list,首先放入的是自己这个seq,不是其他seq,其次,这里为什么要放入当前这个这个seq,原因是需要等待这个seq的lock间的语句执行完,只有他执行完了调unlock才会把自己从这个queue中把自己清除掉,否者他就一直占着sqr(is_blocked这个函数体现)
 楼主| 发表于 2021-12-10 15:02:45 | 显示全部楼层
对,是我理解错了,是我没有理解is_blocked(sequence)的含义,这个函数就是将对应lock的seq放到lock_list[],然后看看当前seq是否在lock_list里面,如果在里面is_blocked(seq)就会返回1.否则返回0.
再反观grant_queued_locks(),其实就是两个作用,第一个如果lock_list已经有seq,则对arb_sequence_q[]进行重新排序,第二个如果lock_list没有seq,就把这个seq.push_back到lock_list[]里面。这个函数在后面还会再调用!

我也是刚开始看源码,一点理解,不知道对与否,希望各位多多指教。
Capture.PNG
 楼主| 发表于 2021-12-10 15:14:12 | 显示全部楼层
本帖最后由 许晴125 于 2021-12-10 15:23 编辑


我也是刚开始看源码,一点自己的理解,希望各位多多指教!
发表于 2021-12-10 16:02:53 来自手机 | 显示全部楼层
这部分相对是有些复杂,uvm有两部分我认为有两部分最复杂的,seq&sqr,还有是objection,seq&sqr复杂的部分又属你现在看的lock机制最复杂,我也理了好多遍才理清,等看明白了又感觉还好
 楼主| 发表于 2021-12-10 16:31:30 | 显示全部楼层
本帖最后由 许晴125 于 2021-12-12 09:12 编辑


eaglezhang01 发表于 2021-12-10 16:02
这部分相对是有些复杂,uvm有两部分我认为有两部分最复杂的,seq&sqr,还有是objection,seq&sqr复杂的部分 ...


大佬
发表于 2021-12-10 17:49:15 | 显示全部楼层


许晴125 发表于 2021-12-10 15:02
对,是我理解错了,是我没有理解is_blocked(sequence)的含义,这个函数就是将对应lock的seq放到lock_list[] ...


请教请教,这里为什么是不等于号?!= 表示lock_list里没有,返回1?
grant_queued_locks里,如果is_blocked返回0(lock_list里有)又push到lock_list里?
我哪儿肯定理解错了……

点评

我理解lock_list[]里面就是存放的lock 的seq,如果是首次lock seq的话,i***lock肯定返回0,然后push_back到lock_list[]里面。  发表于 2021-12-12 09:16
发表于 2021-12-13 15:42:06 来自手机 | 显示全部楼层


anpengfei 发表于 2021-12-10 17:49
请教请教,这里为什么是不等于号?!= 表示lock_list里没有,返回1?
grant_queued_locks里,如果is_block ...


is_blocked是检查sqr有没有已经被其他seq独占
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 14:09 , Processed in 0.028862 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表