PS2接口鍵盤顯示實(shí)驗(yàn)
一、 實(shí)驗(yàn)?zāi)康?/strong>1、學(xué)習(xí)用FPGA設(shè)計(jì)簡單通信協(xié)議的方法。
2、學(xué)習(xí)PS2的工作原理,掃描碼的ASCII碼的轉(zhuǎn)換。
3、掌握VHDL編寫中的一些小技巧。
二、 實(shí)驗(yàn)原理
PS2通信協(xié)議是一種雙向同步串行通迅協(xié)議。通迅的兩端通過CLOCK(時鐘信號端)同步,并通過DATA(數(shù)據(jù)端口)交換數(shù)據(jù)。任何一方如果想要抑制另外一方的通迅時,只需要把CLOCK拉到低電平。
PS2標(biāo)準(zhǔn),規(guī)范每筆數(shù)據(jù)傳輸包含起始位(start bit)、掃描碼(scan code)、奇同位檢查(odd parity)、以及終止位(stop bit)共計(jì)11位,并以雙向串行數(shù)據(jù)傳輸?shù)姆绞,達(dá)到通信的目的。且當(dāng)主機(jī)端(host)或從機(jī)端(slave)并無傳送或接收數(shù)據(jù)時,數(shù)據(jù)傳輸端口及頻率均將升為高電位。圖4-17-1所示為每一筆數(shù)據(jù)傳輸所包含之內(nèi)容如下:
1. 起始位(“0”)
2. 8位數(shù)據(jù)寬度的掃描碼( scan code )。
3. 奇同位檢查,使掃描碼與奇同位加起來1的數(shù)字為奇數(shù)個。
4. 終止位(“1”)
圖4-17-1 PS2 串行傳輸標(biāo)準(zhǔn)
圖4-17-2 PS2 端口腳位定義
PS2控制接口僅使用到兩條傳輸端口,一為頻率端口,另一則為數(shù)據(jù)端口如圖4-17-2所示,且此傳輸埠必為三態(tài)(Tri-State)并具有雙向(bidirectional)特性。PS2 傳輸產(chǎn)品上,常見為鼠標(biāo)與鍵盤,兩者的驅(qū)動原理均相同,僅掃描碼(scan code)不同。因此我們以PS2鍵盤為例進(jìn)行說明。
鍵盤其實(shí)就是一個大型的按鍵矩陣,它們由安裝在電路板上的處理器(叫做“鍵盤編碼器”)來監(jiān)視著。雖然不同的鍵盤可能采用不同的處理器,但是它們完成的任務(wù)都是一樣的,即監(jiān)視哪些按鍵被按下,哪些按鍵被釋放了,并將這些信息傳送到主機(jī)。如果有必要,處理器處理所有的去抖動,并在它的16字節(jié)的緩沖區(qū)里緩沖數(shù)據(jù)。主機(jī)端包含了一個“鍵盤控制器”與鍵盤處理器進(jìn)行通訊,并解碼來自鍵盤處理器的信息,然后高速系統(tǒng)當(dāng)前按鍵對應(yīng)的處理事情。主機(jī)與鍵盤之間的通訊仍舊采用IBM的協(xié)議。
鍵盤處理器花費(fèi)很多時間來掃描或監(jiān)視按鍵矩陣。如果發(fā)現(xiàn)有按鍵按下、釋放或長按,鍵盤就發(fā)送“掃描碼”的信息到主機(jī)。掃描碼有兩種不同的類型:“通碼”和“斷碼”。當(dāng)一個鍵被按下去或長按的時候,鍵盤就發(fā)送通碼;當(dāng)一個鍵被釋放的時候,鍵盤就發(fā)送斷碼。每個鍵盤被分配了唯一的通碼和斷碼,這樣主機(jī)通過查找唯一的掃描碼就可以確定是哪個按鍵被按下或釋放。每個鍵一整套的通斷碼組成了“掃描碼集”,現(xiàn)在所有的鍵盤都采用第二套掃描碼。由于沒有一個簡單的公式可以計(jì)算掃描碼,所以要知道某個特定按鍵的通碼和斷碼,只能采用查表的方法來獲得。需要特別注意的是,按鍵的通碼值表示鍵盤上的一個按鍵,并不表示印刷在按鍵上的那個字符,這就意味著通碼和ASCII碼之間沒有任何關(guān)聯(lián)。
另外,第二套通碼都只有一個字節(jié)寬,但也有少數(shù)“擴(kuò)展按鍵”的通碼是兩字節(jié)或四字節(jié)寬,這類碼的第一個字節(jié)總是0xE0。與通碼一樣,每個按鍵在釋放的時候,鍵盤就會發(fā)送一個斷碼。每個鍵也都有它自己的唯一的斷碼,不過慶幸的是,斷碼與斷碼之間存在著必然的聯(lián)系。多數(shù)第二套斷碼有兩個字長,它們的第一個字節(jié)是0xF0,第二個字節(jié)就是對應(yīng)按鍵的通碼。擴(kuò)展按鍵的斷碼通常有三個字節(jié),前兩個字節(jié)0xE0和0xF0,最后一個字節(jié)是這個按鍵通碼的最后一個字節(jié)。表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 鍵盤掃描碼
三、 實(shí)驗(yàn)內(nèi)容
本實(shí)驗(yàn)的任務(wù)就是利用PS2接口將鍵盤按鍵的通碼在數(shù)碼管上顯示出來。
實(shí)驗(yàn)箱中用到PS2鍵盤接口與FPGA的接口電路如圖4-17-3所示。
圖4-17-3 PS2鍵盤接口電路圖
四、 實(shí)驗(yàn)步驟
1、打開QUARTUSII軟件,新建一個工程。
2、建完工程之后,再新建一個VHDL File,打開VHDL編輯器對話框。
3、按照實(shí)驗(yàn)原理和自己的想法,在VHDL編輯窗口編寫VHDL程序,用戶可參照光盤中提供的示例程序。示例程序共提供2個VHDL源程序。每一個源程序完成一定的功能。其具體的功能如下表4-17-2所示:
文件名稱 | 完成功能 |
keyboard.VHD | PS2鍵盤控制器電路設(shè)計(jì)。 |
DISPLAY.VHD | 七段顯示器譯碼電路設(shè)計(jì)。 |
4、編寫完VHDL程序后,保存起來。方法同實(shí)驗(yàn)一。
5、將自己編寫的VHDL程序進(jìn)行編譯并生成模塊符號文件,并對程序的錯誤進(jìn)行修改,最終所有程序通過編譯并生成模塊符號文件。其具體方法請參照實(shí)驗(yàn)六。
6、新建一個圖形編輯文件,將已生成的模塊符號文件放入其中,并根據(jù)要求邊接起來。完成后,如下圖4-17-4所示。
圖21-4 編輯好的圖形設(shè)計(jì)文件
7、將自己編輯好的的程序進(jìn)行編譯仿真,并對程序的錯誤進(jìn)行修改,最終通過編譯。
8、編譯仿真無誤后,根據(jù)用戶自己的要求進(jìn)行管腳分配。分配完成后,再進(jìn)行全編譯一次,以使管腳分配生效。
9、根據(jù)實(shí)驗(yàn)內(nèi)容用實(shí)驗(yàn)導(dǎo)線將上面管腳分配的FPGA管腳與對應(yīng)的模塊連接起來。
如果是調(diào)用的本書提供的VHDL代碼,則實(shí)驗(yàn)連線如下:
CLK: FPGA時鐘,接數(shù)字時鐘COLCK1并將其設(shè)為24M。
DATA:PS2接口DATA信號,接PS2接口KDA端口。
KYCLOCK:PS2接口CLK信號,接PS2接口KCL端口。
RESET:復(fù)位信號,接核心板復(fù)位按鍵RST。
A、B、C、D、E、F、G:接七段碼顯示區(qū)的A、B、C、D、E、F和G
SA、SB、SC:接七段碼顯示區(qū)的SEL0、SEL1、SEL2。
10、用下載電纜通過JTAG口將對應(yīng)的sof文件加載到FPGA中。觀察實(shí)驗(yàn)結(jié)果是否與自己的編程思想一致。
五、 實(shí)驗(yàn)結(jié)果與現(xiàn)象
以設(shè)計(jì)的參考示例為例,將PS2接口的鍵盤接入PS2接口內(nèi)。當(dāng)設(shè)計(jì)文件加載到目標(biāo)器件后,將數(shù)字信號源模塊的時鐘選擇為24MHZ,按下PS2鍵盤上的鍵,則在實(shí)驗(yàn)平臺的八位數(shù)碼管上的中間兩位將顯示被按鍵的掃描碼。觀察其按下的鍵值所對應(yīng)的掃描碼是否與表4-17-1一一對應(yīng)。按下核心板上的復(fù)位按鍵RST則停止對鍵盤的掃描,數(shù)碼管上的掃描碼不會發(fā)生改變。
六、 實(shí)驗(yàn)報(bào)告
1、繪出仿真波形,并作說明。
2、將實(shí)驗(yàn)原理、設(shè)計(jì)過程、編譯仿真波形和分析結(jié)果、硬件測試結(jié)果記錄下來。