13.1 UVM sequence macros

根据需要,在编写sequence时可以使用几个宏。

注: 

  1. `uvm_do宏调用不会调用pre_body和post_body方法
  2. 不建议使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值