どもです。
「モジュール内部の非同期設計をなくすべく進行中」と言っていたFIR_x2ですが、ついに作業が終了しました。
FIR_x2をv2.00として公開しました。
FIR_x2について
これまで以下のようにブログをまとめています。
PCM信号を2倍にオーバーサンプリングするFIRデジタルフィルタのVerilogモジュールです。
オーバーサンプリング比を2倍に固定することで、生成したFIRフィルタの係数を並び替えることなくオーバーサンプリングできることが特徴です。
縦続接続すればマスタークロック周波数に余裕がある限り2倍、4倍、8倍、・・・とオーバーサンプリング比率を高めていくことができます(その代わり、レイテンシは増えてしまいますが)。
変更内容
以下、公開当初からの変更点です
- データの取り込みや出力で非同期設計(立ち上がりで取り込み、たち下がりで出力)をなくしました
- カスタムFIRフィルタ係数の生成法について記載しました
FIR_x2(2倍オーバーサンプリングデジタルフィルター)の係数生成サンプルを作ってみた - 電子回路わからん日記 参照
- 非同期リセットに対応しました
- サンプルプロジェクトの非同期リセット周りのケアを見直しました(リセットシンクロナイザ挿入)
非同期設計をしていたがうえ、かなり多くのレジスタを消費していたようです。
2chのオーバーサンプリング(44.1kHz/48kHz→88.2kHz/96kHz)でブロックRAMを使って800LEs弱に収まりました。
動作確認済デバイス
以下ツイートのような感じで動作確認しました。
CMOD S7の動作確認も完了 pic.twitter.com/778cQYfZA3
— AUDIY (@AUDIY14) August 24, 2025
以下7デバイスにて動作確認済です。
- Altera Cyclone10 LP 10CL025YU256I7G
- Altera CycloneIV E EP4CE22F17C6N
- Altera MAX10 10M50DAF484C7G
- Efinix Trion T20F256I4
- AMD Artix-7 XC7A35T-1CPG236C
- AMD Spartan-7 XC7S25-1CSGA225C
- Gowin Arora GW2A-LV18PG256C8/I7
「このデバイスで動作確認してほしい!」みたいな要望があればお気軽にAUDIYのXアカウントにご相談いただければと思います。
個人的にはGowinのLittleBeeシリーズへの組み込みはやってみたいです。Tang Nano 9K買って組み込んでみますかね。
今後の展望について
FIR_x2の開発についてはここで一区切りとしたいと思っています。
この開発で学んだことを活かして、もう少し汎用性の高いFIRデジタルフィルタIPの実装に挑戦したいですね。
2倍オーバーサンプリングのみならず、単純なフィルタリングやデシメーションもパラメタライズで実装できるようなモジュールです。
GitHubで調べたところ、今のところそれに類するものはなさそうです。
fir-filter · GitHub Topics · GitHub
次の成果物が公開でき次第、現在のFIR_x2はアーカイブする予定です。
以上、FIR_x2の新バージョン公開報告でした。
人生で初めて本格的に開発したものかもしれません。いろいろとやることがあり、ペースを上げていくことは難しいですが今後も継続的に開発していければと思います。
ところでFPGA開発者のみなさん、以下イベントには参加しますか?
私は参加予定です。非常に楽しみですね。