2016-07-27 16 views
1

以下のコードを使用してVerilogで波形を生成しようとしていますが、期待通りの結果が得られません。Verilogでカスタム波形を生成

initial begin 
    d = 1'b0; 
#8 d <= 1'b1; 
#15 d <= 1'b0; 
end 

その初期値は、T = 8で、0(OK)であり、その1(OK)が、T = 23で、その0は、その代わりに、私は=それがTに対するT = 15相対で0になりたいです0であり、t = 8ではない(すなわち、前のステートメント)。

これを行う方法はありますか?私はブロッキングとノンブロッキングの割り当てを交換しようとしましたが、運はありません!あなたがこれを行うことができます

おかげで、
のDev

答えて

2

fork join内部

initial fork 
    d = 1'b0; 
#8 d = 1'b1; 
#15 d = 1'b0; 
join 

すべてのステートメントは、同時にを実行されます。

それとも、これを行うことができます:

initial  d = 1'b0; 
initial #8 d = 1'b1; 
initial #15 d = 1'b0; 

は明らかに、3つの初期ブロックが同時に実行されます。

あなたが本当に手続き(シーケンシャル)コードから3つのイベントをスケジュールしたい場合は、あなたがこれを行うことができます:

initial begin 
    d =  1'b0; 
    d <= #8 1'b1; 
    d <= #15 1'b0; 
end 

をこれが内の割り当てを使用して、非ブロックの割り当てと一緒にを遅らせます。

http://www.edaplayground.com/x/4MiS

+0

ことは間割り当て遅延がシミュレーション時間を進める使用することを意味していますか? –

+0

@devvaibhav私はあなたが正確に何を意味するか分からない。しかしながら、IEEE1800-2012のセクション9.4.5(「イントラ割当タイミング制御」)は、「割当て内の遅延またはイベント制御は、新しい値の割当を左側に遅らせるが、右側の式は、遅延の後ではなく遅延の前に評価されるべきです "。非ブロッキング割り当てに内部割り当て遅延を追加すると、直後に実行が継続され、その割り当てがその遅延後に発生します。したがって、あなたは事実上、将来的に起こるイベントをスケジューリングしています。 –

関連する問題