作者:小白蒋
wechat:jianfuk
场景需求:
在一些case里面,我需要等待一个状态表示位起来,如果不起来我就等待一段时间报错。
用到的systemverilog语法:fork_join_any, break, forever
代码:
task sequence::wait_op_done(output bit[31:0] rdata, input int unsigned poll_interval=100, int unsigned timeout=2000);
fork:proc_wait
begin:proc_poll_op_done
forever begin
reg32_read(`REG, rdata);
if(rdata == 1'h1) begin
break;
end
#(poll_interval*1ps);
end
end:proc_poll_op_done
begin:proc_op_done_timeout
#(100ps*timeout);
`uvm_error(get_type_name(), "FAIL to wait op dpne!")
disable proc_poll_op_done;
end:proc_op_done_timeout
join_any:proc_wait
disable proc_wait;
endtask