シグナルを複数のシグナルと同時に比較するためのコードを書いています。
次に例を示します。
process (CLK, reset)
if reset = '0' then
data <= (others => '0');
elsif rising_edge (CLK) then
if A = B then
data <= data OR "0001";
else data <= data AND "1110";
end if;
if A = C then
data <= data OR "0010";
else data <= data AND "1101";
end if;
if A = D then
data <= data OR "0100";
else data <= data AND "1011";
end if;
if A = E then
data <= data OR "1000";
else data <= data AND "0111";
end if;
end if;
end process;
A と B、C、D、および E の信号を比較し、データ内の関連するビットをオンまたはオフにしたいだけです。合成ツールは B、C、および D の if ステートメントを最適化し、E if ステートメントのみを残すため、上記のコードは機能しません。case - when ステートメントを使用することも考えましたが、関連する単一ビットをオフにするメカニズムがありません。他の人が4ビットすべてをオフにすることしかできない場合。これを行う効果的な方法は何ですか?ありがとう!
ところで、これら 4 つの if ステートメントはすべて同時に実行されますか? それとも、異なるサイクルで実行されますか? それらは1つずつ実行されると思います。そうしないと、ファンインが発生します。