※ 本記事は,2003年1月号付属CPLD基板をご活用
いただいた読者の方による投稿レポートです.
H8/3048用のカラーLCD(液晶ディスプレイ)コントローラを製作しました(写真1).本回路は,Design Wave Magazine 2003年1月号の『グラフィックスLCDコントローラの製作』1)で紹介されていた回路(以下,「オリジナル回路」と呼ぶ)をルネサス テクノロジのH8/3048用に改造したものです.
[写真1] 製作したカラーLCDコントローラ
CPUインターフェース部をH8/3048に対応させました.具体的には,SRAMに対するリード/ライト動作が完了するまで,CPLDがH8のwait端子をアサートしてウェイトを入れました.また空いているピンを利用して1M×4ビット構成のDRAMによるメモリ増設を可能としました.簡易な1ビット・アドレス・マルチプレクサで実現しています.H8/3048はA0〜A8の9ビットしか用意されていませんが,この拡張マルチプレクサによるA19/A20の選択を利用することで,1M×4ビット構成のDRAMを4個使用でき,2Mバイトのメモリ増設が可能となります.
本回路におけるVRAM構成,SRAMに対するアクセスの実現は,オリジナル回路をほぼ踏襲しています.ただし完全に同じとはぜず,自分が理解できた範囲のみ利用させていただきました.このため,VHDLコードにかなりのむだがあります.今回の製作では80ピンのI/Oピンのうち,79本を使用しています.
●CPLDの利用法
CPLDでは,以下の信号生成を行っています.
- 1M×4ビットDRAMによるメモリ増設用の拡張用簡易1ビット・アドレス・マルチプレクサ(A19/A20→A9)
- ドット・クロック5MHz
- SRAMへのメモリ・アクセス(ワード・アクセスのみ想定)に必要な信号
- H8/3048(16MHz)のアドレス・データのラッチ動作およびS-RAMへの送受
- LCDモジュールへの同期信号,SRAMデータの出力
表1にCPLDの端子名を,表2に結線をまとめます.また,VHDLによるソース・コードを示します.
※ソース・コード(LCDC_VHDL2.vhdl)はここからダウンロードできます.
信号名 |
接続先 |
付記事項 |
CLK |
40MHz |
|
reset |
リセット回路 |
注) |
MPU_CLK |
CLK(H8/3048) |
|
A19,A20 |
A19,A20(H8/3048) |
|
DRAM_A9 |
A9(D-RAM) |
|
MPU_RAS |
CS3(H8/3048) |
|
HSYNC |
H_SYNC(EPM7032) |
|
VSYNC |
V_SYNC(EPM7032) |
|
MEM_RW |
WR(H628128) |
|
MEM_OE |
OE(HM628128) |
|
MPU_ADD |
A1〜A17(H8/3048) |
|
MPU_DATA |
D0〜D15(H8/3048) |
|
MEM_ADD |
A0〜A16(HM628128) |
|
MEM_DATA |
D0〜D8(HM628128),D0(HM628128) |
|
LCD_DATA |
IN_0〜8(EPM7032) |
|
CTRL_CS |
CS4(H8/3048) |
|
CTRL_AS |
AS(H8/3048) |
|
MPU_RD |
RD(H8/3048) |
|
MPU_LWR |
LWR(H8/3048) |
|
MPU_HWR |
HWR(H8/3048) |
|
CLK5M_OUT |
D_CLK(EPM7032) |
|
MPU_BUSY |
wait(H8/3048) |
|
注) <+5V>−10K−0.1μF−<GND>と結線し,10Kと0.1μFの接続点をresetに
つなぐ(超初等パワーオンリセット).
[表1] CPLD基板の端子
信号名 |
接続先 |
付記事項 |
D_CLK |
CLK5M_OUT(付録CPLD) |
|
H_SYNC |
HSYNC(付録CPLD) |
|
V_SYNC |
VSYNC(付録CPLD) |
|
IN_0〜8 |
LCD_DATA(付録CPLD) |
|
LCD_DCLK |
クロック(LCD) |
33→5V変換 |
LCD_HSYNC |
HSYNC(LCD) |
33→5V変換 |
LCD_VSYNC |
VSYNC(LCD) |
33→5V変換 |
Out_0〜8 |
DATA0〜8(LCD) |
33→5V変換 |
[表2] CPLDの結線
ドット・クロックは5MHzとし,レベルが“H”の区間(100ns)はLCDアクセス区間,“L”の区間はH8のアクセス区間としました.オリジナル回路では非表示領域はすべてCPUアクセス区間と定義していましたが,簡素化のために,表示・非表示にかかわらず同じ動作としました.
H8からアクセスしたいときは,CPLDにアドレス・データ(ライト時)をラッチしてCPLDに通知します.CPLDはただちにwait信号をアサートしてウェイト・サイクルに入ることを要求します.このためH8はwait端子の状態によりウェイト動作するように初期設定しておかなければなりません.
CPLDはLCDアクセスが発生するのを検知してから,その終了を待ち,ドット・クロックの“L”区間を使用してメモリ・リード/ライト動作を行います.この動作終了時に,wait信号を解除(“H”レベルにする)します.また転送終了フラグをセットします.
リードのときだけは,H8はwait解除してから次のサイクルでデータのリード動作をするので,CPLDはH8のためにデータをラッチ出力します.その後CPLDは,H8からの次のアクセスを受け付ける状態となります.
●くふうした点
H8/3048から,SRAMに対してリード・ライトしたときには,CPLD側が即時にwait信号を発生することにより,処理が終わるまで,CPUを待たせることにしました.
また,クロックの源発振を40MHzとし,ドット・クロックを5MHzとしました.“L”区間がH8によるアクセス区間なので,100nsのアクセス可能期間を確保できます.
H8のアクセス時と,CPLDの動作時にそれぞれフラグをセットし,お互いに監視することでH8とCPLDがうまく動作タイミングをとれるようにしました.
写真2に製作した基板を示します.H8マイコンの下に,4個のDRAMが搭載されています.
[写真2] CPU(H8)ボードの下に4個のDRAMが搭載されている
DRAMはH8/3048のデータシートに従って2CAS方式で接続します.1M×4ビット構成のDRAMを使用する場合にはアドレスがA0〜A9の10ビット必要なので,A9に拡張マルチプレクサ出力A9を接続します.
SRAMはHM628128ALFP-5を2個並列に使い,16ビット・バス接続とします.D15〜D0のうちD8〜D0を使用して512色を実現します.また,ワード・アクセスのみ正常に動作します.H8からはバイト・アクセスもできますが,CPLDはD15〜D0を同時にアクティブにしてしまいます.
3.3V→5V変換のためにEPM7032SLC-10を使用しました.74HCT541などを使用してもいいでしょう.
LCDモジュール用の+30V電源はTL497ACNで生成しています.+30Vが得られれば,ほかの回路でも問題ありません.
●動作確認
H8/3048(16MHz)でしか動作を確認していませんが,カラーLCDの表示が可能になりました.また,拡張したメモリも使用できるようになりました.参考までに,C言語によるグラフィック表示の実装例としてソース・コードを示します.
※ソース・コード(color_lcd.c)はここからダウンロードできます.
この回路には,以下のような問題点があると考えています.
- H8/3048(16MHz)でしか使用できない.H8/3052(25MHz)に置き換えるとwait端子がアサートされたままになることが頻発した.
- I/Oピン数の関係で,SRAMはワードでしか正常なアクセスができない.
- 完全なオリジナルではないため,やや冗長な回路になっている.
●感想
LM32C041購入以来の念願の夢(?)が実現できました.
CPUの動作速度には依存しない設計のつもりでしたが,25MHzでは正常に動きませんでした.VHDL記述は完全ではないようです.H8/3048(16MHz)ではいまのところエラーは出ていません.
当初,20msという最大フレーム時間を満足させようとして独自方式の同期信号発生回路を設計しましたが,CPLDに収まりませんでした.このときにオリジナル回路の作者のくふうを実感しました.
今後,CPUの動作周波数に依存しないコントローラを目指して改良していきたいと考えています.
参考文献
1)実吉智裕;グラフィックスLCDコントローラの製作,Design Wave Magazine,pp.94-106,2003年1月号.
2)日立製作所;H8/3048シリーズ ハードウェアマニュアル.
|