MEMORY BUFFER 組み立て情報のページ




2011.05.05 MEMORY BUFFER


このところずっとおとなしかったのはMEMORY BUFFERを作っていたからです。
音出しまで確認出来てからHomepageにUPするのは後出しジャンケン状態ですが動かなかったら恥ずかしいので
こっそりやっていました。
写真の基板は試作の試作で機能確認用なので大きいですが本番までにはぐんと小さくするつもりです。
そもそもこれはFN1242を左右1個ずつ使ってDACを作りたい、というのがきっかけで作り始めました。そういうDACは未だに無いんですね。




今回は試作の試作でPhoeniciaさんjinsonさんくましろさんにご協力いただきました。
ことにPhoeniciaさんにはデバッグ及びソースコードの手直しまでしていただき大変感謝をしております。
この場を借りてお礼を申し上げます。
Phoeniciaさんのご協力が無かったら音出しまで漕ぎ着けなかったかもしれません。

以下HomepageにUPしようと思って書いた内容です。

何で今頃メモリバッファなの?という感じですがずっと温めていた物なので自分なりにやってみようと
思いました。
エレアトさんや藤原さんがメモリーバッファー基板を作っていら
っしゃいます。がどうしても自分で作ってみたかったので以下のコンセプトで作ってみることにしました。

コンパクトなメモリバッファで自分でハンダ付けして作れる、という構想で検討しました。

メモリバッファの作り方はFPGAの設計が出来るのでFPGAを使って作ることにする。もう10年くらいFPGAのソースコード
を書いていないが大丈夫だろうか?

使用するメモリはDUALPORT_SRAMが楽ちんなので検討してみる。価格が高すぎて使えないので
適当なSRAMを探していると秋月に16bitアクセスの4Mbitの物が500円で見つかったのでこれに決定

PCM1794 は0.65mmピッチ、 CY7C1041DV33-10ZSXI.pdfは0.8mmピッチ
なので自分でハンダ付け出来ると判断。

使用するFPGAは回路的には規模が小さいので自分でハンダ付け出来る事を加味してCPLDでPLCCの
XILINX XC95108-15PCG84Cに決めました、設計はVERILOGHDLで行うつもりなのでどのFPGAでも使えるので
千石当たりで売っているデバイスの中から選択しました。
XC95108のスペックを見ると108マクロセルとあります、ってことは108個のFFしかないのかな?とちらっとな予感が
しましたが最近のFPGAはでかいから大丈夫と言い聞かせて進めることにしました。





まずはタイミングチャートを書いてみて全体をながめようと思います。
Write側から書いてみます。
メモリは16bit幅なのでDATAを16個シフトレジスタに溜めてからメモリに書き込むこととする。
WRITEシーケンスは電源投入後LRCKの立ち上がりをマスタークロックで1SHOTをとりそれをトリガーに開始する。
私は回路図エディターに水魚堂さんのbschを使っています、とても直感的で使いやすいツールで
タイミングチャートを書くツールもあるので今回はそれを使用して書いています。

WRITE側のタイミングチャートです。




データが16個に一回インクリメントしてWriteシーケンスが発生しています、
Writeシーケンスは詳細に書いたものが左下で、データをビットクロックの立ち上がりを1ショットしたものを
イネーブルにして同期化しています。
後はメモリのタイミングチャートを見ながら書き込みの信号を作っています。

メモリの資料 今回使用する予定のサイプレスのメモリです。。


続いてREAD側のタイミングチャートです。






リード側はWriteのステートマシンからタイミングをもらってスタートさせますのでWriteのシーケンスも一緒に
書いてあります。
Writeのアドレスが設定した値になったらReadシーケンスをスタートさせています。
Writeのアドレスがインクリメントした後にReadをスタートさせればWriteの動作は確実に終わっているので
Readとぶつかることはないと考えて設計します。



ReadとWriteの役割が分かったところで信号を整理する意味でブロック図を書いて見ましょう。






各信号の役割が分かったところで今度は状態遷移図を書いて見ましょう、これはソフトで使われるフローチャートに良く似て いる物で違いはクロックの立ち上がりエッジで状態が遷移し、必要な信号が確定するという全ての出来事がクロックに同期して いることから同期設計と言われるものです。 FPGAは基本的に全て同期設計をすることを前提に作られているので今回もクロック同期で書いてみました。




○の中にS*と書いてあるのがステート番号で、直線のところにある条件が来たら、次のステートに飛んで 決められた信号を変化させるというものです。

状態遷移図からソースコードを書いてみましょう。
WRITE側ソースコード WRITE側のソースコードです。

かなり自己流でお恥ずかしいですがWrite側だけupしてみました。

さてさてソースコードが書けたらシミュレーションで動作を確認






画面の左側がメモリに書いている部分で右側に波形が出てきているのがREADが始まったところです。
これだけ信号が多いとシミュレーションをするのもしんどいです。
晴れた日曜にFPGAのシミュレーションで動かないー、と苦しんでいるとなんだかこんなことしていては
いけないんじゃないか、とか、これはまるで業務そのものじゃん!などと思ったりします、不健康だなー。

シミュレーションもある程度進んでくると実際に動かす基板が作りたくなってきます、 そこでユニバーサル基板を使ってデバッグ基板を作成しました。
今回使用するXILINXのCPLDのデータシートです。

肝心のFPGAはとにかく、他の部分で悩みたくはないのでDAIはこなれている物を使います。
DAIはメジャーでこなれているCS8416を使います。

出来上がった基板がこれ。


まずはDAI部だけ動作チェックしてみましょう


DAI部はちゃんと動作しました。 テストにはFN1242/1.5を使いました。


順調じゃんと思いきや


順調じゃんと思いきや、出来上がったソースコードをXILINXのツールで論理合成、インプリメントを行った結果 容量オーバーで入りませんというエラーが出てしまいました。 レポートを見てみるとDFFが108個しかないところ142個使っているというレポートです。まあ同期、タイミング優先で かなり贅沢な使い方をしているので少し削ればと思ったのですが、今からこんな調子ではこれからの機能拡張は ままならないことになってしまいます。 手で実装出来る範囲のFPGA、CPLDの中ではこれ以上容量の大きなものがありません。 悩んだ末にどうせFPGAにするのなら容量の大きなEP2C5がRSで買えるのでEP2C5TQFP144に決定しました。

挫折

しかしこの打撃は大きかったですね、2ヶ月近くほどんと進まない状態が続きました、このままやめてしまっても
良いのではないかと思うこともありました。
趣味なんだからそれがストレスになるようでは本末転倒になってしまいます。
2ヶ月ほど間隔があいてしまいましたが、気をとりなおして作ったのがこの基板です。




ALTERAのFPGAに決めたからといってすぐに基板を起こしてというのもリスクが高かったのでこんな大きな変換基板を
使って作成しました。
この変換基板は1200円もしました。


ALTERAのFPGAを焼くためにはUSBブラスターというツールが必要なのですが、XILINXのCPLDで作ろうと思ったときに
買っておいた特殊電子回路さんのコンフィグツールです
左側がセットに付いてくるXILINX用のケーブルで右側が自分で作ったALTERA用のケーブルです。
これ、JTAGでALTERAのFPGAをコンフィグレーション出来るのですが、ROMが焼けないので電源を切るたびに
再度コンフィグレーションが必要になります、特殊電子回路早く対応してくれないかな。





組み立て終わってFPGAの信号をオシロで見ると所望した信号が出ているみたいです、
ロジアナは持っていないので完全にOKかどうかは分かりませんが音が出そうな雰囲気ではあります。
しかし実際に信号を入れるとFPGAの動作が止まってしまいます、メモリのDATAを16bitあるうちの10bitくらい
を接続すると駄目で、9bitまでなら正常に動作しているようです、電源を見るとかなりノイズが乗っています。
後にこの現象が何であったか分かるのですが、この時点では手配線で作るには限界かと思われ基板化すれば
あっさり動くだろうと思っていました。


ついに基板化



基板化すれば動きそうだとなると基板設計をしたくなります。
今回は機能確認をすることが目的なので色々な要素を取り入れられるように基板は少々大きくなってしまっても
アキシャル部品で組むことにしました。

CADた基板がこれ




最初は2層(両面)で作ろうと思っていたのですが、FPGAにpinピッチが0.5mmなので周辺にコンデンサを
置こうとすると電源の配線が出来ません、
止む無く4層にしましたが、3層目をGNDのプレーンにしてGND強化を測りました。
待つことしばし、基板が送られてきました。







なかなか良い出来です。

デジタルストレイジオシロ


FPGAの設計をする場合波形を止めて見ることが出来るデジタルストレイジオシロがあると
デバッグにとても便利です。
私が購入したのはくましろさん、が紹介してくれたHantekのDSO5200というUSBオシロです。
USBポートに接続するだけで簡単お手軽に使えます。
新品で32,000円くらいだったと思います。




DSO5200で実際にMEMBUF基板の波形を観測しているところです。
上がSCLK(ビットクロック)で下がSDATAです。
この様に波形を止めてカーソルからカーソルまで何nSecなのかゆっくり見ることが出来ます。
振幅もカーソルで測れるので便利です。





基板化してもすぐに音が出るというわけには行かず、最初は音のかけらでした。
このUSBオシロでデバッグをしました、DATAがHizになっているハズのところでFPGAとMEMORYのデータが
ファイトしていることが分かり修正すると今度はノイズだらけの音楽になりました。
さて、音が出るようになると今度は44.1k、48k、88.2k、96k、192kで音を出さなくてはなりません。
この辺ではPhoeniciaさんにすっかりお世話になりました。

私自身もデバッグ用にPCAUDIOの環境を構築することが必要になり、またしてもPhoeniciaさんにあれこれ
サポートをしてもらいつつ構築しました。





8paraに接続して動作確認を行いました。




こちらはFN1242での動作確認です。




そしてPCM1794での動作確認です。
どれも電源はDAC基板からもらっています。



DIGIKEYから試作用のパーツが届きました。









メインはFPGAです。




2011.07.10 コレッキリクロック 動作確認OK

11.2896MHzのクロックのみを載せて動作確認をしました、標準ではSMDの水晶発振器ですが、
メタCANの水晶発振器をヤフオクで入手したので使ってみました。
三田あたりで特注クロックを作ってくれないだろうか。





2011.07.19 コレッキリクロック でFN1242の動作確認を行いました

11.2896MHzのクロックのみでFN1242との組み合わせで問題なく動作しました。
写真上のピンクの○で囲んだ部分がX1とX2です、これを外してX3に11.2896MHzのクロックを取り付けています。





MEMBUF基板は動作の確実性をテストするのに追われてどんな音なのか ほとんどまともに試聴したことがありませんでした。 今日はMEMBUF基板の電源をLEDに変更してみました。 あー、やっぱ3端子は駄目だな、と思います。ピアノのアタック音の 鋭さ、全体の水々しい感じ、中高域の情報量が増えシンバルの音も 冴えてきました。ウッドベースのタッチも指先の動きが伝わってきます。 音楽に躍動感を与えて楽しい音にしれくれます。

回路図を公開します。

回路図 


部品表を公開します。

部品表です。 



仮の仕様書を公開します。組み立て情報も載っています。

仕様書(仮)です。 



Home