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

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



[第112回]


●CPLDロジアナ(2)

前回はPICIO82C55を紹介しました。
なぜPICIO82C55を紹介したかといいますと、PICIO82C55の回路から82C55を外して、代わりにPIC18F14K50の外にCPLD(EPM7128SLC84)を置いたものがここで紹介するCPLDロジアナだからです。
ということを前回の終わりに書きました。
下はそのように考えて作ったCPLDロジアナの試作基板です。

データを記録するためのRAMとして512KBの大容量RAMを実装していますが、今はそんなに大容量でなくても、32KBの62256でもよいのではないだろうかと考えはじめています。
62256で済めばそれだけコストが下がります。
それについてはテストを重ねる中で考えていくことにします。

下が回路図です。

右側にあるCN2、CN3は512KRAMを接続するためのコネクタです。
左側のCN4がターゲットから測定の対象となる信号を読み込むためのフラットケーブルコネクタです。
同時に最大16CHの信号を読み込みます。
この回路図にはありませんが、実際の試作基板ではPB0〜PB15に100KΩのプルアップ抵抗を追加しています。

下はテスト中の写真です。

右側にあるのはCLOCK発生ボードです。
とりあえずのテスト用信号源です。
その出力信号をCPLDロジアナで読み取って記録します。

試作したCPLDロジアナは16CHまで記録できますが、RAMが8ビットなので16CHでは2回の書き込み動作が必要です。
そのためデータをサンプリングして記録するときのクロック周波数が半分になってしまいます。
EPM7128SLC84は100MHzで動作させていますが、RAMのアクセスタイムの関係で、データのサンプリングクロックの上限は8CHで20MHz、16CHでは10MHzです。
とりあえずはテストですからわかりやすいところで、20MHz8CHでサンプリングしています。

下は前回お見せしたPICIO82C55用のプログラムをCPLD用に直したプログラムを実行中の画面です。

PICIOは8ビットのアドレス00〜FFを出力できます。
CPLDロジアナの回路はそれ自体が独立した回路なので、そのアドレスの全範囲を自由に使うことができます。
I/Oとしては十分すぎる範囲なので、CPLDに与えるコマンドはパラメータを必要としないものはアドレスを出力するだけでできてしまいます。

/ADSETはPIC18F14K50がアドレスを出力するためのコマンドです。
PIC18F14K50から出力されるアドレスはCPLDが動作するためのコマンドになります。
アドレス00はサンプリングデータを記録するためのRAMアドレスをクリアします。
01はサンプリング開始コマンドです。
サンプリングクロックが20MHzなので512KBのRAMへの書き込みは瞬時に終ってしまいます。
アドレス06はRAMに記録したデータを読み出すためのRAMアドレスのクリアコマンドです。
07はRAMからのデータ読み出しコマンドです。
データを1バイト読み出すたびにアドレスがインクリメントします。

/IN2はPIC18F14K50がCPLD経由でRAMから読み出したデータをUSB経由で送信するようにPIC18F14K50に指令するためのコマンドです。
パラメータは1回の送信バイト数です。
USBのHID通信は1回64バイトしか送受信できません。
/IN2で受信できる最大データ数は64バイトに制御データを含むため、最大62バイトになります。
ここではその最大値の62(3EH)を与えています。
[]付きで表示されているのが受信データです。
CH0がビット0でCH7がビット7です。

読み出したデータを読んでみることにします。
最初のデータの[00]はゴミのようです。
その次の[a6]から[ae]までの1行のデータを、ビット0だけに注目して読んでみます。
0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0
になります。
ビット0はCH0です。
CH0にはCLOCK発生ボードの4MHz出力がつながっています。
4MHzの1周期は250nsなのでH、Lのパルスは各125nsです。
サンプリングクロックは20MHzなのでサンプリング周期は50nsになります。
125/50=2.5なので上の測定結果のようにH(1)またはL(0)のどちらかが2回でどちらかが3回になります。
Hが2回でLが3回になっているのはたまたまサンプリングが毎回その位置になってしまったためで、測定のタイミングによってはHが3回でLが2回になることもあると考えられます。
H、Lをあわせると4MHzの1周期は250nsなので計算と測定結果は一致しています。

もうひとつ確認してみることにします。
上と同じようにして今度はビット1だけに注目して読んでみます。
1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1
になります。
ビット1はCH1です。
CH1にはCLOCK発生ボードの2MHz出力がつながっています。
2MHzの1周期は500nsなのでH、Lのパルスは各250nsです。
250/50=5なので今度はぴったり割り切れます。
計算結果と測定結果は一致しています。

もうひとつ確認してみたいことがあります。
上のCH0とCH1の結果を上下に積んで表示してみます。
0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0
1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1
すると、CH0がHからLになるタイミングに合わせてCH1が変化していることがわかります。
これはCLOCK発生ボードの出力波形に合致しています。

おお。
できた。
できました!
ロジアナの基本的な動作としては、大成功です。

しかし。
これだけではロジアナと呼ぶわけにはいきません。
測定データをパルス波形として表示することができなければ、とても使い物にはなりません。

しかし、しかし。
それはまたハードルの高い作業でありました。

次回に続きます。

CPLD入門![第112回]
2019.10.19upload

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