2.3.1.3. 同期非同期リセットの使用
このリセットは非同期でアサートされ、同期してデアサートされます。これはほぼ瞬時に有効になり、速度に対応するデータパスが含まれないようにします。また、回路は同期式でタイミング解析に対応しており、ノイズ耐性があります。
次の例は、同期非同期リセットを実装する方法を示しています。シンクロナイザー・レジスターを同期リセットと同様の方法で使用する必要があります。ただし、非同期リセット入力はシンクロナイザー・レジスターの CLRN ピンに直接ゲーティングされ、発生するリセットが直ちにアサートされます。リセットがデアサートされると、論理「1」がシンクロナイザーを介してクロック入力され、それによってリセットが同期してデアサートします。
同期非同期リセットに対応する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 ピンに接続し、同期非同期リセットの非同期アサートを維持する必要があります。