VHDL密码锁设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL语言及应用课程设计论文
----VHDL平台下
密码锁的设计
学院:电子信息学院
专业:
学号:
姓名:
指导老师:
团队成员:
完成日期:
目录
一. 引言-----------------------------------------------------------1
二. 实验目的-------------------------------------------------------1三. 实验任务与要求-------------------------------------------------1
四. 设计原理及工作流程---------------------------------------------2
密码锁设计原理--------------------------------------------------2
密码锁系统框图--------------------------------------------------2
密码锁设计提示--------------------------------------------------2
五. 密码锁的顶层设计源程序-----------------------------------------3
六. 密码锁各功能模块源程序及其仿真分析-----------------------------5
密码设定锁存器源程序及其仿真分析--------------------------------5
密码输入锁存器源程序及其仿真分析--------------------------------6
开锁控制系统源程序及其仿真分析----------------------------------8
比较器源程序及其仿真分析----------------------------------------9
LED显示源程序及其仿真分析--------------------------------------11
顶层源文件的仿真分析-------------------------------------------12
七. 密码锁设计源程序的下载调试------------------------------------13
电路结构-------------------------------------------------------13
管脚分配-------------------------------------------------------14
程序下载调试过程-----------------------------------------------14
八. 实验分析与总结------------------------------------------------15
九. 组内分工------------------------------------------------------16
十. 参考文献------------------------------------------------------16
一. 引言
随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
因此人们对锁要求甚高,既要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。
传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。
数字密码锁是二十一世纪制锁业的一次革命,锁的特点是不用钥匙、无锁孔、机械传动、不易损坏、不磨损、不易被破译、可多次更换密码、换号不换锁、一把锁多个密码,具有防拨、防砸、防撬、防堵等功能。
安装门锁时不破坏原门的结构,避免用钥匙开启旋芯式锁具的一切烦恼(如丢、落、拆、堵门被反锁等)。
数字密码锁是利用数字密码来开启的锁具,其重复概率极低,有着很高的安全性;而旋芯式锁具使用不够安全。
通过对社会各阶层千余人的调查,百分之百的人对目前身上挂着的串串钥匙无可奈何,都愿意一身轻松没有任何顾虑的出入家门,都愿意用上一种既安全方便又不用钥匙的锁具。
因此,数字密码锁产品的市场发展前景极为广阔。
而EDA 技术设计电子系统具有用软件的方式设计硬件,设计过程中可用有关软件进行各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计成本低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。
可见,用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。
本设计的各个模块由相应的VHDL程序具体实现,并在QuartusⅡ环境下进行了整体电路的模拟仿真,最终实现“密码锁设计”的要求。
二. 实验目的
1. 掌握VHDL语言的使用,学会用VHDL语言来编程解决实际问题;
2. 学会使用EDA开发软件设计小型综合电路,掌握仿真的技巧;
3. 学会应用开发系统实现硬件电路,检验电路的功能;
4. 设计一个八位二进制密码锁,实现所要求的功能。
三. 实验任务与要求
1、安锁状态。
按下开关键SETUP,密码设置灯亮时,方可进行密码设置操作。
设置初始密码0~9(或二进制8位数),必要时可以更换。
再按SETUP键,密码有效。
开锁过程。
、按启动键(START)启动开锁程序,此时系统内部应处于初始状态。
、依次键入0~9(或二进制8位数)。
、按开门键(OPEN)准备开门。
若按上述程序执行且拨号正确,则开门指示灯A亮,若按错密码或未按上述程序执行,则按动开门键OPEN后,报警装置鸣叫、灯B亮。
(4)、开锁处理事务完毕后,应将门关上,按SETUP键使系统重新进入安锁状态。
若在报警状态,按SETUP键或START键应不起作用,应另用一按键RESET 才能使系统进入安锁状态。
使用者如按错号码可在按OPEN键之前,按START键重新启动开锁程序。
设计符合上述功能的密码锁,并用层次化方法设计该电路。
用功能仿真方法验证,通过观察有关波形确认电路设计是否正确。
完成电路设计后,通过在实验系统中下载,验证设计的正确性。
四. 设计原理及工作流程
密码锁设计原理
如下示框图,密码锁系统主要由开锁控制,设置密码的锁存器,输入密码的锁存器,比较器,LED显示和报警系统几个部分组成。
每一个模块功能的实现都是通过VHDL语言实现的,并通过顶层电路与例化语句将功能模块整合起来,之后对整个系统进行模拟仿真和硬件实现。
密码锁系统框图
密码锁设计提示
(1) 锁存器:用于实现设定密码和输入密码的锁存。
(2) 比较器:用于将设定密码与输入密码相比较。
其中,CLK为外部输入的时钟信号。
若输入密码正确,则A灯亮;否则B灯亮,同时比较器输出与CLK一样的信号,驱动蜂鸣器发出报警声。
(3) 开锁控制:当反馈信号下降沿来到时,开锁控制输出低电平,用于在输入错误密码后禁止再次安锁;当RESET脚为高电平时,开锁控制输出高电平,打开与门,这时锁存器1使能端的变化受控于SETUP键,重新进入安锁状态。
(4) LED显示:用于设定密码或输入密码的显示。
此项设计的目的是为了在下载演示时,能清楚地看到设置和输入的密码值。
五. 密码锁的顶层设计源程序
调用各模块形成元件例化语句:
LIBRARY IEEE;
USE topfile IS
PORT(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 ENTITY topfile;
ARCHITECTURE brf OF topfile IS
COMPONENT lockcontrol
PORT (RESET,FEEDBACK:IN STD_LOGIC;
Y:OUT STD_LOGIC);
END COMPONENT;
COMPONENT codeset
PORT (ENABLE:IN STD_LOGIC;
PASEWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT codeinput
PORT (ENABLE:IN STD_LOGIC;
PASEWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT comparator
PORT (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 AND2
PORT (a,b:IN STD_LOGIC;
c:OUT STD_LOGIC);
END COMPONENT;
COMPONENT NOR2
PORT (e,d:IN STD_LOGIC;
f:OUT STD_LOGIC);
END COMPONENT;
COMPONENT LED
PORT (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,net10,net11:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL net3,net4,net5,net6,net7:STD_LOGIC;
BEGIN
U0: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 PORT MAP(PASEWORD=>setpassword,ENABLE=>net6,Q=>net2);
U5:comparator PORT MAP(rightpassword=>net2,password=>net1,OPN=>OPN,CLK=>CLK,A=>led_A,B=>net 7,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(DATA=>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;
六. 密码锁各功能模块源程序及其仿真波形
密码设定锁存器源程序及其仿真波形
源程序为:
LIBRARY IEEE;
USE codeset IS
PORT(
ENABLE:IN STD_LOGIC;
PASSWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END codeset;
ARCHITECTURE bhv OF codeset IS
BEGIN
PROCESS(ENABLE,PASSWORD) BEGIN
IF ENABLE = '1' THEN
Q(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;
END bhv;
仿真波形图为:
使能控制端高电平时:
使能控制端变回低电平时:
由于硬件设备限制,不能检验全部端口,因此将低位的四位设置为低电平,通过改变使能控制端与高位的电平观察正确性。
密码输入锁存器源程序及其仿真波形
源程序为:
LIBRARY IEEE;
USE codeinput IS
PORT(ENABLE:IN STD_LOGIC;
PASSWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END codeinput;
ARCHITECTURE bhv OF codeinput IS
BEGIN
PROCESS(ENABLE,PASSWORD) BEGIN
IF ENABLE = '1' THEN
Q(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' THEN
Q <= "00000000";
END IF;
END PROCESS;
END bhv;
仿真波形为:
当使能信号为低电平,锁存器输出状态保持不变,输入信号没有读入;当使能信号有低电平变为高电平,锁存器开始读入输入的信号。
开锁控制系统源程序及其仿真波形
源程序为:
LIBRARY IEEE;
USE lockcontrol IS
PORT( FEEDBACK,RESET:IN STD_LOGIC;
Y:OUT STD_LOGIC);
END lockcontrol;
ARCHITECTURE bhv OF lockcontrol IS
BEGIN
PROCESS(FEEDBACK,RESET)
BEGIN
Y <= '1';
IF FEEDBACK = '0' THEN
Y <= '0';
END IF;
IF RESET = '1' THEN
Y <= '1';
END IF;
END PROCESS;
END bhv;
仿真波形为:
FEEDBACK为反馈信号,RESET为重置密码信号。
当反馈信号下降沿来到时,开锁控制输出Y低电平,用于在输入错误密码后禁止再次安锁;当RESET脚为高电平时,开锁控制输出高电平。
比较器源程序以及仿真波形
源程序为:
LIBRARY IEEE;
USE comparator IS
PORT(rightpassword,password: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 IS
BEGIN
PROCESS(OPN,CLK,RESET,rightpassword,password)
BEGIN
D11(3) <= rightpassword(7);
D11(2) <= rightpassword(6);
D11(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);
D22(0) <= password(0);
IF OPN = '1' THEN
IF rightpassword = password THEN
A <= '1';
B <= '0';
warner <= '0';
END IF;
IF rightpassword /= password THEN
A <= '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 <= '0';
END IF;
END PROCESS;
END bhv;
仿真波形为:
(1)密码正确时:
密码匹配时,如果OPEN不打开,电路不工作,如果OPEN打开,则A灯变为高电平,B灯和蜂鸣器不工作。
而D11 D12始终显示正确密码,D21 D22始终显示当前输入密码。
(2)密码错误时:
密码不匹配时,如果OPEN不打开,电路不工作,如果OPEN打开,则A灯不工作,B灯亮,蜂鸣器随CLK周期而周期性鸣响。
此时,关闭OPEN并启动RESET,才可以使比较器停止工作并可以再次输入密码。
LED显示源程序及其仿真波形
源程序为:
LIBRARY IEEE;
USE LED IS
PORT (DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY LED;
ARCHITECTURE a OF LED IS
BEGIN
PROCESS(DATA)
BEGIN
CASE DATA IS
WHEN "0001" =>DOUT7<="0000110";
WHEN "0010" =>DOUT7<="1011011";
WHEN "0000" =>DOUT7<="0111111";
WHEN "0011" =>DOUT7<="1001111";
WHEN "0100" =>DOUT7<="1100110";
WHEN "0101" =>DOUT7<="1101101";
WHEN "0110" =>DOUT7<="1111101";
WHEN "0111" =>DOUT7<="0001111";
WHEN "1000" =>DOUT7<="1111111";
WHEN "1001" =>DOUT7<="1101111";
WHEN OTHERS =>DOUT7<="0000000";
END CASE;
END PROCESS;
END ARCHITECTURE a ;
仿真波形为:
可以由二进制代码的值判断出仿真结果真确,从图中还可以观察到,当输入的四位数中有两位及以上同时跳变时,出现了竞争冒险现象。
顶层源文件的仿真波形分析
(1)密码输入正确时:
按下SETUP设置密码。
按启动键START启动开锁程序,当输入的密码与设定的密码相同,按下OPEN键,A灯亮起,锁打开,B灯和蜂鸣器不工作。
(2)密码输入不正确时:
按下SETUP设置密码。
按启动键START启动开锁程序,当输入密码与设定的密码不同,按下OPEN键,B灯亮,蜂鸣器随CLK周期性鸣响,此时,开关SETUP和START没有作用,只能关闭OPEN并按下RESET,才可以使B灯和蜂鸣器停止工作并可以重新输入密码,如图,在输入正确密码后再次打开OPEN键,A灯亮起,锁可以打开。
七. 密码锁设计源程序的下载调试
电路结构
(注:由于硬件设备限制,部分端口没有绑定引脚,如密码输入、设定和七段显示数码管,均只验证部分功能)
管脚分配图
程序下载调试过程
将写的程序烧录下载到箱子调试,结果如下:
(1)密码输入正确时:
分析:设定和输入的前四位转换成十进制均为1,密码匹配,此时A灯亮起。
(2)密码输入错误时:
分析:设定和输入的前四位转换成十进制分别为1和0,密码不匹配,B灯亮起,蜂鸣器随CLK信号周期鸣响,此时改变输入的密码,不能终止B灯和蜂鸣器的工作,只能关闭OPEN开关并按RESET重新输入密码
八. 实验分析与总结
在硬件测试过程中遇到了以下问题并已经解决:
(1)虽然开发系统按要求实现了八位二进制密码设定和输入,但由于硬件设备限制,硬件验证时只允许更改后四位,且将后四位的引脚绑定在四位十六进制高低电平按键上,又由于开发系统设计时使用十进制的七段显示译码器,所以数码管实际显示为十进制数。
但是开发系统依然保留了实验要求的功能。
(2)考虑到实验要求中的第四项:“开锁处理事务完毕后,应将门关上,按SETUP
键使系统重新进入安锁状态。
若在报警状态,按SETUP键或START键应不起作用,应另用一按键RESET才能使系统进入安锁状态。
”如要令RESET键具有此功能,需要使它可以直接控制系统后部的比较器,因此对给出的系统原理图稍作修改,从RESET输入端引出连线至比较器作为类似于OPEN的使能控制端。
九. 组内分工
十. 参考文献
(1)曲波、黄旭、胡丹峰、黄秋萍《硬件描述语言实验教程》苏州大学出版社(2)潘松、黄继业《EDA技术应用教程》科学出版社
(3)鲍可进《数字逻辑电路设计》清华大学出版社。