このコラムでは「意外と知られていないけど、知っていると差がつく FPGA の技術情報」をご紹介します。
FPGA初心者の方からベテランの方まで、幅広くご活用いただける内容ですので、ぜひ最後までお付き合いください。
【第 4 回】 ASICと比べてFPGAで多い不具合 - 非同期クロック
ASICと比べてFPGAで多い不具合の1つが、非同期クロックです。
デバイスとしてFPGA がASICと比べて非同期に弱いことはなく、FPGA開発で非同期検証をしている人が少ないのが原因です。
実機検証しているので関係ない!と思っている方、安心しないでください!実機検証で非同期検証はできません!
ちなみに、ASIC開発では非同期クロック検証は常識となっています。
非同期クロックエラーとは
非同期クロックエラーとは、異なるクロック間でデータのやり取りを行う際に起こるレーシングやメタステーブルによる不具合です。
実機にて数時間、数日、数週間、あるいは数十年に1回誤動作し、タイミングシミュレーションや実機検証でも再現性はありません。
図 1.非同期クロックの回路例
図 2.後段レジスタのメタステーブル
図1のように、周波数の異なるクロック間でデータのやり取りを行うと、クロックとデータのタイミング差によって、ある時は前サイクルのデータを取り込み、別の時は次サイクルのデータを取り込むことがあります。
これがバスなら、あるビットだけが前サイクルのデータ、他ビットが次サイクルのデータになります。ちなみに、同じクロックならセットアップとホールドタイミングを検証するので問題ありません。
そして、後段レジスタのセットアップやホールドタイム中にクロックが入ると、メタステーブルになることがあります。メタステーブルは数サイクルの間で不定状態(“L”でも“H”でもない中間電位)になるので非常に問題です。実機でも再現性がありません。
クロックとデータを前後にずらして検証(Clock:Min条件、Data:Max条件/Clock:Max条件、Data:Min条件)する方法がありますが、この方法でもメタステーブルは検証できないので厄介です。
メタステーブルの詳細は下記を参照
非同期クロックエラーが厄介な理由
・「論理シミュレーション」で検証できません!
・「タイミング検証」で検証できません!
・「実機検証」で見つかる場合があります。ですが、再現できません!
非同期クロックエラーを解析するには、回路図を追っていくか、専用ツール(CDC: Clock Domain Crossing)ツールを使う必要があります。
非同期クロックエラーと間違えやすい「ソフトエラー」
非同期クロックエラーが起きているのに原因を把握できないので、ソフトエラーと勘違いされる方がいらっしゃいます。
もしソフトエラーだった時は、FPGAをリコンフィギュレーション(再度コンフィギュレーション)しなければ「エラーの再現が可能」です。
ソフトエラーは回路の論理を変えますが、メタステーブルは論理を変えません。ソフトエラーが疑わしい時は、同じテストベンチを実行して再現できるかを確認してください。
CDC(Clock Domain Crossing)ツールの選定
非同期クロックを検証するにはCDCツールを使うのがお勧めです。
CDCツール自体の使い方は簡単ですが、「疑似エラーの確認」と「対策方法の検討」はとても大変ですので、CDCツールを選ぶには以下の点にご注意ください。
-
設計上流のRTLで検証できる事!
論理合成後からの検証は工数がかかるので、RTLで検証できる必要があります。
-
レポートが分かりやすいこと!(疑似エラーがたくさん出るので)
数万か所も疑似エラーが出ると、重要なエラーを見落とします。
疑似エラーはマニュアルで回路を確認する必要があるので、分かりやすいレポートは必須です。
-
対策が必要な回路かどうかを判断する機能があること!
エラーが起きても論理に影響しなければ問題はありません。
問題が無いことをフォーマル検証や論理シミュレーションで検証できる機能があれば便利です。
CDC(Clock Domain Crossing)CDC 無償評価キャンペーン
アルティマでは、CDCを使ってお客様のデザインを “無償” で評価するキャンペーンを実施中です。
しつこい売り込みは致しませんので、CDCに興味がある方はお気軽にご依頼ください。
知って差がつく!FPGA ここだけの話シリーズ
消費電力編
- 【第 1 回】 低消費化のための3つの心得
- 【第 2 回】 クロック・ゲーティング(ゲーテッド・クロック)は効果ある?
- 【第 3 回】 これってリークパワー? いいえ、DCパワーです。
- 【第 4 回】 高精度パワーシミュレータが使われなかった理由
- 【第 5 回】 これが究極の低消費電力手法?
- 【第 6 回】 負荷容量(C)を低減する方法
- 【第 7 回】 信号振幅(Vs)と電源電圧(VCC)を低減する方法
- 【第 8 回】 動作周波数(F)とトグル率(N)を低減する方法
- 【第 9 回】 ショートサーキット電力を削減する方法
- 【第 10 回】 DC電力とリーク電力を低減する方法