电子密码锁设计.docx
《电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《电子密码锁设计.docx(11页珍藏版)》请在冰豆网上搜索。
电子密码锁设计
目录
1引言··················································5
1.1系统设计要求········································5
2EDA技术················································7
2.1EDA的概念········································7
2.2EDA技术的历史与发展······························6
2.3EDA的应用········································7
2.4EDA的常用软件····································7
3系统设计方案与功能实现································8
3.1密码锁输入模块································8
3.2密码锁控制模块·································9
4系统仿真··············································11
5结束语················································13
致谢·····················································14
参考文献·················································15
附录·····················································14
1引言
计算机组成原理与设计是计算机通信与技术专业本科生的必修课程。
在完成理论学习和必要的实验后,本科学生掌握了它的基本原理和各种基本功能的应用,但对硬件实际应用设计和其完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
计算机组成原理与设计的课程设计既要让学生巩固课本学到的理论,还要让学生学习硬件电路设计和用户程序设计,同时学习查阅资料、参考资料的方法。
计算机原理与设计的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。
1.1系统设计要求
(1)密码输入:
每按下一个数字键,就输入一个数值,并在显示器上显示出该数值,同时将先前输入的数据依次左移一个数字位置。
(2)密码清除:
每按下清除键可清除前面所有的输入值,清除成“0000”。
(3)密码更改:
按下更改键可将目前的数码设定成新的密码。
(4)密码上锁:
按下上锁键可将密码锁上锁。
2EDA技术
2.1EDA的概念
EDA技术是在电子CAD技术基础上发展起来的通用软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA设计可分为系统级、电路级和物理实现级。
物理级设计主要指IC版图设计,一般由半导体厂家完成;系统级设计主要面对大型复杂的电子产品;而一般民用及教学所涉及基本是电路级设计。
我们常用的EDA软件多属于电路级设计。
电路级设计工作,是在电子工程师接受系统设计任务后,首先确定设计方案,并选择合适的元器件,然后根据具体的元器件设计电路原理图,接着进行第一次仿真。
其中包括数字电路的逻辑模拟、故障分析、模拟电路的交直流分析、瞬态分析等。
这一次仿真主要是检验设计方案在功能方面的正确性。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线,有条件的还可以进行PCB后分析。
其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反馈回电路图,进行第二次仿真,也称作后仿真。
后仿真主要是检验PCB板在实际工作环境中的可行性。
2.2EDA技术的历史与发展
EDA技术发展历程大致可分为三个阶段。
20世纪70年代为计算机辅助设计(CAD)阶段,人们开始用计算机取代手工操作进行IC版图编辑、PCB布局布线。
80年代为计算机辅助工程(CAE)阶段。
与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能分析和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。
20世纪90年代为电子系统设计自动化(EDA)阶段,同时又出现了计算机辅助工艺(CAPP)、计算机辅助制造(CAM)等。
2.3EDA的应用
现在EDA技术应用广泛,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA技术已在各大公司、科研和教学部门广泛使用。
在产品设计与制造方面,EDA技术可实现前期的计算机仿真、系统级模拟及测试环境的仿真、PCB的制作、电路板的焊接、ASIC的设计等。
在教学方面,我国高校是从九十年代中期开始EDA教育的,现在几乎所有理工科类高校都开设了EDA课程。
这些课程主要是让学生了解EDA的基本概念和原理,使用EDA软件进行电子电路课程的实验及从事简单系统的设计。
2.4EDA的常用软件
EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:
multiSIM7(原EWB的最新版本)、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIIogic、Cadence、MicroSim等等。
这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。
3.系统设计方案与功能实现
根据系统设计要求,系统设计采用自顶向下的设计方法。
顶层设计采用原理图设计方式,系统的整体组装设计原理图如图3-1所示,它由密码锁输入模块、密码锁控制模块和密码锁显示译码模块三部分组成。
图3-1系统整体组装设计原理图
3.1密码锁输入模块
密码锁输入模块由时序产生电路、键盘扫描电路、键盘译码电路和按键存储电路组成。
①时序产生电路
产生电路中使用的三种不同频率的工作脉冲波形,即系统时钟脉冲、弹跳消除取样信号和键盘扫描信号。
②键盘扫描电路
扫描电路的作用是提供键盘扫描信号,扫描信号变化的顺序依次为1110-1101-1011-0111-1110……依序地周而复始。
③键盘译码电路
上述键盘中的按键分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除键、上锁键和解锁键等。
数字按键主要是用来输入数字的,但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的;另外,不同的按键具有不同的功能,所以必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。
④按键存储电路
因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个扫描完毕后的结果记录下来。
各按键的位置与数码关系如表3-2所示。
表3-2按键位置与数码关系
3.2密码锁控制模块
密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入响应控制。
1数字按键输入的响应控制
Ⅰ.如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按下一个数字时,显示器上的数字必须左移一位,以便将新的数字显示出来。
Ⅱ.假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。
Ⅲ.由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。
②功能按键输入的响应控制
Ⅰ.清除键:
清除所有的输入数字,即作归零动作。
Ⅱ.上锁键:
按下此键时可将密码锁的门上锁(上锁前必须预先设定一个四位的数字密码)。
Ⅲ.解除键:
按下此键会检查输入的密码是否正确,若密码正确无误则解锁。
LED显示程序如下:
libraryieee;
useieee.std_logic_1164.all;
entityled_dispis
port(
datain:
instd_logic_vector(3downto0);
dataout:
outstd_logic_vector(7downto0)
);
endled_disp;
architecturertlofled_dispis
begin
process(datain)
begin
casedatainis
when"1010"=>dataout<="11000000";--0
when"0001"=>dataout<="11111001";--1
when"0010"=>dataout<="10100100";--2
when"0011"=>dataout<="10110000";--3
when"0100"=>dataout<="10011001";--4
when"0101"=>dataout<="10010010";--5
when"0110"=>dataout<="10000010";--6
when"0111"=>dataout<="11111000";--7
when"1000"=>dataout<="10000000";--8
when"1001"=>dataout<="10010000";--9
whenothers=>null;
endcase;
endprocess;
endrtl;
4系统仿真
该密码锁利用MAXPLUSⅡ工作平台进行编译和综合仿真,将程序下载FLEX10K芯片中,同时在EDA试验箱上进行硬件验证。
本文提出的电子密码锁由于采用VHDL语言设计,用一片FPGA实现,因而体积小,功耗低,稍加修改就可以改变密码的位数和输入密码的次数,具有较好的应用前景。
但由于结构还比较简单,有待进一步完善。
(1)密码锁输入模块的仿真,如图4-1所示。
图4-1密码锁输入模块的仿真图
(2)密码锁控制模块的仿真,如图4-2所示。
图4-2密码锁控制模块的仿真图
(3)密码锁译码模块的仿真,如图4-3所示。
图4-3密码锁译码模块的仿真图
(4)电子密码锁整个系统的仿真,如图4-4所示。
图4-4电子密码锁整个系统的仿真图
5结束语
通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL语言的智能密码锁设计。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环节,让同学们学以致用。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
致谢
在此次课程设计中,非常感谢肖晓丽老师对我的指导与大力的帮助。
如果没有她严谨细致、一丝不苟地批阅和指正,本文很难在这个短时间内完成。
从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
参考文献
王锁平编著.电子设计自动化(EDA)教程.电子科技大学出版社.2000.3
潘松等编著.EDA技术实用教程.科学出版社.2002.10
潘松等编著.VHDL实用教程.电子科技大学出版社.2002.6
戈素贞等.采用EDA技术实现4位十进制数字密码锁.山西电子技术.2002.12
刘钰等.一种VHDL语言设计的数字密码锁,信心技术与信息化.2004.4
附录
主控制程序参考如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycoded_lockis
port(
clk:
instd_logic;
ret:
instd_logic;
key_F:
instd_logic_vector(1downto0);
keyin:
instd_logic_vector(9downto0);
disp:
outstd_logic_vector(7downto0);
ledcs:
outstd_logic_vector(3downto0);
led2cs:
outstd_logic;--led片选信号
sound:
bufferstd_logic;
led2:
bufferstd_logic_vector(1downto0)
);
endcoded_lock;
architecturertlofcoded_lockis
signalkey_temp:
std_logic_vector(9downto0);--按键缓存
signalN:
std_logic_vector(3downto0);--按键缓存
signalFF:
std_logic;--按键标志
signalACC:
std_logic_vector(15downto0);--所有按键的寄存器
signalREG:
std_logic_vector(15downto0);--比较寄存器
signalNC:
integerrange0to4;--移位用的标志位
signalA,B,C,D:
std_logic_vector(3downto0);--显示用的寄存器
SIGNALclk_1k:
std_logic;--扫描时钟
signaldata:
std_logic_vector(3downto0);
signalF:
std_logic_vector(1downto0);
signals_cnt:
integerrange0to4;
signalclk_10hz:
std_logic;
signalflag:
std_logic;
componentled_dispis
port(datain:
instd_logic_vector(3downto0);
dataout:
outstd_logic_vector(7downto0)
);
endcomponent;
begin
XIAODOU:
process(clk)--按键消拉动电路
variablecnt:
integerrange0to2000000;
begin
ifrising_edge(clk)then
ifcnt<1999999thencnt:
=cnt+1;
elsecnt:
=0;key_temp<=keyin;F<=key_F;
endif;
endif;
casekey_tempis
when"0111111111"=>N<="1010";--0
when"1011111111"=>N<="0001";--1
when"1101111111"=>N<="0010";--2
when"1110111111"=>N<="0011";--3
when"1111011111"=>N<="0100";--4
when"1111101111"=>N<="0101";--5
when"1111110111"=>N<="0110";--6
when"1111111011"=>N<="0111";--7
when"1111111101"=>N<="1000";--8
when"1111111110"=>N<="1001";--9
whenothers=>N<="1111";
endcase;
endprocess;
FF<=not(N(3)andN
(2)andN
(1)andN(0));--判断按键
REGISTE:
process(FF,ret)--寄存按键信号电路
variablecnt:
integerrange0to5;--std_logic_vector(1downto0);
begin
ifret='0'then--系统复位电路
--ACC<="0000000000000000";
cnt:
=0;
NC<=0;
elsifrising_edge(FF)thencnt:
=cnt+1;
ACC<=ACC(11downto0)&N;
ifcnt=5thencnt:
=1;
endif;
endif;
NC<=cnt;
endprocess;
CLK_1Khz:
process(clk)--产生1k的数码管扫描信号
variablecnt:
integerrange0to20000;
begin
ifrising_edge(clk)thencnt:
=cnt+1;
ifcnt<10000thenclk_1k<='1';
elsifcnt<20000thenclk_1k<='0';
elsecnt:
=0;clk_1k<='0';
endif;
endif;
endprocess;