« 2010年4月 | トップページ | 2010年6月 »

2010年5月の3件の記事

2010年5月27日 (木)

FPGA液晶フォトフレーム計画の再構築

俺も懲りない男だ(5/17/2010)
 ブログにFPGAを失った顛末を書いたら、早速、何人もの方から慰めのコメントを寄せていただいた。いや、ブログをやっていて良かった。人は一人で生きていけないというけれど、こうやって何かがつながっているというのは、とても力づけられる。かみさんがこのショックを慰めてくれる可能性は殆ど皆無である。ありがとうございました。

 コメントにも書いたけれど、落ち込むのも早いが、立ち直るのも人より早い。おしゃかになったFPGA基板を見ていて思いついた。このチップは0.5ミリピッチだが、0.5ミリでもこのあいだの変換基板では難なく成功させている(48ピンQFPだけれど)。

 こわれているのがFPGAチップだけだとしたら、単品のFPGAを交換すれば、基板は生き返る可能性がある。早速、DigiKeyで検索する。あった、あった。Xilinx FPGAで一発でヒットした。何と、価格は、こわれたXC3S250Eは¥1300余りで、下のランクのXC3S100E(ゲートは10万)なら¥1000ちょっとだ。

A5182899

 いや待て。壊れたのはFPGAだけではないかもしれない。レギュレーターも壊しているかもしれない。苦労してFPGAをつけて動かなかったら2重の悲劇だ。そうだ、まずはテストしてみよう。テスターを取り出し、電源を入れて電圧を測る。いやだめだ、Vccは0V。レギュレーターもやられている。いやいや、これはレギュレーターではなく、FPGAがショートしているからかもしれない。

A5182891

 こういうのをやり出したら止まらない気質(たち)である。とにかくFPGAをはずしてしまおう。こちらには、サンハヤトの低温特殊ハンダがある。どうせ昇天したFPGAだ気にすることはない。

 低温ハンダを載せて、半田ごてで4周を暖める。うーむ、とれない。おかしいな、と思った時、ズルッとFPGAがはずれた。フラックスで固着していたようだ。

 FPGAをはずしたところで電圧を測る。良かった。すべての電圧は正常に出ている(このFPGAは、2.5Vと1.2Vという別の電源が要る)。やられたのはFPGAだけだ。新しいチップをつければ元に戻る可能性が高くなった。

 うーむ、楽しみなことになってきたぞ。Xilinxはあきらめて、フォトフレームプロジェクトは、付録基板のLatticeのXP2に移行すべく準備を始めていたところである。その前にやることが増えた。

 しかし、千円余りの単体のXilinxチップを買うために、送料を¥2000払うのはしゃくである。何かをゲタにしたいが、考えられるのはビデオ用の3.3Vで動くDAコンバーター(ADV7125、DWM2007年8月号に詳しい)くらいで、これだってひとつ千円しない。欲しいものといえば、このあいだコメントでshuji009@愛読者さんに勧めた、AlteraのFPGA評価ボードDE0なのだけれど、これを買ってしまえば、がた老AVR研究所には、Xilinx、Lattice、Alteraの3社のFPGAが揃ってしまうことになる。

 この評価ボードDE0は、AlteraのCycronⅢを積んだTerasicという会社が出している教育用ボードで、8MバイトのSDRAM、4Mバイトのフラッシュ、12ビットカラーVGAインターフェース、SDカード、RS232C、PS2など、てんこ盛りのインターフェースがついている。これだけで、念願のAppleⅡを作れるかもしれない。

De0

 しかも価格がこれだけのスペックで、国内では1万6千円、DigiKeyでは、何と1万2千円で買える超お買い得品だ。破格の値段というのが、またどうにも誘惑的で、いずれは買ってしまうことになるだろうが、3種類もFPGAがあったら、開発環境や書き込みツールもそれぞれ用意しなければならないし、今のところここまで手を伸ばす余裕はとてもない。

 盛んに迷っている。DigiKeyの注文画面にまで行っては思いとどまることを繰り返している。とりあえずはLatticeの開発環境を作ることが先のような気もするし。

液晶モニターも壊れていた(5/21/2010)
 今度の事故の原因は、信号線であるべきVGAケーブルに12Vの電源線を混ぜたためにプローブが誤接触したことにある。まずは再発を防ぐために、VGAケーブルから12V線をはずし、モニターに12VのDCアダプターを移設した(最初からこうしておけば良かった)。 工作を終わって通電すると、液晶モニターの画面が出たが、リファレンスのNTSC変換基板からの映像が映らない。真っ白なラスターが出るだけ。

 そうか、FPGAだけの被害ではすまなかった。12Vは同期信号線を通って、こちらの回路にも流れ、何か部品をこわしてしまった。やれやれ、これまでの、このモニターケースにつけてきたスタンド、VGAソケット、それにDCアダプターの工作がすっかり無駄になってしまった。再びがっくり来る。

 映すべき対象を失って、フォトフレーム計画は、完全に振り出しに戻ってしまった。この液晶モニターは、2年前に、中古液晶通販では有名な(というより、ここ以外にない)Aitendoの直営店で買ったカシオのアナログRGBの5インチTFT液晶である。中古なのでNTSC変換基板をつけても¥2000しなかった気がする。

 そのときは、まだ液晶モニターについての知識が殆どなく、たまたま買ったこのモニターがアナログRGBだったので、これまでコンポジット同期や、ビデオDACなどアナログ回路について色々挑戦してきたが、考えれて見れば、デジタルRGBモニターならFPGAのデジタル出力をそのまま入れるだけで、はるかに簡単で画質の良い画像が得られる。

 まあ、これも負け惜しみになるが、前向きに考えると、モニターを失って、むしろプロジェクトの自由度が高まったのかも知れない。アナログRGBにこだわる必要がなくなった。折角ビデオDAC(BU3616)を買ってあるのだが、Vccが5VなのでレベルシフターICが2つもいる。手間ばかりかかって実用性にかけるなあ(フォトフレームが実用?)と思っていたところだ。

 となると、このフォトフレームの計画そのものも、基本から考え直したほうが良さそうだ。最近の電子工作では、ウェブを見ていると、OLEDとか2インチあたりの小さな液晶モジュールが大流行で、どのサイトでも、ARMや最近の強力な付録CPU基板を使って画像を出している。

 みんながやっているし、新しいディバイスOLED(有機ELディスプレイ)などには激しく好奇心を刺激されるのだが、自分が今作ろうとしているのはフォトフレームである。2インチ程度の大きさでは、フォトフレームとしては実用的とはいえないだろう(まだ、こだわっている)。それにフォトフレームはどちらかと言うと手段で本来はFPGAのマスターが主目的だ。プロセッサーを使って画像を出しても自分にはあまり意味がない。

やっぱり液晶モニターを買い直すことにする(5/24/2010)
 色々思い悩んだ結果(はたから見れば馬鹿としか言いようがないが)、結局、初志貫徹でもういちど前と同じような液晶モニターを調達することにした。以前買った店(Aitendo)のウェブページで適当なモニターを探し始める。

 以前に較べると、商品の点数がはるかに多くなっている(マニアが増えているのか)。中古、新品、アナログ、デジタル、大きいの、小さいの、いやまあ種類の多いこと。値段も¥200という呆れる値段から、5インチくらいのサイズなのに¥8000以上するNEC製の新品液晶まで、5~8インチという大きさの範囲だけでも20種類近くある。何が良いのか迷ってしまう。

 この店以外にも液晶モニターを売っているところはあるが、種類が少ないうえ、新品ということもあって、どこもここよりはるかに高い。市販品のフォトフレームの値段や、秋葉原の街角で売っているパソコン用の1万円内外の液晶モニターのことを考えると、液晶パネルに¥5000以上出費するには抵抗がある。とにかくこの店以外で買う気にはならない。

 しかし、この店、殆どがプロか、セミプロのマニアが相手なのだろう。説明の省略が激しく、私のような素人には解読するのが難しい。ジャンクと新品が混じっているので、値段の感覚がつかめない。それに動かすために必要な部品(インバーター、フレキケーブル、ソケットなど)が、そのモニターについているかどうかの判別がつかない。

 モニターによってはインバーターが内蔵されているのもあるし、思わせぶりなコネクター周りの配線の写真が、見る人が見ればすぐわかるのかもしれないが、良くわからない。どうもウェブからは発注しにくい。東京に住んでいるので、直営店舗に行けば直接、手に取れて良さそうなのだが、店舗では割引せず通販に限る特価というのがあったりして悩ましい。

 ただ、前記事で紹介した小型液晶自作サイトの京谷豊氏が、盛んにこの店の製品の実験記事を書かれているので、とても参考になる。それに安心して品物を選べる。

 今、決算期の安売りをやっているようなので、早く買ってしまいたいのだが、目移りしてしまって、今もって買いたいものが決まらない。困ったものである。

絶滅危惧種の平型2連ボリュームを求めて(5/10/2010)

 FPGAや液晶モニターをめぐる気の張る話が続いたので、ここは少し肩の力を抜いてノスタルジックな話題をひとつご紹介。

 FPGAだ、VGAだと大騒ぎしながら、考えが行き詰って計画が進展しない時には、単純作業で先に進めるLPCMプレーヤーの最後のロットの製作を少しづつ続けてきた。

A5272914

 そんななかで大問題が発生した。部品を確認していたら、音量調整の2連VR(ボリューム)が、ひとつしか見当たらない。このあいだ秋葉に寄ってこれまで買っていた千石通商に行ったが在庫切れだった。ウェブで調べると、何とこの小さな平型2連VRは絶滅危惧種で入手が難しいという。最近はスイッチで操作する電子VRが殆どで、確かにこれを使っている音響機器はもう見当たらない。この小型VR、安物で左右のバランスがときどき狂う。他に替わるものがないのか考えていたところだが、手に入れるのが難しくなっている部品とは思わなかった。

 しかし、これを想定して作った基板が4枚もある。ブレッドボードに差していたテスト用のプレーヤーに同じものを使っているのに気づいてひとつ、さらに1号機のVRをはずすとしてひとつ、予備を含めて計3ヶは確保したが、どうしてもあと一つ足りない。

 今さら電子VRに換えるわけにはいかない。困った。ウェブをさらにしつこく検索する。すると、トランジスタラジオ愛好家のページで、秋葉にただ1軒、在庫している店(ラジオデパート3Fシオヤ無線)があることを発見した。

嬉々として仕事の帰り、ラジオデパートに寄る。ひところは火の消えたようなさびしさだったラジオデパートだが、最近は少し活気が戻った。真空管を売る店がやたらと増えた。店にたどりつく。息せき切って主人に聞くが、出てきたのはスイッチ付きの単連の5kΩだけであった。2連はこの店にもないという。うーむ残念。

 そのごDigiKeyの分厚いカタログ(居間の昼寝用の枕)を見るともなしに見ていて、ここで探すことに気がつく。カタログをめくる。あった。Panasonicの2連ボリュームが大きさもフットプリントもピッタリ同じだ。喜び勇んでサイトに行って在庫を確かめる。しかし、ここも在庫切れでお問い合わせ扱いである。

 藁にもすがる思いでメールを打つ。返ってきたメールはやはり製造停止で入荷の見込みなしという返事であった。しかし、ここの問い合わせメールの返信は恐ろしく早い。メールを打って外出し、数時間後帰ってきたらもう返事が戻っていた。

A5272903

 プリント基板なので、別のものをつけるわけにはいかない。昔のトランジスタラジオや、ウォークマンには至極当たり前についていたダイヤル式の可変抵抗器なのになあ、と時代の流れに感傷的になっていたとき、ふと思いついた。そうだ。もう使っていないカセットテープ時代のウォークマンが一台眠っている。あそこにはダイヤル式のボリュウムがついていたはずだ。

 戸棚の奥から掘り出した。カセットテープの山も戸棚の片隅に眠っている。おやおや、電池の電解液が漏れて散々な状態だ。おう、思い通りのボリュームがついている。大きさも16ミリでピッタリだ。腐った電池をはずし接点を磨いて動くかどうか確かめる。

 幸か不幸か、モーターはピクリとも動かなかった。よし、これで心置きなく分解できる(その後、このウォークマンはヘッドフォンジャックをつけないと電源が入らない仕様であることを思い出した。許せウォークマン。合掌)。4ヶばかりの小さなネジをはずしてパズルのように取り外した。この頃(30年近く昔)のアセンブリはとても手が込んでいる。

A5272910

 ボリュームを基板ごと切り離した。おおお、ほとんど同じ大きさだ。抵抗を測る。ピッタリ10KΩの2連だ。固定に一工夫しなければならないが、スペース的には全く問題がない。良かった。これでプレーヤーのプリント基板が無駄にならずにすむ。めでたし。めでたし。

| | コメント (1) | トラックバック (0)

2010年5月17日 (月)

FPGAでビデオ信号を作りカラーバーを出す(2)

カラーバーが出るあと少しのところでFPGAを壊してしまった
 がた老AVR研究所始まって以来の悲劇が起きた。FPGA基板を、液晶モニターの12V電源線とオシロのプローブが接触する事故で、一瞬にして失ったのである。外見は全く変わりがないが、ISEのiMPACTは無情にも赤のエラーメッセージを出してディバイスを認識しない。

 当研究所は開所以来、レギュレーター、フォトカップラー、秋月のリアルタイマーモジュール、Mega168など数多くの犠牲者を出しているけれど、今度の事故は替わりがないということでは一番深刻である。このFPGA基板は、今は、デジタルデザインテクノロジーと名を換えた雑誌デザインウェーブマガジン2007年7月号の付録基板で、XilinxのSpartan3E XC3S250Eが載っている。版元ではとうに売り切れと表示されており、手に入れることはできない。

 こちらも新刊で手に入れたわけではなく、2年前偶然、新宿の紀伊国屋でバックナンバーで発見し入手した。これまでLEDチカチカから始まって、フォトフレームプロジェクトとして7セグLED、UART、SRAMアクセスと演習問題をこなし、いよいよビデオ信号発生のステップまで進んできた。

 日曜の昼下がり、動かなくなった時は、暫し呆然となった。もうちょっとのところで、液晶モニターに色が出るところだったのである。オシロとロジアナの活躍で波形を見る限りでは、ほぼ満足できるコンポジット同期信号と、色信号(一色だけだが)の発生までこぎつけていたのに。

コーディングは短期勝負(5/13/2010)

A5172882_3

 事故が起きる前までのプロジェクトの進行は順調だった。前の記事にあるようにRGBインターフェースの開発はHDLソースの擬似コーディングのレベルで暫く止まっていたのだが、再開してからは速かった。詳細設計に当たるステップレベルの擬似コーディングを2枚のメモ用紙に清書し、ISEの新規プロジェクトを立ち上げてコーディングを開始する。

 コーディングはなるべく一度に全部一気に書き上げるのもコツのうちだ。短期記憶を活用できるので仕上がりに漏れが少なくなる。日にちを空けると、モジュール間の接続などをいちいち確認する手間が増えて効率が低下する。今回も半日くらいで、すべてのコードを書き終えた。

 VGAのコネクターの配線がまだだったことに気が付き、FPGA基板のベース基板にVGAソケットと、DCアダプター、電源スイッチを半田付けする。アナログ回路が懸案のまま残っている。カラーバーの色信号は1と0だけだが、FPGAのLVCMOSの3.3Vからアナログ電圧に変換しなければ、こわれないにしても液晶モニターで正しい色が出ないだろう。

 アナログ色信号のところは、トランジスタ技術の2009年11月号の「入門!画像表示回路の作り方」が詳しい。小型液晶のサイトで有名な京谷豊氏の記事が実践的でとても参考になった。分圧抵抗で単に出力を0.7Vに落とし、カプリングコンデンサーを入れれば良いようだ。調整が必要なのでとりあえず1信号だけの回路を組む。

 SRAMからのデータ読み込みはコメントではずしておき、8色のカラーバーをifステートメントを8行並べて即席で作る。色信号をひとつづつ変えて8色を作る。いわゆるグレイコードというやつである。

 コードが完成した。メインモジュールで色信号を制御し、1ライン毎の水平ブランキング、1画面毎の垂直ブランキングのパルスは、サブモジュールをリクエストし、終了をビジーフラグで待つ。これで動くはずだ。早く試してみたい気持ちで気がせく。

 どきどきしながら論理合成(コンパイルというかシンタックスチェック)に進む。うーむ、モジュールとの接続でやっぱりエラーが沢山出る。まだ、regとwireの違いが飲み込めない。早く動かしたいので、対症療法で前のコードの書き方を真似てエラーをなくす。

 ところが、論理合成の次のステップ、implement design(リンカーのようなものか)で、ドットクロックを作っているDCM(デジタルクロックマネージャー)モジュールが次のようなメッセージを吐いてうまく組み込めなくなった。

Reading NGO file "E:/Xlinx/Gataro/studyprg/Video/RGBif/RGB_top.ngc" ...
Reading in constraint information from 'PicCLK_arwz.ucf'...
Gathering constraint information from source properties...
Done.

ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
       '<INST DCM_SP_INST CLK_FEEDBACK = 1X;> [PicCLK_arwz.ucf(4)]'
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint: .......(以下略)

DCMがコンパイルできないのは解決(5/14/10)

Ws000001

 ビデオのドットクロック生成は、Xilinxの無償IPコアのひとつ、CoreGeneratorのDCMを使っている。初めてのIP利用だ。ウェブで勉強し、一番簡単なユニット(Single DCM SP9.1i)を使った。ドットクロックは厳密には6.05Mhzが必要だが、今のマスタークロックが33Mhzなので、1/5.5に分周して6.0Mhzにしている。これくらいの誤差は問題ないはずだ。

 上記のエラーメッセージは、何かファイルがないとか言っている。困った。ウェブで調べる。英語のQ&Aがいくつかヒットしたが、英文そのものより、中味の意味が全く理解できない。DCMのしくみそのものがわかっていないので、何を言っているのかがわからない。恐らく日本語で書かれていても何のことか理解できなかっただろう。

 ただ、少し思い当たる節がある。ウェブにはもう一度プロジェクトを作り直すと良いかもしれないという記述があった。そう言えば一度プロジェクトを作ってDCMを作ってから、フォルダーを作り直しDCMの本体(.axw)を移した。もしかしたら他にも必要なファイルがあったのかもしれない。

 だめもとで、もう一度プロジェクトを新規に作り直し、DCMもあらたに定義する。他のソースファイルは前のものをそっくり持ってくる。やってみた。やったー、通った。implement designが通って先に進んだ。

DCMクロックが出ない(5/15/10)
 いよいよコンフィギュレーション(ファーム書き込み)である。まだ液晶モニターは接続していないので、動いたかどうかは目で確認できない。各端子にさしたオシロのプローブから出る波形が頼りだ。ファーム書き込みが終わった。しかし、オシロからは全く反応がない。

 まあ、こういうのには慣れている。FPGAが動いていることは、リセットのところにLEDが入れてありボタンを押すと点灯するので確認できる。マスタークロックの端子をオシロで見る。33MHzもちゃんと出ている。 

 それでは、次はDCMのドットクロックだ。外に出ていないので、空いているピンにこのクロックを出し、論理合成し直す。そうか、FPGAは中が見えないけれどデバッグにはこうして臨時に外に出力してみれば良いのだ。ロジアナと同じだ。

 あれえ、ドットクロックが出ていない。考えてみればこのインターフェースの殆どの駆動はこのドットクロックなので、これが動かなければ確かに全く進まない。

 しかし、DCMが何故動いていないのだ。難しいことは何もやっていない。単にマスタークロックを分周しているだけである。ウェブにも特に注意書きはない。簡単に動かしている。クロックをinternalやexternalに変えて見たり、色々いじってみるが、ガンとして動かない。

 仕方がないので、ドットクロックをDCMからとらず、マスタークロックに直結してみる。おお、動いた動いた。時間の換算が必要だが、ちゃんと想定どおり同期パルスが出ている。オシロで動いていることを確認し、ロジアナに換えてコンポジット同期のややこしい垂直同期の部分のデータを観測する。

 良いぞ。ちゃんと等価パルスも切り込みパルスも想定どおり出ている。素晴らしい。このパルスの生成では、なひたふ電子情報のサイトに大変お世話になった。

Ws000000

DCMモジュールのリセットは正論理(5/15/2010)
 マスタークロックの駆動で、RGBインターフェースの同期線も色信号線もそれらしい信号が出ていることは確認できた。しかし、ドットクロックの速度にしなければ、実際の液晶モニターは駆動できない。

 自分で分周しても良いが、今度の周波数は正確に出す必要があり、5.5分の一に分周することは簡単ではない。仕方がないので、全く新しいプロジェクトにDCMモジュールだけ入れて、動くかどうか調べてみることにした。

 ありゃりゃ、これでも動かない。No Errorで組み込まれたらあとは調べるところがない。思いあぐねて、基板を前に何気なくリセットボタンを押した時である。オシロに何か変化が起きた。

 何ということだ。リセットボタンを押すとDCMモジュールが動く。このモジュールのリセット信号は、正論理だった。やれやれ。普通、リセットピンはプルアップで1に上げておき、スイッチでグランドに落としリセットするという負論理が常識なので、このDCMもそうだとばっかり信じていた。

 これはきっとはまった人が私以外にもいるにちがいない。恥ずかしいので言わないだけだろう。それにしても、どんなことでも疑ってみるというデバッグの基本を思い知らされた一幕である。

画面にわずか色がでたのも束の間(5/16/2010)
 DCMでちゃんとしたドットクロック(6.00Mhz)が出て、いよいよ液晶モニターでテストする段階である。オシロで、色信号レベルが1V以下であることを確認してVGAコネクターをつなぐ。緊張の一瞬である。

 今のところ色信号は青しか配線していないので(分圧抵抗を調整するため)、想定では右半分が青になり、左が黒になるはずである。

 電源を入れる。おお、何かでたぞ、上の10ラインぐらい斜めに鮮やかな青色が出たが、下は薄暗い。電圧を測ってみる。液晶モニターをつけると0.4Vまで下がってしまう。

 斜めになっているのは同期がずれているからだろう(写真をとるまがなかった)。ロジアナで時間を測る。うーむ、少し長すぎる。色表示区間は正確だが、水平同期期間がおかしい。

 水平同期のロジックを確かめる。おや、数字が間違っていた。ケアレスミスだ。FPGAのプログラムを修正する。これでどうだ。おやあ、上部の斜め線がなくなって全体に薄い半分青の画面に変わった。色信号の電圧が低すぎるのか。

A5172884

 液晶モニターに実際につなぎながら、あちこち波形を確認する。オシロのプローブで、色信号のアナログの部分をチェックしていたときである。、何気なく同期信号のところを触れたはずみで、プローブが隣のピンに接触した。気のせいかも知れないが小さな火花が飛んだように見えた。

 隣のピンが電源線であることに気が付いて、背筋に冷たいものが走った。あ、あ、あ、もしかして。オシロでクロックをチェックするが、真っ直ぐな線のまま。あわてて、ISEのiMPACTでディバイスを確認するが真っ赤なエラーメッセージ。

 油断していたのが悪かった。100Vなら警戒するが(それでもフォトカプラーを壊した)、12Vなので、余り気にしていなかった。しかも、勘違いして電源ピンは同期信号ピンの隣ではなく、左端だとばかりと思っていた。

 手持ちのFPGAは、このXilinxのSpartan以外にLatticeのXP2基板(これも雑誌付録だが)があるので、FPGAフォトフレームプロジェクトを続けることは可能だ。しかし基板上のSRAMの配線などを最初から作り直さなければならない。今まで基板にかけた手間はすべて無駄になってしまった。ここまでの環境に戻すのは、相当時間がかかりそうである。

A5172885

 まあ、Xilinxでなくても今まで得たノウハウが無駄になることはない。ソースはそのまま使える。今度のXP2はi/oピンが多いので、フルカラーも問題ないはずである。今まで出番がなく気にしていたLattice基板も活躍できそうだ。なるべく前向きの思考をして、事故のショックを忘れようと努める。

 反省点?今さら悔やんでみても始まらない。これで懲りただろう。これからは異電圧のところはボンドかなにかで絶縁することくらいか。みなさんも、電源逆ざしと電位差のある回路をいじるときは、くれぐれもご注意下さい。

続きを楽しみに期待していただいていた読者の方には申し訳ないが、暫くフォトフレームプロジェクトはお休みである。

| | コメント (7) | トラックバック (0)

2010年5月11日 (火)

FPGAでビデオ信号を作りカラーバーを出す(1)

 FPGAによるフォトフレーム制作プロジェクトは第三ステップで、やっと画像に関係のある工程に入った。FPGAでビデオ(アナログRGB)インターフェースを作り、手持ちのTFT液晶モニター(カシオの5.5インチ、パチンコ(?)液晶の中古)にカラーバーを出力するステップである。

 当研究所の所長は学校を出て30数年、放送通信関連企業でシステム開発をしていたので、直接ではないが、ビデオインターフェースには昔から馴染みがある。さらにその昔、ラジオ少年だったころ、テレビの自作は最高峰の技術として憧れ(勿論、全部真空管の時代)の的だった。おおよそのことは理解しているつもりである。それに、このアプリケーションはFPGAの恰好の題材なので、雑誌やウェブに沢山実装例やソースコードが出ている。参考情報は豊富にある。

 しかし懸念していた通り、理屈で理解していることと実際に回路を組んで動かすことの間には想像を越えた大きな隔たりがあった。具体的にどう決めればよいのか分からないことが山ほどある。調べ始めるとさらに別の疑問が発生し、その解明を求めてまた道草を食うという繰り返しで中々先に進めない。

 まあフォトフレームを作るのは名目で、本当はこの道草が面白い。目的があるので真剣に理解しようとする。今までおぼろげで断片的な知識が少しづつ、つながって確かなものになっていく実感は、少しおおげさだが人生の充実感を覚える興奮である。この連休は殆ど外へ出かけずにビデオインターフェースをめぐる探検を楽しんでいた。

UARTが直ってしまった(5/2/2010)

A5012873

 はなばなしくFPGAフォトフレームプロジェクト第三ステップを宣言したものの、UARTの不具合は残ったままだ。このまま放置するのは、どうも後味が悪い。で、連休の前半は日もあるので、UARTのトラブルシューティングに時間をかけてみた。不具合は2つある。

①端末のリターンキーを押した直後の最初の文字が化けてANKでない2文字が出力される。

②FPGAリセットの直後は、正しくプロンプトの'>'が出ず、同じように字化けする。

 まず②の解明だ。ワンショットの波形ならオシロは最強の武器である。リセット直後のシリアル(UART)送信データを観測する。うはあ、直後に短期間、発振を起こしている。発振周波数は、マスタークロックの33MHz。クロック単位で送信データが暴れている。これでは送信データが化けるわけだ。

 あわてて、VerilogHDLのソースを確認する。原因ははっきりわからないが、親と子のモジュールがリセットに入ったときのわずかな時間差で、UART送信モジュールがレディ/ビジーを繰り返してシリアルラインが暴れているようだ。送信要求は必ず送信モジュールがレディになったことを確認してから出すことにして、発振は止まった。しかし相変わらず文字化けは直らない。時々、正常になるというのがどうも怪しい。

 ①の解明は厄介だ。文字化けしているシリアルラインをロジアナで観測しても、文字化けしたコードが見えるだけだし、オシロでは全体を見られない。状況は、送信の立ち上がりの1文字がおかしく、無効な2文字になったあとは正常になる。このあと大量の文字を送っても一切問題ない。

 気分が悪い。このUARTはデバッグ用に、この先も使いたいので根本的に直しておきたいが、原因がつかめない。万策尽きてデバッグはあきらめ、少し、出力の状況を換えようとリセットのあとにWelcomeメッセージを出したり、SRAMからの出力を行を一行ずらして出るようにステートマシンを改修した。

Uart

 ところが、これで直ったのである。???である。最初の1文字から何の問題もなく表示される。②は前と変わらないが、①の不具合はきれいさっぱり直ってしまった。何回やっても問題ない。直ってしまったのは良いが、原因がわからないというのが始末が悪い。

 ということで、VerilogHDLのソースの公開は迷っている。SRAMにデータを入れて、それをUARTに吐き出すだけのテストベンチのHDLソースが役に立つとは思えないが、何かの参考にはなると思う。しかしUARTがこの状態ではどうも気が進まない。(もし、必要ならコメントを下さい)。

またもやChaNさんのサイトに戻る(5/5/2010)
 これから作るのは、ビデオインターフェースと言っても正確にはアナログRGBインターフェースで、いわゆるテレビ用のNTSCインターフェースではない。NTSCは一本の信号線に、水平・垂直同期から色信号まですべてを盛り込むので規格が非常に厳格で、専用ICでもないと作るのは大変だが、パソコンモニターなどへのRGBインターフェースは、信号線が分かれているので、だいぶ簡単だ。

 しかも、今ターゲットとしているモニターは、QVGAというVGA(NTSCとほぼ同じ)クラスの1/4のデータ量(320×240)で、液晶モニターにはコンポジット(NTSC)入力でこの液晶を表示できる変換基板アダプターがおまけについている。この波形をそっくり真似て入れてやれば問題なく画像が出る理屈である。

A5112880

 部品棚にしまってあった液晶モニターを取り出し、デジカメのビデオ信号を入れて、同期信号をオシロで調べる。おやあ、このカシオのTFT液晶モニターには、同期信号線が一本しかない。ということはコンポジット同期だ。あわててウェブや、雑誌の参考資料を調べ直す。うむ、そう難しくはない。垂直同期の長いパルスが水平同期信号に重畳しているだけである。

 オシロでは長期間、測れないので、ロジアナを取り出してさらに調べる。ふむふむ、単に重畳しているだけでなく、NTSCのように、等価パルスと切り込みパルスというのが垂直同期期間に出ている。素晴らしい。雑誌や教科書でしか見なかった波形を自分の手で実際に調べている。世界が広がった気分である(いや最近、感動しやすくなっただけか)。

C_sync

 問題は色信号である。オシロでみると、マイナス電位が出ている。良く分からない。ここは0-0.7V P-Pと規定されているが、これはNTSCの同期パルスを含んでいる時の規定で、RGBインターフェースの規定ではない。それにマイナス電位などとは、どこにも書かれていない。

 用意していたビデオDAC(BU3616)が5Vベースであることにこのあいだ気づいて、厄介なので最初は自前の簡単なR-2Rラダー抵抗DACでアナログ色信号を作ろうと思っているが、どうやって1Vにするのか見当がつかない。しかも色信号線のインピーダンスは75Ωで、FPGAの出力ピンがこれをドライブできるとは思えない。やっぱり最後はアナログのところがネックになりそうだ。

 めげていても先に進まない。ここのステップの目標はカラーバーを画面に出すことだけなので、とりあえずは色信号の問題は先で考えることにする。カラーバーだけなら、RGB信号を1,0にするだけで8色でる。同期信号発生のコードの開発の方が先である。

 ウェブや雑誌には、色々なコーディング例がある。どれにするか迷う。いくつかのサイトから、それらしい規格とタイミングチャートを収集する。NTSCと違って、RGBインターフェースはそう厳密ではないが、QVGAの情報が少ない。

 分かりやすいページを見つけたと喜んだら、ChaNさんのサイトの技術情報だった。そういえばここにはQVGAのRGBインターフェースをCPLDで作る記事があったことを思い出した。10年近く前のページである。やれやれ、またChaNさんのところへ帰ってきた。このあいだのLPC2388のときと同じだ。悔しいけれどまたお世話になるしかない。

アナログRGBインターフェースの擬似コーディング完成(5/7/2010)
 勉強の結果、FPGAでアナログRGBの同期信号を作るのはそう難しくないことがわかった。ピクセルクロック(1画素の色信号を出す時間)を数えて、決められた時間に水平同期と垂直同期パルスを1ライン毎と1画面毎に出し、それを繰り返すだけである。どのタイミングで出すかは決まっているし、NTSCと違ってノンインターレースなので気が楽だ。最悪でも今のアダプターが出している通りにすればよい。

 これを、どれだけ簡便にスマートに実現するかが腕の見せどころだ。頭を捻る。モジュールの構成に一工夫した。垂直同期の前後の等価パルスを出すところは全く同じ形である。ひとつのロジックで使い回しが効くように相対クロックにして親から呼ぶようにする。呼ぶといっても、同じ同期信号線を別々のモジュールでドライブすることは出来ない(複数のソースを持つ論理回路は作れない)ので、ひとつのループの中に置き、それぞれリクエストで駆動する。

 擬似コードのレベルだが順調に進んだ。当初は、カラーバーを出すだけのプログラムにするつもりだったが、少し欲を出して、SRAMを読み、そのデータを色信号として表示するところまで作りこむことにする。ただ、SRAMにデータを入れるのは大変なので、カラーバーのテストのときはデータを決め打ちにしておく。

 思いのほか早く目処がついて、あとはコーディングするだけとなった。ところが出来た途端に安心してしまって、次のコーディングに進む気力がなくなってしまった。これはどうも昔からの癖で、思い立ったときは自分でも驚くくらい体が勝手に動くが、一旦安心して落ち着いてしまうと、再開するのに偉く時間がかかる。

 要するに気まぐれとしか言いようがないのだが、ここはアマチュアの特権である。リニアPCMプレーヤーの残りのロット(あと4台)の制作を始めたり、R-2RラダーDACのブレッドボード版を作ったりして気分が乗るのを待つ。このR-2RラダーDACも結構、奥が深くて面白い。

もうちょっとで壊すところだった(5/10/2010)
 同期信号のコーディングにまだ取り掛かる気分になれない。プレーヤーの制作も部品が足らなくて先に進めない。こういうときは手作業が一番である。考えてみたら液晶モニターのおまけのNTSC変換基板はテストの時は使わないのに、電源供給を兼ねているので、はずすわけにはいかない。邪魔なので、モニターのケースに直接、本式のシュリンクDSUB15ピンのVGAソケットを固定し、空きピンで電源供給(12V)もFPGA基板からしてやることにした。FPGA基板に12Vのソケットをつけるか、5V供給と共通にする。

 ついでに、ケースの固定に仮のスタンドを、このあいだ買ったミニサーキュラーソーでアクリル板を切り、接着剤で固定した。最近の瞬間接着剤は強力で、あっという間にちょっとしたフォトフレーム風のモニターが出来上がる。FPGA基板は最終的には、このケースに固定するつもりで、VGAソケットは余計といえば余計だが、このあいだのスケルトンのプレーヤーケースと言い、自己満足だけれど無骨なつくりがかえって中古のケースに似合って気分が良い。

A5102878

 上機嫌で、VGAソケットから実際の信号を送って画面が出るかテストする。15ピンのVGAインターフェースは、本当に使っているピンは9本しかなく、しかもグランドが各信号線単位にあるので有効な線は、5~6本、残りは使っていない。このうちの1本を電源線とした。VGAケーブルをソケットにつなぎ通電する。全く動かない。あれえ、おかしいな。テスターで各ピンの導通テストをする。

A5102877問題ない。まさか、ショート?念のため、電源ラインから調べる。なんとなんと、しっかり0Ω。なんだとお、あわててケーブルを抜き、半田付けしたソケットのところを調べる。いや、大丈夫だ。するとケーブル? いやVGAケーブルはこのあいだ秋葉で買ってきた1mの同軸、高級極細タイプと銘打った新品だ。手持ちのVGAケーブルは全部ごつくて長いので、このためにわざわざ買ってきたものである。

 ケーブルをテスターで調べる。驚いたことに、このVGAケーブルはNC(Not Connected)のはずの11ピン(電源線にした)がグランドの10ピンとつながっている。中国製のケーブルだ。1本接続をケチったのかと、手持ちの別のVGAケーブルを調べてみたら、何と、このケーブルも10と11が導通している。しかも、このソケットにはそもそもNCの9ピン、グランドピンのひとつの5ピン、VESAで規定したデジタルラインの12、15のピンそのものがない。

 何が何やらわけがわからなくなってきた。いずれにしても空きピンの11ピンに電源を供給してショートさせてしまったことは事実である。恐る恐る元の配線に戻して電源を入れる。良かった。何事もなく画面が出た。11ピンから、別の12ピンに電源線を移して、再度テスト。無事、VGAケーブルから画面がでることを確認した。元のアダプターからの線が短かったので、長いケーブルによる色にじみなどの画質低下を心配していたが、全く問題はなかった。考えてみれば、75オームのインピーダンスの線なのだから少々引き回しても問題ないはずだ。

 それに、ショートさせたのはACからとる12V電源アダプターで、液晶やNTSC変換基板の方ではない(12Vが直接液晶にかかっている)。そう慌てることもなかったことにあとで気づく。

 ともあれ、これで実験環境は見違えるほど改善された。これまでは液晶モニターが自立して立たないので、どこかに立てかけ、変換基板アダプターをぶらぶらさせて画像を見るのに苦労していた。そろそろコーディングを始めよう。

| | コメント (0) | トラックバック (0)

« 2010年4月 | トップページ | 2010年6月 »