路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,著有《芯片验证漫游指南》一书,致力为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”或是登录网页www.rockeric.com了解更多资讯。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 。

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

上一篇 / 下一篇  2018-06-29 19:04:11 / 个人分类:验证系统思想

替换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

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

路科验证

路科验证

路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 。

日历

« 2018-09-09  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 157302
  • 日志数: 249
  • 建立时间: 2016-06-25
  • 更新时间: 2018-08-25

RSS订阅

Open Toolbar
博聚网