説明
このコマンドは、コードの領域をプロトコル領域として指定します。プロトコル領域には、コードで明示的に指定されていなければ、Vitis HLS によりクロック動作は挿入されません。この領域では、関数引数からの読み出しおよび関数引数への書き込みも含め、Vitis HLS により演算の間にクロックが挿入されることはありません。このため、読み出しおよび書き込みの順序は、合成済み RTL の順序と同じになります。
C/C++ コードでコードの領域を作成するには、コードで領域を波かっこ { } で囲み、名前を付けます。次の例は、
io_section
という名前の領域を定義します。io_section:{
...
lines of code
...
}
クロック操作は、C/C++ コードでは ap_wait()
文、C++ コードでは wait()
文を使用して明示的に指定できます。ap_wait
および wait
文は、デザインのシミュレーションには影響しません。
構文
C ソースの関数の本体またはプロトコル領域内に配置します。
#pragma HLS protocol [floating | fixed]
オプション
-
floating
- プロトコル領域外のコード文を最終的な RTL のプロトコル領域内の文とオーバーラップして並列実行できるようにします。プロトコル領域はサイクル精度のままですが、領域外の演算は同時に実行できます。これがデフォルト モードです。
-
fixed
- プロトコル領域外の文がプロトコル領域内の文と並列実行されないようにします。
例
この例は、関数 foo
にデフォルト モードの floating プロトコル領域 io_section
を定義します。
io_section: {
#pragma HLS protocol
...
}