您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于VHDL密码锁设计
济南大学毕业设计(论文)-1-基于FPGA的数字密码器设计(黑体小三,1.5倍行距,段后1行,新起一页,居中)4.1数字密码器总体设计(黑体四号,1.5倍行距,段前0.5行)4.1.1设计要求(黑体小四,1.5倍行距,段前0.5行)1)密码预先在内部设置,可以设置任意位密码,这里采用6位十进制数字作为密码;2)密码输入正确后,密码器将启动开启装置。这里密码器只接受前6位密码输入,并以按键音提示,多余位数的密码输入将不起作用;3)允许密码输入错误的最大次数为三次,密码错误次数超过三次则进入死锁状态,并发出警报;4)报警后,内部人员可以通过按键SETUP使密码器回到初始等待状态;5)密码器具有外接键盘,可以用来输入密码和操作指令;4.1.2设计思路(黑体小四,1.5倍行距,段前0.5行)先对数字密码器进行顶层设计并写出相应的VHDL程序,然后将数字密码器划分为分频模块、消抖同步模块、使能电路模块、密码预置模块、编码模块、比较模块、计数器选择模块、数码管显示译码模块、指示电路模块、数码管扫描模块、误码模块和控制器模块12个部分,将各个模块一一实现。顶层设计中各个模块是作为元件来引用的,因此这里需要将各个模块设计成独立设计实体的具体形式,这样便可以在顶层设计来引用这些模块了。4.1.3数字密码器的基本原理(黑体小四,1.5倍行距,段前0.5行)首先,密码器通过外接键盘输入数字密码,然后密码需要经过10线至4线编码器变成BCD码;接下来通过4位比较器与存储在系统中的预置密码进行比较,同时将输入的密码通过数码管扫描模块和数码管显示译码模块显示出来;最后将比较的结果DEP送到控制器模块中。本次设计中的密码是串行输入的,每次分别与一个预置码比较。可见,6个十进制的密码分别有24个端口送入,因此需要使用一个数据选择器来进行选择。这里,数据选择器是一个4位的六选一数据选择器,它的两位选择信号是由一个模6的计数器来给出的,计数器的控制信号是由控制信号RESET和时钟信号CNP是由控制模块来济南大学毕业设计(论文)-2-提供的。外接键盘每送一个密码数字,计数器的计数值加1。如果计数器的数值计到6时,那么表示6个密码已经输入完毕。接下来计数器应向控制器发出反馈信号FULL,这表示控制器已经可以进入到启动状态。计数器2用来记录输入密码错误次数,当密码输入错误时,密码器将发出警报,并提示用户还可以输入密码的次数。当密码输入错误的达到次数三次时,计数器2应向控制器反馈信号NOTC,密码器将进入死锁状态,并发出警报。这时只能通过内部按键SETUP使密码器回到初始状态。×××(宋体小四,1.25倍行距)4.2数字密码器的实现××××(黑体四号,1.5倍行距,段前0.5行)密码器的顶层设计由各个子模块构成。其中各个模块是以元件的形式给出的,首先必须进行元件的说明,然后进行元件的例化调用就可以构成顶层模块。顶层设计的模块图如图2-3所示。图2-3顶层设计模块图由上图可以给出数字密码器的对外接口信号,即输入和输出信号。1、数字按键输入信号A0~A9,用来进行密码的输入操作;2、外部时钟信号CLK,用来作为内部操作时钟和驱动蜂鸣器;3、按键输入信号READY,用来设置密码器的准备操作状态;4、按键输入信号WAIT_T,用来建立密码器的等待状态;5、按键输入信号SETUP,用来恢复密码器的等待状态;6、按键输入信号OPEN_T,用来设置密码器进入到启动状态;7、绿灯指示驱动信号LED_G,驱动绿灯显示;8、红灯指示驱动信号LED_R,驱动红灯显示;9、蜂鸣器驱动信号ALERT,驱动报警蜂鸣器;10、数码管显示译码输出A,B,C,D,E,F,G。×××××××(宋体小四,1.25倍行距)4.2.1分频模块设计(黑体小四,1.5倍行距,段前0.5行)1、分频模块的输入、输出济南大学毕业设计(论文)-3-图2-4分频模块图分频模块的模块图如图2-4所示,可以定义输入、输出信号如下:CLK:系统输入时钟,300Hz。CLK_DIV1、CLK_DIV2:分频输出时钟信号,分别为10Hz、1Hz。2、模块描述在数字密码器中,它的外部时钟信号CLK是由外部晶振来提供的,时钟频率为300Hz。对CLK进行分频输出两路时钟CLK_DIV1和CLK_DIV2,其中CLK_DIV1作为按键检测消抖时钟和控制器模块时钟,而CLK_DIV2作为密码错误次数计数模块的时钟。CLK时钟信号还作为蜂鸣器启动信号和LED显示扫描时钟信号。CLK_DIV1设为CLK的30分频,为10Hz。再将CLK_DIV1进行10分频可以得到CLK_DIV2时钟,为1HZ。因此,分频模块可以采用10分频和30分频电路来构成,如图2-5所示。3、VHDL设计由图2-5可知,分频模块内部含有两个单元电路:30分频电路和10分频电路。首先需要进行30分频和10分频这两个单元电路的VHDL设计,这两个单元电路的设计可以采用计数的方法来完成。而对于分频模块的设计,可以通过对两个单元电路元件的例化调用来实现。其中30分频电路和10分频电路的VHDL程序分别为clk_div30.vhd,clk_div10.vhd;分频模块的VHDL程序为clkdiv_model.vhd。4.2.2消抖同步模块设计(黑体小四,1.5倍行距,段前0.5行)1、消抖同步模块的输入、输出信号定义30分频电路10分频电路CLKCLK_DIV1CLK_DIV1CLK_DIV2图2-5济南大学毕业设计(论文)-4-图2-6消抖同步模块图消抖同步模块的模块图如图2-6所示,由图可以得到输入、输出信号定义:1)输入信号C1、C2、C3、C4:分别由WAIT_T、SETUP、READY、OPEN_T操作指令得到;AOO~A90:由使能模块提供;CLK:由分频模块输出的CLK_DIV1(10Hz)来提供;2)输出信号C11、C22、C33、C44:由WAIT_T、SETUP、READY、OPEN_T经过消抖后产生;A01~A91:有AOO~A90经过消抖后产生。2、模块描述在数字密码器中,由按键方式产生的数字密码A0~A9、READY、OPEN_T、WAIT_T、SETUP的产生时刻和持续长短是随机不定的,同时存在因开关簧片反弹而引起的电平抖动现象,因此必须添加消抖同步模块,目的是保证系统能捕捉到输入脉冲,同时保证每按一键只形成一个宽度为系统时钟周期的脉冲。3、VHDL设计在数字电路中,消抖同步电路的设计方案[11]较多,本设计采用的是一种应用较为广泛的消抖同步电路。如图2-7所示。因为采用与非门构成的触发器使用底电平触发,因此按键输入的数字或者操作指令要设计成低电平有效。济南大学毕业设计(论文)-5-根据图2-7可以看出消抖同步电路含有两个与非门、一个与门和两个D触发器。所以首先必须进行D触发器的VHDL设计,然后构成消抖同步电路的VHDL设计,最后通过元件例化调用完成消抖同步模块的VHDL设计。其中,D触发器的VHDL程序为dff_1.vhd,消抖同步电路的VHDL程序为key_sync.vhd,消抖同步模块的VHDL程序为keysync_model.vhd。4.2.3使能电路模块设计(黑体小四,1.5倍行距,段前0.5行)1、使能电路模块的输入、输出信号定义图2-8使能电路模块图使能电路模块的模块图如图2-8所示,模块的输入、输出信号定义如下:1)输入信号A0~A9:由按键0~9提供;EN:由控制器模块提供。2)输出信号A00~A90:当其为低电平0时,表示对应的A0~A9有信号输入。该输出用于提供给消抖同步模块。2、模块描述在数字密码器中,数字密码A0~A9的按键输入信号是通过控制器模块给出的使能信号EN来进行控制的:当使能信号有效(高电平)时,输入的信号A0~A9有效;否则输出为高电平。&&DQCPQDQCPQ&输出输入CLK图2-7济南大学毕业设计(论文)-6-3、VHDL设计使能电路模块的VHDL程序为enable_model.vhd。4.2.4密码预置模块设计(黑体小四,1.5倍行距,段前0.5行)1、输入输出定义信号定义图2-9密码预置输出模块图密码预置输出模块的模块图如图2-9所示,模块的输入、输出信号定义如下:1)输入信号S0、S1、S2:由计数器选择模块提供。2)输出信号E1、E2、E3、E4:密码预置信号。2、模块描述该模块用来预置密码器的密码,用于与输入的数字密码进行比较操作。密码器的密码可以设置成任意位,这里设为6位,为“654321”。它的输入有三个,分别为s2、s1、s0,由计数器选择模块提供;输出有为4位的2进制密码。3、VHDL设计密码预置输出模块的VHDL程序为mux4_model.vhd。4.2.5编码模块设计(黑体小四,1.5倍行距,段前0.5行)1、输入输出信号定义图2-10密码预置输出模块图密码预置输出模块的模块图如图2-10所示,模块的输入、输出定义如下:济南大学毕业设计(论文)-7-1)输入信号A01~A91:由消抖同步模块提供,对应于数字按键0~9;RESET:由控制器模块提供;DUS:由控制器模块提供,用于检测是否有按键输入;2)输出信号B1~B4:由按键信号转换成4位BCD码,用来提供给比较模块;DATA_IN:当其为高电平是,表示有密码输入,用来提供给控制器模块;DI:按键音信号,用来提供给指示模块,以驱动扬声器。IN1~IN6:用于按顺序存储密码,其中IN1用于存储第一位密码,IN6用于存储第六位密码。该信号提供给数码管扫描信号,用于动态显示输入的密码。2、模块描述编码模块为子模块中的第二大模块,该模块用于将输入的按键信号转换成4位BCD码B1~B4送入到比较器中,这一步将通过10线至4线编码器来完成。除此以外,该模块还将输入的按键信号通过移位寄存器按照按键的顺序存储到6个4位BCD码输出信号in1~in6中,用于提供给数码管扫描模块的输入信号。同时还将输出di信号提供给指示电路模块用于产生按键音。对于编码器的输出来说,B4是MSB,B1是LSB。3、VHDL设计编码模块的VHDL程序为encoder_model.vhd。4.2.6比较模块设计(黑体小四,1.5倍行距,段前0.5行)1、输入输出信号定义图2-11比较模块图比较模块的模块图如图2-11所示,模块的输入、输出信号定义如下:1)输入信号B1、B2、B3、B4:由编码模块提供,用于与密码预置模块输出的预置密码信号进行比较;E1、E2、E3、E4:密码预置信号,由密码预置模块提供。2)输出信号DEP:该信号用于反馈给控制器模块,用于说明比较的结果。2、模块描述在数字密码器中,比较模块的主要功能是对编码模块的输出B1~B4这4位数据和密码预置输出模块的输出E1~E4这4位数据进行比较,然后将比较的结果送入控制器模块的DEP端口上。比较器的具体工作原理是:当比较结果相等是,DEP的输出为1;当比较结果不相等时,DEP的输出为0。济南大学毕业设计(论文)-8-3、VHDL设计比较模块的VHDL程序为comparator_model.vhd。4.2.7计数器选择模块设计(黑体小四,1.5倍行距,段前0.5行)1、输入输出信号定义计数器选择模块的模块图如图2-12所示,模块的输入、输出信号定义如下:1)输入信号RESET:计数器的复位信号。CNP:计数器的输入脉冲信号,上升沿有效。2)输出信号S0、S1、S2:提供给密码预置输出模块的地址选择信号。FULL:提供给密码预置输出模块,用于表示6位密码是否输入完毕。图2-12计数器选择模块图2、模块描述在密码器中,计数器选择模块的功能是用来给出密码预置输出模块的地址选择信号S0、S1和S2,它的控制信号RESET和时钟信号CNP是由控制器模块来提供的;另外还有一个输出信号FULL,它表示6个密码已经输入完毕,控制器可以进入到启动状态。3、VHDL设计计数器选择模块的VHDL程序为counter_model.vhd。4.2.8数码管显示译码模块设计(黑体小四,1.5倍行距,段前0.5行)1、输入输出信号
本文标题:基于VHDL密码锁设计
链接地址:https://www.777doc.com/doc-5444574 .html