複数のクロックドメインを利用するSoCには、設計者が見落としがちな注意点がある。それに気付かずにチップを作ってしまうと、なぜ問題が起きているのかを究明することすら難しくなる。そうした落とし穴の存在を認識しつつ、適切な設計手法とEDAツールを適用することにより、チップの再試作を回避し、市場投入までの時間のロスを防ぐことが可能になる。
最新のSoC(system on chip)には何種類ものクロックが存在し、その多くは非同期である。こうしたSoCでは、異なるクロックドメインをまたぐ(CDC:clock domain crossing)部分で、機能的障害を引き起こす検出困難な問題が起きる可能性がある。メタスタビリティ(準安定状態)や一貫性などに関する問題は、シミュレーションや静的タイミング解析では検出されないことが多い。そのため、チップにバグとして問題が残ってしまう。
残念ながら、このようなクリティカルなCDCの諸問題について適切に論じた文献はほとんどない。そのため、設計者は、大きな誤ちを犯して初めてこの問題について学習するということになる。
CDCに関するクリティカルな問題はいくつかある。イネーブル信号をベースとした同期の仕組みにおけるデータ/イネーブル信号間の不適切なシーケンス、グリッチ、データ信号の一貫性に関する不適切なシーケンスといったことである。
フリップフロップの出力は、データ/リセット信号のセットアップ/ホールド時間の制約に違反するとメタスタビリティの状態に陥ることがある。この状態は、データの送り側と、データを受け取るフリップフロップが非同期のクロックドメインに存在する場合に発生する。このようなメタスタビリティ状態を避けて下流の論理回路にきれいな信号を供給するために、シンクロナイザが使われる。シンクロナイザは、フリップフロップを利用した簡単なものでよい。
クロックドメインをまたいでデータを転送するときは、まずデータがセットアップされ、次にデータを捕捉(キャプチャ)するために、転送先のドメインと同期をとるための制御信号が伝送される。クロックドメインをまたぐこのデータ転送手法は、よく使われる実証済みの技術である。ただし、注意すべき落とし穴がある。
この技術では、イネーブル信号をアサート(有効に)する際にデータが安定していなければならない。セットアップしたいデータと、イネーブル信号をアサートするタイミングのマージンが小さ過ぎると、データ転送に失敗する可能性がある(図1)。これを防ぐ方法は、データのセットアップ時にフルハンドシェイクを行うことである。つまり、転送先ドメインに要求をアサートして同期をとり、次のデータのロードが生じるようにACK(acknowledge)を適切にアサートする。これによって、(数サイクル分の遅延が生じるかもしれないが)機能的な障害は回避できる。
Copyright © ITmedia, Inc. All Rights Reserved.