リセット ポートは、リセット信号が適用されたときにリセット ポートに接続されたレジスタおよびブロック RAM を初期値に戻すためにデバイスで使用されます。RTL コンフィギュレーションで最も重要なのは、通常リセット動作の選択です。
注記: リセット動作について説明する前に、初期化とリセットの違いを理解しておくことが重要です。詳細は、初期化動作 を参照してください。
RTL リセット ポートの有無と動作は、次の図に示すようにコンフィギュレーション コマンドで制御されます (RTL のコンフィギュレーション を参照)。
図 1. RTL コンフィギュレーション
リセット設定では、リセットの極性および同期か非同期かを設定できますが、重要なのは、reset オプションを使用してリセット信号が適用されたときにリセットするレジスタを指定できるということです。
重要:
AXI4 インターフェイスがデザインで使用される場合は、
config_rtl
コンフィギュレーションの設定に関係なく、リセット極性は自動的にアクティブ Low に変更されます。これは、AXI4 規格の要件です。reset オプションには、次の 4 つの設定があります。
- none
- デザインにリセットを追加しません。
- control
- すべての制御レジスタにリセットを追加します (デフォルト)。制御レジスタは、ステート マシンに使用されるレジスタで、I/O プロトコル信号を生成するために使用されます。この設定により、デザインはその動作ステートを即座に開始できるようになります。
- state
- 制御レジスタ (control 設定と同様) と、C/C++ コードのスタティックおよびグローバル変数から派生されるレジスタまたはメモリにリセットを追加します。この設定により、リセットを適用したときに、C/C++ コードで初期化されるスタティックおよびグローバル変数が初期化値に確実にリセットされるようになります。
- all
- デザインのすべてのレジスタおよびメモリにリセットを追加します。
RESET プラグマまたは指示子を使用すると、さらに詳細にリセットを制御できます (syn.directive.reset を参照)。スタティックおよびグローバル変数には、RESET 指示子を使用してリセットを追加できます。変数のリセットを削除するには、RESET 指示子を off
に設定します。
重要: リセットに
state
または all
オプションを使用する際には、配列のリセットへの影響に注意するようにしてください。