PCM1795って何だ?

ラジオ技術を書店でペラペラめくっていたら、TIの河合さんという方の記事が出ていました。TIも32bitのデルタシグマDACをリリースしてきたようです。

発表されたデータを見ますと、TIの評価ボード通りに基板を描けば、-150dBの信号がそれと認識できるというような内容だったと思います。旭化成が出してきて実際に製品に使われ始めたので、対抗上やむなくリリースしてきたような感じでしょうか。

実は仕事上で、FPGAの機能にI2Cのスレーブを入れ込むということをよくやるのですが(お客様に要求されるのです)、FPGAの回路をハードウェア記述言語(ソフトウェア開発に使うC言語のようなイメージ)で構築する際に、机上で動作シミュレーションするために、相手方(要はFPGAのレジスタを設定するCPUの方を指します)の動作もハードウェア記述言語で構築する必要があります。

何が言いたいかというと、通常は安いマイコンでPCM1795などのレジスタ設定をするところですが、I2Cマスタの機能を回路で構成できますので、CPLDに焼きこんでPCM1795のレジスタ設定をしてみました(もちろんPCM1792Aなどもやろうと思えば一緒です)。仕事の関係でI2Cのアナライザなどもやむなく?所有していますので、設定がきちんとできているかどうかの確認も楽にやらせていただいています。

残念ながら、バラック基板にPCM1795を載せて設定をしてみたというだけで、実際に有用に使い倒し始めました、という話ではありません。こんな感じの基板があればいろいろ実験ができるのにな~、といったところです(回路定数は適当です)。 

作ったI2Cの回路は、11.2896MHzとリセットを入れてあげて、リセットが解除されると、左右2つのDACのアドレス16から21までを順番に設定し(初めにLchを設定し、次にRchを設定)、設定が終わると今度は順番に設定したアドレスのレジスタを読みだすというものです。読み出しが終了したら次にリセットがかかるまではうんともすんとも言いません。

PCM1795のデータシート25ページめの、「Write Register」を2つのPCM1795に対して行い、次に「Read Registerを」2つのPCM1795に対して行います。「Register Address」に先頭値の「16」番地を入れると、あとは実際の値だけを6回続けて(21番地まで)書き込んでいきます(アドレスはPCM1795内で自動的に「1」ずつ進んでいきます)。

読み出しも「Repeated Start Condition」というのが追加になるだけで書きこみとほぼ同じ動作をします。

確認した限りでは、きちんとACKが帰ってきますし、書きこんだ値が読みだされていますので、所定の動作をしていそうです。ちなみに、CPLDのリセット解除はPCM1795のリセット解除より遅くなるようにしてやることが大切です(少なくともシステムクロック1024発分以上は・・・)。

ALTERAやXILINXのツールは無料で使えますので、経験者の方だけでなく、挑戦されたい方は下記のソースをコンパイルして適当なCPLDに書きこんでみて下さい。規模的にはXILINXならXC9572XLあたりに入るはずです。

各レジスタの設定値を変えるためにどこをどう書き換えてコンパイルすれば良いかは、ソースをご覧になってご想像下さい(現状は適当な値が入っています)。 たぶんわかりやすいと考えています。2つのDACのスレーブアドレスは上の回路図のようにしてください(それぞれのADD0とADD1)。

著作権は私、ElectrArtが所有しますが、ご自身の検討目的に限ってご自由にお使い頂いて結構です。動作保証、サポートはございません。自己責任でお願いします。

I2C_MASTER.vhd