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

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

1.6. 静的変数

HLSコンパイラーは C および C++ と同一のセマンティックを有する関数スコープの静的変数をサポートしています。

関数スコープの静的変数はリセット時に指定された値に初期化されます。加えて、これらの変数への変更はコンポーネントの起動時に表示されるため、コンポーネント内の状態の保存に最適です。

静的変数の初期化のために、コンポーネントは余分なロジックを必要とし、そのロジックがアクティブな間はコンポーネントがリセット状態を終了するまで時間がかかる場合があります。

HLSコンパイラーは単一コンポーネントでのみアクセスされるファイルスコープの静的変数をサポートしています。HLSコンパイラーはこれらのファイルスコープの静的変数をそのコンポーネントにおける関数スコープの静的変数であるかのようにコンパイルします。

静的変数の初期化

典型的なプログラムとは異なり、コンポーネント内の静的変数がいつ初期化されるかを制御することができます。静的変数は、コンポーネントの電源投入時またはリセット時に初期化できます。

コンポーネントの電源投入時に静的変数を初期化することは、プログラムの実行開始後に静的変数の値を変更できない従来のプログラミング・モデルに類似しています。

コンポーネントがリセットされた際に静的変数を初期化すると、電源投入時を含めてコンポーネントがテストベンチから呼び出されるたびに、静的変数が初期化されます。しかしながら、このタイプの静的変数の初期化には余分なロジックが必要です。この余分なロジックは、スタートアップ・レイテンシーおよびコンポーネントに必要な FPGA エリアに影響を与えます。

デフォルト動作は、コンポーネントのリセット時に静的変数を初期化します。

静的変数の初期化は、静的変数の宣言に次のいずれかのキーワードを追加することで明示的に設定できます。
hls_init_on_reset
静的変数値はコンポーネントのリセット後に初期化されます。
次の例で示すように、このキーワードを静的変数の宣言に追加します。
static char arr[128] hls_init_on_reset;

これは静的変数を初期化するためのデフォルトの動作です。この動作を取るために静的変数の宣言でhls_init_on_resetのキーワードを指定する必要はありません。

例えば、次の例の静的変数もコンポーネントのリセット時に初期化されます。
static in arr[64];
hls_init_on_powerup
静的変数は、電源投入時にのみ初期化されます。この初期化はメモリー初期化ファイル (.mif) を使用してメモリーを初期化し、これによりリソース使用率とコンポーネントのスタートアップ・レイテンシーを減らします。
次の例で示すように、このキーワードを静的変数の宣言に追加します。
static char arr[128] hls_init_on_powerup;

一部の静的変数は、静的変数の複雑さのためにこの初期化を利用できない場合があります。このような場合、コンパイラーはエラーを返します。

静的変数の初期化の説明について詳しくは、 <path to HLS compiler installation>/examples/tutorials/static_var_initにあるstatic_var_initデザインのチュートリアルをご覧ください。

コンポーネントのリセットについて詳しくは、インテル HLS コンパイラー・ユーザーガイドの「リセット動作」を参照してください。