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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 652|回复: 3

[求助] 非直线的set和get怎么用比较好?

[复制链接]
发表于 2023-8-6 13:52:43 | 显示全部楼层 |阅读模式

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

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

x
书上写的set 和get都是在build phase阶段的,非直线的假如平级的component,set和get顺序可能不定会有问题,那应该怎么解决呢?
发表于 2023-8-16 22:08:16 | 显示全部楼层
本帖最后由 replaceorstay 于 2023-8-16 22:52 编辑

我的理解是build_phase是一个function,内部语句应该是顺序执行的,第一个方法是在两个同级组件的上一级组件(如driver和monitor的上一级是agent)的build_phase内先例化使用set设置资源的组件,再例化使用get获取资源的组件。第二个方法是在使用get获取资源时把它放进一个while循环,等到get函数获取资源成功后跳出循环继续执行以后的语句。第三个方法是使用某种方式在set之后向get所在组件传递一个信号,表明已经设置了资源,然后在get前等待该信号,但是这种方法破坏了build_phase只是完成构造任务的原意愿而不是已经在进行组件间的通信。
貌似第一个方法只是例化而不是执行相应的build_phase,可行性待测试,第二个方法建立在同级组件build_phase同时执行而不是一个组件一个组件地build,可行性也待测试,第三个方法违背UVM意愿所以不考虑该方法。
另外是否可以在上一级组件的build_phase里手动先后调用两个组件的build_phase来达到set先于get的目的,这一点我通过自己写程序跑仿真测试了一下,发现的确是按照自己调用phase的顺序执行的,不过由于是在uvm的phase机制系统之外被显式调用,所以仿真器会报warning:build()/build_phase() has been called explicitly, outside of the phasing system. This usage of build is deprecated and may lead to unexpected behavior。但是,如果没有别的导致退出仿真的fatal、error发生时,这个warning至少在Questasim这个仿真器上不会令当前仿真停止。所以手动调用phase的方法应该可行。
发表于 2023-9-7 11:47:42 | 显示全部楼层
担心get比set早的话,可以在get之前wait_modified等待set
发表于 2023-9-10 20:55:32 | 显示全部楼层
那就需要有自己确定性的代码执行顺序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-6-11 18:02 , Processed in 0.019785 second(s), 7 queries , Gzip On, Redis On.

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