28万アクセス突破しました。皆さん、ありがとうございます。
スパルタン3スタータ・キットを使って、PS/2キーボードを
キャラクタ・ディスプレイ・コントローラにつなごうとしていた。キーボードのキーを押したときに、ディスプレイにそのキーの文字を1個、表示するようにしたかった。
PS/2キーボード・インターフェースはすでに、ほかの人が作ったものがあったので、それをキャラクタ・ディスプレイ・コントローラにつないだ。
そうすると押したキーコード以外に、空白ともう1つキーコードが入ってしまった。
これは、スパルタン3スタータ・キットのユーザーズマニュアルによると、キーを押したときに、キーコードが出て、キーを放したときに"F0"というキー・アップ・コードを出し、その後同じキーコードを出すそうだ。
まともに表示するには、キー・アップ・コードとキーを放したときにキーコードを無視する必要があるようだ。
後、気になったのがクロックだ。スパルタン3スタータ・キットのユーザーズマニュアルによると、PS/2インターフェースはクロックとデータで構成されていて、クロックのエッジでデータの有効をあらわす。どちらの信号もオープン・ドレインで、クロックエッジからデータのセットアップ時間、ホールド時間が最低5usと長い。
(スパルタン3スタータ・キットのユーザーズマニュアル28ページのテーブルと図を引用させていただきます)

現在は50MHzのクロックを25MHzにして、PS/2のデータとクロックをサンプルしているので、特にオープン・ドレインの立ち上がりでのサンプル間隔として、40nsは少し短い気がする。
従って、1us間隔くらいでサンプルのイネーブルを追加しようと思っている。今でも(25MHzでサンプルしても)ちゃんとキーコードは見えるが、いろいろとオープン・ドレインの立ち上がりの鈍さには泣かされてきているので信用ができない。(小さい抵抗をつければ立ち上がりは速くなるけどね。。。オシロで見てみるという話もあるが。。。)
一応、1usサンプル間隔に変更して、2つのコードを無視するように改造して、キーボード入力ができるようになった。(といっても、押したキーを表示するだけだが。。。)
まだ、シフトに対応していないので、小文字は出ないし、(シフトキーもコードが出るようだ。)Enterキーを押しても改行するわけでもない。どの程度サポートするかは検討中。
なお、PS/2キーボードに関しては、
日曜デジタルさんの
”PS/2に挑戦”が詳しい。
追記:25MHzクロックで直接PS/2のデータ、クロックをサンプルしても問題ないようです。クロックで直接サンプルした方がテストベンチ書きやすいから、こっちのほうがいいかな?
キーボードからの波形はどんな波形が来ているのか、オシロで見てみたい。
- 2007年08月22日 12:27 |
- その他のFPGAの話題
-
| トラックバック:0
-
| コメント:4
こんにちは。以前spartan3 starter kitで試してみたときは、キーボードによって動いたり動かなかったりしたことがありました。そのときはalways @(posedge SCLK)でサンプリングするという無謀なことをしていました。それでも動くものは動いていました。結局25MHzくらいでレジスタに読み込みながらサンプリングするようにしたら動くようになりました。
PS2は規格がはっきりしないのがやっかいですね。
- 2007/08/25(土) 13:23:06 |
- URL |
- Sim #mQop/nM.
- [ 編集 ]
立ち下がりエッジでサンプルだと思うので、always@(negedge SCLK) ではないでしょうか?
まだ、オシロで見ていないですが、結構オープンコレクタでも立ち上がりが早いんだなと思いました。こっちも25MHzクロックでサンプルしていけてます。
- 2007/08/25(土) 14:03:37 |
- URL |
- marsee #-
- [ 編集 ]
はい、negedgeです。
実際はHの間にデータが変化するので立上がりでも読めたりします。
- 2007/08/25(土) 19:28:01 |
- URL |
- Sim #mQop/nM.
- [ 編集 ]
>実際はHの間にデータが変化するので立上がりでも読めたりします。
そうなんですね。速度的には遅いですからね。。。
- 2007/08/25(土) 20:33:33 |
- URL |
- marsee #-
- [ 編集 ]