合成ツールによってRTL回路にコードがどのように推論されるかという点で、VHDLのプロセスのIf-ElseコンストラクトとCaseステートメントコンストラクトの違いを教えてください。
if-elsif-else
コンストラクトは、ネットワークのルーティングの優先度を推測します:
この回路のシミュレーション – CircuitLabを使用して作成された回路図
これは
if bool_expr_1 then
sig <= val_expr_1;
elsif bool_expr_2 then
sig <= val_expr_2;
elsif bool_expr_3 then
sig <= val_expr_3;
else
sig <= val_expr_4;
end if;
case
コンストラクトは、他の一方で、大きな老いたマルチプレクサを推論します:
これは
case case_expr is
when c0 =>
sig <= val_expr_0;
when c1 =>
sig <= val_expr_1;
when c2 =>
sig <= val_expr_2;
...
when others =>
sig <= val_expr_N;
end case;
明らかに、これらは1つの値式のみを含む非常に単純化されたデザインであり、1つの出力になります。
複数のネストされたif-elseの場合と、プロセス内でif-elseコンストラクトとケース文を混合する場合を検討してください。
上記により、どのようにネスト/ミックスされるかを確認できます。
また、どの構成を使用するのですか?
以来if-else
推論優先順位は、複数の入力条件が発生する可能性があるときに使用されるべきです。case
入力が相互に排他的である場合、一方を使用するのが適切です。
dec
/jz
命令を実行します。これははるかに効率的です。おそらく同様の最適化がここで適用されます。