Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

0

Share

Download to read offline

Verilog-HDL Tutorial (11)

Download to read offline

Verilog-HDL Tutorial Using DE0 FPGA Board

  • Be the first to like this

Verilog-HDL Tutorial (11)

  1. 1. 1 Verilog-HDL 講習会DE0編(11) PS2キーボードの制御 4, July, 2013 鹿児島大学 中原 啓貴
  2. 2. PS/2 の規格 •  信号:「クロック」「データ」の2本 ‒  デバイス側から送信される •  データはクロックの立ち下がりで有効 •  データ(11ビット) ‒  スタートビット(1ビットの「0」) ‒  データ(8ビット、LSBから送信) ‒  パリティ(データの1の個数が奇数1、偶数0) ‒  ストップビット(1ビットの「1」) •  キーボードに関して ‒  キーを押す:キーコード(8ビットのデータ) ‒  キーを離す:「F0」を送信して、キーコードを送る •  注意:5V動作のキーボードもあり (DE0では3.3Vキーボードのみ動作?) 2
  3. 3. PS/2キーボードの タイミングチャート 3 CLOCK DATA スタートビット (必ず0) Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 パリティビット ストップビット (必ず1) 0 0 1 0 1 1 1 1 0 0 1 データビット (8ビット) 最下位ビット (LSB)から送信 (この例では0111_1010を送信) データビットの1の個数が 偶数のとき→1, 奇数のとき→0 CLOCKの立ち下がりでDATA有効 Tck=30us∼50usつまり,10.0Hz∼16.6Hz
  4. 4. データ受信方法 •  まず, CLOCKの立ち下がりを検出 •  1usec間隔で連続した「111000」を受信 ‒  1usecは適当に決めた間隔. 速過ぎてもだめだけど… 4 CLOCK DATA PS2_KBCLK 受信回路の CLOCK 1usec → 1MHz 1 1 1 0 0 0 シフトレジスタを使う! catch_negedge[5:0] <= {catch_negedge[4:0], PS2_KBCLK}
  5. 5. PS2キーボード受信回路 5 CLOCK_50 RESET_N CLK1MHz CLK1MHz PS2_KBCLK PS2_KBDAT LEDG RESET_N 10 1MHz生成回路 (Gen_CLK1MHz) PS2キーボード 受信回路 (DE0_TOP)
  6. 6. 状態遷移図 6 Start Bit Data Bit0 Data Bit1 Data Bit2 Data Bit3Stop Bit Parity Bit Data Bit7 Data Bit6 Data Bit5 Data Bit4 Reset LEDG <= 0; receive_data<= 0; catch_negedge <= 0; catch_negedge==6'b111000 receive_data[0] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[1] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[2] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[3] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[4] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[5] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[6] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[7] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[8] <= PS2_KBDAT; catch_negedge==6'b111000 receive_data[9] <= PS2_KBDAT; catch_negedge==6'b111000 LEDG <= receive_data; この状態ではストップビットを 読み込まないように設計した (LEDGに今まで受信したデータを表示)
  7. 7. 7 •  ピン配置が面倒くさいので、デフォルト のプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め) DE0付属のCD-ROM Demonstrations 内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_7_1¥ 内にコピー
  8. 8. DE0_TOP.qpfをダブルクリック してQuartus IIを起動 8 Pin Plannerを開いてみると ピン配置が終わっている!
  9. 9. Verilog-HDLを入力 9 ダブルクリック Verilog-HDLの テンプレートが 表示されるので コードを入力 コード入力したら保存を忘れずに!
  10. 10. 入力するVerilog-HDL 10
  11. 11. 11 入力する Verilog-HDL (続き)
  12. 12. 動作させてみよう •  キーボードを入力するとLEDGにデータが表示される (今回はJIS配列日本語PS2キーボードを使用) 12 キーボードの 「k」を押した 受信したデータ 0 1 0 0 0 0 1 0 データの1の個数は2, つまり偶数なのでパリティ=1 ストップ ビット=0
  13. 13. 13 受信したデータ 0 1 0 0 0 0 1 0 つまり、16進数では 0x42なので 「k」のスキャンコードと一致 キーボードを離す時は 「F0」+「スキャンコード」が送信される (離したときに一瞬上位ビットのLEDGが 点滅するのはそのため) 機能キーは特にキーボード毎 (英語キーボードや101キーボード等)に スキャンコードが異なるので注意!
  14. 14. 課題 •  PS/2キーボードのスキャンコードを7セグ メントLEDに表示するように改造せよ •  PS/2キーボード受信回路のVerilog-HDLの シミュレーションを行い, 検証を行え ‒ 周期を確認し, 仕様と一致するか確認 14

Verilog-HDL Tutorial Using DE0 FPGA Board

Views

Total views

1,927

On Slideshare

0

From embeds

0

Number of embeds

3

Actions

Downloads

14

Shares

0

Comments

0

Likes

0

×