2012年4月7日土曜日

QuartusII システムコンソール

クロックボードのClock Synthesizer TI CDCE913のI2Cの制御ですが、Arduinoを考えていましたが、今後のこともあるのでFPGAにマスタ機能を実装して制御することに方針変更。

I2CマスタのRTLは、OpenCores.orgにあるWISHBONEバス用I2CマスタverilogコードをベースにAvalonMM スレーブインタフェースに変更、systemverilogコード化等を施しました。

さて、QuartusIIの新しい機能にシステムコンソールという機能があり、PCからFPGAのメモリ、レジスタのリード.ライトアクセスや、ボタン、ダイヤル、グラフなどのGUI 機能にさまざまなシステム・レベル・トランザクションを追加し、データ処理をモニタリングするカスタム検証ツールやデモ・ツールを比較的簡単に作ることができます。

この機能を使って、PCからI2Cのアクセス制御や、ES9018のレジスタをGUI制御することに挑戦してみたいと思います。

先ずはQurtusIIをV11.1sp2にバージョンアップ。ディスク容量(64G SSD)が限界だったMusicPCにSSD128Gbyte(128GB Crucial m4 2.5-inch SATA 6GB/s)に新調し、MusicPCの方にインストールしてみました。
しかし何故かUSB Blaster(実際にはDE0-nano)を認識してくれません。Windows7 Ultimate 64bitマシンなのですが、原因は今のところ不明。仕方が無いので、メインマシンの方にもインストールすることに...


システムコンソールとI2Cマスタの機能確認用に、先ずはI2CコントローラとJtag to Avalon Master Bridge のみのQsysモジュールを作成。今までSOPCビルダーを使っておりQsysを使うのも初めてになります。


 I2CコントローラとJtag to Avalon Master Bridge のみのQsysモジュール


以下、簡単にSystemControlによるレジスタのリード/ライトを行う手順をリストします。



1. 上記のQsysとI2CマスタモジュールをDE0-nanoに実装してコンパイルし、DE0-nanoにコンフィグ

2. QsysのウインドウからTools-System ConsoleでSystem Consoleを起動。

3. System Console Files-Load Design....で開くウインドで、qpfファイル(今回の場合DE0-Nano.qpf)を選択し"開く"をクリック



  システムコンソール

4. JTAG Avalon Master Bridge の提供するJtag debug serviceの場所の指定 

 % set jtag_debug [ lindex [ get_service_paths jtag_debug ] 0 ]
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0

 


5. リセット解除の確認
 % jtag_debug_sample_reset $jtag_debug  
 1

/* jtag_debug_sample_reset <service-path> 
     Returns the value of the reset_n signal of the Avalon-ST 
JTAG Interface core. If reset_n is low (asserted), the value 
is 0 and if reset_n is high (deasserted), the value is 1.  */


6.クロックがトグルしているかの確認 (何度か繰り返し”1""0"両方が表示されるとトグルしている)
 % jtag_debug_sample_clock $jtag_debug
 1    

/*jtag_debug_sample_clock <service-path>
Returns the value of the clock signal of the system clock that drives the module's system interface. The clock value is sampled asynchronously; consequently, you may need to sample the clock several times to guarantee that it is toggling. */


7.もうひとつのクロック確認手段(リセット中にクロックが数回トグルすると"1"が表示される)
 % jtag_debug_sense_clock $jtag_debug
 1    

/*jtag_debug_sense_clock  <service-path>
Returns the result of a sticky bit that monitors for system clock activity. If the clock has toggled since the last execution of this command, the bit is 1. Returns true if the bit has ever toggled and otherwise returns false. The sticky bit is reset to 0 on read. */

8.Jtag Avalon master のパスを見つける
 % get_service_paths master
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0/master}   

/* get_service_paths <service_type_name>

Returns a list of paths to nodes that implement the requested service type.
Note: When this command returns an item in the list that has only one element and the element has no spaces in it, you should not pass the element to other commands.
As an example, do not run this command: 
set master [ get_service_paths master ] master_read_memory $master 0x0200 16
Instead, please run this command:
set masters [ get_service_pathsmaster ]
set master [ lindex $master 0 ] master_read_memory $master 0x0200 16 */

9.マスターを指定
 % set master [ lindex [get_service_paths master] 0 ]
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0/master 

10.ライトアクセス(32bit)
 % master_write_32 $master 0x000 0x1234


/* master_write_32 <service-path> <address><list_of_32_bit_words>
Writes the list of 32-bit values, starting at the specified base address, using 32-bit accesses.*/


11.リードアクセス
 % master_read_32 $master 0x000 4
 0x00001234 0x00000000 0x00000000 0x00000000  


/* master_read_32 <service-path> <base_address> <size_in_multiples_of_32_bits>
Returns a list of <size> 32-bit bytes. Read from memory starts at the specified base address, using 32-bit accesses.*/

2012年4月1日日曜日

ポータブルDAP+DAC 6_POWボード組立

Powerボードが出来てきました。
早速組立してみましたが、いくつかミスってます。

・DCDC(CC3-0503Sx-E/CC3-0505Sx-E)のRCピンを-Vとショートしていない。
・DCDC(CC3-0503Sx-E/CC3-0505Sx-E)の-V出力ピンが5pinのところ4pinになっていた。
・MOSFET(IRF9204)が大きくてはみ出している。
これはある程度わかっていましたが、縦方向、横方向とも無理がありすぎました。
・端子間がスペース余裕がない

FusionPCBの場合50mm×50mmを超えると倍以上の価格になるため横方向を50mmに抑えようとしているのでどうしても無理しがちです。

また、まだ原因がつかめていませんが、過放電防止回路が動いていません。

ちょっとイマイチのところが多いので、PCB再設計しようかと思案中。

 Power ボード基板

 Power ボード 表面

Powerボード 裏面
 チップ抵抗は購入もれのため未実装

2012年3月26日月曜日

ポータブルDAP+DAC 5_CLKボード組立

クロックボードのハンダ付けが大体完了しました。
リフローを考えていましたが、DesignSparkからCratt ROBOへのデータ受け渡し方法が不明のためあきらめて手付けにしてしまいました。


 DXFファイルの出力はできるのですが、ROBO Masteで開いても何も表示されないですし、Eagle時の出力ファイルと内容が明らかに異なります。
 リフローを考える場合、Eagleに戻らないとダメなのか???


Clockボード 表側

Clockボード 裏側

 とりあえず、CDCE913のモード設定をI2Cで行わないと使えないので、Arduinoから書き込み方法と、設定値、設定手順を調べて書き込みを進めます。

dCS方式DSDネイティブ再生 ようやく成功

ようやくdCS方式でDSDネイティブ再生に成功しました。PCで音楽さんの記事やTwitterでのアドバイスをいただき1パターンだけですがノイズなしで再生出来ました。

結論からいって、まずノイズの原因はUSBドライバだったようです。
CEntranceユニバーサル·ドライバーを使用していましたが、USB Audio 2.0 Ref Designで紹介されているもう一つのUSBドライバ Ploytecの方をインストール。ただし左記のリンク先からたどるダウンロードのページではなく、XMOSサイトのThesycon USBオーディオ2.0 Windowsの評価版ドライバのページにあるドライバをインストールしないとダメでした。

Foobar2000での再生は、まだうまくいっていません。foo_dsd_asioでThesycon のドライバは指定できているのですが、再生してもサンプリング周波数は44.1kHzになってしまいます。

とりあえずfoo_dsd_asioでの再生はあきらめて、AudioGateでDSDtoPCM encapsulate Toolで変換したファイルを再生してみました。こちらはうまく再生できました。
また、foobar2000でもこちらはうまく再生できました。

検証として別のPCでドライバのみCEntranceユニバーサル·ドライバーに変え、再生ファイル、AudioGate設定等は同じにして再生してみましたが、やはり以前と同じノイズが出ました。ノイズの原因はCEntranceがビットパーフェクトではないということで間違いなさそうです。


 Thesycon USB Audio 2.0 Windows Evaluation Driver Device0 Tab

  Thesycon USB Audio 2.0 Windows Evaluation Driver Clock source Tab

  Thesycon USB Audio 2.0 Windows Evaluation Driver Stream Format Tab

  AudioGate 環境設定Tab

  AudioGate  再生中
176.4kHz 24bitで再生になっていて、レベルメータが-24dBで固定されて動かない

とりあえずうまくいったので、以前途中であきらめていた、RME Raydat=>FPGA=>BuffaloII構成、つまりPCとは電気的に分離する構成でのDSD再生が出来ることを目指そうと思います。


2012年3月21日水曜日

ぺるけ式FET差動バランス型ヘッドホンアンプ_モバイル版12

動作確認をようやく始めました。
最初、音が全く出ず、電源を落とすとコンデンサに蓄えられた電荷で何故か鳴るという状態。
何がなんだかわからない状態で、各所の電圧を測り以前作成したCQ出版附属基板を利用したFET差動バランス型ヘッドフォンアンプと比較して、FETのGateとDrainがテレコなことを発見。
今回はライブラリ登録を慎重にしたのですが、テレコに...

DesignSparkのライブラリ登録は間違えていないはずなのですが、レイアウトに呼び出さているシンボルはたしかにテレコに!!! なんでだろ???

しかたなく、FETの足を調整して取り付け直したら、音が出るようになりました。

ぺるけ式FET差動バランス型ヘッドホンアンプ

 しかし、まだ過放電防止の方がうまく動作しません。
 電源SW ONしただけでは電源が入らず、ショートSWを押すと電源が入るところは期待通りですが、一旦電源が立ち上がった後、電圧を下げても一向にOFFになりません。半固定ボリュームを最小から最大どちらに変えても変化ありません。なんでだろ?

 現状は、とりあえず過放電防止をパスして実装してある状態です。

2012年3月19日月曜日

DSDファイルをdCS方式Waveファイル化するツール

Music TO GO!さんの記事で、DSDファイルをdCS方式Waveファイル化するツールDSDtoPCM encapsulate Tool”が紹介されています。言われてみれば当たり前ですが、これなら再生アプリを選ばないので再生環境の選択肢が増えそうです。
さすがにDAWとかはまずいと思いますし、Foobar2000でも、DSPによってはデータが変換されるので、注意が必要です。
とにかく24bit@175.kHzでビットパーフェクトで再生してくれるプレイヤーソフトが必須になるはずです。

とりえあず、ファイルをダウンロードして変換してみました。


DOSコマンドプロンプト上で、下記を実行すれば変換が始まります。


java -jar DSDtoPCMencapsulate.jar <input-file>

少なくとも現状ではDSDIFFのみで、176.4k/24 WAVファイルに変換されます。ファイル容量は元の1.5倍になっています。
 他のフォーマットのファイルでは、0バイトのwaveファイルが生成され、エラーメッセージが出てきます。


2012年3月18日日曜日

QLS-QA350 I2S引き出し

QLS-QA350のI2S信号の引き出し確認をしてみました。
パターンを調べると下図のようになっているようです。
当初dsPIC33FJ12からは、2系統別々にI2S信号が出ているのではと予想していましたが、1系統しか出しておらず、I2S信号の出力ピンと想定していたピンとは別のピンから出ていました。
33ΩのダンピングがCS8406 とWM8740へのルートへ個別に入っています。BCLKに関しては何故か77pinと78pinに導通があります。これについては調べていません。

下図のようにCS8406へのダンピングの出力側からジャンパーで引き出し、CS8406へのパターンはダンピング近傍でカットするのが良さそうです。
これでSPDIFは使えなくなりますが、HAP出力は活かせたままになり、波形の歪が最も軽い引出し方法になると思います。




 I2S信号の回路構成
R34-37はモジュール抵抗で対応は不明


 ジャンパーで引出し、BuffaloIIと接続して音出しの確認をしてみました。
 カットはまだしていません。
 音が出ることは確認できました。I2Sの信号は以前調査したQA550と同じはずなので波形採取はしていませんが、LJ,RJではない、いわゆるI2Sフォーマットです。

I2S信号引出し(基板表面) 
紺:GND(C7のGND設置側) 黄:BCLK(R6出力側) 橙:DATA(R7出力側)

I2S信号引出し(基板裏面)
 紫:LRCLK (R31出力側)  
左上のU14がWM8740でその右にR34-37の33Ωダンピング抵抗、右下のU10がCS8406


BuffaloIIへ接続して確認