10

間に違いはありますか

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

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

Clk の後のセミコロンに注意してください。テストベンチを閲覧していたときに、同様のコード行に出くわしました。簡単な実験をいくつか行いましたが、シミュレーション中に違いは見つかりませんでした。これらの行に続くコードの実行順序は、セミコロンの有無によって何らかの形で変化しますか?

4

2 に答える 2

20

手続き型ステートメントの BNF 構文は基本的に次のとおりです。

statement_item := 
        {procedural_timing_control} statement;

これは、ステートメントの前に 0 個以上のタイミング コントロールを配置できることを意味します。あなたの例@(posedge Clk)ではタイミングコントロールでa<= 1'b1;あり、ステートメントです。

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

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

この場合、2 つのステートメントが並行して開始さaれ、posedge が割り当てられるのを待ちません。

于 2013-11-08T00:49:50.460 に答える
12

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

セミコロン バージョンは次のとおりです。これを行う。非セミコロン バージョンは次のとおりです。この形式がワンライナーで使用されることがあります。

@(posedge Clk) a<= 1'b1;
于 2012-01-18T12:53:01.337 に答える