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

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



[第75回]


●CPLD版82C55の動作写真

CPLD版82C55の動作写真です。
ND80Z3.5に接続してテストをしました。

写真のND80Z3.5は試作版です。
せっかく作った試作版ですので、私はずっとこれを使っています。
グリーンレジストとシルクがないだけで製品版と機能動作は同じです。
接続ケーブルが画面の外になってしまいましたが、ND80Z3.5の26pin増設用I/OコネクタとCPLDトレーニングボードの26pinバスコネクタをフラットケーブルで接続しています。
CPLD版82C55のAポート〜Cポートの出力データはCPLDトレーニングボードの上に配置した8個×3列のLEDで確認できますが、本来の目的としては各ポートの入出力と外部回路を接続してそれをコントロールすることにあります。
そこで82C55外部入出力コネクタ(基板上部の26pinコネクタ)に出力確認のためのLEDを接続しています。
このLEDテストボードは作ってからもう40年ほど役に立ってくれています。
CPLDトレーニングボード上のLEDはポート出力が’1’で点灯し’0’で消灯しますが、外部に接続したテスト用LEDは論理が逆になっていて、’1’で消灯し、’0’で点灯します。

ND80Zモニタはなかなかのすぐれものです(自画自賛です)。
写真は
[F][3][ADRSSET][8][0][I/O][OUT]
とキー操作したところです。
I/OアドレスF3にコントロールワード80を出力しました。
これでAポート〜Cポートが出力モードに初期設定されました。
コントロールワードについては[第68回]を参照してください。
[I/O]操作のときのアドレスは下位2桁のみが参照されます。
上の写真ではたまたま”00F3”と表示されていますが上位2桁には何が表示されていても実行には影響はありません。

Cポートにデータを出力しました。

CポートのアドレスはF2です。
さきほどのキー操作でアドレスをF3にしてコントロールワードを出力しました。
[I/O][OUT]、[I/O][IN]は実行後もI/Oアドレス表示は変わらずそのままを維持しています。
そこで[READ DEC]を実行しました。
I/OアドレスがF2になりました。
たまたま”23”が表示されたので、これをそのままCポートの出力データにします。
[I/O][OUT]
とキー入力しました。
Cポートに対するOUT命令が実行された結果、LEDに”00100011”と表示されました。
LEDは上からAポート、Bポート、Cポートの順に並んでいます。
左端がビット7、右端がビット0です。
Cポートに対してOUT命令が実行されたのは、[I/O][OUT]のキー操作を行なった直後のただ一回だけです。
Cポートに出力された値は次にCポートにOUT命令が実行されるまで値をそのままラッチして出力しています。

Bポートにデータを出力しました。

BポートのI/OアドレスはF1です。
さきほどのキー操作でアドレスはF2になりました。
そこで[READ DEC]キーを押すとアドレスはF1に変わりました。
今度は任意の値として”12”を出力してみることにしました。
[1][2][I/O][OUT]とキー操作しました。
もう一度自画自賛ですが、このようにND80Zモニタはとても便利です。
Bポートに対してOUT命令が実行された結果、LEDに”00010010”が表示されました。
この出力値もラッチされていますから次にBポートに対してOUT命令が実行されるまで出力は変化しません。

Aポートにデータを出力しました。

AポートのI/OアドレスはF0です。
さきほどのキー操作でアドレスはF1になりました。
そこで[READ DEC]キーを押すとアドレスはF0に変わりました。
任意の値として”34”を出力してみることにしました。
[3][4][I/O][OUT]とキー操作しました。
Aポートに対してOUT命令が実行された結果、LEDに”00110100”が表示されました。
この値もラッチされています。

Cポートの下位4ビットを入力モードにしました。

I/OアドレスをコントロールワードアドレスF3にします。
さきほどAポートに出力するためアドレスがF0になっていますから、[READ INC][READ INC][READ INC]とキー操作しました。
[F][3][ADRS SET]とキー操作することもできます。
ここでコントロールワード”81”をOUTします。
[8][1][I/O][OUT]とキー入力しました。
Cポートの下位4ビットが入力に設定されたため、ビット3〜ビット0がハイインピーダンスになりました。
抵抗でプルアップしてあるため、”1111”が入力されている状態になっています。
オリジナルの82C55ではこのとき出力に設定されているポートの出力は0クリアされてしまいます。
当CPLD版ではクリアされないようにプログラムしてありますから、Aポート、Bポート、Cポートの上位4ビットの出力は変化していません。

Cポートに対する入力ついてはボード上でジャンパーピンでテスト入力ができるようになっています。

CポートのLEDの下にあるのがジャンパーピン用のヘッダーです。
このボードは試作のため一番右端に余計なジャンパがありますが、それは無視してください。
左端がビット7でそこから右に向かって6、5、4、3、2、1、0です。
写真を撮った角度のせいで、シルクマークと位置がずれているように見えますが、ビット1をジャンパーピンでGNDにショートしました。
LEDのビット1が消灯しています。

Cポートアドレスからデータを読み込みました。

ND80Z3.5のキー操作です。
[READ DEC][I/O][IN]とキー操作しました。
ND80Z3.5のデータ表示部の右2桁に”2D”と表示されました。
Cポートの上位4ビットからは出力データ”0010”が読み込まれ、下位4ビットからは入力した値”1101”が読み込まれました。

このままCポートのビット出力テストをしました。

Cポートの上位4ビットは出力モードのままなので、そこにビット出力をしてみます。
[READ INC][0][D][I/O][OUT]とキー操作しました。
I/OアドレスF3にビット制御データ0Dを出力しました。
”00001101”はビット6に’1’を出力するコマンドです([第68回]参照)。
Cポートの他のビットはもとのままで、ビット6だけが’1’になりました。

Cポートの下位4ビットを出力モードに再設定しました。

Cポートの下位4ビットを出力に再設定しました。
このときさきほどの入力テストのところでセットしたジャンパーピンを外すのを忘れないようにします。
ジャンパーピンがセットされたままでCポートを出力モードにすると出力がGNDにショートしてしまいます。
[8][0][I/O][OUT]とキー入力しました。
Cポートの下位4ビットには今回のテストの最初のところで”0011”を出力しました。
入力モードに設定した期間中はそれは内部に隠れていて確認できませんが、再び出力モードに再設定すると、もとのまま維持していた出力バッファの値が出力に反映されます。
これもCPLD版82C55で独自にプログラムした機能です。
オリジナルの82C55では、出力にモード設定したポートの出力は0クリアされます。

以上のテストで、作成したCPLD版82C55VHDLプログラムは期待した通りの動作をすることが確認できました。
めでたしめでたしです。

CPLD入門![第75回]
2019.6.22upload

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