34 / 37 · 概念
クロック領域の境界とメタステーブル
2 段同期化回路の適用範囲を理解し、単一ビット・短パルス・多ビット転送を区別します。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
別クロックの入力にはエッジ間隔の保証がありません
セットアップセットアップ 取り込みクロックエッジの前に、入力データが安定していなければならない最小時間です。違反すると記憶結果を保証できません。 詳しく見る・ホールドホールド時間 取り込みクロックエッジの後も、入力データが安定していなければならない最小時間です。通常の値の保持動作とは文脈で区別してください。 詳しく見るは、受信クロックのエッジ付近でデータが十分安定していることを求めます。ボタンや独立したクロック領域の出力は受信エッジとの関係が任意なので、常に保証するのは困難です。
その結果、フリップフロップフリップフロップ 指定されたクロックエッジで入力を記憶し、次のエッジまで保持する素子です。入力はセットアップ・ホールド条件を満たす必要があります。 詳しく見る内部がしばらく 0 または 1 に安定しない メタステーブルが生じ得ます。通常の 0/1 RTL シミュレーションには、このアナログ現象がそのまま表れません。波形がきれいでも CDC が安全とは限りません。
2 段同期化回路は十分長く保持される単一ビットに使います
module level_synchronizer (
input logic clk_dst,
input logic rst_dst,
input logic async_level,
output logic synced_level
);
logic first_stage;
always_ff @(posedge clk_dst) begin
if (rst_dst) begin
first_stage <= 1'b0;
synced_level <= 1'b0;
end else begin
first_stage <= async_level;
synced_level <= first_stage;
end
end
endmodule最初の FF が不安定になっても、次の FF が読むまでに安定する時間を与える構造です。機能回路へは最初の段を直接分岐せず、最終段の出力を使います。上の reset は受信側クロックに同期すると仮定しています。
実装では同期化回路同期化回路 別のタイミング領域から来た信号を、受信クロックで扱えるようにする回路です。単一ビット用の多段フリップフロップを、多ビットデータにそのまま適用してはいけません。の属性指定、段間の短い配線、STA・CDC 検査など、ツールと素子に応じた扱いが必要です。レジスタレジスタ 複数ビットの状態を記憶する回路です。このコースの同期式レジスタは、クロックエッジで定められた入力を記憶します。 詳しく見るが二つあるだけで、配置と経路条件まで保証されるわけではありません。
非同期入力は第 1 段へ入り、機能回路は最終段だけを使います。段間の時間は安定する機会を与えますが、アナログのメタステーブルメタステーブル 記憶素子が一時的に 0 または 1 に安定できないアナログ状態です。同期化回路は伝播する確率を低減しますが、発生の可能性をゼロにはしません。が必ず解消する保証ではありません。
- 非同期レベル: 受信クロックと位相関係なし
- 第 1 段 FF(meta): メタステーブルになる可能性
- 第 2 段 FF(synced): 次の受信側エッジで取込み
- 機能回路: 最終段だけを使う
故障確率を下げますが、ゼロにはしません
単純化したモデルの一つでは、平均故障間隔 MTBF は次の傾向を持ちます。
は安定に使える時間、 は素子特性、 は受信クロック周波数、 は非同期入力の遷移頻度です。実計算には素子ごとの定数が必要です。この式だけで任意の回路に「何年間安全」と数値を付けることはできません。
異なる問題に同じ回路を使わない
| 転送する情報 | 単一ビットの 2 段同期化だけで十分か | 検討する構造 |
|---|---|---|
| 十分長く保持するレベル | 確率・遅延要求を満たせば使用可能 | 受信側同期化回路 |
| 受信周期より短いパルス | パルス自体を見逃し得る | パルス伸長、トグル、ハンドシェイク |
| 同時に意味を持つ複数ビット | 各ビットが異なる時点の値になり得る | 安定バスとハンドシェイク、非同期 FIFO |
| 機械式ボタン | 接点の繰返しバウンスは別問題 | 同期化後にデバウンス |
例えば 4 ビット値が 0111 から 1000 へ変わるとき、各ビットを独立に同期化すると、送信元には存在しなかった組合せを一時的に観測し得ます。バスの一貫性を保つには、データ全体と転送完了の関係を設計する必要があります。
参考資料:MIT OpenCourseWare — Synchronization, Metastability and Arbitration
自分で考えてみましょう
受信クロックは 50 MHz、入力パルス幅は 5 ns です。2 段同期化回路があれば全パルスを検出すると言えますか。ボタンのチャタリングも除去できますか。
解説を見る
50 MHz の周期は 20 ns です。5 ns パルスは受信エッジ間で現れて消え、最初の段から見逃される場合があります。同期化の段数を増やすだけではパルスを保存できません。パルス伸長やハンドシェイクの取り決めが必要で、ボタンのチャタリングには別途デバウンスが必要です。