同期リセットと非同期リセットの違い:タイミング・クロック・解除の注意を比較

どちらもフリップフロップを決まった初期値にするための仕組みですが、リセットが効くタイミングが違います。同期リセットは、リセットの信号をほかのデータと同じようにクロックのエッジで取り込みます。非同期リセットは、フリップフロップのリセット端子を直接使い、クロックに関係なくすぐに効かせます。実際の設計では、かけるときは非同期ですぐに効かせ、解除だけをクロックに同期させる方式がよく使われます。

項目同期リセット非同期リセット
効くタイミングリセットが有効な状態で、クロックのエッジが来たときリセットが有効になった瞬間。クロックを待たない
クロックが必要か必要。クロックが止まっているとリセットできない不要。クロックが動き出す前や止まっているときも効く
Verilogの書き方always @(posedge clk) if (!rst_n) q <= 0; else q <= d;always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else q <= d;
回路の作りデータ入力の前に、リセット用の論理を入れるリセット端子付きのフリップフロップを使う
面積とデータ経路データ経路にゲートが増え、その分だけ遅延と面積が増えることがあるセルはリセット端子の分だけ大きいが、データ経路に論理は増えない
グリッチへの強さ強い。エッジの瞬間以外のグリッチは取り込まれない弱い。リセットの線のグリッチで、誤ってリセットされることがある
リセットのパルス幅少なくとも1クロック周期以上、有効に保つ必要がある短いパルスでも効く
タイミング解析ふつうのデータ入力として、セットアップとホールドで解析できる解除のタイミング(リカバリ時間とリムーバル時間)を別に確認する
リセット解除時の注意クロックに同期しているので、同じクロックの範囲の中では問題が起きにくい解除がクロックのエッジに近いと、フリップフロップごとに解除のサイクルがずれたり、メタステーブルになったりする。リセット同期化回路で解除をクロックにそろえる
向いている回路クロックが常に動いている回路、リセットの信号にノイズが乗りやすい回路電源を入れてすぐ初期化したい回路、クロックが止まることのある回路

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

同期リセット
クロックが常に動いていて、リセットの信号にグリッチが乗る恐れがあるとき。リセットをふつうのデータ経路と同じようにタイミング解析したいとき。
非同期リセット
クロックが動く前や止まっているときにも、すぐに初期化したいとき。出力を早く安全な状態にしたい回路など。
組み合わせ
非同期でかけて、同期で解除する方式(リセット同期化回路)が広く使われます。かけるときはすぐに効き、解除は2段のフリップフロップでクロックのエッジにそろいます。

よくある質問

非同期リセットの解除を、クロックに同期させるのはなぜですか?

解除がクロックのエッジの近くで起こると、リカバリ時間やリムーバル時間を守れず、あるフリップフロップは今のサイクルで、別のものは次のサイクルで動き始めるといったずれや、メタステーブルが起こるからです。状態機械が不正な状態から始まる原因になるので、2段のフリップフロップで解除をクロックにそろえてから配ります。

同期リセットで、クロックが止まっているとどうなりますか?

リセットの信号を入れても、フリップフロップは初期化されません。電源を入れた直後など、クロックが安定する前から安全な状態が必要な回路では、非同期リセットを使います。

すべてのフリップフロップにリセットが必要ですか?

必要ではありません。データの通り道のように、使う前に必ず書き込まれるレジスタでは、リセットを省いて面積や配線を減らすことがあります。状態機械や制御の信号など、初期値が動作に影響するものはリセットします。

理解度チェック

同期リセットと非同期リセットの違いとして正しいものはどれか。

  1. A同期リセットはクロックに関係なく効き、非同期リセットはクロックのエッジでだけ効く
  2. B同期リセットはクロックのエッジでだけ効き、非同期リセットはクロックに関係なくすぐに効く
  3. Cどちらもまったく同じ動作で、名前が違うだけである
答えと解説を見る

正解:B. 同期リセットはクロックのエッジでだけ効き、非同期リセットはクロックに関係なくすぐに効く

同期リセットは、リセットの信号をほかの入力と同じようにクロックのエッジで取り込むので、タイミングの解析がしやすい一方、クロックが動いていないとリセットできません。非同期リセットはフリップフロップのリセット端子を直接使うので、クロックがなくてもすぐにリセットできますが、解除の瞬間がクロックのエッジに近いと、フリップフロップごとに解除のタイミングがばらつく恐れがあります。

非同期リセットを使う回路で、リセットの解除(0から1への変化)を2段のフリップフロップでクロックに同期させてから各回路に配る理由として正しいものはどれか。

  1. Aリセットをかけるのを、2クロック分遅らせて安全にするため
  2. Bリセットの信号を2倍の速さにするため
  3. C解除がクロックのエッジに近いと、フリップフロップごとに解除されるサイクルがずれたり不安定になったりするので、解除をクロックにそろえるため
答えと解説を見る

正解:C. 解除がクロックのエッジに近いと、フリップフロップごとに解除されるサイクルがずれたり不安定になったりするので、解除をクロックにそろえるため

非同期リセットの解除がクロックのエッジの直前や直後に起こると、解除のための時間の条件を満たせず、あるフリップフロップは今のサイクルで、別のものは次のサイクルで動き始める、といったずれが生じます。状態機械が不正な状態から始まる原因になります。リセット同期化回路は、リセットをかけるときはすぐに効かせ、解除だけを2段のフリップフロップでクロックにそろえて全体に配ります。

シミュレーションで、リセットのないレジスタの値が最初Xになっていた。実際のチップではどうなると考えられるか。

  1. A電源を入れたときに0か1のどちらかになるが、どちらになるかは決まっていない
  2. B実際のチップでも、0と1の中間の電圧のまま止まる
  3. C実際のチップでは必ず0になる
答えと解説を見る

正解:A. 電源を入れたときに0か1のどちらかになるが、どちらになるかは決まっていない

実際のフリップフロップは、電源を入れると0か1のどちらかの安定した状態に落ち着きますが、どちらになるかはチップや場所、温度などで変わり、決まっていません。シミュレーションのXは「どちらか分からない」ことを表しています。その値が回路の動作に影響するなら、リセットで決まった値にする必要があります。データの通り道のように、使う前に必ず書き込まれるレジスタではリセットを省くこともあります。

  1. 上の記述のリセットの種類と動作として正しいものはどれか。
  2. 非同期の信号をフリップフロップで受けたときに、セットアップ時間やホールド時間を満たせず、出力が一時的に0とも1とも定まらなくなる状態を何と呼ぶか。

ハードウェア記述言語と検証の練習問題へ

関連する用語の解説

同期リセット
リセットの信号をクロックのエッジで取り込んでフリップフロップを初期化するリセット。タイミングの解析がしやすいが、クロックが止まっているとかからない。
非同期リセット
クロックに関係なく、リセットの信号が有効になるとすぐにフリップフロップを初期化するリセット。解除はクロックに同期させるのが基本。
リセット同期化回路
非同期リセットをかけるときはすぐに効かせ、解除だけを2段のフリップフロップでクロックにそろえてから回路全体に配る回路。
メタステーブル
フリップフロップでセットアップ時間やホールド時間が守られないとき、出力がしばらく0とも1とも定まらない状態。非同期信号は2段のフリップフロップで同期化して対策する。
グリッチ
信号の経路ごとの遅延の差などによって、出力に一瞬だけ現れる不要なパルス。組み合わせ回路ではハザードとも呼び、DAコンバータではコードの切り替わりで生じる。

関連する比較