FPGA講座⑥ メタステーブルとチャタリング

メタステーブル

 フリップフロップにデータを取り込むときに、セットアップ時間やホールド時間を遵守しなければいけません。ただし、入力データがクロックに同期していない非同期データの場合、セットアップ時間やホールド時間を遵守できないことがあります。この場合、図1の左側のタイミングチャートのようにフリップフロップの出力が不安定になります。これがメタステーブルです。このメタステーブルは時間が経過すれば安定しますが、クロックと出力Qの伝播時間の規定よりも長くなります。このメタステーブルが発生すると、このフリップフロップの後段のロジックに不安定な中間電位が伝搬するため、悪影響を与えてしまいます。

図1 メタステーブルの発生原因(左)と対策回路(右)

 このメタステーブルの対策方法が、図1の右側に示されています。先程のフリップフロップの後段にフリップフロップを1個追加します。1段目のフリップフロップが非同期データを受信したときにセットアップエラーやホールドエラーが発生した場合、1段目のフリップフロップの出力ではメタステーブルが発生しますが、2段目のフリップフロップではメタステーブルが解消されます。そのため、非同期データを入力するときは、2段以上のフリップフロップで受信する必要があります。

チャタリング

 図2の左側に示されたスイッチをオンまたはオフすると、スイッチの接点の振動などにより、この図のように非常に短い期間においてオンとオフを繰り返す現象が発生します。これをチャタリングといいます。このチャタリングは、数msから30msくらいの期間で発生します。このチャタリングが発生すると、入力回路の閾値を何度も往復することになります。そのため、この信号を入力するFPGAは、スイッチが何度もオンとオフを繰り返しているように見えます。このチャタリングを放置すると、FPGA内部で誤動作を誘発する懸念があります。このチャタリングの対策回路として、図2の右側に示された回路図のように入力データを4段程度のバッファに溜め込んで、全てのデータが”0”または”1”のときに入力データを有効にする方法があります。

図2 チャタリングの発生原因(左)と対策回路(右)

 チャタリングの対策回路の動作を説明します。先程のスイッチ回路で、スイッチがオンするときの入力データは”0”になります。スイッチをオンした直後はチャタリングが発生しますが、チャタリングが無くなって入力データが4クロック分”0”が続いたときにデータを有効にします。スイッチがオフするときは、逆に入力データが4クロック分”1”が続いたときにデータを有効にします。このように、スイッチ回路などチャタリングが発生する入力データには対策回路が必要です。