PS/2 鍵盤介面 (VHDL)

邏輯首頁

程式碼下載

PS/2 鍵盤介面邏輯:ps2_keyboard.vhd (5.1 KB)
解彈跳邏輯(必須包含在項目中):debounce.vhd (2.4 KB)

特點

  • PS/2 鍵盤介面的 VHDL 原始碼
  • 輸出從鍵盤接收的 PS/2 通斷程式碼
  • 當有新程式碼可用時設定標示輸出
  • 驗證 PS/2 傳輸的同位、起始和停止位元
  • 可設定的系統時脈頻率
  • 在 PS/2 和系統時脈域之間同步
  • 對傳入的 PS/2 訊號進行解彈跳

介紹

本文詳細介紹了一個用於 CPLD 和 FPGA 的 PS/2 鍵盤介面組件,該組件以 VHDL 編寫。此元件接收來自 PS/2 鍵盤的資料傳輸,並透過平行介面向使用者邏輯提供鍵盤的通斷程式碼。此組件使用 Quartus II 12.1 版設計。圖 1 展示了一個整合到系統中的 PS/2 鍵盤介面的典型範例。這裡提供了一個範例設計,該範例設計實現了該 PS/2 鍵盤介面組件,用於實現 PS/2 鍵盤到 ASCII 的轉換器。 PS/2 鍵盤介面本身是此處提供的 PS/2 主機收發器的簡化版本。

圖 1. 範例實現

背景

PS/2(IBM 個人系統/2)是一種透過 6 針 Mini-DIN 連接器將鍵盤和滑鼠連接到 PC 相容電腦系統的介面。計算系統必須為鍵盤或滑鼠提供 5V 電源和接地連接。通訊透過兩線串列介面進行,該介面由一條時脈線和一條數據線組成。兩條線都需要上拉電阻(圖 1 所示的電阻為 2kohm)。圖 1 中的 120ohm 串聯電阻用於將 3.3V FPGA I/O 連接到 5V 訊號。

通電後,鍵盤會進行自初始化序列。初始化完成後,鍵盤即可透過 PS/2 介面傳輸鍵盤事件。

圖 2 展示了傳輸格式。非活動狀態時,時脈和資料訊號均為邏輯高電位。鍵盤同時提供時脈和數據。時脈頻率在 10kHz 至 16.7kHz 之間(即週期為 60-100us)。資料以起始位元(邏輯低電位)開始,接著是一個資料位元組、一個同位位元,最後是一個停止位元(邏輯高電位)。資料以 LSB 優先發送。每個位元應在時脈訊號的下降緣讀取。完成後,時脈和資料訊號均恢復至邏輯高電位。

image

圖 2. PS/2 鍵盤傳輸時序圖

資料位元組代表鍵盤掃描碼的一部分:通碼(按下按鍵)或斷碼(釋放按鍵)其中一個。掃描碼有三種不同的設置,但絕大多數鍵盤使用附錄中提供的掃描碼集2。通碼通常由一個或兩個位元組組成。如果通碼使用兩個字節,則第一個位元組為 x“E0”。給定按鍵的斷碼通常與其通碼相同,但斷碼會包含一個額外的 x“F0”位元組作為倒數第二個位元組(PAUSE 和 PRNT SCRN 鍵除外)。

雖然可以向鍵盤發送資料(例如更改其設定等),但這通常是不必要的,並且不包含在此 VHDL 元件中。但是,可以使用此處提供的 PS/2 主機收發器元件來執行此操作。

工作原理

圖 3 概念性地展示了 PS/2 鍵盤介面組件的架構。首先對來自鍵盤的時脈和資料訊號進行同步和解彈跳處理(解彈跳組件的 VHDL 程式碼及相關文件可在此處取得)。隨後,產生的內部 PS/2 資料訊號在 PS/2 時脈的下降緣以串列方式載入到移位暫存器中。空閒計數器用於確定傳輸何時完成,完成時間定義為 PS/2 時脈保持高邏輯電平的時間超過 55us,即超過最壞情況下 PS/2 時脈週期的一半。組合誤差校驗邏輯用於驗證資料的起始位元、停止位元和同位位元。當 PS/2 連接埠空閒且資料有效時,該元件將輸出接收到的 PS/2 編碼,並將 ps2_code_new 訊號設為高電平,以指示 ps2_code 匯流排上有新的可用編碼。該程式碼將保留在匯流排上,直到接收到新的編代碼。 ps2_code_new 訊號保持高電平直到另一個 PS/2 傳輸開始(當低 PS/2 時脈訊號清除空閒計數器時)。

圖 3. PS/2 鍵盤介面邏輯架構

連接埠描述

表 1 描述了 PS/2 鍵盤介面的連接埠。

表 1. 連接埠描述

設定時序參數

系統時脈速度會影響解彈跳時間和空閒計數器的時序。為了確保元件正常運行,必須正確設定 ENTITY 中宣告的兩個 GENERIC 參數 clk_freqdebounce_counter_sizeclk_freq 參數必須設定為系統時脈頻率(以 Hz 為單位)。所提供程式碼中的預設設定為 50MHz(元件模擬和測試的頻率)。debounce_counter_size 參數必須設定為 2^debounce_counter_size / clk_freq = 5us,具體設定請參閱此處的解彈跳元件文件。對於 50MHz 系統時脈,debounce_counter_size = 8。

範例傳輸

圖 4 顯示了範例傳輸的時序圖。PS/2 時脈訊號變成低電位後,ps2_code_new 標示解除宣告,表示新的 PS/2 鍵盤傳輸正在進行中。傳輸完成後,ps2_code_new 標示宣告,表示新的 PS/2 編碼已收到,並且可在 ps2_code 匯流排上使用。在本例中,收到的 PS/2 編碼為 x“1C”,即「A」鍵的產生編碼。

image

圖 4. PS/2 傳輸範例

總結

此 PS/2 鍵盤介面是一個可編程邏輯元件,用於接收來自 PS/2 鍵盤的傳輸。它同步時脈域、解消輸入訊號彈跳、執行錯誤檢查,並在其平行輸出匯流排上出現新的鍵盤程式碼時通知使用者邏輯。

附錄:掃描碼集 2

Key Make Code Break Code
A 1C F0,1C
B 32 F0,32
C 21 F0,21
D 23 F0,23
E 24 F0,24
F 2B F0,2B
G 34 F0,34
H 33 F0,33
I 43 F0,43
J 3B F0,3B
K 42 F0,42
L 4B F0,4B
M 3A F0,3A
N 31 F0,31
O 44 F0,44
P 4D F0,4D
Q 15 F0,15
R 2D F0,2D
S 1B F0,1B
T 2C F0,2C
U 3C F0,3C
V 2A F0,2A
W 1D F0,1D
X 22 F0,22
Y 35 F0,35
Z 1A F0,1A
0 45 F0,45
1 16 F0,16
2 1E F0,1E
3 26 F0,26
4 25 F0,25
5 2E F0,2E
6 36 F0,36
7 3D F0,3D
8 3E F0,3E
9 46 F0,46
` 0E F0,0E
- 4E F0,4E
= 55 FO,55
|5D F0,5D
BKSP 66 F0,66
SPACE 29 F0,29
TAB 0D F0,0D
CAPS 58 F0,58
L SHFT 12 FO,12
L CTRL 14 FO,14
L GUI E0,1F E0,F0,1F
L ALT 11 F0,11
R SHFT 59 F0,59
R CTRL E0,14 E0,F0,14
R GUI E0,27 E0,F0,27
R ALT E0,11 E0,F0,11
APPS E0,2F E0,F0,2F
ENTER 5A F0,5A
ESC 76 F0,76
F1 5 F0,05
F2 6 F0,06
F3 4 F0,04
F4 0C F0,0C
F5 3 F0,03
F6 0B F0,0B
F7 83 F0,83
F8 0A F0,0A
F9 1 F0,01
F10 9 F0,09
F11 78 F0,78
F12 7 F0,07
PRNT SCRN E0,12,E0,7C E0,F0,7C,E0,F0,12
SCROLL 7E F0,7E
PAUSE E1,14,77,E1,F0,14,F0,77 -NONE-
[ 54 FO,54
INSERT E0,70 E0,F0,70
HOME E0,6C E0,F0,6C
PG UP E0,7D E0,F0,7D
DELETE E0,71 E0,F0,71
END E0,69 E0,F0,69
PG DN E0,7A E0,F0,7A
U ARROW E0,75 E0,F0,75
L ARROW E0,6B E0,F0,6B
D ARROW E0,72 E0,F0,72
R ARROW E0,74 E0,F0,74
NUM 77 F0,77
KP / E0,4A E0,F0,4A
KP * 7C F0,7C
KP - 7B F0,7B
KP + 79 F0,79
KP EN E0,5A E0,F0,5A
KP . 71 F0,71
KP 0 70 F0,70
KP 1 69 F0,69
KP 2 72 F0,72
KP 3 7A F0,7A
KP 4 6B F0,6B
KP 5 73 F0,73
KP 6 74 F0,74
KP 7 6C F0,6C
KP 8 75 F0,75
KP 9 7D F0,7D
] 5B F0,5B
; 4C F0,4C
52 F0,52
, 41 F0,41
. 49 F0,49
/ 4A F0,4A

表 A1. 鍵盤掃描碼集 2

相關主題