2019.6.14
前へ
次へ
ホームページトップへ戻る

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第67回]


●CPLDトレーニングボード

当連載を開始したのが今年の2月ですから、それからもう4ヶ月も経ってしまいました。
読者の皆様には、あるいは「何を考えているのかなあ。いささか方向が外れているのではないかなあ。」などとお思いだったかもしれません。
しかし。
お待たせいたしました。
いよいよ、真打の登場であります。
「おお。そう来たか」
と納得していただけるものと自負しております。

今まで何枚か作ってきましたCPLDボードは既存のHCMOSICベースの回路をCPLD化したもので、小型化とコストパフォーマンスの向上ということではそれぞれに意義のある基板ですが、それぞれ特定の回路に特化したボードですので、ユーザーがVHDLプログラムを書き換えるなどして、オリジナルのボードにするとか、あるいはVHDLプログラムの習熟のために独自のプログラムを書いて、その動作を確認してみる、というような使い方、つまり応用としての活用はちょっと難しいところがあります。

CPLDトレーニングボードは、今までと同じEPM7128SLC84を使いますが、その周りに配置した回路は特定の機能に固定していません。
できるだけ応用が利くように、汎用的な入出力回路になっています。
下はそのような目的で製作した試作基板の写真です。



7セグメントLEDを4桁搭載しています。
うーん。
実際に現物を見ると表示は結構明るいのですが、こうやって写真に撮るとやっぱりちょっと見にくいですねえ。

遮光フィルムを乗せてみました。



これならはっきり見えますでしょう。
以前に7セグメントLEDの表示を試みたときは、8桁だったこともあってmacrocellが不足してしまったので、結局PICを使うことになりました。
その後にもう少し賢いプログラムが書けるようになりましたので、現在ではPICを使わなくても7セグメントLEDの表示は可能だと考えています。
しかしその場合にはPICの代わりにダイナミック表示を行なうためのクロックが必要になることなどを考えると、マイコンボードのための7セグメントLED/5X5キー入力回路をCPLD化する場合には、やはりPICを利用する方法が一番よいようです。

そういうことなのですが、このボードはトレーニングボードという位置づけですから、効率化などを追求するのではなくて、あくまで色々なプログラムを書いてそれを実際に動作させて確認することができる、というところに主眼を置いています。
そういう観点からすれば7セグメントLEDをダイナミック点灯させるというのは、それ自体がサンプルプログラムとして参考価値が高いと思いますし、当然7セグメントLED表示ができれば、それを使ってまた別のいろいろなプログラムができそうです。
4桁表示なので7セグメントLEDをコモンドライブする側はトランジスタ(2SC1815)を使っています。

写真では「1234」と表示しています。
写真を見ていただければわかりますように、このボードには何もつないでいません。
ではどうやって「1234」という「値、データ」を表示させているのでしょう。
7セグメントLED/5X5キーIFボードのようにCPUボードと接続してCPU側からのデータ出力によって表示が行なわれているのではないことは一目瞭然です。
実はこれ、12時34分の時刻の表示を行なっているところです。
7セグメントLED4桁表示といえばおそらく誰でもデジタル時計の表示を想起されますでしょう。
そこでサンプルプログラムとして24時制の時分秒表示クロックプログラムを作成しました。

このボードにはRTC(時計用IC)は搭載していません。
後で説明する32.768KHzのクロックを入力することで、それをEPM7128SLC84が分周して1秒のクロックを作成して、時刻をカウントし表示しています。
そうか。
1秒のクロックをカウントして表示させているだけか。

そんな簡単なものじゃありません。
カウンタはVGAIF+CRTIFでも使ってきました。
一般的なカウンタはバイナリカウンタ(2進カウンタ)です。
しかし時計は?
秒と分はそれぞれ10進(下位)+6進(上位)カウンタにしなければなりません。
時は24時の場合下位は10進ですが上位は2進ではありませんね。
上位も0、1、2まではカウントしますから一応10進的ですがそれだけでは足りません。
’24’で’00’クリアが必要です。
たかが時計、されど時計というべき結構トレーニングになるプログラムです。

時計といえばもうひとつ。
時刻を設定できなければ、時計になりませんでしょう。
プッシュスイッチからの入力で時刻の設定ができるようにプログラムしてあります。
それもできるだけ簡単に行なえるように、複数のプッシュスイッチを使ったプログラムを考えました。
スイッチ入力の応用プログラムにもなります。

もうひとつ。
表示が4桁しかありませんから、時分と分秒はプッシュスイッチを押すことで切り換えて表示することができるプログラムにしてあります。
これもスイッチ入力プログラムのサンプルにもなりますね。

時計用のクロックについては後の回でも詳しく説明する予定です。
バックアップ動作ができませんので電源が切れたら時刻も失われます。
その辺はあくまでトレーニング用のサンプルプログラムです。

時刻を設定すればデジタル時計ですが、ゼロクリアしてプッシュスイッチを押したらカウントスタートするようにすると、ストップウォッチプログラムになります。
また逆に時間を設定してスイッチオンでダウンカウントすれば、デジタルタイマープログラムになります。

7セグメントLEDと時間としての秒クロックを組み合わせるならば、周波数カウンタができそうです。
これもサンプルプログラムとしては参考価値が高いでしょう。

7セグメントLEDのほかにもボード上にはずらりとLEDが並んでいます。
CPLDのユーザー用入出力端子はプログラムによって入力、出力あるいは入出力兼用端子として使うことができます。
というより、プログラムによって入出力を自由に設定して使うことこそがCPLDのそもそもの使用目的といえますでしょう。
出力結果を確認するためにはボード上に出力端子ごとにLEDがあると便利です。
ということでボード上には8ビット×3組のLEDが配置してあります。

入出力が8ビット×3組、ということになりますと、直ぐに思い浮かぶのはおそらく82C55でありましょう。
そうです。
どうせサンプルプログラムを書くならばということで、82C55のA、B、Cの各ポートをVHDLプログラムで実現しました。
82C55は入出力ポートだけではなくてパラレルデータの送受信モードなどもあるのですが、サンプルプログラムでは一般的な入出力モードに限ってプログラム化してあります。
Cポートは上位4ビットと下位4ビットをそれぞれ入力、出力別々に設定できますが、それも82C55と同じ機能になるようにプログラム化しました。
Cポートについては入力も簡単にテストできるようにボード上に8ビットのジャンパーピンを設けてあります。
せっかく82C55をCPLD化したのですから、マイコンボードの外部回路として使えるようにしなければ片手落ちです。
ということでボードにはND80Z3.5などのマイコンボードのI/O増設用バス信号コネクタに接続するための26ピンコネクタ(上の写真で下側のコネクタ)を実装しました。
また写真で上側にある26ピンコネクタは、これもND80Z3.5などのマイコンボードの82C55用入出力コネクタと同じピン配列になっています。

●回路図

CPLDトレーニングボードの回路図です。

時計用の1秒クロックは32.768KHzのクリスタルを74HCU04で発振させています。
これがなかなかに難題で、しっかり悩むことになってしまいました。
そのことについては、後の回で書く予定です。

CPLD入門![第67回]
2019.6.14upload

前へ
次へ
ホームページトップへ戻る