前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我眼中的UVM |05.uvm_component和uvm_object

我眼中的UVM |05.uvm_component和uvm_object

作者头像
用户10108023
发布2022-10-28 16:16:00
5210
发布2022-10-28 16:16:00
举报

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不具有的特性。

  • 通过new的时候指定parent来形成一种树形的组织结构;
  • phase的自动执行的特点。
代码语言:javascript
复制
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,负责打印验证环境的组件拓扑结构,调用这个函数即可:

代码语言:javascript
复制
unction void print_topology(uvm_printer printer = null)

同时,也有一个控制打印拓扑结构的bit位:

代码语言:javascript
复制
bit enable_print_topology = 0

如果使能这一个bit位,整个验证平台的拓扑结构将在反正结束只之后打印出来。

好了,今天的分享就到这里了,希望对你的学习有一点帮助。持续更新,欢迎关注。觉得有帮助的朋友,希望能够点个赞鼓励一下!!你的每个鼓励都是我持续创作的动力!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不二鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档