https://mp.weixin.qq.com/s/_r5nW-tiMFBlEG3Tp8HvmQ
通过本篇文章主要想送给广大验证初学者和爱好者2件礼物:“一条鱼”和“一只鱼竿”。希望大家连吃带拿,开开心心地。
“一条鱼”就是题目中的那个问题本身:“UVM中怎么在sequence中调用agent中的函数”。这个问题很多同学猛的听到可能还是会有一些懵,反应不出一个优雅的解决方法。
“一只鱼竿”就是当你遇到这样一个问题的时候,怎么快速写一段代码验证你的想法是不是可以实现,也就是Jerry今天带你解决这个问题的过程。
众所周知,在UVM中一个标准的agent里面例化着driver、monitor、sequencer组件,发激励时通过“游离”在agent中的sequence产生transaction,借助sequencer给driver进而发出激励。
但是“游离”在agent中的sequence怎么访问agent中的函数呢?
有人说可以使用config_db机制:在某个地方如env中把agent set出去,然后在sequence中用config_db机制的get拿到agent的资源,进一步在sequence中调用agent中的函数。
这样确实可以实现功能,但是不太优雅,他需要借助除了sequence本身的“外力”, 需要在别处多写几行代码来set agent。
当然了,对于这种函数调用需求我们其实还可以通过之前讲的单例模式(IC验证er一起学点设计模式(1)—单例模式),做成全局组件来实现,本文就不提了,大家自己探索。
那怎么做才能比较优雅