本教程只列出关键代码。其余代码需要自己补全。
step one:
创建seq_library
class seq_lib extends uvm_sequence_library #(packet);
`uvm_object_utils(seq_lib)
`uvm_sequence_library_utils(seq_lib) //must need
function new(string name = "seq_lib");
super.new(name);
init_sequence_library(); // must need
endfunction
endclass
step two:
将要使用的sequence注册到lib里面
class seqone extends uvm_sequence #(packet);
`uvm_object_utils(seqone)
`uvm_add_to_seq_lib (seqone, seq_lib)
............
endclass
class seqtwo extends uvm_sequence #(packet);
`uvm_object_utils(seqtwo)
`uvm_add_to_seq_lib(seqtwo, seq_lib)
.............
endclass
step 3
连接seq_lib(本质也是个sequence)和 senquencer 。
class env extends uvm_env;
..........
function build_phase(uvm_phase phase);
super.build_phase(phase);
uvm_config_db #(uvm_object_wrapper)::set(this, "inagent.seqr.main_phase","default_sequence", seq_lib::type_id::get());
........
endclass
step 4
构造并配置library cfg。
class testone extends uvm_test;
..........
uvm_sequence_library_cfg seq_lib_cfg;
...........
function void build_phase(uvm_phase phase);
super.build_phase(phase);
seq_lib_cfg = new("seq_lib_cfg", UVM_SEQ_LIB_RAND, 2, 5);
uvm_config_db #(uvm_sequence_library_cfg)::set(this, "env.inagent.seqr.main_phase","default_sequence.config", seq_lib_cfg);
endfunction
endclass
step 5
make 去编译执行。放一张设置执行完后会打印的info。组件和上面定义名字有出入。
selection mode 总共四种。随便找本手册都能拿查到。就不赘述了。_