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関連で丁重なメールを頂いており、誠にありがとうございます。大変申し訳ありませんが個別にお返事ができませんことをお詫び申し上げます。現在の進捗を持ってご報告に代えさせて頂けますよう、どうかよろしくお願いします。

基板修正

PCM–>DSD変換用基板のFPGAをXilinxのSpartan6 (SLX9) 144pin から、Altera の Cyclone3 (EP3C25)144pin へと変更すべく、基板修正作業を行いました。FPGAの変更により、より大規模な演算回路を作りこむことができます。

Altera を使うのは久しぶりですので、回路をミスっていないか少々心配です・・・。
製造工場から上ってきたら早速2, 3枚実装を頼んで検討を続けます。

けじめ

『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 システムとして適材適所で利用することにします。

GPSクロックとバルク転送

UDA(DoP録音版)基板のユーザー様から伺った話です。

以前の記事に書きましたが、録音版のUDA(DoP版)基板には、DSD録音のために外部からワードクロックを入力できるようになっており、バルク転送モードではワードクロックにて一応再生もできるようになっています。

その方は、DSD1794A基板のDACとUDA基板にて構成されたDACをオーディオ店に持ち込まれ、アキュフェーズのセパレートアンプとB&Wの802で試聴されたところ、持参されたDSD音源での試聴であまりにも大きな変化に大変驚かれたそうです。以下にお言葉をお借りすると・・・

「まず音場が大きく広がり特に奥行き方向の変化が大きく、一音一音クリア―に出てきます。今まで良いと思っていた音がバックグランドノイズに埋もれていたような感じです。これはDACや電源を見直しても改善出来ないと感じ、帰りには、GPSクロックを発注していました。是非ともワードクロック入力を標準装備としてください。」

とのことでした。話題のGPSクロックはインフラノイズのGPS-777という製品だそうです。

恐るべし!GPSクロック、です。アンテナ設置の必要があったり、お値段も安くはないので気軽に試すことはできませんが、UDA(DoP)録音版をお持ちの方で、クロックジェネレータもお持ちの方はお試しになってみてください。

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名様に差し上げますのでご連絡ください。

EMI ClassicsもHDTracksで買えるようになる?

私が知らなかっただけかもしれませんが、HDTracksを徘徊していたら、見たことのあるタイトルが24bit/96kHzで販売されていました。

種類は多くありませんが、これだけではなく、最近リリースされた他のSACDと同じタイトルも販売されています。

もともと、大手レコード会社の所有する音源のアーカイブは24/96だそうですから、DRM Freeで出るのでしたら、SACDよりも本質的に合理的ではないかと思います。聴き比べも難しいですが、オリジナルの24bit/96kHzそのものでありますように・・・(ディスク起こし+サンプリングレート変換でなければ良し、という意味で)。

願わくばEMI クラシックスも、「日本からのユーザーには売れません」ということにはならなければ良いのですが。

これまた私だけが最近知ったことかもしれませんが、ドイツグラモフォンのタイトルもいくつかHDTracksから出ています。が、こちらはなぜか24bit/88.2kHzが多いです。グラモフォンもオリジナルは24bit/96kHzではないかと思いますので、こちらの方は残念ながらテープ起こしならぬ、ディスク(SACD)起こしかもしれません。

(6/20 以下追記)

続いて本日はカール・シュリーヒト、VPOのブルックナー第9番 (24/96) を購入しました。

この音源はアナログっぽくて良いと思いました。第一楽章に入る前など、モータの回転するような低周波と、プリゴーストみたいな音もかすかに残っているように感じられます。控えめなマスタリング作業の賜物でしょう。

ライナーノーツを見ると、なんとアナログディスクの写真になっています。まさかブラックディスク起こしでしょうか?仮にそうだとしても私はこの音源には納得しました。SACDの方は買っていなかったので残念ながら比較ができません!( —> またまた物欲発生でしょうか?)

それはともかく、Beatlesのリマスターでも “Love Me Do” だけはブラックディスク起こしだそうですし、プロ用のDAWではスクラッチノイズを消すくらいわけなさそうです。

 

 

 

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’;