05
我眼中的UVM
写在前面的话
嗨,屏幕前的你还好吗?我是不二鱼,一个不喜欢写技术博客的IC验证工程师,写这个系列,是需要很大的勇气的,因为,写得人很多,但写得好的不多,我也是如此。我一个菜鸡,敢写UVM(应该也不止UVM,我尽量把其他知识杂糅进去),我是疯了吗?至今能有比张强老师写得好的估计也没有,我之所以写,是为了促进自己进步,换了一个新的环境,使用UVM也是日常必备,所以,以写促学,写一写我眼中的UVM,也希望能和大家一起学习,相互成就,如有错误,欢迎私信我批评指正。
更新频率:暂定一周一更。
今天和大家分享UVM中最基本的两个类。component与object是UVM两大最基本的概念。在我们创建一个类的时候,要么派生自uvm_component及其派生类,要么派生自uvm_object及其派生类,再无其他。所以,对于初学者,在你开始创建类的时候,你应该思考的是,我这个新的类应该派生自哪里,只有搞清楚派生自哪里,才能创建正确。这一节,我们就一起搞清楚“来自哪里”这个问题。下面的图,是基本的类的继承关系,请牢记。
虽然uvm_component和uvm_object看似是有你无我,有我无你的对等关系。但从继承图中可以看出,其实,uvm_component是uvm_object的“孩子”。uvm_object是UVM中最最基本的类,工作中常用的类基本都是派生自uvm_object,uvm_void更是类的祖宗。而工作中UVM验证平台常见的组件,比如,uvm_agent,uvm_driver,uvm_monitor,uvm_scoreboard,uvm_env,uvm_test都继承自uvm_component。
uvm_component有两个uvm_object不具有的特性。
class A extends uvm_component;
uvm_component B;
function new(string name, uvm_component parent);
super.new(name, parent);
B = new("B",this);
endfunction
endclass
在B进行实例化的时候,就会把this指针传给A,代表A是B的parent。可不可以不指定parent,理论上,A是我们创建的类,它有几个孩子我们知道,但是,当UVM的树形结构越来越庞大,各种复杂多样的继承关系,很容易出错。只有指定parent,才能正确的继承,才能在遍历UVM的树形拓扑结构时,生成完整的topology结构,你不想某个类“无父无母无孩”吧?那怎么打印UVM的topology结构呢?
在UVM的类库地图中,有一个函数print_topology,负责打印验证环境的组件拓扑结构,调用这个函数即可:
unction void print_topology(uvm_printer printer = null)
同时,也有一个控制打印拓扑结构的bit位:
bit enable_print_topology = 0
如果使能这一个bit位,整个验证平台的拓扑结构将在反正结束只之后打印出来。
好了,今天的分享就到这里了,希望对你的学习有一点帮助。持续更新,欢迎关注。觉得有帮助的朋友,希望能够点个赞鼓励一下!!你的每个鼓励都是我持续创作的动力!