基于FPGA的数字密码锁设计(VHDl代码全,11个模块均调试通过).doc_第1页
基于FPGA的数字密码锁设计(VHDl代码全,11个模块均调试通过).doc_第2页
基于FPGA的数字密码锁设计(VHDl代码全,11个模块均调试通过).doc_第3页
基于FPGA的数字密码锁设计(VHDl代码全,11个模块均调试通过).doc_第4页
基于FPGA的数字密码锁设计(VHDl代码全,11个模块均调试通过).doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

2.3 基于FPGA实现的设计方案下面参照上述分立元件实现和单片机技术实现方案中的操作过程、实现思路、对应的模块设置和电源实现等,结合已有CPLD应用实践经验,借鉴基于单片机实现技术中的主控流程和密码修改流程,并根据本次毕业设计任务要求确定本次设计的实现方案如图2-5所示。 控FPGA译码按键显示声光显示密码存储器 图 2-5 数字密码锁的设计框图基于FPGA实现的数字密码设计框图中主要包括6大部分:按键输入、FPGA器件、声光显示、密码存储、译码电路,显示电路3。其中FPGA为主控部分,将消除同步模块、计数器模块、控制器模块都用VHDL语言写入FPGA中代替了传统复杂的电路设计,也省去了很多繁琐的调试步骤,只有这些模块在Quartus II平台通过了仿真,就可以实现传统电路模块的功能。本次设计的数字密码锁主要是利用软件的编程来对主控模块的实现。当通过按键输入密码后,就把输入的信号送给FPGA,FPGA经过里面个模块的处理后传给了各输出电路模块。声光显示主要是来判断密码输入的正确与否和当前密码锁的状态;密码存储器主要是用来存储密码和防止电源掉电而导致密码锁的数据丢失和提高密码锁的安全性。显示电路主要是用来显示密码锁当前的状态和输入的密码是否正确4。本设计采用Altera公司的Quartus II 7.2进行编译仿真。选择VHDL语言进行编程现实各模块的功能和顶层的设计。3 功能模块设计与实现根据前面确定的方案, 数字密码锁主要是由控制模块和外围模块组成,以FPGA为控制核心, 配以相应硬件电路,完成密码的设置、存贮、识别和显示、报警等功能。下面就各个模块的设计、仿真调试和结果等作概要的介绍。3.1 数字密码锁的构架数字密码锁由主控部分和外围电路组成,前者主要作用是接收密码并进行密码的验证操作;附加的外围指示电路的主要作用是用来显示输入的密码和根据密码验证的结果来给出不同的指示灯显示和报警,而报警装置则通常采用扬声器。结合设计任务和确定的实现方案,确定的数字密码锁的构架图如图3-1所示。具体设定数字密码锁的主要功能如下:数字密码锁的工作时钟由外部晶振来提供,时钟频率为1MHz;密码采用3位十进制数字;密码输入正确后,密码锁将启动开锁装置;密码输入错误后,密码锁将给出报警信息,它通过红灯和蜂鸣器来指示;报警后,内部人员可以通过按键I-SETUP对密码进行重新设置;保险柜开启后,操作人员可以通过SETUP使密码器回到初始等待状态。 数字密码锁VCC A F BE C G D LED_GLED_RALERTDIPSETUPSTARTOPENI-SETUPA0A1A2A3A4A5A6A7A8A9CLK图3-1数字密码锁的构架图 对照图3-1,各输入输出如表3-1所示。表3-1 各输入输出信号说明信号说明信号说明i_setup报警复位open开锁setup复位clk时钟脉冲start启动密码输入A0-A9十进制密码输入dip启动密码修改A-G七段译码器LED_R、LED_G红、绿指示灯ALERT报警扬声器3.2 功能模块的划分 在本次设计中将系统分成七个模块来分别设计仿真。分别为以下十一个模块:分频、同步消抖、使能电路、反相电路、密码存储、编码、比较、计数选择、数码管译码、指示电路、控制器等模块组成。下面就具体如何设计和具体实现作必要的说明。表3-1各个模块的功能模块功能分频模块对已有的时钟频率进行分频获得我们需要的频率同步消抖模块对输入的数字密码A0A9、START、OPEN、SETUP和I-SETUP等按键信号进行同步消抖使能电路模块控制输入按键是否有效反相电路模块用来对输入的SETUP、I-SETUP和START按键输入信号进行反相操作密码存储模块对计数模块的计数值进行寄存编码模块将外接键盘输入的信号转换成BCD码比较模块对编成模块的输出数据和密码存储模块的输出数据进行比较计数选择模块根据动态选择信号,选择相应的需要显示的计数值数码管译码模块将BCD码译成数码管的显示数据指示电路模块显示输出的状态和发出警报声控制器模块控制整个电路中各状态之间的转换和运行3.3 各功能模块的实现与调试3.3.1分频模块密码锁中分频模块的主要功能是用来对输入的外部时钟进行1000分频和200000分频,目的是得到1000Hz的时钟信号CLK_DIV1和5Hz的时钟信号CLK_DIV2。在数字密码锁中,它的外部时钟信号CLK是由外部晶振来提供的,时钟频率为1MHz.。在密码锁系统中,时钟信号的作用是用来驱动蜂鸣器报警装置和用来提供给消抖同步电路的时钟信号。这里假设用来驱动蜂鸣器的时钟信号为CLK_DIV1,它的频率为1000Hz;用来提供给消抖同步电路的时钟信号CLK_DIV2,它的时钟频率为48Hz。这里取5Hz。这两个时钟信号都是由外部时钟信号CLK经过分频产生的5。通常数字电路中的分频操作是采用计数来进行。就是利用一个自由计数器来产生各种需要的频率,也就是先建立一个N位计数器,N的大小根据电路的需求来决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号6。若输入时钟为CLK,N位计数器的输出为QN10,则Q(0)的CLK的2分频脉冲信号,Q(1)为CLK的4分频脉冲信号,Q(2)为CLK的8分频脉冲信号Q(N1)为CLK的分频脉冲信号;Q(5 DOWNTO 4)取得的是一个脉冲波形序列,其值依次为00011011周期性变化,其变化频率为CLK的分频,也就是32分频。利用以上规律即可得到各种我们需要频率的信号或信号序列,但是对于分频数目较大的分频电路来说,采用计数方法容易出现错误,因此这时一般采用小数目分频电路的级联方法来完成较大规模的分频电路。对于外部信号CLK的200分频来说,这里可以采用10分频电路和20分频电路来构成,1000分频和200000分频也是按照这个原理来做的,如图3-2所示。 10分频电路20分频电路CLKCLK_DIV1tmp3图3-2 级联构成的200分频电路 通过图3-2所示的分频电路的级联结构可以看出,这里首先要进行10分频和20分频电路的设计,然后才可以通过级联的方法来设计200分频,下面具体以10分频做下介绍。10分频电路的顶层原理图如图3-3所示。 图3-3 10分频电路的顶层原理图 经过Quartus II仿真后,10分频电路的时序仿真图如图3-4 所示。从图中可以看出,clk输入10个频率合成一个clk_div信号,符合10分频功能的要求。程序代码参考附录一中的程序1。图3-4 10分频电路的时序仿真图3.3.2同步消抖模块对于数字密码锁输入电路,可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。虽然机械式键盘存在一些诸如机械产生的弹跳消除问题和机械部分的接触等问题,但是和触摸式键盘相比,机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用数字电子密码锁中还是比较适宜的。但是由于按键方式产生的数字密码A0A9、START、OPEN、SETUP、I-SETUP的产生时刻和持续时间长短是随机不定的,同时存在因开关簧片反弹而引起的电平抖动现象,对于电子密码锁的这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。因此必须添加消抖同步电路。图3-5所示的就是一种应用得较为广泛的消抖同步电路。tmp4 &D QCP -QD QCP -Q&输入tmp1clktmp2 tmp3 tmp6 tmp5 输出图3-5 消抖同步电路图中所用到的D触发器的顶层原理图如图3-6所示。图3-6 D触发器的顶层原理图D触发器的时序仿真图如图3-7所示。从图中我们可以看出,此程序完全实现了D触发器的功能。程序代码参考附录一中的程序2。图3-7 D触发器的时序仿真图这里需要注意的是,因为采用与非门构成的触发器使用低电平触发,因此按键输入的数字或者指令要设计为低电平有效。消抖同步模块需要对输入的数字密码A0A9、DIP、START、OPEN、SETUP和I-SETUP共15个按键信号进行消抖同步。同步消抖模块的顶层原理图如图3-8所示。图3-8 同步消抖模块的顶层原理图同步捎消抖电路的时序仿真图如图3-9所示,从图中我们可以看出,输入信号c5、c4、c3、c2、c1、a90、a80、a70、a60、a50、a40、a30、a20、a10、a00经过同步消抖电路后,达到了同步消抖的功能。程序代码参考附录一中的程序3。 图3-9 同步捎消抖电路的时序仿真图3.3.3使能电路模块当数字密码锁进入到密码输入状态时,控制器模块输出的使能信号EN变为有效(高电平),此时只允许数字密码A0A9、OPEN信号的输入7。当使能信号有效(高电平)时,输入的信号A0A9和OPEN进行反相操作;否则输出为高阻状态。密码锁中的使能电路模块的顶层原理图如图3-10所示,VHDL程序如程序9所示。图3-10 使能电路模块的顶层原理图使能电路经时序仿真后如图3-11所示,从图中我们可以看出,当使能信号EN有效(高电平)时,输入的信号A0A9和OPEN_T进行反相操作;否则输出为高阻状态,从而达到了使能电路的功能8。程序代码参考附录一中的程序4。图3-11 使能电路的时序仿真图3.3.4反相电路模块在数字密码锁的设计中,反相电路模块的主要功能是用来对输入的SETUP、I-SETUP、START和DIP的按键输入信号进行反相操作,从而满足消抖同步模块对输入信号的电平要求。反相电路模块描述非常简单。它的顶层原理图如图3-12所示,VHDL程序如程序10所示。图3-12 反相电路模块的顶层原理图反相电路模块的时序仿真图如图3-13所示。从图中可以看出,输入的WAIT_T、READY和SETUP的按键输入信号进行了反相。程序代码参考附录一中的程序5。 图3-13 反相电路模块的时序仿真图3.3.5 密码存储模块在数字密码锁中,密码存储模块是它的密码规定电路,其功能有两个:一个是将存储的密码输出到比较模块中与外部输入的数字进行比较操作,另一个是存储用户修改后的密码9。密码存储模块的地址选择信号由计数器模块电路来进行选择。模为三的计数器模块电路控制信号RESET和时钟信号CNP是由控制器模块来提供的。下面给出密码存储模块的顶层原理图如图3-14所示和VHDL程序如程序11所示。图3-14 密码存储模块的顶层原理图密码存储模块的时序仿真图如图3-15所示,从图中可以看出:在0-200ns时,写信号有效,由A0A9数字按键产生的输入信号存入了密码存储模块;在200-400ns时,读信号有效,存储的密码由e1e4输出,进入比较模块与输入的数字进行比较。程序代码参考附录一中的程序6。 图3-15 密码存储模块的时序仿真图3.3.6 编码模块在保险柜密码器中,由于密码数字是由外接键盘输入的信号,因此这里需要把它转换成4位BCD码送入到比较器中,这时需要采用10线至4线编码器来完成这样的转换。因为前级消抖同步模块的输出是高电平,因此A0A9这10个数字的输入信号经过消抖同步后应该是高电平有效。对于编码器的输出来说,B4是MSB,B1是LSB。在密码器中,编码模块的顶层原理图如图3-16所示。图3-16 编码模块的顶层原理图图3-17是编码模块的时序仿真图,从图中可以看出:当输入0、3、2三个数字时,编码器对其进行了编码,并且每有一个数字输入,data_in都会向控制器发出一个高电平的信号。程序代码参考附录一中的程序7。图3-17 编码模块的时序仿真图3.3.7 比较模块在数字密码锁中,比较模块的主要功能是对编成模块的输出B1B4这4位数据和密码存储模块的输出E1E4这4位数据进行比较,然后将比较的结果送入到控制器模块的DEF端口上。比较器的具体工作原理是:当比较结果相等时,DEP的输出为1;当比较结果不相等时,DEP的输出为0。下面给出密码器中比较模块的顶层原理图如图3-18所示。 图3-18 比较模块的顶层原理图 经过Quartus II仿真后,得到时序仿真图如图3-19。图中波形表明,当e1e4与b1b4相等时,dep信号输出为高电平,否则输出为低电平。程序代码参考附录一中的程序8。图3-19 比较模块的时序仿真图3.3.8 计数器选择模块在密码器中,计数器选择模块的功能是用来给出密码预置输出模块中的地址选择信号s0和s1,它的控制信号RESET和时钟信号CNP是由控制器模块来提供的;另外还有一个输出信号FULL,它表示3个密码数字已经输入完毕,控制器已经可以进入到启动状态。下面给出计数器选择模块的顶层原理图如图3-20所示。图3-20 计数器选择模块的顶层原理图从计数器选择模块的时序仿真图2-21中可以看出:在129.0ns处full变为高电平,这是因为此时s1和s0已经计到了第三个数字,所以计数器选择模块向控制器发出了full信号。程序代码参考附录一中的程序9。图3-21 计数器选择模块的时序仿真图 3.3.9 数码管显示译码模块数码管显示译码模块的功能是用来显示输入的密码数字,它可采用LED数码显示和液晶屏幕显示两种。液晶显示具有高速显示、高可靠性、易于扩展和升级等特点,但是普通液晶显示屏存在亮度低、对复杂环境的适应能力差等缺点,在低亮度的环境下还需要加入其它辅助的照明设备,驱动电路设计相对复杂,因此本设计的显示电路仍使用通用的LED数码管。它是由七段可发光的二极管组成的。为了使七段数码管能够显示出所要表示的数值,需要采用译码器将所要表示的数值译码成数码管所需要的驱动信号。这里,数码管显示译码模块的输入是编码器的B1B4这4位输出,输出是用来驱动数码管的驱动信号,它们是高电平有效的信号,因此采用共阴极LED显示器。下面给出计数器选择模块的顶层原理图如图3-22所示。图3-22 计数器选择模块的顶层原理图从图3-23数码管显示译码模块的时序仿真图中可以看出,当b4b3b2b1=0000时,a、b、c、d、e、f呈高电平,即数码管显示“0”,当b4b3b2b1=0001时, b、c呈高电平,即数码管显示“1”,所以数码管显示译码如表3-24所示。程序代码参考附录一中的程序10。图3-23 数码管显示译码模块的时序仿真图表3-24 数码管显示译码表数字按键B4b3b2b1数码管显示译码七段数码管显示的数字A0000001111110A1000100001101A2001010110112A3001110011113A4010011001104A5010111011015A6011011111016A7011101001117A8100011111118A91001110111193.3.10 指示电路模块在保险柜密码器中,指示电路模块的功能是用来产生红灯指示LED_R、绿灯指示LED_G和蜂鸣装置ALERT。根据图2-2所示的模块划分框图不难看出,绿灯指示LED_G是由控制器模块提供的置位信号S_LG和按下WAIT_T键时提供的WAIT_L信号通过RS触发器来共同控制的;红灯指示LED_R是由控制器模块提供的置位信号S_LR和信号WAIT_L共同控制的;蜂鸣装置ALERT是由置位信号S_LR、信号WAIT_L反相器和单频信号CLK_DIV1来共同控制的。指示电路模块中的主要元件是RS触发器,控制器提供的置位和复位信号都应该是低电平有效。下面首先给出RS触发器的顶层原理图,如图3-25所示。程序代码参考附录一中的程序11。图3-25 RS触发器的顶层原理图图3-26 RS触发器的时序仿真图从图3-26 RS触发器的时序仿真图中可以看出,RS触发器的VHDL程序完全实现了RS触发器的功能。接下来给出密码器中指示电路模块的顶层原理图,如图3-27所示。指示模块的顶层原理图是以上面的RS触发器为基本元件构成的10。图3-27 指示电路模块的顶层原理图在图3-28指示电路模块的时序仿真图中,在155.4ns处,当s_lr置于高电平,即发出报警信号时,led_r置低电平,alert随时钟信号变化,此时,系统处于报警状态,红灯亮,报警器报警;当s_lg置于低电平时,led_g置低电平,密码锁处于启动状态。从时序图中可以看出,报警模块的设计符合设计要求。程序代码参考附录一中的程序12。图3-28指示电路模块的时序仿真图3.3.11 控制器模块下面是数字密码锁中的核心部分控制器模块,控制器模块的顶层原理图如图3-29所示。它在密码器系统中占有重要的地位,控制器采用有限状态机进行设计,有限状态机克服了纯硬件数字系统中顺序方式控制不灵活的缺点11。状态机的工作方式是根据控制信号按预先设定的状态进行的,状态机是纯硬件数字系统中的顺序控制电路,其控制灵活方便,结构模式相对简单,设计方案相对固定。本设计中将系统分为7个状态,即建立等待状态QA、准备就绪状态QB、密码输入状态QC、启动状态QD、报警状态QE、报警返回状态QF、密码修改状态QG,各状态之间的关系如框图3-30所示。 图3-29 控制器模块的顶层原理图QF报警返状态QA建立等待状态QD启动状态QE报警状态QC密码输入状态QB准备就绪状态Start=1open=1I_ setup=1full=1dep=0dep=1full=1Start=1setup=1open=1QG密码存储状态图3-30 控制器状态转换图建立等待状态QA是指密码器处于上电、启动或者报警后的状态,这时密码器并没有进入到正常的先行状态,因此密码器不会接收除SETUP信号外的任何输入号;准备就绪状态QB是指密码器在被按下SETUP键后处于的一种状态。这时如果操作人员按下START,密码器将会进入到第三种状态,等待密码数字的输入。在这种情况下,密码器会输出计数器清零信号RESET把计数器复位置零;密码输入状态QC是控制器模块的第三个状态,这时密码器将会进入到数字密码输入的操作状态。当处于这种状态时,控制器模块的输出EN信号将变为有效,它意味着此时允许数字密码A0A9和OPEN的按键输入;启动状态QD是控制器模块的第四个状态,这时控制器将判断按键输入的具体信号:如果判断出按键输入是OPEN信号,那么将发出S_LG信号;如果出是数字按键输入,那么控制器模块将进入到报警状态;报警状态QE,当控制器模块处于这个状态时,如果按下START键,那么控制器模块将发出复位信号RESET,并使控制器返回到密码输入状态;如果按下OPEN键,那么控制器模块将输出置位信号S_LR,并返回到报警返回状态;报警返回状态QF,当控制器模块处于这个状态时,控制器将判断输入的具体信号:如果按下ISETUP,那么控制器模块将返回到建立等待状态。如果按下其他按键,那么状态将不会发生变化;密码存储状态QG,当控制器模块处于这个状态时,控制器将发出清零信号RESET将计数器清零,然后判断有无数字输入,若有数字输入则发出WR信号,使密码存储模块处于写状态;若没有数字输入则返回本状态,等待新密码输入。当3个新密码输入完毕后,计数器会向控制器发出FULL信号,此时控制器将又返回建立等待状态。4 数字密码锁的综合调试与结果说明4.1顶层电路在设计完各个模块后,需要将各个模块有机地组合成一个整体,最后来实现系统的功能在数字频率计的设计中,同时采用了电路原理图的设计以及VHDL语言来编写的顶层电路12。 电路原理图见图4-1,具体源代码见附录一,仿真图如图3-21所示。图 4-3 数字密码锁的顶层原理图在前面,我们已经把数字密码锁各组成模块的程序进行了编写,并用Quartus II 7.2进行了编译仿真,从仿真时序图中可以看出,各模块实现了各自的功能,达到了预期的目标。下面,将就数字密码锁进行整体仿真,从而验证其正确性。图4-2显示的是用户输入正确的密码以及修改数字密码时的时序仿真图,从图中可以看出:当给密码锁上电后,密码锁进入到等待状态QA。若用户按下SETUP按键,则c11 产生一个高电平信号,WAIT_L置1,密码锁进入到准备状态QB。当用户需要开门时,按下START键,即c33呈高电平,这时RESET信号置高电平,计数器清零;S_LR,S_LG和ALERT置于低电平,此时用来指示密码锁工作情况的指示灯和扬声器都处于不工作状态,密码锁进入QC输入密码状态,可以接收外部输入的密码数字。 图4-2数字密码输入正确时的时序仿真图用户通过A0A9按键输入第一个数字密码后,编码器会向控制器发出DATA _IN信号,此时控制器模块会向计数器选择模块发出时钟信号CNP和向密码存储模块发出RD信号,目的是选出对应的预置密码与输入的密码进行比较。如果输入的密码正确,则比较器会向控制器发出1个表示输入数字密码正确的DEP信号,否则将不会发出DEP信号;当用户输入第二个数字密码后,重复上述操作;当输完三个数字密码后,计数器会向控制器发出1个表示密码已经输入完毕的FULL信号。如果前面用户输入的数字密码正确,则密码锁将进入启动状态QD,此时用户若按下OPEN键,则密码锁的绿灯亮,密码锁开锁。随后若用户没有按DIP键,即不修改密码,则密码锁会重新进入到等待状态QA。数字密码输入正确后,若用户需要修改密码,则需按下DIP键,此时,RESET信号置高电平,计数器清零,若有数字密码输入,则编码器会向控制器发出DATA _IN信号,此时控制器将向计数器发出时钟信号CNP,同时向密码存储模块发出WR信号,使其进入到写状态,待3个十进行数字密码输入完毕后,计数器会向控制器发出一个FULL信号,密码锁重新进入QA等待状态。如果前面用户输入的数字密码不正确,则密码锁将进入到报警状态QE,如图4-2所示。图 4-2 数字密码输入错误时的时序仿真图当用户在输入密码过程中发现密码输入有误,则可以通过START键进行重新输入,此时控制器向计数器发出RESET清零信号,密码锁重新进入到QC密码输入状态。若用户在输入3个数字密码过程中没有按下START按键,而是在输入完3个数字密码后按下了开锁键OPEN,则S_LR和ALERT置高电平,密码锁的红灯亮,蜂鸣器报警。密码锁同时进入到报警返回状态QF,这时,START键和SETUP按键是不起作用的。在这种情况下,密码锁必须由内部人员通过按键I-SETUP来对密码器进行重新设置,才使其重新回到等待状态QA。从以上讨论,可以看出前面各模块设计较好的完成了数字密码锁的功能。其中密码锁顶层设计的各个模块是以元件的形式给出的,必须首先进行元件说明,然后才能进行元件的例化调用。另外,结构体的说明部分还定义了许多中间信号,它们的作用是用来在模块之间传递信息。4.2 过程调试 PIN脚的设置、结果及程序下载图分别如图4-3、图4-4和图4-5所示。图4-3 PIN脚的设置图4-4 设置结果图4-5 程序下载图在DE2上硬件调试结果图如图4-6和图4-7所示:图4-6 成功的结果图图4-7 不成功的结果图硬件调试结果说明:1 给密码锁上电后按下SETUP键,密码锁进入等待状态当用户需要开门时,按下START键,表示密码锁准备就绪,可以接收外部输入的密码数字;这时用来指示密码锁工作情况的指示灯和扬声器都处于不工作状态。2 通过A0A9按键输入3位数字密码后按下OPEN键如果输入密码正确并使用按键正确,这时密码锁将启动开锁装置,同时密码锁的绿灯亮;如果输入密码错误或者按键错误,这时密码锁不会启动保险柜开启装置,它将鸣叫扬声器,同时密码锁的红灯亮。3 密码锁开启结束后将进入到下一次开启等待状态。这时,按下SETUP按键,密码锁重新进入到等待状态。4 密码锁处于报警状态时,START键和SETUP按键是不起作用的在这种情况下,密码锁必须由内部人员通过按键I-SETUP来对密码器进行重新设置,目的是使其重新回到等待状态。为了密码锁的安全起见,这里按键I-SETUP应该放在内部人员办公其他室或者其它外部人员不能进入的地方。5 如果发现输入的3位密码有错误这时操作人员可以在按下OPEN键之前按下START键重新回到就绪状态。因此,密码锁需要含有一个输入数字密码的显示电路,这里采用七段显示数码管来依次显示输入的数字密码。6 其他数字密码09、DIP、START、OPEN、SETUP、I-SETUP均为按键方式产生,其中数字密码09、DIP、START、OPEN和SETUP可以采用外接的键盘来进行输入需要注意的是,内部按键I-SETUP不由外接键盘提供。这里密码锁的工作时钟由DE2中27MHz分频来得到。5 展望目前电子锁产品标准,安防产品国际标准化认证有:ISO、CE、UL、FCC等,但国内尚未颁布电子锁的产品标准。目前仅有相关的国家标准如GB1040989防盗保险柜和部颁标准GA2592防盗安全门通用技术条件在这两上相关标准中仅对电子锁有关性能在技术上提出了要求和试验方法,为设计电子锁的设计提价了基本依据。但要作为产品的标准却少了产品分类、规格和型号,这给生产厂家和用户带来诸多不便。电子锁质量的可靠性,在很大程度上依赖于对电子元器件和制造工艺的质量控制。目前国内电子元器件的市场,对电子锁产品生产厂家一般很难做到直供,元器件供货质量很难得到保证。我在这方面考虑有所欠缺。另外,数字密码锁的电源,采用的简单不间断电源是将电池和电网交流电经整流得到的直流低电压分别串联隔离二极管后相并自动切换。目前存在的问题:一是电磁铁负载大,整机功耗高;二是缺少备用电源的自动充电和欠压提示。当上述工作都做完后去把设计拿到实验室进行硬件下载,在下载过程中并不是一帆风顺的,出现的问题及解决方法如下:首先是按设计接好电路,实验箱通电后,发现设计无法下载到试验箱上的FPGA芯片上。经检查发现是因为没有装下载驱动,当装好驱动后,这问题迎刃而解。当驱动问题解决后,下载到FPGA芯片上后发现指示电路的工作情况与设计中完全相反了。仔细检查之后发现是因为设计中的LED接了电源,高电平不亮、低电平亮;而实验箱上的LED是高电平有效(亮)、低电平无效(不亮),把指示灯的状态调整后,问题解决。上述问题都解决后进行最后的功能仿真的过程中发现密码修改功能无法实现。经检查后发现是控制器中密码存储状态部分的程序编写不周到导致的。在重新编写之后问题得到解决。致谢经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及同学们的支持,想要完成这个设计是难以想象的。另外,衷心感谢同窗好友们,在我毕业论文写作中,与他们的探讨交流使我受益颇多;同时,他们也给了我很多无私的帮助和支持,我在此深表谢意。焉得谖草,言树之背,知育之恩,无以回报。今天,我们即将离开我们的母校,离开朝夕相处的老师和同学好友们,但学无止境,明天,又将是我终身学习另一天的开始。 参考文献1 朱正伟EDA技术及应用M.北京:清华大学出版社,2005,10.2 施云贵,孙玉杰,姜维利基于P89C51Rx2可编程计数器阵列(PCA)实现直流电机调速控制J.仪器仪表学报,2006,32(9):1922.3 潘松,黄继业编著.EDA技术实用教程M.北京:科学出版社,2005,1.4 王金明数字系统设计与Verilog HDLM.北京:电子工业出版社,2005,9.5 求是科技编著.VHDL应用开发技术与工程实践M.北京:人民邮电出版社,2005,1.6于枫编著.ALTERA可编程逻辑器件应用技术M.北京:科学出版社.2004,9.7尹常永编著.EDA技术与数字系统设计M.西安:西安电子科技大学出版社.2004,8.8Ming-Bo Lin.Digital System Designs and Practices: Using Verilog HDL and FPGAs M.New York:McGraw-Hill,2008,8.9孙君曼,马庆华,扈刚.基于PIC16C57单片机的电子密码锁的设计与实现J.工业控制计算机,2002,15(7):1624.10崔葛瑾.基于FPGA的数字电路系统设计M.西安:西安电子科技大学出版社,2008,7.11王效华,张咏梅编著.单片机原理与应用.M北京:北京交通大学出版社.2007,5.12李忠国 陈刚编著.单片机应用技能实训M.北京:人民邮电出版社.2006,11.附录1 程序代码程序1 10分频电路的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY clk_div10 IS port(clk:IN std_logic; clk_div:OUT std_logic);END clk_div10;ARCHITECTURE rtl OF clk_div10 IS SIGNAL count:std_logic_vector(2 DOWNTO 0 ); SIGNAL clk_tmp:std_logic;BEGIN PROCESS(clk) BEGIN IF ( clkevent AND clk =1) THEN -上升沿触发; IF ( count =100 )THEN -当count记过五个时钟周期时,clk_tmp反相; count 0 ); clk_tmp = NOT clk_tmp; ELSE count = count +1; END IF; END IF; END PROCESS; clk_div = clk_tmp;END rtl;程序2 20分频电路的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY clk_div20 IS port(clk:IN std_logic; clk_div:OUT std_logic);END clk_div20;ARCHITECTURE rtl OF clk_div20 IS SIGNAL count:std_logic_vector(3 DOWNTO 0 ); SIGNAL clk_tmp:std_logic;BEGIN PROCESS(clk) BEGIN IF ( clkevent AND clk =1) THEN -上升沿触发; IF (count=1001)THEN -当count记过十个时钟周期时,clk_tmp反相; count0); clk_tmp = NOT clk_tmp; ELSE count = count +1; END IF; END IF; END PROCESS; clk_div = clk_tmp;END rtl;程序3 200分频电路的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY clk_div200 IS port(clk:IN std_logic; clk_div:OUT std_logic);END clk_div200;ARCHITECTURE rtl OF clk_div200 IS COMPONENTclk_div10 PORT (clk:IN std_logic; clk_div:OUT std_logic); END COMPONENT clk_div10; COMPONENTclk_div20 PORT (clk:IN std_logic; clk_div:OUT std_logic); END COMPONENT clk_div20; SIGNAL tmp:std_logic;BEGIN -元件连接说明; U1:clk_div10 PORT MAP(clk,tmp); U2:clk_div20 PORT MAP(tmp,clk_div);END rtl;程序4 分频模块的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY clkdiv_model IS port ( clk:IN std_logic; clk_div1:OUT std_logic; clk_div2:OUT std_logic); END clkdiv_model;ARCHITECTURE clkdiv_model_arch OF clkdiv_model IS COMPONENTclk_div10 PORT (clk:IN std_logic; clk_div:OUT std_logic); END COMPONENT clk_div10; COMPONENTclk_div200 PORT (clk:IN std_logic; clk_div:OUT std_logic); END COMPONENT clk_div200; SIGNAL tmp1,tmp2,tmp3:std_logic;BEGIN -元件连接说明; U1:clk_div10 PORT MAP(clk,tmp1); U2:clk_div10 PORT MAP(tmp1,tmp2); U3:clk_div10 PORT MAP(tmp2,tmp3); U4:clk_div200 PORT MAP(tmp3,clk_div2); clk_div1=tmp3;END clkdiv_model_arch;程序5 D触发器的VHDL程序。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY df IS PORT (d,clk:IN std_logic; q,qb:OUT std_logic);END df;ARCHITECTURE dff_art OF df IS BEGIN PROCESS (clk) IS BEGIN IF (clkEVENT AND clk=1)THEN -上升沿触发; q=d; qb=NOT d; END IF; END PROCESS;END dff_art;程序6 消抖同步电路的VHDL程序。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY key_sync IS PORT ( key_in:IN std_logic; clk:IN std_logic; key_out:OUT std_logic);END key_sync;ARCHITECTURE rtl OF key_sync IS COMPONENTdf PORT (d,clk:IN std_logic; q,qb:OUT std_logic); END COMPONENT df; SIGNAL tmp1,tmp2,tmp3,tmp4,tmp5,tmp6:std_logic;BEGIN -元件连接说明; tmp2=key_in NAND tmp1; tmp1=tmp3 NAND tmp2; key_out=tmp4 AND tmp5;U1:df -元件例化; PORT MAP(tmp2,clk,tmp4,tmp3);U2:df PORT MAP(tmp4,clk,tmp6,tmp5);END rtl;程序7 同步消抖模块的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY keysync_model IS PORT (c1,c2,c3,c4,c5:IN std_logic; a00,a10,a20,a30,a40,a50,a60,a70,a80,a90:IN std_logic;clk:IN std_logic; c11,c22,c33,c44,c55:OUT std_logic;a01,a11,a21,a31,a41,a51,a61,a71,a81,a91:OUT std_logic);END keysync_model;ARCHITECTURE keysync_model_arch OF keysync_model IS COMPONENTkey_sync P

温馨提示

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

评论

0/150

提交评论