2017-11-02 5 views
1

VHDLに何か書き込もうとしていますが、動作しません。ここに私のコードの一部です:Line 62. parse error, unexpected WITHvhdlの場合... with ... with

case currentState is 
    when ST000 => 
     with A select nextState <= 
      ST025 when "01", 
      ST050 when "10", 
      ST000 when "11", 
      currentState when others; 
    when ST001 => ... 
    when others => ... 
end case; 

これは、問題はこのように、これらの行にありますと言います。なぜwithが予期しないのですか?これら2つの構文(case...iswith...select)を混在させるのは間違っていますか?

+1

あなたは最小限の完全な検証の例を提供してくれるだろうか? – JHBonarius

答えて

1

特に記載がない限り、参照はIEEE Std 1076-2008、IEEE VHDL言語リファレンスマニュアルからのものです。

10シーケンシャル文

10.1一般

シーケンシャル文の様々な形態のこの節に記載されています。シーケンシャル・ステートメントは、サブプログラムまたはプロセスの実行のためのアルゴリズムを定義するために使用されます。それらは表示される順序で実行されます。

10.9 Caseステートメント

case文は、文の代替シーケンスの数の実行のいずれかの選択。選択された選択肢は式の値によって定義されます。

一連のステートメントは、順次ステートメントを示します。

10.5.4選択された信号の割り当て

選択信号割当信号、または力または解放信号こと値を割り当てる等価case文を表します。

しかし...

附属書E
IEEE Stdから(参考)
変更1076年から2002年

...
箇条10

- 10.5:強制追加と解放割り当て。単純な、条件付きの、選択された信号割り当ての追加。 VHDL規格の改訂において

以前-2008選択された信号の割り当てよりも同時信号代入文としてのみ利用可能であった(11.6同時信号代入文を参照するか、箇条/ 9章コンカレント文、節9.5において見出さ。 2 VHDL標準の以前のリビジョンで選択された信号割り当て)。あなたはcase文置き換えることができたときには不便か、この-2008機能のサポートを欠いていることを

注:

case currentState is 
    when ST000 => 
     case A is 
      when "01" => 
       nextState <= ST025; 
      when "10" => 
       nextState <= ST050; 
      when "11" => 
       nextState <= ST000; 
      when others => 
       nextState <= CurrentState; 
     end case; 
    when ST001 => ... 
    when others => ... 
end case; 
+0

説明ありがとうございます!シグナル 'select'の代わりに' case'を置くと、それがうまくいくのが分かりましたが、どうして本当にその理由が分かりませんでした。 –