syn.directive.unroll - syn.directive.unroll - 2026.1 日本語 - UG1399

Vitis 高位合成ユーザー ガイド (UG1399)

Document_ID
UG1399
Release_Date
2026-06-23
Version
2026.1 日本語

説明

ループ本体のコピーを複数作成することによりループを変換します。

ループの誘導変数は、ループが実行する反復回数を指定します。ループ本体内のロジック (たとえば、break やループの終了変数の変更) は、反復回数に影響します。RTL では、ループ本体を表すロジック ブロックがループをインプリメントします。このロジックは同じ反復回数だけ実行されます。

syn.directive.unroll コマンドを使用すると、ループの部分展開または完全展開が可能です。ループを完全に展開すると、ループの反復回数と同じ数のループ本体のコピーが RTL に作成されます。係数 N でループを部分展開すると、ループ本体のコピーが N 個作成され、ループ反復数が調整されます。

部分展開の係数 N が元のループの反復回数の整数倍でない場合は、元の終了条件を確認してください。この場合、各ループ本体の展開済みフラグメントの後で終了条件を確認します。

ループを完全に展開するには、ループの境界がコンパイル時に判明している必要があります。部分展開では、ループの境界が判明している必要はありません。

構文

syn.directive.unroll=[OPTIONS] <location>
  • <location>: 展開するループの場所を format function[/label] の形式で指定します。

オプション

factor=<integer>
0 以外の整数値を指定すると、部分展開を要求したものとして扱われます。

ループ本体は、ここで指定した回数分繰り返され、それに応じて反復回数が調整されます。

skip_exit_check
このオプションは、-factor を指定した場合 (部分展開) にのみ有効です。
  • 固定境界

    反復回数が係数の倍数である場合、終了条件チェックは実行されません。

    反復回数が係数の整数倍でない場合は、次のようになります。

    • 展開は実行されません。
    • 処理を続行するには終了条件を確認する必要があることを示す警告メッセージが表示されます。
  • 可変境界

    終了条件の確認を省略します。次を確認してください。

    • 可変境界が係数の整数倍である。
    • 終了条件の確認が不要である。
off=true
指定されたループの展開を無効にします。

関数 foo 内のループ L1 を展開します。プラグマは L1 の本体に記述します。

syn.directive.unroll=foo/L1

関数 foo のループ L2 の展開係数を 4 に指定します。最終チェックを削除します。プラグマは L2 の本体に記述します。

syn.directive.unroll=skip_exit_check factor=4 foo/L2