インテル® Hyperflex™ アーキテクチャー高性能デザイン・ハンドブック

ID 683353
日付 11/04/2019
Public

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

ドキュメント目次

4.1.4. ステップ4:ショートパスとロングパスの条件を最適化する

非同期レジスターを削除し、パイプライン・ステージを追加した後、高速転送の詳細レポートは、ショートパスとロングパスの条件がさらなる最適化を制限することを示唆しています。この例では、最長パスがこの特定のクロックドメインのfMAXを制限します。パフォーマンスを向上させるには、次の手順に従って、このクロックドメインの最長パスの長さを短くします。
  1. ロングパス情報を表示するには、早送り詳細レポートのCritical Chain Detailsタブをクリックします。このパスに関するロジックの構造を確認し、関連するRTLコードを検討してください。このパスには、node.vファイルのnodeモジュールが含まれます。クリティカル・パスは、いくつかのコンパレータの一部であるレジスターdata_hiおよびdata_loの計算に関連しています。

    以下に、このパスの元のRTLを示します。

    always @(*)
      begin : comparator
        if(data_a < data_b) begin
          sel0 = 1'b0; // data_a : lo / data_b : hi
        end else begin
          sel0 = 1'b1; // data_b : lo / data_a : hi
        end
      end
    
    always @(*)
        begin : mux_lo_hi
            case (sel0)
                1'b0 :
                begin
                    if(LOW_MUX == 1)
                        data_lo = data_a;
                    if(HI_MUX == 1)
                        data_hi = data_b;
                end
                1'b1 :
                begin
                    if(LOW_MUX == 1)
                        data_lo = data_b;
                    if(HI_MUX == 1)
                        data_hi = data_a;
                end
                default :
                begin
                    data_lo = {DATA_WIDTH{1'b0}};
                    data_hi = {DATA_WIDTH{1'b0}};
                end
            endcase
        end

    コンパイラーは、このRTLから次のロジックを推測します。

    • sel0信号を作成するコンパレーター
    • data_hiおよびdata_lo信号を作成する1組のマルチプレクサー(次の図に示すように)。
    図 99. ノード・コンポーネントの接続
  2. nodeモジュールをインスタンス化するpixel_network.vファイルを確認します。 nodeモジュールの出力は、使用しないと接続されません。これらの接続されていない出力では、 LOW_MUXまたはHI_MUXコードは使用されません。次の例に示すように、マルチプレクサを推測するのではなく、ビットごとの論理演算を使用してdata_hiおよびdata_lo信号の値を計算します。
    reg [DATA_WIDTH-1:0] sel0;
    
    always @(*)
      begin : comparator
        if(data_a < data_b) begin
          sel0 = {DATA_WIDTH{1'b0}}; // data_a : lo / data_b : hi
        end else begin
          sel0 = {DATA_WIDTH{1'b1}}; // data_b : lo / data_a : hi
     end
    	
     data_lo = (data_b & sel0) | (data_a & sel0);
     data_hi = (data_a & sel0) | (data_b & sel0);
    end
  3. もう一度、デザインをコンパイルして、Fast Forward Detailsレポートを表示します。パフォーマンスの向上は推定値と同様であり、ショートパスとロングパスの組み合わせは、それ以上のパフォーマンスを制限しません。このステップの後、論理ループのみがさらなるパフォーマンスを制限します。
    図 100. 最適化されたショートパスおよびロングパス条件
    注: 前の手順を完了する代わりに、これらの変更を既に含むMedian_filter_<version>/Final/median.qpfプロジェクトファイルを開いてコンパイルし、結果を確認できます。