FIRフィルタの仕様
FIRフィルタを組み込む
 以下のようなFIR(Finite Impulse Response)フィルタを1個(右、Rchのみ)、FPGAに組み込みます。
フィルタタイプ FIR型
次数 200次
入出力データビット数 16ビット
係数ビット数 20ビット
サンプリング周波数 97.7kHz
マスタークロック 50MHz

FIRフィルタの構成
 FIRフィルタは以下のようにN個の乗算器と遅延器からなります。乗算器の数Nを一般的に「次数」または「タップ数」と呼び、それはFIRフィルタの性能を大きく左右します。


乗算器は1個で行う
 今回のFIRフィルタは200次(200タップ)なので乗算器は200個必要です。しかし現実的に200個の乗算器を用意することは困難であるため、普通は1個の乗算器を時分割で使用してFIRフィルタを構成します。1サンプリング周期(1/97.7kHz)に200回の積和演算が必要ですが、マスタークロックが50MHzなので十分間に合います。

DF/Fを遅延器に使うのは苦しい
 このFIRフィルタはデータが16ビット、タップ数が200なので、レジスタは16x200 = 3,200必要です。しかしEP3C10のLogic Elementsは10,320(このサイト参照)、すなわちレジスタは10,320個です。FIRフィルタの遅延器としてレジスタ(DF/F:D型フリップフロップ)を使うとこれらを3割も消費してしまい、ゲート効率、速度、コンパイルにかかる時間などを考えると得策ではありません。

遅延器はRAMで構成する
 上記サイトによると、EP3C10の内部RAMは414kビットあります。したがって3,200個のレジスタをメモリに置き換えると3.2kビットと、わずか1%以下の消費量で済みます。このようにタップの長いFIRフィルタの遅延器には一般的にRAMが使われます。

係数はROMに格納する
 上図のh[0], h[1], h[2], ... h[N-1]は係数で、これらはROMに格納します。
(*)VHDLではROMのように記述するが、論理合成すると初期値付きのRAMに割り当てられる。

Back


Top Page