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

ID 683082
日付 4/13/2020
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

1.5.3.2. ラッチを正しく推測する

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

デザインのラッチまたは組み合わせループがユーザー指定および推定ラッチセクションに表示されない場合、 インテル® Quartus® Prime合成はラッチを安全なラッチとして推論しなかったため、ラッチにグリッチがないとは見なされません。

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

  • デザイン者は、回路がそのパスをアクティブにするデータに遭遇しないことを知っている、または
  • 周囲のロジックは相互に排他的な方法で設定され、データ入力に関係なく、そのパスがこれまでに増感されることを防ぎます。

6入力LUTベースのデバイスの場合、 インテル® Quartus® Prime合成は、組み合わせループ内の単一の適応ルックアップテーブル(ALUT)ですべてのラッチ入力を実装します。したがって、1つの入力が変更された場合、 ユーザー指定および推測ラッチテーブルのすべてのラッチにはタイミングの危険はありません。

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

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

Verilog HDL Set-Reset Latch

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 Data Type Latch

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 Continuous Assignment Does Not Infer Latch

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

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

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

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

Fitterは、合成がラッチイネーブルとして識別する信号を含む制御信号にグローバル・ルーティングを使用します。場合によっては、グローバル挿入遅延によりタイミング・パフォーマンスが低下します。必要に応じて、 インテル® Quartus® Primeグローバル信号ロジックオプションをオフにして、グローバル信号の使用を手動で防止できます。Compilation ReportのGlobal&Other Fast Signalsテーブルは、グローバル・ラッチ・イネーブルをレポートします。