時間単位の設定

[] [] []


シミュレータは暗黙の時刻変数を持っており、Verilog記述上は時間経過を待つ文 #(時間)で使われる。この時刻変数(正の整数)と実際の時間(実数s/ms/us/ns/ps/fs)の対応づけをテストベンチの先頭(moduleの前)で指定する

`timescale 1ns/1ps   // 単位/精度

このとき

#(10) ; は10nsたったら文を実行

#(10/3) ;3.333nsたったら文を実行

という意味になる

数字は1,10,100が指定できるが、例えば1ns/10psと精度を粗くしてもシミュレーション速度はあまり速くならないので、わかりやすい値にする方がよい。

時刻変数の現在値は$timeで参照できる。これはただの整数値なので、時刻を表示するときは$timeformat()で指定するとよい。

`timescale 1ns/1psのとき

repeat(3) #(1) $display("--(%t)",$time);

1nsごとに時刻変数を表示すると

--(                1000)

--(                2000)

--(                3000)

と、ただの整数値で表示されてわかりにくい。そこで

精度10-6,小数部3,文字列”us"をつける,表示幅は全10文字

$timeformat(-6,3," us",10); // "000.000 us"

と指定した後に実行すると

--(  0.001 us)

--(  0.002 us)

--(  0.003 us)

と表示される。

整数値の$timeの代わりに実数値に直した$realtimeもある。

// pulse信号の幅を表示する

real start_time,end_time;

@(posedge pulse) start_time = $realtime;

@(negedge pulse) end_time = $realtime;

$display("pulse_width = %f ns",(end_time - start_time));


[] [] []