fork-joinブロック
begin-endブロック内は上から順に実行されるが、複数の文を並行実行するにはfork-joinブロック内に書けばよい。このときfork-joinブロック内の全てが終了しないと次へ進めない。
// task_aとtask_bを並行実行する initial begin task_a; task_b; fork task_a; task_b(16'h7777); join ... end |
◇
例) バグのためDUTから出力が返って来ないときに、タイムアウトを検出して強制終了させるモニタ
// dut_out信号が100クロック間変化しなかったらタイムアウト always fork: watchdog // fork-joinブロックに名前watchdogを付ける // dut_out信号が変化したらこのwatchdogブロックを終了する begin @(dut_out) disable watchdog; end // 100クロックたったら強制終了する begin repeat(100) @(posedge clk); $display("-- time out"); $finish; end join |