你是否在面试或笔试中被问到了sequence有哪些启动的方式?今天就来梳理一下sequence的启动到底有哪些。
1. start( ) 函数启动
经常用的一种就是在 test 中手动调用 start 函数启动对应的sequence,将sequence挂载在对应的sequencer上。如下:在base_test中启动
class base_test extends uvm_test;
my_env env;
...
endclass
task base_test::main_phase(uvm_phase);
base_sequence seq;
seq = base_sequence::type_id::create("seq");
seq.start( env.agt.sqr);
endtask
...
2. default_sequence 启动
也可以使用default sequence的方式指定自动启动的sequencer,如下:在base_test中指定
class base_test extends uvm_test;
my_env env;
...
endclass
function base_test::build_phase(uvm_phase phase);
super.build_phase(phase);
base_sequence seq = new("seq");
uvm_config_db#(uvm_object_wrapper)::set(this,
"env.agt.sqr.main_phase",
"default_sequence",
seq);
// uvm_config_db#(uvm_object_wrapper)::set(this,
// "env.agt.sqr.main_phase",
// "default_sequence",
// base_sequence::type_id::get() );
endfunction
注意:
- config_db的set中,第二个参数需要指定到了具体的 sequencer 的phase 。
PS:虽然 `uvm_do系列的宏虽然在嵌套的sequence 和virtual sequence中可以启动对应的 element sequence ,但是最顶层的sequence还要通过上面两种方式之一来启动,所以这里不将这种方式纳入基本的sequence启动方式。