2010年12月31日金曜日

当面の予定

 目標としては、今年中には完成させるつもりでしたが、実際は大晦日になっても半分も実現できていない状況となっています。当初案より大分変わってしまっているのもありますが、FPGAの論理設計とデバッグ、基盤の部品選定、調達作業には、やはり結構時間がかかりそれが大きいかなと思います。

 今後の当面の予定として、下記を早期に実現させたいと思います。

 ・SDRAMバッファモードの組み込み
    現在、回路作成、コーディング中 1/9あたりには動かしたい。

 ・TOS 192kで接続
    SCD-XE600は192kでしか出力してくれないので早めになんとかしたいので

 ・DSD受信回路/送信回路
    受信回路自体はできたので、SDRAMバッファモードでBuffaloIIにつなぎこんで鳴らしてみたい。
    エレアトさんのブログを見て"ベートーヴェン/交響曲第6番ヘ長調
    作品69 「田園」・「エグモント」序曲作品84 [SACD Hybrid + DVD-ROM]"も発注したので、
    5.6448MHzもできれば。

 ・I2S-LVDS-HDMI入手

    IO基盤の作成はまだまだかかりそうなので、Fidelix I2S-LVDS-HDMIをCaprice-I2Sとの接続用に入手

 ・mbed I2C制御とPC通信手段   
    BuffaloIIとFPGAの制御の制御ができるように

 ・FPGAのI2C受信回路
    そろそろスイッチだけでは、制御しきれなくなってきたので



  MR-1
 直接は関係ないですが、Korgの1bitモバイルレコーダーMR-1が結構安売りしているので、ポチってしまいました。

  FLAC
 それからPCMについては、基本waveファイルで保存していましたが、管理が面倒になってきたのでFLACに移行させようかと考え中。(システム構成図を修正)

 それでは、良いお年を...

2010年12月29日水曜日

DSD Phase Modulation Mode 受信回路

 DSD Phase Modulation ModeのデータをBCKを使用せずに、DSDdataのエッジを利用して受信しSignalTapIIにキャプチャする回路の回路図とSystemVerilogのコードです。片チャネル分。
 この回路をベースにI2S、ADAT、S/PDIF受信回路にDSD受信機能として統合する予定。片チャネル分のため、2回路化、L/Rの多重処理が追加で必要になります。現在サンプリングクロックとして98.3040MHzを使用していますが、90.3168MHzに変更します。

     DSD Phase Modulation Mode 受信回路構成


DSD Phase Modulation Mode 受信回路 SystemVerilogコード
   

`timescale 1ns/1ns
module DSD_capture(

  input  wire          m_clk,                 //sampling clock 98MHz
  input  wire          resetN,        
 
  input  logic         dsd_in,                //DSD_L or DSD_R input
 
  output logic         dsd_out,               //DSD monitor out
  output logic         dsd_alt_out,           //DSD monitor out alt
 
  output logic         cap_clk,               //SignalTapII capture sampling clock
  output logic         dsd_cmp,               //DSD and DSD alt inv compare
  output logic         dsd_5apat              //5A5A5A5A pattern match
);

 logic [3:0]  sdata_input_shift;
 logic     edge_detect;

 logic [5:0]   dsd_inc_word_time = 6'h0;
 logic     fw_window_clr;
 logic     fw_window;
 logic     hw_window;
 logic     fw_edge_det_flg;
 logic     fw_edge_det;
 logic     fw_edge_nodet;
 logic     hw_edge_det_flg;
 logic     hw_edge_nodet;

 logic    bit_clk;
 logic    bit_clk_mask;
 logic    alt_bit_clk;
 logic    alt_bit_clk_mask;

 logic    cmp_ini_flag;

 logic [31:0] dsd_data;
 logic [31:0] dsd_data_alt;

 logic [4:0]    capture_counter;

 
 enum {synclos=0,presync1 =1,presync2 =2,presync3 =3,presync4 =4, sync =5, fwprtect =6 } State, NextState;
 

//// dsd input section ////  
//shift_adat_input :
   always_ff @(posedge m_clk)
      sdata_input_shift <= {sdata_input_shift[2:0] , dsd_in};

// detect_adat_sync :
   always_ff @(posedge m_clk)begin
      if ((sdata_input_shift[2:1]==2'b01) || (sdata_input_shift[2:1]==2'b10))
         edge_detect <= 1'b1;
      else
         edge_detect <= 1'b0;
   end

   always_ff @(posedge m_clk)begin
      if (edge_detect==1'b1 && State == synclos)   dsd_inc_word_time <= '0;
      else if(edge_detect==1'b1 && fw_window == 1) dsd_inc_word_time <= '0;
      else                                         dsd_inc_word_time <= dsd_inc_word_time + 1;
   end

// edge detect window
   assign fw_window_clr = (dsd_inc_word_time==6'd02)  || (dsd_inc_word_time==6'd37) ;
   always_ff @(posedge m_clk)begin
      if (dsd_inc_word_time==6'd32)      fw_window <= '1;
      else if(fw_window_clr)             fw_window <= '0;
   end

   always_ff @(posedge m_clk)begin
      if (dsd_inc_word_time==6'd15)      hw_window <= '1;
      else if(dsd_inc_word_time==6'd20)  hw_window <= '0;
   end

// fw_edge_det & hw_edge_det
   always_ff @(posedge m_clk)begin
      if (fw_window && edge_detect)      fw_edge_det_flg <= '1;
      else if(fw_window_clr)             fw_edge_det_flg <= '0;
   end

   always_ff @(posedge m_clk)begin
      if (fw_edge_det_flg && fw_window_clr)   fw_edge_det <= '1;
      else                                    fw_edge_det <= '0;
   end
 
   always_ff @(posedge m_clk)begin
      if (! fw_edge_det_flg && fw_window_clr) fw_edge_nodet <= '1;
      else                                    fw_edge_nodet <= '0;
   end
 
 
   always_ff @(posedge m_clk)begin
      if (hw_window && edge_detect)      hw_edge_det_flg  <= '1;
      else if(dsd_inc_word_time==6'd20)  hw_edge_det_flg  <= '0;
   end

   always_ff @(posedge m_clk)begin
      if (! hw_edge_det_flg && dsd_inc_word_time==6'd20) hw_edge_nodet <= '1;
      else                                               hw_edge_nodet <= '0;
   end

// Sync State Control
   always_ff @(posedge m_clk, negedge resetN )begin
         if(!resetN)                                            State <= synclos;
         else if(m_clk=='1)                                     State <= NextState;
      end           

   always_comb begin
      case (State)
         synclos:begin
                if(hw_edge_nodet)                               NextState = presync1;
                else                                            NextState = synclos;
            end
         presync1:begin
                if(fw_edge_det)                                 NextState = presync2;
                else if(fw_edge_nodet)                          NextState = synclos;
                else                                            NextState = presync1;
            end
         presync2:begin
                if(fw_edge_det)                                 NextState = presync3;
                else if(fw_edge_nodet)                          NextState = synclos;
                else                                            NextState = presync2;
            end
         presync3:begin
                if(fw_edge_det)                                 NextState = presync4;
                else if(fw_edge_nodet)                          NextState = synclos;
                else                                            NextState = presync3;
            end
         presync4:begin
                if(fw_edge_det)                                 NextState = sync;
                else if(fw_edge_nodet)                          NextState = synclos;
                else                                            NextState = presync4;
            end
         sync:begin
                if(fw_edge_nodet)                               NextState = fwprtect;
                else                                            NextState = sync;
            end
         fwprtect:begin
                if(fw_edge_nodet)                               NextState = synclos;
                else if(fw_edge_det)                            NextState = sync;
                else                                            NextState = fwprtect;
            end
      endcase
   end


//bit_clk gen :
   always_ff @(posedge m_clk)begin
      if (dsd_inc_word_time==6'd26 && bit_clk == 1'b0 && bit_clk_mask == 1'b0)
               bit_clk  <=  1'b1;
            else
               bit_clk  <=  1'b0;
   end

   always_ff @(posedge m_clk)begin
      bit_clk_mask  <= bit_clk;
   end

   always_ff @(posedge m_clk)begin
      if (dsd_inc_word_time==6'd09 && alt_bit_clk == 1'b0 && alt_bit_clk_mask == 1'b0)
               alt_bit_clk  <=  1'b1;
            else
               alt_bit_clk  <=  1'b0;
   end

   always_ff @(posedge m_clk)begin
      alt_bit_clk_mask  <= alt_bit_clk;
   end


//dsd data s/p
   always_ff @(posedge m_clk)begin
      if(bit_clk)  dsd_data <= {dsd_data[30:0],sdata_input_shift[2]};
   end

   assign dsd_out = dsd_data[31] ;
  
   always_ff @(posedge m_clk)begin
      if(alt_bit_clk)  dsd_data_alt <= {dsd_data_alt[30:0], !sdata_input_shift[2]};
   end

   assign dsd_alt_out = dsd_data_alt[31] ;
  
//clk_counter
   always_ff @(posedge m_clk)begin
      if(dsd_data == 32'h5a5a5a5a && cmp_ini_flag) capture_counter <= 5'h0;
      else if (bit_clk)                            capture_counter <= capture_counter + 1;
   end

   always_ff @(posedge m_clk)begin
      if(State == presync4)                             cmp_ini_flag <= 1'b1;
      else if (dsd_data == 32'h5a5a5a5a && cmp_ini_flag)cmp_ini_flag <= 1'b0;
   end

//signaltap clk gen
   always_ff @(posedge m_clk)begin
      if(capture_counter == 5'd00 && hw_window) cap_clk <= 1'b1;
      else                                      cap_clk <= 1'b0;
   end

//compare dsd & alt_dad data
   always_ff @(posedge m_clk)begin
      if(capture_counter == 5'd00 && hw_window)begin
         if(dsd_data == dsd_data_alt) dsd_cmp <= 1'b1;
         else                         dsd_cmp <= 1'b0;
      end
   end

//detect dsd data 5a5a5a5a pattern

   always_ff @(posedge m_clk)begin
      if(capture_counter == 5'd00 && hw_window)begin
         if(dsd_data == 32'h5a5a5a5a) dsd_5apat <= 1'b1;
         else                         dsd_5apat <= 1'b0;
      end
   end


endmodule

DSDデータのキャプチャ2

 DSDデータの32bit中のHigh('1')の数を計数する機能を追加してSignalTapIIでキャプチャしてみました。
 
前回、まだ無音区間と考えた32bit中のHの数は、15,16,17bitのいずれかで占めている区間ですが、もしかするとすでに曲が始まっている部分にあたるかもしれません。
 というのは、どうも曲中でも、小音量部では、15,16,17bitが大勢を占めている可能性がありそうだからです。

 初めて”5A5A5A5A"パターン以外が出現したポイント(ほぼ中央の点線部)
(******set_bitnumが32bit中のH bitの数)


Hの個数がはじめて17個が出現したポイント
(左半分はすべて16個(10h))

 上のタイムチャートとしたのタイムチャートは別々に採取したものですが、前回の結果からすると多分上の右半分と下の左半分は、一部は重複している部分になるはずです。
 下のタイムチャートの右半分は、16bitが多数を占めた状態で15,16,17bitのみで構成されています。

32bit中の"H"の個数ですが、どうも演奏中になっても14~18個のパターンしかほとんど出てこない区間のあるソースもあるようです。意外と振れ幅が小さいようで、確認した中では最小は8個、最大は21個ですが、14~18個ぐらいが大部分を占めているように見えます。

32bit中、Hのbit数が9個のキャプチャパターン(点線部)

 無音区間の判別はなかなか難しいのかもしれません。移動平均フィルタをかければ見えてくるのかな?

2010年12月26日日曜日

DSDデータのキャプチャ

 DSDデータの受信回路を作成し、SignalTapIIでキャプチャしてみました。




上から
  1. State:5=同期確立中
  2. DSD受信データ(サンプリングクロックのほうが荒い為意味なし)
  3. ポジ側データを32bitパラレル化
  4. ネガ側データの反転を32bitパラレル化
  5. H:ポジ側とネガ側が一致 L:不一致
  6. H:"5A5A5A5A"パターン L:"5A5A5A5A"パターン以外
     DSDデータキャプチャ波形("5A5A5A5A"パターン以外初出部分)


 大体のところは、すでに某サイトで確認されていますので、追加情報的なところをあげてみます。

 実施手順
 ・同じディスクを①停止=>再生と②ポーズ=>再生の各々2セットをキャプチャ(片チャネルのみ)
 ・トリガ条件"5A5A5A5A"パターンか否かを常時監視し、"5A5A5A5A"のパターン出現でキャプチャ開始
 ・トリガ前512×32bit トリガ後3584×32bitのデータをキャプチャ
 ・cvsファイルにexportし、Excel上で編集・解析

 結果からわかること
 ・DSD Phase Modulation Modeのポジ側(前側)データとネガ側(後側)データの反転したものを比較し不一致がないかを検出する回路をつけたが、すべて一致した。
 これより、適当なジャンパーではあるが、伝送エラーは発生していないとほぼ断定できる。
 
 ・大体5A5A5A5A"以外初出から2500word(4byte)ぐらいのところで4つのキャプチャデータパターンが一致。なぜか32bit整列で比較しているのにすべて一致するという結果に、プレイヤー内では32bitあるいはそれ以上のbit処理であるためと推測する。

 ・5A5A5A5A"以外初出から4つのデータが一致するまでのword数には24word位のばらつきがみられた。もしかするとスタートボタンを押したときとピックアップの位置などが影響しているのかも?
 
 ・キャプチャした4096wordすべてのwordで32bit中の1の数は、15,16,17のいずれか。
  内訳は、15個:314、16個:3463 17個:320 
  ローパスをかければ直流。つまりキャプチャした部分はすべてまだ無音区間。


 曲間の区切りを検出するには、32bit中の1の個数を移動平均フィルタをかけ、閾値以上が検出される前n wordとかがよさそうです。

    キャプチャデータ 5A5A5A5Aパターン以外初出部

2010年12月25日土曜日

1万円を切るロジアナ ZEROPLUS LAP-C(16032)

 こんなに安いロジアナがあるんですねえ。
 秋月では¥9800 ZEROPLUS LAP-C16032 16chロジックアナライザ(100MHz,32k)




 こちらの情報だと、64kbit/chのひとつ上位機種と中身は同じで、何だかxxしてます。

 標準で、UART, I2C、SPI、7SegLEDのプロトコルをサポートし、2つほどいくつかあるプロトコルから無料で選択できるそうで、[ Digital Audio ]としては、AC97, HD Audio, I2S, PCM, S/PDIF, STBus が選択可能です。ちょっとそそられます。

 32kbit/chしかメモリがなく、SignalTap IIと どっこいどっこいともいえる点が微妙です。
 高い機種になると、メモリ容量が大きくなっていき、チャネル数が増えたり、サンプリング周波数も高速になったりしていきますが、値段が跳ね上がります。

 
 SignalTap IIをロジアナ代わりに使うとなると、準備に色々めんどくさいこともありますが、手間をかければ複雑なトリガ条件も論理で組めます。
 
 今まで知りませんでしたが、キャプチャしたデータをcvsファイルへExportもできます。

 また、現在確認しようとしてる、DSD Phase Modulation Modeをシリアルではなく、8bitや32bitパラレルで見ようとなると、サポートプロトコル外のためLAP-Cでは、難しいのではないかと思われます。今回については、シリアルでデータを観測しても何が何だか状態なので、とりあえずSignalTapIIでキャプチャでいきます。そのうち買っちゃいそうですけど... 

2010年12月23日木曜日

DSD BCK/DSD_L(R)波形 2

 一昨日にアップした波形、あまりに鈍りすぎでしたが、プローブのInput Capacitanceの影響が大きかったようです。×10にして再測定したのが、下記の波形です。
 やはり結構鈍っていますが、大分ましです。エレアトさんのブログでは、ダンピングに470Ωと以上に大きい値の抵抗値が入っているようで、これを47Ωに替えれば、かなり急峻になるようです。集合チップ抵抗で交換するのはちょっと大変そうなのでできれば手を出したくありませんが....



 BCK(上)とDSD_L(R)(下)(infinite persistence mode)


 
 再生停止時のBCK(上)とDSD_L(R)(下)

2010年12月22日水曜日

DSD Phase Modulation Mode

 DSD Phase Modulation Modeですが、データの周波数が倍になるためタイミングは厳しくなります。といってもたかだか2.8Mbit/s程度なのでクロック波形がきれいであれば問題ではないはずですが...

 見方を変えると、必ずエッジが存在するため、BCKなしでもデータが再生できることに気がつきます。S/PDIFやADAT等と同様にBCKなしでも受信可能です。


 しかも、BCLKネガエッジ側のDSD_L(R)データは、ポジエッジ側の反転データであるため、ポジ側とネガ側の反転データが一致するかどうかで、誤り検出として使用できるかもしれません。
 
 誤り検出として使えるかは、コードバイオレーションがないことが前提となります。たとえばS/PDIFの場合は、PreambleのX/Y/Zcode時は、"1"は"10"または"01"に0は"11"または"00"にエンコードするルールに反するコードを使用して実現しています。

 DSD Phase Modulation Modeもこのようなコードバイオレーションを用いていなければ誤り検出に使用できると思われます。

 また、BCKを用いて受信したデータと、上記のBCLKを用いないで受信したデータをコンペアすることによっても、完璧ではありませんが、データ誤りの検出方法として利用できることが期待でいます。

 
 BCKが鈍っていることを考えると、BCKを用いない受信回路の方が、確実にデータを受信できるのではないかと思われます。というか、今のBCK波形ではまともに受信できるか非常に怪しい。
 ということで受信キャプチャは、先ずはBCKを用いずデータエッジを利用してデータを受信する方法でやってみようと思います。 

 またFPGAとしては、BCKを用いないほうが、もうひとつメリットがあります。
 S/PDIF、ADAT、I2S、DSDなどの受信回路を共通回路化する場合、モードによってクロックを切り替えることは、できれば避けたいので、BCKを使用せずに受信できるのはありがたい。

2010年12月21日火曜日

DSD BCK/DSD_L(R)波形

某所でDSDデータの抽出ビットパーフェクトで試行錯誤中なので、気になって波形を採取してみました。
採取ポイントは、エレアトさんのサイト デシメーション基板その後、その5を参考に、同じポイントから引き出しています。


 BCK(上)とDSD_L(R)(下)(infinite persistence mode)


 上がBCLKで下がDSD_L(R)のどちらか、LとRはどちらか記録していませんが、同じ傾向で変わりありません。
 BCK波形がめちゃくちゃ鈍っています。プローブがぼろいせいもあると思いますが、いくつかに分岐させているようなので、そのせいが大きいのではないかと推測します。

 想定と異なるのは、DSD_L(R)の波形が、BCKの立下りでも変化している点です。DDR?


 再生停止時のBCK(上)とDSD_L(R)(下)

 こちらは、SACDマウントして停止状態でのシングルスイープ波形。 
 写真にBCK立ち上がりのDSD_L(R)だけを数字をプロットしてありますが、BCK立ち上がりでのDSD_L(R)は"0101 1010 0101 10・・”と"5A5A"連続パターンとなっています。

 BCK立下りでは、DSD_L(R)が、立ち上がり時のデータの反転になっています。最初の波形でもたち下がりは必ず反転していることがわかります。


 AK4399のデータシートを見ると、Audio Serial Interface Timing (DSD Normal Mode, DCKB bit = “0”)とAudio Serial Interface Timing (DSD Phase Modulation Mode, DCKB bit = “0”)の波形の図が載っており、後者のモードの波形は、立下りで変化するタイムチャートになっています。
 XE600はDSD Phase Modulation Modeのようです。
 結構このデータシートは見ていましたが、DSDはあまり注視していなかったので気がついていませんでした。でもそういえば、クロックの立下りにデータ変化点があるタイムチャートを見て、なんだこれと思ったことがありました。

 
 DSD Normal ModeよりDSD Phase Modulation Modeのほうが、BCKに対するDSD_L(R)の位相余裕がなかったり、電源ノイズでデータエラーが発生しやすいので、よりシビアに回路を作る必要があるようです。

 引き続き、FPGAに引き込みSignalTapIIでデータパターンを見れるようにしたいと思います。

2010年12月16日木曜日

Atlys Spartan-6 FPGA Development Kit

Atlys Spartan-6 FPGA Development Kit というFPGA開発ボード、2つのHDMI入力ポートと2つのHDMI出力ポート、AC-97 audio with line-in, line-out, mic, & headphone を装備しています。
 ユーザーマニュアルには、”EDK designs can use the xps_tft IP core (and its associated driver) to access the HDMI ports.”とあり、もしかするとHDMIからPCMデータ、DSDデータをモニタすることができるのかもしれません。



 Sim's blogさんに概要が紹介されています。
 ストロベリーリナックスさんで扱っています。

 ちょっと気になりますが、敷居が高そうなのでしばらく様子見。

2010年12月12日日曜日

e-onkyo DSD配信

e-onkyoでDSD配信が始まり、しかもDRMフリーということで、試しに購入してみようかと思い、まずまだインストールしていなかったKorg AudioGateをインストールして2Lの無料サンプルのDSDIFFを再生してみました。
 
 最初SCC-01で試したところ、再生はしているものの、全くぼろぼろの状態でRMEのASIOと相性が悪いのかと思いましたが、Samplitude11に変更したらきちんと再生できました。

Korg AudioGate


 そこでFFTのグライコ画面を見ると、どうも24kHzあたりでデシメーションフィルタをかけられているようです。

 DSD再生 B.Britten Simple Symphony Op. 4 -- Boisterous Bourrée 2L


  同じ2Lサンプルの96kHz版を再生してみると、こちらは48kHzあたりまで伸びています。
  聴き比べても、家の再生環境で私の耳では両者の違いはよくわかりません。

 96k再生 B.Britten Simple Symphony Op. 4 -- Boisterous Bourrée 2L
                    注:同じTimeではありません

 エレアトさんのデシメーションフィルタも[1] 88.2kHzモード 通過帯域  0-24kHz 阻止帯域  56kHz以上 [2] 176.4kHzモード 通過帯域  0-24kHz 阻止帯域  99kHz以上となっており、DSDの場合、24kHzあたりを通過帯域上限とするのが妥当なようです。


 e-onkyoのDSD配信タイトルは、24/192kHz、24/96kHzのものもあり、しかも価格は、DSD配信より安いようです。

 私の場合、デジタルチャンデバをデフォルト使用するためDSDでのデジタルフィルタが可能になれば別ですが、PCM変換が必須の状態であり、しかもデシメーションフィルタで24kHzでカットされている点で、24/192kHz、24/96kHzより分が悪そうです。
 e-onkyoのDSD配信は、24/192kHz、24/96kHzもある場合は、DSDより24/192kHz、24/96kHzを選択したほうが良さそうです。ということで、購入は保留。

 録音ソースがDSDで、PCM変換されずに配信されている場合は、DSDのほうが良さそうですが...


2010年12月11日土曜日

MultiDACのクロック構成

現状考えているMultiDACのクロック系です。図は、ある程度見やすいように省略しています。

 ・クロック系は電源を別系統とする(電源選定は検討中)
 ・極力デジタル系とのアイソレートを考慮する
 ・44.1k系列と48k系列サポートのたNZ2520SD - 24.576000M - NSA3449C、 NZ2520SD - 22.579200M - NSA3449C(日本電波工業) クロックを切り替えて使用 
  LVDSクロックドライバの入力が1つのみなので、CXOのOEで未使用側のCXOの出力を停止しワイヤードORの形式にするつもりです。
 クロックドライバは色々種類はあるのですが、いずれもものすごくピンピッチが細かく、しかも部品下になるので手付けは非常に困難で、選定が限られます。
 
 ・BuffaloII ES9018用にPure Rhythm 96MHzを源信に3分配させる。SMAコネクタ 50Ω同軸ケーブルで接続する。

MultiDACクロック系統概略図

BuffaloIIのCXOは、外すのが難しいようなので、図に示すように電源とGNDを浮かしてしまい。出力のダンピング抵抗も外し、空いたPADへ50Ω同軸ケーブルをジャンパすることにするつもりです。

 ES9018の場合、いわゆるMCKが必要ないため、悩ましいところですが、HDMI送信コネクタ6個各々へ22.579200M or 22.5792MHzを供給します。

 DE0のcycloneIII FPGAはIOが3.3V電源ですが2.5V LVDSの受信はできるようなので、LVDSで接続します。(本当に大丈夫か実験要)
 外で22.579200M  22.5792MHz切り替えているので1系統受信でよいはずですが、PLLの切り替えができるか不安なため2系統入力してあります。

 BCLK、LRCKは、サンプリング周波数により周波数を変更しなければならない点と、DATAとの位相規定があるためFPGAから出力せざるを得ません。

 何か改善点などありましたらアドバイスお願いします。

2010年12月9日木曜日

CAPRICE-I2Sやはり納期遅延

 予想通りですが、当初の入荷予定(12月中旬)が【入荷予定日】2011年1月中旬予定と連絡がありました。
 I2S接続環境が整えるられる目処はついていないので、まあ良いのは良いのですが、やはり残念といえば残念です。
 とりあえず、手組みでつなげられる準備だけはしとこうかな...

MultiDAC構成変更

 ちょっと規模をでかくし過ぎて製作が追いつかない感があるので、縮小方向で見直しました。といいつつ増えているものが結構ある気が...
 システム構成のページを変更後に差し替えました。

 主な修正点は、
 ・コントローラをmbedに変更し、本体との通信はbluetoothや赤外線通信などで検討すること。
  SDメモリプレイヤー機能やチャネルデバイダ機能は、コントローラではなくMultiDAC本体側に実装。

 ・mbedからBuffaloIIやAKM4399の制御することとし、これによりDE0のピンネックは解消

 ・USB Dual Audio ,USB Audio を別筐体としていたがMultiDAC本体に内蔵。HDMIコネクタで外部接続することとし、ケーブルの付け替えで、未使用時は他のDACなどに接続可能な構成に変更
 
 ・保留としてあったCAPRICE-I2Sを購入
 
 ・SCC-01の購入を検討
 
 ・QNAP NMP-1000P購入を検討

 追加機器はあるものの、製作を要する部分は減らしたつもりです。

2010年12月7日火曜日

QNAP NMP-1000P

 QNAP製メディアプレーヤー「NMP-1000P」が12月10日に発売されるそうです。
 詳細は、AV Watch QNAPサイト

 ”内蔵のWolfsonのWM8524高品質DACは、最高の無音やクロストーク性能と、8~192kHzにおける全てのオーディオ・サンプリングレートでの24bit変換をサポートすることで、106dbのSN比を提供します。”
 ”FLACロスレスオーディオファイルは、NMP-1000Pが変換無しでそのまま処理します。” 

 とありますが、S/PDIF(光)、HDMIからの出力もそうなのかどうかが読み取れません。
 多少検索してみましたが、前機種含め、情報が拾えません。
 前機種より価格も下がって、35,800円前後と比較的安く、機能的にも魅力的なので、nonPCでの再生環境として検討しても良いかも。
 
 SDメモリバッファ機能+FPGAでのチャネルデバイダが実現できれば、PCの必要性も薄まりますし。

2010年12月4日土曜日

Vision3D Blu-ray 192kHz再生

 Vision3DでのBlu-ray Discの再生機能を確認してみました。
 2Lの5.1 DTS HD MA 24/192kHzと2.0 LPCM  24/192kHzで収録されているBlu-ray Discで、Tos-Link出力を現状家で唯一192kHz光を受信できるMatrix mini-iに接続してみました。


Vision3D PowerDVD で2L Blu-ray Disc 24/192kHz再生

Matrix mini-i 192kHzで再生中

 最初、RealTek HDオーディオマネージャのコントロールパネルの設定で、ヘッドフォン出力がデフォルトデバイスになっている場合は、 フォーマット選択を192kHzや96kHzにしても48kHzで出力されており、駄目なのかと思いましたが、デフォルトデバイスをDigitalOutputに変更すると、192kHzで出力できるようになりました。

 出力フォーマットは、44.1k,48,96k.192kHz各々16ビット、24ビットの組み合わせがあり、24bitを選択した場合、本当に24bitで出力されているかは現状わかりません。きっと24bitになっていると思いますが、そのうちDN-HDMI4000AS経由のBDP-S370でのSACD再生等とともにFPGAにつなぎこんで確認してみたいと思います。


2010年12月1日水曜日

Vision3D

  FPGAのコンパイルなどに使用しているVaio Rmasterが立ち上がらなくなったので、修理すればよいのですがちょっと大変そうなので、リプレースすることにしました。
 
 マシンは、ASRock Vision3D 156B-42/B/BB  
 ベアボーンなので、メモリとBootドライブ、OSだけは別に調達が必要。 メモリはDDR3 1066 2GB×2枚 Transend、ドライブは、128GB SSD  Crucial  RealSSD C300 CTFDDAC128MAG-1G1 、OSはWindows7 Professional 64bitを選択しました。


フロント


リア

内部

 
Vision3Dの主な選択理由は、
 ・ノートPCアーキテクチャなこともあり、小さい、静か、消費電力も少なめということ。
 ・Blu-rayドライブ搭載(3Dにも対応)
 ・DVIとHDMIを装備
 ・Optical S/PDIF装備。その他よく調べていませんがmusic系機能が充実しており活用できる可能性があること。
 ・Core™ i5-560M モバイル 搭載で比較的高速
 
 Windowsエクスペリエンスインデックス値は、Vision3D:5.9、MusicPC:1.0となっています(下記)。
  Vision3D Core™ i5-560M モバイル 2.67MHz に対しCore™ i5-660 3.3GHzでクロック速度については、MusicPCの方が優れますが、Vision3DがGeForce GT425M に対し内臓グラフィックのため、グラフィック関連のため1.0になってしまっています。体感的には多分あまり変わらないと思います。

 Vision3DのWindowsエクスぺリエンスインデックス


Vision3DのWindowsエクスぺリエンスインデックス

 MusicPCより、はるかに静かですので、こっちをMusicPCにしたいぐらいですが、PCIeスロットが無いので無理。MusicPCの方は、もう少し静音化を調整してみて、視聴位置から遠くに離すことで対処するつもりです。


 しかしいつもながら何か失敗します。

 今回は3点失敗。1つ目は、メモリを何も疑わずにデスクトップ用のを購入、いざ付けようとしたときにノートPC用である必要に気がつきました。しょうがないので、余ったデスクトップ用のは、増設しても意味があまりなさそうですが、MusicPCの増設メモリ行きです。

 2つ目は、IEEE1394あると勘違い。よく見るとないではないか... まあしょうがいない。

 3つ目は、CAPRICE-I2S購入と一緒に、楽天のエントリー&買いまわりで全ショップポイント最大10倍などでポイント数アップを期待して購入したのですが、SSDの購入店はクレジットのボーナス払いが選べたので、ついボーナス払いを選択したら、期間が過ぎているのでキャンセル扱いにされてしまい10ショップが9ショップになってしまったこと。
 しかし選んでは駄目なボーナスを選択できるようにしているのは、明らかに楽天システムの設定ミスだと思うのですが、お店はうちではどうしようもないですとの回答。楽天はメールしても無視。いまだに何も返事がない。対応ひどすぎませんか???