FPGAの部屋FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。スパルタン3EスターターキットのLCD表示回路まとめスパルタン3EスターターキットのLCD表示回路のまとめをしようと思う。仕様を書くのを忘れたので書き足します。0)を4桁の16進キャラクタでLCDの左上に表示する。0)を4桁の16進キャラクタでLCDの左下に表示する。3.それ以外のLCDの表示はブランクとする。スパルタン3EスタータキットのLCDは以下のように初期化する。4ビット(LCDのデータバスは4ビット分のみFPGAに接続されている)インターフェースで以下の図のように書き込む。スパルタン3EスターターキットのLCD初期化シーケンス1その後、RS=0,RW=0にして8ビットのコマンドを書く。スパルタン3EスターターキットのLCD初期化シーケンス2そのときに、4ビットインターフェースなので上位、下位と書いて8ビット分とする。4bitsのみ)というシーケンスだけステートマシンで実現して、図1、図2の初期化の手順はFPGAにPicoBlazeプロセッサを組み込んで、PicoBlazeに任せることにした。4bits書き込み用ステートマシンだ。LCDOPESM.vhd)この上の階層はLCD_operation.vhdだ。4bit間の1usを計るタイマーとLCD_Eの出力時間を計るためのタイマーが実装されている。どちらも回路を削減し、動作周波数を改善するため、最上位のビットを使用しているので、ぴったりの値ではない。LCD4HexDisp.vhdには、PicoBlaze本体(kcpsm3.vhd)、PicoBlazeのプログラム(instrom.vhd)、先ほどのLCD_operation.vhdがインスタンスされている。加えてPicoBlaze用の入出力ポート用のロジックが実装されている。出力ポートはPicoBlazeのOUTPUT命令の出力をラッチする。入力ポートはPicoBlazeのINPUT命令に対応するために、IO番地に従って入力を選択するためのセレクタである。LCDからのデータ入力は一旦input_data_latchにラッチしておいてからポート番号0からのINPUT命令によって読み込む仕組みである。(でもこれはテストしていないので、読み込めない可能性がある。データのホールド時間が少ないとだめかもしれない。)インターバルタイマーは初期化時最初のwaitの15msを8ビットの値で設定できなければならない。12ビットカウンタをかませて8ビット値をセットできるダウンカウンタを作ると183(10進)で約15msになった。入出力ポートの割り当ては以下の通り。書き込みデータ8ビット。(キャラクタ)読み出しの場合もダミーデータをここに書く。インターバルタイマー設定値8ビット。50MHzクロックをあらかじめ12ビットのカウンタで分周しているので、1を設定すると82usカウントする。0)Test_LCD4HexDisp.vhdはupper_4hex_dataに"1234"、lower_4hex_dataに"5678"を代入しているだけである。次にinstrom.psmの説明。s2-書き込みデータこの辺は、入出力ポート番号やビットの意味を定義しているところだ。いうように各レジスタを何に使っているか覚えておくと読みやすいと思う。後はひたすら初期化データを書き込んで、インターバルタイマーに時間をセットし、そのタイムアウトチェックをするという作業を繰り返す。これは図1、図2に書かれている手順で行っている。8)から順番に読んで、4ビットごとに16進数をアスキーキャラクタに変換する。そのアスキーキャラクタをLCDに書き込んでインターバルタイマのタイムアウトを待つ。後はそれを繰り返して表示している。いえば書き忘れましたが、テストベンチも入っていますのでシミュレーションも出来ます。プロパティからシミュレーション時間を25ms位にすると全部見られると思います。wave.doもあるのでインポートすると主要なsignalも見られます。kitのマニュアルに書いてある数字とST7066Uのマニュアルに書いてある数字が異なっているように思えるのですが、こういうことにあまり詳しくないので判断できません。10nsじゃないかと思います。5V駆動のところをみています(p.33)。]はじめまして、コメントありがとうございます。ST7066Uのマニュアルは見たことなかったのですが、LCD_Eのパルス幅が140nsで、LCD_Eの立下りまでのセットアップ時間が40ns、ホールド時間が10nsのようです。kitのマニュアルよりはだいぶ条件がゆるくなってるようです。データに390オーム入っているので時定数によってデータがなまっているということなのかもしれませんが、よくわかりません。kitのマニュアルに沿ってやっていれば大丈夫なのではないでしょうか?事実動きましたし。この辺は目で見るのであまり早く動かしてもどうせ見えないし、プロセッサも表示専用でやることそれしかないので問題にはならないと考えています。]さっそくのお答えありがとうございますやっぱり数字は異なっているのですね。最小の時間なので多い分には平気なわけですか。HD44780のデータシートも見てみました。こちらは初期化のシーケンスが3,3,3,2を送ることになっているのでマニュアルと一致しています。10nsで一致していました。憶測ですが、開発時のchipはHD44780で製品版と異なっていたのかもしれませんね。いうことですか!!情報ありがとうございます。深く考えないでスタータキットのマニュアルどおりに作ったんですけど。ST7066Uだったら初期化ルーチンも全部ステートマシンでやっても簡単そうですね。直してやってみようかな?タイミングの件に関しましては、データシートにMAXの値が書いてありませんので、静的動作だと考えられます。よってスイッチでぱちぱち信号を入れても動作すると考えられます。(当然チャタリングは処理しなければいけませんが)ダイナミック動作の物はMINとMAXの値が書いてあるので、その間のタイミングで操作しなければいけません。SDRAMとかそうですね。URLhttps://marsee101.blog.fc2.com/tb.php/216-416bc088この記事にトラックバックする(FC2ブログユーザー)プロフィールAuthor:marseeFPGAの部屋へようこそ!FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。WEBブログデザイナ。