VHDL课程设计_PS2键盘_第1页
VHDL课程设计_PS2键盘_第2页
VHDL课程设计_PS2键盘_第3页
VHDL课程设计_PS2键盘_第4页
VHDL课程设计_PS2键盘_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1、 课程设计的目的与任务错误.!未定义书签。2、 课程设计题目错误.!未定义书签。1、 指定题目:错误!未定义书签。2、 自选题目:错误!未定义书签。3、 课程设计的内容与要求错误!未定义书签。1、设计内容错误!未定义书签。2、设计要求错误!未定义书签。4、 实验仪器设备错误!未定义书签。5、 设计方案错误!未定义书签。1、PS2解码错误!未定义书签2、 设计思路错误!未定义书签。3、 模块设计错误!未定义书签。4、 各模块分析错误!未定义书签。(1) PS2时钟检测模块错误!未定义书签(2) PS2解码模块错误!未定义书签(3) PS2组合模块错误!未定义书签(4) 控制LED模块错误

2、!未定义书签(5) PS2总的组合模块错误!未定义书签6、 综合与仿真错误!未定义书签。1、 综合错误!未定义书签。2、 仿真错误!未定义书签。(1) 电平检测模块仿真错误!未定义书签。(2) LED灯控制模块仿真错误!未定义书签(3) PS2_module总模块仿真错误!未定义书签7、 硬件下载错误!未定义书签。8、 心得体会错误!未定义书签。九、 参考文献错误!未定义书签。一、课程设计的目的与任务(1)熟练掌握ED*具软件QuartusII的使用;(2)熟练用VHDLM件描述语言描述数字电路;(3)学会使用VHDL!行大规模集成电路设计;(4)学会用CPLDFPG使用系统硬件验证电路设计的

3、正确性;(5)初步掌握ED儆术并具备一定的可编程逻辑芯片的开发能力;二、课程设计题目1、指定题目:0:多功能计数器;1:数字秒表;2:简易数字钟;3:简易频率计;4:彩灯控制器;5:交通灯控制器;6:四路智力竞赛抢答器;7:简易微波炉控制器;8:表决器;9:数字密码锁;我的的学号尾数是2,所以我要做的题目是简易数字钟。由于我之前已经学过VerilogHDL和VHDL所以简易数字钟相对于我比较简单,我完成了简易数字钟并验收后,再选择了另一个自选题目来完成。简易数字钟:设计一个以“秒”为基准信号的简易数字钟,显示时、分、秒,同时可实现整点报时和清零(我已经完成,而且已经验收了)。2、自选题目:在完

4、成了数字钟的设计后,我选择了另一个设计的题目,那就是PS2键盘扫描。所以这次课程设计我的报告主要详细写的是PS2键盘扫描的程序,而不是简易数字钟。PS键盘扫描:设计一个PS键盘扫描程序,能接受键盘的输入时钟和数据,区别哪一个键输入,同时解译通码和断码,使用LED灯来显示收到的数据。三、课程设计的内容与要求1、设计内容(1)系统功能的分析;(2)实现系统功能的实际方案;(3)编写各功能模块的VHD印言程序;(4)对各功能模块进行编译、综合、仿真、分析;(5)顶层文件设计(6)对整个系统进行编译、综合、仿真、分析;(7)在CPLDFPG座验开发系统试验箱上进行硬件验证;(8)写实验报告;2、设计要

5、求(1)按所布置的题目要求,每一位学生独立完成全过程;(2)分模块层次化设计;(3)各功能模块的底层文件必须用VHDL®言设计,顶层文件可用VHDL®言设计,也可以用原理图设计。四、实验仪器设备(Dpea;(2)QuartusII软件;(3)黑金FPG故验开发系统,芯片为CycloneII的EP2C5Q208C8五、设计方案1、PS2解码图】9接n连接器邱义图1为PS2的接口图。我使用的的右边的PS2接口,即1脚为数据脚,5脚为时钟脚,同时我编写的VHDL(弋码只对1脚和5脚操作dieps2clktpLnLTLnLTLmmununLikJiePS2DATA|Star!|口口

6、DI|口203D4|口5|口6|口了|P|Stop图2PS2协议时序图图2为PS2协议时序图。由图可以解读出,PS2协议对数据的读取时“CLK的下降沿”有效,而数据的放置时在“CLK的上升沿”。PS2频率比较慢,大概为10KHz第N位属性0开始位18数据位9校验位10结束位表1PS2数据说明PS2的一帧数据时11位。对PS2进行解码,我们需要得到的是18位的数据位。其他的位,可以使用取巧的方法编写。键盘的编码有“通码(Makef和“断码(Break)”之分。通码相当于某个按键按下了,断码相当于某个按键释放了。假设,我们按下了“Z”键不放,大约每秒有10个X“1A”的通码(10KHZ,而当我们释

7、放“Z”键,就会输出断码X“F0”和X“1A”。同时,键盘编码一次只能有一个输出,即多个按键同时按下时,只有一个有效。卜表为第二套PC键盘扫描码。键名通码断码-键名通码断码-键名通码断码A1CF0,1C946F0,4654FO,54B32F0,32'0EF0,0EINSERTE0,70E0,F0,70C21F0,21-4EF0,4EHOMEE0,6CE0,F0,6CD23F0,23=55FO,55PGUPE0,7DE0,F0,7DE24F0,245DF0,5DDELETEE0,71E0,F0,71F2BF0,2BBKSP66F0,66ENDE0,69E0,F0,69G34F0,34SP

8、ACE29F0,29PGDNE0,7AE0,F0,7AH33F0,33TAB0DF0,0DUARROWEE0,75E0,F0,75I43F0,43CAPS58F0,58LARROWE0,6BE0,F0,6BJ3BF0,3BLSHFT12FO,12DARROWEE0,72E0,F0,72K42F0,42LCTRL14FO,14RARROWEE0,74E0,F0,74L4BF0,4BLGUIE0,1FE0,F0,1FNUM77F0,77M3AF0,3ALALT11F0,11KP/E0,4AE0,F0,4AN31F0,31RSHFT59F0,59KP*7CF0,7CO44F0,44RCTRLE0,1

9、4E0,F0,14KP-7BF0,7BP4DF0,4DRGUIE0,27E0,F0,27KP+79F0,79Q15F0,15RALTE0,11E0,F0,11KPENE0,5AE0,F0,5AR2DF0,2DAPPSE0,2FE0,F0,2FKP.71F0,71S1BF0,1BENTER5AF0,5AKP070F0,70T2CF0,2CESC76F0,76KP169F0,69U3CF0,3CF105F0,05KP272F0,72V2AF0,2AF206F0,06KP37AF0,7AW1DF0,1DF304F0,04KP46BF0,6BX22F0,22F40CF0,0CKP573F0,73Y35

10、F0,35F503F0,03KP674F0,74Z1AF0,1AF60BF0,0BKP76CF0,6C045F0,45F783F0,83KP875F0,75116F0,16F80AF0,0AKP917DF0,7D21EF0,1EF901F0,015BF0,5B326F0,26F1009F0,09;4CF0,4C425F0,25F1178F0,78'52F0,5252EF0,2EF1207F0,07,41F0,41636F0,36PRNTSCRNE0,12,E0,7CE0,F0,7C,E0,F0,12.49F0,4973DF0,3DSCROLL7EF0,7E/4AF0,4A83EF0,3

11、EPAUSEE1,14,77,E1,F0,14,F0,77-NONE-表2PC键盘第二套扫描码2、设计思路(1) PS2时钟的检测;(2) PS2数据的接受并提取需要的8位数据;(3) 对PS2提取的8位数据进行解码,确定按键;(4) 通过LED灯显示按键的解码的结果;(5) 设置多个按键,多种LED显示方式;对于PS2键盘扫描程序,我的设计思路是一个模块一个功能,这样能清晰分辨模块,同时易于修改代码。代码条理清晰,便于解读。而对于多个模块则使用层次化的形式来编写,顶层文件并不包含功能的设定,只包含各个子功能模块。3、模块设计PS2键盘扫描分为:电平检测,PS2解码,PS2组合,LED控制和总

12、PS组合六个模块。下面为各个模块的简易模块图(1)PS2时钟检测模块:PS2CLKPinIn电平检测模块HLSigLHSigPS2detectmodule图3电平检测模块图(2)PS2解码模块:PS2 Data Pin InPS2解码模块PS2_DataH L SigPS2 encode modulePS2 Done Sig图4PS2解码模块图(3)PS2组合模块:PS2 CLK Pin In电平检测模块PS2_detect_moduleH L SigPS2 DataPS2 Data Pin InPS2解码模块PS2_encode_moduleLPS2_Done_Sig图5PS2组合模块图(4

13、)控制LED模块:PS2 Data电平检测模块Data OutPS2 Done SigPS2 control module图 6 LED控制模块图(5)PS2总的组合模块:PS2CLKPinIn电平检测模块PS2Dat电平检测模块PS2_Data_Pin_In-一APS2_Done_SigDataOutPS2controlmodulePS2controlmodule图7PS2模块图4、各模块分析(1) PS2时钟检测模块PS2电平检测模块主要的作用是检测PS2接口键盘的时钟信号,因为PS2的协议规定数据是在时钟的下降沿读取的。所以电平检测模块要检测PS2时钟的下降沿,有下降沿来临时,要做相应的

14、数据读取动作。下面是代码的分析。LIBRARYIEEE;-库USEPS2_detect_moduleIS-实体声明PORT(CLK,RSTn:INSTD_LOGIC;PS2_CLK_Pin_In:INSTD_LOGIC;- 电平由高变低,输出一个信号- 电平由低变高,输出一个信号- 结构体声明- 声明 4 个信号,用于电平输入的变化-4 个信号都赋了初值H_L_Sig:OUTSTD_LOGIC;L_H_Sig:OUTSTD_LOGIC);ENDENTITYPS2_detect_module;ARCHITECTUREPS2_detectOFPS2_detect_moduleISSIGNALH_L

15、_F1:STD_LOGIC:='1'SIGNALH_L_F2:STD_LOGIC:='1'SIGNALL_H_F1:STD_LOGIC:='0'SIGNALL_H_F2:STD_LOGIC:='0'BEGINPROCESS(CLK,RSTn)BEGINIF(CLK'eventANDCLK='1')THEN-同步进行IF(RSTn='0')THEN-同步复位动作H_L_F1<='1'H_L_F2<='1'L_H_F1<='0'L

16、_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;ENDIF;ENDIF;ENDPROCESS;H_L_Sig<=H_L_F2AND(NOTH_L_F1);-输出信号L_H_Sig<=L_H_F1AND(NOTL_H_F2);ENDARCHITECTUREPS2_detect;-结构体结束在结构体中声明了4个信号,用于电平的检测F2信号是接着F1信号的,如果F1信号变化了,F2信号还不会立即变化,F2还会保持

17、F1的前一个状态,以两者的逻辑关系,可以判断输入的是上升沿还是下降沿。结果如表格3。时间H_L_F1H_L_F2H_L_Sig<=H_L_F2AND(NOTH_L_F1)Initial110T1011T2000时间L_H_F1L_H_F2L_H_Sig<=L_H_F1AND(NOTL_H_F2);Initial000T1101T2110表3电平检测变化表(2) PS2解码模块LIBRARYIEEE;-库USEPS2_decode_moduleIS-实体声明PORT(CLK,RSTn:INSTD_LOGIC;H_L_Sig:INSTD_LOGIC;PS2_Data_Pin_In:IN

18、STD_LOGIC;PS2_Done_Sig:OUTSTD_LOGIC;PS2_Data:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDENTITYPS2_decode_module;ARCHITECTUREPS2_decodeOFPS2_decode_moduleISSIGNALDone:STD_LOGIC:='0'-声明一个完成信号SIGNALi:STD_LOGIC_VECTOR(4DOWNTO0):="00001"-声明步骤iSIGNALData:STD_LOGIC_VECTOR(7DOWNTO0):=X"32"

19、BEGINPROCESS(CLK,RSTn,i)BEGINIF(CLK'eventANDCLK='1')THENIF(RSTn='0')THENi<="00001"Done<='0'Data<=X"00"ELSECASEiISWHEN"00000"=>i<="00001"WHEN"00001"=>IF(H_L_Sig='1')THENi<="00010"Data(

20、0)<=PS2_Data_Pin_In;ENDIF;WHEN"00010"=>IF(H_L_Sig='1')THENi<="00011"Data(1)<=PS2_Data_Pin_In;ENDIF;WHEN"00011"=>IF(H_L_Sig='1')THENi<="00100"Data(2)<=PS2_Data_Pin_In;ENDIF;WHEN"00100"=>IF(H_L_Sig='1')TH

21、ENi<="00101"Data(3)<=PS2_Data_Pin_In;ENDIF;WHEN"00101"=>IF(H_L_Sig='1')THENi<="00110"Data(4)<=PS2_Data_Pin_In;ENDIF;WHEN"00110"=>IF(H_L_Sig='1')THENi<="00111"Data(5)<=PS2_Data_Pin_In;ENDIF;WHEN"00111"

22、=>IF(H_L_Sig='1')THENi<="01000"Data(6)<=PS2_Data_Pin_In;ENDIF;WHEN"01000"=>IF(H_L_Sig='1')THENi<="01001"Data(7)<=PS2_Data_Pin_In;ENDIF;WHEN"01001"=>IF(H_L_Sig='1')THENi<="01010"ENDIF;WHEN"01010&quo

23、t;=>IF(H_L_Sig='1')THENi<="01011"ENDIF;WHEN"01011"=>IF(Data=X"F0")THENi<="01100"ELSEi<="10110"ENDIF;WHEN"01100"=>IF(H_L_Sig='1')THENi<="01101"ENDIF;WHEN"01101"=>IF(H_L_Sig='1&#

24、39;)THENi<="01110"ENDIF;WHEN"01110"=>IF(H_L_Sig='1')THENi<="01111"ENDIF;WHEN"01111"=>IF(H_L_Sig='1')THENi<="10000"ENDIF;WHEN"10000"=>IF(H_L_Sig='1')THENi<="10001"ENDIF;WHEN"10001&q

25、uot;=>IF(H_L_Sig='1')THENi<="10010"ENDIF;WHEN"10010"=>IF(H_L_Sig='1')THENi<="10011"ENDIF;WHEN"10011"=>IF(H_L_Sig='1')THENi<="10100"ENDIF;WHEN"10100"=>IF(H_L_Sig='1')THENi<="10101&

26、quot;ENDIF;WHEN"10101"=>IF(H_L_Sig='1')THENi<="10110"ENDIF;WHEN"10110"=>IF(H_L_Sig='1')THENi<="10111"Done<='1'ENDIF;WHEN"10111"=>IF(H_L_Sig='1')THENi<="00001"Done<='0'ENDIF;WHE

27、NOTHERS=>i<="00001"ENDCASE;ENDIF;ENDIF;ENDPROCESS;PS2_Data<=Data;PS2_Done_Sig<=Done;ENDARCHITECTUREPS2_decode;这个模块我有点偷懒,只对键盘输入的8位有效数据进行了提取,其他位基本是忽略了,第一位开始位忽略了,然后是读取8位有效数据,第9步和第10步跳过了检测位和结束位,然后是判断。如果是0XFQ则证明是断码,断码的话后面的直接跳过,如果不是0XFQ则证明是有效的数据,立即跳到步骤22,向顶层的模块回馈一个完成信号,并将有效数据输出。(3) P

28、S2组合模块LIBRARYIEEE;USEPS2ISPORT(CLK,RSTn:INSTD_LOGIC;PS2_Data_Pin_In:INSTD_LOGIC;PS2_CLK_Pin_In:INSTD_LOGIC;PS2_Done_Sig:BUFFERSTD_LOGIC;PS2_Data:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDENTITYPS2;ARCHITECTUREPS2_behaveOFPS2ISCOMPONENTPS2_detect_modulePORT(CLK,RSTn:INSTD_LOGIC;PS2_CLK_Pin_In:INSTD_LOGIC;H_L_

29、Sig:OUTSTD_LOGIC;L_H_Sig:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTPS2_decode_modulePORT(CLK,RSTn:INSTD_LOGIC;H_L_Sig:INSTD_LOGIC;PS2_Data_Pin_In:INSTD_LOGIC;PS2_Done_Sig:OUTSTD_LOGIC;PS2_Data:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDCOMPONENT;- -COMPONENTPS2_code_module- -PORT(- -CLK,RSTn:INSTD_LOGIC;- -L_H_Sig:

30、INSTD_LOGIC;- -PS2_Done_Sig:INSTD_LOGIC;- -PS2_Data_Pin_Out:OUTSTD_LOGIC- -);- -ENDCOMPONENT;SIGNALH_L:STD_LOGIC;- -SIGNALL_H:STD_LOGIC;- -SIGNALPS2_Data_Pin_Out:STD_LOGIC;BEGINU1:PS2_detect_modulePORTMAP(CLK,RSTn,PS2_CLK_Pin_In,H_L,L_H);U2:PS2_decode_modulePORTMAP(CLK,RSTn,H_L,PS2_Data_Pin_In,PS2_D

31、one_Sig,PS2_Data);- -U2:PS2_decode_modulePORTMAP(CLK,RSTn,H_L,PS2_Data_Pin_Out,PS2_Done_Sig,PS2_Data);- -U3:PS2_code_modulePORTMAP(CLK,RSTn,L_H,PS2_Done_Sig,PS2_Data_Pin_Out);ENDARCHITECTUREPS2_behave;这是一个组合例化的模块,是对PS2时钟电平检测和PS2解码的一个简单模块。这一个模块初步实现了PS2的解码功能。上面的是代码的方法实现例化功能,同时也可以使用原理图的方式来实现例化,下面为原理图例化

32、的图。1 二节152,1一茬比恒二="、hjsGS-图8 PS2例化原理图IC4JKi厂(13asCLMEC- rh-.r-rJ-» -1F Aii 一 U3 »-二或 二二百三福(4) 控制LED模块LIBRARYIEEE;USEPS2_contorl_moduleISPORT(CLK,RSTn:INSTD_LOGIC;PS2_Done_Sig:INSTD_LOGIC;PS2_Data:INSTD_LOGIC_VECTOR(7DOWNTO0);Data_Out:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDENTITYPS2_contorl_

33、module;ARCHITECTUREPS2_contorlOFPS2_contorl_moduleISSIGNALData:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK,RSTn)BEGINIF(CLK'eventANDCLK='1')THENIF(RSTn='0')THENData<="0001"ELSIF(PS2_Done_Sig='1')THENCASEPS2_DataISWHENX"22"=>Data<=(Data(2DOWNTO

34、0)&Data(3);WHENX"1A"=>Data<=(Data(0)&Data(3DOWNTO1);WHENX"14"=>Data<=(Data(0)&Data(1)&Data(2)&Data(3);WHENX"21"=>Data<="1111"WHENX"2A"=>Data<="0000"WHENX"5A"=>Data<="0001"

35、;WHENX"32"=>Data<="0001"WHENX"31"=>Data<="0011"WHENX"3A"=>Data<="0111"WHENOTHERS=>Data<=Data;ENDCASE;ENDIF;ENDIF;ENDPROCESS;Data_Out<=Data;ENDARCHITECTUREPS2_contorl;LED空制模块主要的作用是用于显示结果。在PS2键盘扫描后,得到的8位有效结果,使用4盏LED

36、灯作为检查结果的输出,使用不用的LED闪亮方式来表示不同的按键按下了。本程序只做了11个按键,分别是“Z”,“X”,“C”,“V”,"B,“N,,"Entet”和“Ctrl”。“Z”按下后,LED向左移一个单位,“X”是向右移一个单位,“Ctrl”是LEW互换,"B'是点亮一盏LED,是点亮两盏LED,"Mf是点亮三盏LED,“Entet”是复原LED灯的情况。(5) PS2总的组合模块LIBRARYIEEE;USEPS2_moduleISPORT(CLK,RSTn:INSTD_LOGIC;PS2_Data_Pin_In:INSTD_LOGIC;

37、PS2_CLK_Pin_In:INSTD_LOGIC;Data_Out:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDENTITYPS2_module;ARCHITECTUREPS2OFPS2_moduleISCOMPONENTPS2PORT(CLK,RSTn:INSTD_LOGIC;PS2_Data_Pin_In:INSTD_LOGIC;PS2_CLK_Pin_In:INSTD_LOGIC;PS2_Done_Sig:OUTSTD_LOGIC;PS2_Data:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDCOMPONENT;COMPONENTPS2_c

38、ontorl_modulePORT(CLK,RSTn:INSTD_LOGIC;PS2_Done_Sig:INSTD_LOGIC;PS2_Data:INSTD_LOGIC_VECTOR(7DOWNTO0);Data_Out:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDCOMPONENT;SIGNALDone_Sig:STD_LOGIC;SIGNALData:STD_LOGIC_VECTOR(7DOWNTO0);BEGINU1:PS2U1:PS2PORTMAP(CLK,RSTn,PS2_Data_Pin_In,PS2_CLK_Pin_In,Done_Sig,Data);POR

39、TMAP(CLK,RSTn,PS2_CLK_Pin_In,Done_Sig,Data);U2:PS2_contorl_modulePORTMAP(CLK,RSTn,Done_Sig,Data,Data_Out);ENDARCHITECTUREPS2;这是一个组合例化的模块,是对PS2功能模块和LED控制的一个简单组合的模块。这一个模块是PS2键盘扫描的最顶层文件,只做例化作用,不包含其他功能代码。上面的是代码的方法实现例化功能,同时也可以使用原理图的方式来实现例化,下面为原理图例化的图。图9 PS2_module总例化原理图六、综合与仿真1、综合对编写好的源程序进彳T综合,同时生成RTL电路图

40、,RTL电路图如下L1PS5_.Qnkiil_rriCHjulte.U2图10PS2_module模块RTL图2、仿真在本次设计中,仿真工作只对电平检测模块,LED灯控制模块和PS2_module总模块进行了仿真。对于前两个模块,采用的仿真方法是使用QuartusII自带的波形仿真软件进行仿真,而对于PS2_module总模块的仿真则使用了编写代码的方式进行仿真。因为PS2_module总模块对键盘按键的波形设置很麻烦,而且仿真效果不好,所以直接使用代码的方式产生一个键盘按键,同时观察波形来检测。(1)电平检测模块仿真电平检测模块原理图如下:仿真波形如下:960. 0靠与1 12 tis1.

41、28 us1.44 usCLKH_L_SlSRSTnL_M_SigmumMnwnnramwouMmiwinmvmw一口口上口nniiiiiiiiiiIik图12电平检测模块仿真波形系统时钟给了10ns,PS2_CLK_Pin_In给了100ns,RSTn复位一直为高电平,可以观察波形得到,在PS2_CLK_Pin_In时钟的上升沿发生后,L_H_Sig发出了一个高脉冲的信号,大概相隔两个系统时钟;在PS2_CLK_Pin_In时钟的下降沿发生后,H_L_Sig也发出了一个高脉冲,也是相隔两系统时钟,而高脉冲大概是两个系统时钟左右。(2) LEW控制模块仿真LED灯控制模块原理图如下:图13 L

42、ED灯控制模块原理图仿真波形如下:*T5*1E)ps 1M.0 ts 320.0 Qi 480.0 ns 640.0MO.D ns 950.0 its L.*jIq11 b. ;JT5 nz图14 LED灯控制模块仿真波形PS2_CLK_Pin_InPS2 Data Pin InCLI"idPsOat'a"rs2m-rsjataM-像Jkta'PSJ)4U3P£2_D4ti2j-TS2_0ata.-PS2_Oat*Oj国DwljglF5ZDomSir监及系统时钟给了10ns,RSTn复位在一开始白时候给了0',进行了一次复位,PS2_Don

43、e_Sig完成信号贝U是100ns一次,PS2_Data给的是X“22”(即X被按下)。复位后Data_Out输出的是“0001”,第一盏LED灯点亮,然后在PS2_Done_Sig信号后,Data_Out输出变化了,变为了“0010”,LED第二盏给点亮了,LED灯移位了。因为一直是X被按下,所以信号不断移位,LED分别为1,2,4,8。在最后那里,由于PS2_Data给的是X“20”,并没有在控制那设置这个按键,所以LED没反应,一直保持在2(即第二盏灯点亮)。(3) PS2_module总模块仿真由于PS2总仿真的时候需要键盘的通码输入,但使用波形的改变来作为通码输入的方式太麻烦了,而且

44、很容易出错,得不到想要的波形。所以为了克服这个问题,我使用了另外的一种方法来仿真,直接写键盘编码来给整个模块,然后开输出波形就可以观察。PS2_module总模块仿真点简单方框图如下:15PS2_module总模块方框图PS2_code_module盘编码模块代码如下:LIBRARYIEEE;USEPS2_code_moduleISPORT(CLK,RSTn:INSTD_LOGIC;L_H_Sig:INSTD_LOGIC;PS2_Done_Sig:INSTD_LOGIC;PS2_Data_Pin_Out:OUTSTD_LOGIC);ENDENTITYPS2_code_module;ARCHIT

45、ECTUREPS2_codeOFPS2_code_moduleISCONSTANTn_0:STD_LOGIC_VECTOR:=X"22"CONSTANTn_1:STD_LOGIC_VECTOR:=X"1A"CONSTANTn_2:STD_LOGIC_VECTOR:=X"14"CONSTANTn_3:STD_LOGIC_VECTOR:=X"21"CONSTANTn_4:STD_LOGIC_VECTOR:=X"2A"CONSTANTn_n:STD_LOGIC_VECTOR:=X"F0&qu

46、ot;SIGNALdata:STD_LOGIC:='0'SIGNALi:STD_LOGIC_VECTOR(4DOWNTO0):="00000"BEGINPROCESS(CLK,RSTn,i)BEGINIF(CLK'eventANDCLK='1')THENIF(RSTn='0')THENELSECASEiISWHEN"00000"=>i<="00001"WHEN"00001"=>IF(L_H_Sig='1')THENi<=

47、"00010"data<=n_1(0);ENDIF;WHEN"00010"=>IF(L_H_Sig='1')THENi<="00011"data<=n_1(1);ENDIF;WHEN"00011"=>IF(L_H_Sig='1')THENi<="00100"data<=n_1(2);ENDIF;WHEN"00100"=>IF(L_H_Sig='1')THENi<="

48、00101"data<=n_1(3);ENDIF;WHEN"00101"=>IF(L_H_Sig='1')THENi<="00110"data<=n_1(4);ENDIF;WHEN"00110"=>IF(L_H_Sig='1')THENi<="00111"data<=n_1(5);ENDIF;WHEN"00111"=>IF(L_H_Sig='1')THENi<="01000&

49、quot;data<=n_1(6);ENDIF;WHEN"01000"=>IF(L_H_Sig='1')THENi<="01001"data<=n_1(7);ENDIF;WHEN"01001"=>IF(L_H_Sig='1')THENi<="01010"ENDIF;WHEN"01010"=>IF(L_H_Sig='1')THENi<="01011"ENDIF;WHEN"0

50、1011"=>IF(PS2_Done_Sig='1')THENi<="01100"ENDIF;WHEN"01100"=>IF(L_H_Sig='1')THENi<="01101"data<=n_n(0);ENDIF;WHEN"01101"=>IF(L_H_Sig='1')THENi<="01110"data<=n_n(1);ENDIF;WHEN"01110"=>IF

51、(L_H_Sig='1')THENi<="01111"data<=n_n(2);ENDIF;WHEN"01111"=>IF(L_H_Sig='1')THENi<="10000"data<=n_n(3);ENDIF;WHEN"10000"=>IF(L_H_Sig='1')THENi<="10001"data<=n_n(4);ENDIF;WHEN"10001"=>IF(L_H_S

52、ig='1')THENi<="10010"data<=n_n(5);ENDIF;WHEN"10010"=>IF(L_H_Sig='1')THENi<="10011"data<=n_n(6);ENDIF;WHEN"10011"=>IF(L_H_Sig='1')THENi<="10100"data<=n_n(7);ENDIF;WHEN"10100"=>IF(L_H_Sig=

53、9;1')THENi<="10101"ENDIF;WHEN"10101"=>IF(L_H_Sig='1')THENi<="10110"ENDIF;WHEN"10110"=>IF(L_H_Sig='1')THENi<="10111"ENDIF;WHEN"10111"=>IF(L_H_Sig='1')THENi<="00000"ENDIF;WHENOTHERS=&

54、gt;i<="00000"ENDCASE;ENDIF;ENDIF;ENDPROCESS;PS2_Data_Pin_Out<=data;ENDARCHITECTUREPS2_code;代码实现的功能就是每一个PS2_CLK_Pin_In的上升沿来临的时候,设置好数据给S2_CLK_Pin_In的下降沿时后面模块的读取,时间要与PS2_decode_modul龈块同步。仿真出来的波形图如下:图16输入为“ Z”的波形图图17输入为“ X”的波形图由图16和图17可以看出整个模块的仿真结果。“X”和“Z”按键的作用是一个向左移,一个向右移,在上图中能很清晰地看出他们的变化七、硬件下载先设置好芯片类型,因为我是使用自己的FPGAF发板,所以我用的芯片是CycloneII的EP2c5Q208C8如下图。Selectthefamilyanddeviceyou时aHtotargetforcompilationDevice侑同Family:|Cyclone

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论