- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息科学与技术学院
EDA课程设计报告
目 录
1 课程设计综述—————————————————————— 2
1.1 课程设计的题目———————————————————— 2
1.2 题目要求——————————————————————— 2
2 方案选择———————————————————————— 2
3 整体电路的设计及分析——--——————————————— 3
3.1 顶层电路图—————————————————————— 3
3.2 各模块功能原理分析—————————————————— 4
4 心得体会——————————————————————— 12
1.课程设计综述
1.1 课程设计的题目
基于FPGA的键盘扫描电路。
1.3 题目要求
(1)、键盘按钮数为4,系统时钟10MHz。
(2)、能识别出所按按钮。
(3)、按钮被按下后,视为此按钮输入一次,若按钮长时间不松,(时限1S)后每 隔0.5S 视为再次输入,直至按钮松开。
(4)、要求能对按钮按下时指令的抖动能正确处理。对持续时间小于50ms的输入不 作响应。
(5)、各键设置不同优先级,多键同时按下时,视为优先级较高的按键被按下。
2.方案选择
根据题目要求,需要4个按钮的键盘,通过查阅资料我选择通用的2*2行列式键盘,判断键盘中有无按键按下是通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。原理框图如下所示:
由题知输入的是10MHz的系统时钟,我们需要通过一个分频器来输出一个1KHz的计数频率来扫描键盘以及一个40Hz(即25ms)的消除抖动的频率来计算是否属于抖动按键,计数值用来计算当前键盘扫描值,4按钮的话计数值则是00、01、10和11 ,若有按键信号发生则送计数值到按键检测电路和按键编码电路供确定按键位置用。键盘扫描电路提取列按键并和计数值进行比较得到哪一行被按下,并可通过对计数值的分解得打哪一列有按键,提取该值供计数器电路和消抖电路使用。我们用一个状态机来实现消抖电路,按键抖动为50ms,我们通过对按键进行两次采样判断是否属于抖动,则输入时钟用40Hz(25ms),通过两次采样得到50ms的判断值,若按键信号一直有效则属于有效按键。键盘编码电路实现了计数值到对应编码的转换。
3.整体电路的设计及分析
3.1 顶层电路图
3.2 各模块功能原理分析
3.2.1 分频模块(SCAN_GEN)
该模块的模型如左所示,输入信号为系统时钟信号10MHz,输出为两个分频后的信号。
具体代码如下所示:
对键盘扫描的分频我们定义的计数器为13位(8192大于5000)才能实现一万分频得到1KHz的信号,对于消抖电路的计数器则设为17位(131072>125000)才能实现二万五千分频得到40Hz的信号,由于该模块要求的分频数太高,软件仿真不出,所以实际仿真的时候我们改成了100个时钟信号分频为10个和25个时钟信号的模拟。
该电路仿真图如下所示:
我们把CLK设置为100个时钟,由图可知,当CLK发生5个上升沿变化时,scan_f发生一次翻转,实现了10分频,当CLK发生10个上升沿变化时,scan_dd发生一次翻转,实现了20分频。从而实现了该电路的基本功能。
3.2.2 计数电路(SCAN_COUNT)
该模块的模型如左所示,输入信号为分频电路产生的键盘扫描频率以及键盘扫描电路产生的按键信号,输出的是供键盘扫描电路和编码电路使用的计数值。
具体代码如下所示:
由于是2*2的键盘,我们只需要定义计数值为2位(00、01、10、11)即可表示所有的键位,当按键信号是高电平即无按键输入时,计数值一直在00、01、10和11中循环,当有按键输入时,把此时的计数值输出供键盘扫描电路和按键编码电路使用。
3.2.3 键盘扫描模块(KEY_SCAN)
该模块的模型如左所示,输入信号为按键产生的列信号,并和另一个从计数模块输入的计数信号进行比较得到该按键在哪一行,并产生按键信号和优先列信号。
具体代码如下所示:
该电路的主要思路在于计数值、列信号和行信号的对应关系,如下表所示:
第二列 第一列 计数值 A B 第一行
10 1 0 0 0 0 1 0 1 第二行
01 1 0 1 0 0 1 1 1 表中A判断在第几行,0表示在第一行,1表示在第二行,B判断哪一列有按键供按键信号的赋值,0表示第一列,1表示第二列。
仿真图如下所示:
第一个100ns内,计数值为00,输入为00,即两列都有按键输入,则是第一行的两个键都被按下,第一行为低
文档评论(0)