密码锁课程设计.pdf

上传人:l*** 文档编号:74270846 上传时间:2023-02-25 格式:PDF 页数:15 大小:292.81KB
返回 下载 相关 举报
密码锁课程设计.pdf_第1页
第1页 / 共15页
密码锁课程设计.pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《密码锁课程设计.pdf》由会员分享,可在线阅读,更多相关《密码锁课程设计.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、课程设计报告 课程设计题目:4 位串行数字密码锁 学 号 学生姓名:谢渊良 专 业:通信工程 班 级:1421302 指导教师:钟凯 2017 年 1 月 5 日 1.摘要 随着科技的发展数字电路的各种产品广泛应用,传统的机械锁由于其构造的简单,安全性不高,电子密码锁其保密性高,使用灵活性好,安全系数高,使用方便,将会是未来使用的趋势。本设计使用EDA 设计使设计过程廷到高度自动化,其具有强大的设计功能、测试、仿真分析、管理等功能。使用EDA 环境完成电路的系统综合设计和仿真。用VHDL 可以更加快速、灵活地设计出符合各种要求的密码锁。本设计基于 Verilog HDL语言来设计密码锁,先介绍

2、设计要求和整体设计思想,随后对所使用各模块分别为键盘模块、连接模块、控制模块进行了介绍,给出各个模块的主要代码,在对各个模块的功能进行仿真。关键字:密码锁 Verilog HDL 2.设计内容 设计一个 4 位数字密码锁子系统 1)1.2 设计要求 开锁密码为 4 位二进制,当输入密码与锁内给定的密码一致时,方可开锁。否则进入“错误”状态,发出报警信号。2)锁内的密码可调。3)串行数字密码锁的报警,直到按下复位开关,才停下。此时,数字密码锁又自动等待下一个开锁状态。3.系统设计 本设计中,FPGA 系统采用硬件描述语言 Verilog 按模块化方式进行设计,并用modersim 软件对各个模块

3、进行编写仿真。3.1 键盘模块 键盘电路理想接口图:0 1 flag Set Reset key_value 键盘模块 设计原理:本模块采用 22 的扫描键盘电路,对输入信号进行采集,此模块的主要功能是每按下一个按键,flag 产生一个矩形波,作为连接模块的触发信号。同时 key_value 值为所按下键的编码值,与 flag 一同传入连接模块。实际设计接口图:b a flag key_value 键盘模块仿真图:跟据图中所示当输出 kevalue:10 值的时候,flag 出现一个矩形波。当输出 kevalue:11 值的时候,flag 再次出现上跳沿。实际上,上面的图写的测试文件是有一点错

4、误的,当a 扫描到第三个值(01)时,b 在实际电路中应该是 01 而不是 11,此时根据程序 flag 应置为 1,当然此时flag 本来就是 1,不会发生错误。在实际中,时钟频率跳的如此之快,人按一下按键的持续时间还是有的,所以 flag 应在按键按完后再下降下来。不然多出很多无用的矩形波,这个装置就没用了。3.2 连接模块 连接模块接口图:a_led b_led flag flag2 a keyvalue b c d set reset 设计原理:本连接模块通过 flag 信号下降沿触发,将 keyvalue 送入连接模块进行运算,当连续四个 0 和 1键按下时,flag2 产生一个矩形

5、波,并将四个值分别送入 a,b,c,d 中,如果按下的是 set 键,则 set 置 1,如果按下的是 reset 键,则 reset 键置 1;a_led,b_led 是灯泡,如果按的是 0 键,则 a_led 置 1,若是 1 键,则 b_led置 1。连接模块仿真图如下:这里有一个需要注意的点是,当第一次按了 0 键后马上按 reset 键,再按一下 1 键时,a 的值是 1,而不是0。每次按了 reset 或 set,a,b,c,d 都是要重新赋值的,这才符合实际情况。3.3 控制模块:因为这个密码锁是循环使用的,就一定有不同的状态。这里采用有限状态机的方法进行设计。所以把开锁过程分为

6、三个部分:1.等待输入状态;2.重设密码状态;3.输出结果状态;状态转换图如下所示:控制模块接口图:flag2 ena a b c_led 键盘模块 连接模块 等待输入状态 Set=1 输完密码标志 控制模块 c d d_led set rese clkt 设计原理:通过各种状态的转变,实现密码锁的开锁,报错,重设密码功能。当密码错误是 ena=1;当重设密码成功时 c_led 置为 1;当输入密码成功开锁时 d_led 为 1。控制模块仿真如下:因为初设密码是 0000,所以在第一个 flag2 的矩形波到来后,d_led 出现一个矩形波,实际上不应该出现矩形,一直亮直到 reset 重置才

7、行。或者设计一个计数器都行,虽然只是一些小错误,但如果在实际验证中可能现象就不易观察了。然后就是按下 set 键的模拟了,波形都达到了课设的要求。这是令人欣喜的,虽然经过了很多次的修改,实在是很不容易。4.实验心得 我从第二个星期的星期一开始做,本来只是随便做一下,但是看到周围同学都热情高昂,我也深受感染,然后开始查资料,后面看到这个状态机的方法很不错,很方便的解决了状态的转换问题,然后我就尝试这个方法。同时在写程序的时候我也遇到了很多了困难,其中最难找的错误就是逻辑错误,但是最终还是一一被我解决了。心中的成就感还是有一些的。通过此次的课设,使我对数字电路的设计有更深层次的了解(各种时序),对

8、 verilog 语言的运用也更加熟练。由于时间和心力有限的原因,使我只能止步各个模块的设计了。本来还想联合仿真的,但是电脑里只装了 modersim,其中又有一个键盘开关的硬件,还是比较难实现的。我想,如果我的程序下载到 fpga 芯片里,那是一定会出现不少错误的,实际的情况往往更加复杂,这也是我的一大遗憾!最后我要感谢我的室友,感谢他们对我的关爱,在我将要放弃的时候鼓励我,使我积极向前。在此,我还要特别感谢英明兄的无私帮助,减少了我找编译错误的时间。还依稀记得上次的数电感觉也是如此,很不错啊。附:Verilog程序代码 1.1 Key_board_input:module key_boar

9、d_input(clk,a,b,keyvalue,flag,q,j);input clk;input1:0 b;output reg1:0 a;output reg1:0 keyvalue;output reg flag;output reg q=1;output reg1:0 j=0;always(posedge clk)begin q=q+1;case(q)0:a=2b01;1:a=2b10;endcase case(a,b)4b10_01:begin keyvalue=2b00;flag=1;j=3;end 4b10_10:begin keyvalue=2b01;flag=1;j=3;e

10、nd 4b01_01:begin keyvalue=2b10;flag=1;j=3;end 4b01_10:begin keyvalue=2b11;flag=1;j=3;end default:keyvalue=keyvalue;endcase begin j=j+1;if(j=3)flag=0;end end endmodule 1.2 key_board_test:timescale 1s/1s module key_board_test();reg clk;reg1:0 b;wire1:0 a;wire1:0 keyvalue;wire flag;wire q;wire 1:0 j;ke

11、y_board_input u2(clk,a,b,keyvalue,flag,q,j);initial begin#0 clk=0;#2 clk=1;b=1;#2 clk=0;#2 clk=1;b=3;#2 clk=0;#2 clk=1;b=3;#2 clk=0;#2 clk=1;b=3;#2 clk=0;#2 clk=1;b=2;#2 clk=0;#2 clk=1;b=3;#2 clk=0;#2 clk=1;b=3;#2 clk=0;#2 clk=1;b=3;end endmodule 2.1 connect:module connect(flag,keyvalue,a_led,b_led,

12、flag2,a,b,c,d,set1,reset,jishu,jishu1,jishu2,hh);input flag;input 1:0keyvalue;output reg a_led,b_led,flag2,a,b,c,d,set1,reset;output reg 1:0 jishu=2b00;output reg 1:0jishu1=0,jishu2=0,hh=0;always(negedge flag)begin jishu2=jishu2+1;jishu1=jishu1+1;if(keyvalue2)begin if(jishu=3)begin jishu=0;end else

13、jishu=jishu+1;end if(jishu=0)flag2=0;if(keyvalue=2)begin hh=jishu1;jishu=0;end if(jishu1=(hh+1)begin set1=0;end if(keyvalue=2d3)begin hh=jishu2;jishu=0;end if(jishu2=(hh+1)begin reset=0;end /*if(jishu=0)flag2=0;/*?set?*/case(jishu)0:begin case(keyvalue)0:begin a=0;a_led=1;b_led=0;end 1:begin a=1;a_l

14、ed=0;b_led=1;end 2:begin set1=1;end 3:begin reset=1;end endcase end 1:begin case(keyvalue)0:begin b=0;a_led=1;b_led=0;end 1:begin b=1;a_led=0;b_led=1;end 2:begin set1=1;end 3:begin reset=1;end endcase end 2:begin case(keyvalue)0:begin c=0;a_led=1;b_led=0;end 1:begin c=1;a_led=0;b_led=1;end 2:begin s

15、et1=1;end 3:begin reset=1;end endcase end 3:begin case(keyvalue)0:begin d=0;a_led=1;b_led=0;flag2=1;end 1:begin d=1;a_led=0;b_led=1;flag2=1;end 2:begin set1=1;end 3:begin reset=1;end endcase end endcase end endmodule 2.2 connect_test:timescale 1s/1s module connect_test();reg flag;reg1:0 keyvalue;wir

16、e a_led,b_led,flag2,a,b,c,d,set1,reset;wire 1:0jishu;wire1:0 jishu1,jishu2,hh;connect u2(flag,keyvalue,a_led,b_led,flag2,a,b,c,d,set1,reset,jishu,jishu1,jishu2,hh);initial begin#0 flag=0;#2 flag=1;keyvalue=1;#2 flag=0;#2 flag=1;keyvalue=3;#2 flag=0;#2 flag=1;keyvalue=0;#2 flag=0;#2 flag=1;keyvalue=0

17、;#2 flag=0;#2 flag=1;keyvalue=1;#2 flag=0;#2 flag=1;keyvalue=0;#2 flag=0;end endmodule 3.1 control:module control(clk,flag2,a,b,c,d,set1,reset,control_set,ena,c_led,d_led,state,a1,b1,c1,d1,hhh);input clk,flag2,a,b,c,d,set1,reset;output reg ena,c_led,d_led,control_set;output reg1:0 state=0;output reg

18、 a1=0,b1=0,c1=0,d1=0;output reg hhh=0;parameter in=2b00,set=2b01,out1=2b10;always(posedge clk or posedge set1 or posedge reset or flag2)begin case(state)in:begin if(reset=1)state=in;else if(set1=1)begin state=set;control_set=1;end else if(control_set=1&hhh=1)begin state=in;control_set=0;hhh=0;end el

19、se if(flag2=1)state=out1;else begin ena=0;c_led=0;control_set=0;d_led=0;end end set:begin if(reset=1)state=in;else if(set1=1)begin state=set;control_set=1;end else if(flag2=1&control_set=1)begin a1=a;b1=b;c1=c;d1=d;hhh=1;c_led=1;state=in;end end out1:begin if(reset=1)state=in;else begin if(a=a1&b=b1

20、&c=c1&d=d1)begin ena=0;d_led=1;state=in;end else begin ena=1;state=out1;end end end default:state=in;endcase end endmodule 3.2 control_test:timescale 1s/1s module control_test();reg clk,flag2,a,b,c,d,set1,reset;wire ena,c_led,d_led,control_set;wire 1:0 state;wire a1,b1,c1,d1;wire hhh;control u2(clk,

21、flag2,a,b,c,d,set1,reset,control_set,ena,c_led,d_led,state,a1,b1,c1,d1,hhh);always#10 clk=clk;initial begin clk=0;reset=0;flag2=0;a=0;b=0;c=0;d=0;set1=0;reset=0;#10 a=0;#20 b=0;#20 c=0;#20 d=0;flag2=1;#20 flag2=0;#50 reset=1;#20 reset=0;#50 set1=1;#20 a=1;set1=0;#20 b=1;#20 c=0;#20 d=0;flag2=1;#20 f

22、lag2=0;#20 reset=1;#20 reset=0;#80 a=0;#20 b=0;#20 c=0;#20 d=0;flag2=1;#20 flag2=0;#20 reset=1;#20 reset=0;end endmodule 东华理工大学 课程设计评分表 学生姓名:谢渊良 班级:1421302 课程设计题目:4 位串行数字密码锁 项目内容 满分 实 评 选 题 能结合所学课程知识、有一定的能力训练。符合选题要求(5 人一题)10 工作量适中,难易度合理 10 能 力 水 平 能熟练应用所学知识,有一定查阅文献及运用文献资料能力 10 理论依据充分,数据准确,公式推导正确 10 能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等 10 能体现创造性思维,或有独特见解 10 成 果 质 量 总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰 10 设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准 10 有一定篇幅,字符数不少于 5000 10 总 分 100 指导教师评语:指导教师签名:年 月 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁