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

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

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

OVM到UVM的代码自动转换


在完成上面的检视和修改之后,我们可以运行UVM安装包自带的脚本ovm-to-uvm10.pl,这一脚本会将.sv/.svh后缀扩展名文件代码中的OVM关键词转换为UVM关键词。通过这个脚本我们可以完成下面的自动化替换:

  • 在.sv/.svh后缀名文件中的ovm字符会被替换为uvm字符。

  • 文件名本生含有ovm的文件会被替换为uvm。

  • 一个替换记录报告文件会生成,其中记录所有的替换历史即转换前后的不同。

  • 用户可以通过--backup选项来决定是否需要备份替换前的文件,或者通过--write来决定是否需要直接在原文件上修改。

  • --all_text_files选项会将目录中其它的文件例如脚本文件中的ovm关键词也替换为uvm。


替换OVM phase方法


在完成了上面的基本替换之后,我们还需要考虑哪些OVM中的特性无法只通过替换关键词来实现转换步骤的。接下来在第三个步骤中需要替换OVM phase方法。下面是OVM和UVM中的一段例码:


OVM中phase的代码

class my component extends ovm_component      `ovm_component_utils(my_component)    

  ...   

  extern function void build();   

  extern function void connect();   

  extern task run; 

endclass 

 

function void my_component::build();    

    super.build();   

    ... 

  endfunction 

  ...


UVM中phase代码

class my component extends uvm_component

  `uvm_component_utils(my_component)   

  ...  

  extern function void build_phase(uvm_phase phase);  

  extern function void connect_phase(uvm_phase phase);  

  extern task run_phase(uvm_phase phase);

endclass 

 

function void my_component::build_phase(uvm_phase phase);

  super.build_phase(phase);  

  ...

endfunction 

...


对于两种方法学都熟悉的用户可以从上面的不同中看出,在迁移到UVM之后,建议将原有的phase方法名添加后缀“<name>_phase”,同时给添加参数“uvm_phase phase”。


替换OVM objection方法


在UVM中,原本在OVM中适用的stop()和global_stop_request()方法已经废弃,取而代之的是通过在phase阶段中挂起objection来控制仿真的结束。例如,在原来顶层的OVM test中,会使用global_stop_request()在序列发送完来结束仿真,而在UVM中需要使用uvm_phase来控制。


OVM中使用global_stop_request

task run();   

  seq.start( m_virtual_sequencer );   

  global_stop_request(); 

endtask


UVM中使用uvm_phase

task run_phase( uvm_phase phase );

  phase.raise_objection( this );  

  seq.start( m_virtual_sequencer );  

  phase.lower_objection( this ); 

endtask

类似地,以前通过uvm_test_done对象来实现全局控制结束的方式,在UVM中也交给了uvm_phase的控制,这就使得objection机制保持了风格统一。


OVM中使用ovm_test_done

task run();   

  ovm_test_done.raise_objection( this );   

  seq.start( m_virtual_sequencer );   

  ovm_test_done.drop_objection( this ); 

endtask


UVM中使用run_phase

task run_phase( uvm_phase phase );

  phase.raise_objection( this , "started sequence" );  

  seq.start( m_virtual_sequencer );  

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-19  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 161160
  • 日志数: 251
  • 建立时间: 2016-06-25
  • 更新时间: 2018-09-10

RSS订阅

Open Toolbar
博聚网