インテル® HLS コンパイラー: リファレンス・マニュアル

ID 683349
日付 6/23/2017
Public
ドキュメント目次

1.4.2.6. 引数の実装を制御するマクロと属性

デフォルトでは、HLSコンパイラーは関数引数のインターフェイスをコンポーネントの呼び出し (start または busy) インターフェイスに同期する入力コンデュイットとして実装します。 ソースコード内のマクロまたは属性を個別のコンポーネント引数に追加することにより、これらのインターフェイスの実装をポインター・パラメーターと同様の方法で制御するオプションがあります。
表 7.  可能なインターフェイス合成マクロと属性
<path to i++ installation>/include/HLS/hls.h ファイル内のマクロ定義 属性 説明
hls_conduit_argument __attribute__((argument_interface("wire"))) デフォルト実装。

コンパイラーは、Avalon®-ST プロトコルに従って、コンポーネントの呼び出し (start または busy) インターフェイスに同期する入力コンデュイットとして引数を実装します。

hls_avalon_slave_register_argument __attribute__((argument_interface("avalon_mm_slave"))) コンパイラーは、Avalon-MM スレーブ・インターフェイスを介して読み出しと書き込みができるレジスターとして引数を実装します。引数は、コンデュイットの実装と同様にコンポーネントのパイプラインに読み込まれます。実装は、start または busy インターフェイスに同期します。
hls_avalon_slave_memory_argument(size_of_slave_memory_in_bytes) N/A コンパイラーは、専用スレーブ・インターフェイスを介して読み出しと書き込みができるオンチップ・メモリーブロックに引数を実装します。
生成されたメモリーは、他のすべての内部コンポーネント・メモリー ( つまり、バンキング、結合など ) と同じアーキテクチャーの最適化を行います。コンパイラーが静的結合の最適化を実行する場合、スレーブ・インターフェイスのデータ幅は結合した幅になります。
注: この属性はポインター引数にのみ適用されます。
表 8.  引数の意図する動作の指定におけるマクロと属性引数の実装の制御に加え、argument_interface属性と組み合わせて属性を使用して引数の意図した動作を指定することができます。または、対応するマクロを挿入することもできます。

意図する動作を指定しない場合、引数のデフォルト動作は不安定です。不安定引数は、コンポーネントにライブデータがある間 ( つまり、パイプラインされた関数呼び出しの間 ) に変更されることがあります。

<path to i++ installation>/include/HLS/hls.h ファイル内のマクロ定義 属性 説明
hls_stable_argument __attribute__((stable_argument)) 安定引数とは、コンポーネントにライブデータがある間 ( つまり、パイプラインされた関数呼び出しの間 ) に変更されない引数のことです。

コンポーネント実行中の安定引数の変更には予期しない動作が発生する可能性があります。特に、安定引数の使用ごとに古い値または新しい値になる可能性があり、呼び出し内での一貫性が保証されません。すなわち、同じ呼び出しでの同じ変数が複数の値で表示されます。

適切な場合は、安定引数の使用によりデザインで大量のレジスター数の節約が可能です。