丁凤的个人空间 https://blog.eetop.cn/968170 [收藏] [复制] [分享] [RSS]

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

日志

重载与UVM factory 机制

已有 4683 次阅读| 2016-5-13 18:59 |个人分类:SV&UVM

重载

面向对象的语言都有重载的特征。重载的优势就是可以使得子类实例以父类类型指针传递后,还能表现出子类的行为特性。(使用virtual function/task实现)

SV中额外增加对约束的重载,其实现方式主要有有两种:
1. 使用constraint_mode(0)关闭先前的约束,然后重新randomize_with(新约束)。
2. extends出新的class,在新的class中重新定义新的约束即可。

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("requested_class", this.get_full_name(), name)的方式实例化。因为SV在进行类型检查时会创建一个容器,前者制定了该容器的类型为requested_class,进行override时该容器不能放非派生类的override_class。而后者使用factory.create_object/component_by_name()函数实例化会创建uvm_object/component类型的容器,该容器为最基本的基类(相对于requested_class来说),因此改了类型的容器能够放下被重载类,在重载时也就不会报错。(上述容器即句柄,实质是可以将子类句柄指向父类。)

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

factory的调试:factory.print( int all_types=1)  参数可为0,1,2 ,default1,打印用户定义的factory参数类。


上述均为笔者近期的学习理解+总结,不足之处欢迎讨论指正O(∩_∩)O~。





点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 783

    访问数
关闭

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

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

GMT+8, 2024-5-5 04:21 , Processed in 0.014563 second(s), 7 queries , Gzip On, Redis On.

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