1 / 24
文档名称:

VHDL课程设计-PS2键盘.doc

格式:doc   大小:2,744KB   页数:24页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

VHDL课程设计-PS2键盘.doc

上传人:儒林 2024/5/10 文件大小:2.68 MB

下载得到文件列表

VHDL课程设计-PS2键盘.doc

相关文档

文档介绍

文档介绍:该【VHDL课程设计-PS2键盘 】是由【儒林】上传分享,文档一共【24】页,该文档可以免费在线阅读,需要了解更多关于【VHDL课程设计-PS2键盘 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。VHDL课程设计-PS2键盘 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第2页目录 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第3页1、设计内容(1)系统功能的分析;(2)实现系统功能的实际方案;(3)编写各功能模块的VHDL语言程序;(4)对各功能模块进行编译、综合、仿真、分析;(5)顶层文件设计(6)对整个系统进行编译、综合、仿真、分析;(7)在CPLD\FPGA实验开发系统试验箱上进行硬件验证;(8)写实验报告;2、设计要求(1)按所布置的题目要求,每一位学生独立完成全过程;(2)分模块层次化设计;(3)各功能模块的底层文件必须用VHDL语言设计,顶层文件可用VHDL语言设计,也可以用原理图设计。实验仪器设备(1)PC机;(2)QuartusII软件;(3)黑金FPGA实验开发系统,芯片为CycloneII的EP2C5Q208C8;设计方案PS2解码图1为PS2的接口图。我使用的的右边的PS2接口,即1脚为数据脚,5脚为时钟脚,同时我编写的VHDL代码只对1脚和5脚操作。 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第4页图2PS2协议时序图图2为PS2协议时序图。由图可以解读出,PS2协议对数据的读取时“CLK的下降沿”有效,而数据的放置时在“CLK的上升沿”。PS2频率比较慢,大概为10KHz。第N位属性0开始位1~8数据位9校验位10结束位表1PS2数据说明PS2的一帧数据时11位。对PS2进行解码,我们需要得到的是1~8位的数据位。其他的位,可以使用取巧的方法编写。键盘的编码有“通码(Make)”和“断码(Break)”之分。通码相当于某个按键按下了,断码相当于某个按键释放了。假设,我们按下了“Z”键不放,大约每秒有10个X“1A”的通码(10KHz),而当我们释放“Z”键,就会输出断码X“F0”和X“1A”。同时,键盘编码一次只能有一个输出,即多个按键同时按下时,只有一个有效。下表为第二套PC键盘扫描码。键名通码断码-键名通码断码-键名通码断码A1CF0,1C?946F0,46?[54FO,54B32F0,32?`0EF0,0E?INSERTE0,70E0,F0,70C21F0,21?-4EF0,4E?HOMEE0,6CE0,F0,6CD23F0,23?=55FO,55?PGUPE0,7DE0,F0,7DE24F0,24?5DF0,5D?DELETEE0,71E0,F0,71F2BF0,2B?BKSP66F0,66?ENDE0,69E0,F0,69 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第5页G34F0,34?SPACE29F0,29?PGDNE0,7AE0,F0,7AH33F0,33?TAB0DF0,0D?UARROWE0,75E0,F0,75I43F0,43?CAPS58F0,58?LARROWE0,6BE0,F0,6BJ3BF0,3B?LSHFT12FO,12?DARROWE0,72E0,F0,72K42F0,42?LCTRL14FO,14?RARROWE0,74E0,F0,74L4BF0,4B?LGUIE0,1FE0,F0,1F?NUM77F0,77M3AF0,3A?LALT11F0,11?KP/E0,4AE0,F0,4AN31F0,31?RSHFT59F0,59?KP*7CF0,7CO44F0,44?RCTRLE0,14E0,F0,14?KP-7BF0,7BP4DF0,4D?RGUIE0,27E0,F0,27?KP+79F0,79Q15F0,15?RALTE0,11E0,F0,11?KPENE0,5AE0,F0,5AR2DF0,2D?APPSE0,2FE0,F0,2F?,71S1BF0,1B?ENTER5AF0,5A?KP070F0,70T2CF0,2C?ESC76F0,76?KP169F0,69U3CF0,3C?F105F0,05?KP272F0,72V2AF0,2A?F206F0,06?KP37AF0,7AW1DF0,1D?F304F0,04?KP46BF0,6BX22F0,22?F40CF0,0C?KP573F0,73Y35F0,35?F503F0,03?KP674F0,74Z1AF0,1A?F60BF0,0B?KP76CF0,6C045F0,45?F783F0,83?KP875F0,75116F0,16?F80AF0,0A?KP97DF0,7D21EF0,1E?F901F0,01?]5BF0,5B326F0,26?F1009F0,09?;4CF0,4C425F0,25?F1178F0,78?'52F0,5252EF0,2E?F1207F0,07?,41F0,41636F0,36?PRNTSCRNE0,12,E0,7C?E0,F0,7C,E0,F0,12??.49F0,4973DF0,3D?SCROLL7EF0,7E?/4AF0,4A83EF0,3E?PAUSEE1,14,77,E1,F0,14,F0,77-NONE-????表2PC键盘第二套扫描码设计思路(1)PS2时钟的检测;(2)PS2数据的接受并提取需要的8位数据; 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第6页(3)对PS2提取的8位数据进行解码,确定按键;(4)通过LED灯显示按键的解码的结果;(5)设置多个按键,多种LED显示方式;对于PS2键盘扫描程序,我的设计思路是一个模块一个功能,这样能清晰分辨模块,同时易于修改代码。代码条理清晰,便于解读。而对于多个模块则使用层次化的形式来编写,顶层文件并不包含功能的设定,只包含各个子功能模块。模块设计PS2键盘扫描分为:电平检测,PS2解码,PS2组合,LED控制和总PS组合六个模块。下面为各个模块的简易模块图。(1)PS2时钟检测模块:PS2_CLK_Pin_InH_L_SigL_H_Sig电平检测模块PS2_detect_module图3电平检测模块图(2)PS2解码模块:PS2解码模块PS2_encode_modulePS2_Data_Pin_InPS2_DataH_L_SigPS2_Done_Sig图4PS2解码模块图(3)PS2组合模块:PS2解码模块PS2_encode_modulePS2_Data_Pin_InPS2_DataPS2_Done_SigPS2_CLK_Pin_InH_L_Sig电平检测模块PS2_detect_module图5PS2组合模块图(4)控制LED模块: 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第7页PS2_DataData_Out电平检测模块PS2_control_modulePS2_Done_Sig图6LED控制模块图(5)PS2总的组合模块:PS2_Done_SigPS2_DataPS2_Data_Pin_InPS2_CLK_Pin_InData_Out电平检测模块PS2_control_module电平检测模块PS2_control_module图7PS2模块图各模块分析PS2时钟检测模块PS2电平检测模块主要的作用是检测PS2接口键盘的时钟信号,因为PS2的协议规定数据是在时钟的下降沿读取的。所以电平检测模块要检测PS2时钟的下降沿,有下降沿来临时,要做相应的数据读取动作。下面是代码的分析。LIBRARYIEEE; --;;------------------------------------------------------------------------------------------------------------------------------------------ENTITYPS2_detect_moduleIS --实体声明 PORT( CLK,RSTn:INSTD_LOGIC; PS2_CLK_Pin_In:INSTD_LOGIC; H_L_Sig:OUTSTD_LOGIC; --电平由高变低,输出一个信号 L_H_Sig:OUTSTD_LOGIC --电平由低变高,输出一个信号 );ENDENTITYPS2_detect_module;------------------------------------------------------------------------------------------------------------------------------------------ARCHITECTUREPS2_detectOFPS2_detect_moduleIS --结构体声明 SIGNALH_L_F1:STD_LOGIC:='1'; --声明4个信号,用于电平输入的变化 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第9页 SIGNALH_L_F2:STD_LOGIC:='1'; --4个信号都赋了初值 SIGNALL_H_F1:STD_LOGIC:='0'; SIGNALL_H_F2:STD_LOGIC:='0'; BEGIN PROCESS(CLK,RSTn) BEGIN IF(CLK'eventANDCLK='1')THEN --同步进行 IF(RSTn='0')THEN --同步复位动作 H_L_F1<='1';H_L_F2<='1';L_H_F1<='0';L_H_F2<='0'; ELSE H_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还会保持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);Initial000T1101 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第9页T2110表3电平检测变化表PS2解码模块LIBRARYIEEE; --;;------------------------------------------------------------------------------------------------------------------------------------------ENTITYPS2_decode_moduleIS --实体声明 PORT( 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) );ENDENTITYPS2_decode_module;------------------------------------------------------------------------------------------------------------------------------------------ARCHITECTUREPS2_decodeOFPS2_decode_moduleISSIGNALDone:STD_LOGIC:='0'; --声明一个完成信号SIGNALi:STD_LOGIC_VECTOR(4DOWNTO0):="00001"; --声明步骤iSIGNALData:STD_LOGIC_VECTOR(7DOWNTO0):=X"32";BEGINPROCESS(CLK,RSTn,i)BEGINIF(CLK'eventANDCLK='1')THENIF(RSTn='0')THEN i<="00001";Done<='0';Data<=X"00";ELSE CASEiIS 硬件描述语言与EDA技术实践——PS2键盘扫描xwm共27页第10页