1:概要

チャタリングとは,スイッチの開閉時に発生するオンとオフの繰り返してしまう現象です.この期間はスイッチの種類によって異なり,たとえばタクトスイッチなどの場合には1[ms]以下,リレーなどの場合には10[ms]以下といわれています.CPU製作ボードにはいくつかのタクトスイッチがあり,1[ms]以下でオンとオフを繰り返す可能性があります.この文書では,およそ1[ms]以下のチャタリングをFPGAで防ぐ回路を作成する方法を説明します.


2:ブロック図(1個の信号用)

下の図がチャタリング防止回路のブロック図です.各端子の役割をその下の表に示します.

ChatteringCanceller

端子名 入力/出力 バス幅 説明
CLK 入力 1 40[MHz]のクロックです.
ORG_SIGNAL 入力 1 チャタリングが起こっている信号です.
DEST_SIGNAL 出力 1 チャタリングがなくなっている信号です.

 


3:回路の概要(1個の信号用)

およそ1[ms]ごとに信号をラッチするということは,およそ1[kHz]の信号で入力信号をラッチすればよいということですね.従って内部には40[MHz]をおよそ1[kHz]に分周する回路を作成します.分周するには2x進カウンタを使うことになります.

問題

40[MHz]をおよそ1.22[kHz](およそ1[kHz])にする分周器を作るとき2x(xは整数)進カウンタを作成することにします.xを求めてください.

1[kHz]の信号の立ち上がりエッジでORG_SIGNALをBUFFER(regの内部信号)としてラッチするとともにBUFFERをDEST_SIGNALとして出力します.


4:内部信号(1個の信号用)

下記の内部信号が必要となります.

名称 reg/wire ビット幅 個数 初期値 備考
BUFFER reg 1 1 1'b0 およそ1[kHz]のクロックが立ち上がったときに,
ORG_SIGNALをラッチするレジスタです.
COUNT reg 15 1 15'b000_0000_0000_0000 32768進カウンタのための計数ようレジスタです.
DEST_SIGNAL reg 1 1 1'b0 ポートをregにしたものです.

 


5:FPGAに作成する回路の構成(1個の信号用)

ここでは,作成する回路の概略を示します.

  • 分周のためのカウンタCOUNTを15ビットのregとして作成します.
  • 入力信号を保持するためのバッファBUFFERをregとして作成します.
  • 出力信号DEST_SIGNALをregとして作成します.
  • CLKが立ち上がりエッジのとき,次のことを行う回路を作成します.
    • COUNTをインクリメントすします.
    • もしCOUNTが15'b000_0000_0000_0000であったら,次のことを行う回路を作成します.
      • ORG_SIGNALをBUFFERとしてラッチ(記憶)します.
      • DEST_SIGNALからBUFFERを出力します.

このようにすることで,1.22[kHz]ごとに入力信号をラッチし,同時に出力します.


6:複数の入力信号

上記の回路では1個の信号のチャタリングを除去することができます.しかしCPUボードには18個のトグルスイッチが付いており,それらすべてのチャタリングを除去するようにした方が良いですよね?そこで複数の信号のチャタリングをとる回路に修正しようと思います.

 


7:ブロック図(複数の信号用)

 

下のブロック図が複数の信号用チャタリング防止回路のブロック図です.各端子の役割をその下の表に示します.

ChatteringCancellers

端子名 入力/出力 バス幅 説明
CLK 入力 1 40[MHz]のクロックです.
ORG_SIGNALS 入力 18 チャタリングが起こっている信号の集まりです.
DEST_SIGNALS 出力 18 チャタリングがなくなっている信号の集まりです.

 

 


8:回路の概要(複数の信号用)

 

基本的な考え方は1個の信号のチャタリングを防ぐ時と同じで,およそ1[kHz](もう少し正確にいうと1.22[kHz])ごとに値をラッチするようにします.違いは,一度に複数の信号をラッチするため,ラッチ用内部信号が複数になることぐらいです.

 


9:内部信号(複数信号用)

下記の内部信号が必要となります.

名称 reg/wire ビット幅 個数 初期値 備考
BUFFERS reg 18 1 18'b00_0000_0000_0000_0000 およそ1[kHz]のクロックが立ち上がったときに,
ORG_SIGNALをラッチするレジスタです.
COUNT reg 15 1 15'b000_0000_0000_0000 32768進カウンタのための計数ようレジスタです.
DEST_SIGNALS reg 18 1 18'b00_0000_0000_0000_0000 ポートをregにしたものです.

10:FPGAに作成する回路の構成(複数の信号用)

ここでは,作成する回路の概略を示します.

  • チャタリングを無くす信号数を定数としてNを18にしておきます.
  • 分周のためのカウンタCOUNTを15ビットのregとして作成します.
  • 入力信号を保持するためのバッファBUFFERSをNビットのregとして作成します.
  • 出力信号DEST_SIGNALSをNビットのregとして作成します.
  • CLKが立ち上がりエッジのとき,次のことを行う回路を作成します.
    • COUNTをインクリメントすします.
    • もしCOUNTが15'b000_0000_0000_0000であったら,次のことを行う回路を作成します.
      • ORG_SIGNALSをBUFFERSとしてラッチ(記憶)します.
      • DEST_SIGNALSからBUFFERSを出力します.

このようにすることで,1.22[kHz]ごとに入力信号をラッチし,同時に出力します.

JSN Teki is designed by JoomlaShine.com