私は自分のモニターに次のコードを持っている:システムVerilog-特定のコードが別のコードより先に実行されるようにする方法は?
virtual task run_phase(uvm_phase phase);
fork
begin : clock_c
forever begin
wait(vif.fact_log2_samp != fact_log2_samp_init);
for(int counter = 0; counter < 46; counter++) begin
check = 1'b0;
@(posedge vif.clk);
end
**check =1'b1;**
end// forever
end// clock_c
begin : main_0
forever begin
mon_trx = tx_lin_int_transaction::type_id::create("mon_trx");
mon_trx.fact_log_2 = fact_log2_samp_init;
**wait (vif.xn_valid == 1'b1);**
#1;
mon_trx.rand_data_xi = vif.xi;
mon_trx.rand_data_xq = vif.xq;
if (check == 1'b0)
mon_trx.check = FALSE;
else
fact_log2_samp_init = vif.fact_log2_samp;
$cast(t, mon_trx.clone());
//send transaction to scoreboard via TLM write()
ap.write(t);
wait (vif.xn_valid == 1'b0);
end// forever
end// main_0
join
endtask: run_phase
問題が
wait(vif.xn_valid == 1'b1);
、それは
check =1'b1;
(同時に)直前に実行した後にコードということです。
check =1'b1;
を確実に実行するにはどうすればよいですか?
のは、[イベント](HTTPSを使用します//verificationacademy.com/forums/uvm/what-difference-between-event-and-wait-event.triggered)(要件に応じてエッジまたはレベルがトリガーされることがあります)。 'check = 1'b1;の直後に' clock_c'でイベントをトリガし、 'main_0'スレッドで待機します。 – sharvil111
@ sharvil111 - どうやって悪魔をかけることができますか? – sarad
[this](http://www.verificationguide.com/p/systemverilog-events.html)と類似したものです。いくつかのロジックを変更しました。 – sharvil111