《VHDL密码锁设计.doc》由会员分享,可在线阅读,更多相关《VHDL密码锁设计.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-/VHDL语言及应用课程设计论文-VHDL平台下密码锁的设计学院:电子信息学院专业: 学号: 姓名: 指导老师: 团队成员: 完成日期: 目录一. 引言-1二. 实验目的-1三. 实验任务与要求-1四. 设计原理及工作流程-24.1 密码锁设计原理-24.2 密码锁系统框图-24.3 密码锁设计提示-2五. 密码锁的顶层设计源程序-3六. 密码锁各功能模块源程序及其仿真分析-56.1 密码设定锁存器源程序及其仿真分析-56.2 密码输入锁存器源程序及其仿真分析-66.3 开锁控制系统源程序及其仿真分析-86.4 比较器源程序及其仿真分析-96.5 LED显示源程序及其仿真分析-116.6 顶
2、层源文件的仿真分析-12七. 密码锁设计源程序的下载调试-137.1 电路结构-137.2 管脚分配-147.3 程序下载调试过程-14八. 实验分析与总结-15九. 组内分工-16十. 参考文献-16一. 引言随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。因此人们对锁要求甚高,既要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。数字密码锁是二十一世纪制锁业的一次革命,锁的特点是不用钥匙、无锁孔、机械传动、不易损坏、不磨损、不易被破译、可多次更换密码、换号不换锁、一把锁多个密码,具有防拨、防
3、砸、防撬、防堵等功能。安装门锁时不破坏原门的结构,避免用钥匙开启旋芯式锁具的一切烦恼(如丢、落、拆、堵门被反锁等)。数字密码锁是利用数字密码来开启的锁具,其重复概率极低,有着很高的安全性;而旋芯式锁具使用不够安全。通过对社会各阶层千余人的调查,百分之百的人对目前身上挂着的串串钥匙无可奈何,都愿意一身轻松没有任何顾虑的出入家门,都愿意用上一种既安全方便又不用钥匙的锁具。因此,数字密码锁产品的市场发展前景极为广阔。而EDA 技术设计电子系统具有用软件的方式设计硬件,设计过程中可用有关软件进行各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计成本低,而且将提高
4、产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。可见,用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。本设计的各个模块由相应的VHDL程序具体实现,并在Quartus9.0环境下进行了整体电路的模拟仿真,最终实现“密码锁设计”的要求。二. 实验目的1. 掌握VHDL语言的使用,学会用VHDL语言来编程解决实际问题;2. 学会使用EDA开发软件设计小型综合电路,掌握仿真的技巧;3. 学会应用开发系统实现硬件电路,检验电路的功能;4. 设计一个八位二进制密码锁,实现所要求的功能。三. 实验任务与要求1、安锁状态。 按下开关
5、键SETUP,密码设置灯亮时,方可进行密码设置操作。设置初始密码09(或二进制8位数),必要时可以更换。再按SETUP键,密码有效。2、 开锁过程。(1) 、按启动键(START)启动开锁程序,此时系统内部应处于初始状态。(2) 、依次键入09(或二进制8位数)。(3) 、按开门键(OPEN)准备开门。若按上述程序执行且拨号正确,则开门指示灯A亮,若按错密码或未按上述程序执行,则按动开门键OPEN后,报警装置鸣叫、灯B亮。(4)、开锁处理事务完毕后,应将门关上,按SETUP键使系统重新进入安锁状态。若在报警状态,按SETUP键或START键应不起作用,应另用一按键RESET才能使系统进入安锁状
6、态。3、 使用者如按错号码可在按OPEN键之前,按START键重新启动开锁程序。4、 设计符合上述功能的密码锁,并用层次化方法设计该电路。5、 用功能仿真方法验证,通过观察有关波形确认电路设计是否正确。6、 完成电路设计后,通过在实验系统中下载,验证设计的正确性。四. 设计原理及工作流程4.1 密码锁设计原理如下示框图,密码锁系统主要由开锁控制,设置密码的锁存器,输入密码的锁存器,比较器,LED显示和报警系统几个部分组成。每一个模块功能的实现都是通过VHDL语言实现的,并通过顶层电路与例化语句将功能模块整合起来,之后对整个系统进行模拟仿真和硬件实现。4.2 密码锁系统框图4.3 密码锁设计提示
7、(1) 锁存器:用于实现设定密码和输入密码的锁存。(2) 比较器:用于将设定密码与输入密码相比较。其中,CLK为外部输入的时钟信号。若输入密码正确,则A灯亮;否则B灯亮,同时比较器输出与CLK一样的信号,驱动蜂鸣器发出报警声。(3) 开锁控制:当反馈信号下降沿来到时,开锁控制输出低电平,用于在输入错误密码后禁止再次安锁;当RESET脚为高电平时,开锁控制输出高电平,打开与门,这时锁存器1使能端的变化受控于SETUP键,重新进入安锁状态。(4) LED显示:用于设定密码或输入密码的显示。此项设计的目的是为了在下载演示时,能清楚地看到设置和输入的密码值。五. 密码锁的顶层设计源程序调用各模块形成元
8、件例化语句:LIBRARY IEEE;USE IEEE.std_logic_1164.All;ENTITY topfile ISPORT(SETUP,RESET,START,OPN,CLK:IN STD_LOGIC;setpassword:IN STD_LOGIC_VECTOR(7 DOWNTO 0);inputpassword:IN STD_LOGIC_VECTOR(7 DOWNTO 0);led_A,led_B,warner:OUT STD_LOGIC;DOUT11,DOUT12,DOUT21,DOUT22:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTI
9、TY topfile;ARCHITECTURE brf OF topfile ISCOMPONENT lockcontrolPORT (RESET,FEEDBACK:IN STD_LOGIC;Y:OUT STD_LOGIC);END COMPONENT;COMPONENT codesetPORT (ENABLE:IN STD_LOGIC;PASEWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT codeinputPORT (ENABLE:IN STD_L
10、OGIC;PASEWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT comparatorPORT (OPN,CLK,RESET:IN STD_LOGIC;rightpassword,password:IN STD_LOGIC_VECTOR(7 DOWNTO 0);A,B,warner:OUT STD_LOGIC;D11,D12,D21,D22:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT
11、 AND2PORT (a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;COMPONENT NOR2PORT (e,d:IN STD_LOGIC;f:OUT STD_LOGIC);END COMPONENT;COMPONENT LEDPORT (DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END COMPONENT;SIGNAL net1,net2:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL net8,net9,n
12、et10,net11:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL net3,net4,net5,net6,net7:STD_LOGIC;BEGINU0:lockcontrol PORT MAP(RESET=RESET,feedback=net3,y=net4);U1:AND2 PORT MAP(a=net3,b=START,c=net5);U2:AND2 PORT MAP(a=SETUP,b=net4,c=net6);U3:CODEINPUT PORT MAP(PASEWORD=inputpassword,ENABLE=net5,Q=net1);U4:codeset
13、 PORT MAP(PASEWORD=setpassword,ENABLE=net6,Q=net2);U5:comparator PORT MAP(rightpassword=net2,password=net1,OPN=OPN,CLK=CLK,A=led_A,B=net7,warner=warner,RESET=RESET,D12=net9,D11=net8,D21=net10,D22=net11);U6:NOR2 PORT MAP(e=net7,d=net7,f=net3);U7:LED PORT MAP(DATA=net8,DOUT7=DOUT11);U8:LED PORT MAP(DA
14、TA=net9,DOUT7=DOUT12);U9:LED PORT MAP(DATA=net10,DOUT7=DOUT21);U10:LED PORT MAP(DATA=net11,DOUT7=DOUT22);led_B=net7;END ARCHITECTURE brf;六. 密码锁各功能模块源程序及其仿真波形6.1密码设定锁存器源程序及其仿真波形源程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY codeset ISPORT(ENABLE:IN STD_LOGIC; PAS
15、SWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END codeset;ARCHITECTURE bhv OF codeset ISBEGINPROCESS(ENABLE,PASSWORD) BEGINIF ENABLE = 1 THENQ(7) = PASSWORD(7);Q(6) = PASSWORD(6);Q(5) = PASSWORD(5);Q(4) = PASSWORD(4);Q(3) = 0;Q(2) = 0;Q(1) = 0;Q(0) = 0;END IF;END PROCESS;E
16、ND bhv;仿真波形图为:使能控制端高电平时:使能控制端变回低电平时:由于硬件设备限制,不能检验全部端口,因此将低位的四位设置为低电平,通过改变使能控制端与高位的电平观察正确性。6.2 密码输入锁存器源程序及其仿真波形源程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY codeinput ISPORT(ENABLE:IN STD_LOGIC; PASSWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7
17、DOWNTO 0);END codeinput;ARCHITECTURE bhv OF codeinput ISBEGINPROCESS(ENABLE,PASSWORD) BEGINIF ENABLE = 1 THENQ(7) = PASSWORD(7);Q(6) = PASSWORD(6);Q(5) = PASSWORD(5);Q(4) = PASSWORD(4);Q(3) = 0;Q(2) = 0;Q(1) = 0;Q(0) = 0;END IF;IF ENABLE=0 THENQ = 00000000;END IF;END PROCESS;END bhv;仿真波形为:当使能信号为低电平,
18、锁存器输出状态保持不变,输入信号没有读入;当使能信号有低电平变为高电平,锁存器开始读入输入的信号。6.3 开锁控制系统源程序及其仿真波形源程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY lockcontrol IS PORT( FEEDBACK,RESET:IN STD_LOGIC; Y:OUT STD_LOGIC); END lockcontrol; ARCHITECTURE bhv OF lockcontrol IS BEGINPROCESS(FEEDBACK,RESET
19、) BEGIN Y = 1;IF FEEDBACK = 0 THEN Y = 0;END IF;IF RESET = 1 THENY = 1;END IF;END PROCESS; END bhv; 仿真波形为:FEEDBACK为反馈信号,RESET为重置密码信号。当反馈信号下降沿来到时,开锁控制输出Y低电平,用于在输入错误密码后禁止再次安锁;当RESET脚为高电平时,开锁控制输出高电平。6.4 比较器源程序以及仿真波形源程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;ENTITY comparator IS PORT(rightpassword,pa
20、ssword:IN STD_LOGIC_VECTOR(7 DOWNTO 0);OPN,CLK,RESET:IN STD_LOGIC;A,B,warner:OUT STD_LOGIC;D11,D12,D21,D22:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END comparator;ARCHITECTURE bhv OF comparator ISBEGINPROCESS(OPN,CLK,RESET,rightpassword,password)BEGIN D11(3) = rightpassword(7);D11(2) = rightpassword(6);D11(
21、1) = rightpassword(5);D11(0) = rightpassword(4);D12(3) = rightpassword(3);D12(2) = rightpassword(2);D12(1) = rightpassword(1);D12(0) = rightpassword(0);D21(3) = password(7);D21(2) = password(6);D21(1) = password(5);D21(0) = password(4);D22(3) = password(3);D22(2) = password(2);D22(1) = password(1);D
22、22(0) = password(0);IF OPN = 1 THENIF rightpassword = password THENA = 1;B = 0;warner = 0;END IF;IF rightpassword /= password THENA = 0;B = 1;warner = CLK; IF RESET = 1 THEN A = 0; B = 0; warner = 0;END IF;END IF;ELSE A = 0;B = 0;warner DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7=0000000
23、; END CASE; END PROCESS;END ARCHITECTURE a ;仿真波形为:可以由二进制代码的值判断出仿真结果真确,从图中还可以观察到,当输入的四位数中有两位及以上同时跳变时,出现了竞争冒险现象。6.6 顶层源文件的仿真波形分析(1)密码输入正确时: 按下SETUP设置密码。按启动键START启动开锁程序,当输入的密码与设定的密码相同,按下OPEN键,A灯亮起,锁打开,B灯和蜂鸣器不工作。(2)密码输入不正确时: 按下SETUP设置密码。按启动键START启动开锁程序,当输入密码与设定的密码不同,按下OPEN键,B灯亮,蜂鸣器随CLK周期性鸣响,此时,开关SETUP和S
24、TART没有作用,只能关闭OPEN并按下RESET,才可以使B灯和蜂鸣器停止工作并可以重新输入密码,如图,在输入正确密码后再次打开OPEN键,A灯亮起,锁可以打开。七. 密码锁设计源程序的下载调试7.1 电路结构(注:由于硬件设备限制,部分端口没有绑定引脚,如密码输入、设定和七段显示数码管,均只验证部分功能)7.2管脚分配图7.3程序下载调试过程将写的程序烧录下载到箱子调试,结果如下:(1)密码输入正确时:分析:设定和输入的前四位转换成十进制均为1,密码匹配,此时A灯亮起。(2)密码输入错误时:分析:设定和输入的前四位转换成十进制分别为1和0,密码不匹配,B灯亮起,蜂鸣器随CLK信号周期鸣响,
25、此时改变输入的密码,不能终止B灯和蜂鸣器的工作,只能关闭OPEN开关并按RESET重新输入密码八. 实验分析与总结在硬件测试过程中遇到了以下问题并已经解决:(1)虽然开发系统按要求实现了八位二进制密码设定和输入,但由于硬件设备限制,硬件验证时只允许更改后四位,且将后四位的引脚绑定在四位十六进制高低电平按键上,又由于开发系统设计时使用十进制的七段显示译码器,所以数码管实际显示为十进制数。但是开发系统依然保留了实验要求的功能。(2)考虑到实验要求中的第四项:“开锁处理事务完毕后,应将门关上,按SETUP键使系统重新进入安锁状态。若在报警状态,按SETUP键或START键应不起作用,应另用一按键RESET才能使系统进入安锁状态。”如要令RESET键具有此功能,需要使它可以直接控制系统后部的比较器,因此对给出的系统原理图稍作修改,从RESET输入端引出连线至比较器作为类似于OPEN的使能控制端。 九. 组内分工 十. 参考文献(1)曲波、黄旭、胡丹峰、黄秋萍 硬件描述语言实验教程苏州大学出版社(2)潘松、黄继业 EDA技术应用教程科学出版社(3)鲍可进 数字逻辑电路设计清华大学出版社
限制150内