毕业设计毕业论文基于FPGA的数字密码锁电路设计.doc_第1页
毕业设计毕业论文基于FPGA的数字密码锁电路设计.doc_第2页
毕业设计毕业论文基于FPGA的数字密码锁电路设计.doc_第3页
毕业设计毕业论文基于FPGA的数字密码锁电路设计.doc_第4页
毕业设计毕业论文基于FPGA的数字密码锁电路设计.doc_第5页
免费预览已结束,剩余23页可下载查看

下载本文档

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

文档简介

本科生毕业设计基于FPGA的数字密码锁电路设计 独 创 性 声 明本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。签名: 年 月 日授 权 声 明本人完全了解许昌学院有关保留、使用本科生毕业论文(设计)的规定,即:有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。本人授权许昌学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”): 签名: 年 月 日指导教师签名: 年 月 日 摘 要 VHDL语言实现了把硬件设计转向软件设计。以FPGA硬件为基础,用VHDL语言实现密码锁的各模块,再把这些功能模块连接整合。但这种连接不是传统的多个模块的连接,这些模块是软件模块,通过单片FPGA即可在片内完成连接。这种设计方法给技术开发人员带来了便利,同时要求开发人员必须精通VHDL的编程方法。安全可靠、使用方便的电子密码锁越来越受到人们的喜爱。关键词:VHDL语言;FPGA;密码锁;模块ABSTRACTVHDL language implemented the conversion of hardware design to software design. Based on the FPGA hardware , the modules of trick lock implemented by VHDL language, and put these function modules connected to integration. But this connection is not the traditional connections of the multiple modules, the module is the software module, the connections can be finished in pieces through the monolithic FPGA. This design brought convenient for technology development personnel, also requires developers must be proficient in VHDL programming method. Safety and reliable and easy to use, making this electronic combination lock more and more popular.Key words:VHDL language;FPGA;Combination lock;Module目 录1 绪论12 设计要求与设计思路22.1 设计要求22.2 设计思路22.3 设计原理及原理图22.4 器件选择42.5 器件简介 (FLEX10K系列)53 VHDL语言程序设计73.1 模块一 寄存器73.2模块二 控制电路83.3 模块三 计数器113.4 模块四 比较器123.5 模块五 编码器133.6 模块六 显示译码器154 最终的设计图174.1 顶层仿真图174.2 最终仿真结果一174.3 最终仿真结果二185 数字密码锁的技术展望20参考文献21附 录22致 谢241 绪论随着社会物质财富的日益增长,安全防盗已成为全社会关注的问题,安全可靠、使用方便的电子密码锁越来越受到人们的青睐。密码锁是实际应用极为广泛的一种数字电路,它的主要功能是用来对某些操作进行加密保护,目的是避免无权人员使用某些设施或者进行越权操作。由于充分利用了FPGA芯片密度大、功耗低、可重复编程和具有嵌人式阵列块的结构特点,从而大大简化了系统结构,降低了成本,只需要一片FPGA就可以完成电路设计。这样做不仅提高了系统的保密性和可靠性,而且采用这种器件开发的数字系统其维护、升级与改进都极其方便。使用FPGA可编程器件和VHDL语言,以Max+PlusII为工作平台设计的电子密码锁具有密码预置、误码锁死、开锁提示以及报警等功能。EDA技术就是以计算机为工具在EDA软件平台上,对以硬件描述语言HDL为系统逻辑描述手段,完成的设计文件自动完成逻辑编译、逻辑化简、逻辑综合及优化、逻辑仿真,直至对特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA的仿真测试技术只需要通过计算机就能对所设计的电子系统从各种不同层次的系统性能特点完成一系列准确的测试与仿真操作,大大提高了大规模系统电子设计的自动化程度。设计者的工作仅限于利用软件方式,即利用硬件描述语言(这里使用VHDL)来完成对系统硬件功能的描述,在EDA工具(这里利用Max+PlusII)的帮助下就可以得到最后的设计结果,这使得对整个硬件系统的设计和修改过程如同完成软件设计一样方便 、高效。在本文中我选择FPGA为硬件用VHDL语言来描述程序设计一个六位电子密码锁,VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家估计,到不久的将来用VHDL和Verilog两种语言可以完成所有的硬件电路设计。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。而且用VHDL语言编程可以像用其它高级语言一样,把一个复杂的程序分为许多的简单模块来分别设计。2 设计要求与设计思路2.1 设计要求(1) 以FLEX10K系列FPGA为基本器件,用VHDL语言设计一个6位电子密码锁。(2) 软件设计采用模块化设计方法,再分别对每个模块进行程序设计。(3) 能够随时对当前进行修正调试,使电路可以进行时时更新。(4) 能够很方便地完成重设密码和验证密码。(5) 此设计主要完成软件设计、和软件仿真以及对所用器件的选择与简介。(6) 能够熟练运用MAX+PLUS II以及常用的办公软件。2.2 设计思路(1) 根据设计要求,选择FLEX10K系列为核心器件。(2) 密码预先在内部设置,可以设置任意位密码,这里采用6位十进制数字作为输入密码的数字密码锁(采用6位十进制数字作为密码这符合我们的平时生活习惯)。(3) 密码输入正确后,密码锁将启动开启装置。这里密码锁只接受前6位密码输入,并以按键音提示,多余位数的密码输入将不起作用。在调试仿真程序时,要特别注意输入密码的位数,多输或少输可能得不到我们想要的结果,反而造成错误。(4) 密码器具有外接键盘,可以用来输入密码和操作指令。还可输出6位并行显示,以提示使用者。(5) 设计好的功能模块分别用软件仿真正确后,再整合一个密码锁,并进行整合仿真。2.3 设计原理及原理图根据设计要求与设计思路,以及在测试或调整电子电路及设备时,为测定电路的一些量值。先对数字密码锁进行顶层设计并写出相应的VHDL程序,然后将数字密码锁划分为编码模块、比较模块、计数器选择模块、指示译码模块、寄存器模块和控制器模块6个部分,将各个模块一一实现。顶层设计中各个模块是作为元件来引用的,因此这里需要将各个模块设计成独立设计实体的具体形式,这样便可以在顶层设计来引用这些模块了。这种设计电路的方法不像传统设计方法那样,它用软件设计代替了硬件设计,使电路设计工作量大大减少。首先,密码器通过外接键盘输入数字密码,然后密码需要经过10线至4线编码器变成BCD码;接下来通过4位比较器与存储在系统中的预置密码进行比较,同时将输入的密码通过数码管扫描模块和指示译码模块显示出来。后文也将提到,论文设计只涉及到密码锁主体部分的软件设计。本次设计中的密码是串行输入的,每次分别与一个预置码比较。数据选择是3位的六选一选择,它的两位选择信号是由一个模6的计数器来给出的。外接键盘每送一个密码数字,计数器的计数值加1。如果计数器的数值计到6时,那么表示6个密码已经输入完毕。接下来计数器应向控制器发出反馈信号COUT,这表示控制器已经可以进入到启动状态。当密码输入错误时,密码锁将发出警报。(1) 系统顶层原理图如下:图2-1 系统顶层原理图(2) 系统的仿真顶层图:我们从系统的顶层仿真图可以清楚的看到数字密码锁划分为编码模块、比较模块、计数器选择模块、指示译码模块、寄存器模块和控制器模块6个部分。其中所设计的密码锁包括的状态:开锁状态(OUTLOCK)、安锁状态(INLOCK)、输入密码状态(PS_INPUT)、密码初验状态(PS_RIGHT)、密码初验错误状态(PS_WRONG)、报警状态(ALARM)及修改密码状态(PS_CHANGE),共7个状态。其共有7个输入信号端,分别是时钟信号(CLK)、上锁信号(LOCK)、开始信号(START)、报警复位信号(OFF_AL)、修改密码信号(PS_CH)、确认信号(ENTER)、输入密码信号(KEY_IN9.0);共有4个输出信号端,分别是锁闭合(KEY)、报警信号(WARN)、位控制信号(WEI2.0)、数据输出信号(DATAOUT7.0),其它的信号为中间传递信号。在使用时需要接入输入键盘、输出显示器以及其它一些辅助的外围设备后,即可构成一个电子密码锁。图2-2 系统的仿真顶层图2.4 器件选择90年代以来,我国单片机的应用经历了一个辉煌的时代。在电子设计数字化的今天,单片机几乎应用到电子设计的各个领域。但随着应用范围的推广,我们发现单片机并不是万能的,它本身还存在着一些缺陷,有些缺陷甚至是难以解决的。比较单片机和可编程器件FPGACPLD的优劣,我们可以发现可编程器件FPGA/CPLD正在以一种非常迅速的发展势头赶超传统的单片机。而与DSP芯片相比FPGA/CPLD又有易学和方便等特点。在FPGA和CPLD之间的选择要看开发项目的本身需要,对于普通规模且产量不是很大是,使用CPLD比较好。但本文考虑到今后的实际大规模应用,所以选用FPGA作为此次毕业设计的硬件平台,以达到提前训练的目的。FPGA一般有以下的用处:1)直接使用于产品的电路系统板上;2)间接使用FPGA完成系统整机的设计,包括最后的电路板的定型,然后将充分验证的设计软件;3)用于各种硬件仿真;4)专用集成电路ASIC设计仿真;而这里是用它的第一种用处,即直接使用。2.5 器件简介 (FLEX10K系列)FLEX10K系业以工业上最大的PLD(达到10万门)为特征,包括嵌入式阵列、多组低延时时钟和内部三总线等结构特性,提供了复杂逻辑设计所需的性能和利用主系统集成的要求。FLEX10K器件可理想地用于复杂门阵列的各种场合。FLEX10K器件包含一个优化接口,允许微处理器对FLEX10K器件进行串行或并行、同步或异步配置。该优化接口使微处理器把FLEX10K器件当做存储器来处理,并且通过写入虚拟存储地址进行配置,这样设计者就很容易重新配置器件,其结构框图如下:图2-3 FLEX10K器件的结构框图从上图可以看到,每组LE连接到LAB,LAB被分成行和列,每行包含一个EAB。LAB和EAB由快速通道互相连接。IOE位于行通道和列通道的两端。FLEX10K器件提供了6个专用输入引脚,驱动触发器控制输入,以保证高速、低摆率控制信号的有效分配。FLEX10K器件的结构类似于嵌入式门阵列。由于有标准的门阵列,嵌入式门阵列在通用的门海结构中实现一般逻辑。除此之外,嵌入式门阵列有专门的芯片面积以实现大的专用功能。嵌入式门阵列在减少芯片面积的同时具有比标准门阵列更快的速度,这是通过嵌入在硅里的宏函数完成的。然而嵌入的宏函数不能被用户化,限制了设计者选项。相比之下,FLEX10K器件是可编程的,在调试时,给设计者提供了实现重复设计改变过程中对嵌入宏函数和一般逻辑的完全控制。每个FLEX10K器件包含一个实现存储和专用逻辑功能的嵌入阵和一个实现一般逻辑的逻辑阵列。嵌入阵列和逻辑阵列的结合提供了嵌入式门阵列的高性能和高密度,可以使设计者在某个器件上实现一个完整的系统。要特别注意在使用时,需加入一个ROM存储器来装载数据(若选用CPLD的器件可以不用附加外部存储器)。逻辑阵列由逻辑块(LAB)构成,每个LAB包含8个逻辑单元和一个局部连接。每个逻辑单元有一个4输入查找表、一个可编程触发器和一个实现进位和级联功能的专用信号路径。LAB中的8个逻辑单元可用来产生中规模逻辑块,比如8比特计数器、地址译码器或状态机,或者通过逻辑阵列块结合产生更大的逻辑块。每个I/O管脚由位于快速互连通道的每个行、列两端的I/O单元(IOE)输入,每个IOE包含一个双向I/O缓冲器和一个触发器。这个触发器可用数据输入、输出或双向信号的输出或输入寄存器。3 VHDL语言程序设计3.1 模块一 寄存器寄存器模块中有6个寄存器M0到M5,可存储6个BCD码形式的密码数据。6位寄存器的在这里的主要功能是寄存要保存的密码,和将保存的密码与使用者输入的密码进行比较,以确认其身份。architecture behave of shifter issignal m0: std_logic_vector(3 downto 0);signal m5: std_logic_vector(3 downto 0);beginprocess(clk)begin if clk=1 and clkevent then if en=1 then -密码脉冲作为使能信号 case addr is when 001 = if reg_wr=1 then m0=data_in; else data_out=m0; end if; end if; end process;end architecture behave;以下是仿真图的信号端口说明读/写时钟:CLK,读/写信号:REG_WR,使能:EN,地址:ADDR,数据输入:DATA_IN,数据输出:DATA_OUT。M0到M5分别寄存了从DATA_IN输入的秘密,根据ADDR的值决定寄存在哪一个里。图3-1 模块一 寄存器的仿真图3.2模块二 控制电路电锁控制电路是整个电路的控制中心,是这个电路设计的核心部分,也是本设计的重点与难点。但是用VHDL语言设计控制电路的程序编写并不难,因为所设计的状态多,所以设计占用的篇幅较多而已。而且理解程序也不难,设计时只要根据设计的状态转移图编写程序就可以了。要想使所设计的密码锁具有什么样的功能,就要根据设计的控制电路。以后想更新密码锁的功能,也可直接在控制模块修改程序即可。又因为所用硬件是FPGA,则更新密码锁的功能不必再更新硬件,只需更新软件。控制模块采用有限状态机设计,将系统分为7个状态,即开锁状态(OUTLOCK)、安锁状态(INLOCK)、输入密码状态(PS_INPUT)、密码初验状态(PS_RIGHT)、密码初验错误状态(PS_WRONG)、报警状态(ALARM)及修改密码状态(PS_CHANGE)。编程时直接按照下面的状态转换图,其状态转换如图:OUTLOCKPS_CHANGEALARMINLOCKPS_INPUTPS_WRONGPS_RIGHTenter=1ps_ch=1enter=1lock=1off_al=1enter=1cmp_r=0start=1cmp_r=1图3-2 控制模块的状态转换图architecture face of kongzhi isconstant key_active:std_logic:=1;type state_type is(outlock,inlock,ps_input,ps_right,ps_wrong,alarm,ps_change);signal state:state_type;begin cnt_clk -开锁 key=0; if lock=key_active then state=inlock;elsif ps_ch=key_active then state=ps_change; else state -安锁 key=1;-关锁 code_en=0;-禁止输入密码 cnt_clr=1;-清零信号 reg_wr=0; warn=0; if start=1 then state=ps_input; else state state=inlock; end case; end if;end process;end architecture face;下图是控制模块的仿真图,上电时,系统处于开锁状态,按LOCK键,进入“按锁”状态,状态编码为“001”,闭锁;准备开锁,按START键,进入输入密码状态,状态编码“010”,PS_I输入6个脉冲,表示输入密码脉冲,每个密码脉冲的宽度等于1个时钟周期。在密码脉冲有效时间内,有1个时钟下降沿和1个时钟上升沿,在下降沿时,寄存器输出对应地址的密码数据,在上升沿时,检查比较结果。图中CMP_R=1,表示相等,CIN=1,表示计数值满6,所以进入密码初验正确状态,状态编码“011”;再按ENTER键,进入开锁状态,锁被打开。以下是仿真图的信号端口说明clk:时钟输入,lock:安锁,start:输入密码,off_al:报警复位,ps_ch:修改密码,enter:密码确认,ps_i:密码脉冲,cmp_r:比较结果,cin:密码输入指示,cnt_clr:计数器清零,cnt_clk:计数器时钟,reg_wr:寄存器读/写信号,key:钥匙信号,warn:报警信号,code_en:密码输入使能。图3-3 模块二 控制电路的仿真图3.3 模块三 计数器此系统所设计的计数器是一个单向计数器,带有异步清零端和计数满指示端,模值为8。这个计数器有2个作用:计数值输出作为寄存器的地址输入;计数满指示送人控制模块,表示密码长度是否满足。因为此设计是6位密码锁,所以计数器在计数满6时要将计满信号COUT置1。输入CLR信号可以让计数器清零,进入复位状态。若想改变密码锁的密码位数,就只需修改计算器模块的部分参数,但别忘了还要修改寄存器的参数。我之所以只做6位数的密码锁,是考虑到现在很多实际应用场合都是6位的,而且密码锁的位数太多也会影响实际使用,它需要使用者牢牢死记密码。architecture art of counter isconstant reset_active:std_logic:=1;signal cnt:std_logic_vector(2 downto 0);begin addr=cnt; process(clk,clr) begin if clr=reset_active then cnt=000; cout=0; elsif clk=1 and clkevent then if cnt=101 then cnt=110; cout=1; else cnt=cnt+1; end if; end if;end process;end architecture art; 以下是仿真图的信号端口说明计算值输出:ADDR,计数满指示:COUT。图3-4 模块三 计数器的仿真图3.4 模块四 比较器在数字密码器中,比较器模块的功能是对编码器模块的输出和寄存器模块的输出进行比较,然后将比较的结果送人到控制器模块。比较器的具体工作原理是:当比较结果相等时,cmp_r的输出为1;当比较结果不相等时,cmp_r的输出为0。architecture art of compare isbegin c=1 when a=b else 0;end architecture art;图3-5 模块四 比较器的仿真图3.5 模块五 编码器在数字密码锁中,输入键盘有0到9共10个键,可以用10位二进制数表示,而寄存器中数据存储格式为BCD码,所以需要转换。编码器模块的主要功能是将10位二进制数编码为BCD码,然后将编码结果送人到比较器模块和寄存器模块。另外,编码器还需要将输入的跳变检测出来,将密码脉冲ps_i送人控制模块。architecture art of coder issignal key_in1:std_logic_vector(9 downto 0);signal key_in2:std_logic_vector(9 downto 0);signal temp:std_logic_vector(3 downto 0);beginu1:process(clk) -延迟信号 begin if clk=1 and clkevent then if en=1 then key_in2=key_in1; key_in1=key_in; end if; end if;end process;ps_i temp temptemp=0000; end case; end if; end if;end process;code_out=temp when en=1 else 0000;end architecture art;以下是仿真图的信号端口说明按键输入:KEY_IN,密码脉冲:PS_I,编码输出:CODE_OUT。图3-6 模块五 编码器的仿真图3.6 模块六 显示译码器显示器是采用6位并行显示D1到D6,在具体使用时可直接接入相应的显示指示器即可。在这里用WEI信号来控制输入的6位数的显示。而且显示器已将4位BCD码转换为显示指示器的字形码。需要说明现在设计的显示译码器的译码原理跟模块五所设计的编码器的编码原理有实质性的差别。architecture behave of XIANSHI is signal qq:std_logic_vector(3 downto 0); signal cntt:std_logic_vector(2 downto 0);beginprocess(clk) VARIABLE CNT:STD_LOGIC_VECTOR(2 DOWNTO 0);beginif clkevent and clk=1 then IF CNT5 THEN CNT:=CNT+1; ELS

温馨提示

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

评论

0/150

提交评论