fork-joinブロック

[] [] []


begin-endブロック内は上から順に実行されるが、複数の文を並行実行するにはfork-joinブロック内に書けばよい。このときfork-joinブロック内の全てが終了しないと次へ進めない。

// task_atask_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


[] [] []