| ||
sequencer的变化
类似地,`ovm_sequencer_utils宏也已经废止,需要将其替换为`ovm_component_utils,调整前后的代码如下:
调整前:
class my_sequencer extends ovm_sequencer #(my_seq_item);
`ovm_sequencer_utils(my_sequencer)
`ovm_update_sequence_lib_and_item(my_seq_item)
调整后:
class my_sequencer extends ovm_sequencer #(my_seq_item);
`ovm_component_utils(my_sequencer)
环境的变化
在上面提到了,跟sequencer相关的'count'和'default_sequence'用法也已经废止,这一点用户需要额外注意。
调整前:
class my_env extends ovm_env;
set_config_int("*.i_sequencer", "count", 0);
set_config_string("*.i_sequencer","default_sequence","my_seq");
调整后:
class my_env extends ovm_env;
test执行root sequence的变化
既然已经移除了'count'和'defualt_sequence'用法,用户则不再需要关心默认的序列如何指定。而伴随着这一特性的改变,在顶层test中,我们不再依赖于default_sequence来指定root sequence,而可以通过sequence自带的方法start来实现sequence挂载到sequencer上。
调整前:
class tc_test_seq extends my_test_base_seq;
...
class my_test extends ovm_test;
virtual function void build();
super.build();
set_config_string("top_env.i_top_sequencer",
"default_sequence", "tc_test_seq");
调整后:
class tc_test_seq extends my_test_base_seq;
...
class my_test extends ovm_test;
tc_test_seq test_seq;
virtual task run();
super.run();
test_seq = tc_test_seq::type_id::create("test_seq");
test_seq.start(top_env.i_top_sequencer);
在介绍完了OVM到UVM的迁移之后,如果读者现在有完整的OVM环境且有需要向UVM迁移的计划,那么可以考虑通过上面详细的步骤和建议完成迁移。如果受限制与项目的人力、节点和技术等多个因素,无法完成短时间的迁移,但又不能避免OVM与UVM之间的混合仿真,那么请关注我们下一节《OVM与UVM的混合仿真》。
谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。