2017-03-18 245 views
0

VHDLのnullステートメントの実際の目的は何ですか? s=1、次いでyはそれを前の値を保持しない割り当てが存在しないので、以下のコードを第二の符号でVHDLのNULL文

1-

CASE s IS 
BEGIN 
    WHEN 0 => y <= 0; 
    WHEN 1 => NULL; 
END CASE; 

2-

CASE s IS 
BEGIN 
    WHEN 0 => y <= 0; 
END CASE; 

を考えます。それじゃない?だから、どちらの場合も、シンセサイザーは前の値をyに保つためにフリップフロップを入れます。

+1

その主な値は、「私はおそらく気を取らこの場合書くのを忘れてしまった」と「私はこのような場合のためには何の関係もありませんという事実を文書化しています」を区別することです。数か月前に書いたもの、あるいは悪いことに最後の人が書いたものについて、コードレビューをしたことがある人は、これが重要です。 –

答えて

2

私はIEEE1076-2008を引用します:

10.14空文

空文は、アクションを実行しません。

null_statement :: = [label:] null;

null文の実行は、次の文に渡す以外の効果はありません。

注:null文を使用して、特定の条件が真であるときにアクションが実行されないように明示的に指定することができますが、この(または他の)目的には決して必須ではありません。これはcase文と関連して特に有用であり、case文のすべての可能な値は選択肢によってカバーされる。特定の選択肢については、何もする必要がないかもしれない。

VHDL言語では、caseステートメントのすべての選択肢についての文が必要です。or synthesis will give an errorExample implementation:

case OPCODE is 
    when "001" => TmpData := RegA and RegB; 
    when "010" => TmpData := RegA or RegB; 
    when "100" => TmpData := not RegA; 
    when others => null; 
end case; 
+1

caseステートメントの代替(10.9)にはsequence_of_statements :: = {sequential_statement}(10.1)で構成される一連のステートメントが含まれています。中括弧はアイテムが1回以上(1.3.2f)繰り返されることを示します。ヌルステートメントは、何もしないシーケンシャルステートメント(10.1)です(10.14)。 ***あらゆる選択(9.3.3.1)のための***を必要とする合成ツールではなく、*** VHDL言語の定義***です。 BNFは、有益な情報である附属書C(1.3.4)以外の標準(1.3.1)である。ノートも言語定義(1.3.4)の一部ではありません。 – user1155120

+0

ok、それを変更しました。私もスペックを見てみましたが、彼らは私がstackoverflowに適していると思っている一般人の言葉では説明しません。それとも良い見積もりを知っていますか? – JHBonarius