《数字密码锁设计.doc》由会员分享,可在线阅读,更多相关《数字密码锁设计.doc(30页珍藏版)》请在三一办公上搜索。
1、目 录摘要.1Abstract.1第1章 绪论.2第2章设计方案32.1系统模块划分.32.2信号功能描述.52.3数字锁工作过程.5第3章 仿真及测试结果.7 3.1 顶层设计仿真波形7 3.2 时钟信号仿真波形8 3.3控制器的仿真8第4章 结论13致谢.13参考文献.14附录.15摘 要 电子产品的应用给人们的生活带来了方便和快捷。与传统锁相比,数字锁作为一种电子产品在当今社会生活中显出了更大的优越性。同时,EDA技术的发展使得电子产品的在实现上有了突破。一个可编程逻辑器件芯片可以实现很多功能,既减少了资源又提高了可靠性。本文通过对数字密码锁的功能分析划分了数字密码锁的结构模块,并用VH
2、DL语言对各模块进行硬件描述,画出系统原理图。我们对原理图和程序文件进行了计算机仿真,得到了符合要求的结果。在输入密码正确时,开锁并且绿灯亮;输入密码不正确时,红灯亮并发出警报。关键字:FPGA;CPLD;可编程逻辑器件;数字密码锁Abstract The application of electronics products brings great convenience to our life. As a electronics product, digital encrypted lock has more advantages over traditional lock in our
3、 daily use. Meanwhile, the development of EDA technology takes a breakthrough to the performance of electronics products, which saves the resources and enhances the reliability. In this paper, through analysis of the digital encrypted locks function, we divided the whole system into several modules.
4、 Then, we described each module by VHDL (Very High-Speed Integrated Circuit Hardware Description Language) and drew the graphic files. We simulated the files and finally got the results. When you input correct codes, the door opens and the light is green. When the wrong codes are inputted, the light
5、 turns red and the alert rings. The results have demonstrated the feasibility of our approach. Key words: FPGA;CPLD;Programmable Logic Device;Digital Encrypted Lock第1章 绪 论随着科技的发展,电子产品已广泛地应用于人们的日常生活,数字密码锁也应用于保险提箱、超市物品柜等诸多场合,给人们带来了安全和方便。本项目的数字锁除能实现同于其他数字锁的一般功能外,还有一些其他的优点。安装了报警装置,在输入错误密码后发出警报,提高了安全性。另外
6、键盘设有盲点,可以方便盲人开锁,扩大了它的应用领域。基于这些优点和其广泛的实用性,该数字锁具有研发的意义。近几年来EDA技术的迅猛发展给电子产品的设计带来了新方法,有文章评论可编程逻辑器件FPGA/PLD将冲击未来的系统设计1。与此同时,IC技术发展日新月异。1960年Gordon Moore提出集成电路的功能随着时间呈指数增长的规律。Moore的预言在其后的几十年中表现出惊人的吻合,且被称之为Moore定律2。该定律指出,IC的集成度(即每个微电子芯片上集成的器件数),每IS个月翻一番,对应于IC制作工艺的特征线宽则每三年缩小30%。根据按比例缩小原理(Scaling Down Princi
7、ple),特征线条越窄,IC工作速度越快,单元功能消耗的功率越低。因此,IC的发展不仅提高集成度,而且大大改善其性能(速度、功耗、可靠性等)。现在人们已经能够把一个完整的电子系统集成在一个芯片上了。因此,用一片可编程逻辑器件芯片FPGA/CPLD实现数字锁的功能既节省了资源又提高了系统的可靠性。本文将数字密码锁划分成控制器、比较器、计数器、编码器、数据选择器等一些模块,并加入使能电路、消抖电路和指示电路等外围电路。对每一个模块均进行了VHDL语言描述和基于Max+plusII软件平台的计算机仿真3-5,得到了较理想的波形。仿真结果证明了我们设计的正确性。波形及相关程序见附录。本文具体安排如下:
8、论文的第一部分阐述课题的背景和研究意义;第二部分给出了数字锁的设计方案,介绍数字锁的工作过程;在第三部分中我们对系统的模块进行了仿真,得到了满意的结果;最后一个部分给出了结论。第2章 设计方案密码的输入方式有并行和串行两种。采用串行输入方式,电路较简单,而且还有一个优点,就是串行输入必须用时序电路实现,对结果的判别与操作程序有关。故本设计采用串行数字锁并对操作过程有所规定。2.1系统模块划分图2-1是数字密码锁的原理框图。通过图2-1对数字密码锁的模块划分,我们可以确定整个系统的输入输出端口信号。 图2-1 密码锁各模块划分1. 数字按键输入信号a0a9,用来进行数字按键操作;2. 按键输入信
9、号wait_t, 用来建立密码器的等待状态;3. 按键输入信号ready,用来设置密码器的准备操作状态;4. 按键输入信号setup,用于内部人员进行重新设置密码器;5. 按键输入信号open_t,用来设置密码器进入启动状态;6. 绿灯指示驱动信号led_g,驱动绿灯显示;7. 红灯指示驱动信号led_g,驱动红灯显示;8. 蜂鸣器驱动信号alert,驱动蜂鸣器报警;9. 外部时钟信号clk,用来作为内部操作时钟和驱动蜂鸣器;10. 数码管显示译码输出a, b, c, d, e, f, g 。2.2信号功能描述1) 给密码锁上电后按下ready键,表示密码器准备就绪,可以接受外界输入密码。2)
10、 通过a0a9按键输入3位数字密码后按下open_t键,如果输入的密码正确,则开锁,同时密码器绿灯亮。如果密码有误,则不能开启,同时红灯亮,发出警报。3) 密码锁开启结束后,密码锁进入下一次开锁等待状态。这时设置按键wait_t使密码锁重新进入等待状态。4) 密码锁处于报警状态时,ready和wait_t键不起作用。这种情况下,密码锁由内部人员按setup键来对密码锁进行重新设置,使其回到等待状态。安全起见,setup应置于外部人员看不到的地方。5) 如果密码输入时操作失误,按下ready键重新回到密码锁准备就绪状态。6) 密码锁的工作时钟由外部晶振提供,可以用分频器对外部时钟进行分频操作,以
11、产生需要的时钟。 2.3数字锁工作过程 首先,密码锁通过键盘输入数字密码,然后密码通过编码器转换输出BCD码,接下来通过比较器与预置密码进行比较,同时将输入的密码数字通过数码管显示译码模块显示出来,最后将比较的结果dep送入控制器中。外部键每送入一个密码,计数器的计数值加1。如果计数器的计数值计到3,表示3个密码已经输入完毕。接下来计数器应向控制器发出反馈信号full,这表示控制器已经进入启动状态。 控制器模块在密码器每收到一个密码数字时向计数器发出一个时钟信号,如果密码器在按下open_t键以前收到第4个密码数字,将会转入报警状态,这时等待按下open_t键开始报警。所以,密码器每输入一个密
12、码应该向控制器模块送入一个data_in信号,显然这个信号也应该同步。另外,数字密码a0a9、ready、open_t 、wait_t 、setup均由按键方式产生,其产生时刻和持续时间长短是随机不定的,并且存在因开关簧片反弹而引起的电平抖动现象,因此每个开关后面安一个消抖模块以保证系统能捕捉到输入脉冲,同时保证每按一个键只形成一个宽度为系统时钟周期的脉冲。控制器是数字密码锁的核心部分,下面将对这一部分作重点的分析。将控制器的工作分为六个状态:Qa建立等待状态,Qb准备就绪状态,Qc密码输入状态,Qd开启状态,Qe报警状态,Qf报警返回状态。根据工作过程,可以得到控制器工作流程图,见附录,并化
13、简得到状态转换的激励方程:各状态之间的转换过程如下:图2-2 控制器状态转换图上图描述了控制器在6个状态之间的跳转过程和具体转换条件,可以清楚地看出控制器的工作过程。第3章 仿真及测试结果各模块的VHDL语言描述文件见附录,通过仿真得到了令人满意的波形。3.1 顶层设计仿真波形:图3-1 系统仿真结果从图中看出,每输入一个密码,data_in出现一个高电平。在输入正确密码1,2,3时,比较器判断信号均显示高电平,系统进入Qd启动状态。按下open_t键以后,绿灯亮(低电平有效)。开锁过程完成。3.2 时钟信号仿真波形: 图3-2 时钟信号仿真波形一clk_div2是clk的200,000分频为
14、控制器提供时钟信号。图3-3 时钟信号仿真波形二clk_div1是clk的1000分频,为报警器提供时钟信号。3.3控制器的仿真: 下面我们对数字锁的核心部分控制器进行仿真。clk_div2为控制器提供时钟,dep为比较器输出信号,绿灯和红灯均为低电平有效。c11为wait_t输出信号,c22为setup输出信号,c33为ready输出信号,c44为open_t输出信号。本文仿真了控制器于不同状态的跳转情况。仿真时间为3.25s。模块流程图见附录。仿真源程序:library ieee;use ieee.std_logic_1164.all;entity control_model is por
15、t(c11,c22,c33,c44:in std_logic; data_in :in std_logic; dep :in std_logic; full :in std_logic; clk_div2 :in std_logic; en :out std_logic; cnp,reset :out std_logic; s_lr,s_lg,wait_l:out std_logic);end control_model;architecture control_model_arch of control_model is type state is (qa,qb,qc,qd,qe,qf);
16、signal current_state:state:=qa;begin process begin wait until clk_div2event and clk_div2=1; wait_1en=0; if (c11=0)then current_state=qa; else current_state=qb; wait_1=0; s_lg=1; s_lrwait_1=1;en=0; if (c33=0)then current_state=qb; else current_state=qc; resetreset=0;cnp=0;en=1; if (c44=0)then current
17、_state=qf; s_lr=0; elsif (c33=1) then current_state=qc; reset=1; elsif(full=1) then current_state=qd; elsif(data_in=0)then current_state=qc; else cnp=1; if (dep=0) then current_state=qe; elsif(full=1)then current_state=qd; else current_stateen=1; if (data_in=1) then current_state=qe; elsif(c33=1) th
18、en current_state=qc; reset=1; elsif(c44=0) then current_state=qd; else s_lg=0; current_stateen=1; if(c33=1) then current_state=qc; reset=1; elsif(c44=0) then current_state=qe; else s_lr=0; current_stateen=0; if (c22=0) then current_state=qf; else current_state=qb; s_lr=1; wait_l=0; end if; end case;
19、 end process;end control_model_arch;仿真波形:图3-4 系统各状态转换仿真图从上图可以看出,系统处于a状态(建立等待状态)时,密码器不会接受除wait_t以外的信号,按下wait_t键,系统进入b状态(准备就绪状态)同时输出计数器清零信号setup。这时按下ready键,密码锁进入c状态(密码输入状态),控制器接受密码输入。当输入密码满3位时,full信号出现高电平,这时转入启动状态d状态。控制器要判断接下来的信号是open_t还是数字键,假设我们又输入一个数字,data_in出现高电平,系统则进入报警状态e状态。如果按下open_t键,如波形图c44出现高
20、电平,控制器发出红灯亮信号并进入报警返回状态f状态。这时我们完成了abcdef的状态转换仿真。按下setup键,c22信号出现高电平,数字锁重新进入b状态,按ready键,进入c状态,输入密码,dep出现低电平表明密码不符合,转入e状态。系统于e状态时,按下ready键又转入c状态。在c状态时按下open_t键,不符合启动程序,则进入f状态同时红灯亮。完成bcecf的转换仿真。同样,f状态时按下setup键,c22信号出现高电平,数字锁重新进入b状态。系统b状态按下ready键进入c状态,输入三位密码后进入d状态,若这时发现操作失误,按下ready键可输出reset信号,返回c状态(密码输入状
21、态),若不按ready,按下open_t则开锁,绿灯亮。第4章 结 论本文用可编程逻辑器件实现了多功能数字锁系统的功能,增加了系统的及程度,节省了资源。该密码锁在输入正确密码时,锁开启并且绿灯亮,输入密码不正确时,红灯亮并发出警报。本文给出顶层原理图、模块框图以及各模块的VHDL语言源程序。各模块的VHDL语言描述已通过计算机仿真测试,得到了满意的波形。这证明了设计的正确性和方法的可行性。谢 词感谢指导老师一直以来给我的帮助,在理论学习和查阅资料的过程中,张有志老师一直给我热心的指导,这为后来系统功能的具体实现打下了基础。还要感谢实验室的老师在软件实现过程中给与的帮助。仿真过程中遇到很多问题在
22、老师帮助和个人努力下得以解决,最终完成了设计任务,得到正确结果。 参考文献1可编程逻辑器件FPGA/PLD冲击未来的系统设计OL. 2 王金明等数字系统设计与Verilog HDLM电子工业出版社,20023 任勇峰, 庄新敏VHDL与硬件实现速成M国防工业出版社,20054 金西VHDL与复杂数字系统设计M西安电子科技大学出版社, 20035 冯涛,王程Max+plusII入门与提高M人民邮电出版社, 20026汪国强等可编程路逻辑器件实验M电子工业出版社, 20057居悌可编程路逻辑器件的开发与应用M人民邮电出版社,19958赵立民可编程路逻辑器件与数字系统设计M机械工程出版社,20039
23、 Wayne Wolf FPGA-based system design M China Machine Press, 200510 杨恒FPGA/CPLD最新实用技术指南M清华大学出版社,200511Vocke.Computer aided routing for complex programmable logic device manufacturing test development J IEEE, April 2000:171-17612 Charles W. McKay. Digital CircuitsMEnglewood Cliffs, N.J. c1978.13 Allan
24、 R. Hambley ElectronicsM Publishing House of Electronics Industry ,200514 Mark D. Birnbaum Essential electronic design automationM200515于枫,张丽英,廖宗建ALTERA可编程逻辑器件应用技术M科学出版社,2004附录:1) 顶层文件VHDL源程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;USE WOR
25、K.cipher_example.ALL;ENTITY cipher_top IS PORT(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9:IN std_logic; wait_t:IN std_logic; ready: IN std_logic; setup: IN std_logic; open_t: IN std_logic; clk: IN std_logic; led_g,led_r,alert:OUT std_logic; a,b,c,d,e,f,g:OUT std_logic);END cipher_top ;ARCHITECTURE cipher_top_arc
26、h OF cipher_top IS COMPONENT clkdiv_model PORT (clk:IN std_logic; clk_div1:OUT std_logic; clk_div2:OUT std_logic); END COMPONENT clkdiv_model; COMPONENT keysync_model PORT (c1,c2,c3,c4:IN std_logic; a00,a10,a20,a30,a40,a50,a60,a70,a80,a90;IN std_logic; clk:IN std_logic; c11,c22,c33,c44:OUT std_logic
27、; a01,a11,a21,a31,a41,a51,a61,a71,a81,a91:OUT std_logic); END COMPONENT keysync_model; COMPONENT enable_model PORT (open_t:IN std_logic; a0,a1,a2,a3,a4,a5,a6,a7,a8,a9:IN std_logic; en:IN std_logic; c4:OUT std_logic; a00,a10,a20,a30,a40,a50,a60,a70,a80,a90:OUT std_logic); END COMPONENT enable_model;
28、COMPONENT invert_model PORT (wait_t:IN std_logic; ready: IN std_logic; setup: IN std_logic; c1,c2,c3:OUT std_logic); END COMPONENT invert_model; COMPONENT mux4_model PORT (s0,s1:IN std_logic; e1,e2,e3,e4:OUT std_logic); END COMPONENT mux4_model; COMPONENT encoder_model PORT (a01,a11,a21,a31,a41,a51,
29、a61,a71,a81,a91:IN std_logic; b1,b2,b3,b4:OUT std_logic; data_in:OUT std_logic); END COMPONENT encoder_model; COMPONENT comparator_model PORT (b1,b2,b3,b4:IN std_logic; e1,e2,e3,e4:IN std_logic; dep:OUT std_logic); END COMPONENT comparator_model; COMPONENT counter_model PORT (reset:IN std_logic; cnp
30、: IN std_logic; s0,s1 OUT std_logic; full:OUT std_logic); END COMPONENT counter_model; COMPONENT decoder_model PORT (b1,b2,b3,b4:IN std_logic; a,b,c,d,e,f,g: OUT std_logic); END COMPONENT decoder_model; COMPONENT indicator_model PORT (wait_l:IN std_logic; s_lg:IN std_logic; s_lr:IN std_logic; clk_di
31、v1: IN std_logic; led_g,led_r,alert:OUT std_logic); END COMPONENT indicator_model; COMPONENT control_model PORT (c11,c22,c33,c44:IN std_logic; data_in:IN std_logic; dep:IN std_logic; full: IN std_logic; clk_div2:IN std_logic; en :OUT std_logic; cnp,reset:OUT std_logic; s_lr,s_lg,wait_l:OUT std_logic
32、); END COMPONENT control_model; SINGAL e1,e2,e3,e4:std_logic; SINGAL b1,b2,b3,b4 :std_logic; SINGAL c1,c2,c3,c4 :std_logic; SINGAL c11,c22,c33,c44 :std_logic; SINGAL a00,a10,a20,a30,a40,a50,a60,a70,a80,a90:std_logic; SINGAL a01,a11,a21,a31,a41,a51,a61,a71,a81,a91 :std_logic; SINGAL en,data_in :std_l
33、ogic; SINGAL wait_l,s_lg,s_lr :std_logic; SINGAL reset,cnp :std_logic; SINGAL full,dep :std_logic; SINGAL s0,s1 :std_logic; SINGAL clk_div1 clk_div2 :std_logic; BEGIN U1:clkdiv_model PORT MAP(clk,clk_div1,clk_div2) ; U2:keysync_model PORT MAP(c1,c2,c3,c4,a00,a10,a20,a30,a40,a50,a60,a70,a80,a90, clk,
34、c11,c22,c33,c44,a01,a11,a21,a31,a41,a51,a61,a71,a81,a91); U3:enbale_model PORT MAP(open_t,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,en,c4,a00,a10,a20, a30,a40,a50,a60,a70,a80,a90); U4:invert_model PORT MAP(wait_t,ready,setup,c1,c2,c3); U5:mux4_model PORT MAP(s0,s1,e1,e2,e3,e4);U6:encoder_model PORT MAP(a01,a11,
35、a21,a31,a41,a51,a61,a71,a81,a91,b1,b2,b3,b4data_in); U7:comparator_model PORT MAP(b1,b2,b3,b4,e1,e2,e3,e4,dep); U8:counter_model PORT MAP(reset,cnp,s0,s1,full); U9:decoder_model PORT MAP(b1,b2,b3,b4,a,b,c,d,e,f,g); U10:indicator_model PORT MAP(wait_l,s_lg,s_lr,clk_div1,led_g,led_r,alert); U11:control_model PORT MAP(c11,c22,c33,c44,data_in,dep,full,clk_div2 en,cnp,reset,s_lr,s_lg,wait_l); END cipher_top_arch; 2)以下是为系统提供的各时钟信号,根据需要我们对1M的时钟进行分频。10分频分频