電子回路わからん日記

にゃーんと言いながら電子回路いじってます

PCM用自作オーバーサンプリングデジタルフィルタ"FIR_x2"の使用方法について

どもです。

昨日は"FIR_x2"について実装の工夫点をいくつかお話しましたが、今回はシミュレーションと実際の使用方法についてまとめていきたいと思います。

audio-diy.hatenablog.com


ディレクトリ構成

ディレクトリ構成は以下の通りとなります。

github.com

FIR_x2のGitHubディレクトリ構成
  • 01_DPRAM_CONT
    シンプルデュアルポートRAMをリングバッファとして機能させるためのコントローラ
  • 02_DATA_BUFFER
    SPRAM_CONTとシンプルデュアルポートRAMを組み合わせて構成したリングバッファ
  • 03_SPROM_CONT
    シングルポートROMから任意のフィルタ係数を出力するためのコントローラ
  • 04_FIR_COEF
    SPROM_CONTとシングルポートROMを組み合わせて構成したFIRフィルタ係数出力部
  • 05_MULT
    DATA_BUFFERから出力されたPCMデータとFIR_COEFから出力されたFIRフィルタ係数を乗算する乗算器
  • 06_ADD
    MULTから出力された乗算結果を積分する加算器
  • 07_FIR_x2
    上記のDPRAM_CONTからADDモジュールを接続して構成したオーバーサンプリングデジタルフィルタのトップモジュール
  • 08_hex
    シンプルデュアルポートRAMとシングルポートROMのデータ初期化用16進数ファイル
  • 09_txt
    シミュレーション用PCMデータ格納ファイル
  • 10_Example
    各種FPGA評価ボード用サンプルプロジェクト
    2023年12月25日現在で「Terasic DE10-Lite」「Terasic DE0-Nano」「Efinix Trion T20 BGA256 Development Kit」「Sipeed Tang Primer 20K」の4種類のボード向けサンプルを保存しています。

    www.terasic.com.tw

    www.terasic.com.tw

    www.efinixinc.com

    wiki.sipeed.com


シミュレーション方法

各モジュールのディレクトリに入ると「(モジュール名).v」と「(モジュール名)_TB.v」が保存されていますので、基本的には各自お持ちのシミュレータで「(モジュール名)_TB.v」を実行すればOKです。

ただし、いくつか注意点がありますのでご注意ください。

  1. シングルポートROM(SPROM.v)とデュアルポートRAM(SDPRAM_SINGLECLK.v)はサンプルプロジェクトで推論されることを確認済ですが、各ベンダーのIPを使ったほうがいろんな面で良いと思います。
  2. FIRフィルタ長は(マスタークロック周波数)÷(サンプリング周波数)で計算してください。
  3. 一部モジュールでは別ディレクトリのモジュールも合わせて呼び出す必要がありますので、実行前に対象のモジュールをよくご確認ください。
  4. 一部モジュールでは「08_hex」や「09_txt」内のファイルを使用しますので、その際はシミュレーションを実行するディレクトリに保存した上で実行してください。
  5. 開発時にQuesta - Intel FPGA Starter Editionで手作業でシミュレーションしたため。vcdファイル保存やシミュレーションの終了タイミングが記述されていません。必要な場合は各自記述ください。

以下にQuesta - Intel FPGA Starter Editionで実行する手順を示しておきます。
ちなみに、シミュレーション実行ファイル(*.do)のPull Request大歓迎です!

  1. 必要なモジュールとテストベンチをプロジェクトにインポートし、コンパイルする。このとき、hexファイルやtxtファイルで必要なものもテストベンチが保存されているフォルダに保存しておく。

    FIR_x2実行時のQuestaプロジェクト
  2. テストベンチファイルを選択し、最適化オプションやその他オプションを設定して実行する。(一部モジュールにはPSLアサーションが記述してあるのでアサーション検証も可能です。)

    テストベンチファイルを選択して実行


  3. 観測したい信号をwaveウィンドウに追加し、Transcriptウィンドウ内にてrunコマンドを入力してシミュレーションを実行する。(実行時間は30万~40万nsあれば十分です。)

    あとは各種検証をお楽しみください。

    波形表示を変更した場合



実機での確認方法

実機の場合はベンダーによりいろいろなお作法があるので一概に「これ!」といった方法はお伝えしにくいですが、

  1. ディレクトリのモジュールをFPGAプロジェクトにインポートする
  2. FIR_x2以外の周辺モジュールを設計し接続する
  3. タイミング制約の記述
  4. ピンアサインの設定
  5. コンパイル

という基本的な流れは変わらないと思います。

以下実機確認の注意点になります。

  1. シングルポートROM(SPROM.v)とデュアルポートRAM(SDPRAM_SINGLECLK.v)はサンプルプロジェクトで推論されることを確認済ですが、各ベンダーのIPを使ったほうがいろんな面で良いと思います。
  2. FIRフィルタ長は(マスタークロック周波数)÷(サンプリング周波数)で計算してください。
  3. 「10_Example」内のサンプルプロジェクトではI2S入力、16bit Right-Justified出力で、Amanero Combo384とPT8211Sを組み合わせて確認しています。

    www.tec-sol.com

    audio-diy.hatenablog.com

    各自使用するDACやオーディオデータ形式に合わせて別途モジュールを準備ください。

サンプルプロジェクトの対応ボードを所有されている方は一度試されるとなんとなくわかるかと思います。


ライセンスについて

そこそこの時間と気合を入れて作ったものですので、ライセンスについてもお話させていただければと思います。

AUDIYが調べた限りでは今回のようなHDLのライセンスはMITライセンスやApacheライセンスで公開されているものが多いようですが、

ということでいろいろ調べた結果、以下のライセンスにたどり着きました。

cern-ohl.web.cern.ch

CERN(欧州原子核研究機構)が制定したライセンスで、ハードウェアのみならずソフトウェアにも適用できるそうです(なぜに原子力関係の機関が・・・・)

https://ohwr.org/project/cernohl/wikis/FAQ#q-my-project-includes-hardware-and-software-how-do-i-make-sure-the-whole-product-is-distributed-together-and-stays-open-source

また、ライセンスの継承についても3段階に区分されていて、制限が強い順に

  1. CERN-OHL-S v2
    ソフトウェアにおけるGPL3に相当する。
    このライセンスによる著作物を使用したプロジェクトはCERN-OHL-S v2でライセンスする必要がある。
    回路等の物理的な著作物にのみ適用可(ソースコード不可)。
  2. CERN-OHL-W v2
    ソフトウェアにおけるLGPL3に相当する。
    このライセンスによる著作物を使用したものはCERN-OHL-W v2またはCERN-OHL-S v2でライセンスする必要がある。
    CERN-OHL-S v2でライセンスする場合は、各自で作成したものについても動作に必要なものは全てCERN-OHL-S v2で公開する必要がある。
    CERN-OHL-W v2でライセンスする場合は、各自で作成したもののライセンスについては問わない(別ライセンスでも良い)。
    ソフトウェアやHDLにも適用可。
  3. CERN-OHL-P v2
    ソフトウェアにおけるApache 2.0ライセンスに相当。
    このライセンスによる著作物を使用したもののライセンスは問わない(CERN-OHLを継承せず別ライセンスを適用しても良い)。

その他「商用利用可」や「保証の要求不可」などは一般的なオープンソースソフトウェアライセンスと類似しています。

ohwr.org

今回はそこそこ時間をかけて開発したことや、個人的にも思い入れがあるのでライセンスの継承だけはしていただきたくCERN-OHL-W v2でライセンスすることにしました。

もし本プロジェクトが何かに使えそうな場合はご一報いただけるとAUDIYが喜びます。w


以上、FIR_x2の中身と使用方法についてでした。

Advent Calenderなのに自分の成果物の発表になってしまいましたが、皆様に教えられるようなHDL関係の知識があるかもビミョーだったので成果物を発表することにしました。

せっかくQuartus付属のシミュレータがModelSimからQuestaに変更になったので、2024年のAdvent Calenderは本記事でも少し触れたアサーション検証についてアウトプットしたいところです。(1年あるのでそれまでに有益な情報が出るかもしれませんね。)

www.paltek.co.jp

 

では皆様、良い年末年始をお過ごしください。

2024年もどうぞよろしくお願いいたします。