1 bit DACアナログバックエンド回路(DSDフィルタ)

基板を作る用があって面付けの都合で少しばかり「埋める」必要があり、DSDのフィルタ回路実験基板なるものをを作りました。

試したかったのは、DAC ICに搭載されているアナログのFIRフィルタを外付けで作れないか?ということでした。FIRフィルタに関しては、正確な説明はググって頂くとして、1bitのDSD信号を下記の回路のようにDSDクロックで8個のDFF(Dフリップフロップ)を通過させ、それぞれの出力を8個のTAP係数で重みづけして加算するというものです。ちなみにTAP係数(=8個のDFF)は8個に限定されるものではありません。単に回路実現上の都合によるものです。

回路図は横着してHCT574のシンボルの上で配線しています。それぞれのDFFの出力につながるRの大小がTAP係数の大小となります。Rが小さい方が電流が増えますので、TAP係数は大きくなる関係にあります。

OPアンプのI/V抵抗(1kΩ)にパラに1000pを付けて6番ピンをオシロで見たのが下の図です。順に2kHzと40kHzの正弦波 (のDSD) を送り込みました。ちなみに今回はDSD128の場合です。

それっぽい信号が出てきています。40kHzの方は2kHzの方より時間軸を伸ばして見ています。今回の実験ではOPアンプの3番ピンはGndにつないでいます。出力はマイナス電位となります。

片ch分の実験回路です。これは、DFFのICがCMOSとTTLの違いであるとか、あるいはTAP係数の抵抗の種類がどうであるとか、など、音が変わりそうなパラメータが豊富です(笑

 

PCM2DSD基板、大容量回路対応版

PCM2DSD基板ですが、FPGAをXilinxのSPARTAN6(9k)からAlteraのCyclone3(25k)に変更したリビジョンが、お盆休み前に必要最小限の実装を終えて送られてきました。

single speed(44k1/48k)のPCMだけをDSD256に変換するのであれば、もともとのXilinxのSPARTAN6(9k)を搭載した基板でたぶん十分なのですが、おそらくは、double, quad speedからもDSDに変換したいとか、DSDのアップサンプリングってどうなの?といった声が上がりそうな予感もしますので、FPGAはある程度大容量なものを搭載してヘッドルームは確保しておこう、ということで、予め基板を作ってしまった次第なのです。

DSDアップサンプリングをやるかどうかは置いておくとして(可能性としては高くはない?)、仕様的にはS/PDIFとFIDELIX方式のI2S伝送HDMI入力に対応予定です。S/PDIF入力に対応しておけば、CDプレーヤーの稼働率が復活するかもしれません。そのS/PDIF入力時にはクロックのジッタリムーバー(シェーパー?)を選択的に利用できるようにします。

内輪の話ですが、AlteraのFPGAを使うのは会社員時代以来なので、基板設計時点からしくじると痛いなーと心配していました。結果的には杞憂に終わり、特にミスもなくコンフィグレーション(回路データをROMに書込むこと)もできています。電源投入でROMからFPGAへ回路データが展開されて、予定通りの動作をしています。

あとは、残りのICも実装して全体の動作を確認するとともに、double/quad speed用の変換回路を作りこむ作業が残っています。デジタルフィルタの更なる性能向上のための設計作業も続けるつもりです。

追伸:数名の方からDSD256関連で丁重なメールを頂いており、誠にありがとうございます。大変申し訳ありませんが個別にお返事ができませんことをお詫び申し上げます。現在の進捗を持ってご報告に代えさせて頂けますよう、どうかよろしくお願いします。

けじめ

『2時間だけDSD256関連の検討に当てよう』と決めていたはずなのに、気が付いてみたら時間を少しオーバーしていました。設計受託した案件に影響が出てはいけないのでとりあえず中断・・・。

前回記事の写真の基板に回路を焼きこんで実機で動作チェックをしてみました。

シミュレーションの結果からして、設計通りにはできているはずなので、とりあえず1kHzと20kHzの正弦波(fs=44.1kHz)を送って確認することに・・・。

ついでにおまけにインパルス応答も・・・

デジタルフィルタはSHARPなロールオフ特性にしてあります。

あとはリッピングしたCDコレクションをひたすら聴きまくることになります・・・。  とりあえず、DSD1794AにDSD256の信号を入れて確認をしています。データシート上ではDSD256までは大丈夫そうです。

TIのこの手のDACチップでは、入力がDSDの場合は内蔵のOSF (オーバー・サンプリング・フィルタ)とΔΣ(デルタシグマ)モジュレータはバイパスして、アナログFIRフィルタを通過させているだけのようです。つまりアナログFIRの機能しか使用しておらず、もったいないと・・・。

FPGAを出たところで数TapのFIRフィルタを通過するように基板を修正すればDACチップも不要にできるかもしれません。256fsと、ノイズの周波数帯域もより高いですので、アナログ回路のLPFも簡単にできるかも。

もっとも、それよりも根本的な問題として、(今基板に載ってる ) “Spartan-6 SLX9″ をもってしても主に配線リソースには不安があるので ( ビット数の非常に大きな積和演算回路を複数構成するとフィッティングが難しいという意味で )、基板を作リ変えて真面目にやるのであれば、”Cyclone III ” のある程度大きなもの ( とは言ってもパッケージはQFP144) に変更したいと考えています。そうしておかないと、PCM Double/Quad Speedからの変換用にデジタル・フィルタを拡張したりする必要が出てくると、一気に破綻する恐れがあります。

あるいは、ある意味、ハイレゾが普及して44.1kHz/48kHzの音源にありがたみが薄くなってしまったので、もう一度これらのfsの大切な音源に改めてスポットライトを当てて付加価値を高めつつ?音楽を楽しみたい。ハイレゾはそのままPCMでの再生でよろしい、という発想をされる方もあるかもしれません。

とりあえず、相対的な比較論で音が良いとか悪いとか、という点は別として、特性的に特にまずいところとか、音を聴いて癖がある、といったところは無いと思いますので、 同時ではありませんが、思う方2-3名様に基板をお貸しして使ってみて頂きたいと思っています。その方々には近いうちにお願いをさせて頂きますので、もしよろしければご試用頂きたくお願いします。

 

DSD256(11.2896/12.288MHz)

思うところあって ( Voyage MPD の Starter Kit を使うことによって、CDからリッピングしたライブラリーを手軽に楽しめる環境ができたことが大きいです )、サンプリング周波数44.1/48kHzの信号をDSD256(11.2896/12.288MHz)に変換する回路を設計しました。多くの方と同じように、手持ちの一番充実した種類・分量の音源である44.1kHzのPCMを楽しみたいという気持ちからです。

まずはHDLによるRTLという手法で回路に変換可能な ( 専門的には「論理合成が可能」という言い方をします ) コードを額に汗を流しながら書き終えました。コードといってもいわゆるC言語等のプログラミング言語とは似ても似つかないもので、根っこの変換アーキテクチャーは同じでも、構成や実現方法が全然異なるものであります。

出来上がったコードを実際に物理的に動作する具体的なハードウェアに落として行くわけですが、規模が大きくなりますので、残念ながらUDA基板に統合、というのは全く不可能です。何しろ、フィルタの係数ビット1つ取ってみても32bitとしていますし、32bit×24bit の乗算器をFPGAのマクロを使用せずに構成するなど、基本ロジックセルどうしの配線に必要なリソースが膨大なのです。

そこで、UDAなどをトラポとし、受け側のDAIとして写真の別基板上に実装されたFPGAにインプリメントする計画を立てました。現状ではとりあえずトラポから44.1/48kHzのS/PDIFなりI2Sを受けてDSD256に変換し、それをDSD1794Aなどの既存のDACチップなどに突っ込んでD/A変換するのが手っ取り早いです。

DACチップを使わずに、DSD出力を数タップのアナログFIRフィルタを通すなどしてやれば、バッファリング・ゲイン調整などを施してDACチップレスなD/Aコンバータを作ることもできそうです。

下のチャートは、3.2kHz-0dBの正弦波を、出来上がった回路でDSD256に変換してみた結果です。測定系の事情により、周波数軸の目盛の数字は32倍にして結果を見てください (FFT によるDSDそのままの周波数スペクトラムを示しています)。

 

次に、参考までにKORGのAudioGateで1.6kHz-0dBの正弦波をDSD128に変換した場合のFFTもとってみました。同様に、測定系の事情で周波数軸の目盛の数字は16倍にして結果を見てください。

紆余曲折は続くと思いますが、時間を見つけて実装していきたいと思います。

続く、かも・・・

 

TwonkyMedia Server もマウントしてくれるんですね

いささか唐突ですが、ThinkPad X31を使ってのVoyage MPD の導入検討を経て、皆様に遅ればせながらアルミ箱のStarter Kitを購入しました。

私の場合は、SAMBAやNFSマウントではなく、”djmount”を使うことで、全CDやハイレゾファイルを入れて運用中のUPnPメディアサーバーである、QNAPのTS-119上に構築したTwonkyMedia Server をマウントしてみました。

(U)PnP (Plug & Play) というだけあって、もしかしたら、SAMBAやNFSで使えるようにするより簡単だったかもしれません (^o^。 もっとも、初めて設定するときは(Plug & Pray) でしたが・・・。

上の写真はWindowsのGMPCですが、それらしい感じでライブラリーが見えています。

メーカー製のネットワーク・オーディオ・プレイヤーが採用している、いわゆるDLNAとは全く違った流儀で動作しているようですので ( 少なくともメディアレンダラーは楽曲ファイルのデータベースをそれ自身には置かないはずです )、現状ではコントローラーアプリには選択の自由はほとんど無いようです。

とは言え、外面上はそれらと同じような使い方ができていると思われます。そしてなにより、ギャップレス再生がきちんとできているというのがうれしいところです。メーカーの製品でそれがきちんとできるものは非常に高価だということを考えると、Starter Kit > USB DDC (UDAなど) > DAC といういささか煩わしい接続体系になる点を差し引いても、メリットが余りあると考えています( この点に関してはやりたいことがあります・・・)。

レンダラーにWindows PC と Foobar2000を使って、こちらはDLNA準拠で同じようなことはできますが、この小さなアルミケースだけで(ディスプレーやキーボードがいらない!) ギャップレス再生プレイヤーになってしまうのですから、これは嬉しいです。少しづつ聴きこんでみたいと思います。

これで、某社のネットワークプレイヤーがお払い箱にできそうです。

なお、Voyage MPDの導入に当たっては、asoyaji さんのブログには大変お世話になりました。どうもありがとうございます。

追記(7/10):

UPnPメディアサーバーをマウントしてDBを構築すると、検索性能を上げるために?「アーチスト」「アーチスト-アルバム」・・・など、複数のカテゴリーから検索・選択できるようなツリーを作りますので、単なるディレクトリ・ツリー型よりもDBのサイズが大きくなるようです。

どうやらStarter KitのALIXではメモリが足りないのでしょう。DB構築の途中で ” Transport endpoint is not connected” と言われてDBが消えてしまいます。Voyage MPDではDBをメモリ上に構築して運用しているようですので、256MBでは到底足りないのではないかと勝手に想像しています。

仕方がないので、Starter KitにはNFSで同じTS-119をぶら下げることにしました。これなら、コントローラにMPoDを使えばネットワーク上にあるWindowsマシンをわざわざ立ち上げておかなくても運用ができます。

メインメモリのサイズからして、あまりたくさんの楽曲を ( 特にdjmountを使ったUPnPでは) 管理することには無理があるのだと思います。プレイヤーまで含めてすべてがUPnP(DLNA)で動作するシステムであれば、DBはサーバー上にあって、検索・選曲はコントローラとサーバーとの間だけで完結していますので、この点でプレーヤー側のメモリサイズに影響を受けることは無い仕組みになっています。

asoyajiさん情報では、Voyage MPDは次バージョンで正式にDSD (たぶんDoP方式でしょうね) に対応するようですので非常に楽しみです。願わくば、GMPC(Windows)やMPaD(iPad)上からDSDIFFファイルが直接選択できるようになればうれしいです。

TS-119 は、ThinkPad X31に構築したMPDを使うときにTwonkyMedia Server としてマウントし、このStarter Kit を使う環境では NFS としてマウントしてしばらく運用してみようと思います。この Starter Kit はTiny システムとして適材適所で利用することにします。

Ayre QA-9 A/D Converter

Ayreの新製品である、” QA-9 A/D Converter Pro Model ” ですが、なんと、DSD256のSDIF-3/DSD-RAW を出力できるようです。さすがにDSD信号まではUSB経由でPCに吸い込むことはできないようですが・・・。

ということで、晴れてDSD256の音源が巷に出てくることが期待できます ??? (^o^) ???

とりあえず、UDA基板では、バルク転送のみではありますが、DoP版の方で6月の頒布分からDSD256(DSDIFF)の再生に対応して、いつか来るかもしれないその時を待つことにしました。

今のところチェック用のDSD256音源が必要な場合には無理やりでっち上げるしかありませんので、プログラムを作ってテスト用の1kHz-3dBの正弦波のDSDIFFを生成して実験しました。DSD1794Aでも、DSD256までは再生可能ですので、現在入院中のES9018S評価基板が無くても確認ができました。

ちなみにプログラムは公開します。 興味のある方はどうぞ。実行すると fs=11.2896MHz / 20数bitの正弦波を内部で生成しておいて7次デルタシグマで1bitに再量子化するプログラムです。3分10秒のファイルが出来上がります。何も考えずに倍精度の浮動小数点演算を多用しているからか、結構時間はかかりますのでご了承ください。

ところで、DSD256にもなるとファイルサイズが尋常ではありません。私は常々愛用のREVOXデッキで再生してテープからDSD128でファイル化をしておりますが、非圧縮なのでDSD128でもディスクを圧迫して難儀しております。HDDを使えば何ということはないのですが、SSDを使いたいので、現時点ではファイルサイズは切実な問題なのです。

と、ここまで書いてきて気が付いたのですが、SDIF-3なり、DSDRAWなりでDSD256をキャプチャできる装置っていうのは業務用で存在するのでしょうか?

 

ES9018SのI2S/DSD自動切替え可能な接続

2つ前の記事で、ES9018SのDSD, I2Sモード時の接続について書きました。ご存知の方、ユーザーの方もたくさんいらっしゃると思いますが、Buffalo IIという有名なDAC基板があります。この基板ではUDA基板と接続してI2SとDSDの自動切り替えを実現していたようで(スミマセン、自分で所有していないので正確なところはちょっとわかりません) 、前の記事のようなロジックを入れずにどうやって実現しているのかと不思議に思っていました。

が、先日ある方に教えて頂いてその秘密がわかりました。ES9018Sには8つのDACに入力する信号のルーティングというか、マッピングを変えられるレジスタがあり、BCLK/LRCK(DSDL)/SDATA(DSDR) を ES9018Sの8本の入力ピンに上手に繋ぎ、適切にマッピングを行うと、入力がDSDならDSDモードへ、PCMならPCMモードへ自動的に切り替わるようにできるそうです。

私もESSの評価ボードで動作を確認しました。上述したレジスタ (アドレス14d) の上位4bitで、DAC8/7/4/3の入力として、それぞれ自分自身の入力信号か、DAC6/5/2/1と同じ入力信号かを選択することが可能だったのです。STEREOの場合、DAC1/3/5/7をLch用、DAC2/4/6/8をRch用とした場合、BCLK/LRCK(DSDL)/SDATA(DSDR) を ES9018Sの8本の入力ピンにのように繋いでやれば良いということがわかりました。

このマニアックなサイトにES9018SとBaffalo DACの詳細が明らかにされています。それにしてもこの接続法は言われなければ思いつかないです。レジスタを変更することができる立場である場合には余計なロジックを追加することなく実現できることがわかりました。

ということで、下の記事で付け足したCPLDの基板は早くもお役御免になってしまいました(笑  UDA基板のユーザーの方でもしも欲しい方がいらっしゃれば先着1名様に差し上げますのでご連絡ください。

ES9018Sの評価ボード

そういえばずいぶん前にグローバル電子さんからES9018Sの評価ボードを調達していたのを思い出し、UDA(DoP)基板につないで音出しをしてみることにしました。

ES9018SというチップはSPDIF/I2S/DSDを入力可能なDACですが、4パラ用(本来は8ch用?)にチャンネル当たり4つのDACが含まれていて、それぞれのDACに独立にデジタル入力がアサインされているので、2ch用として考えると一見ごちゃごちゃしているように感じられます。

チップとしては電源投入時にデフォルトでS/PDIF入力が選択されるようになっていて、レジスタでI2S/DSD入力として使うように設定すれば、 「基本的に」I2SとDSDを自動認識して切り替えてくれる優れ物、であることは皆さんご存知のところだと思います。

まず、ビットクロック専用 ( I2S/DSD共 ) の入力である”DATA_CLK(60)”があり、8つのDACは、Lch用にDAC1/3/5/7、Rch用にDAC2/4/6/8がアサインされていて、DSD信号を入れる場合は Lch用の各DACへはそれぞれ”DATA1_SD1(59)”, “DATA3_SD3(57)”, “DATA5_SD5(55)”, “DATA7_SD7(53)” の各ピンにDSDLを, Rch用の各DACへはそれぞれ”DATA2_SD2(58)”, “DATA4_SD4(56)”, “DATA6_SD6(54)”, “DATA8(52)” の各ピンにDSDRが入るようにしてあげます。

I2S信号を入れる場合は、”DATA1_SD1(59)” にLRCKを入力し、SDATAを”DATA2_SD2(58)”,  “DATA3_SD3(57)”,  “DATA4_SD4(56)”, “DATA5_SD5(55)” に入力すれば、チップがチャネルごとにDAC1からDAC8まで振り分けてくれます。

UDA基板ではビットクロックはI2S/DSDで共通なので、LRCK(DSDL), SDATA(DSDR)の各ピンを、制御信号DSDH(H:DSD/L:I2S)を使ってモードに応じて上述したように割り振ってやれば、PCMとDSDのシームレスな切替再生ができることになります。

とりあえず手元にAlteraのMAX II というCPLD基板があったので、UDAのI2S/DSD出力端子から信号をもらって、モード毎に(DSDHを見ることで)ES9018Sに振り分ける回路を組んで音出しをしたところ、シームレスな切替再生が可能であることを確認しました。

こんな多ピンの大きなCPLDが必要なわけではなく、10数本のピンがあれば十分で、SN74LVC157やバッファなどを使っても簡単に実現できるでしょう。

なによりも、ES9018Sのチップ的にはDSDとPCMを自動で認識してくれますのでその都度レジスタへアクセスして切り替える必要がなく、非常に合理的です。 

回路図よりもコードの方がわかりやすいと思います。下の左辺はES9018S側のピン名、右辺はUDA側のピン名。UDA側は、信号名”DSDL”と”DSDR”はDSDモード時の機能名で、PCM(I2S)モード時には同じピンがそれぞれ LRCK, SDATAとして機能します。

   DATA_CLK <= BCLK;
   DATA1_SD1 <= DSDL;
   DATA2_SD2 <= DSDR;
   DATA3_SD3 <= DSDL when DSDH = ‘1’ else DSDR;
   DATA4_SD4 <= DSDR;
   DATA5_SD5 <= DSDL when DSDH = ‘1’ else DSDR;
   DATA6_SD6 <= DSDR when DSDH = ‘1’ else ‘0’;
   DATA7_SD7 <= DSDL when DSDH = ‘1’ else ‘0’;
   DATA8 <= DSDR when DSDH = ‘1’ else ‘0’;

久しぶりにセットを組み上げ・・・

知人にご依頼いただいたセット ( 3つの筐体 ) をようやく組み上げました。

一番下は横幅320mmのDoP対応USBDACです。UDA(DoP)とDSD1794A差動出力基板で構成しています。

中央がPCM4202のDSDRAW/SPDIF出力A/Dコンバータ。

一番上がUDA(DoP)が入った再生・録音のI/Oボックスです。中段のA/Dコンバータを接続してDSDレコーダーになります。また、DoP対応再生器として再生信号 ( I2S/DSD ) をHDMIケーブルで送信できます。今日現在で接続可能な機種として、カプリースがあります(たぶん)。

A/Dコンバータの電源も±15V / +5V 2系統をトランスごと収めた密集度の高いもの。これをタカチのUS-200Hに格納しています。

DoP版のPlayAudio

特にお知らせしておりませんでしたが、UDA基板のDoP版リリースに伴い、バルク転送モード専用アプリである”PlayAudio.exe”に、DoP版を追加しています。

最大の相違点は、DoP録音版のUDA基板に対応したことです。従来版のPlayAudioではDoP録音版をご使用になれません。必ずこちらの版をお使いください。

また、DSD1794A (完成基板、デジタルドメイン生基板)基板のモード制御をおこなうためのチェックボックスを省いています。DoP版以外のUDA基板では、UDA基板のP2からDSD1794A基板に3ピンのワイヤーで制御線(I2C)を繋いでいますが、バルク転送でこれを生かすためにはチェックボックスをチェックした状態でリストにファイルをロードする必要があります。

DSDIFFファイルをロードしたらDSD1794AをDSDモードに、WAVEファイルをロードしたらDSD1794AをPCMモードに、USBマイコンからマニュアルで変更するようになっているのです(ちなみに、アイソクロナスモードではこれを自動的に行っています)。

DoP版では、UDA基板のP4からDSD1794A基板に4ピンのワイヤーで制御線(I2C)を繋ぐように変更されておりますが、この制御線はファイルのロード時にDSD/PCM切替を自動的に行ってしまいますので、 予め明示的にチェックしておく意味がないからです。

DoP版での録音の手順 

最初に録音したいモード(DoP版の場合はDSD128かDSD64のみ)のラジオボタンを選択し、”Apply” ボタンを押してモードを確定させます。この操作によってUDA基板の動作クロックがオンボード発振器からワードクロック入力に切り替わります。

赤いボタンを押すとファイルダイアログが出ますので、ファイル名を指定して”OK”を押すと録音開始です。STOPボタンを押すまでUDA基板のレベルメータが動作します。

録音されたファイルを保存するドライブには、USBコネクタ経由で接続するドライブは避けてください。デフラグを実行した内蔵ディスクへの書き込みをお勧めします。