微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:UVM中如何实现两种接口与driver共存?

求助:UVM中如何实现两种接口与driver共存?

时间:10-02 整理:3721RD 点击:
各位:
目前正在使用UVM搭建验证平台,遇到一个问题,比如说,要往DUT中发送一帧图像,但是DUT的接口有很多种可能(比如带hs/vs同步信号的,比如没有同步信号,使用valid与ready来同步的,等等)。那么,可不可以在一个package里面同时存在两种interface,两种driver,两种monitor....。还是我需要把它们放在两个PKG里面?
如果放两个pkg里面,那么,如果有DUT同时有两种接口的话该怎么办呢?
现在就有点搞不清楚,像这种只需要替换driver,interface和monitor的情况,是否可以直接在使用的时候使用override替换,可是两个driver里面除了interface不一样,里面的task也不一样,这样的情况可以用一个来extends另外一个么?

interface无法重载,task是可以重载的,在两套driver是需要定义两套virtual interface的,在你的top中也需要用宏或者别的方式来区分两种不同的DUT和interface的链接,但是图像包的transaction和sequence应该就是通用的了。

假如核心的protocol是基本一致的,只是接口上略有不同,那么我建议可以使用一个package。
区别和DUT不同接口的方法可以在driver中实现,这里面需要有config的参数来动态配置driver的方法。

我也是这样想的,奈何动手全是错误。
两个不同的driver该如何区分呢?也是在master_agent中用不同的宏来区分么?我本来想的是driver_B extends driver_A,这样就能在test中直接替换掉,但是后来发现两个driver的task有所不同,一些变量也有所不同。除非我将它们两个修改成使用同样的task名称。
然后还有 driver_B中有driver_A中不同的interface,这个没办法在替换类的时候替换掉呀。还是我想多了,这个不需要考虑?

是说把两个driver和两个interface都放到同一个package中么?

如果driver a 和driver b 差别很大的话,为什么一定要 从a 扩展出b呢?都从uvm_driver扩展出来有什么不方便的么?不影响override啊。
实在要复用部分代码的话,把这部分代码放到一个base driver类,然后a和b都从base driver扩展出来就好了?
两个package还是一个package,应该是个人喜好或公司规范的问题吧?我个人会用两个package。
还是不完全理解你的问题,贴几行(伪)代码会好些。

那个,我貌似记得如果要override的话,替换的那个必须是extends自被替换的那个。难道我理解有误?我记得当时一开始我采用的是从同一个父类出来的不同子类来override,结果不对,但是子override父就对了。
关于package这个问题,我换了一种做法,就是把driver_a等相关的封入package,而需要替换的新的driver_b和monitor_b并不放入package中,但是将它们的函数与driver_a,monitor_a整合成统一的名称和参数,然后分别当做driver_a和monitor_a的子类。然后在tb中对它们进行override。
这样整了之后就能跑起来了。不知道以后把driver_b和monitor_b都放package中会出现什么问题,待我慢慢试。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top