タイミング操作

遅延

処理を指定した時間だけ遅延させることができます。遅延は、シミュレーションのみ使用することができます。

#遅延時間 // 処理

以下に例を示します。

// 5単位時間ごとにクロックを反転
always #5 clock = ~clock;

イベントの発生

シミュレーションにおいて、イベントを発生させることができます。

まずイベントを宣言します。

event イベント名;

イベントを発生させるためには、以下のように記述します。

->イベント名;

以下に例を示します。

// イベントの宣言
event start_simulation;


initial begin
reset = 0;
#10 reset = 1;
// イベントの発生
-> start_simulation;
end

信号、イベントに同期

信号の変化時とイベントの発生時に、処理を実行させることができます。

@(トリガ) // 処理

信号の変化時に処理を実行させたい場合は以下のいずれかのようにトリガを記述します。posedgeは信号の立ち上がりに、negedgeは信号の立ち下がりに同期して処理を実行するよう指定します。

posedge 信号
negedge 信号

以下に例を示します。

event start_simulation;

initial begin
reset = 1;
#10 reset = 0;
// リセットが立ち下がったら、イベントを発生
-> start_simulation;
end

initial begin
in = 0;
// イベントが発生したら(リセットが立ち下がった)、入力信号を発生
@(start_simulation) in = 1;
end

// クロックの立ち上がりに同期して、カウンタを更新
always @(posedge clock) begin

  counter <= (reset)? INIT: counter + 1;
end