FPGAの外付けSRAMアクセス成功
VerilogHDLに親しむ(4/24/2010)
SRAMをアクセスするテストベンチのステートマシンの擬似コーディングを少しづつ、実際のVerilogHDLのコードに移していく。折角だから7セグLEDにも登場してもらって、SRAMへの蓄積バイト数を表示することにする。
7セグLEDはあれから、また2つモジュールを増やして6ヶにした。こうしておくと、この7セグ基板はこのあとデジタルクロックに活用できる。VerilogHDLのドライバーも6ヶ用に改修する。コーディングに慣れてきて鼻歌が出る。
UARTは、前のステップのコードをそのまま流用する。モジュールを別ファイルにしてあるので移植は簡単だ。今度は本格的なステートマシンである。HDLの開発にだいぶ慣れては来たが、まだregとwireの区別を完全に理解しているわけではない。トップモジュールで使わない変数は、いちいちあらたに定義しないでモジュール間でスルーできるはずなのだが、自信がない。それでもトップモジュール、top_sramは徐々に形をなして完成に近づいてきた。
この過程が楽しい。電子工作の醍醐味は、自分で考えたロジックやプログラムが実際に思ったとおりに動いたときである。コーディングしているときはこれで果たして動くのか不安でならないが(プログラムは書いたとおりにしか動かない)、デバッグをやりとげて実際に想定どおりの動きをしたときの喜びはなにものにも換えがたい(だから人のソースはわざと見ないようにしている)。
プラモデルや、キットを組み立てるのも、それはそれで楽しいが、自分で設計図を引き、材料を揃えて、いちから作り上げた模型飛行機が実際に空を飛んだときの興奮とは比較にならないのと同じである。
また、基板付録のついた雑誌を買ってしまった(4/25/2010)
FPGAプロジェクトの第二ステップのコーディングがそろそろ完成かというところへ、思わぬ横槍が入った。気がつけば今日はInterFace誌(6月号)の発売日である。今月号は大物の基板の付録がついている。クロック144Mhzの32ビットプロセッサー、ルネサスSH-2A(SH7262)の基板である。
どうしようか迷ったが、付録基板企画史上最速のプロセッサーという触れ込みだ。これだけのスペックの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のやりとりはだいぶ慣れてきた。
HDLができたので、アドレス18本、データ8本、7セグの制御線14本のピンアサインを慎重に行う。このピンアサインは機種を決めるとちゃんと既に設定したピンや、Vccなど信号線でないピンは設定できないようになっている。始め、入力を受け付けないので開発環境のバグかと少しあせったが、向こうの方が賢かった。この開発環境を少し馬鹿にしていた自分を恥じる。
ファームができた。いよいよテストである。緊張の瞬間だ。今度のコードは未経験のステートマシン、SRAMのアクセスが入っている。まあ、最初から動くことは余り期待していない。電源を入れ、iMPACTを始動させてプログラムを書き込む。
おお、UARTの端末にプロンプトの>が出た。キーボードを叩く、文字が出た。良いぞ、このあたりは動いているようだ。おやあ、文字は同じ>のままで増えていくだけだ。SRAMに入れたデータを端末に戻すキー、リターンキーを押す。何も表示されず、カーソルだけが最初に戻った。
さあ、これからが本番だ。久しぶりの少しまともなプログラムのデバッグに心が躍る。事件の現場に乗り込んだ刑事の心境である。目の前に犯人の残した沢山の証拠がある。この証拠を元に何が原因でこれが起きているかをつきとめ、正しく事件を解決していく。
まず、現在、起きている状況をなるべく詳しくメモにする。まとまったら、それに対して仮説をたて、ソースコードを検証していく。暴走か、全くの沈黙では仮説の立てようがないが、こんどは結構動いて証拠を残してくれている。
少し調べただけで、いくつかのミスが見つかり、SRAMのテストベンチは、とりあえずUARTからのデータ入力を受付け、出力はされないがリターンキーで次の入力を受け付けるところまで動いた。7セグには受け付けたバイト数がちゃんと表示され、リターンキーを押すと0に戻る。
実際の出力がされないのは、バイナリー端末(アクノリッチ)で、入力した最後のデータ(改行)を入力バイト数だけ出力していることがわかった(改行の連続なので普通の端末で
はデータがないように見える)。
SRAMにデータが入っていないか、正しくとりだせないかだが、UARTのステートマシンのところはほぼ想定どおりの動きをしていることがわかった。やっぱりSRAMのアクセスがうまくいっていない。この確認は実際にSRAMに所定の信号が入っているか調べるしかない。これ以上の机上デバッグは無理である。オシロをとりだして、実際の動きを確かめることにする。
SRAMの読み書き成功。しかしUARTにゴミが残る(4/29/2010)
オシロで見た結果は一目瞭然だった。CE(ChipEnable)が一旦、アサート(L)になると、元に戻っていない。CEは今の状況では大きな問題にならないが、WEは書き込みenableになったままなので、いつまでたっても読み込めない。動作しない原因はわかった。でもどうして制御線が元に戻らないのか。SRAMモジュールでは1クロック回した後、CEなどを戻している。
SRAMアクセスの部分をさらに念入りに調べる。タイミングチャートを描いてみて原因がわかった。FPGAのHDLは、クロックが同じだと、すべてのモジュールが同時に動く。リクエスト/ビジーの連携は、必ずクロックをひとつ遅らせないと正しい結果を受け取れない。そうか、SRAMモジュールにもステートマシンを入れて順序処理にしてやる必要があるのだ。
単なる繰り返しで処理をしていたSRAMアクセスにも、アイドル->アクセス->ウェイトの3つのステートマシンにして、コーディングしなおす。よーし、これで動くはずだ。胸が高鳴る。さあ、どうだ。ターミナルを立ち上げ、適当な文字を入れてリターンキーを押す。やった。やりました。見事に入れた文字列が戻ってきた。頭の部分が少しおかしいが、あとは正確に表示してくる。いいぞ。
最初の1文字だけがおかしいが、あとは完全だ。200バイト以上の日本語テキストをカット&ペーストで入力し、リターンキーを押す。よし、これも出来た。これでSRAMの読み書きが実現した。念のためロジアナを引き出して、制御の様子をとってみた。きれいにリターンキーを押した時の、書き込みと、そのあとの読み出しのCEのパルスが見えた。オシロではCEのパルスがひとつしか見えなかったが、時間的にこれだけ離れているので安いオシロでは観測不能であることが良く分かる。
最初の文字が化ける理由は、SRAMではなくて、UARTの不具合である。SRAMが原因でないことは、リセットボタンを押してプロンプトを出すところから化けるので間違いない。連続して文字を送るときは問題ないが、最初の文字がどうもうまく送信されないようだ。
このUARTのコードは、雑誌からの借り物である。リクエスト/ビジーの連携が上手く行っていない感じだ。色々、ウエイトを入れたり、判断ロジックを入れたりしたが、どうしても直らない。暫く苦闘したが、解析は当面諦めることにした。FPGAプロジェクトの目的は別のところにある。こればっかり
やっているわけにはいかない。いまひとつすっきりしないが、とりあえずの目的は果たした。
休日のほぼ一日をつかって、SRAMのアクセスが遂に実現した。第二ステップ終了である。ロジアナに見るように、SRAMアクセスとしては超遅い読み書きで、これからどれくらい速度を上げられるか、同時読み書きの検証をどうするか、課題はまだ山積しているが、FPGAプロジェクトは先に進めよう。次は、いよいよ本来のディスプレイのRGBインターフェースの作成である。
| 固定リンク
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
「FPGA」カテゴリの記事
- CQ-STARM基板のCPU換装とDE0の到着(2010.11.09)
- フォトフレーム: SRAMを増設して15ビットカラーに(2010.11.01)
- フォトフレーム:最後まで難航したが遂に成功(2010.10.19)
- フォトフレーム: 画像らしいものが出てあともう一息(2010.10.10)
- フォトフレーム: デジタル液晶インターフェース実装(2010.09.28)
コメント
がた老さんどうもです。
「ぼろくそ」発言は、申し訳ありませんでしたm(_ _)m。
SH2A基板は、使いでがあり、今度はLCDコントローラの
実験を目論んでいます。
ところで、私は本当に熟練の技術者でもなんでもない
しがない電子工作の初心者(初級者)なんです(本当
にそうなんです)。
ただ自分の性格上、「おたく」体質なので、のめり込んで
やっているだけです(汗;)。
投稿: shuji009@愛読者 | 2010年5月 7日 (金) 06時32分
shuji009@愛読者さん、いつもコメントありがとうございます。
>ぼろくそ書かれていますけど
ええー、そんなこと書いてますか。そんなつもりは全然ないんですけど。
>初心者(初級者?)の私が言うのだから間違いないです。
shuji009@愛読者さんが初心者などと言ったら、初心者が怒ると思いますよ。「次に何をしなければならないかがわかっている」立派な熟練者です。
>DE0も買いました・・・DigiKeyで初めて購入・・・
おお、先を越されてしまった。是非、どこかで使用記を発表してください。これ沢山ペリフェラルがついていて楽しそうですね(VGAまでついている)。
投稿: がた老 | 2010年5月 6日 (木) 22時05分
がた老さん、お疲れ様です。
SH2Aですが、先月下旬入手しました。
日曜日に到着、Lチカ。
月曜日にTFT-LCD(といってもVRAM内蔵のもの)で
日本語表示。
火曜日に、SDカードを付けてのFatFsの移植までは
できました。
ぼろくそ書かれていますけど、上のプログラムの
元はLチカでして、非常にコンパクトに書かれています
けど、それをちょっといじるだけで上記プログラムの
作成とか移植は可能でしたよ。大変良くできている、
Lチカプログラムだと思います。
初心者(初級者?)の私が言うのだから間違いないです。
確かに、がた老さんの書かれている事も判りますけど・・・。
特殊ハンダ使いました・・・凄いですね、あっさりと外れました。
DE0も買いました・・・DigiKeyで初めて購入・・・
眺めてうっとりしています(汗;)。
投稿: shuji009@愛読者 | 2010年5月 5日 (水) 23時12分