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

ID 683082
日付 8/03/2023
Public
ドキュメント目次

2.3.1.3. 同期非同期リセットの使用

純粋な同期リセットや純粋な非同期リセットに関連する潜在的な問題を回避するために、同期非同期リセットを使用することができます。同期非同期リセットは、同期リセットと非同期リセットの利点を組み合わせたものです。

このリセットは非同期でアサートされ、同期してデアサートされます。これはほぼ瞬時に有効になり、速度に対応するデータパスが含まれないようにします。また、回路は同期式でタイミング解析に対応しており、ノイズ耐性があります。

次の例は、同期非同期リセットを実装する方法を示しています。シンクロナイザー・レジスターを同期リセットと同様の方法で使用する必要があります。ただし、非同期リセット入力はシンクロナイザー・レジスターの CLRN ピンに直接ゲーティングされ、発生するリセットが直ちにアサートされます。リセットがデアサートされると、論理「1」がシンクロナイザーを介してクロック入力され、それによってリセットが同期してデアサートします。

図 22. 同期非同期リセットの回路図

次の例は、同等のVerilog HDLコードを示しています。リセットのアクティブエッジをブロックのセンシティビティー・リストで使用します。

同期非同期リセットに対応するVerilog HDLコード

module sync_async_reset (
        input    clock,
        input    reset_n,
        input    data_a,
        input    data_b,
        output   out_a,
        output   out_b
        );
reg     reg1, reg2;
reg     reg3, reg4;
assign  out_a    = reg1;
assign  out_b    = reg2;
assign  rst_n    = reg4;
always @ (posedge clock, negedge reset_n)
begin
    if (!reset_n)
    begin
       reg3     <= 1’b0;
       reg4     <= 1’b0;
    end
    else
    begin
       reg3     <= 1’b1;
       reg4     <= reg3;
    end
end
always @ (posedge clock, negedge rst_n)
begin
    if (!rst_n)
    begin
       reg1     <= 1’b0;
       reg2     <= 1;b0;
    end
    else
    begin
       reg1     <= data_a;
       reg2     <= data_b;
    end
end
endmodule  // sync_async_reset

2つの同期レジスター間のメタスタビリティーの影響を最小限に抑え、MTBFを大きくするには、レジスターをデバイスでできるだけ近くに配置し、配線遅延を最小限に抑える必要があります。可能であれば、レジスターを同じロジック・アレイ・ブロック (LAB) に配置します。入力リセット信号 (reset_n) は、set_false_path コマンドで除外する必要があります。

set_false_path -from [get_ports {reset_n}] -to [all_registers]

set_false_path コマンドを特定の制約で使用し、リセットピンで入力遅延を指定することによって生じる不必要な入力タイミングレポートを除外します。

同期非同期リセットの瞬間的なアサートは、ノイズやラントパルスの影響を受けやすくなります。可能な場合は、非同期リセットをデバウンスし、リセットがデバイスに入る前にフィルタリングを行います。この回路により、同期非同期リセットの長さが少なくとも1つの完全なクロック周期になることを保証します。このリセット長を n クロック周期に延長するには、シンクロナイザー・レジスターの数を n + 1に増やす必要があります。非同期入力リセット (reset_n) をすべてのシンクロナイザー・レジスターの CLRN ピンに接続し、同期非同期リセットの非同期アサートを維持する必要があります。