AR# 3583

FPGA Express - ラッチ推測を回避する方法

説明

キーワード : FPGA Express, Foundation Express, latch, synchronous, case, startup, ラッチ, 同期, スタートアップ, 推測

重要度 : 標準

概要 :
FPGA Express では、フリップフロップや組み合わせロジック、トライステート バッファ、ラッチなどのロジック エレメントに HDL コードを合成します。 ザイリンクス デバイスの場合、内部ラッチは組み合わせロジックを使用して作成されるため (ターゲットとしたファミリに内部ラッチがない場合)、リソースを効率的に利用できません。したがって、できる限りラッチ推測を回避するのが得策といえます。

プロセスで条件を定義せずにラッチを作成すると、未定義の条件が発生した場合に備えてプロセスで使用されている値を維持するようにラッチが推測されます。 このような状況は、case 文中に発生することがあります。

ソリューション

1

= DIN1 - DIN2;
2'b10 : DOUT DOUT DOUT = <= DIN1;
endcase
end

VHDL :

process (SEL, DIN1, DIN2)
begin
case SEL is
when "00" =>DIN1;
end c<= DIN1 + DIN2;
when "01" =>ase;
<= DIN1 - DIN2;
when "10" =>end process;

これら 2 例では、SEL= "11" のときに case 文の条件がないため、ラッチが作成されます。 ラッチを削除するには、次の文を追加します。

Verilog :

2'b11 : DOUT <= DIN2;

VHDL:

when "11" => DOUT <= DIN2;

DEFAULT 節 (Verilog) または WHEN OTHERS (VHDL) を使用するのが最適ですが、余分なロジックを作成してしまうことがあります。 この方法は最も安全ですが、不明なステートのロジックを既知のステートに移動させる必要があるため、デザインのサイズが大きく、スピードが遅くなることがあります。

2

= DIN2;
TEMP DOUT DOUT D<= DIN1;
end
endcase
end

VHDL :

process (SEL, DIN1, DIN2)
begin
case SEL is
when "00" =>OUT
<= DIN1 + DIN2;
when "01" => DOUT <= DIN2;
TEMP <= DIN1;
end case;
end proc<= DIN1 - DIN2;
when "10" =>ess;
<= DIN1;
when "11" =>
上記の例の場合、"11" case 文で 2 つの出力を割り当てるため、ラッチを推測できます。 この case 文を TEMP の面から見ると、4 つの case のうち 1 つしか指定されないため、不完全になります。

各 case 文の出力と全く同じリストに値を割り当て、この状況を回避してください。
AR# 3583
日付 01/04/2012
ステータス アーカイブ
種類 一般