
New Source Wizardを起動
Sources for のペインにて右クリックし、New Sorceを選びます。

ファイルを作成
IP(CORE Generator & Architecture Wizard)を選んでおき、新規作成するIPコアのファイル名(ここでは"LPF15KFIR")を指定します。

IPコアの選択
ジャンル別に分かれています。FIR Compiler は Digital Signal Processing - Filters にあります。

FIR Complilerの設定(Page1)
- Load Filter Coefficients(COE File)
- Filter Specification
Number of Channels: 2 ステレオなので
- Frequency Specification
Clock Frequency 今回は"38.912"
1サンプルあたりシステムクロックが何クロックあるか、からFIR Complilerが
ハードウェア構成を検討します。
指定した周波数での動作を保証してくれるわけでありません。
※上の例では1サンプルあたりシステムクロックは256クロックになります。
フィルターコアが新たなデータの受け入れ可能であることを示す RFD (Ready For Data)
フラグの出力周期もこの設定で決まります。
私は当初、クロック周波数77.834MHzと設定して38.912MHzで動作させたところ
RFDが最初の1回しか出てこず、訳がわからず1週間悩みました。
わかってしまえば馬鹿馬鹿しい話です。

FIR Complilerの設定(Page2)
- Filter Architecture
Systolic Multiply Accumulateとしときます。
- Coefficient Options
Coefficient Type: Signed。係数は極性あり。(2の補数)
Quantization: Quantize Only
係数の取り扱い方法。係数は実数なので、FIR Complilerの演算の都合上、
2進数に量子化します。Quantize Onlyは単なる丸め処理。
Maimize Dynamic Rangeは、係数の最大値が所定のビット幅を使い切るよう
スケーリングしてくれるようです。
桁取りがわかりにくくなりそうなのでQuantize Onlyで行きます。
Coefficient Width: 18
係数のビット幅。FPGAの18×18ビットのビルトイン乗算器が使われることを
想定しています。数字を増やせば精度があがりますが、
乗算器がたくさん消費されます。
Coefficient Fractional Bits: 19
係数の小数点位置。自動的にセットされます。
- Datapath Options
同時処理するフィルタ数。1なら2つのチャンネルを時分割処理となり、
2とすればフィルタが別々に作成されます。
Input Data Type: Signed
入力は極性あり。2の補数フォーマット。
Input Data Width: 18
入力のビット幅。係数と同じ理由で18としました。
Input Data Fractional Bits:0
単なる情報扱いのため、入力不要です。
Output Rounding Mode: 出力ビットの丸め方を指定します。
"Full Precision" 以外を選べば、出力ビット幅を指定できます。
Output Width:24 出力のビット幅です。
- Filter Response Analysis
周波数特性グラフで、通過域および阻止域の特性数値が表示されます。
単に表示のためのだけに使われているもようです
Passband Range: 0.0 - 0.2
Stopband Range: 0.25 - 1.0
今回はサンプリング周波数152kHzで通過域が15kHzまでで
15k/152kHz ≒ 0.1。阻止域は19kHz以上で 19k/152k = 0.125です。
単位は[π rad/sec]なので、それぞれ2倍すると上記の数値になります。

FIR Complilerの設定(Page3)
- Optimized Goal: Area
- Control Options: デフォルト通り
- CHAN_IN Options: デフォルト通り
- Memory Options: デフォルト通り

FIR Complilerの設定
Frequency Responseタブで、読み込んだ係数の周波数特性が表示されます。
このグラフ、周波数軸の表示が独特ですが1.0が0.5fsということになります。このレポートによると通過域のリップルが0.18dB、阻止域の減衰量は-61.4dBだということです。
0 件のコメント:
コメントを投稿