欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    基于VHDL-4位电子密码锁的设计.docx

    • 资源ID:845427       资源大小:61.74KB        全文页数:11页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于VHDL-4位电子密码锁的设计.docx

    大连理工大学本科实验报告题目:基于VHDL4位电子密码锁的设计课程名称:数字电路课程设计学院(系):电子信息与电气工程专业:电子英强班级:学生姓名:学号:完成口期:成绩:2023年7月08日题目:基于VHDL4位电子密码锁的设计1设计要求电子密码锁为4位842IBCD码,多于4位,密码只取前4位。在输入密码错误,给出一个错误信号,有三次输入时机,假设三次密码都输入错误,那么给出一个报警信号,此后只能由密码管理员取消报警信号。在输入密码正确的情况下,可以再次设定密码。每次输入一个密码,将显示在7段数码管上,并依次左移。每次输入密码的时候,按取消(cancel)键可以取消这次密码的输入,课重新输入4位密码。2设计分析及系统方案设计在实验室DE2开发板的条件下,考虑到key键只有4个,可以用SWitCh开关来实现密码输入模块,用SWitCh9switch0来实现数字90的输入,并通过译码模块将其转化为842IBCD码,由8421BCD码来驱动7段数码管作为密码锁的显示模块。每按一个键,产生一个上升沿,给4个数码管做时钟,实现没输入一个数左移一位的效果。为了实现密码输入多于4位,可以构造一个模为4的计数器来控制只取前4位密码。共有三次输入密码的时机,可以构造一个模为3的计数器来控制。密码比拟模块:当按下确定键(yes)键,那么将输入的密码和内置密码进行比拟。密码输入模块:当输入密码正确时,再输入密码,利用重置密码键(set_psw)直接将其赋值给内置的密码PSW即可实现。1.ED显示模块,用来显示密码输入的正确与否。假设输入密码与内置密码一致,那么锁翻开,输出一个高电平给LEDG,绿灯亮,密码错误那么输出一个高电平给LEDR,红灯亮。综合上述分析,本系统的硬件局部主要由密码锁输入译码模块、密码锁显示模块、密码锁控制模块、密码比拟和重置模块和LED显示模块五个局部组成。3系:说明用的(硬件电路昔卜示模块:Ki体、共F2.密码输入和译码模块:start reset用SWitCh9110实现数字9到O的输!入。CIkOut_(Psw(DE2开发板分频mK至NumCq(15dowI5downt<上使用的ClkJnelS输入和E让匕拟健q(4downto0)J!TtOO)30)-元件的郭Canc严密码锁密被sCorrectOut_erroralarmOut3端口名FP说明aIarmPi报警信号,红灯亮cancelP取消密码输入elkpin_n250MHz时钟correctPin_ae22密码正确,绿灯亮num0pin_n25输入数字0到9num1pin-1126num2pin_p25num3pin_ae14num4pin_af14num5Pin一ad13num6pin_ac13num7pin_c13num8pin_b13num9pjn_a13outO0pin_af10uo数码管outO1Pin一ab12out02pin_ac12outO3pinad11outO4pin_ae11outO5pin_v14outO6pin_v13out10pin_v20u1数码管out11pin_v21out12pin_w21out13Pin_v22out14pin_aa24out15Pin_aa23out16pin_ab24out20pin_ab23u2数码管out21pin_v22out22pin_ac25out23pin_ac26out24pin_ab26out25pin_ab25out26pin_y24out30pin23u3数码管out31pin_aa25out32pin_aa26out33pin_y26out34pin_y25out35pin_u22out36pin_w24out_errorpin_ae23密码错,红灯亮resetPin_v2管理员权限,为0时取消报警信号set_pswpin_n23设置密码startpin_u4开始输入密码信号yespin_g26确定信号4系统的VHDL设计说明1 .分频模块,即做一个模5000的计数器,从而将50MHZ的时钟转化为100OOHZ的时钟。2 .密码锁输入和译码,显示模块。SWitCh9switch0模拟数字90的输入,例如SWitCh为高电平,而其他为低电平,那么通过程序译码为9,同时产生一个ClOCk时钟上升沿,由于人操作的时间必定大于0.00001s(即100oOHZ的时钟周期),所以在下次按键是,clock已经回到低电平,此后再按键clock又产生一个上升沿。由此构造的clock时钟可以为左移存放器当时钟。3 .密码显示模块:SWitCh改变一次,即每输入一个数,译码产生一个四位的BCD码,来驱动数码管。并随着CIOCk上升沿,依次左移显示。4 .密码比拟和重置模块:在输入了4位密码后,16位BCD码已经保存在out_q里,通过与内置密码比拟即可。数码管的真值表(0代表亮,1代表不亮)Q3fl2QQo012345600000000001000110011I10010Q0100100011Q000I10010010011Q001010100100OllO0100()仆0011100011111000Q0()000010010000E00VHDL源代码©.主程序coded_lock代码:Iibraryieee;useieee.Std_IOgic_1164.a11;useieee.std_logic_unsigned.all;entitycoded_IockiSport(elk:instd_logic;start:instd_logic;reset:instd_logic;num:instd_Iogic_vector(9downto0);out3,out2,out1.outO:outstd_Iogic_vector(6downto0);correct:bufferstd_logic;yes:instd_logic:admin:instd_logic;set_psw:std_logic;alarm:outstd_logic;canceI:instd_logic;out_error:bufferstd_logic);end;architecturebehaveofcoded_lockisCOmPOnentdecoderis-显示译码器的元件例化port(qq:instd_Iogic-vector(3downtoO);result:outstd_Iogic_vector(6downtoO);endcomponent;out._q为4位密码锁的8421BCD码signaIq:std_Iogic_vector(3downtoO);一输入一个90的数字,q为其842IBCD码SignaIcIock:std_logic:='0*;-每按一次键,ClOCk输出一yTw上升沿signaIcounter:integerrangeOto2:=0;一模为3的计数器signaIcnt4:integerrange0to4:-0;一模为5的计数器signaIenable:std_logic:=,1,;一当输错3次密码,那么此使能端为0,使无法译码一默认密码为9876SignalClk_in:std_logic;-5000分频之后的时钟beginprocess(Clk_in,start,reset,enable)beginifreset='0,thenclock<,0,;eIsifrising_edge(cIk_in)thenifstart=11,andenable='1,thencasenumis一按个键,CloCk来一个上升沿when"1000000000,=>q<="1001"clock<=*1,;when"0100000000,=>q<="1000"cIock<='1'when"0010000000"=>q<="0111,;cIock<=,;when"0001000000,=>q<="0110"cIock<='1'when"0000100000"=>q<="010,clock<=,:when"0000010000"=>q<="0100"cIock<='when"0000001000"=>q<="0011"cIock<=,;when"0000000100"=>q<=,0010"cIock<=,1'when"0000000010"=>q<="0001":cIock<=,;when"0000000001"=>q<=,0000"CIock<='whenothers=>q<=',1111,jGock<=,0,:endcase;eIsenull;endif;endif:endprocess;一左移进程,按下一个按键那么cl。Ck输出一个高电平,显示译码器左移process(clock,yes,start,reset,cancel)beginifreset=,0,thencorrect<=,0,;out-error<=,0'counter<=0;enable<=,1,;alarm<=,0'eIsifcancel='1'thencorrect<'0,;out-error<=,0,;out_q<="0000000000000000"cnt4<=0:一使计数器清零,重新开始译码eIsifstart=,0,thencnt4<=0;out_q<="0000000000000000"elseifrising_edge(cIock)thenifcnt4=4thennull;eIseout_q<=out_q(11downto0)&q;cnt4<-cnt4+1;endif;endif;iffaIIing_edge(yes)thenifOUt_q二PSWthencorrect<='1'out-error<=,0,;alarm<=,O,;eIsifcounter=2thencorrect<=,0,;out_error<=,1,;alarm<='enable<=,O,;eIsecorrect<='O'out_error<=,1'alarm<=,O,;counter<=counter+1;endif;endif;endif;endprocess;process(correct,set_psw)重新设置密码的进程beginiffaIIing_edge(set_psw)thenifcorrect=,1,then-输入密码正确才可以重新设置密码psw<=out_q;endif;endif;endprocess;一分频模块:将50Mz的时钟分频为IoooOHZprocess(elk)variabletern:integerrange0to4999;beginifrising_edge(cIk)theniftem=4999thenckin<=,;tern:=O;elsetem:=tem+1;clk.in<=,0,;endif;endif;endprocess;u3:componentdecoderportmap(qq=>out_q(15downto12),resuIt=>out3);u2:componentdecoderportmap(qq=>out-q(11downto8),result=>out2);u1componentdecoderportmap(qq=>OUt_q(7downto4),result=>out1);u:componentdecoderportmap(qq=>out_q(3downto0),result=>outO);endbehave;.decoder代码:Iibraryieee;useieee.std-1ogic_1164.aII;entitydecoderisport(qq:instd_Iogic_vector(3downto0);resuIt:outstd_Iogic_vector(6downto0);end;architectureregofdecoderisbeginprocess(qq)begincaseqqiswhen"OOOO,=>resu11<="1000000"when"0001,=>resu11<="1111001"when,0010"=>result<="0100100,when"0011,=>result<=,0110000"when"0100,=>result<=,0011001"when"0101,=>resu11<="0010010"when,0110,=>resu11<=,0000010"when,0111"=>resu11<=,1111000"when"1000"=>result<=,0000000"when"1001,=>resu11<=,'001OOOOm;whenothers=>result<="1111111"endcase;endprocess;endreg;5结论以及结果说明计算机平台为WindOW764bit旗舰版,软件调试环境为QUartUSll6.0.使用的硬件芯片为EP2C35F672C6.下面试各个模块的仿真图:图1图1显示了密码输入和显示模块所实现的功能。当输入9,8,7,6,5五位密码时,数码管只显示前4位,即为,t1000000*,t1111001*,u0100100*,0110000*O由仿真图可知,输入一个密码,在4个数码管上依次左移。图2图2显示了密码假设输错3次,那么有个报警信号,即alarm为高电平。此时只有管理员将reset置于低电平,才能解除报警信号,即为是aIarm为低电平。默认密码为9876,上面的仿真图输入的密码依次为8765.9776,5432)图3图3显示了密码锁密码重置模块实现的功能。密码锁内置的密码为9876,当输入9876并yes给一个下降沿时,correct输出为高电平,此时在输入密码为5432,set_psw给一个下降沿,将5432设为新的密码。再输入9876,OUt_error为到电平,只有输入5432,correct才为高电平。图4图4显示了CanCel键的功能:按下CanCel键即CanCel为高电平,取消此次密码的输入,将4个数码管清零。结果说明:这次密码锁的设计过程说明,用VHDL可以快速、灵活地设计出符合要求的密码锁控制器,而且操作简单。可以实现密码输入、密码校验、密码设置和更改等功能。设计过程能够在设计完成后在QUartUSn环境下进行电路的模拟仿真,反应结果可以验证程序设计的可行性与可靠性。本密码锁控制器设置的是4位密码,在系统复位后,输入4位的密码串,并在4个7段数码管上依次左移。假设输入多于4位,密码只取前4位。输入完后,按下确定键,如果密码与内置密码一致,那么开锁,否那么继续输入,如果输入的密码3次都是错误的,那么系统报警,此时只有管理员能使报警声停止。同时,密码锁还具有密码修改功能,只有密码输入正确的情况下才能修改密码,符合实际生活中的情况。在设计VHDL程序的过程中,怎么实现每按一次键,数码管的数据左移一次成了这次程序的重点,后来在老师的点拨之下,才明白了要自己构建一个CLoCK时钟。在经过了一遍遍修改程序,编译,查错,一个模块一个模块的仿真,确定这一局部到达要求之后,再参加另外的功能。总而言之,本次设计实现了预期的功能。参考文献1王兢,王洪玉主编数字电路与系统.电子工业出版社,2023.2KennethL.Short著,乔庐峰等译VHDL大学实用教程,电子工业出版社,2023.

    注意事项

    本文(基于VHDL-4位电子密码锁的设计.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开