uvm_do 求助
时间:10-02
整理:3721RD
点击:
uvm_do封装了包的产生过程,
tran tr;
tr=tran::type_id::create.....;
start_item(tr);
tr.randomize();
finish_item(tr);
在case里,我想在sequence发包给sequencer之前,调用某个函数,是不是就不能用uvm_do这种了,
要把包的整个过程拆开
tran tr;
tr=tran::type_id::create.....;
start_item(tr);
tr.randomize();
tr.func();//func是在包里自己定义的
finish_item(tr);
有没有类似uvm_do可以调用这个函数的?
tran tr;
tr=tran::type_id::create.....;
start_item(tr);
tr.randomize();
finish_item(tr);
在case里,我想在sequence发包给sequencer之前,调用某个函数,是不是就不能用uvm_do这种了,
要把包的整个过程拆开
tran tr;
tr=tran::type_id::create.....;
start_item(tr);
tr.randomize();
tr.func();//func是在包里自己定义的
finish_item(tr);
有没有类似uvm_do可以调用这个函数的?
uvm_create;
randomize;
post_randomize;
uvm_send;
什么意思?这些是UVM自自动执行的吗?那函数在哪个地方调用?
uvm_do是一个宏,里面包了new、wait_for_grant()、randomize、send的方法,他会产生一个transaction,通过sequencer的seq_item_export发给driver的seq_item_port其实 driver和seqeunce是有交互的,driver get item的时候,会让seq.starting_phase = phase, 在你的sequence里,检查starting_phase,然后raise objection, 然后 就执行`uvm_do了。执行结束之后,drop objection。所有objection都drop 进入下一个phase
2楼正解
你可以写在prerandomize和postrandomize里面吧, 他们是自动执行的