verilog,VHDL assign文による遅延の書き方

論理回路

テストベンチを作成する際に、ある信号代入を数ns遅らせたいという状況がありました。そのときに記述した方法をメモしておきます。

下の例はシミュレーション実行中に、右辺にある信号が変化するたびに左辺に代入されます。そして左辺への代入が実行されるとき、<時間>分遅延させて左辺へ代入されます。

verilogも構文は違いますが、動きは同じです。

下記に例まとめてみます。

verilogHDL
assign <時間> 信号名 = 処理;

VHDL
信号名 <= 処理 <時間>;

それぞれ実際の記述は下記のようになる。

verilogHDL

assign #10 x = a + b + c;

VHDL

x <= a + b + c after 10ns;

続いて、条件付き信号代入時の遅延の書き方をまとめます。

こちらも、verilogとVHDLで記述方法が大きく異なるので注意が必要です。
VHDLでは右辺の値が変化するたびに、条件が評価されtrueなら処理1がfalseなら処理2を左辺へ代入します。また、このときに上で説明したときと同様に<時間>分遅延されます。

VHDLの例を下記にまとめます。

x <= a after 10ns when (en = ‘1’) else b after 10ns;

verilogも同様です。
右辺の値が変化するたびに、条件が評価されtrueなら処理1、falseなら処理2を<時間>分遅延させて左辺へ代入されます。

verilogの例を下記にまとめます。

assign #10 x = (en == 1’b1)? a : b;

コメント

タイトルとURLをコピーしました