目录
1 sequencer和sequence
sequence和item的发送
sequence挂载到sequencer上可以使用方法也可使用`uvm_do宏来实现,但根本的基础还是相应方法。先看用方法实现的实例,主要使用了两种方法:uvm_sequence::start和start_item()
class bus_trans etends uvm_sequence_item;
rand int data;
`uvm_object_utils_begin(bus_trans)
`uvm_field_int(data,UVM_ALL_ON)
`uvm_object_utils_end
...
endclass
class child-seq extends uvm_sequence;
`uvm_object_utils(child_seq)
...
task body();
uvm_sequence_item tmp;
bus_trans req;
tmp = create_item(bus_trans::get_type(),m_sequencer,"req");
`void($cast(req,tmp));
strart_item(req);
req.randomize with {data ==10};
finish_item(req);
ebdtask
endclass
class top_seq extends uvm_sequence;
`uvm_object_utils(top_seq)
...
task body();
uvm_sequence_item tmp;
child_seq cseq;
bus_trans req;
cseq = child_seq::typy_id::create("cseq");
tem = create_item(bus_trans::get_type(),m_sequencer,"req");
cseq.start(m_sequencer,this); //将sequence挂载到sequencer上
`void($cast(req,tmp));
start_item(req);
req.randomize with {data==20};
finish_item(req);
endtask
endtask
方法一针对sequence挂载到相应sequencer中:uvm_sequence::start(sequecer 句柄”,“上层sequence”,”优先级“,“指定pre_body()和post_body()执行次序”);。
使用技巧:m_sequencer是sequence中的成员变量,指向执行当前sequence的sequencer句柄;没有上层sequence则省略第2项参数。
例中在top_sequence中例化的cseq.start