您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > EDA课程设计(基于VHDL语言的8位数字密码锁设计)
1东华理工大学机械与电子工程学院基于VHDL语言的8位数字密码锁设计一、摘要:数字控制的电子密码锁已经广泛应用在办公室、公司、宾馆、小区住宅等场所。EDA技术的应用引起了电子产品系统开发的革命性变革。利用先进的EDA工具,基于硬件描述语言,可以进行系统级数字逻辑电路的设计。本文简述了VHDL语言的功能及其特点,并以8位串行数字锁设计为例,介绍了在QUARTUSII6.0开发软件下,利用VHDL硬件描述语言设计数字逻辑电路的过程和方法。关键词:QUARTUSII6.0EDA电子密码锁(电子设计自动化)VHDL语言语言设计串行密码锁硬件描述语言数字逻辑电路BasedonVHDLlanguage8digitscombinationlockdesignDigitalcontrolofelectroniclockshaswidelyusedinoffice,companies,hotels,residentialareaandetc.EDAtechnologyapplicationcausedaelectronicproductdevelopmentsystemoftherevolutionarytransformation.UsingadvancedEDAtools,hardwarebaseddescriptionlanguage,canundertakesystemindigitallogiccircuitdesign.ThispaperdescribesthefunctionandcharacteristicsofVHDLlanguage,andeightserialnumberlockdesignasanexample,thispaperintroducesQUARTUSII6.0softwaredevelopmentinofVHDL2hardwaredesignofdigitallogiccircuitprocessandmethod.Keywords:QUARTUSII6.0,EDA(electronicdesignautomation),electroniclocksandVHDLlanguage,languagedesign,serial,locksandhardwaredescriptionlanguage,digitallogiccircuit二、引言:电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁密码,更新或配制钥匙里开锁密码。一把电子锁可配制多把钥匙。语音方面的广泛应用,使得具有语音播放的电子密码锁使用起来更加方便。语音密码锁的体积小、保密性能好、使用方便,是用在保险箱、电话或是房门上不可少的部分。数字集成技术和电子设计自动化(E1ectronicDesignAutomation,EDA)技术的发展迅速,数字系统设计的理论和方法也在相应地变化和发展着。应用可编程逻辑器件(ProgrammableLogicDevice,PLD)实现数字系统的设计,是目前利用EDA技术设计数字系统的潮流。利用基于EDA技术的设计方法,设计者只需对系统功能进行描述,就可在EDA工具的帮助下完成系统设计。这种设计方法以数字系统设计软件为工具,将测试码或测试序列测试验证后,将系统实现在PLD芯片或专业集成电路上,这样最大程度地缩短了设计和开发时间,降低了成本,提高了系统的可靠性。本文详细介绍了基于EDA技术数字密码锁的设计过程。3三、密码锁系统的设计1、设计要求:数字密码锁的密码为8位十进制数字,密码可以设置和修改;开锁时间定为30秒;可用七段显示器显示开锁倒计时时间值;开锁计时时间30秒到,锁没开则用蜂鸣器报警,开锁时允许修改输入错误的密码数字。具体要求如下:(1)分析功能要求,设计系统构成模块,画出方框图。(2)编写模块的VerilogHDL语言的设计程序(3)在QuartusII软件或其他EDA软件上完成设计和仿真(4)根据实验装置上的CPLD/FPGA芯片,在是配时选择相应的芯片,将设计生成配置文件或JEDEC文件,然后将配置文件或JEDEC文件下载到实验装置上运行,操作实验装置上设定设定的功能开关,验证设计功能。2、设计分析此系统可以分为密码输入删除控制模块、寄存模块、比较并延时模块、扫描显示模块几部分。数字密码锁系统框图如图所示。密码输入与删除控制模块设计考虑:1)编码器:对数据开关K1...K10的电平信号,分别代表数字1...9,采用热码方式编码。2)设置与删除密码操作及显示按设计要求处理。3)信号设置Set密码确认信号——当8位密码输入完成,按set键则密4送锁存器锁存,比较模块得数据A、密码显示电路清零。Back:数字删除按键——每按一次删除最后输入的数字。Lock:密码锁状态显示信号——lock=0(LED灯灭)表示锁未开lock=1(LED灯亮)表示锁已开。Close:关锁信号——当密码送寄存器锁存后,按下close则密码锁lock=0,锁被锁上。Check:密码检验信号——在lock=0状态下,从数据开关输8位开锁密码后按下check,则开锁密码送寄存模块锁存为B。如果A=B,则D触发器置“1”,锁被打开,否则lock保持为0.万能密码:可以预设一个8位十进制数,如:“00000007”。数字密码锁系统框图:1LOCKCloseSdSetCheckBackK1k2..............k10开锁延时A=B比较模块1DC1AB寄存模块密码输入/删除控制模块扫描显示模块5四、软件设计按设计要求,下面给出VerilogHDL语言编写的数字密码锁参考程序。/*signaldefinen0,n1,n2,n3,n4,n5,n6,n7,n8,n9:dataswichingsignal;back:deletesignal;cheak:verifycodesignal;set:codeok;close:turnofflock;lock:statedisplay;warn:warningsignal;count:countersignala1,a2,a3,a4,a5,a6,a7,a8:codingoutputdisplay;*/modulelockcode(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,back,cheak,set,close,lock,warn,a1,a2,a3,a4,a5,a6,a7,a8,m1,m2,m3,m4,m5,m6,m7,m8,a,b,c,d,e,f,g,clk);parameterN=10;inputn0,n1,n2,n3,n4,n5,n6,n7,n8,n9;inputback,cheak,set,close,clk;outputlock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;reglock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;output[3:0]a1,a2,a3,a4,a5,a6,a7,a8;reg[3:0]a1,a2,a3,a4,a5,a6,a7,a8,temp,count;reg[2:0]flag,cnt;reg[31:0]code;always@(posedgeclk)begin//密码输入显示控制if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)begincase({n9,n8,n7,n6,n5,n4,n3,n2,n1,n0})10'b0000000001:temp=4'd0;10'b0000000010:temp=4'd1;10'b0000000100:temp=4'd2;10'b0000001000:temp=4'd3;10'b0000010000:temp=4'd4;10'b0000100000:temp=4'd5;10'b0001000000:temp=4'd6;10'b0010000000:temp=4'd7;610'b0100000000:temp=4'd8;10'b1000000000:temp=4'd9;endcasea8=a7;a7=a6;a6=a5;a5=a4;//输入密码时逐位左移a4=a3;a3=a2;a2=a1;a1=temp;endelseif(back)//密码删除控制begina1=a2;a2=a3;a3=a4;a4=a5;//右移a5=a6;a6=a7;a7=a8;a8=4'b0;endendalways@(posedgeclk)begin{m1,m2,m3,m4,m5,m6,m7,m8}=8'b0;//产生8位片选信号flag=flag+1;case(flag)0:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m1=1;end1:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m2=1;end2:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m3=1;end3:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m4=1;end4:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m5=1;end5:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m6=1;end6:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m7=1;end7:beginif({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000)m8=1;enddefault:flag=0;7endcasecase(temp)//七段显示4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111111;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'b1111110;endcaseendalways@(posedgeclk)beginif(cheak)begincount=count-1;//倒计时控制if(count==1)begin//开锁时密码检验if(code=={a8,a7,a6,a5,a4,a3,a2,a1})beginlock=1;warn=0;endelseif({a8,a7,a6,a5,a4,a3,a2,a1}==32'b11001100010000000010000000111)beginlock=1;warn=0;//万能密码设置endelsebeginlock=0;warn=1;//密码输错则报警endendendelseif(close)8beginlock=0;warn=0;count=16;//复位上锁endEndalways@(posedgeclk)//原始密码设置begi
本文标题:EDA课程设计(基于VHDL语言的8位数字密码锁设计)
链接地址:https://www.777doc.com/doc-6585142 .html