VHDL課程設(shè)計PS2鍵盤_第1頁
VHDL課程設(shè)計PS2鍵盤_第2頁
VHDL課程設(shè)計PS2鍵盤_第3頁
VHDL課程設(shè)計PS2鍵盤_第4頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精品文檔目錄一、 課程設(shè)計的目的與任務(wù)2二、 課程設(shè)計題目21、 指定題目:22、 自選題目:2三、 課程設(shè)計的內(nèi)容與要求21、設(shè)計內(nèi)容22、設(shè)計要求3四、 實驗儀器設(shè)備3五、 設(shè)計方案31、 PS2 解碼32、 設(shè)計思路53、 模塊設(shè)計64、 各模塊分析7(1)PS2時鐘檢測模塊7(2)PS2解碼模塊8(3)PS2組合模塊10(4)控制 LED 模塊12(5)PS2總的組合模塊14六、 綜合與仿真151、 綜合152、 仿真16(1) 電平檢測模塊仿真16(2) LED 燈控制模塊仿真17(3) PS2_module總模塊仿真17七、 硬件下載20八、 心得體會22九、 參考文獻(xiàn)22.精品文

2、檔一、課程設(shè)計的目的與任務(wù)( 1)熟練掌握 EDA 工具軟件 QuartusII 的使用;( 2)熟練用 VHDL 硬件描述語言描述數(shù)字電路;( 3)學(xué)會使用 VHDL 進(jìn)行大規(guī)模集成電路設(shè)計;( 4)學(xué)會用 CPLDFPGA 使用系統(tǒng)硬件驗證電路設(shè)計的正確性;( 5)初步掌握 EDA 技術(shù)并具備一定的可編程邏輯芯片的開發(fā)能力;二、課程設(shè)計題目1、指定題目:0 :多功能計數(shù)器;1 :數(shù)字秒表;2 :簡易數(shù)字鐘;3 :簡易頻率計;4 :彩燈控制器;5 :交通燈控制器;6 :四路智力競賽搶答器;7 :簡易微波爐控制器;8 :表決器; 9 :數(shù)字密碼鎖;我的的學(xué)號尾數(shù)是2,所以我要做的題目是簡易數(shù)字

3、鐘。由于我之前已經(jīng)學(xué)過 Verilog HDL 和 VHDL ,所以簡易數(shù)字鐘相對于我比較簡單,我完成了簡易數(shù)字鐘并驗收后,再選擇了另一個自選題目來完成。簡易數(shù)字鐘: 設(shè)計一個以 “秒”為基準(zhǔn)信號的簡易數(shù)字鐘, 顯示時、分、秒,同時可實現(xiàn)整點報時和清零(我已經(jīng)完成,而且已經(jīng)驗收了) 。2、自選題目:在完成了數(shù)字鐘的設(shè)計后,我選擇了另一個設(shè)計的題目,那就是PS2 鍵盤掃描。所以這次課程設(shè)計我的報告主要詳細(xì)寫的是PS2 鍵盤掃描的程序,而不是簡易數(shù)字鐘。PS 鍵盤掃描:設(shè)計一個PS 鍵盤掃描程序,能接受鍵盤的輸入時鐘和數(shù)據(jù),區(qū)別哪一個鍵輸入,同時解譯通碼和斷碼,使用LED 燈來顯示收到的數(shù)據(jù)。三、

4、課程設(shè)計的內(nèi)容與要求1、設(shè)計內(nèi)容( 1)系統(tǒng)功能的分析;( 2)實現(xiàn)系統(tǒng)功能的實際方案;( 3)編寫各功能模塊的 VHDL 語言程序;.精品文檔( 4)對各功能模塊進(jìn)行編譯、綜合、仿真、分析;( 5)頂層文件設(shè)計( 6)對整個系統(tǒng)進(jìn)行編譯、綜合、仿真、分析;( 7)在 CPLDFPGA 實驗開發(fā)系統(tǒng)試驗箱上進(jìn)行硬件驗證;( 8)寫實驗報告;2、設(shè)計要求( 1)按所布置的題目要求,每一位學(xué)生獨立完成全過程;( 2)分模塊層次化設(shè)計;( 3)各功能模塊的底層文件必須用 VHDL 語言設(shè)計,頂層文件可用 VHDL 語言設(shè)計,也可以用原理圖設(shè)計。四、實驗儀器設(shè)備( 1) PC 機(jī);( 2) Quart

5、usII 軟件;( 3)黑金 FPGA 實驗開發(fā)系統(tǒng),芯片為Cyclone II 的 EP2C5Q208C8;五、設(shè)計方案1、PS2解碼圖 1 為 PS2 的接口圖。我使用的的右邊的 PS2接口,即 1 腳為數(shù)據(jù)腳, 5 腳為時鐘腳,同時我編寫的 VHDL 代碼只對 1 腳和 5 腳操作。圖 2 PS2 協(xié)議時序圖.精品文檔圖 2 為 PS2 協(xié)議時序圖。由圖可以解讀出, PS2 協(xié)議對數(shù)據(jù)的讀取時“ CLK的下降沿”有效,而數(shù)據(jù)的放置時在“CLK 的上升沿”。 PS2 頻率比較慢,大概為 10KHz 。第 N 位屬性0開始位18數(shù)據(jù)位9校驗位10結(jié)束位表 1 PS2 數(shù)據(jù)說明PS2 的一幀數(shù)

6、據(jù)時 11 位。對 PS2 進(jìn)行解碼,我們需要得到的是18 位的數(shù)據(jù)位。其他的位,可以使用取巧的方法編寫。鍵盤的編碼有“通碼( Make)”和“斷碼( Break)”之分。通碼相當(dāng)于某個按鍵按下了,斷碼相當(dāng)于某個按鍵釋放了。假設(shè),我們按下了“Z”鍵不放,大約每秒有 10 個 X “1A ”的通碼( 10KHz ),而當(dāng)我們釋放“ Z”鍵,就會輸出斷碼 X “F0”和 X“ 1A”。同時,鍵盤編碼一次只能有一個輸出,即多個按鍵同時按下時,只有一個有效。下表為第二套 PC 鍵盤掃描碼。鍵名通碼斷碼-鍵 名通 碼斷 碼 -鍵名通碼斷碼A1CF0,1C946F0,4654FO,54B32F0,320E

7、F0,0EINSERTE0,70E0,F0,70C21F0,21-4EF0,4EHOMEE0,6CE0,F0,6CD23F0,23=55FO,55PG UPE0,7DE0,F0,7DE24F0,245DF0,5DDELETEE0,71E0,F0,71F2BF0,2BBKSP66F0,66ENDE0,69E0,F0,69G34F0,34SPACE29F0,29PG DNE0,7AE0,F0,7AH33F0,33TAB0DF0,0DU ARROWE0,75E0,F0,75I43F0,43CAPS58F0,58L ARROWE0,6BE0,F0,6BJ3BF0,3BL SHFT12FO,12D AR

8、ROWE0,72E0,F0,72K42F0,42L CTRL14FO,14R ARROWE0,74E0,F0,74L4BF0,4BL GUIE0,1FE0,F0,1FNUM77F0,77M3AF0,3AL ALT11F0,11KP /E0,4AE0,F0,4AN31F0,31R SHFT59F0,59KP *7CF0,7C.精品文檔O44F0,44R CTRLE0,14E0,F0,14KP -7BF0,7BP4DF0,4DR GUIE0,27E0,F0,27KP +79F0,79Q15F0,15R ALTE0,11E0,F0,11KP ENE0,5AE0,F0,5AR2DF0,2DAPPSE0

9、,2FE0,F0,2FKP .71F0,71S1BF0,1BENTER5AF0,5AKP 070F0,70T2CF0,2CESC76F0,76KP 169F0,69U3CF0,3CF105F0,05KP 272F0,72V2AF0,2AF206F0,06KP 37AF0,7AW1DF0,1DF304F0,04KP 46BF0,6BX22F0,22F40CF0,0CKP 573F0,73Y35F0,35F503F0,03KP 674F0,74Z1AF0,1AF60BF0,0BKP 76CF0,6C045F0,45F783F0,83KP 875F0,75116F0,16F80AF0,0AKP 97

10、DF0,7D21EF0,1EF901F0,015BF0,5B326F0,26F1009F0,09;4CF0,4C425F0,25F1178F0,78'52F0,5252EF0,2EF1207F0,07,41F0,41PRNTE0,12,E0,F0,636F0,367C,E0,.49F0,49SCRNE0,7CF0,1273DF0,3DSCROLL7EF0,7E/4AF0,4AE1,14,77,83EF0,3EPAUSEE1,F0,14,-NONE-F0,77表 2PC 鍵盤第二套掃描碼2、設(shè)計思路( 1) PS2時鐘的檢測;( 2) PS2數(shù)據(jù)的接受并提取需要的 8 位數(shù)據(jù);( 3)對

11、 PS2 提取的 8 位數(shù)據(jù)進(jìn)行解碼,確定按鍵;( 4)通過 LED 燈顯示按鍵的解碼的結(jié)果;( 5)設(shè)置多個按鍵,多種 LED 顯示方式;對于 PS2 鍵盤掃描程序,我的設(shè)計思路是一個模塊一個功能,這樣能清晰分辨模塊,同時易于修改代碼。代碼條理清晰,便于解讀。而對于多個模塊則使用層次化的形式來編寫, 頂層文件并不包含功能的設(shè)定, 只包含各個子功能模塊。.精品文檔3、模塊設(shè)計PS2 鍵盤掃描分為:電平檢測,PS2 解碼, PS2 組合, LED 控制和總 PS 組合六個模塊。下面為各個模塊的簡易模塊圖。( 1) PS2時鐘檢測模塊:PS2_CLK_Pin_In電平檢測模塊H_L_SigL_H_

12、SigPS2_detect_module圖 3電平檢測模塊圖( 2) PS2解碼模塊 :PS2_Data_Pin_InPS2_DataPS2 解碼模塊H_L_SigPS2_Done_SigPS2_encode_module圖 4PS2 解碼模塊圖( 3) PS2組合模塊:PS2_CLK_Pin_In電平檢測模塊H_L_SigPS2_DataPS2_detect_modulePS2 解碼模塊PS2_Data_Pin_InPS2_encode_modulePS2_Done_Sig圖 5PS2 組合模塊圖( 4)控制 LED 模塊:PS2_Data電平檢測模塊Data_OutPS2_Done_Sig

13、PS2_control_module圖 6LED 控制模塊圖( 5) PS2總的組合模塊:PS2_CLK_Pin_InPS2_Dat電平檢測模塊電平檢測模塊Data_OutPS2_Data_Pin_InPS2_Done_SigPS2_control_modulePS2_control_module圖 7 PS2 模塊圖.精品文檔4、各模塊分析( 1) PS2 時鐘檢測模塊PS2 電平檢測模塊主要的作用是檢測PS2 接口鍵盤的時鐘信號,因為PS2的協(xié)議規(guī)定數(shù)據(jù)是在時鐘的下降沿讀取的。所以電平檢測模塊要檢測PS2 時鐘的下降沿,有下降沿來臨時,要做相應(yīng)的數(shù)據(jù)讀取動作。下面是代碼的分析。LIBRAR

14、Y IEEE;- 庫-ENTITY PS2_detect_module IS- 實體聲明PORT(CLK,RSTn: IN STD_LOGIC;PS2_CLK_Pin_In: IN STD_LOGIC;H_L_Sig: OUT STD_LOGIC;- 電平由高變低,輸出一個信號L_H_Sig: OUT STD_LOGIC- 電平由低變高,輸出一個信號);END ENTITY PS2_detect_module;-ARCHITECTURE PS2_detect OF PS2_detect_module IS- 結(jié)構(gòu)體聲明SIGNAL H_L_F1 : STD_LOGIC :='1'

15、;- 聲明 4 個信號,用于電平輸入的變化SIGNAL H_L_F2 : STD_LOGIC :='1'-4 個信號都賦了初值SIGNAL L_H_F1 : STD_LOGIC :='0'SIGNAL L_H_F2 : STD_LOGIC :='0'BEGINPROCESS(CLK,RSTn)BEGINIF (CLK'event AND CLK='1') THEN- 同步進(jìn)行IF (RSTn='0') THEN- 同步復(fù)位動作H_L_F1 <= '1'H_L_F2 <= '

16、;1'L_H_F1 <= '0'L_H_F2 <= '0'.精品文檔ELSEH_L_F1 <= PS2_CLK_Pin_In;H_L_F2 <= H_L_F1;L_H_F1 <= PS2_CLK_Pin_In;L_H_F2 <= L_H_F1;END IF;END IF;END PROCESS;H_L_Sig <= H_L_F2 AND (NOT H_L_F1);- 輸出信號L_H_Sig <= L_H_F1 AND (NOT L_H_F2);END ARCHITECTURE PS2_detect;- 結(jié)構(gòu)

17、體結(jié)束在結(jié)構(gòu)體中聲明了4 個信號,用于電平的檢測F2 信號是接著F1 信號的,如果 F1 信號變化了, F2 信號還不會立即變化, F2 還會保持 F1 的前一個狀態(tài),以兩者的邏輯關(guān)系,可以判斷輸入的是上升沿還是下降沿。結(jié)果如表格3。時間H_L_F1H_L_F2H_L_Sig <= H_L_F2 AND (NOT H_L_F1)Initial110T1011T2000時間L_H_F1L_H_F2L_H_Sig <= L_H_F1 AND (NOT L_H_F2);Initial000T1101T2110表 3電平檢測變化表( 2) PS2 解碼模塊LIBRARY IEEE;- 庫-

18、ENTITY PS2_decode_module IS- 實體聲明PORT(CLK,RSTn: IN STD_LOGIC;.精品文檔H_L_Sig: IN STD_LOGIC;PS2_Data_Pin_In: IN STD_LOGIC;PS2_Done_Sig: OUT STD_LOGIC;PS2_Data: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY PS2_decode_module;-ARCHITECTURE PS2_decode OF PS2_decode_module ISSIGNAL Done : STD_LOGIC :='0&#

19、39;- 聲明一個完成信號SIGNAL i: STD_LOGIC_VECTOR(4 DOWNTO 0) :="00001"- 聲明步驟iSIGNAL Data : STD_LOGIC_VECTOR(7 DOWNTO 0) :=X"32"BEGINPROCESS(CLK,RSTn,i)BEGINIF (CLK'event AND CLK='1') THENIF (RSTn='0') THENi <= "00001"Done <= '0'Data <= X"

20、;00"ELSECASE i ISWHEN "00000" => i <= "00001"WHEN "00001" => IF (H_L_Sig='1') THEN i <= "00010"Data(0) <= PS2_Data_Pin_In;END IF;WHEN "00010" => IF (H_L_Sig='1') THEN i <= "00011"Data(1) <= PS2_D

21、ata_Pin_In;END IF;WHEN "00011" => IF (H_L_Sig='1') THEN i <= "00100"Data(2) <= PS2_Data_Pin_In;END IF;WHEN "00100" => IF (H_L_Sig='1') THEN i <= "00101"Data(3) <= PS2_Data_Pin_In;END IF;WHEN "00101" => IF (H_L_Sig

22、='1') THEN i <= "00110"Data(4) <= PS2_Data_Pin_In;END IF;WHEN "00110" => IF (H_L_Sig='1') THEN i <= "00111"Data(5) <= PS2_Data_Pin_In;END IF;WHEN "00111" => IF (H_L_Sig='1') THEN i <= "01000"Data(6) <=

23、PS2_Data_Pin_In;END IF;WHEN "01000" => IF (H_L_Sig='1') THEN i <= "01001"Data(7) <= PS2_Data_Pin_In;END IF;WHEN "01001" => IF (H_L_Sig='1') THEN i <= "01010"END IF;WHEN "01010" => IF (H_L_Sig='1') THEN i <

24、= "01011"END IF;.精品文檔WHEN "01011" => IF (Data=X"F0")THEN i <= "01100"ELSE i <= "10110"END IF;WHEN "01100" => IF (H_L_Sig='1') THEN i <= "01101"END IF;WHEN "01101" => IF (H_L_Sig='1') THE

25、N i <= "01110"END IF;WHEN "01110" => IF (H_L_Sig='1') THEN i <= "01111"END IF;WHEN "01111" => IF (H_L_Sig='1') THEN i <= "10000"END IF;WHEN "10000" => IF (H_L_Sig='1') THEN i <= "10001"

26、END IF;WHEN "10001" => IF (H_L_Sig='1') THEN i <= "10010"END IF;WHEN "10010" => IF (H_L_Sig='1') THEN i <= "10011"END IF;WHEN "10011" => IF (H_L_Sig='1') THEN i <= "10100"END IF;WHEN "10100&quo

27、t; => IF (H_L_Sig='1') THEN i <= "10101"END IF;WHEN "10101" => IF (H_L_Sig='1') THEN i <= "10110"END IF;WHEN "10110" => IF (H_L_Sig='1') THEN i <= "10111"Done <= '1'END IF;WHEN "10111" =&

28、gt; IF (H_L_Sig='1') THEN i <= "00001"Done <= '0'END IF;WHEN OTHERS=> i <= "00001"END CASE;END IF;END IF;END PROCESS;PS2_Data <= Data;PS2_Done_Sig <= Done;END ARCHITECTURE PS2_decode;這個模塊我有點偷懶, 只對鍵盤輸入的8 位有效數(shù)據(jù)進(jìn)行了提取, 其他位基本是忽略了,第一位開始位忽略了,然后是讀取8 位有效數(shù)

29、據(jù),第9 步和第 10步跳過了檢測位和結(jié)束位,然后是判斷。如果是0XF0,則證明是斷碼,斷碼的話后面的直接跳過,如果不是0XF0,則證明是有效的數(shù)據(jù),立即跳到步驟22,向頂層的模塊回饋一個完成信號,并將有效數(shù)據(jù)輸出。( 3) PS2 組合模塊LIBRARY IEEE;.精品文檔-ENTITY PS2 ISPORT(CLK,RSTn: IN STD_LOGIC;PS2_Data_Pin_In :IN STD_LOGIC;PS2_CLK_Pin_In: IN STD_LOGIC;PS2_Done_Sig: BUFFER STD_LOGIC;PS2_Data: OUT STD_LOGIC_VECTO

30、R(7 DOWNTO 0);END ENTITY PS2;-ARCHITECTURE PS2_behave OF PS2 ISCOMPONENT PS2_detect_modulePORT(CLK,RSTn: IN STD_LOGIC;PS2_CLK_Pin_In : IN STD_LOGIC;H_L_Sig: OUT STD_LOGIC;L_H_Sig: OUT STD_LOGIC);END COMPONENT;COMPONENT PS2_decode_modulePORT(CLK,RSTn: IN STD_LOGIC;H_L_Sig: IN STD_LOGIC;PS2_Data_Pin_I

31、n: IN STD_LOGIC;PS2_Done_Sig: OUT STD_LOGIC;PS2_Data: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;.精品文檔- COMPONENT PS2_code_module- PORT(-CLK,RSTn: IN STD_LOGIC;-L_H_Sig: IN STD_LOGIC;-PS2_Done_Sig: IN STD_LOGIC;-PS2_Data_Pin_Out : OUT STD_LOGIC-);- END COMPONENT; SIGNAL H_L : STD_LOGIC;- SIGNAL

32、L_H : STD_LOGIC;- SIGNAL PS2_Data_Pin_Out : STD_LOGIC; BEGINU1:PS2_detect_module PORT MAP(CLK,RSTn,PS2_CLK_Pin_In,H_L,L_H);U2:PS2_decode_module PORT MAP(CLK,RSTn,H_L,PS2_Data_Pin_In,PS2_Done_Sig,PS2_Data);- U2:PS2_decode_module PORT MAP(CLK,RSTn,H_L,PS2_Data_Pin_Out,PS2_Done_Sig,PS2_Data);-U3:PS2_co

33、de_modulePORT MAP(CLK,RSTn,L_H,PS2_Done_Sig,PS2_Data_Pin_Out);END ARCHITECTURE PS2_behave;這是一個組合例化的模塊,是對PS2 時鐘電平檢測和PS2 解碼的一個簡單模塊。這一個模塊初步實現(xiàn)了PS2 的解碼功能。上面的是代碼的方法實現(xiàn)例化功能,同時也可以使用原理圖的方式來實現(xiàn)例化,下面為原理圖例化的圖。圖 8PS2 例化原理圖( 4) 控制 LED 模塊LIBRARY IEEE;-.精品文檔ENTITY PS2_contorl_module ISPORT(CLK,RSTn: IN STD_LOGIC;PS2_

34、Done_Sig: IN STD_LOGIC;PS2_Data: IN STD_LOGIC_VECTOR(7 DOWNTO 0);Data_Out: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY PS2_contorl_module;-ARCHITECTURE PS2_contorl OF PS2_contorl_module ISSIGNAL Data : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,RSTn)BEGINIF (CLK'event AND CLK='1') THE

35、NIF (RSTn='0') THENData <= "0001"ELSIF(PS2_Done_Sig='1') THENCASE PS2_Data ISWHEN X"22" => Data <= (Data(2 DOWNTO 0)&Data(3);WHEN X"1A" => Data <= (Data(0)&Data(3 DOWNTO 1);WHEN X"14" => Data <= (Data(0)&Data(1)

36、&Data(2)&Data(3);WHEN X"21" => Data <= "1111"WHEN X"2A" => Data <= "0000"WHEN X"5A" => Data <= "0001"WHEN X"32" => Data <= "0001"WHEN X"31" => Data <= "0011"WHEN

37、X"3A" => Data <= "0111"WHEN OTHERS => Data <= Data;END CASE;END IF;END IF;END PROCESS;.精品文檔Data_Out <= Data;END ARCHITECTURE PS2_contorl;LED 控制模塊主要的作用是用于顯示結(jié)果。在PS2 鍵盤掃描后,得到的8位有效結(jié)果, 使用 4 盞 LED 燈作為檢查結(jié)果的輸出, 使用不用的 LED 閃亮方式來表示不同的按鍵按下了。本程序只做了11 個按鍵,分別是“ Z”,“ X ”,“C”,“ V”,

38、“B” ,“N” ,“M ” ,“Entet”和“ Ctrl ”?!?Z”按下后, LED 向左移一個單位,“X”是向右移一個單位, “ Ctrl ”是 LED 燈互換,“ B”是點亮一盞 LED, “ N”是點亮兩盞 LED, “M ”是點亮三盞 LED, “ Entet”是復(fù)原 LED 燈的情況。( 5) PS2 總的組合模塊LIBRARY IEEE;-ENTITY PS2_module ISPORT(CLK,RSTn: IN STD_LOGIC;PS2_Data_Pin_In: IN STD_LOGIC;PS2_CLK_Pin_In: IN STD_LOGIC;Data_Out: OUT

39、 STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY PS2_module;-ARCHITECTURE PS2 OF PS2_module ISCOMPONENT PS2PORT(CLK,RSTn: IN STD_LOGIC;PS2_Data_Pin_In: IN STD_LOGIC;PS2_CLK_Pin_In: IN STD_LOGIC;PS2_Done_Sig: OUT STD_LOGIC;PS2_Data: OUT STD_LOGIC_VECTOR(7 DOWNTO 0).精品文檔);END COMPONENT;COMPONENT PS2_contorl_m

40、odulePORT(CLK,RSTn: IN STD_LOGIC;PS2_Done_Sig: IN STD_LOGIC;PS2_Data: IN STD_LOGIC_VECTOR(7 DOWNTO 0);Data_Out: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;SIGNAL Done_Sig: STD_LOGIC;SIGNAL Data: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINU1:PS2PORT MAP(CLK,RSTn,PS2_Data_Pin_In,PS2_CLK_Pin_In,Done_Sig,Dat

41、a);-U1:PS2PORT MAP(CLK,RSTn,PS2_CLK_Pin_In,Done_Sig,Data);U2:PS2_contorl_modulePORT MAP(CLK,RSTn,Done_Sig,Data,Data_Out);END ARCHITECTURE PS2;這是一個組合例化的模塊,是對PS2 功能模塊和 LED 控制的一個簡單組合的模塊。這一個模塊是PS2 鍵盤掃描的最頂層文件,只做例化作用,不包含其他功能代碼。上面的是代碼的方法實現(xiàn)例化功能,同時也可以使用原理圖的方式來實現(xiàn)例化,下面為原理圖例化的圖。圖 9 PS2_module 總例化原理圖六、綜合與仿真1、綜合.

42、精品文檔對編寫好的源程序進(jìn)行綜合,同時生成RTL 電路圖, RTL 電路圖如下。圖 10PS2_module 模塊 RTL 圖2、仿真在本次設(shè)計中,仿真工作只對電平檢測模塊, LED 燈控制模塊和 PS2 _module總模塊進(jìn)行了仿真。對于前兩個模塊,采用的仿真方法是使用 Quartus II 自帶的波形仿真軟件進(jìn)行仿真,而對于 PS2_module總模塊的仿真則使用了編寫代碼的方式進(jìn)行仿真。因為 PS2_module總模塊對鍵盤按鍵的波形設(shè)置很麻煩,而且仿真效果不好,所以直接使用代碼的方式產(chǎn)生一個鍵盤按鍵, 同時觀察波形來檢測。( 1)電平檢測模塊仿真電平檢測模塊原理圖如下:圖 11電平檢

43、測原理圖仿真波形如下:圖 12電平檢測模塊仿真波形系統(tǒng)時鐘給了 10ns,PS2_CLK_Pin_In 給了 100ns,RSTn 復(fù)位一直為高電平,可以觀察波形得到,在 PS2_CLK_Pin_In 時鐘的上升沿發(fā)生后, L_H_Sig 發(fā)出了一個高脈沖的信號,大概相隔兩個系統(tǒng)時鐘;在 PS2_CLK_Pin_In 時鐘的下降沿發(fā)生后, H_L_Sig 也發(fā)出了一個高脈沖,也是相隔兩系統(tǒng)時鐘,而高脈沖大概是兩個系統(tǒng)時鐘左右。.精品文檔( 2) LED 燈控制模塊仿真LED 燈控制模塊原理圖如下:圖 13LED 燈控制模塊原理圖仿真波形如下:圖 14LED 燈控制模塊仿真波形系統(tǒng)時鐘給了 10

44、ns,RSTn 復(fù)位在一開始的時候給了 0,進(jìn)行了一次復(fù)位, PS2 _Done_Sig完成信號則是 100ns 一次, PS2_Data給的是 X “22”(即 X 被按下 )。復(fù)位后 Data_Out輸出的是“0001”,第一盞 LED 燈點亮,然后在 PS2_Done_Sig信號后, Data_Out 輸出變化了,變?yōu)榱恕?0010”,LED 第二盞給點亮了, LED 燈移位了。因為一直是 X 被按下,所以信號不斷移位, LED 分別為 1, 2,4, 8。在最后那里,由于 PS2_Data給的是 X“20”,并沒有在控制那設(shè)置這個按鍵,所以 LED 沒反應(yīng),一直保持在 2(即第二盞燈點

45、亮) 。( 3) PS2_module總模塊仿真由于 PS2 總仿真的時候需要鍵盤的通碼輸入,但使用波形的改變來作為通碼輸入的方式太麻煩了, 而且很容易出錯, 得不到想要的波形。 所以為了克服這個問題,我使用了另外的一種方法來仿真, 直接寫鍵盤編碼來給整個模塊, 然后開輸出波形就可以觀察。.精品文檔PS2_module總模塊仿真點簡單方框圖如下:鍵盤編碼模塊PS2_code_modulePS2_CLK_Pin_InPS2_DataPS2_Done_SigL_H_Sig電平檢測模塊H_L_SigPS2_detect_modulePS2 解碼模塊PS2_Data_Pin_InPS2_encode_

46、module圖 15 PS2_module 總模塊方框圖PS2_code_module鍵盤編碼模塊代碼如下:LIBRARY IEEE;-ENTITY PS2_code_module ISPORT(CLK,RSTn: IN STD_LOGIC;L_H_Sig: IN STD_LOGIC;PS2_Done_Sig: IN STD_LOGIC;PS2_Data_Pin_Out : OUT STD_LOGIC);END ENTITY PS2_code_module;-ARCHITECTURE PS2_code OF PS2_code_module ISCONSTANT n_0:STD_LOGIC_VE

47、CTOR:=X"22"CONSTANT n_1:STD_LOGIC_VECTOR:=X"1A"CONSTANT n_2:STD_LOGIC_VECTOR:=X"14"CONSTANT n_3:STD_LOGIC_VECTOR:=X"21"CONSTANT n_4:STD_LOGIC_VECTOR:=X"2A"CONSTANT n_n:STD_LOGIC_VECTOR:=X"F0"SIGNAL data : STD_LOGIC :='0'SIGNAL i: ST

48、D_LOGIC_VECTOR(4 DOWNTO 0) :="00000"BEGINPROCESS(CLK,RSTn,i).精品文檔BEGINIF (CLK'event AND CLK='1') THENIF (RSTn='0') THENi <= "00000"data <= '0'ELSECASE i ISWHEN "00000" => i <= "00001"WHEN "00001" => IF (L_H_

49、Sig='1') THEN i <= "00010"data <= n_1(0);END IF;WHEN "00010" => IF (L_H_Sig='1') THEN i <= "00011"data <= n_1(1);END IF;WHEN "00011" => IF (L_H_Sig='1') THEN i <= "00100"data <= n_1(2);END IF;WHEN "0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論