CPLDで遊ぼう!(13)
更新日:2006年6月15日

キー入力とリングカウンタをつけてみよう
今回はキー入力を付ける実験を行います。完成になるまで試行錯誤を続けながら作成していますので、進み具合は遅いですがよろしくお願いいたします。
今回の内容に入る前に前回のラッチと7セグメントデコーダを合体しましたのでまずはその説明から行います。
キー入力とリングカウンタをつけてみようのラッチと7セグデコーダの合体モジュール
ラッチは表示のデータのみ保持すれば良いので7セグメントデコーダと合体しておきましょう。
(ラッチ付き7セグメントデコーダの入出力)
clkの立ち上がりに同期して4bitデータに対応する7セグメントデータをラッチ出力します。
(ラッチ付き7セグメントデコーダのVHDLソース)
キー入力とリングカウンタをつけてみようのキー入力
キー入力は将来のカウンタゲート時間を切り換えるのに使う予定です。
そのキー入力については次のような回路構成を考えています。
プッシュスイッチが1個ついていてスイッチを押すごとにその信号を後の回路に伝えるものとします。

CPLDは3.3Vの信号レベルで動いていますので5V系で入力をする場合には信号レベルの変換が必要になります。今回は別の入力系にもレベル変換が必要ですので、このキー入力の部分もレベル変換して入力することとしました。
(キー入力の回路)
74VHC04を入力に入れているだけです。このICを3.3Vで駆動することによってこのICに対する入力レベルが5Vであっても出力は3.3Vになります。この効果はVHCシリーズだけのものであり難しいことを考えなくても使うだけでOKです。(このVHCシリーズの説明はCPLDが付録についていた月の記事の中にあります。)
SG INとSG OUTは実際にカウントする信号が入力される部分で使用します。
キー入力とリングカウンタをつけてみようのキー入力のチャタリング吸収モジュール
実際にキー入力する場合はキーON時に発生するチャタリングを吸収しないと使いものになりません。いろんなVHDLの解説本をベースに(というよりそのまま)モジュールを作りました。キー入力レベルの持続がclkinで入力されるカウンタ値に対して128カウントされないとそのレベルを出力しないというモジュールにしています。(参考文献:VHDLとCPLDによるロジック設計入門:中幸政著)
(チャタリング吸収モジュールの入出力)
今回の場合1msecの信号をclkinに入力しますので約0.128秒以上の信号が持続しないとキーが入力されないことになります。
(チャタリング吸収モジュールのVHDLソース)
キー入力とリングカウンタをつけてみようのリングカウンタモジュール
上記のチャタリング吸収モジュールから出力されるデータはこのリングカウンタモジュールで受けることにします。今回の制作ではカウンタゲート時間を3種類切り換えることにします。その時にスイッチを押すごとに切り換えが出来て3回でその切り換えを繰り返す必要があります。呼び方は色々あるとは思いますがシフトレジスタを利用してリングカウンタを形成しました。
(リングカウンタモジュールの入出力)
clkinの立ち上がりごとにH出力がq0 => q1 => q2 とシフトして行き、またq0に戻ってくるというモジュールです。
(リングカウンタモジュールのVHDLソース)
キー入力とリングカウンタをつけてみようの切り換え出力回路
リングカウンタで切り換えた状態を示すために3個のLEDをつないでみます。
(LED出力回路)
キー入力も含めて今回追加する回路のCPLD接続先を示します。私と同じ回路を作って実験してみたいと思う方はそのように接続お願いします。
(今回の追加回路の配線)
キー入力とリングカウンタをつけてみようのクロック分周モジュール
今回の実験に関して次の二つのモジュールを新たに作りました。
ひとつ目は10MHzのクロックから1msecの信号を作るモジュールです。分周を1/10000にしているだけです。
(1/10000分周モジュール)
(1/10000分周モジュールのVHDLソース)
もうひとつは1/10分周モジュールです。内容は簡単です。
(1/10分周モジュール)
(1/10分周モジュールのVHDLソース)
キー入力とリングカウンタをつけてみようの全体構成
今回の追加回路を含めて全体の構成を示します。
(回路構成概要)
これらのモジュールを組み合わせて次の構成にて実験を行いました。
(キー入力とリングカウンタをつけてみようの回路構成)
今回の実験ではキー入力の部分とカウンタの部分は全く別々に動いています。
キー入力とリングカウンタをつけてみようの実験の様子
(リセット時とキーを1回押した状態)
(2回目と3回目の状態)
キーのチャタリングもほどよく吸収されており、快適な操作が出来ています。
(裏面でも覗いておいて下さい)
さていかがでしたでしょうか。VHDLの世界は限りなく広がっているような気がしています。何でも実現出来て非常に楽しいですね。段々と完成品に近づいているようで大変ワクワクしてきますね。次回はいよいよ信号が入力される部分を作っていきましょう。
これからもますます楽しくなる「CPLDで遊ぼう!」をよろしくお願いいたします。