|
发表于 2022-1-18 15:34:00
|
显示全部楼层
set_type_override_by_type(xx_env1::get_type(),xx_env2::get_type());
这个东西就是添加了一条记录,当使用factory创建env1的时候会去检查这些记录,如果查到了这个记录那么就会使用env2来创建,并交给env1的句柄。简单来说就是做了一个记录,重载的过程是factory实现的。
uvm_config_db#(uvm_object_wrapper)::set(this,"env.2222.sequencer.main_phase","default_sequence", xx_sequence::type_id::get());
这个也是传递出去了一条信息,信息的索引是"this.env.2222.sequencer.main_phase.default_sequence",信息的内容就是seq_type。在env2.2222.sequencer启动的时候就会用相同索引去查找,查到这条记录就会使用config_db提供的seq_type去创建default_seq,这样你的default seq就能动起来了。实际configdb这里只是一条记录,并不会去检查你有没有这个东西,所以使用起来是安全的
main_phase的.start(env.2222.sequencer)
这个东西肯定是编译不过的,这是语法错误,因为你的env是用env1声明的,这个是env2的父类,没有2222这个东西,编译检查就无法通过。采用楼上提供的cast方式是可以规避这个问题的,毕竟你知道这个env是可以转换为env2,而env2的类型就包含2222了,这样就好了 |
|