基于VHDL密码锁设计.docx
《基于VHDL密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL密码锁设计.docx(49页珍藏版)》请在三一办公上搜索。
1、基于VHDL密码锁设计济南大学毕业设计(论文) 基于FPGA的数字密码器设计(黑体小三,1.5倍行距,段后1行,新起一页,居中) 4.1数字密码器总体设计(黑体四号,1.5倍行距,段前0.5行) 4.1.1 设计要求(黑体小四,1.5倍行距,段前0.5行) 1)密码预先在内部设置,可以设置任意位密码,这里采用6位十进制数字作为密码; 2)密码输入正确后,密码器将启动开启装置。这里密码器只接受前6位密码输入,并以按键音提示,多余位数的密码输入将不起作用; 3)允许密码输入错误的最大次数为三次, 密码错误次数超过三次则进入死锁状态, 并发出警报; 4)报警后,内部人员可以通过按键SETUP使密码器
2、回到初始等待状态; 5)密码器具有外接键盘,可以用来输入密码和操作指令; 4.1.2设计思路(黑体小四,1.5倍行距,段前0.5行) 先对数字密码器进行顶层设计并写出相应的VHDL程序,然后将数字密码器划分为分频模块、消抖同步模块、使能电路模块、密码预置模块、编码模块、比较模块、计数器选择模块、数码管显示译码模块、指示电路模块、数码管扫描模块、误码模块和控制器模块12个部分,将各个模块一一实现。顶层设计中各个模块是作为元件来引用的,因此这里需要将各个模块设计成独立设计实体的具体形式,这样便可以在顶层设计来引用这些模块了。 4.1.3 数字密码器的基本原理(黑体小四,1.5倍行距,段前0.5行)
3、 首先,密码器通过外接键盘输入数字密码,然后密码需要经过10线至4线编码器变成BCD码;接下来通过4位比较器与存储在系统中的预置密码进行比较,同时将输入的密码通过数码管扫描模块和数码管显示译码模块显示出来;最后将比较的结果DEP送到控制器模块中。 本次设计中的密码是串行输入的,每次分别与一个预置码比较。可见,6个十进制的密码分别有24个端口送入,因此需要使用一个数据选择器来进行选择。这里,数据选择器是一个4位的六选一数据选择器,它的两位选择信号是由一个模6的计数器来给出的,计数器的控制信号是由控制信号RESET和时钟信号CNP是由控制模块来- 1 - 济南大学毕业设计(论文) 提供的。外接键盘
4、每送一个密码数字,计数器的计数值加1。如果计数器的数值计到6时,那么表示6个密码已经输入完毕。接下来计数器应向控制器发出反馈信号FULL,这表示控制器已经可以进入到启动状态。 计数器2用来记录输入密码错误次数,当密码输入错误时,密码器将发出警报,并提示用户还可以输入密码的次数。当密码输入错误的达到次数三次时,计数器2应向控制器反馈信号NOTC, 密码器将进入死锁状态, 并发出警报。这时只能通过内部按键SETUP使密码器回到初始状态。 (宋体小四,1.25倍行距) 4.2数字密码器的实现(黑体四号,1.5倍行距,段前0.5行) 密码器的顶层设计由各个子模块构成。其中各个模块是以元件的形式给出的,
5、首先必须进行元件的说明,然后进行元件的例化调用就可以构成顶层模块。顶层设计的模块图如图2-3所示。 图2-3 顶层设计模块图 由上图可以给出数字密码器的对外接口信号,即输入和输出信号。 1、 数字按键输入信号A0A9,用来进行密码的输入操作; 2、 外部时钟信号CLK,用来作为内部操作时钟和驱动蜂鸣器; 3、 按键输入信号READY,用来设置密码器的准备操作状态; 4、 按键输入信号WAIT_T,用来建立密码器的等待状态; 5、 按键输入信号SETUP,用来恢复密码器的等待状态; 6、 按键输入信号OPEN_T, 用来设置密码器进入到启动状态; 7、 绿灯指示驱动信号LED_G,驱动绿灯显示;
6、 8、 红灯指示驱动信号LED_R,驱动红灯显示; 9、 蜂鸣器驱动信号ALERT,驱动报警蜂鸣器; 10、数码管显示译码输出A,B,C,D,E,F,G。 (宋体小四,1.25倍行距) 4.2.1 分频模块设计(黑体小四,1.5倍行距,段前0.5行) 1、分频模块的输入、输出 - 2 - 济南大学毕业设计(论文) 图2-4 分频模块图 分频模块的模块图如图2-4所示,可以定义输入、输出信号如下: CLK: 系统输入时钟,300Hz。 CLK_DIV1、CLK_DIV2: 分频输出时钟信号,分别为10Hz、1Hz。 2、模块描述 在数字密码器中,它的外部时钟信号CLK是由外部晶振来提供的,时钟频
7、率为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所示。 CLK 30分频电路 CLK_DIV1 CLK_DIV1 10分频电路 CLK_DIV2 图2-5 3、VHDL设计 由图2-5可知,分频模块内部含有两个单元
8、电路: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、消抖同步模块的输入、输出信号定义 - 3 - 济南大学毕业设计(论文) 图2-6 消抖同步模块图 消抖同步模块的模块图如图2-6所示,由图可以得到输入、输出
9、信号定义: 1)输入信号 C1、C2、C3、C4:分别由WAIT_T、SETUP、READY、OPEN_T操作指令得到; AOOA90:由使能模块提供; CLK:由分频模块输出的CLK_DIV1来提供; 2)输出信号 C11、C22、C33、C44: 由WAIT_T、SETUP、READY、OPEN_T经过消抖后产生; A01A91:有AOOA90经过消抖后产生。 2、模块描述 在数字密码器中,由按键方式产生的数字密码A0A9、READY、OPEN_T、WAIT_T、SETUP的产生时刻和持续长短是随机不定的,同时存在因开关簧片反弹而引起的电平抖动现象,因此必须添加消抖同步模块,目的是保证系统
10、能捕捉到输入脉冲,同时保证每按一键只形成一个宽度为系统时钟周期的脉冲。 3、VHDL设计 在数字电路中,消抖同步电路的设计方案11较多,本设计采用的是一种应用较为广泛的消抖同步电路。如图2-7所示。因为采用与非门构成的触发器使用底电平触发,因此按键输入的数字或者操作指令要设计成低电平有效。 - 4 - 济南大学毕业设计(论文) 输入 D Q D Q CP Q CP Q 输出 CLK 根据图2-7可以看出消抖同步电路含有两个与非门、一个与门和两个D触发器。所以首先必须进行D触发器的VHDL设计,然后构成消抖同步电路的VHDL设计,最后通过元件例化调用完成消抖同步模块的VHDL设计。其中,D触发器
11、的VHDL程序为dff_1.vhd, 消抖同步电路的VHDL程序为key_sync.vhd, 消抖同步模块的VHDL程序为keysync_model.vhd。 图2-7 4.2.3 使能电路模块设计(黑体小四,1.5倍行距,段前0.5行) 1、使能电路模块的输入、输出信号定义 图2-8 使能电路模块图 使能电路模块的模块图如图2-8所示,模块的输入、输出信号定义如下: 1)输入信号 A0A9:由按键09提供; EN :由控制器模块提供。 2)输出信号 A00A90:当其为低电平0时,表示对应的A0A9有信号输入。该输出用于提供给消抖同步模块。 2、模块描述 在数字密码器中,数字密码A0A9的按
12、键输入信号是通过控制器模块给出的使能信号EN来进行控制的:当使能信号有效时,输入的信号A0A9有效;否则输出为高电平。 - 5 - 济南大学毕业设计(论文) 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、模块描述 该模块用来预置密码器的密码,用于与输入的
13、数字密码进行比较操作。密码器的密码可以设置成任意位,这里设为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所示,模块的输入、输出定义如下: - 6 - 济南大学毕业设计(论文) 1)输入信号 A01A91:由消抖同步模块提供,对应于数字按键09; RESET :由控制器模块提供; DUS :
14、由控制器模块提供,用于检测是否有按键输入; 2)输出信号 B1B4:由按键信号转换成4位BCD码,用来提供给比较模块; DATA_IN:当其为高电平是,表示有密码输入,用来提供给控制器模块; DI :按键音信号,用来提供给指示模块,以驱动扬声器。 IN1IN6:用于按顺序存储密码,其中IN1用于存储第一位密码,IN6用于存储第六位密码。该信号提供给数码管扫描信号,用于动态显示输入的密码。 2、模块描述 编码模块为子模块中的第二大模块,该模块用于将输入的按键信号转换成4位BCD码B1B4送入到比较器中,这一步将通过10线至4线编码器来完成。除此以外,该模块还将输入的按键信号通过移位寄存器按照按键
15、的顺序存储到6个4位BCD码输出信号in1in6中,用于提供给数码管扫描模块的输入信号。同时还将输出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:密码预置信号,由密码预
16、置模块提供。 2)输出信号 DEP :该信号用于反馈给控制器模块,用于说明比较的结果。 2、模块描述 在数字密码器中,比较模块的主要功能是对编码模块的输出B1B4这4位数据和密码预置输出模块的输出E1E4这4位数据进行比较,然后将比较的结果送入控制器模块的DEP端口上。比较器的具体工作原理是:当比较结果相等是,DEP的输出为1;当比较结果不相等时,DEP的输出为0。 - 7 - 济南大学毕业设计(论文) 3、VHDL设计 比较模块的VHDL程序为comparator_model.vhd。 4.2.7 计数器选择模块设计(黑体小四,1.5倍行距,段前0.5行) 1、输入输出信号定义 计数器选择模
17、块的模块图如图2-12所示,模块的输入、输出信号定义如下: 1)输入信号 RESET:计数器的复位信号。 CNP :计数器的输入脉冲信号,上升沿有效。 2)输出信号 S0、S1、S2:提供给密码预置输出模块的地址选择信号。 FULL: 提供给密码预置输出模块,用于表示6位密码是否输入完毕。 图2-12 计数器选择模块图 2、模块描述 在密码器中,计数器选择模块的功能是用来给出密码预置输出模块的地址选择信号S0、S1和S2,它的控制信号RESET和时钟信号CNP是由控制器模块来提供的;另外还有一个输出信号FULL,它表示6个密码已经输入完毕,控制器可以进入到启动状态。 3、VHDL设计 计数器选
18、择模块的VHDL程序为counter_model.vhd。 4.2.8 数码管显示译码模块设计(黑体小四,1.5倍行距,段前0.5行) 1、输入输出信号定义 图2-13 数码管显示译码模块图 数码管显示译码模块的模块图如图2-13所示,模块的输入、输出信号定义如下: 1)输入信号 - 8 - 济南大学毕业设计(论文) DATA :4位的BCD码输入信号,由数码管扫描模块提供。 2)输出信号 A、B、C、D、E、F、G:分别对应7段LED的7个输入端口。 2、模块描述 在密码器中,显示设备由8个7段LED组成。前6个LED将显示输入的6个密码,后2个LED在用来在误码状态下显示还可以输入的密码次
19、数。由于采用动态扫描显示,只须输出一个LED所须的驱动信号即可。这里采用共阴极LED,所以输出AG高电平有效。 3、VHDL设计 数码管显示译码模块的VHDL程序为decoder_model.vhd。 4.2.9指示电路模块设计(黑体小四,1.5倍行距,段前0.5行) 1、输入输出信号定义 数码管扫描模块的模块图如图2-14所示,模块的输入、输出信号定义如下: 1)输入信号 CLKSCAN:数码管扫描频率,来源于系统时钟输入CLK。 RESET:数码管复位信号,由控制器模块提供。 IN1IN6:数字密码显示输入信号,由编码模块提供。 IN7、IN8:剩余密码输入次数显示输入信号,由密码错误次数
20、计数模块提供。 2)输出信号 DATA:用于提供给数码管显示译码模块的数据输入。 SEL: 3位的2进制数码管选择信号,当其为111 010时,选择前6位数码管,用于显示输入的密码数字;当其为001000时,选择后2位数码管,用于显示剩余密码输入次数。 图2-14 数码管扫描模块图 2、模块描述 在密码器中,输入的数字密码需显示在LED上,由于输入由6位,所以至少应采用6个LED进行显示。若采用传统静态显示的方法,不仅需要消耗更大的芯片资源和管脚资源,而且还会在电路中会产生一个比较大的电流,很容易造成电路烧坏。通过动态扫描电路可以解决这一问题,通过产生一个扫描信号SEL(000) - SEL(
21、111) 来控制8 个七段显示器,依次点亮8个七段显示器,也就是每次只点亮一个七段显示器。只要扫描信号SEL(000) - SEL(111) 的频率超过人的眼睛视觉暂留频率24Hz 以上,就可以达到尽管每次点亮单个七段显示器,却能具有8 个同时显示的视觉效果,而且显示也不致闪烁抖动。这里数码管扫描频率采用密码器时钟输入CLK,为300Hz。 - 9 - 济南大学毕业设计(论文) 3、VHDL设计 数码管扫描模块的VHDL程序为keyscan_model.vhd。 4.2.10数码管扫描模块设计(黑体小四,1.5倍行距,段前0.5行) 1、输入输出信号定义 图2-15 指示电路模块图 指示电路模
22、块的模块图如图2-15所示,模块的输入、输出信号定义如下: 1)输入信号 WAIT_L、S_LG、S_LR:由控制器模块提供的红绿灯驱动信号。 DI: 由编码模块提供的按键音信号; BJY:由密码错误次数计数模块的警告音信号。 CLK_DIV1:用于报警状态下的扬声器驱动信号。 2)输出信号 LED_G:绿灯驱动信号,高电平有效。 LED_R:红灯驱动信号,高电平有效。 ALERT: 扬声器驱动信号,高电平有效。 2、模块描述 在密码器中,指示电路模块的功能是用来产生红灯指示LED_R、绿灯指示LED_G和蜂鸣装置ALERT。根据图2-2的模块划分图可以看出,绿灯指示LED_G是由控制器模块提
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 密码锁 设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3384997.html