« 2010年4月18日 - 2010年4月24日 | トップページ | 2010年5月9日 - 2010年5月15日 »

2010年4月25日 - 2010年5月1日の1件の記事

2010年4月30日 (金)

FPGAの外付けSRAMアクセス成功

VerilogHDLに親しむ(4/24/2010)
 SRAMをアクセスするテストベンチのステートマシンの擬似コーディングを少しづつ、実際のVerilogHDLのコードに移していく。折角だから7セグLEDにも登場してもらって、SRAMへの蓄積バイト数を表示することにする。

 7セグLEDはあれから、また2つモジュールを増やして6ヶにした。こうしておくと、この7セグ基板はこのあとデジタルクロックに活用できる。VerilogHDLのドライバーも6ヶ用に改修する。コーディングに慣れてきて鼻歌が出る。

A4302870

 UARTは、前のステップのコードをそのまま流用する。モジュールを別ファイルにしてあるので移植は簡単だ。今度は本格的なステートマシンである。HDLの開発にだいぶ慣れては来たが、まだregとwireの区別を完全に理解しているわけではない。トップモジュールで使わない変数は、いちいちあらたに定義しないでモジュール間でスルーできるはずなのだが、自信がない。それでもトップモジュール、top_sramは徐々に形をなして完成に近づいてきた。

 この過程が楽しい。電子工作の醍醐味は、自分で考えたロジックやプログラムが実際に思ったとおりに動いたときである。コーディングしているときはこれで果たして動くのか不安でならないが(プログラムは書いたとおりにしか動かない)、デバッグをやりとげて実際に想定どおりの動きをしたときの喜びはなにものにも換えがたい(だから人のソースはわざと見ないようにしている)。

 プラモデルや、キットを組み立てるのも、それはそれで楽しいが、自分で設計図を引き、材料を揃えて、いちから作り上げた模型飛行機が実際に空を飛んだときの興奮とは比較にならないのと同じである。

また、基板付録のついた雑誌を買ってしまった(4/25/2010)
 FPGAプロジェクトの第二ステップのコーディングがそろそろ完成かというところへ、思わぬ横槍が入った。気がつけば今日はInterFace誌(6月号)の発売日である。今月号は大物の基板の付録がついている。クロック144Mhzの32ビットプロセッサー、ルネサスSH-2A(SH7262)の基板である。

If1006

 どうしようか迷ったが、付録基板企画史上最速のプロセッサーという触れ込みだ。これだけのスペックのCPU基板が¥2000台で手に入る機会はこれを逃せばまずないだろう。破格の値段というのに弱いのが当研究所の所長の特徴である。

 やっぱりこれは買うしかない。近くの書店で手に入れた。使うあてのない基板がまた増えてしまった。去年のデジタルデザインテクノロジー誌(2009年春号)のLatticeのFPGA基板も手に入れたまま、まだ何もいじっていないと言うのに。

 これだけの性能のプロセッサーは、そろそろアマチュアでは簡単に使いこなせないレベルにある。何らかのリアルタイムOSを入れないと恐らく満足に動かないはずだ。基板はともかく、雑誌の記事の内容はもともとあまり期待していなかったが、今度も正直言ってがっかりした。

 あいかわらず、サンプルはLED点滅しかない。もう少しこのCPUを生かせる解説はないものだろうか。TOPPERS/JSPを標準OSと想定しているのなら、このあたりのインストールの解説か、ライブラリを使ったLCDかUARTへの「Hello World」、それが無理でも、全体のシステムの初期化(メモリ、クロック、タイマー、I/O機能)の解説でもあれば、先につながるのだが、LCDコントローラー、USBコントローラーなどペリフェラルの紹介だけでは、読者は期待だけ持たされ、目隠しされて海に放り出されるようなものである。

 このLEDの点滅のプログラムも、見れば6つの初期化プログラム、5つのヘッダーファイルをincludeして始めて動く。このへんを系統だって分かり易く説明するのは確かに大変だが、これではLEDを点滅させた後、殆どの読者は手も足も出ないだろう。

 熟練者なら何をしなければならないかがわかっているから、ソースコードや、Webを頼りに少しづつ環境を整えていけるだろうが、慣れない人には8ビットマイコン程度ならともかく、32ビットの大規模、複雑なソフト環境の中を先に進むことはまず絶対不可能である。

 電子工作はひとつひとつの手順に難しいものがあるわけではない。ただその要素が膨大に多いだけである。こんどの記事で、始めては見たが電子工作は難しいと離れていく人がまた増えるのではないかと心配する。

 それにLEDを点滅させただけで、有り余る機能を持ちながら、そのあと何も使われずに部品箱に放り込まれてしまうプロセッサーが不憫でならない。

 まあ、雑誌の記事にあまり多くを期待しすぎるのかもしれない。なんといってもこのスペックの基板が付録についてくる良い時代に生まれたことを感謝しよう。

ステートマシンは動いたがSRAMがアクセス出来ていない(4/28/2010)
 それはともかく、FPGAプロジェクトである。UARTからの入力をSRAMに蓄積するテストベンチのコーディングが完成した。ステートマシンに慣れてきたので、ステートを2つ追加して、入力の前にDOSプロンプトのような>を出し、入力か出力かがわかるようにする。SRAMのアクセスに今ひとつ自信がないが、UARTのやりとりはだいぶ慣れてきた。

A4302871

 HDLができたので、アドレス18本、データ8本、7セグの制御線14本のピンアサインを慎重に行う。このピンアサインは機種を決めるとちゃんと既に設定したピンや、Vccなど信号線でないピンは設定できないようになっている。始め、入力を受け付けないので開発環境のバグかと少しあせったが、向こうの方が賢かった。この開発環境を少し馬鹿にしていた自分を恥じる。

 ファームができた。いよいよテストである。緊張の瞬間だ。今度のコードは未経験のステートマシン、SRAMのアクセスが入っている。まあ、最初から動くことは余り期待していない。電源を入れ、iMPACTを始動させてプログラムを書き込む。

 おお、UARTの端末にプロンプトの>が出た。キーボードを叩く、文字が出た。良いぞ、このあたりは動いているようだ。おやあ、文字は同じ>のままで増えていくだけだ。SRAMに入れたデータを端末に戻すキー、リターンキーを押す。何も表示されず、カーソルだけが最初に戻った。

 さあ、これからが本番だ。久しぶりの少しまともなプログラムのデバッグに心が躍る。事件の現場に乗り込んだ刑事の心境である。目の前に犯人の残した沢山の証拠がある。この証拠を元に何が原因でこれが起きているかをつきとめ、正しく事件を解決していく。

 まず、現在、起きている状況をなるべく詳しくメモにする。まとまったら、それに対して仮説をたて、ソースコードを検証していく。暴走か、全くの沈黙では仮説の立てようがないが、こんどは結構動いて証拠を残してくれている。

 少し調べただけで、いくつかのミスが見つかり、SRAMのテストベンチは、とりあえずUARTからのデータ入力を受付け、出力はされないがリターンキーで次の入力を受け付けるところまで動いた。7セグには受け付けたバイト数がちゃんと表示され、リターンキーを押すと0に戻る。

 実際の出力がされないのは、バイナリー端末(アクノリッチ)で、入力した最後のデータ(改行)を入力バイト数だけ出力していることがわかった(改行の連続なので普通の端末で

Acktitle_2

はデータがないように見える)。

Ackbin_2

 SRAMにデータが入っていないか、正しくとりだせないかだが、UARTのステートマシンのところはほぼ想定どおりの動きをしていることがわかった。やっぱりSRAMのアクセスがうまくいっていない。この確認は実際にSRAMに所定の信号が入っているか調べるしかない。これ以上の机上デバッグは無理である。オシロをとりだして、実際の動きを確かめることにする。

SRAMの読み書き成功。しかしUARTにゴミが残る(4/29/2010)
 オシロで見た結果は一目瞭然だった。CE(ChipEnable)が一旦、アサート(L)になると、元に戻っていない。CEは今の状況では大きな問題にならないが、WEは書き込みenableになったままなので、いつまでたっても読み込めない。動作しない原因はわかった。でもどうして制御線が元に戻らないのか。SRAMモジュールでは1クロック回した後、CEなどを戻している。

 SRAMアクセスの部分をさらに念入りに調べる。タイミングチャートを描いてみて原因がわかった。FPGAのHDLは、クロックが同じだと、すべてのモジュールが同時に動く。リクエスト/ビジーの連携は、必ずクロックをひとつ遅らせないと正しい結果を受け取れない。そうか、SRAMモジュールにもステートマシンを入れて順序処理にしてやる必要があるのだ。

 単なる繰り返しで処理をしていたSRAMアクセスにも、アイドル->アクセス->ウェイトの3つのステートマシンにして、コーディングしなおす。よーし、これで動くはずだ。胸が高鳴る。さあ、どうだ。ターミナルを立ち上げ、適当な文字を入れてリターンキーを押す。やった。やりました。見事に入れた文字列が戻ってきた。頭の部分が少しおかしいが、あとは正確に表示してくる。いいぞ。

Example2

 最初の1文字だけがおかしいが、あとは完全だ。200バイト以上の日本語テキストをカット&ペーストで入力し、リターンキーを押す。よし、これも出来た。これでSRAMの読み書きが実現した。念のためロジアナを引き出して、制御の様子をとってみた。きれいにリターンキーを押した時の、書き込みと、そのあとの読み出しのCEのパルスが見えた。オシロではCEのパルスがひとつしか見えなかったが、時間的にこれだけ離れているので安いオシロでは観測不能であることが良く分かる。

Sram1

 最初の文字が化ける理由は、SRAMではなくて、UARTの不具合である。SRAMが原因でないことは、リセットボタンを押してプロンプトを出すところから化けるので間違いない。連続して文字を送るときは問題ないが、最初の文字がどうもうまく送信されないようだ。

 このUARTのコードは、雑誌からの借り物である。リクエスト/ビジーの連携が上手く行っていない感じだ。色々、ウエイトを入れたり、判断ロジックを入れたりしたが、どうしても直らない。暫く苦闘したが、解析は当面諦めることにした。FPGAプロジェクトの目的は別のところにある。こればっかり

Sram2

やっているわけにはいかない。いまひとつすっきりしないが、とりあえずの目的は果たした。

 休日のほぼ一日をつかって、SRAMのアクセスが遂に実現した。第二ステップ終了である。ロジアナに見るように、SRAMアクセスとしては超遅い読み書きで、これからどれくらい速度を上げられるか、同時読み書きの検証をどうするか、課題はまだ山積しているが、FPGAプロジェクトは先に進めよう。次は、いよいよ本来のディスプレイのRGBインターフェースの作成である。

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

« 2010年4月18日 - 2010年4月24日 | トップページ | 2010年5月9日 - 2010年5月15日 »