内容の正確さについては保障ができません。 参考にされる場合にはどうか自己責任で行ってください。 よろしくお願いします。
ディスプレイやテレビを表示装置として使う時計です。 FPGAを搭載した基板にVGA端子があり、ディスプレイやテレビに接続して時刻を表示します。 FPGA上に実現したディスプレイコントローラ回路でVGA信号を生成しています。 使用しているFPGAはLattice Semiconductor社のMachXO2-1200HCです。
テレビを含めたディスプレイの価格が低下し、 価格の面からみると電子工作の部品の一つとして利用できる水準になってきています。 従来、電子工作において画像や映像を扱うのは比較的難しいと考えられていたのですが、 安価に入手可能になってきたFPGAを使うことで以前よりは容易に扱うことができるようになってきています。 そこで、ディスプレイとFPGAを利用した工作をすることにしました。
作成したのは、 ディスプレイを表示装置として使う時計です。 基板にVGA端子があり、それをディスプレイに接続して時刻を表示します。 ディスプレイ信号は周波数が高いので、MCUなどを用いたソフトウエアでの信号生成は 難しいのですが、FPGAを用いることで比較的容易に実現できました。 使用しているFPGAはLattice Semiconductor社のMachXO2-1200HCで、 FPGA上に実現したディスプレイコントローラ回路でVGA信号を生成しています。
時計として動作しているときの画面。 大きな文字で「時」、「分」の表示し、少し小さい字で「秒」を表示しています。 画面下部には青字で温度と湿度を表示できるようになっています。 ただ、現状では温度センサと湿度センサは搭載していないのでこの部分は正しくない数値になっています。
基板の出力画面解像度は640x480なのですが、ディスプレイ側でドットバイドットの表示をしているので、中央に表示されています。
ディスプレイと回路基板。 VGAケーブルで接続しています。
回路基板上にはFPGAのほかに、SPIインタフェースのFLASHメモリとSRAMが搭載されています。 FLASHメモリにはフォントデータが格納されていて、起動時にSRAMに展開します。 フォントは単純な白黒の2値ではジャギーが目立つので、階調を持ったデータを用意して使用しています。
FPGA基板。自前で設計したものです。VGAコネクタのピン配置を誤ったので修正が入っています...
今回は基板製造を中国のseeed studio(Fusion PCB Service)に依頼しました。 価格はサイズや基板の色、製造枚数などによって決まります。 10cm x 10cm に収まるサイズで、そのほか基板色などは標準の設定(緑色)のままで、 10枚当たり大体25USDでした。
多くのFPGAチップでは、FPGA内部に不揮発性メモリがなく、起動時に外部からFPGAにコンフィギュレーションデータを書き込むか、 FPGAにコンフィギュレーションデータを格納するメモリチップを接続する必要があります。 今回使用した MachXO2 の場合、内部に不揮発性メモリがあり、外付けでコンフィギュレーションデータ用のメモリなどを持つ必要がなく、使い勝手が良いです。 コンフィギュレーションデータの書き込みアダプタも比較的簡単に制作できます(参考:Lattice Semiconductor AN8082(pdf))。 私はこのボードを利用してアダプタを作りました(参考資料を参照)。 このアダプタでLatticeの純正ツール(Lattice Diamond)からFPGAに書き込みができます。
時刻調節をしているときの画面。 時刻調節機能はHDLで記述する論理回路的な実現ではなく、小さいコントローラ( LatticeMico8)を組み込んで ソフトウエアで実現しています。 ソフトウエアでスイッチ状態を読んでディスプレイコントローラの動作を制御しています。
拡張基板を用意して時刻保持のためのリアルタイムクロック(RTC)のチップを接続しています。 使用したFPGA(Lattice Semiconductor社のMachXO2)にはI2CやSPIコントローラのハードIPが組み込まれているので、 このIPを使用してRTCを制御しています。
ボードには50MHzの発振器を載せています。 今回使用したFPGAチップは MachXO2 1200HC-4TG144です。このチップではLatticeMico8とその周辺回路を組み合わせて使用すると、 クロック周期20nsの制約は割と厳しいようです。 50MHzの信号からPLLで40MHzの信号も作って、 Mico8とその周辺回路をクロック周波数40MHz、ディスプレイコントローラ部をクロック周波数50MHzで動かしました。
FPGAに載せる回路全体を0から作るのは大変なので、コントローラのLatticeMico8以外にもベンダ提供のIPを多く使いました。 使用したIPのリストを次に記します。 SPIコントローラはピン配置の問題から上述のチップ組み込みのハードIPを使えなかったので、3番目にあるSPIコントローラのソフトIPを使いました。
上述のVGAコネクタの誤りは部品のパッケージレベルでの作製誤りなので、回路図には問題ありません。 RTCチップはコネクタを介して別ボードとなっているため、この回路図にはRTCやバックアップ用のバッテリなどが出ていません。
秋月電子通商製のFT2232D USB-シリアル2ch変換モジュールを使用しています。 左側の部分がJTAG信号を取り出すためのコネクタで、右側はシリアル信号をやり取りするためのコネクタです。 FT2232Dは2ch分の回路を搭載しているので、両者は並行して使用できます。
ご自由にお使い頂いて構いませんが「無保証」です。 趣味の工作で作ったものなので、参考程度と考えて利用することを強くお勧めします。
(2012/9/9 初版)
(2012/10/21 回路図を追加)
(2012/10/28 JTAGアダプタ回路図を追加)