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

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

日志

SV及UVM高级话题篇之四:OVM到UVM的移植(续2)

已有 1475 次阅读| 2018-6-29 19:04 |个人分类:验证系统思想|系统分类:芯片设计

替换OVM configuration方法


习惯于OVM配置方法的用户,在配置过程中都使用的是[set,get]_config_[int,string,object]来在组件层次中实现配置,尽管在UVM中这些方法仍然有效,但我们并不建议再使用旧有的方法,原因有二。第一是,原来在OVM中并不支持interface通过配置的方式直接传递interface,也因为这一种限制使得interface不得不找到其它的ovm_object wrapper来将其二次包装继而通过object的配置方式实现接口传递,这种传递也是OVM的配置中为人诟病的一个地方,在UVM中interface也被纳入了uvm_config_db传递的可行参数中,与UVM的配置方式完全兼容了;第二是,在以前set_config与get_config的配置不是成对出现的,这增加了UVM新手的调试难度,如果一些域已经通过OVM宏注册,那么就可以通过隐性的方式获取上层的配置数值,尽管这一点在UVM中也保留下来了,但我们依然建议通过uvm_config_db::set/get的方式来实现成对的配置,这使得配置的方式易于学习和调试。下面是分别是OVM和UVM的配置方式:


OVM set/get config配置方式

class my_env extends ovm_env;  

  ...  

  function void build();    

    ahb_cfg = ahb_config::type_id::create("ahb_cfg");    

    ahb_cfg.width = 16;    // set additional fields    

    set_config_object("*","ahb_cfg",ahb_cfg);  

  endfunction  

  ... 

endclass 


class my_ahb_agent extends ovm_component;  

  ...  

  function void build();    

    ovm_object cfg;    

    ahb_config my_cfg;    

    assert(get_config_object("ahb_cfg",cfg,0);    

    if (!$cast(my_cfg, cfg))      ovm_report_error(...);    

    ...  

  endfunction  

  ... 

endclass


UVM config_db set/get配置方式

class my_env extends uvm_env;

  ...

  function void build();    

    ahb_cfg = ahb_config::type_id::create("ahb_cfg");    

    ahb_cfg.width = 16;    // set additional fields    

    uvm_config_db#(ahb_config)::set(            

      this,"ahb_agent","ahb_cfg",ahb_cfg);  

  endfunction

  ... 

endclass 

 

class my_ahb_agent extends uvm_component;  

  ...

  function void build();    

    ahb_config my_cfg;    

    if (!uvm_config_db::ahb_config::get(            

        this,"","ahb_cfg",my_cfg);     

      `uvm_error(...)    

    ...  

  endfunction

  ... 

endclass


添加UVM的新特性


另外到了添加UVM新特性的部分,用户需要考虑修改下面的这些部分(但不是必须):

  • 将OVM中的信息报告部分中的函数ovm_report_info/warning/error/fatal替换为宏`uvm_info/warning/error/fatal。这一点建议我们在之前的UVM宏比较中提到过,考虑到后者宏的性能更好,我们建议用户使用信息报告宏的方式。

  • 在上一个步骤的配置替换中,我们也提到了,尽管OVM中interface的传递通过object进行二次封装可以实现,但由于其复杂度在UVM中不再需要,因此在允许的情况下用户可以考虑使用config_db来简化interface的传递。


此外关于sequence和sequencer的使用,从OVM到UVM的迁移中也有很多的变化。譬如下面这些关键词已经在UVM中被废止:

OVM sequence宏:

  • ovm_sequencer_utils

  • ovm_sequencer_param_utils

  • ovm_sequence_utils

  • ovm_declare_sequence_lib

  • ovm_update_sequence_lib

  • ovm_sequence_lib_and_item


OVM内建sequence:

  • ovm_random_sequence

  • ovm_exhaustive_sequence

  • ovm_simple_sequence


OVM sequence API方法:

  • seq_kind

  • num_sequences

  • get_seq_kind


点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-3-29 04:07 , Processed in 0.017582 second(s), 12 queries , Gzip On, Redis On.

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