CPLDで遊ぼう!(11)
更新日:2006年4月30日

7セグメント表示を動かそう
今回のCPLD基板では第1弾企画として周波数カウンタを作りたいと考えています。それに先立って各部分の動作を確認するために実験を進めて行く事にしましょう。この回は7セグメントLEDの動作とBCDカウンタ、クロック分周について実験を行います。
開発ツールの設定についてはトランジスタ技術に詳しく説明されていますのでこのHPでは説明しませんのでご了解お願いいたします。しかし毎回ですがツールの設定はかなり難しいです。まあこれくらいの設定が出来ないとこの先CPLDの開発は難しいとは思います。皆さんも少しづつ理解しながら進めていって下さい。

開発中にPC本体とCPLD基板を接続するパラレルのケーブルを見つけるのに田舎では苦労しました。秋葉原でなんとか購入することが出来ましたので一応写真を載せておきます。
(接続ケーブル)
7セグメント表示を動かそうの回路図
今回の実験として次の構成を行いました。
(今回の回路概要)
CPLD基板内部の部品実装についてもトランジスタ技術の記事の内容に従って下さい。水晶発振モジュールについては配線されすれば長方形のサイズも使うことが出来ます。
(CPLD基板の部品実装)
この基板をベースに周辺回路を組み立てることにします。
出来るだけ基板を有効に使いたいことと将来組み込みケースの大きさを意識しながら基板を構成しましょう。
7セグメント表示を動かそうの7セグメント接続
7セグメントはCPLDに直接接続せずにトランジスタアレイを経由して接続します。
こうすればCPLD基板の動作電圧(3.3V)と流入電流を気にせずに動作させることが出来ます。7セグメントはアノードコモンタイプを使用します。コモンは5Vに接続します。
(7セグメント回路)
6桁分の7セグメントLEDは私の場合次のポートに接続しました。
私と同じ回路で製作をされない方は、各自配線をお願いします。
(7セグメントとCPLD基板の配線)
CPLD基板の周辺にトランジスタアレイを配置して7セグメントLEDはケース取り付けを考慮して別基板に配線しました。
(CPLD基板と7セグメントの配線)
電源は外部からのACアダプターでの接続を考えていますのでケースに取り付けるDCジャックを接続しておきましょう。
(電源用DCジャック)
7セグメント表示を動かそうの7セグメントモジュール
前回のCPLD基板の開発にはTTLモジュールの組み合わせで回路設計を行いましたが今回はVHDLを用いて開発を行います。開発ツールの使い方に関してはトランジスタ技術に詳しく解説されていますので手順良く開発をお願いいたします。
またVHDLに関しては次の書籍が参考になると思いますので記しておきます。
トランジスタSPECIAL・No.79「初歩のHDL設計学習帳」 CQ出版社
DesignWaveBASIC「VHDLとCPLDによるロジック設計入門」 CQ出版社
「VHDLによるデジタル回路入門」 技術評論社
またHPとしては超有名な「電子工作の実験室」http://www.picfun.com/

が参考になります。今回もかなり内容を参考にさせて頂きました。この場をお借りして御礼とさせて頂きます。
いきなりですが7セグメントのモジュールを開発しましょう。TTLICの7セグメント駆動ICをイメージして下さい。今回は出力にトランジスタアレイを使いますので点灯するセグメントは「H」レベルとしています。このあたりは皆さんの環境に合わせてモデファイお願いいたします。
(7セグメントモジュール入出力)
実際のコーディングについては詳しく説明しませんので上記書籍を参考にソースリストを眺めて下さい。正直VHDLで回路設計していくと今までデジタル回路で苦労して開発していたのが「何だったんだ!」と思うようになります。
(7セグメントの点灯パターン)
(7セグメント点灯ビットパターン)
4ビットの入力に対して7セグメントの点灯を行うデコーダのソースです。
(7セグメントでコーダのVDHLソース)
いかがでしょうか。コーディング表現は色々あるとは思いますが動きは同じですね。
7セグメント表示を動かそうのBCDカウンタモジュール
7セグメントモジュールを駆動させるためにBCDカウンタのモジュールを作ります。今回デモ用として10進表示がインクリメントされるようにしたいので10進のカウンタを作ります。桁上げ出力なども入れて多段に対応するようにします。リセットはクロックに非同期で掛かります。
(BCDカウンタモジュールの入出力)
(BCDカウンタのVHDLソース)
7セグメント表示を動かそうのクロック分周モジュール
上記カウンタを動かす基本クロックとして0.1秒のクロックを作ります。
今回の発振周波数には10MHzを選択しましたのそれを分周して基本クロックとします。
(クロック分周モジュールの入出力)
(クロック分周モジュールのVHDLソース)
7セグメント表示を動かそうの全体構成
今回の実験の用の全体構成を回路図で示します。最終的には入出力端子に割り振り必要ですのでこのような全体構成として回路図となります。端子の割り振り方法などもトランジスタ技術に詳しく記載されておりますので充分理解してトライ下さい。
(7セグメント表示実験回路構成)
今回は7セグメントの下位3桁分のみ使用して実験を行いました。トランジスタアレイを3桁分のみ取り付けています。
7セグメント表示を動かそうの実験の様子
(実験の様子)
0.1秒ごとに表示をインクリメントします。丁度99.9秒の次が000となります。
いかがでしたでしょうか。VHDLでコーディングすることによって回路設計への負担がかなり減ることがわかりました。また開発スピードもかなり速く対応出来ると思います。
一度経験すると病み付きになる世界であることを体験出来たと思っています。
今回の実験結果を踏まえて次のステップの開発を進めて行きたいです。
とりあえず次回は6桁まで表示出来るようにしたいです(簡単ですね!)。
これからもますます楽しくなる「CPLDで遊ぼう!」をよろしくお願いいたします。