それにしても、自前のソースをコンパイル(論理合成)するだけでこれだけの騒ぎだ。次のピンアサインをやって動かすことを確認するステップに進む勇気が出てこない。コードは考えたようには動かないに違いない(書いたようにしか動かない)。動いたとしても今のコードではLEDの表示が動かない。カウンターを動かすサブモジュールがまだ出来ていないのだ。このままでは決め打ちした数字しか表示されない。UARTを雑誌のサンプルから入れても良いが、これ以上コード量を増やして検証範囲を広げたくない気持ちもある。タクトスイッチの入力回路を作ることにする。動くのを確認してからブログに報告しようと思っていたが、いつ動くか見当がつかなくなってきた。このあたりで区切りをつけることにする。(木)FPGAフォトフレーム開発のロードマップ例年この時期は忙しい。所属している団体の全国集会(といっても大阪、名古屋だけだが)の幹事の仕事に、確定申告、それに新しいセミナーの講師資料の準備、以前から続けている老人ホームの慰問演奏会、恒例のスキー行などと、数えてみたら2月から3月にかけて7つ以上の行事が重なった。イベントというのは何故か平均的には起きてくれないものらしい。そんなことで電子工作にかけられるまとまった時間がとれない。リニアPCMプレーヤーのWindowsMediaPlayer生成WAVファイルの不具合の報告もつれない返事をしてしまった。ChaNさんのところは早速対応されたようなので、いずれはこちらも直さないといけないが(何しろChaNさんのFileSystemを使わせて貰っている)、必須フォーマットデータの間にオプションデータを突っ込んで来るWMPの横着な仕様に対応するのは、正直言ってどうも気が重い。このブログのアップもほぼ20日ぶりである。このあいだはFPGAでビデオインターフェースを作ると勢い込んでいたが、現実に基板を揃え、実際のブロックダイヤグラムを細かく考え出すと、とてもじゃないが、そう簡単なことでないことが見えてきた。FPGAに書き込むソース言語について全く経験がない(この前のLEDチカチカは丸写し)。HDLとVHDLという2つがあることくらいは知っているが、実際にコーディングしたことがない。これだけでも十分乱暴な話である。それに、ビデオインターフェースのブロックダイアグラムの各部の機能についておおよその理解はしているものの、これを統合してひとつのインターフェースにするのに何から手をつけていけば良いのか全く見当がつかない。BeagleBoardのときは、もともとソースをいじるつもりがなく、パッケージをネットから落としてそのままインストールし、それだけで満足だった。FPGAではこれをやりたくない。実は、LANによる商用電源の制御(Mega168インターネット開通3/17/08記事)も、最初はTCP/IPをソースレベルでハッキングと張り切っていたのだが、貰ったソースコードが余りにも簡単に動いてしまってそれきりになっている。FPGAくらいは徹底的にスクラッチから自分のやりたいことを作って行こう。苦労しないと技術は身につかない。そのためにはやはり簡単なアプリケーションを自分で作って動かしていくのが一番だ。オペアンプ問題は動作電圧不足というオチ(2/22/10)俗事に時間をとられ、頭の中はFPGAに占領され、まとまった電子工作が出来ない日が続いているが、困ったことに何か手を動かしていないと気分が落ち着かない状態になっている。手が空けば、手は自然にブレッドボードに向かい、細々とした問題解決に励んでいた。直前の記事にあげたSDカードプレーヤーのオペアンプの問題は、ブログのアップ直後、またkugaさんのコメントで一気に解決した。何と、オペアンプには最小動作電圧というのがあるというのだ。データシートは穴があくまで見よといわれているが、オペアンプのデータシートはアナログの素人にとっては、殆ど理解不能である。最大定格と推奨動作条件くらいは見ていたが、最小動作電圧というのがあるとは知らなかった。慌ててデータシートを確かめる。これまでに買ったオペアンプは、LM358、NJM4580DD、NJM2114DD、それにNJM5532の4種類である。最小動作電圧はちゃんとデータシートに出ていた。LM358は単電源3V、4580は±2V。それに対して2114と5532は±3Vである。何、4580だって定格外ではないか。ブレッドボードにこのまえの秋月FGのテスト電源に使った±5V電源を組み込み、それぞれ動かしてみる。はいはい、今まで動かなかった2114も5532も全く問題なく良い音になった。オペアンプのみなさん大変失礼しました。いうのがあるのも知った。1倍の反転増幅回路なら正常に動くかもという助言で早速試してみたが(入力はDACなのでVccの1/2が中点)、残念ながら3.3Vの単電源では無理なようで、ちゃんとした音にはならなかった。それはともかく、オペアンプによる音の差は明確だ。値段の差がはっきりわかる。358はまずピリピリと小さなノイズが入ってちょっと問題外だが、残りの3つの差も何回か同じソースを聞いていると違いが見えてくる。4580の音に較べて、2114は弦がなめらかで、艶(つや)やかな音に変わる。5532は分厚い重厚な音になる。オーディオマニアがオペアンプにこだわるわけが分かるような気がする。それにしても現用のNJM4580が定格外(±2Vのところを0~3V)だったことは意外だった。定格外でも全く問題なく良い音を出してくれている。Mega328の定格外のクロックといい、今度のプレーヤーは針の穴を通すような実装だったというわけだ。FPGAフォトフレーム計画のロードマップを作る(3/10/10)何を練習問題にするのかまだ思案中だが、本題のFPGAビデオインターフェースのアプローチは続けている。何事に付けても計画を立てておくのとそうでないのではあとの苦労が全然違う。今度のプロジェクトは沢山の要素で構成される。ひとつづつ検討して行く。プロセッサーはこのあいだRTCを動かした雑誌付録基板、STM32F103(CQSTARM)を想定する。この石のフラッシュサイズは128KBなので、もし、JPEGデコードライブラリが入らなければ、さらにもうひとつの付録基板LPC2388がある。こいつはフラッシュが512KBあるので十分だろう。これはSDカードが実装されていないので追加する必要がある。画像データをプロセッサーからFPGAへ送るインターフェースは、静止画ならSPIで十分だと思う。ユーザーインタフェースは最初はUARTにし、その後はLCDとタクトスイッチで良いだろう。最終アプリケーションはフォトフレームなので複雑な操作はいらない。問題は、ビデオバッファーである。XC3ES250)のブロックRAMはおよそ200Kビットだが、今あるTFT液晶の320×240の解像度(QVGA)の1画面のピクセルサイズ(76.8Kビット)で割ると、3ビットすらとれない。これでは16色も出せない。フォトフレームにするには最低でも256色、欲を言えば6万色(16ビット)は欲しい。いうことで、必然的に外部RAMをつけることになる。外付けRAMは当初から、しかけの難しい(というより素人には無理な)DRAMではなく、SRAMを考えている。我々アマチュアの心強い味方、秋月電子には、SRAMをいつも何種類か揃えてくれている。おや、狙っていたアクセス速度10nsの高速SRAMは売り切れだ。55nsのものしかない。レームデータ量614KB)。VGAも動画も今やるわけではない。ビデオインターフェースを作るなら、このあたりまで視野に入れておきたい。秋月のサイトによれば、高速SRAMの次の入荷は4月上旬とある。それまで待つことにする。動画ということになると、当研究所には昔々買ったQCAMという目玉小僧の形をしたVGAカメラがある。30万画素でパラレルポートにつないでいた。これが動かせなくても、最近はCCDカメラも安価だ。先の話になるが、カメラをつけて録画というところまで考えると、余裕を持たせたVRAMにしておきたいところだ。このあたりはそうそう簡単には作れない。今のPCならUSBを使った安価なカメラを使って録画するところまで何の苦労もせず出来ると思うが、マイコンではまだ結構難しい。アマチュアの電子工作でも最高レベルに属する。段々気持ちが高ぶってやる気が出てきた。例によって、逐次開発方式で開発ステップを考える。FPGAの言語の習得VerilogHDLか、VHDLかを早く決めないといけないが、とりあえず7セグLEDあたりをUARTからコントロールするテストアプリケーションを作る。FPGAとSRAMの接続、非同期アクセステストSRAMをFPGA基板に外付けし、FPGAでSRAMをアクセスする。FPGAのビデオインターフェースの出力、カラーバーなどFPGA内のPLLモジュールでクロックを作りVSYNC、HSYNC信号を生成する。カラーバーを画面に出すことがゴール。FPGA基板へのDAC制作、またはDACチップの接続ラダー抵抗式DACで、最初16色程度のカラーを出し、最終的には秋月で売っているビデオDAC、BU3616を使ってVRAMデータをアナログRGBデータに変換する。FPGAとARMとのインターフェース設計SPIモジュールの開発。ARMからデータの転送。ARMのSDカードアクセスファイルシステムの導入。ChaNさんのFATFSを使わせて貰おう。SDカード内のBMPデータの描画これがまず最初のゴール。フォトフレームが完成。液晶ケースに基板固定。将来構想として、動画再生、カメラの導入、録画など初期のステップは独立して作業可能。3は多数の参考情報あり。6はFPGAでなくARMの開発。7がとりあえずの完成形。9を最終ゴールとする。ロードマップが出来た。久しぶりにXlinxの開発環境を立ち上げて動くことを確かめる。雑誌のLEDチカチカのテストコードはVHDLだった。自分の好みから言えば、ステートメントが少なくて済むVerilogHDLにしたいのだが、手本にしようと思うUARTのコードもVHDLだし、どうしたものか迷う。このあたりは、電子工作でも一番心楽しい時である。旅行の前にどこに行くかあれこれプランを立てて夢を膨らませるのに似ている。