[Verilog] シミュレーション状態を保存、途中から再開 $save, $restart
保存
システムタスク $save("filename") でシミュレーションの状態をファイルに保存。
initial begin
#100; $display("a");
#100; $display("b");
$save("checkpoint");
#100; $display("c");
#100; $display("d");
end
差分保存の $incsave("incremental_filename") もある。
再開
$restart("filename") で再開。書くならこんな感じ?
initial begin : restart
integer fd;
fd = $fopen("checkpoint", "rb");
if (fd !== 0) begin
$fclose(fd);
$restart("checkpoint");
end
end
VCS の場合、simv -r checkpoint で指定可能なよう。
$save・$incsave・$restart は IEEE 1364 の本体には無く、参考の付録(informative)に載っているツールの機能です。使えるかどうかはシミュレーターによります。
注意点
(ツールの実装によるかもしれないけど)$save を呼び出した同時刻までの処理が完了した状態で保存されるので、次のような場合 CHECKPOINT は再開時に表示されない。
initial begin
$save("checkpoint");
$display("CHECKPOINT"); // $save 呼び出しと sim 時間が同じ
end
