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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 8630|回复: 24

[求助] UVM objection

[复制链接]
发表于 2022-1-20 17:40:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 许晴125 于 2022-1-26 14:17 编辑

最近整理了一下UVM phase以及objection对应的源码,我把所有的核心的代码抽象了一下,用伪代码把所有的相关的function/task整理了一下。
UVM源代码的版本是UVM1.2
https://www.edrawmax.cn/online/s ... 1ec8a7585ec8adb0e95
大体的思路,我理解的是raise_objection和drop_objection,会通过递归的方式更新m_total_count[],类似于下图:

image.png

等到m_total_count == 0的时候,m_init_objection函数会被唤醒。进而trigger.all_drop event,然后execute_phase wait_for(all_drop),m_state=UVM_PHASE_READY_TO_END.完成一个phase
image.png

但是,有个地方没有看懂m_raise的函数里面,我就对一个简单的case的通路能整理清楚,但是这里实在不太理解是在做什么?

image.png
image.png

image.png
 楼主| 发表于 2022-1-20 17:44:58 | 显示全部楼层
难道是所有的raise_objection/drop_objection之后,但是set_drain_time之前有再次有raise_objection/drop_objection的操作?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-21 09:13:13 | 显示全部楼层


   
年轻的韭菜 发表于 2022-1-20 19:44
你搞这个干嘛,把objection里的process怎么实现搞明白就行了。


我觉得但看UVM其实就那点东西,但要是看细节追原因,还是源码能解开疑惑。源代码能够让人知其所以然。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-21 09:15:22 | 显示全部楼层


   
eaglezhang01 发表于 2022-1-20 22:50
没人回答的话等几天我回答,最近有点忙,这个部分我上次看也差不多一年了 ...


我看了也有小一个月了,有些地方还是理解不了,如果没人点播一下的话,估计会一直卡在这里。希望大佬带我飞~~~~~

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 09:23:54 | 显示全部楼层


   
sfc19910705 发表于 2022-1-21 15:46
`uvm_info(get_name(),"drop 2nd",UVM_LOW)
  phase.drop_objection(this);
  phase.phase_done.display_ ...


感谢回复,这个地方我的理解就是正常的objection机制,不就是做了drop raise以及total_count的计数吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 09:25:52 | 显示全部楼层


   
ryanhunter 发表于 2022-1-22 21:46
这个应该是当一个drop之后count为0时,会唤醒execute scheduled那个线程,但是有可能在这个线程执行期间又 ...


也就是这块是在执行total_count = 0的时候,drop/raise objection的情况?这种情况下是要被忽略掉的?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 09:27:06 | 显示全部楼层


   
ryanhunter 发表于 2022-1-22 21:49
包括diff_count那一块是为了比较这次raise的count和上次drop的count做一个比较,因为有可能上次drop count ...


大佬,能再讲清楚一些吗?还会没有太理解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 11:54:28 | 显示全部楼层
本帖最后由 许晴125 于 2022-1-26 13:59 编辑


   
sfc19910705 发表于 2022-1-24 13:42
你没有看到我之前发的那个图吧


图倒是看了,按照我的理解就是在所有的count = 0 的时候,1 drop_objection + 2 raise_objection => total_count +1 这不就是objection的正常的机制吗?麻烦大佬解说一下这张图?
image.png
image.png
image.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 14:13:07 | 显示全部楼层


   
ryanhunter 发表于 2022-1-24 12:46
手机码字可能说的比较混乱……。关于diff count,你可以先看一下通常的drop流程,比如第一次raise带count ...


reraise我看是在uvm1.1d的版本中才会有这个变量,我这个版本是UVM1.2的版本,好像有些不同。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 14:17:04 | 显示全部楼层


   
ryanhunter 发表于 2022-1-24 12:54
execute scheduled forks这个线程如果正常执行下去的话会结束当前phase,当这个线程走到一半的时候如果出 ...


看到很多大家的回复,其实我对您的理解是比较赞同的!我看的代码版本是UVM1.2,我看很多人提到reraise这个变量,在UVM1.1d的版本确实有这个变量,但是UVM1.2版本并没有涉及。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-10-16 03:36 , Processed in 0.019868 second(s), 5 queries , Gzip On, Redis On.

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