syn.directive.reset - 2025.2 日本語 - UG1399

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

Document ID
UG1399
Release Date
2026-01-22
Version
2025.2 日本語

説明

RESET プラグマまたは指示子は、特定のステート変数 (グローバルまたはスタティック) のリセット ポートを追加または無効にします。

リセットポートを使用して、ポートに接続されたレジスタやブロック RAM を初期値に戻します。リセット信号を適用する際は、常にこのれを実行してください。グローバルには、syn.rtl.reset のコンフィギュレーション設定によって RTL リセット ポートの有無と動作が決定されます。リセット コンフィギュレーション設定には、リセットの極性を定義したり、リセットが同期か非同期かを指定する機能が含まれます。さらに重要なのは、リセット コンフィギュレーション設定によって、リセット信号が適用された際にどのレジスタがリセットされるかが制御される点です。詳細は、 『Vitis 高位合成ユーザー ガイド』 (UG1399) の「初期化およびリセット動作の制御」を参照してください。

RESET プラグマは、リセットに対してより詳細な制御を提供します。グローバル変数や静的変数の場合、RESET プラグマを使用すると、リセットが存在しない場合でも明示的にリセットを有効化できます。また、プラグマを off にすると、変数をリセット対象から除外することも可能です。これはスタティック配列またはグローバル配列がデザインに含まれる場合に特に便利なことがあります。

注記: クラスのパブリック変数については、リセット コンフィギュレーション設定が関数レベルやファイル レベルで宣言された変数にのみ適用されるため、RESET プラグマを使用する必要があります。さらに、クラスのオブジェクトに対しては、最上位関数またはサブ関数内で RESET プラグマを適用する必要があります。クラスのプライベート変数には適用できません。

構文

C ソース コードの変数のライフ サイクルの境界内に配置します。

syn.directive.reset=<location> [ variable=<a> | off=true ]

説明

location>
変数を含める場所を function[/label] の形式で指定します。
variable=<a>
RESET プラグマを適用する変数を指定します。
off または off=true
指定した変数にリセットが生成されないようにします。

グローバル リセット (syn.rtl.reset) 設定が none または control の場合でも、関数 foo の変数 a にリセットを追加します。

syn.directive.reset=foo a

グローバル リセット設定が state または all の場合でも、関数 foo の変数 static int a からリセットを削除します。

syn.directive.reset=off foo a

次の例では、RESET プラグマや指示子をクラス変数やメソッドと組み合わせて使用しています。クラス内で変数を宣言する場合、その変数はクラスのパブリック静的変数である必要があります。クラスのメソッド内で、その変数に対して RESET プラグマを作成できます。また、HLS デザインの最上位関数またはサブ関数でオブジェクトを作成した後に、RESET プラグマを適用することも可能です。

class bar {
public:
  static int a; // class level static; must be public
  int a1;       // class-level non-static; must be public
  bar(...) {
  // #pragma reset does not work here for a or a1
  }
  // this is the function that is called in the top
  void run(...) {
  // #pragma reset does not work here for non-static variable a1
  // but does work for static variable a
  #pragma reset variable=a
  }
};
static int c; // file level 
int d; // file level
void top(...) {
#pragma HLS top
  static int b; // function level
  bar t;
  static bar s;

  // #pragma reset works here for b, c and d, as well as t and s members
  // except for t.a1 because it is not static
  #pragma reset variable=b
  #pragma reset variable=c
  #pragma reset variable=d
  #pragma reset variable=t.a
  #pragma reset variable=s.a
  #pragma reset variable=s.a1
  t.run(...); 
  s.run(...); 
} 
次は、関数 top に対して指定された syn.directive.reset コマンドの例です。
syn.directive.reset=top variable=b
syn.directive.reset=top variable=c
syn.directive.reset=top variable=d
syn.directive.reset=top variable=t.a
syn.directive.reset=top variable=s.a
syn.directive.reset=top variable=s.a1