現状運用しているPre AmpにはCombo384と自作DACの組み合わせが組み込まれていてDSD再生が可能。PCとUSB接続し、foobar2000のリアルタイムPCM->DSD変換を使用して音楽を聴いている。
こちらの簡易ブロック図は以下の通り。PCM1792にDSD再生させるためにはレジスタ制御が必要なのでAtmega328PUを使ってCombo384のDSDインジケーションの出力を割り込み端子に入れて、DSD⇔PCM切り替え発生でi2cでレジスタを書き換えている。
一方で別の部屋で使用しているLAN DACはラズパイを導入してミュージックサーバーとして機能しているものの、ラズパイのi2sから外部クロック入力によりPCMを取り出して再生しているので、DSDは再生できない。
こちらの簡易システム図は以下の通り。LRCKとBCKを74HCシリーズのロジックで組み、PCM1792とラズパイに供給している。
foobar2000のリアルタイムPCM->DSD変換に慣れてしまうと、LAN DACがPCMしか再生できない事に物足りなさを感じていた。
以前からDSD over PCM(DoP)という技術でDSD伝送できることは知っていたので、ラズパイでこれを受けてi2sで出力し、後段にFPGAを組み合わせてDoPで送られたDSD信号を抽出してPCM1792に入力できないものかと考えていた。
DAC部分の構成はPre Ampのものと同様にして、ラズパイに組み合わせるFPGAにCombo384と互換の出力機能を持たせてDAC基板をPre Ampと共通化したい。
以下のような構成となる。
FPGAの開発はverilog-HDLを用いて20数年前まで仕事でやっていたので、やってできなくはない。FPGA開発ツールやFPGAそのものが安価に手に入るかから調べてみた。
AmazonにもALTERAが搭載されているものが数千円で売っており、これで良いかなと思っていたが、よくよく調べてみると秋月にLatticeのFPGA(LCMX02-256HC-4TG100C)が600円で売っており、焼きこみのHWキットも発売されていた。
まずはこれでやってみるかということで、無料の開発環境が無いか調べてみた。
そうすると、verilogのsimulationはVisual Studio CodeとIcarus Verilogの組み合わせで構成できそうという事がわかった。そこでDoPの仕様書を見ながらi2s信号からDSDを抽出しPCM1792に出力するソースコードを書き、simulationまで行った。
i2s信号からDoPマーカーを抽出し、DSDデータの中身を取り出しLとRの信号をPCM1792が受信できるように出力すればいいので、ロジックはそれほど難しくはない。DoPマーカーの0x05と0xFAが決まったタイミングで周期的に来るのを見てDoPが来たかを判別すればよい。
論理合成とFPGAへの焼きこみについては、Lattice社のDiamondというツールを使用して秋月のキットを介してFPGAと接続すればこちらも無料で可能だった。
22M/24MのクロックをセレクトしてFPGAのグローバルクロックに入力しピン配置も決めて論理合成を行い、実機にFPGAを搭載した。
FPGAは0.5㎜ピッチなので、これを2.54㎜ピッチに変換する基板を購入し、ラズパイのシールド基板の上に搭載する形となった。
でっち上げの試作基板なので、配線ごちゃごちゃなのはご容赦。
基板に搭載してデバッグを進める段になり、DSDのデータが必要となった。当初はfoobar2000のリアルタイムDSD変換を行いながらUPnPでDoP信号をネットワーク出力できると思い込んでいたがやり方がわからなかったため、TEACのソフトを用いてPCMのファイルのいくつかをテスト用にDSD64に変換したものを作った。
動作確認としてはPCMで送られたものはPCMで再生、DSDをDoPで送られたものはDSDで再生できるかを確認した。
simulationをかなりしつこくやったので、実機でのFPGAのデバッグはそれほど手間取ることはなかったが、20年ぶりのverilog-HDLではちょっとしたロジック記載の抜け漏れがあり、simulationは何となく通っても実機で動作しない箇所が少々あった。
そこを修正しつつ、何とか動作させることができたが、PCM信号の中には疑似的にDoPマーカーと判定されるものがそれなりの確率で発生するため、曲によってはかなり長い期間DoPマーカーの連続性をみてDSDの判定を行わないとPCMをDSDと誤検出してしまうことがあった。
たまたま見つけた誤検出しやすい曲で何度もテストして、どのぐらいの期間DoPマーカーの連続性を見るか決めた。
これでDSD64の再生に成功した。
次に、DSD128に対応できないか考えた。ラズパイからPCM352kが出力出来れば、CPLDでDSD128の信号に変換してPCM1792で再生する事は可能。
そう思っていた矢先、急にラズパイが動かなくなった。いろいろ確認していると、3.3Vの電源が出ていない。5VはACアダプタから供給されているものがそのまま出ていたので、ラズパイの電源ICが壊れてしまったようだ。
というわけで、ラズパイの調達からやり直しとなった。