索手锋芒的个人空间 https://blog.eetop.cn/calvin [收藏] [复制] [分享] [RSS]

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

日志

关于set_type_override_by_type

热度 1已有 6957 次阅读| 2016-3-31 11:27 |个人分类:UVM notebook

set_type_override_by_type其overrid_type必须是original_type的子类,现在碰到一个case:
原本有一个父类base_sequence。
其它子类的sequence都是从这个base_sequence里面引出来的。
后来,design基本属性有变化,本来想直接再extends出一个子类,然后用set_type_override_by_type去overrid父类,理所当然的想到其它子类就会继承到这个变化 。结果失败了!
从结果来看,通过子类去override父类以达到更改其它兄弟类是办不到的。这个属性一开始就应该规划到sequence_item里面去。只是在做testplan时为了针对不同sequence方便统一constraint少写几行代码,现在看来是划不来的。


另附另外解釋,似乎可以解決這一問題,直接兄弟類之前進行重載:
set_type_override_by_type(child_a.get_type(), child_b.get_type())

UVM中factory机制的重载
UVM提供以下函数实现override:
set_type_override()
set_inst_override()
set_type_override_by_type()
set_inst_override_by_type()

以上四个函数只能在component中使用,tb_top(与uvm_test_top是相互独立的两棵树)中无法使用,只能使用下面四个:
factory.set_type_override_by_type()
factory.set_inst_override_by_type()
factory.set_type_override_by_name()
factory.set_inst_override_by_name()
其中*inst*是针对部分指定的object/component进行override,*type*针对所有override。
张强的书中提到使用factory重载有四个前提如下:
1. 注册到factory中(uvm_object/component_utils())
2. 使用factory机制即代理类type_id::create()方式实例化,而不是new()的方式。
3. 重载类与被重载类是派生关系,或有多重重载时,最终重载类与最初被重载类是派生关系。
4. component与object不能互相重载。
针对上述第三点,需要指出的是两个平行的类(即派生自同一个父类)的也是可以互相重载的,只是被重载的类requested_class不能使用requested_class::type_id::create()的方式实例化,而要使用factory.create_object/component_by_name/type的方式实例化。因为SV在进行类型检查时会创建一个容器,前者制定了该容器的类型为requested_class,进行override时该容器不能放非派生类的override_class。而后者使用factory.create_object/component_by_name/type()函数实例化会创建uvm_object/component类型的容器,该容器为最基本的基类(相对于requested_class来说),因此改了类型的容器能够放下被重载类,在重载时也就不会报错。(上述容器即句柄,实质是可以将子类句柄指向父类。)


实例化重载类时,type_id会先去factory的表中查找是否有重载记录,若无,则执行requested_class的new();若有则执行override_class的new().分配物理空间。
1

点赞

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 4

    获赞
  • 4

    评论
  • 3176

    访问数
关闭

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

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

GMT+8, 2024-5-10 06:34 , Processed in 0.027974 second(s), 14 queries , Gzip On, Redis On.

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