1、课程设计报告题 目: 基于 FPGA 的数字密码锁设计 学生姓名: 汪金涛 学生学号: 1114020232 系 别: 电气信息工程学院 专 业: 电子信息工程 届 别: 2015 届 指导教师: 李 营 电气信息工程学院制2014 年 5 月成绩目 录1 课程设计的任务与要求 .11.1 课程设计的任务 .11.2 课程设计的要求 .12 电子密码锁简介 .12.1 国内外发展和现状 .12.2 课题研究目的和意义 .23 设计方案的制定 .23.1 设计思路 .23.2 总体方案设计 .43.2.1 密码锁输入电路设计 .43.2.2 矩阵式键盘工作原理 .43.2.3 密码锁输入电路主要
2、功能模块设计 .53.2.4 密码锁控制电路设计 .73.2.5 密码锁显示电路设计 .93.2.6 Quartus 软件引脚配置 .94 系统时序仿真结果 .105 总结与体会 .115.1 总结 .115.2 体会 .126 参考文献 .12附录 .13第 1 页基于 FPGA 的数字密码锁设计学生:汪金涛指导教师:李营电气信息工程学院电子信息工程专业1 课程设计的任务与要求1.1 课程设计的任务通用的电子密码锁主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。(2)密
3、码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路) ,密码核对(数值比较电路) ,解锁电路(开/关门锁电路)等几个小的功能电路。(3)密码显示电路主要将显示数据的 BCD 码转换成相对应的编码。如,若选用七段数码管显示电路,主要将待显示数据的 BCD 码转换成数码器的七段显示驱动编码。1.2 课程设计的要求设计一个具有较高安全性和较低成本的通用电子密码锁,具体功能要求如下:(1)数码输入:每按下一个数字键,就输入一个数值,并在显示器上的显示出该数值,同时将先前输入的数据依序左移一个数字位置。(2)数码清除:按下此键可清除前面所有的输入值,清除
4、为“0000” 。(3)密码更改:按下此键时会将目前的数字设定成新的密码。(4)激活电锁:按下此键可将密码锁上锁。(5)解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。2 电子密码锁简介2.1 国内外发展和现状随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从 20世纪 30 年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁
5、过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 2 页 安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。但较实用的还是按键式电子密码锁。目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上
6、70 年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差。基于现场可编程逻辑门阵列 FPGA 器件的电子密码锁,用 FPGA 器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA 具有现场可编程功能,当设计需要更改时,
7、只需更改 FPGA 中的控制和接口电路,利用 EDA 工具将更新后的设计下载到 FPGA 中即可,无需更改外部电路的设计,大大提高了设计的效率。2.2 课题研究目的和意义随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。FPGA 即现场可编程门阵列,它是在 PAL、GAL、EPLD 等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。相对于基于单片机技术的电子密码锁,用 FPGA 器件来构成系统,可靠性提高,并且由于 FPGA 具有的
8、现场可编程功能,使得电子密码锁的更改与升级更为方便简单。通过本次设计掌握 FPGA 系统设计的方法,熟悉 FPGA 设计的相关软件,以及硬件描述语言的使用,了解电子密码锁的系统构成,利用 FPGA 实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。3 设计方案的制定3.1 设计思路作为通用数字密码锁,主要有三部分组成:数字密码输入电路、密码控制电路和密码显示电路。控制器模块是整个系统的控制核心,负责接收其它模块传来的输入信号,再根据系统的功能产生相应的控制信号送到相关的模块。消抖同步电路用来消去开关电平抖动现象并提供同步
9、信号;编码器接收消抖同步电路传来的数字密码信号后编码输出淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 3 页 给比较器和 RAM,并提供一个数字输入信号。作为数字密码锁的输入电路,可供选择的方案有数字机械式键盘和键触式数字键盘等多种。虽然机械式键盘存在一些诸如机械的弹跳消除问题和机械部分的接触问题,但是和接触式 3x4 键盘相比,机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此是比较合适的。根据以上选定的输入设备和显示器件,并考虑到实现的具体要求,整个数字密码锁系统的总体框图如图 1 所示。密码输入电路包括时序产生电路、键盘扫描电路、键
10、盘弹跳消除电路、键盘译码电路等几个小的功能电路。键盘时序产生电路弹跳消除电路 键盘译码电路寄存器清除信号发生电路开/关锁电路 数值比较电路 按键数值缓冲器BCD 至七段译码器电路键盘扫描电路淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 4 页 图 1 系统方框图3.2 总体方案设计3.2.1 密码锁输入电路设计图 2 是数字密码锁的输入电路框图,由键盘扫描电路、清抖电路、键盘译码电路、按键数据存储,加上外接的一个 3*4 矩阵式键盘组成。 1 2 34705 68 9#*清抖电路键盘扫描键盘译码 按键存储图 2 密码锁输入框图3.2.2 矩阵式键盘工作原理矩阵式键
11、盘是一种常见的输入装置,如图 3-3 所示为一个 3*4 矩阵式键盘。键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑 0 的状态,图中键盘的扫描为行扫方式,其中的某一位为 0 即扫描其中的一行,具体扫描信号对应如表 1 所示。表 1 扫描信号对应表KEYR3.0 KEYC2.0 对应的按键011 1101 20111110 3011 4101 51011110 6011 7101 81101110 9011 01110101 *淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 5 页 110 #键盘扫描信号 KEYR3 与第一行相
12、连,KEYR2 与第二行相连,依此类推。很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。在扫描的过程中,当有键按下时,对应的键位就为逻辑 0 状态,从而从 KEYC2.0 读出的键值相应列为 0.具体情况如表 1 所示:若从 KEYC2.0 读出的值全为 1 时,表示没有键被按下,则不进行按键的处理。如果有键被按下,则将 KEYC2.0 读出的送至键盘译码电路进行译码。3.2.3 密码锁输入电路主要功能模块设计 时序产生电路:本时序产生电路中使用了三种不同的工作脉冲波形:系统时钟脉冲、弹跳消除脉冲、键盘扫描信号。本设计选用信号 Q 建立一个 9 位自由计数器,对
13、输入主时钟进行降频处理。首选信号 Q 建立一个 9 位自由计数器,对输入主时钟进行降频处理。分频仿真图如下图 3 所示。图 3 分频模块仿真图使用 CLK_A=Q(1)语句,取得一个脉冲波形,对主时钟进行 2 分频,其值为0、1、0、1;使用 CLK_B=Q(4 DOWNTO 3)语句,取得一脉冲序列,依次为00、01、10、11、00; 键盘扫描电路:目标:提供键盘扫描信号,即表 1 中的 KEYR30,变化顺序依次为0111、1011、1101、1110,依次重复出现。说明:在程序中,S 信号是用来产生扫描信号的四个状态,Q 是为了对输入主时钟进行降频处理。 键盘消抖电路因为按键大多是机械
14、式开关,在开关切换的瞬间会在接解点出现来回弹跳的现象,其现象如图 4 所知,虽然只是按了一次键,实际产生的按键信号却不只跳动一次,经过取样信号的检查后,将会造成误码判,认为是按了两次键。如果调整取样频率,淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 6 页 可以发现抖现象得到了改善。调整取样频率后的情况如图 4 所示。图 4 键盘消抖信号图 键盘译码电路从前面所述的键盘扫描电路的输出可以看出,扫描得到的信号规律性不强,例如数字键主要用来输入数字,但键盘扫描输出无法拿来直接使用,必须对其进行译码才能使用。如表 2 所示,只要使用 begincase 或 ifelse
15、 语句,便可完成设计。键盘译码电路主要负责的工作是:首先判断是否有键按下,若被按下的是数字按键,则解释成相应的 BCD 码,若被按下的是功能键,则译成四位的数字码,由密码控制电路做相应的工作。表 2 键盘参数表KEYR3.0 KEYC2.0 对应的按键 译码输出 功能011 1 0001 数码输入101 2 0010 数码输入0111110 3 0011 数码输入011 4 0100 数码输入101 5 0101 数码输入1011110 6 0110 数码输入011 7 0111 数码输入101 8 1000 数码输入1101110 9 1001 数码输入011 0 0100 击活电锁101
16、* 0000 数码输入1110110 # 0001 清除 /解锁电路 按键存储电路因为每次按键都会产生新的数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将键盘扫描译码后的结果记录下来。这一功能可以用移位寄存器来实现。淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 7 页 3.2.4 密码锁控制电路设计数字密码锁控制电路是整个电路的控制中心,主要完成如下功能: 数字按键输入部分如果输入数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须往左移动一位。若想要更改输入的数字,可按退格键来清除前一个输入的数字,或按清除键清除输入的所
17、有数字,再重新输入 4 位数字。既然设计的是四位电子密码锁,当输入的数字键超过 4 位时,电路不应理会。 功能键输入部分退格键:只清除前一个输入的数字。清除键:清除所有输入。密码核对:在密码更改,开锁之前必须先核对密码。密码变更:按下此键将目前输入的数字设定为新的密码。激活电锁:上锁之前必须先设定密码才能上锁。解除电锁:检查输入的密码是否正确,正确才开锁。万用密码:电子密码锁维护者使用。 六种工作状态控制器实际上是一个有限状态机,它一共有六个状态:初始状态 S0、接收数码状态 S1、准备开锁状态 S2、S3 状态表示每正确接受一次数码,计数器 C 加 1、开锁状态 S4 和错误报警状态 S5。
18、初始状态 S0:系统开锁、报警或上电后进入准备状态,这时系统不接收除READY 信号外的任何输入信号。接收数码状态 S1:在该状态下, 如果按下“READY” 则保持该状态不变;如果按下“OK” 和“OPEN”则转到报警状态;如果有数据输入 ,则控制器输入一个 DATA-IN信号,输出 RD 和 CNP1 信号,从 RAM 中读取密码进行比较,同时使计数器加 1;检查计数是否计数到 100 ,若 CNTe1 有效,表示已经接收到 4 个正确的密码,可以转入下一个状态,否则返回本状态,继续接收其它密码。检查 Dep 信号状态,Dep=1 则密码正确,进入确认状态,反之则输出 CNP2 信号进入报
19、警状态;如果仍然有数据输入,则说明输入密码错误,则输出 CNP2 信号进入报警状态。准备开锁状态 S2:在确认状态下按 “SET”键进入该状态,EN 信号有效。该状态首先由控制器发 RESET-CNT 信号;检查是否有数据输入,如果没有则等待;若有数据输入,控制器则输出 WR 和 CNP1 信号,向 RAM 发出信号,并使计数器加 1,检查计数器是否计数到 100,若 CNTe1 有效,表示已经接收到 4 个正确的密码,进入确认状态,否则返回本状态,继续接收其它密码。淮南师范学院电气信息工程学院 2015 届电子信息工程专业课程设计报告 第 8 页 确认状态 S3:输入密码正确后进入该状态。密
20、码输入得到确认才可以进入开锁状态,密码设置完毕后,只有得到确认才可生效,并返回准备状态。开锁状态 S4:输入密码确认后进入该状态,此时按“OPEN” 键,控制器便发出 SLT信号开锁并返回到准备状态。错误报警状态 S5:每次进入该状态首先检查计数器 2 是否计数到 11。若输入错误密码达到三次,则 CNTe2 有效,控制器输出 SLB 信号,报警电路报警;若输入错误次数不超过三次,则 CNTe2 无效,返回到输入密码状态。3.2.5 密码锁显示电路设计本文设计的密码锁采用 7 段 LED 数码管来分别显示其在不同工作状态下的信息,并能对输入的口令消隐显示。以下为显示模块部分程序。always
21、(posedge CLK or negedge nCLR)begin:counter if (nCLR)Q =3b000;else if (CNT=1b1)Q =Q+1b1;else Q =Q;end assign M=(Q =3b111);assign A2,A1,A0=Q;assign D=Password;always (A2 or A1 or A0 or D)begin :Muxltiplexer case (A2,A1,A0)3d0:Mux_out=D0;3d1:Mux_out=D1; 3d2:Mux_out=D2;3d3:Mux_out=D3;3d4:Mux_out=D4;3d5:Mux_out=D5;3d6:Mux_out=D6;3d7:Mux_out=D7;endcase end 程序中 cnt 为编码计数器,它的每一个值代表一种状态,在不同状态下 encode端口输出不同的 LED 选择编码。此编码作为译码器 74LS138 的地址输入,用于选择操作哪一位 LED 数码管。