为什么wait表达式导致阻塞

时间:2017-01-26 12:29:30

标签: system-verilog

我的监视器中有以下代码:

   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是整数(数据)。

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));

这会检测到信号上的信号并阻塞,直到那时。