このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
2.4.1.2. 部分非同期リセット
この方法は特定の状況でのみ有効です。常にレジスターをリセットする必要はありません。同期リセットとは異なり、非同期リセットはデータパスに挿入されず、レジスター間のデータ到着時間に悪影響を与えません。リセットはすぐにイネーブルなり、レジスターがリセットパルスを受信するとすぐに、レジスターがリセットされます。非同期リセットはクロックに依存しません。
ただし、リセットがディアサートされ、リカバリ(µtSU )または削除(µtH )時間チェック(Timing Analyzerのリカバリおよび削除解析が両方の時間をチェック)をパスしない場合、エッジはメタスタビリティゾーンに落ちたと言われます。正しい状態を判断するには追加の時間が必要であり、遅延が原因でセットアップ時間がダウンストリームの登録に失敗し、システム障害が発生する可能性があります。これを回避するには、非同期リセットのあるレジスターの後にいくつかのフォロワーレジスターを追加し、これらのレジスターの出力をデザインで使用します。フォロワーレジスターを使用してデータをクロックに同期し、準安定性の問題を取り除きます。これらのレジスターをデバイス内で互いに近くに配置して、ルーティング遅延を最小限に抑える必要があります。これにより、データ到着時間が短縮され、MTBFが増加します。これらのフォロワーレジスター自体はリセットされず、現在の状態または初期状態を「フラッシュアウト」することにより、数クロックサイクルの期間にわたって初期化されるようにしてください。
Verilog HDL Code of Asynchronous Reset with Follower Registers
module async_reset (
input clock,
input reset_n,
input data_a,
output out_a,
);
reg reg1, reg2, reg3;
assign out_a = reg3;
always @ (posedge clock, negedge reset_n)
begin
if (!reset_n)
reg1 <= 1’b0;
else
reg1 <= data_a;
end
always @ (posedge clock)
begin
reg2 <= reg1;
reg3 <= reg2;
end
endmodule // async_reset
非同期リセットは簡単に制約できます。定義により、非同期リセットは、リセットするレジスターのクロックドメインと非決定的な関係にあります。したがって、これらのリセットの静的タイミング解析は不可能であり、 set_false_pathコマンドを使用してタイミング解析からパスを除外できます。レジスターのクロックに対するリセットの関係は不明であるため、このパスに対してTiming Analyzerでリカバリおよび削除の分析を実行することはできません。偽のパスステートメントがなくてもそうしようとすると、リカバリと削除のパスがレポートされません。
SDC Constraints for Asynchronous Reset
# Input clock - 100 MHz
create_clock [get_ports {clock}] \
-name {clock} \
-period 10.0 \
-waveform {0.0 5.0}
# Input constraints on data
set_input_delay 7.0 \
-max \
-clock [get_clocks {clock}]\
[get_ports {data_a}]
set_input_delay 1.0 \
-min \
-clock [get_clocks {clock}] \
[get_ports {data_a}]
# Cut the asynchronous reset input
set_false_path \
-from [get_ports {reset_n}] \
-to [all_registers]
非同期リセットはノイズの影響を受けやすく、ノイズの多い非同期リセットはスプリアスリセットを引き起こす可能性があります。非同期リセットがデバウンスおよびフィルタリングされることを確認する必要があります。非同期で簡単にリセットを開始できますが、非同期でリセットを解除すると、フィードバックを含む同期回路での望ましくない状況の危険を含む、準安定性の潜在的な問題(「リセット除去」とも呼ばれます)につながる可能性があります。