数字逻辑与数字系统设计
实验大作业报告
(2020年)
代码https://github.com/1190202002/logichomework.git
课程名称:数字逻辑与数字系统设计
任课教师:张彦航
作业题目:电子密码锁设计
完成人: 李艺峰
学号: 1190202002
班级: 1903010
报告日期:2020年 12 月 14 日
报告成绩
教师评语
1.设计要求
1.1设计一个开锁密码至少为4位数字(或更多)的密码锁。
1.2当开锁按扭开关(可设置8位或更多,其中只有4位有效,其余位为虚设)的输入代码等于所设密码时启动开锁控制电路,并且用绿灯亮、红灯灭表示开锁状态。
1.3从第一个按扭触动后的20秒内若未能将锁打开,则电路自动复位并发出报警信号,同时用绿灯灭、红灯亮表示关锁状态。
2.工作原理及系统方框图
2.1工作原理
预设4位十进制数字1369作为密码,将其转化为二进制password=16’b0001_0011_0110_1001进行储存。拨动R2,M4,N4,R1表示第一位密码的二进制{k1,k2,k3,k4},拨动U3(p1),若相等进行下一项比较,否则回到初始状态。重复上述过程,U2(p2),V2(p3),V5(p4)分别表示2,3,4位判断。初始时,0(red)灯亮,7(green)灯灭,3(warn)灯灭,表示未开锁。打开复位键P5(reset),进入20s倒计时。若20s内未打开,则0(red)灯亮,3(warn)灯亮,7(green)灯灭,表示进入报警状态;若20s内打开,则7(green)灯亮,0(red)灯灭,3(warn)灯灭,否则20s内为未开锁状态。关闭复位键P5(reset)恢复初始状态并保持。
2.2系统方框图
3.各部分模块具体功能及设计思路
3.1时钟模块
功能:进行计时,达到20s则重新计时。
设计思路:开发板时钟频率为100MHz,当次数达到2000000000次时达到20s。
3.2状态机
功能:输入密码后,进行状态转换。正确则变为下一状态,判断下一位;错误则返回原状态。20s后,若未开锁则进入报警状态。
设计思路:按三段式方式编写,第一段原态到新态转换,第二段指定新态的变化,第三段指定不同状态输出。
4.调试过程
在调试的过程中,首先设计的密码锁为输错一位直接进入报警状态。后来考虑到此方法通过一次次试验,最多只需40次即可验证出密码,安全性不够高。通过思考,将密码锁输错1位后直接回到初始状态,最多需要10000次才可得出密码,安全性够高。
5.设计结论
本项目采用FPGA,Verilog语言,状态机设计实现了一个密码锁,该密码锁实现了全部指定功能,包括完成了密码锁的基本功能。实现了开锁密码为4位十进制数字,当开锁按扭开关的输入等于所设密码时启动开锁控制电路,进入开锁状态。从复位按扭触动后的20秒内若未能将锁打开,则电路自动复位并发出报警信号,进入关锁状态。该密码锁还需要进一步完善的地方包括添加时间倒计时显示,这部分功能可能需要用到数码管显示操作。
6.设计心得与总结
6.1心得
设计时要先进行整体的设计,明确各个状态以及各状态之间的转换。在具体代码编写时可采用三段式进行状态机设计。在进行综合时,注意系统的提示与报错信息,针对具体的报错信息和代码进行改正。
6.2总结
通过对密码锁的设计,对于时序电路有了更深刻的认识,对于状态机的具体工作流程和代码编写都有了更大的进步。对于硬件设计和代码编写之间的联系更加了解,提升了自己硬件操作和系统编写能力。
参考文献:
[1] 于斌,黄海.Verilog HDL 数字系统设计及仿真.中国工信出版社,电子工业出版社.
附录