インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.5.3.2. ラッチの正しい推論

合成ツールでは、一般的に組み合わせループに関連するグリッチやタイミング障害の問題を示さないラッチを推論することができます。 インテル® Quartus® Prime プロ・エディション ・ソフトウェアは、合成で推論されたラッチをコンパイルレポートの User-Specified and Inferred Latches セクションで報告します。このレポートは、ラッチがタイミング障害になるか、およびユーザー指定のラッチと推論ラッチの総数を示します。
注: 場合によっては、タイミング解析でラッチのタイミングが完全にモデル化されないことがあります。ベスト・プラクティスとして、デザインに必要で、その影響を完全に理解している場合を除き、ラッチを避けるようにします。

デザインのラッチまたは組み合わせループが User Specified and Inferred Latches セクションに表示されない場合、 インテル® Quartus® Primeの合成ではラッチを安全なラッチとして推論していません。そのため、そのラッチはグリッチなしであるとはみなされません。

コンパイルレポートの Analysis & Synthesis Logic Cells Representing Combinational Loops テーブルにリストされているすべての組み合わせループは、タイミング障害の危険があります。このエントリーはデザインに問題があり、さらに調査が必要な可能性があることを示すものです。ただし、正しいデザインに組み合わせループが含まれている場合もあります。例えば、組み合わせループが感応しない場合などがあります。これは、ハードウェアに電気的なパスがあり、次のいずれかが当てはまる場合に起こります。

  • 設計者は、そのパスをアクティブにするデータが回路で起こらないことを理解している
  • 周囲のロジックが相互に排他的な方法で設定され、データ入力に関係なく、そのパスが感応することはない

6入力LUTベースのデバイスの場合、 インテル® Quartus® Primeの合成では、すべてのラッチ入力を組み合わせループ内の単一のアダプティブ・ルックアップ・テーブル (ALUT) で実装します。したがって、User-Specified and Inferred Latches テーブルのすべてのラッチには、単一の入力が変化した際のタイミング障害はありません。

インテル® Quartus® Primeの合成レポートでラッチを安全なラッチとしてリストしている場合、その他の最適化 (フィッターでの物理合成ネットリスト最適化など) では障害のないパフォーマンスが維持されます。障害のない動作を保証するために、一度に変更できるコントロール入力は1つだけです。setreset を同時にデアサートする、またはデータとイネーブルを同時に変更するなど、2つの入力が同時に変化すると、ラッチで不正な動作が発生する可能性があります。

インテル® Quartus® Primeの合成では、Verilog HDLの always ブロックおよびVHDLの process ステートメントからラッチを推論します。ただし、 インテル® Quartus® Primeの合成では、Verilog HDLの連続割り当て、またはVHDLの同時信号割り当てからラッチを推論しません。これらの規則は、レジスターの推論と同じです。 インテル® Quartus® Primeの合成では、レジスターまたはフリップフロップを always ブロックおよび process ステートメントからのみ推論します。

Verilog HDLセットリセット・ラッチ

module simple_latch (
   input SetTerm,
   input ResetTerm,
   output reg LatchOut
   );
   always @ (SetTerm or ResetTerm) begin
      if (SetTerm)
         LatchOut = 1'b1;
      else if (ResetTerm)
         LatchOut = 1'b0;
   end
endmodule

VHDLデータ・タイプ・ラッチ

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITY simple_latch IS
	PORT (
		enable, data    : IN STD_LOGIC;
		q               : OUT STD_LOGIC
	);
END simple_latch;
ARCHITECTURE rtl OF simple_latch IS
BEGIN
	latch : PROCESS (enable, data)
		BEGIN
		IF (enable = '1') THEN
			q <= data;
		END IF;
	END PROCESS latch;
END rtl;

Verilogの連続割り当てではラッチは推論されない

次の例は、Verilog HDLの連続割り当てを示しています。この割り当てでは、 インテル® Quartus® Prime開発ソフトウェアはラッチを推論しません。

assign latch_out = (~en & latch_out) | (en & data);

この割り当ての動作はラッチに似ていますが、ラッチとして正しく機能しない場合があります。また、タイミングはラッチとして解析されません。 インテル® Quartus® Prime プロ・エディション の合成では、インテルFPGAラッチIPコアのインスタンス化で可能な場合にも、安全なラッチを作成します。インテルFPGAラッチIPを使用すると、データ、イネーブル、セット、および reset 入力の任意の組み合わせでラッチを定義することができます。安全なラッチの作成には、HDLコードからラッチを推論する場合と同じ制限が適用されます。

別の合成ツールでインテルFPGAラッチIPコアを推論している場合、 インテル® Quartus® Primeの合成でも実装をラッチとして認識するようになります。サードパーティー製の合成ツールがインテルFPGAラッチIPコアを使用してラッチを実装している場合、 インテル® Quartus® Prime プロ・エディション の合成では、HDLソースコードで定義しているラッチのリストと同じ方法で、User-Specified and Inferred Latches テーブルでラッチを報告します。インテルFPGAラッチIPコアの実装生成に必要なコーディング・スタイルは、合成ツールによって異なります。一部のサードパーティー製合成ツールでは、推論されているインテルFPGAラッチIPコアの数がリストされます。

フィッターは、グローバル配線をコントロール信号に使用します。これには、合成でラッチイネーブルとして識別された信号が含まれます。場合によっては、グローバルな挿入遅延によってタイミング・パフォーマンスが低下します。必要に応じて Intel Quartus Prime Global Signal ロジックオプションをオフにして、グローバル信号の使用を手動で防ぐことができます。コンパイルレポートの Global & Other Fast Signals テーブルでは、グローバル・ラッチ・イネーブルが報告されます。