CPLDのノイズ対策
「結論」
UART受けは2段でのD-FFで入力信号をラッチしてから、ステートマシンで処理すること。
(念のため100pf程度のコンデンサでノイズを取っておくこと)
「現象」
250kbpsのUARTを受けて処理してFIFO経由で別レートのUARTで転送するCPLDを作った。
シミュレーション上は、動作するが実機だとまれに0xFFが出力されるという問題が発生した。
「説明」
メタステーブル状態が発生するのは、もう少しクロックが高い信号のときだと思っていたら
どうやら、入力の信号にノイズが乗っていたため、たまに発生していたらしい。
メタステーブル状態になると、他のフリップフロップの信号も不安定になり'0'で初期化している信号も初期化が無視される。今回のケースでは 0x00で初期化している8bitラッチが0xFFになって、FIFOに渡っていたと想像される。0xFFを代入するVHDLは書いていないので、近辺の信号が誤動作を受けるらしい。
UART受けは2段でのD-FFで入力信号をラッチしてから、ステートマシンで処理すること。
(念のため100pf程度のコンデンサでノイズを取っておくこと)
「現象」
250kbpsのUARTを受けて処理してFIFO経由で別レートのUARTで転送するCPLDを作った。
シミュレーション上は、動作するが実機だとまれに0xFFが出力されるという問題が発生した。
「説明」
メタステーブル状態が発生するのは、もう少しクロックが高い信号のときだと思っていたら
どうやら、入力の信号にノイズが乗っていたため、たまに発生していたらしい。
メタステーブル状態になると、他のフリップフロップの信号も不安定になり'0'で初期化している信号も初期化が無視される。今回のケースでは 0x00で初期化している8bitラッチが0xFFになって、FIFOに渡っていたと想像される。0xFFを代入するVHDLは書いていないので、近辺の信号が誤動作を受けるらしい。

0 Comments:
Post a Comment
<< Home