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はより容量の大きいタイプを使うということで実現させるつもりです。

 

フロントパネル

SDRAM_DAI基板をお使い頂いている「大阪のT様」から、完成写真をお送り頂きました。
LED基板をうまく配して独自のK式DAC風パネルにまとめられています。

メモリーポインタLEDのサークルが中央に来るようにデザインしたのと、ポインタLEDに白色LEDを使った所がミソだそうです。格好いいですね。

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

 

SDRAM_DAI基板のバリエーション

この秋には、SDRAM_DAI基板のバリエーションを、と考えております(FPGAの中身のバリエーションを増やしたいということです)。

具体的には、TDA1541A(特に左右独立Dual差動)を想定したI2Sが出力できるものをリリースできたらと思います。
現状実装されているFPGAのXC3S50では容量の関係で無理ですが、ピンコンパチの上位バージョンの石を使ってデジタルフィルタまで組み込むことを考えております。44.1/48kHzは4倍オーバーサンプリング、88.2/96kHzは2倍オーバーサンプリング、そして176.4/192kHzはNOSに自動的に切り替わる、というようなものを想定しています。

なお、以前リリースしたI2Sではない左右同時モードの差動基板にも入力できるように、差動I2S信号から変換するCPLDもリリースするつもりです。

その辺の回路規模の(はい、あくまで回路規模です。コードのROM容量ではありません)見積もりが全然できていませんので、本当にデジタルフィルタを組み込めるかどうかわかりませんが、性能の良いものを作りたいと思います。

ちなみに、TDA1541Aがもう入手できませんので、DAC基板自体は作る予定はありません。

もう一つ、これは完全に個人的趣味の道楽ですが、TDA1547に接続するSDRAM_DAI基板(もちろんFPGAの方)も時間を見つけて何とかしたいと思っています(当方が何を狙っているのか、鋭い方はわかってしまうかも・・・)。こちらはTDA1547基板のアイデアもあったりします。いわゆるダブルディファレンシャルではなく、左右独立の移動平均2パラ差動なんていうとわかってしまうかも・・・・。

 

 

SDRAM_DAIの出荷前基板チェック

SDRAM_DAI基板は全数出荷検査を行って、動作を一通り確認してからお送りしています。この出荷テストの目的は、部品の実装不良などが原因の不良をふるい落とすことです。

SDRAM_DAI基板の全コネクタに必要なものを接続しておき、ロータリーSWでモードを切り替え、入力を切り替えつつ、基板へ入力(基板から出力)するすべての信号が正しくFPGAにつながっているかどうかをチェックしています。
ロータリーSWのどこかのプルアップ抵抗が外れていたり、ショートしていれば、SWが正しく動作しませんので不良がわかります。

入力S/PDIF信号は44.1kHz系統と48kHz系統を繋いでおき、2つの水晶発振器が動くことを確認します。
FPGAとSDRAM間は信号が8bit幅で接続されていますが、たとえばそのうちのLSBbitが半田不良などで未接続やショートしていた場合には、出力のLSB, 8, 16, 24bit目がおかしくなりますから、オシロの波形が大きく乱れて不良が認知できます。

リリースから現在まで、このテストで発見された不良発生率は1%で、実装業者さんの仕事は確かといえるでしょう。
ちなみに、発見された不良は、最終出力の多連抵抗の電極が1つずつズレて実装されていたというものです・・・。

 

LED基板リリースします

大変遅くなりましたが、SDRAM_DAI基板用のLED基板をリリースさせて頂きます。下の記事ではfs LED用の3 to 8 DECODERに74LS138を使うようにご案内しましたが、今回は3.6Vの小型レギュレータも添付し、74HC138を使うように変更しますのでご了承ください。回路図どおりに製作ください。

添付品は以下のとおりです。

  • 基板1枚
  • TD62083AF
  • 74HC138
  • TOREX 3.6V LDO
  • 1608チップコン 0.1uF × 3

1セット1,500円、送料(ヤマトメール便)は100円です。下記のフォームからお申し込みください。

 回路図

 特定商取引に関する法律に基づく表示、ならびに個人情報保護ポリシー

LED基板をオプション設定します。

SDRAM_DAI基板用のLED基板をオプション設定します。

横76.2mm × 縦45.72mmのコンパクトな片面ガラスエポキシ基板です。SDRAM_DAI基板と合わせて使うことで、サンプリング周波数とメモリーアドレスポインタを簡単に美しくLED表示することが可能です。ポインタ表示用のLEDは円周状に配置しました。

取り付け穴径は3.2Φで、基板左下を原点とする座標は、(3.81, 3.81), (3.81, 36.83), (72.39, 36.83), (72.39, 3.81) となっています。

 

 

 

 

 

 

 メモリーポインタLEDの中心座標はPT0からPT7まで順に、(22.86, 10.16), (15.68, 13.14), (12.7, 20.32), (15.68, 27.5), (22.86, 30.48), (30.04, 27.5), (33.02, 20.32), (30.04, 13.14)。

 8個のfs LEDの座標は、x方向が54.61と63.5、y方向が下から10.795, 17.145, 23.495, 29.845です。

 回路図はこちらです。

回路図中では、fs LEDの方はSDRAM_DAI基板から供給される5Vから3.6Vを作って74(V)HC138で駆動するようにしていますが、実機では3.6Vレギュレータを使わず入出力をショートして、74LS138でLEDを駆動します。

LSTTLは’H’のときの出力電圧(Voh)が低く、VCCが5Vの時に3V位まで低い場合があり得ますのでVfの低いLEDを使う場合に注意が必要な面はありますが、電源が5VなのでVfの高い青色系の高輝度なLEDが使用可能です。

基板シルクがコネクタになっていますが、実際には直にワイヤーハーネスを半田付けしますので、コネクタは添付しません。添付品は基板と、メモリーポインタLED駆動用のTrアレイIC、TD62083AFと74LS138、およびチップコン(1608)になります。

これらICを下記のように実装していただきます。

 

クリックすると大きな画像が開きます。

 

 

 

 

 

SDRAMを使ったMemory Buffer DAI, SDRAM_DAI

昨年秋にPS3とTA-DA3200ESを導入してSACDマルチの世界にハマリ、まるで別世界の素晴らしい音楽体験を楽しんでいたわけですが、やはり低価格AVアンプですと何かしら物足りなくなってしまう。という結論になりました。

かといって、SACDマルチをピュア用パワーアンプ複数台で楽しむような財力も根性もありません(^^;;

ということで、ここのところしばらくは2chオーディオに戻っていました。で、トランスポートとしては流れでPS3を使ってきましたが、(最近発売のSACD非対応バージョンはどうか知りませんが)これがCDトランスポートして予想外に音が非常に良く、手放せなくなっています(ファンの音がうるさいですがヘッドフォン視聴時には関係なし!)。

CD再生では、内部で2倍(88.2k)、あるいは4倍(176.4k)にアップサンプリングしてS/PDIFから出力できるんですが(要はデジタルフィルタです)、これを自作のPCM179*系DACに入れてやると、本当に音が良いので、ここのところメインの環境になっていました。

ジッタの対策はしたいのですが、昨年作ったメモリDAI基板は44.1kHz専用ですので、PS3のアップサンプリングをOFFにしないと使えません(しかもPS3は再生停止状態で48kHzになっているので厄介です)。24bit/96kHzのソースも増えてきた関係で、メモリーDAI関連では、マルチサンプリング周波数対応で、周波数自動認識の使い勝手の良いものが欲しくなってきます。

ということで時間を見つけてコツコツ設計しました。どうせなら32kHzから192KHzまですべてのサンプリング周波数に自動追従でメモリー容量の大きなものを、という要求仕様で以下のようなものを作りました。

  1. 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHzに対応。周波数は自動認識
  2. 水晶発振器は44.1kHz系用と48kHz系用の2個を搭載。使わない方は自動で出力停止
  3. 192kHzまで対応するので、メモリは大容量が必要→64MbitのSDRAMを使い(32Mbit分を使用)FPGAで制御。
  4. サンプリング周波数とメモリーポインタをLED表示可能にする。

 

 右端のLSIがSDRAM。その左はXILIXのFPGA。その下は、右から22.5792MHzと24.576MHzの発振器。入力S/PDIFのサンプリング周波数に追従して使わない方は自動で出力を停止する。

受信したS/PDIF信号をCS8416からAESフォーマットで出力してFPGAで各種チャネルステータスを読んで処理を行う。

 オーディオ用ゆえ、速度はたかが知れているので、SDRAMはPC用のDDR2タイプではなく、SDRとした。

 

サンプリング周波数と、Read / Writeメモリーポインタの相対位置関係を知るためのLED基板を別に用意してあり、セットとしてケーシングするときには、フロントパネル側から見えるように装着すれば便利で見栄えが良いと思います(LED制御用の信号は基板から出ています)。

メモリーポインタのインジケータとして、LED基板には円周状にLEDを都合8個配置しました。

メモリーの読出しポインタの位置が0番地にあるときの書込みポインタのある番地を、(0.5メガの範囲で)当該LEDが光ることで知ることができます。メモリーには全部で4メガ番地あり、一番下のLEDを0番地を示すLEDとし、時計回りに0.5メガ番地ずつ離したところにLEDを配置します。

光るLEDが一番下のLEDに近づくということは、書込み速度(トランスポート側)よりも読出し速度(SDRAM_DAI基板上の水晶発振器側)の方が早く、メモリーがアンダーラン(空)になるか、あるいはその逆でオーバーラン(満杯)になるかという事を示します(左回りで近づく場合はアンダーラン、右回りで近づく場合はオーバーラン)。

 

LED基板は、左半分がメモリーポインタ部、右半分がサンプリング周波数表示部になっている。

左側の8個のLEDは、座標の計算をsin, cosを使って真面目に行い、円周上に配設してある。

 

 

円周のTOP、PT4とシルク印刷された位置のLEDが点灯しているときには、読出しの番地が0番地のときには、書込みの番地はメモリの真ん中付近にあり、最も安全な相対関係にあるといえます。

ただし、サンプリング周波数が低いメディアを再生している場合には、トランスポートから信号が出力されてから実際に音が出るまでの時間が長く、使い勝手が悪くなります。

そこで、電源立上げ初期状態で、読出しの番地に対してどれだけ先行した番地から書込みを開始するかを、3段階で選択できるようにしています。

サンプリング周波数が32kHzから96kHzまでは読出し番地に対して1メガ番地進んだ位置から書込みを開始する「MIDDLE」モードに加えて、0.5メガ番地進んだ位置から開始する「SHALLOW」、1.5メガ番地進んだ位置から開始する「DEEP」の3モードがあります。

また、サンプリング周波数が176.4kHzと192kHzでは、読出し番地に対して2メガ番地進んだ位置から書込みを開始する「MIDDLE」モードに加えて、1メガ番地進んだ位置から開始する「SHALLOW」、3メガ番地進んだ位置から開始する「DEEP」の3モードがあります。

 手持ちのトランスポートで長時間使用した時に、点灯するLEDがどちらの回転方向に移動するかによって、使い分けることができます。

 サンプリング周波数はS/PDIF信号に含まれるチャネルステータス信号という部分に示されるサンプリング周波数情報を読み取って判断しています。S/PDIFでは32kHzから48kHzまではこの部分は規格化されていますが、88.2kHzから192kHzまでは明確には規定されていません。

本基板では、88.2kHzと176.4kHzのチャネルステータス(サンプリング周波数情報)はSONYのPS3と合わせました。S/PDIFの提唱者の1社はSONYですので、他社も追従すると予想されます(このサンプリング周波数で出力する機器自体、あまり見掛けませんが・・・)。

96kHzと192kHzについては、複数の機器で自動認識できることを確認しており(詳しい機種名は説明書参照)、88.2kHzから192kHzまでの4つのサンプリング周波数では、もしも自動で追従しない場合には、強制的にあわせることができるようにしています。

以下のLED基板画像はクリックすると別画像が開きます。

fs=44.1kHzで「MIDDLE」に設定した場合

書込み番地は1メガ番地から開始

 

 

同じく「DEEP」に設定した場合

書込み番地は1.5メガ番地から開始

 

 

同じく「SHALLOW」に設定した場合

書込み番地は0.5メガ番地から開始

 

 

fs=48kHzのソフト再生時以外でも、PS3の再生停止時や、ユニバーサルプレーヤーなどの電源投入後デフォルト状態ではサンプリング周波数が48kHzの状態になっていますので、48kHzとそのほかのサンプリング周波数との移行時にメモリーバッファDAIの周波数が自動追従するのは特に便利です。

PS3はCDを再生状態から停止しただけでfsが44.1kHz(or 88.2kHz、or 176.4kHz)から48kHzに変わってしまう。

写真は「MIDDLE」に設定した場合。

 

 

PS3は176.4kHzでCD再生が可能。メモリーポインターを「MIDDLE」に設定して、書込みアドレスを2メガ番地から開始するようにした場合。

 

 

同じく「DEEP」に設定した場合

書込み番地は3メガ番地から開始

 

 

 

同じく「SHALLOW」に設定した場合

書込み番地は1メガ番地から開始

 

 

しつこいですが、ついでに88.2kHzの様子も・・・(^^;;

PS3は88.2kHzでのCD再生も可能。メモリーポインターを「MIDDLE」に設定して、書込みアドレスを1メガ番地から開始するようにした場合。

 

 

同じく「DEEP」に設定した場合

書込み番地は1.5メガ番地から開始—-

 

 

同じく「SHALLOW」に設定した場合

書込み番地は0.5メガ番地から開始—-

 

 

 176.4kHzと88.2kHzでは「MIDDLE」で約1.4秒(192kHzと96kHzも大体同じ)、44.1kHzでは「MIDDLE」で約2.8秒(48kHzも大体同じ)の出音遅れとなっています。

たまに録りためたBDなどを視聴するときに音だけ遅れるのが困りものですので、メモリ―バッファのバイパスモードもつけました。さらに、メディアプレーヤ側でDOLBY DIGITALやDTS出力の禁止を忘れてDACへつないでいるとびっくりすることになるので、PCM信号以外の入力が来た時には出力を自動的にミュートするようにしました。

ピュアオーディオとしてのこだわりは、使わない方の水晶発振器出力を止めて不要なノイズの発生を未然に防止するようにしたところです。

 これでCORD/DAC64みたいなDACを自作できるかもしれません(笑)。

販売ページはこちらです。