ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:53.58KB ,
资源ID:10086529      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10086529.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(密码锁verilog课程设计之欧阳总创编.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

密码锁verilog课程设计之欧阳总创编.docx

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

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

3、化方式进行设计,并用modersim软件对各个模块进行编写仿真。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_ledflag flag2 akeyvalue b c dsetreset设计原理:本连接模块通过flag信号下降沿触发,将keyvalue送入连接模块进行运算,当连续四个0和1键按下时,flag2产生一个矩形波,并将四个值分别送入a,b,c,d中

5、,如果按下的是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控制模块:因为这个密码锁是循环使用的,就一定有不同的状态。这里采用有限状态机的方法进行设计。所以把开锁过程分为三个部分:1.等待输入状态;2.重设密码状态;3.输出结果状态;状态转换图如下所示:控制模块接口图: fla

6、g2 ena a b c_led c d d_led set reseclkt设计原理:通过各种状态的转变,实现密码锁的开锁,报错,重设密码功能。当密码错误是ena=1;当重设密码成功时c_led置为1;当输入密码成功开锁时d_led为1。控制模块仿真如下:因为初设密码是0000,所以在第一个flag2的矩形波到来后,d_led出现一个矩形波,实际上不应该出现矩形,一直亮直到reset重置才行。或者设计一个计数器都行,虽然只是一些小错误,但如果在实际验证中可能现象就不易观察了。然后就是按下set键的模拟了,波形都达到了课设的要求。这是令人欣喜的,虽然经过了很多次的修改,实在是很不容易。4.实验

7、心得我从第二个星期的星期一开始做,本来只是随便做一下,但是看到周围同学都热情高昂,我也深受感染,然后开始查资料,后面看到这个状态机的方法很不错,很方便的解决了状态的转换问题,然后我就尝试这个方法。同时在写程序的时候我也遇到了很多了困难,其中最难找的错误就是逻辑错误,但是最终还是一一被我解决了。心中的成就感还是有一些的。通过此次的课设,使我对数字电路的设计有更深层次的了解(各种时序),对verilog语言的运用也更加熟练。由于时间和心力有限的原因,使我只能止步各个模块的设计了。本来还想联合仿真的,但是电脑里只装了modersim,其中又有一个键盘开关的硬件,还是比较难实现的。我想,如果我的程序下

8、载到fpga芯片里,那是一定会出现不少错误的,实际的情况往往更加复杂,这也是我的一大遗憾!最后我要感谢我的室友,感谢他们对我的关爱,在我将要放弃的时候鼓励我,使我积极向前。在此,我还要特别感谢英明兄的无私帮助,减少了我找编译错误的时间。还依稀记得上次的数电感觉也是如此,很不错啊。附:Verilog程序代码1.1 Key_board_input:module key_board_input(clk,a,b,keyvalue,flag ,q,j); input clk; input1:0 b; output reg1:0 a; output reg1:0 keyvalue; output reg

9、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;end 4b01_01:begin keyvalue=2b10;flag=1;j=3;end 4b01_10:begin keyvalue=2b11;flag=1;j=3;end default

10、:keyvalue=keyvalue; endcase begin j=j+1; if(j=3) flag=0; end end endmodule 1.2 key_board_test:timescale 1s/1smodule key_board_test(); reg clk; reg1:0 b; wire1:0 a; wire1:0 keyvalue; wire flag; wire q; wire 1:0 j; key_board_input u2(clk,a,b,keyvalue,flag,q,j); initial begin #0 clk=0; #2 clk=1;b=1; #2

11、 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,flag2,a,b,c,d,set1,reset,jishu,jishu1,jishu2,hh);input flag;input 1

12、: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 jishu=jishu+1; end if(jishu=0) flag2=0; if(keyvalue=2) begin

13、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_led=0; b_led=1; end 2:begin set1=1; end

14、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 endcaseend 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 set1=1; end 3:begin

15、 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 endcaseend endcase endendmodule2.2 connect_test:timescale 1s/1smodule connect_test(); reg flag; reg1:0 keyvalue; wire a_l

16、ed,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;keyv

17、alue=0; #2 flag=0; #2 flag=1;keyvalue=1; #2 flag=0; #2 flag=1;keyvalue=0; #2 flag=0; end endmodule3.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 stat

18、e=0; output reg 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;

19、control_set=0; hhh=0; end else 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:be

20、gin if(reset=1) state=in; else begin if(a=a1&b=b1&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 endmodule3.2 control_test:timescale 1s/1smodule control_test(); reg clk,flag2,a,b,c,d,set1,reset; wire ena,c_led,d_led,control_set;

21、 wire 1:0 state; wire a1,b1,c1,d1; wire hhh; control u2(clk,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 r

22、eset=0; #50 set1=1; #20 a=1; set1=0; #20 b=1; #20 c=0; #20 d=0;flag2=1; #20 flag2=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 学号:201420130326课程设计题目:4位串行数字密码锁项目内容满分实 评选题能结合所学课程知识、有一定的能力训练

23、。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总 分100指导教师评语: 指导教师签名: 年 月 日时间:2021.02.13创作:欧阳总

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1