新年あけましておめでとうございます。第一技術部の赤谷です。
昨年10月の「パーシャルパワーダウン時に重要なIoff機能」以来のブログ投稿となります。
本年もエンジニアの皆様にとってのお役立ち情報をブログで配信していこうと思っておりますので、どうぞよろしくお願いします。
新年一回目のブログでは、FPGAなどデジタル回路設計で注意が必要である非同期入力信号の取り扱いについて説明します。
デジタル回路には、クロックに同期した回路(同期回路)とそうではない回路(非同期回路)があります。そして同期回路で使用されるフリップフロップ(FF)は、安定動作の要件としてクロックと入力信号の間にセットアップタイム(tSU)とホールドタイム(tH)などのタイミング規定が設けられています。
フリップフロップの入力タイミング
上図のとおりフリップフロップに入力されるデータ信号は、クロックの立ち上がりのタイミングでセットアップタイム(tSU)とホールドタイム(tH)で規定される期間以上に安定している必要があります。
この規定を守れない場合、フリップフロップの出力信号は一定期間発振した状態(メタステーブル)になる可能性があります。
メタステーブル状態
この発振が後段の回路に伝搬すると、論理回路が誤動作する要因となります。
しかしながら、非同期クロック間のデータ転送(例えば外部信号の取り込み)では、データのタイミングを保証することはできず、メタステーブルが発生する可能性があります。
このため、非同期入力についてはメタステーブルが発生しても、回路動作に影響を与えないように対策をしておく必要があります。
この対策としてフリップフロップをもう一段配置します。メタステーブルは一定期間で収束しますので、次のクロックの立ち上がりまでには安定します。よって、二段目のフリップフロップの動作には影響を与えません。
メタステーブル対策回路
メタステーブル対策回路のタイミング図
ただし、システムクロックが早い場合は、メタステーブルが収束しないまま、2段目のフリップフロップにも伝搬する可能性があります。このような場合は、もう一段フリップフロップを追加しておく方が安全です。どの程度でメタステーブルが収束するかについては、正確なデータはありませんが、だいたい10~12 ns以内には収束するようですので、システムクロックがおよそ80 MHz以上の場合は、もう一段フリップフロップを入れておく方が無難です。
「じゃあ最初から多めにフリップフロップを入れておけば良いじゃないか」と思われるかも知れませんが、フリップフロップを一段追加毎にクロック1サイクル分の遅延(レイテンシー)が発生しますので、求められる処理速度や回路のリソースに応じてフリップフロップの段数は最適化する必要があります。
このメタステーブルに起因する問題は、多くのエンジニアが陥るもので、その不具合については発生頻度が低く、原因調査など非常に苦労する厄介なものです。よって、設計段階でメタステーブル対策をきっちり行っておくことが大切です。
当社はこのような論理回路設計の基礎をきっちり抑えたエンジニアが揃っておりますので、FPGAなどの動作不具合でお困りの際は、是非お問い合わせ下さい。
【関連リンク】
- 電気設計受託サービス
- FPGA設計受託サービス
- サブスクエンジニアリングサービス(定額エンジニアリングサービス)
- マイコンなのかFPGAなのか ~システム設計のポイント~
- FPGAとは? ~FPGAってどんなもの? どこに使われているの?~
- そのお困りごとはFPGAで解決できるかもしれません
- 人材採用(インターンシップ・新卒・中途)
WTIメールマガジンの配信(無料)
WTIエンジニアが携わる技術内容や日々の業務に関わる情報などを毎週お届けしているブログ記事は、メールマガジンでも購読できます。ブログのサンプル記事はこちら
WTIメールマガジンの登録・メールアドレス変更・配信停止はこちら
WTIの技術、設備、設計/開発会社の使い方、採用関連など、幅広い内容を動画で解説しています。