2012-01-18 6 views
9

@(posedge Clk)の違い。 a <= 1'b1; @(posedge Clk)a <= 1'b1;

@(posedge Clk); 
    a<= 1'b1; 

@(posedge Clk) 
    a<= 1'b1; 

注Clkの後のセミコロンの間に違いはあります。私は、テストベンチをブラウズしているときに、同様のコード行を見つけました。私はいくつかの簡単な実験をしましたが、シミュレーション中に何の違いも見つけられませんでした。これらの行に続くコードの実行順序は、セミコロンの有無によって決まりますか?

答えて

10

あなたは正しいです - 動作上の違いはありません。

セミコロンのバージョンは次のとおりです。これを行う。 セミコロン以外のバージョンは次のとおりです。あなたは時々、ワンライナーで使用されるこのフォームが表示されます:

@(posedge Clk) a<= 1'b1; 
12

任意の手続き文のBNF構文はこれを使用すると、任意の目の前に0以上のタイミングのコントロールを持つことができ、本質的に

statement_item := 
     {procedural_timing_control} statement; 

を意味していますステートメント。あなたの例では、@(posedge Clk)はタイミングコントロールであり、a<= 1'b1;がステートメントです。

例がフォーク/ジョインの内部にある場合は、前者が2つのステートメントであるため、動作上の違いがあります。後は1つのステートメントです。この場合

fork 
    @(posedge Clk); a<1'b1; 
join 

、2つの文が並行して開始されている - posedgeが割り当てられるためaは待たないでしょう。

関連する問題