FreeDSP Software Development Hands on page
A DIY Audio Processor Development Project.
Introduction
Sigma
Studio という開発ツールを無償で落とせるようにしてくれているAnalog Devices社と、コ
ミュニティのFreeUSBi のおかげで、極めて安価にSigmaDSPの開発ができるようになっても「DSP、コードがなけりゃただのハコ」と
い
うことで、ボードを組み立てたら最初に動作確認をするにしても、まずDSPを動作させないことには始まらない。 そこでこのページでは簡単にツールの使い方か
ら紹介していこうと思います。
SigmaStudio Installation
現在は64bit環境が必須になっています、ADIのサイトからSigmaStudioの最新イン
ストレーションファイルを落としてきて起動すれば、あとは勝手に.NET4.7をインストールしてからアプリをインストールしてくれますが、PCを
Windows7からWindows10にアップグレートした際、暫くの間は問題なく使えていましたが、ある日のWindowsUpdateの後で
「.NET4.7が無いのでインストールせよ」とエラーになって起動せず使えなくなってしまいました。.NET4.7だけをアンイストールして再インストール
を試みるもWindowsに拒絶されてしまってインストールできず一時お手上げになってしまいました。 その後に「Windows10 Creator's
Update」を実施した後で、SigmaStudoを再インストールしたところインストールができて、問題なく起動もできるようになりました。
Set-up Hardware configuration
FreeUSBiのページ に記
載してある要領でSigmaStudioからFreeUSBiが使える状態にインストールできていたら、下の画像のようにデバイスマネージャーの画面にデバイ
スとしてUSBiが見えるはずです。SigmaStudioだけインストールした状態だとADI純正のUSBiしか認識できないので
FreeUSBi
用の Windows Driver Installation も忘れずに実行しておきましょう。
ときどきUpdateの後でFreeUSBiのドライバーが上書きされて純正化してしまい使えなる事があるそうですが、同様のドライバインストレーションを再実施すること
で回復できるようです。
もし見えなかったら、接続されていないか、ドライバーのインストールに失敗しているので再度ト
ライしてみてください。
初めてSigma
Studioを起動すると空白の状態なので、「File」メニューから『New Project』を選択します。
このようなウインドが開くので、まずハードの構成を設定します。 左のベインから「USBi」
アイコンを選んで空白のHardwareConfigurationタブの左側へドラッグ&ドロップします、同様にDSPのなかから「ADAU1701」アイ
コンを選択して右側にドラッグ&ドロップします。
ついでにDSPコードの保存用のEEPROMの「E2Prom」アイコンも右下にドラッグ&ド
ロップしましょう。
配置できたら、こんな感じに接続をします。 青点の接続開始点からドラッグを始めて接続終了点
でマウスのボタンを離すと配線されます。
もし間違ってしまったら「DELキー」を押して削除できます。うまく接続できると
「Schematic」タブが増えたはずです。
Enabling LRCK Output
FreeDSP SMD
A/B基板では、アナログミュートを解除するマイナス電源のためにチャージポンプを搭載していますが、このスィッチング回路を駆動するのにI2S出力のLRCK信号
(MP10)を使用しています。 File >>New Projectでの
デフォルトの設定ではピンから出力されない状態になっているので、上側のHardware
Configurationタブを選び、下側タブからIC1-170x\140x Register Controlタブを選んでピンの機能設定を行います。
赤線で囲った部分がMP10からLRCK信号(48kHz)を出力するために最低限必要な設定
箇所で す。
Default Hardware Configuration
I2S入出力やGPIO, AUX ADCなどMPn
(nは数字)ピンを使用する場合もこの画面で設定する必要があります。NewProjcetからの場合この設定作業は毎回必要となります、その都度設定していくのも結構面
倒 くさいのでこの際全部設定してからスナップショットを開始テンプレートとして保存してしまいましょう。
ここまで設定できたたら、各ポートはいつでも使える状態になります。
ソフト的に観るとこのボードの構成は次のブロック図のようになります。
以上で事前設定は終わりです。
次のステップでは上側 Schematicタブを選んでDSP処理内容を記述します。
Schematic Design
DSPシステムとして必ず使用するのが「入力」と「出力」 そしてコードを保存するEEPROMがあります。 そこでデフォルトの開始テンプレートとして、入力から出力へ
ストレートに通すだけのコード(設定)を記述してみます。「Schematic」タブを選択し以下のように入出力を配置します。
左側のツリーから、"(IC 1)ADAU1701" >> "IO"
>> "Input"を、 "Schematic Design" >> "T Connection"を、"(IC
1)ADAU1701" >> "IO" >> "Output"を選んで配置します。
「T
Connection」は分岐接続をするのための部品でモジュールの出力をパラッて複数のモジュールを接続する際には必要です。回路図で分岐点にドットを打つようなイメー
ジで使いながら、配線を行っていきます。通常は様々な処理を入力と出力の間に書き足していきます。
回路が描け、10ピンのリボンケーブルでFreeUSBiとFreeDSP基板を接続していれ
ば、メニューから”Action" >> "Link and Download"を選ぶ、もしくは連動作ボタンを押せば、コンパイルした後に即
DSPへコードがダウンロードされ、正しくハードウェアが動作していればInputからOutputへスルーする動作を
するはずです。私の設計したボードはユニティゲインなので入力と同じ音量レベルで出力されるはずです。 うまく動作したなら設計を始める初期状態のテンプ
レート とし て再利用できるように "File" >> "Save
As"で 「DefaultStartTemplate.dspproj」とでも名前をつけて保存しておきましょう。
Write EEPROM
このままではDSPの内部RAM上にコードがあるだけなので、リセットしたり電源を落とすと消えてしまいます、そこで基板上のEEPROMにいまコンパイル〜
ダウンロードしたコードを書き込んで自動的にロードされるようにします。
Hardware Configuration
タブに戻って、配置したADAU1701モジュールのIC1の上で右クリックをすると、ポップアップしたメニューの中に "Write Latest
Compilation to
E2PROM"があるので、これを選択すると最後にコンパイルしたコードが選んでる方のEEPROMに書き込まれます。 FreeDSP SMD A/B
基板には2つEEPROMを搭載して、どちらかを選べる機能を搭載したので、自分がAかBの保存したい側のEEPROMを選んでから書き込み動作を行ってください。
書き込みができたら、リセットボタンを押すか、電源を再投入することで選んだ側のプログラムが
自動的にロードされDSPで実行されます。
う〜ん、一行もコードを書かないでDSPが使えてしまうなんて、素晴らしすぎる・・・・
Appendix1: Hi-Resolution Audio Setting
ADAU1701に搭載されているADCとDACは192kHzまでのサンプリング周波数に対応しています。 通称「ハイレゾ」と呼ばれている
96kHz 以上のセッテイングを行う方法を紹介します、96kHz,
192kHzへの変更に際してクリスタルを交換する必要はありません、単にレジスターの設定とプロジェクトのfs設定を変えるだけ可能です。
"Hardware Configuration"タブ(上側)を選ぶ
"IC1 - 170x\140x Resiter Control"タブ(下側) を選ぶ
下の画像のように4箇所を追加設定します
fs=96kHzの場合
fs=192kHzの場合
ハイレゾで使用上の留意点
現実世界でDSPを使いこなしていくうえで、闇雲にただサンプリングレートをあげればいいというも
のではなくて、DSPのクロック周波数はつねに一定なので、ハイレゾにすると当然1サンプル周期が短くなるので、そのあいだに実行できるDSP命令数が少なく
なってしまいます。
ADAU1701なら48kHzでは1024ステップの処理を実行できますが、96kHzなら512ステップ、192kHzだとわずか256ステップしか実行できません。
複雑な処理を行うには低いサンプリング周波数で処理するか、もっと高速なDSPチップを使用する 必要があります。
Download Project Files
以下にfsの設定を変えたプロジェクトファイルを置いておきます。 ハイレゾの自作アル
ゴリズム開発に再利用できるよう開始 テンプレート名に リネームして保存しておくと便利だと思います。
ThroughTest96k (fs=96kHz, 512
Instructions max, Input0→Output0, Input0→Output2,
Input1→Output1, Input1→Output3 )
ThroughTest192k (fs=192kHz, 256
Instructions max. Input0→Output0, Input0→Output2,
>Input1→Output1, Input1→Output3)
fsを高く設定すると、DSPが処理できるステップ数が不足する場合があるので容量オー
バーにご注意下さ い。
Appendix2: External DAC Expansion
3wayのチャンデバで使いたいという声も多かったので、外部へのI2 S出
力がちゃんと使えるかどうか試してみました。
DAC基板を設計する前に動作確認だけ済ましておきたかったので、今回は市販のDAC基板を使用し
ました、バーブラウンのPCM5102を使用したものと、WolfsonのSabre
ES9023を使ったものがアマゾンで売ってたので、安いPCM5102の方をゲットしました。
将来開発するつもりのADAU1466ボードに対応するために画像では4枚写っていますが、こ
のDSP基板で同時使用できるのは3枚までです。
本体基板側の4ch出力と併せれば全部で10chの出力まで対応ができます。音色を揃える必要
があるチャンデバの場合なら外部DACの6chで3wayまでという事になりそうです。
External DAC Test Project Schematic
以下にADCに入力されたL/R信号を全部の出力にスルーするプロジェクトの例を示します。
これで全ての出力からL/Rの入力信号が出力されます、
Download Project Files
All L/R Channel Output Test Project
Fileへのリンク
Signal Output Timing Check
実際の48kHz動作でアナログ信号が出力されるタイミングがどうなのか測定してみました。
fs=48kHz動作において半坡の正パルスを入力したときの出力波形です、オレンジ色の
Ch1がADAU1701内蔵のDAC、青線のch2が外部に拡張したPCM5102
DAC基板からの出力です。I2Sの送信→受信→DAC出力というプロセスが必要なために約60uSほど外部DACのほうが遅れるはずなのですが外部のPCM5102の方
が先に出力されています、この場合内蔵DACと外部DACを
組み合わせて使うには48kHz動作なら外部DAC側を3サンプルほど遅らせて出力させる必要がありそうです。
同様に96kHz動作の場合
今度は外部DACの方が11サンプル程も遅れて出力が現れています。
さらに192kHz動作の場合は
この場合も16サンプル程外部DAC側が遅れて出力されていました。
DACの形式やデジフィルの長さによってもデータを受信してから出力に反映されるまので遅延量
も違ってきますが、ADAU1701内蔵のDAC出力と外部のDAC出力の時間的相対関係はfsによって大きく違っていましたし、この時間差も常に一定とは限
らず、プログラムによっても変化する可能性もあるので、実はコンパイルが終わるまで確定できない可能性があります。 このためオンチップのDACと外部の
DACを組み合わせて使う際はぜひレイテンシーのチェックをした上で早く出力される側にディレイを追加し現物合わせで補正値を設定したほうが良さそうです。
Signal Output Polarity Check
さらに入出力の絶対位相もチェックしてみます、ランプアップな鋸歯状波を入れて入出力の位相のチェッ クを行いました、 観測波形はCh1がオンチッ
プDAC側、Ch2が外付けDAC2の出力波形です、
両者は3サンプル周期ほどタイミン
グがずれているのでリサージュ波形の帰線部分が乱れてハンガーのような面白いリサージュ波形になっています(笑)。絶対位相については内蔵DAC、外部DAC1、外部
DAC2は問題なく正相で出力されている事が確認できました、やはりADAU1701チップ内蔵のDAC波形は反転しているという情報は本当だったようです。
(このボードではLPF段でアナログ的にDAC出力を反転してその問題を解決しています)
念の為に、外部DAC間のみで比較してみます、まず外部DAC1と外部DAC2間ではどうで
しょう?
こちらは条件が同じなのでキチンと正相で位相もタイミングも揃った波形で何も問題ありません
外部DAC用のI2 Sデータ線の一部が反転していた!? ・・・・
(実は私の設定ミスでした、ついでにGUIの不具合?を発見するおまけつき)
実に不可解なことが起きました、なぜかDAC3のI2Sデータの位相が反転しているのです、判りやすくするためにランプ波形にして上下非対称にしてい
ます。
内蔵DAC出力波形と外部DAC3(on SDATA_OUT3)の出力位相を比較
(オレンジ線Ch1=外部DAC3出力、青線Ch2=DSPオンチップ側の出力)
なんと逆相です
外部DAC1と外部DAC3の出力波形を比較すると・・・
これはもう明らかに逆相です、中華DAC基板の問題か?と思ってDACボードを入れ換えて確認
しま
したが、やはりI2S出力データ自体が反転していました。DSP処理による反転なら2の補数に、ロジックによる反転なら1の補数になるので両者の値には1差が
あります。 また、この基板ではJ1のpin2に出ている4つ目の外部I2S出力信号はどうなのかも気になります。
これは24bit
I2S形式でマイナスの最大値を出力したときの4系統のI2S(クロックが共通なのでI8Sと呼ばれる事もあります)波形をロジアナでキャプチャーしたものです。
なんと、4つのI2S出力のうち後半の2つのデータ線の信号が反転してしまっています、私の基
板上にはインバータなどの動作をするデバイスはありませんから、DSPが出力している波形そのものが反転していることになります。 発売開始されてから10年
以上経つ石なので誰かが見てけていても良さそうな不具合だと思うのですが・・・・
SigmaStudioの設定を見直してみましたが該
当するオプション等はなさそうです 、ありました! ただ日本語版Windowsではこのオプションが正しく表示されません。
英語版Windowsではこのように反転(Inv)のラジオボタンが表示されていますが・・・
日本語版Windowsだとこのように表示されません。
使用言語やシステムフォントの違いによってレイアウトが大きく崩れてしまうという
WindowsのGUI特性が露呈してしまいましたね、何せ見えないのですから反転のオプションがあっても、それがオンになっていても気づけませんよね・・・・
という事で原因は判ったので、反転オプションを制御する"Inv"ラジオボタンのチェツクを外
して解決しました、ADIのフォーラムで質問した甲斐がありました。(Thanks! Dave)
不具合解消のため、このページに掲載してるプロジェクトファイルのinv設定を全てを修正しま
した(14th, Aug.2019)
適当に読み漁った自己流なので正しいやり方でない場合があります、あしからず ・・・・・
もし間違いを見つけたらこっ
そりと教えて あげてください。
引続き更新中です
→ Return to Project Main Page
[注意事項]
本情報は、あくまでも部分的情報の公開が目的であり、確実で完全な情報であることを保証するものではありません。
ユーザー個人の趣味であり
またメーカを冒?したり営業妨害を意図するものでもありません。 従って本情報に基づいて機器を改造した際に、機器が動作しない、もしくは、期待した
性能が得られない等の
障害が発生したり、万が一に事故等が発生したとしても、当方は一切の責務において関知しないものであります。 実際に機器の改造を行う際は、あく
ま
でも各自、個人の責任において行ってください、腕に自信の無い方は絶対にトライしないで下さい。 本設計の回路やアイディアの無断転載や商用化はご遠
慮ください。
[Caution:] If you use above information, At Your own risk!