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