2016-08-29 5 views
1

特定のシステムの動作/ OVM動作に関する説明/ドキュメントを探しています。接続フェーズ内のOVM宣言

私は接続段階のクラスを持っています。私はいくつかの問題があったが、私はovm_objectを宣言しようとしている接続フェーズの内部。私はこれを行うと:「file.sv」トークンは「some_object」は、それが宣言とコードの私のラインを指す:

virtual function void connect(); 
    super.connect(); 

    `ifdef SOMETHING_ENABLE 
     ovm_object some_object; 
    `endif 
endfunction : connect 

は、私は、次のVerilogソースは、構文エラーがありますと言って、構文エラーを取得しますsome_objectの

が、とき、私は「始まり」と「終わり」私が取得エラーなしでそれをラップ:なぜこれが

virtual function void connect(); 
    super.connect(); 

    `ifdef SOMETHING_ENABLE 
    begin 
     ovm_object some_object; 
    end 
    `endif 
endfunction : connect 

のですか?誰かがこれに関するドキュメントを指し示すことができますか、なぜ私がコンパイラによってこの動作を見ているのかを説明できますか?

答えて

3

SystemVerilogのBNFでは、ブロック内の手続き型の文の前に宣言が必要です(これは、Pascalプログラミング言語のVerilogルーツに由来します)。関数(セクションA.2.6)のBNFを見ると、{tf_item_declaration}{function_statement_or_null}より前になることがわかります。

2番目の例では、構文エラーは発生しませんが、ブロック外のsome_objectを参照することはできません。したがって、super.connect();への呼び出しの前にあなたの宣言を入れてください。

+1

したがって、開始点と終了点を追加すると、BNFのどの部分が関係しますか?それはA.2.8ブロック項目宣言に該当するだろうか? – user1334858

+2

およびA.6.3 _seq_block_およびA.6.4 _statement_item_ –

関連する問題