同期リセットと非同期リセットの違い:タイミング・クロック・解除の注意を比較
どちらもフリップフロップを決まった初期値にするための仕組みですが、リセットが効くタイミングが違います。同期リセットは、リセットの信号をほかのデータと同じようにクロックのエッジで取り込みます。非同期リセットは、フリップフロップのリセット端子を直接使い、クロックに関係なくすぐに効かせます。実際の設計では、かけるときは非同期ですぐに効かせ、解除だけをクロックに同期させる方式がよく使われます。
| 項目 | 同期リセット | 非同期リセット |
|---|---|---|
| 効くタイミング | リセットが有効な状態で、クロックのエッジが来たとき | リセットが有効になった瞬間。クロックを待たない |
| クロックが必要か | 必要。クロックが止まっているとリセットできない | 不要。クロックが動き出す前や止まっているときも効く |
| 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クロック周期以上、有効に保つ必要がある | 短いパルスでも効く |
| タイミング解析 | ふつうのデータ入力として、セットアップとホールドで解析できる | 解除のタイミング(リカバリ時間とリムーバル時間)を別に確認する |
| リセット解除時の注意 | クロックに同期しているので、同じクロックの範囲の中では問題が起きにくい | 解除がクロックのエッジに近いと、フリップフロップごとに解除のサイクルがずれたり、メタステーブルになったりする。リセット同期化回路で解除をクロックにそろえる |
| 向いている回路 | クロックが常に動いている回路、リセットの信号にノイズが乗りやすい回路 | 電源を入れてすぐ初期化したい回路、クロックが止まることのある回路 |
数値は代表的な目安で、世代や製品によって異なります。