PS2接口鍵盤顯示實驗
一、 實驗目的1、學習用FPGA設計簡單通信協議的方法。
2、學習PS2的工作原理,掃描碼的ASCII碼的轉換。
3、掌握VHDL編寫中的一些小技巧。
二、 實驗原理
PS2通信協議是一種雙向同步串行通迅協議。通迅的兩端通過CLOCK(時鐘信號端)同步,并通過DATA(數據端口)交換數據。任何一方如果想要抑制另外一方的通迅時,只需要把CLOCK拉到低電平。
PS2標準,規范每筆數據傳輸包含起始位(start bit)、掃描碼(scan code)、奇同位檢查(odd parity)、以及終止位(stop bit)共計11位,并以雙向串行數據傳輸的方式,達到通信的目的。且當主機端(host)或從機端(slave)并無傳送或接收數據時,數據傳輸端口及頻率均將升為高電位。圖4-17-1所示為每一筆數據傳輸所包含之內容如下:
1. 起始位(“0”)
2. 8位數據寬度的掃描碼( scan code )。
3. 奇同位檢查,使掃描碼與奇同位加起來1的數字為奇數個。
4. 終止位(“1”)
圖4-17-1 PS2 串行傳輸標準
圖4-17-2 PS2 端口腳位定義
PS2控制接口僅使用到兩條傳輸端口,一為頻率端口,另一則為數據端口如圖4-17-2所示,且此傳輸埠必為三態(Tri-State)并具有雙向(bidirectional)特性。PS2 傳輸產品上,常見為鼠標與鍵盤,兩者的驅動原理均相同,僅掃描碼(scan code)不同。因此我們以PS2鍵盤為例進行說明。
鍵盤其實就是一個大型的按鍵矩陣,它們由安裝在電路板上的處理器(叫做“鍵盤編碼器”)來監視著。雖然不同的鍵盤可能采用不同的處理器,但是它們完成的任務都是一樣的,即監視哪些按鍵被按下,哪些按鍵被釋放了,并將這些信息傳送到主機。如果有必要,處理器處理所有的去抖動,并在它的16字節的緩沖區里緩沖數據。主機端包含了一個“鍵盤控制器”與鍵盤處理器進行通訊,并解碼來自鍵盤處理器的信息,然后高速系統當前按鍵對應的處理事情。主機與鍵盤之間的通訊仍舊采用IBM的協議。
鍵盤處理器花費很多時間來掃描或監視按鍵矩陣。如果發現有按鍵按下、釋放或長按,鍵盤就發送“掃描碼”的信息到主機。掃描碼有兩種不同的類型:“通碼”和“斷碼”。當一個鍵被按下去或長按的時候,鍵盤就發送通碼;當一個鍵被釋放的時候,鍵盤就發送斷碼。每個鍵盤被分配了唯一的通碼和斷碼,這樣主機通過查找唯一的掃描碼就可以確定是哪個按鍵被按下或釋放。每個鍵一整套的通斷碼組成了“掃描碼集”,現在所有的鍵盤都采用第二套掃描碼。由于沒有一個簡單的公式可以計算掃描碼,所以要知道某個特定按鍵的通碼和斷碼,只能采用查表的方法來獲得。需要特別注意的是,按鍵的通碼值表示鍵盤上的一個按鍵,并不表示印刷在按鍵上的那個字符,這就意味著通碼和ASCII碼之間沒有任何關聯。
另外,第二套通碼都只有一個字節寬,但也有少數“擴展按鍵”的通碼是兩字節或四字節寬,這類碼的第一個字節總是0xE0。與通碼一樣,每個按鍵在釋放的時候,鍵盤就會發送一個斷碼。每個鍵也都有它自己的唯一的斷碼,不過慶幸的是,斷碼與斷碼之間存在著必然的聯系。多數第二套斷碼有兩個字長,它們的第一個字節是0xF0,第二個字節就是對應按鍵的通碼。擴展按鍵的斷碼通常有三個字節,前兩個字節0xE0和0xF0,最后一個字節是這個按鍵通碼的最后一個字節。表4-17-1列出了鍵盤按鍵的通碼和斷碼。
鍵值 | 通碼 | 斷碼 | 鍵值 | 通碼 | 斷碼 | 鍵值 | 通碼 | 斷碼 |
A | 1C | F0,1C | 9 | 46 | F0,46 | [ | 54 | F0,54 |
B | 32 | F0,32 | ` | 0E | F0,0E | INSERT | 67 | F0,67 |
C | 21 | F0,21 | - | 4E | F0,4E | HOME | 6E | F0,6E |
D | 23 | F0,23 | = | 55 | F0,55 | PG UP | 6F | F0,6F |
E | 24 | F0,24 | \ | 5C | F0,5C | DELETE | 64 | F0,64 |
F | 2B | F0,2B | BKSP | 66 | F0,66 | END | 65 | F0,65 |
G | 34 | F0,34 | SPACE | 29 | F0,29 | PG DN | 6D | F0,6D |
H | 33 | F0,33 | TAB | 0D | F0,0D | U ARROW | 63 | F0,63 |
I | 43 | F0,48 | CAPS | 14 | F0,14 | L ARROW | 61 | F0,61 |
J | 3B | F0,3B | L SHFT | 12 | F0,12 | D ARROW | 60 | F0,60 |
K | 42 | F0,42 | L CTRL | 11 | F0,11 | R ARROW | 6A | F0,6A |
L | 4B | F0,4B | L WIN | 8B | F0,8B | NUM | 76 | F0,76 |
M | 3A | F0,3A | L ALT | 19 | F0,19 | KP / | 4A | F0,4A |
N | 31 | F0,31 | R SHFT | 59 | F0,59 | KP * | 7E | F0,7E |
O | 44 | F0,44 | R CTRL | 58 | F0,58 | KP - | 4E | F0,4E |
P | 4D | F0,4D | R WIN | 8C | F0,8C | KP + | 7C | F0,7C |
Q | 15 | F0,15 | R ALT | 39 | F0,39 | KP EN | 79 | F0,79 |
R | 2D | F0,2D | APPS | 8D | F0,8D | KP . | 71 | F0,71 |
S | 1B | F0,1B | ENTER | 5A | F0,5A | KP 0 | 70 | F0,70 |
T | 2C | F0,2C | ESC | 08 | F0,08 | KP 1 | 69 | F0,69 |
U | 3C | F0,3C | F1 | 07 | F0,07 | KP 2 | 72 | F0,72 |
V | 2A | F0,2A | F2 | 0F | F0,0F | KP 3 | 7A | F0,7A |
W | 1D | F0,1D | F3 | 17 | F0,17 | KP 4 | 6B | F0,6B |
X | 22 | F0,22 | F4 | 1F | F0,1F | KP 5 | 73 | F0,73 |
Y | 35 | F0,35 | F5 | 27 | F0,27 | KP 6 | 74 | F0,74 |
Z | 1A | F0,1A | F6 | 2F | F0,2F | KP 7 | 6C | F0,6C |
0 | 45 | F0,45 | F7 | 37 | F0,37 | KP 8 | 75 | F0,75 |
1 | 16 | F0,16 | F8 | 3F | F0,3F | KP 9 | 7D | F0,7D |
2 | 1E | F0,1E | F9 | 47 | F0,47 | ] | 5B | F0,5B |
3 | 26 | F0,26 | F10 | 4F | F0,4F | ; | 4C | F0,4C |
4 | 25 | F0,25 | F11 | 56 | F0,56 | ' | 52 | F0,52 |
5 | 2E | F0,2E | F12 | 5E | F0,5E | , | 41 | F0,41 |
6 | 36 | F0,36 |
PRNT SCRN |
57 | F0,57 | . | 49 | F0,49 |
7 | 3D | F0,3D | SCROLL | 5F | F0,5F | / | 4A | F0,4A |
8 | 3E | F0,3E | PAUSE | 62 | F0,62 |
表4-17-1PS2 鍵盤掃描碼
三、 實驗內容
本實驗的任務就是利用PS2接口將鍵盤按鍵的通碼在數碼管上顯示出來。
實驗箱中用到PS2鍵盤接口與FPGA的接口電路如圖4-17-3所示。
圖4-17-3 PS2鍵盤接口電路圖
四、 實驗步驟
1、打開QUARTUSII軟件,新建一個工程。
2、建完工程之后,再新建一個VHDL File,打開VHDL編輯器對話框。
3、按照實驗原理和自己的想法,在VHDL編輯窗口編寫VHDL程序,用戶可參照光盤中提供的示例程序。示例程序共提供2個VHDL源程序。每一個源程序完成一定的功能。其具體的功能如下表4-17-2所示:
文件名稱 | 完成功能 |
keyboard.VHD | PS2鍵盤控制器電路設計。 |
DISPLAY.VHD | 七段顯示器譯碼電路設計。 |
4、編寫完VHDL程序后,保存起來。方法同實驗一。
5、將自己編寫的VHDL程序進行編譯并生成模塊符號文件,并對程序的錯誤進行修改,最終所有程序通過編譯并生成模塊符號文件。其具體方法請參照實驗六。
6、新建一個圖形編輯文件,將已生成的模塊符號文件放入其中,并根據要求邊接起來。完成后,如下圖4-17-4所示。
圖21-4 編輯好的圖形設計文件
7、將自己編輯好的的程序進行編譯仿真,并對程序的錯誤進行修改,最終通過編譯。
8、編譯仿真無誤后,根據用戶自己的要求進行管腳分配。分配完成后,再進行全編譯一次,以使管腳分配生效。
9、根據實驗內容用實驗導線將上面管腳分配的FPGA管腳與對應的模塊連接起來。
如果是調用的本書提供的VHDL代碼,則實驗連線如下:
CLK: FPGA時鐘,接數字時鐘COLCK1并將其設為24M。
DATA:PS2接口DATA信號,接PS2接口KDA端口。
KYCLOCK:PS2接口CLK信號,接PS2接口KCL端口。
RESET:復位信號,接核心板復位按鍵RST。
A、B、C、D、E、F、G:接七段碼顯示區的A、B、C、D、E、F和G
SA、SB、SC:接七段碼顯示區的SEL0、SEL1、SEL2。
10、用下載電纜通過JTAG口將對應的sof文件加載到FPGA中。觀察實驗結果是否與自己的編程思想一致。
五、 實驗結果與現象
以設計的參考示例為例,將PS2接口的鍵盤接入PS2接口內。當設計文件加載到目標器件后,將數字信號源模塊的時鐘選擇為24MHZ,按下PS2鍵盤上的鍵,則在實驗平臺的八位數碼管上的中間兩位將顯示被按鍵的掃描碼。觀察其按下的鍵值所對應的掃描碼是否與表4-17-1一一對應。按下核心板上的復位按鍵RST則停止對鍵盤的掃描,數碼管上的掃描碼不會發生改變。
六、 實驗報告
1、繪出仿真波形,并作說明。
2、將實驗原理、設計過程、編譯仿真波形和分析結果、硬件測試結果記錄下來。