現状運用している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が壊れてしまったようだ。

 

というわけで、ラズパイの調達からやり直しとなった。