記事 ID: 000091832 コンテンツタイプ: トラブルシューティング 最終改訂日: 2023/08/23

if ステートメントがループ内にネストされているのに、デザイン内の for ループに対して非常に多数のロジックレベルが合成されるのはなぜですか?

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    デザインに次のような for ループが含まれている場合:

    整数i;

    for( i = ... ; ... ; ... ) 開始

    a = i の式 ;

    もし( ......) に関する条件文

    ステートメント;

    ......

    終わり

    終わり

    インテル® Quartus® Prime 開発ソフトウェア・プロ・エディションは、この for ループで非常に多くのロジックレベルを合成する場合があります。

    解決方法

    for ループにこれらの条件が含まれている場合、ロジック深度に対して最適化することはできません

    • ループ制御変数に依存する代入式
    • 代入結果を選択条件として使用するループにネストされたIFステートメント

    ループ制御変数に依存する代入ステートメントは、さらなる最適化を可能にするために for ループ・ブロックの外に移動する必要があります。ループの外に出ると、代入ステートメントはベクトルの各ビットへの並列代入に変換できます。次に、各サイクルの割り当て結果を、この新しく作成されたベクトルのループ制御変数によってインデックス化できます。

    コードは次のように変更できます。

    ベクトル [ N ] = ... ;

    ......

    ベクトル[ 2 ] = ... ;

    ベクトル[ 1 ] = ... ;

    整数 i ;

    for( i = ... ; ... ; ... ) 開始

    もし( ......ベクトル[i])に関する条件文

    ステートメント;

    ......

    終わり

    終わり

    最適化は、サイクル数が固定されており、それほど大きくない場合に適しています。この最適化により、ロジックレベル数を減少させながら、ALUT の使用量を増やすことができます。

    インテル® Quartus® Prime Pro Edition ソフトウェアの将来のバージョンでは、元のコードを自動的に最適化するようスケジュールされています。

    関連製品

    本記事の適用対象: 1 製品

    インテル® プログラマブル・デバイス

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。