




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OGY课程设计题目:4位串行数字密码锁学号:201420130326学生姓名:谢渊良专业:通信工程班级:1421302指导教师:钟凯2017年1月5日1.摘要随着科技的发展数字电路的各种产品广泛应用,传统的机械锁由于其构造的简单,安全性不高,电子密码锁其保密性高,使用灵活性好,安全系数高,使用方便,将会是未来使用的趋势。本设计使用EDA设计使设计过程廷到高度自动化,其具有强大的设计功能、测试、仿真分析、管理等功能。使用EDA环境完成电路的系统综合设计和仿真。用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁。本设计基于VerilogHDL语言来设计密码锁,先介绍设计要求和整体设计思想,随
2、后对所使用各模块分别为键盘模块、连接模块、控制模块进行了介绍,给出各个模块的主要代码,在对各个模块的功能进行仿真。关键字:密码锁VerilogHDL设计内容设计一个4位数字密码锁子系统1)1.2设计要求开锁密码为4位二进制,当输入密码与锁内给定的密码一致时,方可开锁。否则进入“错误”状态,发出报警信号。2)锁内的密码可调。3)串行数字密码锁的报警,直到按下复位开关,才停下。此时,数字密码锁又自动等待下一个开锁状态。系统设计本设计中,FPGA系统采用硬件描述语言Verilog按模块化方式进行设计,并用modersim软件对各个模块进行编写仿真。3.1键盘模块键盘电路理想接口图:SeiResetA
3、key_value*flag设计原理:本模块采用2X2的扫描键盘电路,对输入信号进行采集,此模块的主要功能是每按下一个按键,flag产生一个矩形波,作为连接模块的触发信号。同时key_value值为所按下键的编码值,与flag一同传入连接模块。实际设计接口图:键盘模块-fflagZkey_value键盘模块仿真图:跟据图中所示当输出kevalue:10值的时候,flag出现一个矩形波。当输出kevalue:11值的时候,flag再次出现上跳沿。实际上,上面的图写的测试文件是有一点错误的,当a扫描到第三个值(01)时,b在实际电路中应该是01而不是11,此时根据程序flag应置为1,当然此时fl
4、ag本来就是1,不会发生错误。在实际中,时钟频率跳的如此之快,人按一下按键的持续时间还是有的,所以flag应在按键按完后再下降下来。不然多出很多无用的矩形波,这个装置就没用了。3.2连接模块连接模块接口图:设计原理:本连接模块通过flag信号下降沿触发,将keyvalue送入连接模块进行运算,当连续四个0和1键按下时,flag2产生一个矩形波,并将四个值分别送入a,b,c,d中,如果按下的是set键,则set置1,如果按下的是reset键,则reset键置1;aed,bed是灯泡,如果按的是0键,则a_led置1,若是1键,则b_led置1。连接模块仿真图如下:IIWave-DefaultMs
5、gs/connect_test/flag0_nLr-H-u-u-Q-/connect_tEst/keyv.00mpn:So-J/connect_tEst/aJedStl1-JJ/connect_tEsVb_led5tOn1LJ/connect_tEst/flag2StlJ/cQnnect_tEst/aSffi_r1J/connect_tEstybsto/connect_tEst/cStl/c0nnect_tEst/dstol_/connect_tEst/set1stoLJ/c0nnect_tEst/resetston土Q-J/connect_tEst/jishu00itoo:nto)Q-J/c
6、onnect_tEst/jishu111binpoo-:10IIL/connect_test/jishu211binDooPE:10IIL/connect_tEsVhh10阻加这里有一个需要注意的点是,当第一次按了0键后马上按reset键,再按一下1键时,a的值是1,而不是0。每次按了reset或set,a,b,c,d都是要重新赋值的,这才符合实际情况。3.3控制模块:因为这个密码锁是循环使用的,就一定有不同的状态。这里采用有限状态机的方法进行设计。所以把开锁过程分为三个部分:等待输入状态;重设密码状态;输出结果状态;状态转换图如下所示:控制模块*ena*cedd_ledflag2csetre
7、seclkt设计原理:通过各种状态的转变,实现密码锁的开锁,报错,重设密码功能。当密码错误是ena=l;当重设密码成功时ced置为1;当输入密码成功开锁时ded为1。控制模块仿真如下:因为初设密码是0000,所以在第一个flag2的矩形波到来后,ded出现一个矩形波,实际上不应该出现矩形,一直亮直到reset重置才行。或者设计一个计数器都行,虽然只是一些小错误,但如果在实际验证中可能现象就不易观察了。然后就是按下set键的模拟了,波形都达到了课设的要求。这是令人欣喜的,虽然经过了很多次的修改,实在是很不容易实验心得我从第二个星期的星期一开始做,本来只是随便做一下,但是看到周围同学都热情高昂,我
8、也深受感染,然后开始查资料,后面看到这个状态机的方法很不错,很方便的解决了状态的转换问题,然后我就尝试这个方法。同时在写程序的时候我也遇到了很多了困难,其中最难找的错误就是逻辑错误,但是最终还是一一被我解决了。心中的成就感还是有一些的。通过此次的课设,使我对数字电路的设计有更深层次的了解(各种时序)对verilog语言的运用也更加熟练。由于时间和心力有限的原因,使我只能止步各个模块的设计了。本来还想联合仿真的,但是电脑里只装了modersim,其中又有一个键盘开关的硬件,还是比较难实现的。我想,如果我的程序下载到fpga芯片里,那是一定会出现不少错误的,实际的情况往往更加复杂,这也是我的一大遗
9、憾!最后我要感谢我的室友,感谢他们对我的关爱,在我将要放弃的时候鼓励我,使我积极向前。在此,我还要特别感谢英明兄的无私帮助,减少了我找编译错误的时间。还依稀记得上次的数电感觉也是如此,很不错啊。附:Verilog程序代码1.1Key_board_input:modulekey_board_input(clk,a,b,keyvalue,flag,q,j);inputclk;input1:0b;outputreg1:0a;outputreg1:0keyvalue;outputregflag;outputregq=1;outputreg1:0j=0;always(posedgeclk)beginq=
10、q+1;case(q)0:a=2b01;1:a=2b10;endcasecase(a,b)4b10_01:beginkeyvalue=2b00;flag=1;j=3;end4b10_10:beginkeyvalue=2b01;flag=1;j=3;end4b01_01:beginkeyvalue=2b10;flag=1;j=3;end4b01_10:beginkeyvalue=2b11;flag=1;j=3;enddefault:keyvalue=keyvalue;endcasebeginj=j+1;if(j=3)flag=0;endendendmodule1.2key_board_test:
11、timescalels/lsmodulekey_board_test();regclk;regl:0b;wirel:0a;wirel:0keyvalue;wireflag;wireq;wirel:0j;key_board_inputu2(clk,a,b,keyvalue,flag,q,j);initialbegin#0clk=0;#2clk=l;b=l;#2clk=0;#2clk=l;b=3;#2clk=0;#2clk=l;b=3;#2clk=0;#2clk=l;b=3;#2clk=0;#2clk=1;b=2;#2clk=0;#2clk=1;b=3;#2clk=0;#2clk=1;b=3;#2
12、clk=0;#2clk=1;b=3;endendmoduleconnect:moduleconnect(flag,keyvalue,a_led,b_led,flag2,a,b,c,d,set1,reset,jishu,jishu1,jishu2,hh);inputflag;input1:0keyvalue;outputrega_led,b_led,flag2,a,b,c,d,set1,reset;outputreg1:0jishu=2b00;outputreg1:0jishu1=0,jishu2=0,hh=0;always(negedgeflag)beginjishu2=jishu2+1;ji
13、shu1=jishu1+1;if(keyvalue2)beginif(jishu=3)beginjishu=0;endelsejishu=jishu+1;endif(jishu=0)flag2=0;if(keyvalue=2)beginhh=jishu1;jishu=0;endif(jishu1=(hh+1)beginset1=0;endif(keyvalue=2d3)beginhh=jishu2;jishu=0;endif(jishu2=(hh+1)beginreset=0;end/*if(jishu=0)flag2=0;/*?set?*/case(jishu)0:begincase(key
14、value)0:begina=0;a_led=1;b_led=0;end1:begina=1;a_led=0;b_led=1;end2:beginset1=1;end3:beginreset=1;endendcaseend1:begincase(keyvalue)0:beginb=0;a_led=1;b_led=0;end1:beginb=1;a_led=0;b_led=1;end3:2:beginset1=1;end3:beginreset=1;endendcaseend2:begincase(keyvalue)0:beginc=0;a_led=1;b_led=0;end1:beginc=1
15、;a_led=0;b_led=1;end2:beginset1=1;end3:beginreset=1;endendcaseendbegincase(keyvalue)0:begind=0;a_led=1;b_led=0;flag2=1;end1:begind=1;a_led=0;b_led=1;flag2=1;end2:beginset1=1;end3:beginreset=1;endendcaseendendcaseendendmoduleconnect_test:timescalels/lsmoduleconnect_test();regflag;reg1:0keyvalue;wirea
16、_led,b_led,flag2,a,b,c,d,set1,reset;wire1:0jishu;wire1:0jishu1,jishu2,hh;connectu2(flag,keyvalue,a_led,b_led,flag2,a,b,c,d,set1,reset,jishu,jishu1,jishu2,hh);initialbegin#0flag=0;#2flag=1;keyvalue=1;#2flag=0;#2flag=1;keyvalue=3;#2flag=0;#2flag=1;keyvalue=0;#2flag=0;#2flag=1;keyvalue=0;#2flag=0;#2fla
17、g=1;keyvalue=1;#2flag=0;#2flag=1;keyvalue=0;#2flag=0;endendmodule3.1control:modulecontrol(clk,flag2,a,b,c,d,set1,reset,control_set,ena,c_led,d_led,state,a1,b1,c1,d1,hhh);inputclk,flag2,a,b,c,d,set1,reset;outputregena,c_led,d_led,control_set;outputreg1:0state=0;outputrega1=0,b1=0,c1=0,d1=0;outputregh
18、hh=0;parameterin=2b00,set=2b01,out1=2b10;always(posedgeclkorposedgeset1orposedgeresetorflag2)begincase(state)in:beginif(reset=1)state=in;elseif(set1=1)beginstate=set;control_set=1;endelseif(control_set=1&hhh=1)beginstate=in;control_set=0;hhh=0;endelseif(flag2=1)state=out1;elsebeginena=0;c_led=0;cont
19、rol_set=0;d_led=0;endendset:beginif(reset=1)state=in;elseif(set1=1)beginstate=set;control_set=1;endelseif(flag2=1&control_set=1)begina1=a;b1=b;c1=c;d1=d;hhh=1;c_led=1;state=in;endendout1:beginif(reset=1)state=in;elsebeginif(a=a1&b=b1&c=c1&d=d1)beginena=0;d_led=1;state=in;endelsebeginena=1;state=out1;endendenddefault:state=in;endcaseendendmodulecontrol_test:timescalels/lsmodulecontrol_test();regclk,flag2,a,b,c,d,setl,reset;wireena,c_led,d_led,control_set;wirel:0state;wireal,bl,cl,dl;wire
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国单列滚针和保持架组件行业投资前景及策略咨询研究报告
- 2025年水喷射真空泵项目建议书
- 理疗门店加盟合同范本
- 样本制作合同范本
- 2025至2030年中国蒸煮复合包装品数据监测研究报告
- 2025至2030年中国纸花篮数据监测研究报告
- 科技教育新动向品鉴会产品回顾与展望
- 科技发展对未来职业的影响及应对策略
- 面条厂转让合同范本
- 科技产品网络营销的独特之处
- 高校电子课件:现代管理学基础(第三版)
- 小企业会计实务全书ppt完整版课件整本书电子教案最全教学教程
- (完整word版)服务质量评价表
- 肠瘘治疗PPT医学课件(PPT 25页)
- 员工转正评价表
- 道路交通事故责任认定行政复议申请书范例
- 郑州大学图书馆平立剖面效果图
- 高效液相含量测定计算公式
- 公安机关通用告知书模板
- 《小学数学课程与教学》教学大纲
- 《手机摄影》全套课件(完整版)
评论
0/150
提交评论