uvm_do系列宏:
宏 | 功能 |
---|---|
`uvm_do | 产生包;随机化,发包 |
`uvm_do_on | 在`uvm_do基础上,指定用哪个sequenser发包 |
`uvm_do_pri | 在`uvm_do基础上,给产生的transaction包指定优先级 |
`uvm_do_with | 在`uvm_do基础上,指定产生包的约束 |
`uvm_do_on_pri | 在`uvm_do基础上,指定sequencer和优先级 |
`uvm_do_on_with | 在`uvm_do基础上,指定sequencer和产生包的约束 |
`uvm_do_on_pri_with | 在`uvm_do基础上,指定sequencer,优先级,和产生包的约束 |
`uvm_create, `uvm_send,
宏 | 功能 |
---|---|
`uvm_create | 产生一个transaction的实例 |
`uvm_send | 将产生一个transaction的通过start任务发送到sequencer |
一般用法:
task body();
transactoin tr;
`uvm_create(tr)
tr.randomize();
`uvm_send(tr);
endtask:body
`uvm_rand_send
`uvm_rand_send和`uvm_send类似,区别在于`uvm_rand_send会对transaction做随机化,而且使用`uvm_rand_send之前,transaction要先被实例化(通过new或者`uvm_create)
start_item, finish_item
在实例化transaction之后,使用这两个方法发送transaction
tr = new("tr");
start_item(tr);
finish_item(tr);
// 或者
virtual task body();
repeat (10) begin
tr = new("tr");
start_item(tr);
tr.randomize() with {tr.pload.size == 200;};
finish_item(tr);
end
endtask
start_item, finish_item也可以为transaction指定优先级。
start_item(tr, 100);
finish_item(tr, 100);