2012年4月30日月曜日

DoPをADATで

 DoPをADATで運用するためのFPGAの改造をGWの連休中に何とか立ち上げようと開始しました。


 以前 HQ Player  dCS方式DSDネイティブ出力が手持ちのDDCでも出来るか ということでこの時はSPDIFでの確認ですが、結果ノイズだらけで再生できずで頓挫してしまいましたが、いろいろ情報やツールも出揃ってきたので、ADATで再挑戦してみます。


 まずはADAT上のDoPのフォーマットについて...
 


ADAT SMUXのチャネルマッピング

 上図はADAT(SMUX)のPCMデータのマッピングです。ADATは伝送速は、11.2896Mbit/s(44.1kHz系列) or  12.288Mbit/s(48kHz系列) 固定で、44.1k/48kHz時は8ch、88.2k/96kHz時は、4ch、176.4k/192kHz時は、2chを伝送することが出来ます。
 ステレオで扱う場合、44.1k/48kHz時は4つのステレオチャネル(a,b,c,d chとします)をa_ch L/R,b_ch L/R,c_ch L/R d_ch L/Rという順序でチャネル割当されます。
  88.2k/96kHz時は、2つのステレオチャネル(a,b chとします)をa_ch L 2sample /a_ch R 2sample , b_ch L 2sample /b_ch R 2sample ,という順序でチャネル割当されます。
  176.4k/192kHz 時は、1つのステレオチャネル(a chとします)をa_ch L 4sample /a_ch R 4sample という順序でチャネル割当されます。


 DoPでDSD64を伝送する場合、176.4kHzのモードを使用します。



DoP DSD64のチャネルマッピングと受信後のフォーマット変換(*差替版)


1フレーム中のLch 4sample分の内、最初の1sampleの下位16bitをMSB側として、次の1sampleの 下位16bitをLSB側として32bitに連結し、FPGA内部バッファに書き込みます。その他も同様に2sample分の下位16bitを結合して32bit化してFPGA内部バッファに書き込みます。
 *上記でも問題なく処理できますが、DSD128と制御方法を揃えるため、Upper側16bit、Lower側16bitを個別にメモリへライトすることにしました。


 DoPでDSD128を伝送する場合、1本のADATラインでは伝送容量が不足するため、2つのADATラインを使います。各ラインは176.4kHzのモードを使用します。

DoP DSD128のチャネルマッピングと受信後のフォーマット変換 (*差替版)


1本でLchまたはRchを伝送します。ADAT 8chに順番にLchまたはRchの16bit×8コ分のデータが埋め込まれているので、 DoP DSD64の場合と同じルールで 2sample分の下位16bitを結合して32bit化してFPGA内部バッファに書き込みます。  Lch はUpper側16bitにRchはLower側16bitに個別に書込メモリ上で、整列させます。

 
 前回の時は、内部ではDoPのフォーマットのまま扱い、出力時にDSDフォーマットに変換する方式をとっていましたが、プレーンDSDの入出力とDoPの入出力を相互にうまく扱うには一旦DSD(メモリ格納時32bit化)して扱う方が、処理し易いと思われるので、入力側でDSD化するように変更することにしました。
 

0 件のコメント:

コメントを投稿