組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:チャタリング除去(デバウンス)回路

設計内容分類FPGA

実現したい仕様・課題

押しボタンやトグルスイッチなどの機械式接点は、切り替わりの際に接点が微細に振動し、数ミリ秒にわたってON/OFFを繰り返すチャタリングが発生します。この信号をそのまま使うと、1回の操作が複数回の入力として誤検出されます。スイッチ入力を1操作=1イベントとして確実に扱いたいというのが課題です。

設計のポイント

チャタリング除去の基本は、「信号が一定時間安定して同じ値を保った場合にのみ、内部状態を更新する」ことです。実装としては、まず非同期のスイッチ入力を2段フリップフロップで同期化し、その後、カウンタで安定時間を計測します。同期化した入力が現在の確定値と異なっている間はカウンタを進め、規定時間(一般に数ms〜20ms程度、スイッチの特性に合わせて設定)連続して異なる値が続いたら確定値を反転させ、途中で元に戻ればカウンタをクリアします。これにより、ミリ秒オーダーの接点振動は無視され、操作1回につき1回だけ出力が変化します。安定時間のカウント値はparameterで定義し、クロック周波数から換算した値を設定しておくと、クロック変更時にも調整が容易です。確定後の信号に対してエッジ検出を組み合わせれば、「ボタンが押された瞬間」を1クロック幅のパルスとして後段へ渡せます。複数のスイッチを扱う場合はgenerate文でデバウンス回路を並べると、記述の重複なく展開できます。

【コード例】
parameter STABLE = 20’d1000000; // 安定判定時間(例: 50MHzで20ms)
reg ff1, ff2, sw_stable;
reg [19:0] cnt;
always @(posedge clk) begin
ff1 <= sw_in; ff2 <= ff1; // 同期化
if (ff2 == sw_stable) cnt <= 20’d0; // 変化なし→リセット
else if (cnt == STABLE) begin // 規定時間継続→確定
sw_stable <= ff2; cnt <= 20’d0;
end else cnt <= cnt + 20’d1;
end

verilog記述のポイント:チャタリング除去(デバウンス)回路 | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ