根据需要,在编写sequence时可以使用几个宏。
注:
- `uvm_do宏调用不会调用pre_body和post_body方法
- 不建议使用sequence宏调用,因为在仿真器上执行会花费更多时间,从而导致仿真速度较慢。(???)
1. UVM Sequence macro examples
1.1 `uvm_do example
class my_sequence extends uvm_sequence #(seq_item);
`uvm_object_utils(my_sequence)
function new (string name = "my_sequence")
super.new(name);
endfunction
task body();
`uvm_do(req);
endtask
endclass
class my_sequence extends uvm_sequence #(seq_item);
`uvm_object_utils(my_sequence)
function new (string name = "my_sequence")
super.new(name);
endfunction
task body();
`uvm_do(seq1); // calling seq1
`uvm_do(seq2); // calling seq2
endtask
endclass
1.2 `uvm_do_with example
class my_sequence extends uvm_sequence #(seq_item);
`uvm_object_utils(my_sequence)
function new (string name = "my_sequence")
super.new(name);
endfunction
task body();
`uvm_do_with(req, {req.<variable> == 0;}); // any constraint
endtask
endclass
1.3 `uvm_create and `uvm_send example
class my_sequence extends uvm_sequence #(seq_item);
`uvm_object_utils(my_sequence)
function new (string name = "my_sequence")
super.new(name);
endfunction
task body();
`uvm_create(req);
assert(req.randomize());
`uvm_send(req);
endtask
endclass
1.4 `uvm_rand_send example
class my_sequence extends uvm_sequence #(seq_item);
`uvm_object_utils(my_sequence)
function new (string name = "my_sequence")
super.new(name);
endfunction
task body();
`uvm_create(req);
`uvm_rand_send(req);
endtask
endclass