インテル® Quartus® Primeプロ・エディションのユーザーガイド: デザイン上の推奨事項

ID 683082
日付 4/13/2020
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

2.4.1.2. 部分非同期リセット

非同期リセットは、回路デザインで最も一般的なリセットの形式であり、実装が最も簡単です。通常、非同期リセットをデバイスに挿入し、グローバルバッファをオンにして、デバイス内のすべてのレジスターの非同期リセットピンに接続できます。

この方法は特定の状況でのみ有効です。常にレジスターをリセットする必要はありません。同期リセットとは異なり、非同期リセットはデータパスに挿入されず、レジスター間のデータ到着時間に悪影響を与えません。リセットはすぐにイネーブルなり、レジスターがリセットパルスを受信するとすぐに、レジスターがリセットされます。非同期リセットはクロックに依存しません。

ただし、リセットがディアサートされ、リカバリ(µtSU )または削除(µtH )時間チェック(Timing Analyzerのリカバリおよび削除解析が両方の時間をチェック)をパスしない場合、エッジはメタスタビリティゾーンに落ちたと言われます。正しい状態を判断するには追加の時間が必要であり、遅延が原因でセットアップ時間がダウンストリームの登録に失敗し、システム障害が発生する可能性があります。これを回避するには、非同期リセットのあるレジスターの後にいくつかのフォロワーレジスターを追加し、これらのレジスターの出力をデザインで使用します。フォロワーレジスターを使用してデータをクロックに同期し、準安定性の問題を取り除きます。これらのレジスターをデバイス内で互いに近くに配置して、ルーティング遅延を最小限に抑える必要があります。これにより、データ到着時間が短縮され、MTBFが増加します。これらのフォロワーレジスター自体はリセットされず、現在の状態または初期状態を「フラッシュアウト」することにより、数クロックサイクルの期間にわたって初期化されるようにしてください。

図 83. フォロワーレジスターを使用した非同期リセット

次の例は、同等のVerilog HDLコードを示しています。リセットのアクティブエッジはプロシージャブロックの感度リストにあり、クロックイネーブルに関連付けられたリセット信号の反転でフォロワーレジスターのクロックイネーブルを推測します。フォロワーレジスターは、非ブロッキング割り当てを使用して示されているように、別の手続き型ブロックにある必要があります。

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]

非同期リセットはノイズの影響を受けやすく、ノイズの多い非同期リセットはスプリアスリセットを引き起こす可能性があります。非同期リセットがデバウンスおよびフィルタリングされることを確認する必要があります。非同期で簡単にリセットを開始できますが、非同期でリセットを解除すると、フィードバックを含む同期回路での望ましくない状況の危険を含む、準安定性の潜在的な問題(「リセット除去」とも呼ばれます)につながる可能性があります。