Cycle Delay

SystemVerilogでは、クロックサイクル単位での遅延指定が簡単にできるようになった。

テストベンチでは、遅延の指定に時間指定ではなく、クロックサイクルで指定することにより、クロックタイミング等の変更に強いコードが書けるようになる。

サイクル指定の遅延を使用するためには、default clockingで基準となるクロックを決め、##でクロックサイクル数を指定する。

下の例でのcbはクロッキングブロックの名前で、好きな名前をつければいい。クロッキングブロックについては別途説明する。

module test();

reg clk;

initial begin

clk = 0;

forever

#50 clk = ~clk;

end

default clocking cb@(posedge clk);

endclocking

initial begin

##5 $display("Current time = %t", $time);

$finish();

end

endmodule // test

最初のクロック立ち上がり回数5回分の450ps(最初の立ち上がりクロックエッジは50psにある)のタイミングで$displayが実行されている。

# 6.5e

# vsim -do {run -all; quit} -c test

# Loading sv_std.std

# Loading work.test

# run -all

# Current time = 450