uvm 设置 virtual sequencer 跑到driver里 clock不动
一样的代码 ,不设置 virtual sequencer 就能一直执行sequence,有波形产生。
设置virtual sequencer 就没有任何波形产生, 执行到driver里,在@(posedge vif.clock iff (vif.reset)) 这个地方一直等待。
在driver里的代码
task uart_tx_driver::get_and_drive();
while (1) begin
reset();
fork
@(negedge vif.reset)
begin
forever begin
@(posedge vif.clock iff (vif.reset))//执行到这里就一直等到, clock也不动
seq_item_port.get_next_item(req);
send_tx_frame(req);
seq_item_port.item_done();
end
end
join_anydisable fork;
//If we are in the middle of a transfer, need to end the tx. Also,
//do any reset cleanup here. The only way we got to this point is via
//a reset.
`uvm_info(get_type_name(), "Get out the loop\n", UVM_LOW)
if(req.is_active()) this.end_tr(req);
end
endtask : get_and_drive
run_phase部分
task uart_tx_driver::run_phase(uvm_phase phase);
fork
get_and_drive();
gen_sample_rate(ua_brgr, sample_clk);
join
endtask : run_phase
请各位前辈帮帮忙 谢谢了
你的driver肯定没有get到transaction,一直block住了。看看你的Virtual Sequencer里面的Sequencer指针有没有指向Agent里面的Sequencer
没有启动sequence
一楼说的有理,不过先检查下你的reset有没有被置位