2009年6月19日金曜日

FMトランスミッタ用 入力ローパスフィルタ(4)

5.FIR Compiler CoreGeneratorのFIR Compilerを使ってデジタルフィルタを作成します。



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)
Coefficents File: BrowseをクリックしてCOEファイルを指定。
  • Filter Specification
Filter Type: 入出力のサンプルレートが同じため Single Rate
    Number of Channels: 2 ステレオなので
  • Frequency Specification
Input Sampling Frequency "0.152"
    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 Structure: Symmetric 係数の構造です。対象なので。
    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
Number of Paths: 1
             同時処理するフィルタ数。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
この項目に適切に数値をセットしておけば、Frequency Responseタブの
    周波数特性グラフで、通過域および阻止域の特性数値が表示されます。
    単に表示のためのだけに使われているもようです

    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
最適化の方針を決めます。Speedは速度優先。デフォルトのAreaは(チップ上の)エリア最小。
  • Control Options: デフォルト通り
入力データが有効になったことをフィルタコアに知らせる ND (New Data) ピンをセットします。
  • CHAN_IN Options: デフォルト通り
CHAN_INの初期値をセットします。
  • Memory Options: デフォルト通り






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

0 件のコメント:

コメントを投稿