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

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

1.6.3.1. アダプティブ・ロジック・モジュールでの6入力LUTを備えるアーキテクチャー

基本的な論理構造に6入力LUTを備えるインテルFPGAデバイスファミリーの場合、ALMでは同時に3ビットを追加することができます。 コードを再構築してこの機能を活用し、パフォーマンスを向上させます。
4入力LUTアーキテクチャーをターゲットとするコードは6入力LUTデバイスで正常にコンパイルされますが、実装は非効率になる可能性があります。例えば、6入力のALUTを活用するには、4入力LUTアーキテクチャーにデザインされた大規模パイプライン2値加算器ツリーを書き換える必要があります。ツリーを3値ツリーとして再構築することにより、デザインの効率が大幅に向上し、密度の使用率が大幅に改善されます。

Verilog HDLのパイプライン化された3値ツリー

この例では、パイプライン化された加算器を示しています。ただし、加算演算を分割すると、パイプライン化されていない加算器でもより良い結果を得ることができます。デザインがパイプライン化されていない場合、3値ツリーは2値ツリーよりもはるかに優れたパフォーマンスを提供します。例えば、合成ツールによっては、HDLコードの sum = (A + B + C) + (D + E) により、括弧なしのコードよりも、A + B + C の3入力加算器とそれに続く sum1 + D + E の3入力加算器に対する最適な実装が作成される可能性があります。括弧を追加しない場合、合成ツールでは、アーキテクチャーに最適でない方法で加算を分割する場合があります。

module ternary_adder_tree (a, b, c, d, e, clk, out);
    parameter width = 16;
	input [width-1:0] a, b, c, d, e;
	input	clk;
	output [width-1:0] out;

	wire [width-1:0] sum1, sum2;
	reg [width-1:0] sumreg1, sumreg2;
	// registers

	always @ (posedge clk)
		begin
			sumreg1 <= sum1;
			sumreg2 <= sum2;
		end

	// 3-bit additions
	assign sum1 = a + b + c;
	assign sum2 = sumreg1 + d + e;
	assign out = sumreg2;
endmodule