UVM
sequence中rand变量与transaction中的rand变量同名
在sequence中会定义rand类型变量,传递给transaction中的变量;但如果跟transaction中定义的随机变量同名,并不会采用seq中的变量。为什么呢?
来看下面一段代码
clase my_seq extends uvm_sequence#(my_transaction);
rand bit[47:0] dmac=48‘hFF_FFFF;
virtual task body():
my_transaction tr;
`uvm_do_with(tr, {tr.dmac == dmac;})//约束
tr.print();
endtask
endclass
上述打印结果:tr.dmac的值并不为约束值48'hFFFFFF;而是一个随机值。
这是因为运行到第6行,编译器会首先去transaction中寻找dmac;找到就不会继续向上查找了。
`uvm_do_with(tr, {tr.dmac == dmac;})
//等同于
`uvm_do_with(tr, {tr.dmac == tr.dmac;})
super.xxx_phase
原始build_phase中存在“自动获取通过config_db::set设置的参数”。所有除了build_phase中有必要加上super.build_phase。其余phase大可不必!(除非扩展自用户自定义类)