レジスタライトでIIRフィルタを制御する |
MicroBlazeとIIRフィルタコアとはPLBというバスでつながっており、MicroBlazeはレジスタ経由でIIRフィルタコアの入力ポートにアクセスすることができます。 Applicationタブを選択し、Add Software Application Projectをダブルクリックします。Project Nameをdemo0としてOKをクリック。 Sourceを選択し、右クリックでAdd New File。 Appsというディレクトリを作成し、ファイル名をdemo0.cとする。 Sourcesを展開し、demo0.cをダブルクリックして開き、これをペーストする。 Project: demo0を選択し、右クリックでMark to Initialize BRAMsを選択。 Project: demo0のアイコン上の赤色の「Xマーク」が消え、他のプロジェクトにXマークが付いているのを確認(この場合プロジェクトが3つあり、その中のdemo0のみが有効になっているということ)。 メニューのDevice ConfigurationからUpdate Bitstreamを選択。これによりdemo0.cを含んだビットストリームを生成します。 下部のConsoleに「Done!」と出たら成功です。以降この手順に従ってFPGAにダウンロードしましょう。 シンセシスレポートを見るとIIRフィルタで乗算器を6個使っています。Biquadが6個あるからです(3段×2ch)。 iirfilters_0にはIIRフィルタが2個(Lch/Rch)入っていますが、それらの係数はレジスタに繋がっているのでMicroBlazeから自由に設定できます。demo0.cではLPFの係数を設定しています(以下は周波数特性、SoftOscillo2 Standard Editionで基板に白色雑音を入力し、その出力をFFTアナライザでアベレージングしたもの)。 また、demo0.cではHPF/BPF/BRFの係数設定をコメントアウトしているので、それらを有効にすると以下のように特性が変わります。 Biquad3段縦続接続なので係数の数は3×5=15個。15個のレジスタの値を書き換えることにより、さまざまな特性を実現することができます。
|