1
信号を事前定義された値のリストと比較して、少なくともこの値と同じ値が存在するかどうかを確認したい(または、同じ値がリスト)。VHDL:複数の値と信号を比較する
例アプリケーション:受信したコマンドを有効なコマンドの事前定義されたリストと比較し、コマンドが無効な場合はエラー状態になります。想像してみれば、有効なコマンドは3つだけです(0x00、0x01、0xFF)。そして、このコードは、仕事をするでしょう:
--valid commands: 0x00, 0x01, 0xFF
process(clk) is
--somewhere in the middle of FSM
if cmd /= x"00" and cmd /= x"01" and cmd /= x"01" then
next_state <= error;
end if;
end process;
しかし、私は効率的に(スタイルコーディングの面で)長いリストの同じものを実装する方法を疑問に思う、手動で各値と比較することなく(すなわちこのような行を書くことを避けてください:)
if cmd=val1 or cmd=val2 or ... or cmd=valN then --imagine N=100
これは、配列やループと関係があると思いますか?
cmdの有効な選択肢は、明示的であり、他のすべての値が他の人の選択によって覆われているcase文もあります。 – user1155120
@ user1155120多くの選択肢があれば、これはおそらくコンパクトでメンテナンスが容易ではありません。 –
アクションなしの選択肢(エラーに割り当てられていないnext_state)は、 '|'で区切られたref_valueリテラルです。 '、'の代わりに、[最小、完全で、検証可能な例](https://stackoverflow.com/help/mcve)はコンテキストの欠如 - ここでの型と使用の意味 - を示しています。あなたは、質問の例とは異なる値(no_error)を仮定しています。直接的または間接的な列挙値ですか? – user1155120