改訂版EDA用語辞典とは・著者一覧

 非同期検証(clock domain crossing check)とは,異なるクロックで動く回路の間でデータを転送する際(以下,非同期データ転送)に,誤動作などの問題が起きるかどうかをチェックすることを言う。この検証には,非同期検証ツール(clock domain crossing checker)と呼ぶEDAツールを使うのが一般的である。

フリップフロップの出力が発振

 位相関係の保障がないクロック領域間で,非同期にデータ転送すると,主に以下の三つの問題が発生する。

(1)メタ・ステーブル

 フリップフロップ(FF)に入るクロックとデータが同時に変化するなどして,FFの出力が発振状態になる場合がある。これを「メタ・ステーブル」状態と呼ぶ(図1)。この状態では,FFの後段の回路が誤動作する恐れがある。メタ・ステーブルの状態は一定時間後に収束するが、その継続時間は使う半導体プロセスなどで異なる。

【図1 メタ・ステーブルによる発振】CLKが「Low」から「High」に変化する瞬間(つまりクロックの立ち上がりエッジ)にDが変化すると,左側のインバータ・ループが発振状態になり,それが結果としてフリップフロップの出力に伝播する。出典はOKIセミコンダクタ。
【図1 メタ・ステーブルによる発振】CLKが「Low」から「High」に変化する瞬間(つまりクロックの立ち上がりエッジ)にDが変化すると,左側のインバータ・ループが発振状態になり,それが結果としてフリップフロップの出力に伝播する。出典はOKIセミコンダクタ。 (画像のクリックで拡大)

(2)リコンバージェンスによる問題

 複数のパスで非同期のデータ転送をした後で,それらの値の論理演算を実行した(リコンバージェンスした)場合,転送パス間の遅延差によって,グリッジやデータのずれが生じる場合がある(図2)。このため,遅延を大まかに考慮したRTL(register transfer level)シミュレーションでは正常に動作していたのに,レイアウト後のシミュレーションや実デバイスで誤動作を起こすことがある。

【図2 リコンバージェンスによる誤動作】非同期転送間パスはタイミング保障されないため,おのおのの遅延時間が一定ではない。それが収斂(しゅうれん)する場合に,意図しない動作が発生する。出典はOKIセミコンダクタ。
【図2 リコンバージェンスによる誤動作】非同期転送間パスはタイミング保障されないため,おのおのの遅延時間が一定ではない。それが収斂(しゅうれん)する場合に,意図しない動作が発生する。出典はOKIセミコンダクタ。 (画像のクリックで拡大)

(3)データの取りこぼし

 非同期データ転送で,送信側FFのクロック周波数が受信側FFのクロック周波数より速い場合,必要なデータを取り込む前に送信側FFの値が変化してしまう。これで,受信側FFでデータの取りこぼしが起きる(図3)。

【図3 データの取りこぼしによる誤動作】送信側フリップフロップの周波数が受信側に比べて高い場合,受信が完了する前にデータが変化してしまうと取りこぼしが発生する。出典はOKIセミコンダクタ。
【図3 データの取りこぼしによる誤動作】送信側フリップフロップの周波数が受信側に比べて高い場合,受信が完了する前にデータが変化してしまうと取りこぼしが発生する。出典はOKIセミコンダクタ。 (画像のクリックで拡大)

同期化回路を挿入

 これらの問題の発生を防ぐには,非同期データ転送のパスに「同期化回路」を挿入する。よく使われる同期化回路の例を以下に挙げる(図4)。

(a)D-FFチェーン(1ビット対応)
受信側FFを多段のシフト・レジスタ構成にする。

(b)マルチプレクサ(多ビット対応)
受信側FFでマルチプレクサを使ったフィードバック回路を構成し,データが安定している期間のみデータを取り込む。

(c)ハンドシェーク
送信側と受信側でハンドシェーク動作を実施してから,データを転送する。

(d)FIFO(first-in first out)
FIFOメモリー経由して,データを転送する。

非同期間のデータ転送をチェック

 非同期データ転送に問題が起きるかどうかをチェックするのが,非同期検証ツールである。具体的には,同期化回路が正しい場所に挿入されていて,かつ期待通りに動作するかを見る。これで,どのようなクロックの位相関係であっても,後段の回路に影響を与えないかを確認できる。

 非同期検証ツールを使う際には,設計者は回路情報(RTLやネットリスト)とクロックの情報(クロック・ツリーの起点や周期等)を入力する。ツールは,非同期クロック領域間のデータ転送パスを自動的に抽出し,各パスに対して検証を実施する。

 その検証内容は,「構造的チェック」と「機能的チェック」に分かれる。前者では,検証対象箇所の回路構造を見ながら,あらかじめ設定したルールに基づいて同期化回路が挿入されているかをチェックする。

 一方,後者の機能的チェックでは,データの取りこぼしが発生しないかを検証する。この検証には,「フォーマル検証」技術を使う。フォーマル検証に使うプロパティは,ツールの内部で自動的に生成される。

 ただし,現在のフォーマル検証技術では,あまり大規模な回路を扱えない。そこで論理シミュレーションを併用することもある。その際には,クロック生成にランダム性を持たせてクロック位相を変動させながら,論理シミュレーションする手法が有効である。