平均化のデジタル回路設計

平均化のデジタル回路設計

 たとえば、温度や湿度をセンサーで取り込むと、サンプリングにばらつきが生じてデータが扱いにくい事が良くあります。エクセルにデータを取り込んでいれば平均化する。そんな値をハードウェアでリアルタイムに計算したい事があります。

 前回までの本ブログにて、Qフォーマットによる計算を解説しましたが、あえてQフォーマットを使わない方法で平均の回路設計をしてみたいと思います。

 平均の計算方法は算数の教科書に載っていますので紹介を省きますが、4回の平均を得ようとすると、温度計測を4回して、4で割る。という事になります。

 しかし、この方法は分子の数が元のビット数を上回る事になります。単純に4回加算するのですから、4倍程度になります。つまり、元が8bitデータであれば、2bit大きくなって10bit無いと4倍の数は収まらない事になります。

 よって、計算式を上図のように変形して、予め1/4にした数を4回加算するようにします。すると、8bitを1/4した時にすでに6bitになり、それを4倍するので、8bitに戻る。という訳です。そうすることにより、bit数を抑えられ、FPGAのリソース節約につながります。この辺りは数学の式の入れ替えです。

 デジタル回路において、2のべき乗は計算がしやすい数です。10進数で考えてみるとわかりやすいのですが、10進数で割り算、掛け算がやりやすいのは1/10倍や1/100倍、10倍、100倍といった10のべき乗ではないでしょうか。小数点をずらすだけの計算だという事は理解できると思います。同じように2進数の場合にも2のべき乗はビット数をずらすだけです。2で割る時には小さくなる方にビットをずらし、2を掛ける時には大きくなる方にビットをずらします。

 デジタル回路では上図のようにビットシフトで2のべき乗を計算できます。ビットシフトはデジタル回路的に非常に高速に動作しますので演算回路として積極的に使うようにします。

 ただし、予め1/4にしますので、その都度誤差が発生します。たとえば、1/4で割り切れない数。10進数で”3″の場合などは0に丸めます。このような場合には、全部加算を先にする必要があります。

 このように4回の平均を取るにあったって計算する1/4の回路はビットシフトを2回行うようにします。(実際には一回の演算で2ビットシフトさせます)

 次に平均化の計算頻度ですが、4回の平均をとるには4回分のデータが必要なので、普通はデータは4回に1回計算することになります。この方法だと、データが1/4個に減ってしまいます。データの使い方によってはこの方法でも良いですが、データの数を減らしたくない場合もあります。その時には、最新の4回の平均を取るという方法が考えられます。

 このような最新4回の平均値を計算するハードウェアをブロック図で示すと次のようになります。

 DFFが横に4個連なっていますので、この部分はシフトレジスタと言えます。各シフトレジスタからのデータを1/4しておき、すべてを加算する。という回路になります。

 これで平均化の回路設計ができました。じつは、この回路はデジタル回路の信号処理回路で非常に重要な意味を持っています。

 上の平均化回路のブロック図の形はFIRフィルタの形と全く同じなのです。FIRフィルタの設計はデジタル回路設計の中でも上級者の部類に入りますが、少しずつステップアップすることでこんな設計もできてしまいます。FIRフィルタと平均化回路の違いは1/4の計算部分です。1/4=0.25という事になりますが、この0.25を係数として、全部同じ係数ではなく、計算された係数です。FIRフィルタのタップ数はシフトレジスタの数。という事になります。それ以外は全く同じ回路です。