我的监视器中有以下代码:
virtual task run_phase(uvm_phase phase);
forever begin
mon_trx = tx_upconv_in_transaction::type_id::create("mon_trx");
wait (vif.chind2 == 32'h0);
mon_trx.xi = vif.xi;
mon_trx.xq = vif.xq;
$display("TRX.XI = %h, TRX.XQ = %h", mon_trx.xi, mon_trx.xq);
end
endtask: run_phase
当我运行模拟时,我可以看到许多打印件(显示器),但时间没有通过。
为什么?
P.S chind 2是整数(数据)。
答案 0 :(得分:0)
大概是因为vif.chind2 == 1'b0
?如果在执行wait
语句时等待的表达式已经为真,那么wait
语句将不会阻塞。
如果您想等待vif.chind2
成为1'b0
,请将wait
语句替换为:
wait (vif.chind2 != 32'h0);
wait (vif.chind2 == 32'h0);
答案 1 :(得分:0)
wait
语句是级别触发的,而不是边缘触发的。如果你的信号总是1'b0,那么它将无阻塞地执行。
如果您正在寻找negedge,可以将其更改为
wait ($fell(vif.chind2));
这会检测到信号上的信号并阻塞,直到那时。