hierarchical sequence简单代码理解

hierarchical sequence简单代码理解

class bus_trans extends uvm_sequence_item;
rand bit write;
rand int data[];
rand int length;
rand int addr;
rand int delay;
static int id_num;
constraint cstr{
data.size()==length;
foreach(data[i]) soft data[i]==i;
soft addr=='h100;
soft write==1;
delay inside{[15]};
}
`uvm_object_utils(bus_trans)   //注册bus_trans

`uvm_object_utils_begin(bus_trans)  //域的自动化
`uvm_field_int(write,UVM_ALL_ON)
`uvm_field_array_int(data,UVM_ALL_ON) //动态数组域的自动化要加array
`uvm_field_int(length,UVM_ALL_ON)
`uvm_field_int(addr,UVM_ALL_ON)
`uvm_field_int(delay,UVM_ALL_ON)
`uvm_object_utils_end

function new(string name="bus_trans");  //new函数
super.new(string name);
endfunction
endclass

class flat_seq extends uvm_sequence; 
rand int length;
rand int addr;
`uvm_object_utils(flat_seq)

`uvm_object_utils_begin(flat_seq)
`uvm_field_int(length,UVM_ALL_ON)
`uvm_field_int(addr,UVM_ALL_ON)
`uvm_object_utils_end

function new(string name="flat_seq");
super.new(string name);
endfunction

task body();
bus_trans temp;
temp=new();
temp.randomize() with{
length==local::length;   //通过task body()来传递flat_sequence里的length和addr,
                         //进而改变嵌套里面的bus_tranns的length和addr
addr==local::addr:
};
temp.print();
endtask
endclass

 class hier_seq extends uvm_sequence;
`uvm_object_utils(hier_seq)
function new(string name="hier_seq");
super.new(name);
endfunction

task body();
bus_trans t1,t2;  //嵌套两个sequence_item和sequence
flat_seq s1,s2;
`uvm_do_with(t1,{length==2;})  //`uvm_do_with实现创建,随机化和传递三个作用
fork
`uvm_do_with(s1,{length==5};)
`uvm_do_with(s2,{length==8};)
join
`uvm_do_with(t2,{length==3};)
endtask
endclass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值