微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > UVM中,什么场合用callback最好?

UVM中,什么场合用callback最好?

时间:10-02 整理:3721RD 点击:
最近抓狂一些UVM的小问题,请问达人们:
UVM中,什么场合用callback最好?

同问。
本来刚学SV的时候,知道callback主要用来给coverage和scorebord传递transaction。但是UVM中这些都有更简单的办法,那么我就不知道UVM里面callback用来干嘛的,好像也不是没有作用的,我看资料里面还是占了比较大的篇幅的。

UVM並不鼓勵使用Callback,甚至一開始的版本中不支援callback。同時有強調callback雖然方便,但卻會破壞原來OO的結構。是為了要兼容VMM才在後來的版本加入callback。主要是給習慣使用的人用。

如果是设计初期,最好什么场合都不要用,在工程末期,临时需添加新功能或改变数据结构时,为了不对原有代码有太大的修改,不得已才用

call back一般用来制造一些特殊的case,例如error case,一般的数据是和你的平时的数据流不一样才会用到的。其实你在你的transaction里面定义一个制造特殊情况的函数,是一样的,只是call back笔记哦通用而已

原来如此啊

讲的不错 学习了

讲的不错,学习了!

你一定是看的VMM方面的书,或者说是system for verification这本书。
callback有用,但是尽量不要用,一般来说,如果允许修改的话用继承可以达到callback的效果。
个人观点:UVM中的factory机制加上sv的面向对象属性,callback基本上用不着。

用例中定义一个新子类,把父类中需要重写的函数覆盖了,再用set_type_by_type()函数,让改子类覆盖平台中的父类。 经典做法

callback有用,但是尽量不要用
不赞成这个观点!

看个人的使用习惯吧。factory与面对象的重载特性通常可以替代callback,且使用起来更加简单一些。callback使用的时候,要定义好多东西,好多步骤,用起来比较麻烦。

我觉得折衷一点的办法是加一些类似callback的函数或者任务,一般情况为空,需要的时候派生个子类修改这些函数,把变化的部分隔离开来,很直观

派生一个新的类,把变化的部分使用虚函数重载,然后使用factory的override功能。同样也很干净。使用callback的最关键的一点是,你需要提前预知到什么地方可能需要callback,并且留下接口。但是这个要求对于一般人来说有点难。即使是经验丰富的工程师也很难做到。
使用factory则不存在这个问题。只要写代码的时候注意一下,不要有太长的task或者function,换言之,task和fucntion一定要短,那么重载的时候就会非常方便。这就是小而美的哲学,我在《UVM实战》中对此亦有提及。

是这样的,尽量遵循单一职责原则,功能太多就不好修改。
具体要在什么地方加callback确实有经验成分,例如图像的平台一般会在一帧处理开始或者结尾加上,这个还是比较好预知的,但是不同领域有不同的要求,需要经验的积累,就这点来说,factory确实有优势

单一职责原则通常就意味着功能模块划分。个人认为,功能模块划分的事情由callback来实现并不是最好的选择。这属于当初在类或者任务/函数的规划时就要做好的事情。如果一个DisplayPort的driver,代码估计会有几千行。这些代码放在一个driver中是不可想像的。必须分成多个模块,如stream_driver,pack_driver等等。当然了,也可以使用callback来划分,那么就是stream_callback,pack_callback等。只是个人的使用习惯而已,有人已经习惯了用callback来做一切事情。在《UVM实战》就有一节中尝试着放弃factory,放弃sequence,只使用callback来实现所有的test case,结论完全是可以的。
对于同一个问题,UVM提供了多种解决方案。在这多个方案当中选一个比较好的,如果这些方案实现难度都差不多,那就选择自己习惯的用法。有时候,面对自己习惯的用法,即使它不是最优解,但是依然会使用。这就是习惯的力量。

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

网站地图

Top