《基于FPGA的电子密码锁设计(能力拓展训练).docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子密码锁设计(能力拓展训练).docx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、武汉理工大学能力拓展训练学 号: 能力拓展训练题 目电子密码锁设计学 院专 业班 级姓 名指导教师2016年 月 日能力拓展训练任务书学生姓名: 专业班级: 自动化_班 指导教师: 孙晓明 工作单位: 自动化学院 题 目: 电子密码锁设计 初始条件:计算机、Max+plus、EDA实验箱。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)设计一个电子密码锁,在锁开的状态下输入密码,设置的密码共4位,用数据开关K1K10分别代表数字1,2,9,0,输入的密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位。可删除输入
2、的数字,删除的是最后输入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”。用一位输出电平的状态代表锁的开闭状态。提高部分:为保证密码锁主人能打开密码锁,设置一个万能密码,在主人忘记密码时使用。任务安排:(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述,写出设计方案结构图(4) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5) 调试记录及结果分析(6) 总结(7) 参考资料5篇以上(8) 附录:程序清单时间安排:D1:安排设计任务;收集资料;方案选择D2:程序设计D3:实验室内调试程序并演示D4:撰写报告D5:交能力拓展训练报告主
3、要参考资料:1 谭会生,张昌凡EDA 技术及应用西安:西安电子科技大学出版社20042 孙晓明EDA实验指导书武汉:武汉理工大学教材中心,20071指导教师签名: 孙晓明 2016 年 月 日系主任(或责任教师)签名: 年 月 日摘要锁是保护人类生命财产安全的重要工具。随着社会发展技术进步,人类发明了保密性能和防盗功能更强的电子密码锁,以取代传统的机械锁。电子密码锁的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其控制核心一般通过数字电路,单片机或FPGA实现。FPGA作为专用集成电路领域中的一种半定制电路,既解决了定制电路的
4、不足,又克服了原有可编程器件门电路数有限的缺点。相比单片机开发需要同时设计硬件电路与编写程序,FPGA开发以硬件描述语言来实现,可以更高效地实现电子密码锁的功能。本次电子密码锁设计通过使用Verilog HDL硬件描述语言在Max+plus软件环境下设计编译并仿真,下载至FPGA以实现需要的功能。关键词:电子密码锁;FPGA;Verilog HDL目录1 设计任务及要求分析11.1 设计任务11.2 任务要求分析12 方案设计及选择22.1 设计思路22.2 单片机设计方案22.3 FPGA设计方案22.4 方案选择33 基于FPGA的电子密码锁设计43.1 按键消抖模块设计53.2 控制模块
5、设计73.3 编码显示模块设计93.4 各模块组合设计104 调试记录及仿真结果分析124.1 调试记录124.2 仿真结果分析124.2.1 按键消抖模块仿真结果分析124.2.2 控制模块仿真结果分析134.2.3 编码显示模块仿真结果分析155 小结及体会16参考文献17附录18本科生能力拓展训练成绩评定表231 设计任务及要求分析1.1 设计任务设计一个4位电子密码锁:(1)用数据开关K1K10分别代表数字1,2,9,0,输入的密码用数码管显示;(2)最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位;(3)可删除输入的数字,删除的是最后输入的数字,每删
6、除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”;(4)用一位输出电平的状态代表锁的开闭状态;(5)在锁开的状态下输入密码,可以设置新密码;(6)设置一个万能密码,在主人忘记密码时使用。1.2 任务要求分析该电子密码锁输入信号来源有开关K1K10,设置密码键,密码核对键,退格键,关闭键;其输出信号为开闭状态,以及4个七段数码管显示。该电子密码锁输入输出信号与按键对应关系描述如下:(1)K1K10分别对应数字1,2,9,0,输入的密码用数码管显示;最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位;(2)按下退格键,可删除输入的数字,删除的是最后输
7、入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”;(3)在锁开的状态下输入密码,按下设置密码键后,可以设置新密码;(4)输入密码后按下密码核对键,用一位输出电平的状态代表锁的开闭状态;(5)在锁开状态下,按下关闭键,代表锁的开闭状态的一位输出电平出现关闭状态。2 方案设计及选择2.1 设计思路该电子密码锁的设计可以分多个模块进行,主要包括如密码输入模块,数据寄存模块,数码管编码显示模块,密码核对模块等。各个模块被分别设计并仿真成功后,再组合起来以构成完整的电子密码锁。2.2 单片机设计方案该电子密码锁的设计可使用80C51单片机与串行E2PROM实现。各功能模块主
8、要包括:密码输入模块,单片机控制模块,串行E2PROM密码存储模块以及编码显示模块。该方案由硬件电路设计与单片机程序编写两部分组成。其设计方案结构图如图2.1所示。图2.1 单片机设计方案结构图2.3 FPGA设计方案该电子密码锁的设计也可由FPGA现场可编程门阵列实现。各功能模块主要包括:按键输入消抖模块,控制模块以及七段数码管编码显示模块。该方案可以在Max+plus软件案件环境下经过使用Verilog HDL硬件描述语言编写,编译,调试和仿真等步骤后下载到FPGA实现。其设计方案结构图如图2.2所示。图2.2 FPGA设计方案结构图2.4 方案选择通过比较以上单片机设计方案与FPGA设计
9、方案发现:单片机设计方案包含硬件设计与软件设计两个部分,而FPGA设计方案只需通过使用硬件描述语言实现。后者设计时操作方便,仅需在软件环境下调试。因此,该电子密码锁设计选择上述FPGA设计方案。3 基于FPGA的电子密码锁设计该FPGA电子密码锁设计方案使用Verilog HDL语言描述,其程序流程图如图3.1所示。图3.1 程序流程图3.1 按键消抖模块设计该按键消抖模块源程序如下:/设置密码键,核对密码键,退格键,关锁键消抖程序module key_jitter_4(clk_in,key_in,set,check,delete,close);input clk_in;input 3:0 k
10、ey_in;output set,check,delete,close;reg 3:0 key_in_a;reg 3:0 key_in_b;wire 9:0 changed;reg 19:0 timer;reg set,check,delete,close;/检测输入信号变化always (posedge clk_in)beginkey_in_a = key_in;key_in_b = key_in_a;end/输入信号变化计数器assign changed = key_in_b&(key_in_a);always (posedge clk_in)if(changed)timer = 0;el
11、setimer = timer + 1b1;/输入信号超过20ms不变化即可输出该信号always (posedge clk_in) if(timer = 20hfffff)set,check,delete,close = key_in;endmodule/数字键K1K10消抖程序module key_jitter_10(clk_in,key_in,key_out);input clk_in;input 9:0 key_in;output 9:0 key_out;reg 9:0 key_in_a;reg 9:0 key_in_b;reg 19:0 timer;reg 9:0 key_out;w
12、ire 9:0 changed;/检测输入信号变化always (posedge clk_in)beginkey_in_a = key_in;key_in_b = key_in_a;end/输入信号变化计数器assign changed = key_in_b&(key_in_a);always (posedge clk_in) if(changed) timer = 0; elsetimer = timer + 1b1;/输入信号超过20ms不变化即可输出该信号always (posedge clk_in)beginif(timer = 20hfffff)begin key_out = key
13、_in;endendendmodule该4位与10位按键消抖模块电路图分别如图3.2,图3.3所示。图3.2 4位按键消抖模块电路图图3.3 10位按键消抖模块电路图3.2 控制模块设计该控制模块源程序如下:module controller_3(in,back,check,set,close,lock,clk,num1,num2,num3,num4);input back,check,set,close;input 9:0in;input clk;output lock;output3:0num1,num2,num3,num4;reg3:0num1,num2,num3,num4;reg15:
14、0code;reg3:0temp;reg lock;always(posedge clk)beginif(in!=10b0000000000)/检测数字键输入,并将数值移位寄存begincase(in)10b0000000001:temp=4d1;10b0000000010:temp=4d2;10b0000000100:temp=4d3;10b0000001000:temp=4d4;10b0000010000:temp=4d5;10b0000100000:temp=4d6;10b0001000000:temp=4d7;10b0010000000:temp=4d8;10b0100000000:t
15、emp=4d9;10b1000000000:temp=4d0;endcasenum4=num3;num3=num2;num2=num1;num1=temp;endelse if(back)/按下退格键,移位寄存回上一状态beginnum1=num2;num2=num3;num3=num4;num4=1d0;endendalways(posedge clk)beginif(lock=0&check=1)/锁关时,按下核对密码键beginif(code=num4,num3,num2,num1)/与设置的密码想同,开锁lock=1;else if(16h0008=num4,num3,num2,num
16、1)/与万能密码同,开锁lock=1;endelse if(lock=1&close=1) /锁开时,检测关锁键lock=0;endalways(posedge clk)beginif(lock=1&set=1)/锁开时,检测设置密码键code=num4,num3,num2,num1;endendmodule该控制模块电路图如图3.4所示。图3.4 控制模块电路图3.3 编码显示模块设计编码显示模块源程序如下:/共阴极七段数码管编码显示模块module encoder(data_in,data_out);input 3:0 data_in ;output data_out ;reg 6:0 d
17、ata_out ;always (data_in)begincase(data_in)4d0:data_out=7b1111110;/04d1:data_out=7b0110000;/14d2:data_out=7b1101101;/24d3:data_out=7b1111001;/34d4:data_out=7b0110011;/44d5:data_out=7b1011011;/54d6:data_out=7b1011111;/64d7:data_out=7b1110000;/74d8:data_out=7b1111111;/84d9:data_out=7b1111011;/9default
18、:data_out=7b1111110;/0endcase endendmodule该编码显示模块电路图如图3.5所示。图3.5 控制模块电路图3.4 各模块组合设计将按键消抖模块,控制模块,编码显示模块组合得到该电子密码锁组合后的整体电路图。该各模块组合电路图如图3.6所示。图3.6 各模块组合电路图4 调试记录及仿真结果分析4.1 调试记录Max+plus的设计输入、逻辑综合、布局布线、仿真校验和编程下载等功能全部集成在统一的开发环境下,加快了动态开发和调试,缩短开发周期。各模块在Max+plus软件环境中,均遵循了新建Text Editor File,编译成功后建立Symbol Edit
19、or File;新建Graphic Editor File,使用已生成的Symbol Editor File作图,编译成功后建立Waveform Editor File,保存后使用Simulator仿真器进行波形仿真等步骤。各模块调试时显示正常。4.2 仿真结果分析4.2.1 按键消抖模块仿真结果分析4位按键消抖模块仿真结果如图4.1所示,10位按键消抖模块仿真结果如图4.2所示。图4.1 4位按键消抖模块仿真结果图4.1中输入信号key_in2置1后一段时间,对应的输出信号check去除了出现时间小于20ms的杂波并保留了大于20ms的波形。实现了按键消抖功能。图4.2 10位按键消抖模块仿
20、真结果图4.2中输入信号key_in9置1后一段时间,对应的输出信号key_out9去除了出现时间小于20ms的杂波并保留了大于20ms的波形。实现了按键消抖功能。4.2.2 控制模块仿真结果分析控制模块仿真波形如图4.3,图4.4,图4.5,图4.6所示。图4.3 输入万能密码解锁仿真结果图4.3中在in9.0输入万能密码后,输入信号check置1,输出信号lock置1。实现了输入万能密码解锁功能。图4.4 按下关锁键关锁仿真结果图4.4中在锁开状态下,输入信号close置1,输出信号lock置0。实现了关锁功能。图4.5 按下退格键删除一位仿真结果图4.5中依次输入了4位数字,输出信号nu
21、m4num1依次左移一位;输入信号back三次置1,每次back置1,输出信号num4num1依次右移一位。实现了删除一位的功能。图4.6 设置密码仿真结果图4.6中在开锁后输入新的密码,输入信号set置1以设置密码,接着输入信号close置1以关锁;关锁后,输入信号back置1将num1num4清零;清零后输入新密码,再将输入信号check置1以核对密码,输出信号lock置1表示开锁成功。实现了设置密码的功能。4.2.3 编码显示模块仿真结果分析编码显示模块仿真波形如图4.7所示。图4.7 编码显示模块仿真结果图4.7中将输入信号data_in3.0置为0001,接着输出信号data_out
22、6.0置为0110000。实现了编码显示功能。5 小结及体会通过本次设计训练,个人有了很多获得:一,了解了自身各种理论知识的不足之处,强化了自身知识水平;二,知道了理论必须与实践结合,各种技术才能真正达到熟练运用的程度;三,科学技术是严密谨慎的,不能有一丝马虎;四,本次电子密码锁设计在多种方案设计与比较时,进一步明白了单片机与FPGA的区别。FPGA程序可以并行执行,单片机程序是顺序执行;FPGA更偏向于硬件电路,而单片机更偏于软件,两者的应用领域和擅长点大有不同。在具体进行FPGA电子密码锁设计时,亦进一步了解了硬件描述语言如Verilog HDL语言与程序设计语言如C语言的不同,使用时前者
23、更像是在搭建硬件电路,需要对数字电路等学科知识有一定了解。参考文献1 徐海军,叶卫东FPGA在高性能数据采集系统中的应用J计算机技术与应用,20055:44-612 夏宇闻Verilog数字系统设计M北京:北京航空航天大学出版社,2013:166-210.3 JBhaskerVerilog HDL硬件描述语言M徐振林北京:机械工业出版社,2000:49-90.4 MEYERBAESE U数字信号处理的FPGA实现M刘凌北京:清华大学出版社,2006:1-495 孙晓明EDA实验指导书武汉:武汉理工大学教材中心,20071:1-256 李连华基于FPGA的电子密码锁设计J中国科技信息,2006,
24、2006.1:1-2附录程序清单:/按键消抖模块/设置密码键,核对密码键,退格键,关锁键消抖程序module key_jitter_4(clk_in,key_in,set,check,delete,close);input clk_in;input 3:0 key_in;output set,check,delete,close;reg 3:0 key_in_a;reg 3:0 key_in_b;wire 9:0 changed;reg 19:0 timer;reg set,check,delete,close;/检测输入信号变化always (posedge clk_in)beginkey_
25、in_a = key_in;key_in_b = key_in_a;end/输入信号变化计数器assign changed = key_in_b&(key_in_a);always (posedge clk_in)if(changed)timer = 0;elsetimer = timer + 1b1;/输入信号超过20ms不变化即可输出该信号always (posedge clk_in) if(timer = 20hfffff)set,check,delete,close = key_in;endmodule/数字键K1K10消抖程序module key_jitter_10(clk_in,k
26、ey_in,key_out);input clk_in;input 9:0 key_in;output 9:0 key_out;reg 9:0 key_in_a;reg 9:0 key_in_b;reg 19:0 timer;reg 9:0 key_out;wire 9:0 changed;/检测输入信号变化always (posedge clk_in)beginkey_in_a = key_in;key_in_b = key_in_a;end/输入信号变化计数器assign changed = key_in_b&(key_in_a);always (posedge clk_in) if(ch
27、anged) timer = 0; elsetimer = timer + 1b1;/输入信号超过20ms不变化即可输出该信号always (posedge clk_in)beginif(timer = 20hfffff)begin key_out = key_in;endendendmodule/电子密码锁控制模块module controller_3(in,back,check,set,close,lock,clk,num1,num2,num3,num4);input back,check,set,close;input 9:0in;input clk;output lock;output
28、3:0num1,num2,num3,num4;reg3:0num1,num2,num3,num4;reg15:0code;reg3:0temp;reg lock;always(posedge clk)beginif(in!=10b0000000000)/检测数字键输入,并将数值移位寄存begincase(in)10b0000000001:temp=4d1;10b0000000010:temp=4d2;10b0000000100:temp=4d3;10b0000001000:temp=4d4;10b0000010000:temp=4d5;10b0000100000:temp=4d6;10b000
29、1000000:temp=4d7;10b0010000000:temp=4d8;10b0100000000:temp=4d9;10b1000000000:temp=4d0;endcasenum4=num3;num3=num2;num2=num1;num1=temp;endelse if(back)/按下退格键,移位寄存回上一状态beginnum1=num2;num2=num3;num3=num4;num4=1d0;endendalways(posedge clk)beginif(lock=0&check=1)/锁关时,按下核对密码键beginif(code=num4,num3,num2,num
30、1)/与设置的密码想同,开锁lock=1;else if(16h0008=num4,num3,num2,num1)/与万能密码同,开锁lock=1;endelse if(lock=1&close=1) /锁开时,检测关锁键lock=0;endalways(posedge clk)beginif(lock=1&set=1)/锁开时,检测设置密码键code=num4,num3,num2,num1;endendmodule/共阴极七段数码管编码显示模块module encoder(data_in,data_out);input 3:0 data_in ;output data_out ;reg 6:
31、0 data_out ;always (data_in)begincase(data_in)4d0:data_out=7b1111110;/04d1:data_out=7b0110000;/14d2:data_out=7b1101101;/24d3:data_out=7b1111001;/34d4:data_out=7b0110011;/44d5:data_out=7b1011011;/54d6:data_out=7b1011111;/64d7:data_out=7b1110000;/74d8:data_out=7b1111111;/84d9:data_out=7b1111011;/9default:data_out=7b1111110;/0endcase endendmodule本科生能力拓展训练成绩评定表姓 名性 别专业、班级课程设计题目: 课程设计答辩或质疑记录:成绩评定依据:序 号1选题合理,目的明确(10分)2设计方案正确,具有可行性、创新性(20分)3设计结果(例如:硬件成果、软件程序)(25分)4态度认真、学习刻苦、遵守纪律(15分)5设计报告的规范化、参考文献充分(不少于5篇)(10分)6答辩(20分)总 分最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 2016 年 月 日32
限制150内