基于VHDL4位电子密码锁的设计_第1页
基于VHDL4位电子密码锁的设计_第2页
基于VHDL4位电子密码锁的设计_第3页
基于VHDL4位电子密码锁的设计_第4页
基于VHDL4位电子密码锁的设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大连理工大学本科实验报告题目:基于VHDL 4位电子密码锁的设计课程名称: 数字电路课程设计 学院(系):电子信息与电气工程专 业: 电子英强 班 级: 学生姓名: 学 号: 完成日期: 成 绩: 2013 年 7 月 08 日题目:基于VHDL 4位电子密码锁的设计1 设计要求电子密码锁为4位8421BCD码,多于4位,密码只取前4位。在输入密码错误,给出一个错误信号,有三次输入机会,若三次密码都输入错误,则给出一个报警信号,此后只能由密码管理员取消报警信号。在输入密码正确的情况下,可以再次设定密码。每次输入一个密码,将显示在7段数码管上,并依次左移。每次输入密码的时候,按取消(cancel

2、)键可以取消这次密码的输入,课重新输入4位密码。2 设计分析及系统方案设计在实验室DE2开发板的条件下,考虑到key键只有4个,可以用switch开关来实现密码输入模块,用switch9switch0 来实现数字90的输入,并通过译码模块将其转化为8421BCD码,由8421BCD码来驱动7段数码管作为密码锁的显示模块。每按一个键,产生一个上升沿,给4个数码管做时钟,实现没输入一个数左移一位的效果。为了实现密码输入多于4位,可以构造一个模为4的计数器来控制只取前4位密码。共有三次输入密码的机会,可以构造一个模为3的计数器来控制。密码比较模块:当按下确定键(yes)键,则将输入的密码和内置密码进

3、行比较。密码输入模块:当输入密码正确时,再输入密码,利用重置密码键(set_psw)直接将其赋值给内置的密码psw即可实现。LED显示模块,用来显示密码输入的正确与否。若输入密码与内置密码一致,则锁打开,输出一个高电平给LEDG,绿灯亮,密码错误则输出一个高电平给LEDR,红灯亮。综合上述分析,本系统的硬件部分主要由密码锁输入译码模块、密码锁显示模块、密码锁控制模块、密码比较和重置模块和LED显示模块五个部分组成。LED显示模块密码锁比较和重置密码锁显示模块密码锁输入译码密码锁控制模块3系统以及模块硬件电路设计说明:1. 密码锁显示模块:段数码管是电子开发过程中常用的输出显示设备。在本设计中使

4、用的是4个四位一体、共阳极型七段数码管。其单个静态数码管如右图所示。2.密码输入和译码模块:用switch90实现数字9到0的输入。resetstart Out0 密码锁输入和译码 q(4 downto 0)分频器Out1 clk Clk_inOut2Num9至Num0CancelOut3yes密码比较和重置CorrectOut_erroralarmOut_q(15 downto 0)Psw(15 downto 0)Set_pswDE2开发板上使用的元件的管脚编号如下:端口名FPGA管脚说明alarmpin_af23报警信号,红灯亮cancelpin_v1取消密码输入clkpin_n250MH

5、z时钟correctpin_ae22密码正确,绿灯亮num0pin_n25输入数字0到9num1pin_n26num2pin_p25num3pin_ae14num4pin_af14num5pin_ad13num6pin_ac13num7pin_c13num8pin_b13num9pin_a13out00pin_af10u0数码管out01pin_ab12out02pin_ac12out03pin_ad11out04pin_ae11out05pin_v14out06pin_v13out10pin_v20u1数码管out11pin_v21out12pin_w21out13pin_y22out14p

6、in_aa24out15pin_aa23out16pin_ab24out20pin_ab23u2数码管out21pin_v22out22pin_ac25out23pin_ac26out24pin_ab26out25pin_ab25out26pin_y24out30pin_y23u3数码管out31pin_aa25out32pin_aa26out33pin_y26out34pin_y25out35pin_u22out36pin_w24out_errorpin_ae23密码错,红灯亮resetpin_v2管理员权限,为0时取消报警信号set_pswpin_n23设置密码startpin_u4开始输

7、入密码信号yespin_g26确定信号4 系统的VHDL设计说明1.分频模块,即做一个模5000的计数器,从而将50MHz的时钟转化为10000Hz的时钟。2.密码锁输入和译码,显示模块。switch9switch0模拟数字90的输入,例如switch9为高电平,而其他为低电平,则通过程序译码为9,同时产生一个clock时钟上升沿,由于人操作的时间必定大于0.00001s(即10000Hz的时钟周期),所以在下次按键是,clock已经回到低电平,此后再按键clock又产生一个上升沿。由此构造的clock时钟可以为左移寄存器当时钟。3.密码显示模块:switch改变一次,即每输入一个数,译码产生

8、一个四位的BCD码,来驱动数码管。并随着clock上升沿,依次左移显示。4.密码比较和重置模块:在输入了4位密码后,16位BCD码已经保存在out_q里,通过与内置密码比较即可。数码管的真值表(0代表亮,1代表不亮)q3q2q1q0012345600000000001000110011110010001001000110000110010010011000101010010001100100000011100011111000000000010010000100VHDL源代码.主程序coded_lock代码:library ieee;use ieee.std_logic_1164.all;us

9、e ieee.std_logic_unsigned.all;entity coded_lock isport(clk: in std_logic; start:in std_logic; reset:in std_logic; num:in std_logic_vector(9 downto 0); out3,out2,out1,out0:out std_logic_vector(6 downto 0); correct: buffer std_logic; yes:in std_logic; -admin:in std_logic; set_psw:std_logic; alarm: out

10、 std_logic; cancel: in std_logic; out_error: buffer std_logic); end;architecture behave of coded_lock is-*component decoder is -显示译码器的元件例化port(qq:in std_logic_vector(3 downto 0);result: out std_logic_vector(6 downto 0);end component;-*-out_q为4位密码锁的8421BCD码signal q:std_logic_vector(3 downto 0);-输入一个9

11、0的数字,q为其8421BCD码signal clock : std_logic:='0'-每按一次键,clock输出一个上升沿signal counter: integer range 0 to 2:=0;-模为3的计数器signal cnt4: integer range 0 to 4:=0;-模为5的计数器signal enable: std_logic:='1' -当输错3次密码,则此使能端为0,使无法译码-默认密码为9876signal clk_in: std_logic; -5000分频之后的时钟begin-*process(clk_in,start

12、,reset,enable) beginif reset='0' thenclock<='0'elsif rising_edge(clk_in) then if start='1' and enable='1' thencase num is -按个键,clock来一个上升沿when "1000000000"=>q<="1001"clock<='1'when "0100000000"=>q<="1000&quo

13、t;clock<='1'when "0010000000"=>q<="0111"clock<='1'when "0001000000"=>q<="0110"clock<='1'when "0000100000"=>q<="0101"clock<='1'when "0000010000"=>q<="0100&quo

14、t;clock<='1'when "0000001000"=>q<="0011"clock<='1'when "0000000100"=>q<="0010"clock<='1'when "0000000010"=>q<="0001"clock<='1'when "0000000001"=>q<="0000&quo

15、t;clock<='1'when others =>q<="1111"clock<='0'end case;else null;end if;end if;end process;-*-左移进程,按下一个按键则clock输出一个高电平,显示译码器左移process(clock,yes,start,reset,cancel)beginif reset='0' thencorrect<='0'out_error<='0'counter<=0;enable&l

16、t;='1'alarm<='0'elsif cancel='1' thencorrect<='0'out_error<='0'out_q<="0000000000000000"cnt4<=0; -使计数器清零,重新开始译码elsif start='0' then cnt4<=0;out_q<="0000000000000000"elseif rising_edge(clock) thenif cnt4=4 thennu

17、ll;elseout_q<=out_q(11 downto 0) & q;cnt4<=cnt4+1;end if;end if;if falling_edge(yes) thenif out_q=psw thencorrect<='1'out_error<='0'alarm<='0'elsif counter=2 thencorrect<='0'out_error<='1'alarm<='1'enable<='0'else

18、correct<='0'out_error<='1'alarm<='0'counter<=counter+1;end if;end if;end if;end process;-*process(correct,set_psw) -重新设置密码的进程beginif falling_edge(set_psw) thenif correct='1' then -输入密码正确才可以重新设置密码psw<=out_q;end if;end if;end process;-*-分频模块:将50Mz 的时钟分频为1

19、0000Hzprocess(clk)variable tem:integer range 0 to 4999;beginif rising_edge(clk) thenif tem=4999 then clk_in<='1'tem:=0;else tem:=tem+1;clk_in<='0'end if;end if;end process;-*u3:component decoder port map(qq=>out_q(15 downto 12),result=>out3);u2:component decoder port map(

20、qq=>out_q(11 downto 8),result=>out2);u1:component decoder port map(qq=>out_q(7 downto 4),result=>out1);u0:component decoder port map(qq=>out_q(3 downto 0),result=>out0);end behave;.decoder代码:library ieee;use ieee.std_logic_1164.all;entity decoder isport(qq:in std_logic_vector(3 dow

21、nto 0);result: out std_logic_vector(6 downto 0);end; architecture reg of decoder isbeginprocess(qq)begincase qq iswhen "0000"=>result<="1000000"when "0001"=>result<="1111001"when "0010"=>result<="0100100"when "0011&qu

22、ot;=>result<="0110000"when "0100"=>result<="0011001"when "0101"=>result<="0010010"when "0110"=>result<="0000010"when "0111"=>result<="1111000"when "1000"=>result<=&

23、quot;0000000"when "1001"=>result<="0010000"when others=>result<="1111111"end case;end process;end reg;5 结论以及结果说明计算机平台为window 7 64bit旗舰版,软件调试环境为Quartus6.0.使用的硬件芯片为EP2C35F672C6.下面试各个模块的仿真图:图1图1显示了密码输入和显示模块所实现的功能。当输入9,8,7,6,5五位密码时,数码管只显示前4位,即为“1000000”,“1111001”,“0100100”,“0110000”。由仿真图可知,输入一个密码,在4个数码管上依次左移。图2图2显示了密码若输错3次,则有个报警信号,即alarm为高电平。此时只有管理员将reset置于低电平,才能解除报警信号,即为是alarm为低电平。(默认密码为987

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论