MSX用ニキシー管カートリッジをつくる その2

前回からのつづきです。ニキシー管をコントロールする部分の解説になります。

コントローラ

当初は前回作った8255を使っているSRAM&I/O基板の拡張基板として考えていました。ただそうしてしまうとダイナミック点灯のコントロールだけでMSXが一杯一杯になってしまいそうです。BASICから簡単に使えるようにしたいので、独立基板とし自前で動作をするように方向を変えました。

とはいえ、カートリッジにマイコンを載せてしまうとMSX関係ないじゃ〜んとなってしまうので、CPLDを使用してロジック回路で動作するようにしました。

ダイナミック点灯の仕組みはTK-80の7セグLEDのコントロール方法に習っています。
(なんか唐突にTK-80が出てきましたが、実は最近「復活!TK-80」という本を手に入れたのです。その本に付属しているPDF化されたTK-80のマニュアルを見ていたら参考になることが書いてあったというわけです。どうでもいい話ですね(笑))

TK-80ではタイマーICを使って約1〜2ms間隔で3〜5usのパルスを発生させて、その立ち上がりでカウンタを回しつつHOLD要求をします。そしてバスに現れたデータをパルスの立ち下がりでラッチして表示内容の変更とカウンタにしたがって表示桁の切り替えを行っているようです。

似たような動作を実現するためにCPLDで以下のモジュールを用意しました

・パルス発生器
・2bitカウンタ
MSXのクロック3.58MHzから14bit分のカウンタを使用して、約4ms毎に約4usのパルスを発生させています。このパルスの立ち上がりでカウンタを回します。表示桁カウンタは4桁分なので2bit幅です。

・I/Oレジスタ
MSXにはDMAは無いのでCPLD内に4bit x 4桁分のI/Oレジスタを用意することにしました。これが各桁の表示内容になります。

・4bit x 4チャンネルセレクタ
パルスの立ち下がりで表示内容をラッチします。桁の選択は表示桁カウンタを使い4×4セレクタで行っています。

・ラッチ付き2 to 4デコーダ
表示管の選択に使用します。

ブロック図
ブロック図

上記のブロック図は簡易的なものです。この他にリセット信号やI/Oアドレスを変更するためのジャンパなどが繋がっています。

CPLD

XilinxのXC9572XL-10VQG44Cを使用しています。DigiKeyで300円弱ぐらいです。秋月で買える110円のXC9536XL-10VQG44Cには残念ながら収まりませんでした。

書込みには日昇テクノロジーのXILINX USBダウンロードケーブルを使用しています。

IMG_4289
ダウンロードケーブルと評価基板

 

参考にテキストレポートの冒頭だけ

cpldfit: version P.20131013 Xilinx Inc.
Fitter Report
Design Name: nixie_dinamic_4dig Date: 2-15-2015, 0:05AM
Device Used: XC9572XL-10-VQ44
Fitting Status: Successful

************************* Mapped Resource Summary **************************

Macrocells Product Terms Function Block Registers Pins
Used/Tot Used/Tot Inps Used/Tot Used/Tot Used/Tot
58 /72 ( 81%) 311 /360 ( 86%) 145/216 ( 67%) 46 /72 ( 64%) 27 /34 ( 79%)

** Function Block Resources **

Function Mcells FB Inps Pterms IO
Block Used/Tot Used/Tot Used/Tot Used/Tot
FB1 12/18 38/54 84/90 9/ 9*
FB2 15/18 34/54 87/90 5/ 9
FB3 18/18* 33/54 53/90 7/ 9
FB4 13/18 40/54 87/90 6/ 7
----- ----- ----- -----
58/72 145/216 311/360 27/34

* - Resource is exhausted

** Global Control Resources **

Signal 'CLK' mapped onto global clock net GCK1.
Global output enable net(s) unused.
Signal '_RST' mapped onto global set/reset net GSR.

** Pin Resources **

Signal Type Required Mapped | Pin Type Used Total
------------------------------------|------------------------------------
Input : 13 13 | I/O : 22 28
Output : 8 8 | GCK/IO : 3 3
Bidirectional : 4 4 | GTS/IO : 1 2
GCK : 1 1 | GSR/IO : 1 1
GTS : 0 0 |
GSR : 1 1 |
---- ----
Total 27 27

また、シミュレーションによって期待した動作をしていることを確認します。

シミュレーション

初めてのデバイスなので開発環境のインストールとか面倒でしたが、何とかなったようです。

つづきます。

投稿者:

ないん

30半ば過ぎで突然電子工作にはまりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です