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

ID 683082
日付 4/13/2020
Public

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

ドキュメント目次

1.5.2. クリアおよびクロックイネーブルなどのセカンダリー・レジスター制御信号

のレジスターIntel FPGAは、多くのセカンダリー制御信号を提供します。これらの信号を使用して、余分な論理セルを使用せずに各レジスターの制御ロジックを実装します。 Intel FPGAデバイス・ファミリーでは、2次信号のサポートが異なるため、デバイス・ファミリーのデータシートを参照して、ターゲットデバイスで使用可能な信号を確認してください。

デバイスで信号を最も効率的に使用するには、HDLコードがデバイス・アーキテクチャーに可能な限り一致するようにします。アーキテクチャーの性質上、制御信号には特定の優先順位があります。可能であれば、HDLコードはその優先順位に従う必要があります。

合成ツールは、通常のロジックを使用して制御信号をエミュレートできるため、機能的に正しい結果を常に得ることができます。ただし、デザイン要件により制御信号の使用と優先順位を柔軟に制御できる場合、デザインをターゲットデバイス・アーキテクチャーに合わせて、最も効率的な結果を達成してください。デザインの信号の優先度がターゲット・アーキテクチャーの優先度と同じでない場合、制御信号を実装するために追加のロジックが必要になる場合があります。この追加のロジックは追加のデバイスリソースを使用するため、制御信号に追加の遅延を引き起こす可能性があります。

特定のケースでは、デバイス・アーキテクチャーで専用の制御ロジック以外のロジックを使用すると、より大きな影響があります。たとえば、 clock enable信号は、デバイス・アーキテクチャーの同期resetまたはclear信号よりも優先されます。 clock enableはLABのクロックラインをオフにし、 clear信号は同期します。したがって、デバイス・アーキテクチャーでは、同期クリアはクロックエッジが発生したときにのみイネーブルなります。

clock enable信号よりも優先される同期clear信号でレジスターを定義する場合、 インテル® Quartus® Prime合成は、レジスターへのデータ入力を使用してクロックイネーブル機能をエミュレートします。エミュレートされた機能はレジスターのclock enableポートを使用しないため、Clock Enable Multicycleマルチサイクル制約を適用できません。この場合、異なる優先順位を使用すると、 clock enable信号への割り当てで予期しない結果が生じます。

Intel FPGAデバイス・ファミリーの信号の順序はすべて同じです。ただし、すべてのデバイス・ファミリーがすべての信号を提供するわけではありません。優先順位は次のとおりです。

  1. Asynchronous Clear ( clrn)—最高の優先度
  2. Enable (ena)
  3. Synchronous Clear (sclr)
  4. Synchronous Load (sload)
  5. Data In (data)—最低優先度

Intel FPGAデバイスでのセカンダリー制御信号の優先順位は、他のベンダーのFPGAデバイスの注文とは異なります。デザイン要件が優先度に関して柔軟性がある場合、FPGAベンダー間でデザインを移行するときに、セカンダリー制御信号がデザイン・パフォーマンス要件を満たしていることを確認します。最良の結果を達成するため。ターゲットデバイスのアーキテクチャーに合わせてください。

セカンダリー信号付きのVerilog Dタイプフリップフロップバス

このモジュールはすべての インテル® Arria® 10 DFFセカンダリー信号を使用します: clrnenasclr 、およびsload 。シンセシスは同じセカンダリー信号を持つ複数のDFFがある場合にのみいくつかのセカンダリー信号を推測するため、単一のDFFではなく8ビットのDFFバスをインスタンス化することに注意してください。

module top(clk, clrn, sclr, sload, ena, data, sdata, q);
	input clk, clrn, sclr, sload, ena;
	input [7:0] data, sdata;
	output [7:0] q;
	reg [7:0] q;
	always @ (posedge clk or posedge clrn)
		begin
		if (clrn)
			q <= 8'b0;
		else if (ena)
			begin
			if (sclr)
				q <= 8'b0;
			else if (!sload)
				q <= data;
			else
				q <= sdata;
			end
		end
endmodule