路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

为什么要用类来做UVM的通信事务?

已有 758 次阅读| 2019-4-12 19:42 |个人分类:验证系统思想| UVM, IC验证

rockeric.com

还有两个月就又到年底了,按照往常是要做年终总结的,可从今年路桑发表的文章来看,数量远远没有达到年初计划,反倒是自己在催周围的同事朋友们多给明年的DVCon中国大会投论文。索性在接下来几周多补一补今年的作业吧,写一写浓妆淡抹总相宜的短篇。


如果你知道UVM,也还知道UVM通信的标准,那你有没有考虑过,TLM通信的对象为什么是类?——除了类,我们还有什么可以用来通信的可能?先说最直观的吧,为什么不可以是结构体呢?


为什么transaction不可以是结构体呢?

  • class和struct都可以包含数据

  • class可以对数据做封装,struct不可以

  • class可以对父类做继承,添加新的成员,struct要添加新的变量只能文本拷贝

  • class可以内置成员方法对成员变量做操作,struct不可以

  • transaction需要随机化和约束,这是类的专长,struct不可以

  • 可以使用对象内建的randomize()函数随机化对象中的随机变量,而struct无法轻松办到这一点(不是不可以)

  • class本身也是naming space,它也可以在自己的body中定义一些类型,而struct不是naming space,由于这一特性class中也可以定义静态变量和方法,struct不可以

  • 在UVM中,考虑到环境的复用性,如果要对transaction添加成员或者修改constraint,合理的做法是扩展子类从顶层利用factory做类型覆盖(override),这首先需要transaction类可以实现注册,而struct无法注册,也自然享受不到这个待遇

  • 在UVM组件的通信中,initiator与target的通信实际上是同一个数据实体,可以实现对同一个数据对象的共享,所以class是合适的,如果修改为struct,那么则发生的是数据拷贝,两端实际上是不同的数据对象。


那么是不是小白以后在UVM中都只使用class,而不需要使用struct,将它束之高阁呢?我们这里再发散一下几个话题吧,我们稍后一一来探讨:

  • struct与class相比就有一些短板,那么谁还可能做transaction呢?

  • 怎么样在合适的场景选择合适的类型和代码方式?




点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-26 21:06 , Processed in 0.012395 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部