Cosmo-Z MiniにFIRフィルタを実装
あるお客様がCosmo-Z Miniで、波形データが流れるAXI StreamバスにFIRを実装したところ、カクカクしていてランダムな波形が出てきたという連絡がありました。
実際にやってみるとたしかにランダムでカクカクな波形が出てきます。
その原因なのですが、お客様が使っていた係数でFIRフィルタを作ると出力が36bitになるのですが、そのまま使うと下位16bitだけが接続されてしまうため、このようなぐちゃぐちゃな波形になっていたようです。
XILILNXのFIRコアはデフォルトでは入出力のビット幅が異なるので、綺麗に接続するには上位16bitを取り出すことを明示的に指定するか、
下のダイアログのようにFull PrecisionからTruncated LSBを選んで16bitだけを取り出すようにします。
なお、AXISのバス幅は8bit単位なので、計算の精度が36bit必要ということになっても40bitで出力されます。
それから、波形がカクカクしているのですが、おそらくFIRのclocksで示した部分を設定していないため、デフォルトのまま300MHzの速度で0.01MHzの信号を計算するという緩い仕様で作られてしまっています。
これが実際にはそこまで緩くはならず、5クロックで1つの値を計算するという程度の速度で作られているため、カクカクした波形になってしまっていたようです。
スペクトラムを見ると、fs/2までにゼロになる点が4つほど見えています。だから5クロックで1つの計算なのです。
FIRフィルタのクロック設定を変えて、1クロックで1つの値を計算するようにしたところ、下の図のようにきれいな(茶色)スペクトラムとなりました。FIRなし(赤)のチャネルのノイズフロアを下回っていることが分かります。
| 固定リンク
コメント