(DE0-CV) DE0拡張キットのLCDモジュールを使う (3)


(DE0-CV) DE0拡張キットのLCDモジュールを使う (2)

タイミングチャート

データシートからタイミングを確認します。

DE0拡張キットのLCDモジュールに使われているのはST7066UというICです。
ST7066Uは基本的に一般的に使われるHD44780と互換性があるようですが、
AC特性が改善されているようです。

HD44780より早く動作させることができるみたいですが、お遊びで使う分には
他のLCDモジュールでも動かせるほうが良いのでHD44780をベースに
タイミングを確認します。

HD44780のデータシートはこちらからダウンロードできます。
HD44780 データシート(PDF) - Hitachi Semiconductor

まず文字を表示するだけなので、Write Operationを実装します。
Write Operationのタイミングは下図の通りです。
大事な箇所にタイミングの仕様を記載しています。 f:id:m_keishi2006:20170506221313p:plain

それぞれの意味は次の通りです。
Eの変化(立ち上がり/立ち下がり)を起点として考えるとわかりやすいです。

シンボル 意味
tAS RSとRWの変化開始は、短くともEの立ち上がりより60nsは早くなくてはならない
tAH RSとRWの変化終了は、短くともEの立ち下がりより20nsは遅くなくてはならない
PWEH EがHighとなる時間は、短くとも450nsなくてはならない
tDSW Dataの変化開始は、短くともEの立ち下がりより195nsは早くなくてはならない
tH Dataの変化終了は、短くともEの立ち下がりより10nsは遅くなくてはならない
tcycE Eの周期(立ち上がりから次の立ち上がりまで)は、短くとも1000nsはなくてはならない

この情報を踏まえて、FPGAでは下図のようなタイミングで信号を出力するように設計します。
LCD_RSがRS, LCD_ENがE、LCD_DがDB0 to DB7に対応します。WriteではRW=0固定のため記載していません。
f:id:m_keishi2006:20170506232238p:plain

1clock=20nsです。
sClockCounter(18bit)が1clockごとに1加算されます。この値でLCD_RS,LCD_EN,LCD_Dを制御します。 LCD_RSはsClockCounter=0x000でHighとし、sClockCounter=0x070でLowにします。
LCD_ENはsClockCounter=0x010でHighとし、sClockCounter=0x050でLowにします。
LCD_DはsClockCounter=0x030でHighとし、sClockCounter=0x070でLowにします。

sWakeUpCounterとsModuleEnableは、電源投入後に初期化処理を待機するためのものです。 初期化処理の開始は、電源電圧が2.7Vを超えてから40ms以上待つ必要があります。 21bitのカウンタがフルカウントしたらsModuleEnable='1'となり、初期化処理を開始します。 (21bitカウンタのフルカウントにかかる時間は、221 *20ns=約42msです)

次の記事では、これをVHDLに記述します。


(DE0-CV) DE0拡張キットのLCDモジュールを使う (4)