テストベンチを作成する際に、ある信号代入を数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;
コメント