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


[] [] []