《基于VHDL-4位电子密码锁的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL-4位电子密码锁的设计.docx(11页珍藏版)》请在第壹文秘上搜索。
1、大连理工大学本科实验报告题目:基于VHDL4位电子密码锁的设计课程名称:数字电路课程设计学院(系):电子信息与电气工程专业:电子英强班级:学生姓名:学号:完成口期:成绩:2023年7月08日题目:基于VHDL4位电子密码锁的设计1设计要求电子密码锁为4位842IBCD码,多于4位,密码只取前4位。在输入密码错误,给出一个错误信号,有三次输入时机,假设三次密码都输入错误,那么给出一个报警信号,此后只能由密码管理员取消报警信号。在输入密码正确的情况下,可以再次设定密码。每次输入一个密码,将显示在7段数码管上,并依次左移。每次输入密码的时候,按取消(cancel)键可以取消这次密码的输入,课重新输入
2、4位密码。2设计分析及系统方案设计在实验室DE2开发板的条件下,考虑到key键只有4个,可以用SWitCh开关来实现密码输入模块,用SWitCh9switch0来实现数字90的输入,并通过译码模块将其转化为842IBCD码,由8421BCD码来驱动7段数码管作为密码锁的显示模块。每按一个键,产生一个上升沿,给4个数码管做时钟,实现没输入一个数左移一位的效果。为了实现密码输入多于4位,可以构造一个模为4的计数器来控制只取前4位密码。共有三次输入密码的时机,可以构造一个模为3的计数器来控制。密码比拟模块:当按下确定键(yes)键,那么将输入的密码和内置密码进行比拟。密码输入模块:当输入密码正确时,
3、再输入密码,利用重置密码键(set_psw)直接将其赋值给内置的密码PSW即可实现。1.ED显示模块,用来显示密码输入的正确与否。假设输入密码与内置密码一致,那么锁翻开,输出一个高电平给LEDG,绿灯亮,密码错误那么输出一个高电平给LEDR,红灯亮。综合上述分析,本系统的硬件局部主要由密码锁输入译码模块、密码锁显示模块、密码锁控制模块、密码比拟和重置模块和LED显示模块五个局部组成。3系:说明用的(硬件电路昔卜示模块:Ki体、共F2.密码输入和译码模块:start reset用SWitCh9110实现数字9到O的输!入。CIkOut_(Psw(DE2开发板分频mK至NumCq(15dowI5d
4、ownt上使用的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数码管
5、outO1Pin一ab12out02pin_ac12outO3pinad11outO4pin_ae11outO5pin_v14outO6pin_v13out10pin_v20u1数码管out11pin_v21out12pin_w21out13Pin_v22out14pin_aa24out15Pin_aa23out16pin_ab24out20pin_ab23u2数码管out21pin_v22out22pin_ac25out23pin_ac26out24pin_ab26out25pin_ab25out26pin_y24out30pin23u3数码管out31pin_aa25out32pin_aa
6、26out33pin_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时钟上升沿,
7、由于人操作的时间必定大于0.00001s(即100oOHZ的时钟周期),所以在下次按键是,clock已经回到低电平,此后再按键clock又产生一个上升沿。由此构造的clock时钟可以为左移存放器当时钟。3 .密码显示模块:SWitCh改变一次,即每输入一个数,译码产生一个四位的BCD码,来驱动数码管。并随着CIOCk上升沿,依次左移显示。4 .密码比拟和重置模块:在输入了4位密码后,16位BCD码已经保存在out_q里,通过与内置密码比拟即可。数码管的真值表(0代表亮,1代表不亮)Q3fl2QQo012345600000000001000110011I10010Q0100100011Q000I
8、10010010011Q001010100100OllO0100()仆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_I
9、ogic_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
10、);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_l
11、ogic;-5000分频之后的时钟beginprocess(Clk_in,start,reset,enable)beginifreset=0,thenclockq=1001;clockq=1000;cIockq=0111,;cIockq=0110;cIockq=010,clockq=0100;cIockq=0011;cIockq=,0010;cIockq=0001:cIockq=,0000;CIockq=,1111,jGock=,0,:endcase;eIsenull;endif;endif:endprocess;一左移进程,按下一个按键那么cl。Ck输出一个高电平,显示译码器左移proces
12、s(clock,yes,start,reset,cancel)beginifreset=,0,thencorrect=,0,;out-error=,0;counter=0;enable=,1,;alarm=,0;eIsifcancel=1thencorrect0,;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=