場合によっては、何かを行う方法が複数あることがあります。ほとんどの場合、VHDL ではさまざまな方法で処理できます。別の信号の値に基づいて、信号に異なる値を割り当てたい状況を見てください。
選択された信号割り当て
これを行う最も具体的な方法は、選択された信号割り当てを使用することです。のいくつかの可能な値に基づいてb
、値を に割り当てますa
。ここのコードに冗長性はありません。
with a select b <=
"1000" when "00",
"0100" when "01",
"0010" when "10",
"0001" when "11";
条件信号割り当て
条件付きシグナル割り当ての構成は、もう少し一般的です。選択肢ごとに、条件を指定する必要があります。これは、任意のブール式を条件として記述できることを意味し、同等性チェックよりも自由度が高くなります。この構成により自由度が高まりますが、冗長性も少し高くなります。a =
すべての行に等値チェック ( ) を書かなければなりませんでした。長い名前のシグナルを使用すると、コードがかさばります。また、選択したシグナル割り当てで使用される区切り記号はコンマでした。else
条件信号の割り当てでは、キーワードが必要です。同じ機能のための追加のコード。
b <= "1000" when a = "00" else
"1000" when a = "01" else
"1000" when a = "10" else
"1000" when a = "11";
ケースステートメントとの組み合わせプロセス
最も一般的に使用できる構造はプロセスです。このプロセス内で、case ステートメント、または if ステートメントのカスケードを記述できます。ここにはさらに冗長性があります。プロセス (開始、終了) のスケルトン コードとセンシティビティ リスト。それは大きな努力ではありませんが、これを起草している間にb
、a
. 小さなミスを犯しやすい。other
また、ケースで何が起こるかを指定する必要があります。
process(a)
begin
case a is
when "00" => b <= "1000";
when "01" => b <= "0100";
when "10" => b <= "0010";
when "11" => b <= "0001";
when others => assert "unreachable" severity failure;
end case;
end process;
この最後のコード スニペットは最大で、おそらく最もエラーが発生しやすいものですが、おそらく最も一般的なものでもあります。これは、プロセスとケース ステートメントという、おなじみで頻繁に使用される 2 つの構造を使用します。
選択信号と条件付き信号の割り当ての問題は、構文にシステムがないことです。意味はほぼ同じですが、構文が異なるだけで、気が遠くなります。Doulos の VHDL ゴールデン リファレンス ガイドのコピーを机の上に常備している多くのエンジニアを知っています。彼らの名前は常に言及されるため、これは Doulos にとって良いことです。