MB-S1

S1用マウスIC機能を実装してPS/2マウスを使う

 前回では、マウス制御ICがあればPC-98用バスマウスが使えることを確認できました。今回はマウスICがない場合を想定してこのICを含めた回路を考えてみます。


 ……マウスICがない。さて、どうしようか。なければ作ればいい。で、何で作ろうか。汎用ロジックICを組み合わせて…いやいやそんな面倒なことはしたくない…。となるとCPLDかFPGAとなるが…。

 CPLDやFPGAについては開発した経験が全くなく、どんなデバイスを使用してどのように開発したらいいのかさっぱりわかりません。しかもお値段も結構高いという印象があり手を出すのを躊躇していたのですが、ネットで検索していところ、ちょうどいいものがありました。2016年4月にCQ出版社から発売された「(1)MAX10 (2)ライタ (3)DVD付き! FPGA電子工作スーパーキット」というもので、Altera社のMAX10というFPGAを搭載した基板が付いて4,500円とFPGA搭載基板の中ではかなりお安い(ただし、別途追加で部品を購入してはんだ付けする必要がある。追加部品一式を購入で+3000円弱)。

 この冊子をもとに開発工程も一通り習得?したところで、いよいよマウスIC機能の製作にとりかかります。

製作するマウスICの機能としては、 なお、オリジナルICにある機能のうち以下のものは省略します。

 以上の方針で、Verilog HDLで実装していきます。なお、PS/2コントローラは開発ソフトであるQuartus Primeに標準で付いていたIPモジュールを使用することにしました。

 実装ができたら、信号が正しく出ているかをシミュレーションツールModelSimを使って調べていきます。簡単なテストベンチを作成して実行。おかしいところは実装を変更しながら想定通りに動くようにします。


開発中の様子

 ここでFPGA側の開発は一旦中断して、S1と接続するための回路を設計します。ここで注意する点として、S1とPS/2マウスは5V、一方FPGAは3.3Vで動作するのでFPGAのピンに3.3Vを超える電圧がかからないようにしなければなりません。S1とFPGAの間には3.3V駆動だが5Vトレラントな74LCXという汎用ロジックICを使用しました(バッファ&ゲートにもなる)。IRQ割り込み信号だけはオープンコレクタなのでトランジスタで実装。PS/2マウス側はマウス内部のプルアップ抵抗で5V近くになるので、保護ダイオードとプルダウン抵抗で信号線が3.3V以下になるようにしました。


回路図(クリックで拡大)

 この回路図をもとにブレッドボード上に配線していきます。S1からの信号は拡張カード端子ではなく、マウスICのある部分から取り出すためICソケットにコードを配線し、これをS1にはめ込むようにします。


ブレッドボードに配線

S1のマウスICソケットに接続

 さあ、ではS1を起動してマウステスト用プログラムをLOAD&RUNします。結果は…ウーン、X方向はとびとびで動くしY方向は動かずと思ったら上下逆になっているしボタンを押しても割り込みが発生しないようだし……これは前途多難だ…。


ロジアナを接続してデバッグ

 デバッグのためにS1とFPGAの間にはロジックアナライザを接続します。そして、FPGAには内部の信号を観測するために付属するSignal Tap II Logic Analyzerを組み込みます。これらを用いて信号を観測しているとシミュレーションの時とは若干違う動きをしています。原因の1つはHDLの書き方で、ソフトウェア言語のように逐次処理させたい部分がうまく動いていないようでした。あとは仕様の勘違いなどいろいろな不具合と悪戦苦闘した結果、なんとか動くようになりました。


スムーズに動くようになりました

まとめ

 初めてのFPGA、初めてVerilog HDLでコーディングなど初めてづくしでなかなか想定通りにはいきませんでしたが、なんとか動かすことができました。今後はこのFPGAを活用していろいろと拡張機器を作っていきたいと思います。(おわり)

ソースコード・ダウンロード

s1ps2mouse_020_source.zip (72KB)
 [MD5:958da1e90c6bcfb54aef9a6056887ee5]

※試される方は自己責任でお願いします。

関連ページ

S1で98用バスマウスを使う

 

TOP PAGE