SDRAM_DAI for TDA1541A その3 動いた!

シミュレーション上で動作していたSDRAM_DAI for TDA1541AのFPGA設計データを、実際に現物のFPGAに移植して動かしてみました。

予定通り信号が出てきました。サポートするすべてのサンプリング周波数のS/PDIFを入力し、無事に信号が出てくることが確認できました(メモリーバッファーのスルーモードはまだインプリメントしていない)。

SDRAM_DAI基板のボードチェッカーを一時拝借して昔作った1541基板を繋いでみました。

 

ケース内手前の基板はPCM1798が載ったテスト用ボード。

とりあえずまだ差動にはしていないが、すぐにできる。

 

 

 

信号ソースとしていつものようにPS3を使ってみました。下の機械はPCM1794AのSDRAM_DAIシステムです(今は関係ない)。

 

 

PS3の設定でテストCDを44.1kHz, 88.2kHz, そして176.4kHzで再生し、S/PDIFを手前のテストシステムに入力する。

 

 

 まずはfs=44.1kHzにおける、1kHz, 20kHzの各正弦波と、インパルス応答を3枚続けてどうぞ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 FPGAの4倍オーバーサンプリング・デジタルフィルタはシャープロールオフタイプの設計としているが、SAA7220Pよりは緩やかにしている。 

 

 

 

 次はfs=88.2kHzにおける、1kHz, 20kHzの各正弦波と、インパルス応答を3枚続けてどうぞ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PS3の2倍アップサンプラー処理+本FPGAの2倍オーバーサンプリング処理の合成になる。44.1k(本FPGAの4倍オーバーサンプリング処理)にくらべて収束まで時間がかかっている?

 

 

 そしてfs=176.4kHzにおける、1kHz, 20kHzの各正弦波と、インパルス応答を3枚続けてどうぞ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fs=176.4kHzの場合、FPGAはNOS動作になるので、フィルタ処理はPS3の仕事になる。SDRAM_DAIではfsに応じて自動的にフィルタ処理を切り替え出来ている

 

 

 

 あとはPCからfs=32kHz, 48kHz, 96kHzのS/PDIFをSDRAM_DAIに入れてみましたが、特に問題なく動作しているようです。

ということで、まだ試聴の段階ではないとはいえ、早速音楽を聴いています。少し古い、あまり録音の良くないDISKをかけてみました。PCM1794Aですと、録音の良くないDISKがあまり楽しめない傾向がありますが、TDA1541AはそういうDISKでも聴かせてくれるところがあります。重心の低い深々とした低音はやっぱりイイです!

SDRAM_DAI for TDA1541A その2

現段階でのデジタル・フィルタの性能について公表させていただきます。

このページのスペックがSAA7220PBのスペックだと思ってください。

以下は、今回の4倍オーバーサンプリング時のインパルス応答と20kHz正弦波の処理結果です。例によって、FPGAのソースコードでのシミュレーション結果をWAVEファイルに変換してWaveSpectraに読み込ませました。

 

クリックすると大きな画像に遷移します。

通過帯域はSAA7220PBに比べてフラットではないかと思います。SAA7220PBは20kHzに近づくにつれてレベルが少し上がっている?

 クリックすると大きな画像に遷移します。

 (22.05-20)+22.05=24.55kHzの折り返しが-60dBまで抑え込まれています。それ以上のスペクトラムは完全になくなっています。確かSAA7220PBの阻止領域の減衰特性は-50dB程度だったように記憶しています(実際そのように読み取れます)が、本フィルタでは完全に落としきれています。

フィルタ係数自体の算出では、ソフトウェアによって倍精度浮動小数点精度で-150dBをはるかに超える性能をもつTAP係数が得られ、それを32bitに量子化して本フィルタの係数としています(32bitに量子化する時点で量子化誤差により性能は悪くなりますが・・・)。

好ましい音として感じられるかどうかは別として、スペック的にはSAA7220PBよりも良いかと思います。

 

SDRAM_DAI for TDA1541A その1

何とか1番やっかいなデジタル・フィルタ部分のプロトタイプを書きあげました。ロジック設計は(も)ちまちました作業の連続で気が滅入ってしまうこともしばしばですが、とりあえずホッとしました。

デジタル・フィルタの仕様は、4倍オーバーサンプリング時が256TAP、2倍オーバーサンプリング時が128TAPのシャープ・ロールオフタイプです。

入力が32kHz/44.1kHz/48kHzなら自動的に4倍モードのフィルタ処理を、88.2kHz/96kHzなら2倍モードのフィルタ処理を、そして176.4kHz/192kHzならNOSで出力します。176.4kHz/192kHzも1サンプルあたりビットクロック32発分(16発/ch)で出力しますので、TDA1541AのI2S入力でも問題ないはずです。

その昔、CS8414では(CS8416でも同じ)176.4kHz/192kHzも1サンプルあたりビットクロック64発分(32発/ch)で出力されるのでTDA1541Aでは再生できなかったことを考えると、これも前進ではないかと・・・。

また、SAA7220PをTDA1541Aの前に置くと、32kHz/44.1kHz/48kHzより高いサンプリング周波数の信号を入れるとSAA7220Pが動かないという状況で、TDA1541AはCD専用と割り切らざるを得ない局面が多かったと思いますが、今回のSDRAM_DAI for TDA1541AならばTDA1541Aを実用的に使えるようになります。

88.1kHz以上の高音質ソースでTDA1541Aを鳴らしても性能が出せるのか?という疑問は置いておいて・・・。

さて、メインのモードが差動出しとなるので、出力はI2S(DATA)が2線になります。そして、内蔵するデジタル・フィルタはオリジナル設計とします。

どうしてもSAA7220Pを使いたいケースを考えて、このSDRAM_DAIには差動ではない1線のI2S出力モードも設け、こちらのモードはデジタル・フィルタを通さない信号をジッタレスで出力できるようにします。NOSがお好みなら32kHzから192kHzまでOKですし、48kHzのソースまでしか聴かないよ、という場合にはSAA7220Pを繋いでもOKです。

説明だけではわかりにくいかもしれませんので、概念図を用意しました。

出力のタイムチャートも描いてみました。

デジタル・フィルタを通る差動モードと、デジタル・フィルタを通らないノーマルモードの切り替えには、基板上のチップジャンパをopen/shortすることで切り替えます(シルクはジャンパにはなってませんが)。現行のPCM179*用基板では非公開のモードへの切り替えとして使っています(有用な機能ではないので非公開のままとします)。

とりあえずシミュレーション上ではデジタル・フィルタが一通り動き始めましたので、そのうちデバッグを始めたいと考えています。設計検証等にも時間がかかるので、リリースは11月に入ってしまうと思います。

あと、設計上の制約から場合によってはメモリをバイパスするTHRU(スルー)モードでは、差動/非差動の両方のモードでデジタル・フィルタを通さないような仕様になるかもしれません。

その前に、回路が現状のFPGAよりサイズの大きいXC3S200に収まりきるかどうかという検証もまだ完全にはできていませんでした(汗)。

 

SDRAM_DAI for TDA1541A

今月いっぱい少し時間がとれそうですので、SDRAM_DAI基板のTDA1541Aバージョンの設計を始めました。単純にI2Sで出力するだけなら手間はかかりませんが、やはりデジタル・フィルタも入れ込みたいですので、まだ少し時間がかかりそうです。

基板を新規設計して44.1kHz専用のものを立ち上げるという手もありますが、インフラは1本化したいので現状のSDRAM_DAI基板を使い、FPGAはより容量の大きいタイプを使うということで実現させるつもりです。