UVM白皮书第7章学习笔记

1.代码清单 7-10中在base_test的build_phase中env.p_rm=this.rm,若转移到connect phase中报my_model中p_rm.invert.read未实例化。因为connect phase自下而上执行,先执行my_env中mdl.p_rm=this.p_rm,此时env中只声明了p_rm没有实例化,所以this.p_rm是个null,而在base_test的build_phase中连接后,env.p_rm收获了实例化的指针,connect_phase也就能正常执行下去。这是父句柄传给子的情况,需要在父亲的build_phase中实例化并连接给子,子无需实例化。

对于子传给父的情况,比如在monitor中实例化uvm_analysis_port #(my_transaction)ap;,传给agent,agent中只需要声明ap,在connect_phase中this.ap=mon.ap,就能把实例化的句柄传给agent。

这种父子之间传递的句柄,无需重复实例化,因为会造成内存泄漏,比如monitor中你实例化ap,句柄A,你在agent又实例化一个句柄B,connect_phase中this.ap=mon.ap,句柄B被句柄A覆盖,句柄B占的内存一直都不会被释放。

posted @ 2026-07-27 16:39  孑尛燚茻  阅读(1)  评论(0)    收藏  举报