为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于FPGA的电子密码锁设计

2017-10-06 44页 doc 226KB 183阅读

用户头像

is_977556

暂无简介

举报
基于FPGA的电子密码锁设计基于FPGA的电子密码锁设计 XXXX大学 电子技术课程设计 题 目 基于FPGA的电子密码锁设计 ____________________ 学生姓名 XXX 专业班级 电子信息10—01班 学 号 XXXXXX 院 (系) 电气信息工程学院 指导教师 XXX 完成时间 2013年06月22日 基于FPGA的电子密码锁设计 课 程 设 计 任 务 书 题目 基于FPGA的电子密码锁设计 专业、班级 电子信息工程10-01班 学号 XXXX 姓名 XXX 主要内容、基本要求、主要参考资料等: 主要内容...
基于FPGA的电子密码锁设计
基于FPGA的电子密码锁设计 XXXX大学 电子技术课程设计 目 基于FPGA的电子密码锁设计 ____________________ 学生姓名 XXX 专业班级 电子信息10—01班 学 号 XXXXXX 院 (系) 电气信息工程学院 指导教师 XXX 完成时间 2013年06月22日 基于FPGA的电子密码锁设计 课 程 设 计 任 务 书 题目 基于FPGA的电子密码锁设计 专业、班级 电子信息工程10-01班 学号 XXXX 姓名 XXX 主要、基本要求、主要参考资料等: 主要内容: 要求学生使用硬件描述语言(Verilog 或者 VHDL)设计基于FPGA的4位电子密码锁的源程序。实现如下功能:密码键入、密码存储、密码清除、密码变更、密码核对、激活电锁解除电锁等功能,同时给出4位显示电路设计。 基本要求: 1、学会quartusII的使用,掌握FPGA 的程序设计方法。 2、掌握硬件描述语言语法。 3、程序设计完成后要求在quartusII中实现功能仿真。 主要参考资料: 1、褚振勇. FPGA设计及应用(第三版)[M].西安电子科技大学出版社.2012,4 2、陈怀琛.MATLAB及在电子信息课程中的应用[M].北京:电子工业出版 社.2008,1 3、林明权 马维旻 VHDL数字控制系统设计范例[M].电子工业出版社2003,1 4、卢毅 赖杰 VHDL与数字电路设计[M] 科学出版社 2002 完 成 期 限: 2013.6.21—2013.6.25 指导教师签名: 课程负责人签名: 2013年 6月 18日 基于FPGA的电子密码锁设计 基于FPGA的多功能电子密码锁 摘要 基于FPGA设计的电子密码锁是一个小型的数字系统,与普通机械锁相比, 具有许多独特的优点: 保密性好, 防盗性强, 可以不用钥匙, 记住密码即可开锁等。目前使用的电子密码锁大部分是基于单片机技术, 以单片机为主要器件, 其编码器与解码器的生成为软件方式。 系统所实现的功能:用户给电子密码锁设定一个密码,当使用本机键盘开锁时,该密码与用户设定的密码比较,如果密码正确,则开锁;如果密码不正确,则允许用户重新输入密码,最多可输入三次,若三次都不正确,则扬声器报警,直到按复位键才允许再次输入代码。 通过仿真调试,利用可编程器件FPGA的电子密码锁的设计基本达到了预期目的。当然,该系统在一些细节的设计上还需要不断的完善和改进,特别是对系统的扩展有很好的实用和设计的价值。 关键词:现场可编程门阵列, 硬件描述语言, 电子密码锁, 扬声器 I 基于FPGA的电子密码锁设计 目 录 摘要 ........................................................ II 1 绪言 ....................................................... 1 1.1课题背景 ............................................... 1 1.2 课题研究的目的和意义 .................................. 1 1.3课题的主要研究工作 ..................................... 2 1.4电子密码锁的系统简介 ................................... 2 2 FPGA的相关介绍 ............................................. 3 2.1 可编程逻辑器件 ........................................ 3 2.2 FPGA的简介 ............................................ 4 2.3 FPGA的应用特点 ....................................... 5 2.4 FPGA的设计流程 ....................................... 5 3 基于FPGA设计的硬件描述语言VHDL ........................... 6 3.1 VHDL语言简介 .......................................... 6 3.2 VHDL语言的特点 ..................................... 7 3.3 VHDL语言的优点 ........................................ 7 3.4 VHDL语言的基本结构 .................................... 8 3.5 VHDL语言的应用 ........................................ 9 4 系统的研究 ........................................ 10 4.1系统功能需求分析 ...................................... 10 4.2系统方案的总体设计 .................................... 10 4.2.1 系统原理框图 ............................................. 10 基于FPGA的电子密码锁设计 4.2.2总体设计原理 .............................................. 11 5 电子密码锁的设计与仿真 .................................... 12 5.1 系统的硬件模块实现 ................................... 12 5.2.1 密码锁输入电路 ........................................... 12 5.2.2 密码锁控制电路 ........................................... 16 5.3系统的软件设计 ........................................... 20 5.3.1系统主控制流程框图 .................................. 20 5.3.2 键盘扫描程序框图 ................................... 20 5.3.4解码、报警模块 ...................................... 22 5.4.1去抖模块的仿真 ...................................... 22 总 结 ....................................................... 25 参考文献 .................................................... 26 附 录 ...................................................... 27 基于FPGA的电子密码锁设计 1 绪言 系统以利用可编程器件实现电子密码锁的设计为研究背景、现状以及发展方向,明确指出了电子密码锁面临的问题和所解决的方法。 1.1课题背景 基于FPGA的电子密码锁是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。 目前使用的电子密码锁大部分是基于单片机技术, 以单片机为主要器件, 其编码器与解码器的生成为软件方式。在实际应用中, 由于程序容易跑飞, 系统的可靠性能 [1]较差。基于FPGA的电子密码锁已经是现代生活中经常用到的工具之一,用于各类保险柜、房门、防盗门等等。用电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。由于采用的是可编程逻辑器件FPGA,使得系统有相当大的灵活性,随时可以进行硬件升级、扩展,而且系统设计完善以后还可以将主控的FPGA固化成一片ASIC,那么这块ASIC就可以作为专用的数字密码锁芯片。而且由于硬件可升级,还可随时增加密码位数或增加新的功能,使得密码锁有更 [2]高的安全性、可靠性和方便性。 1.2 课题研究的目的和意义 电子杂志、报刊经常刊登有密码开关、密码锁这样的电路,大多数是使用常用的数字电路,如CD4017,然后通过不同的连接方式实现密码控制功能。这种电路的特点就是密码修改只能通过改变电路的连接来实现,密码很容易被破解,电路复杂,故障率高。本制作是针对这些电路而设计的,将以往的以单片机实现设计改为可编程器件FPGA利用VHDL编程实现电子密码锁的设计。这种设计移动方便。基于FPGA的电子密码锁具有保密强、灵活性高、适用范围广等特点,它在键盘上输入,与打电话差不多,在输入密码的过程中,当用户键入错误密码时,系统就会报警,由扬声器 1 基于FPGA的电子密码锁设计 发出5秒报警声,当连续三次出现密码错误时,则系统会长时间报警不止,这时必须按复位方可停止。 本设计的FPGA电子密码锁的特点是:体积小、功耗低、价格便宜、安全可靠,维护和升级都十分方便,具有较好的应用前景。它与传统锁具的不同之处在于:它与可编程逻辑器件实现系统的设计,应用简洁清晰的VHDL语言实现设计编程思想,能够实现适时、智能控制管理功能,特别是在系统的扩展上有很好的优势。 1.3课题的主要研究工作 课题主要解决系统硬件和软件两方面的问题。硬件方面要解决FPGA可编程器件与其外围电路的接口设计的问题;软件方面主要问题是利用VHDL语言完成基于FPGA的电子密码锁的编程问题。除此之外,程序还要完成基本的密码开锁功能,并通过扬声器长时间鸣叫报警。本设计是由FPGA可编程逻辑器件编程实现的控制电路,具体有按键指示、输入错误提示、密码有效指示、控制开锁、控制报警等功能。它具有安全可靠、连接方便、简单易用、结构紧凑、系统可扩展性好等特点。 1.4电子密码锁的系统简介 通用的电子密码锁主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。 (1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。 (2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。 (3) 密码显示电路主要将显示数据的BCD码转换成相对应的编码。如,若选用七段数码管显示电路,主要将待显示数据的BCD码转换成数码器的七段显示驱动 [3]编码。 使用Quartus?进行电子密码锁设计的流程为 2 基于FPGA的电子密码锁设计 (1)编写VHDL程序(使用Text Editor)(见附录); (2)编译VHDL程序(使用Compiler); (3)仿真验证VHDL程序(使用Waveform Editor, Simulator); (4)进行芯片的时序分析(使用Timing Analyzer); (5)安排芯片管脚位置(使用Floorplan Editor); (6)下载程序至芯片(使用Programmer)。 2 FPGA的相关介绍 2.1 可编程逻辑器件 在数字电子系统领域,存在三种基本的器件类型:存储器、微处理器和逻辑器件。存储器用来存储随机信息,如数据表或数据库的内容。微处理器执行软件指令来完成范围广泛的任务,如运行字处理程序或视频游戏。逻辑器件提供特定的功能,包括器件与器件间的接口、数据通信、信号处理、数据显示、定时和控制操作、以及系统运 [4]行所需要的所有其它功能。 逻辑器件可分为两大类,即固定逻辑器件和可编程逻辑器件。正如其命名一样,固定逻辑器件中的电路是永久性的,它们完成一种或一组功能,一旦制造完成,就无法改变。另一方面,可编程逻辑器件(PLD)是能够为客户提供范围广泛的多种逻辑容量、特性、速度和电压参数的成品部件 —— 而且此类器件可在任何时间改变, [5]从而完成许多种不同的功能。 对于可编程逻辑器件,设计人员可利用价格低廉的软件工具快速开发、仿真和测试其设计。然后,可快速将设计编程到器件中,并立即在实际运行的电路中对设计进行测试。原型中使用的PLD器件与正式生产最终设备(如网络路由器、DSL调制解调器、DVD播放器、或汽车导航系统)时所使用的PLD完全相同。这样就没有了NRE成本,最终的设计也比采用定制固定逻辑器件时完成得更快。采用PLD的另一个关键优点是在设计阶段中客户可根据需要修改电路,直到对设计工作感到满意为止。这是因为PLD基于可重写的存储器技术——要改变设计,只需要简单地对器件进行重新编程。一旦设计完成,客户可立即投入生产,只需要利用最终软件设计文件简单地编程所需要数量的PLD就可以了。 3 基于FPGA的电子密码锁设计 2.2 FPGA的简介 FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列, [9]它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和I,O引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模 [6]式可以将FPGA作为微处理器的外设,由微处理器对其编程。 4 基于FPGA的电子密码锁设计 2.3 FPGA的应用特点 随着电子技术的飞速发展, 基于FPGA的设计向高集成度高速度和低价位方向 [7]不断迈进 其应用领域不断扩大这主要是由于FPGA以下技术特点的不断发展。 (1)集成度越来越高 存贮技术 (2) 嵌入式 (3)时钟锁定和倍频技术 (4)电子设计自动化 EDA 工具 (5)开发周期短 由于FPGAN 内部资源丰厚及功能强大以及相应的EDA软件功能完善和强大仿真能力便捷而实时开发过程形象而直观兼之硬件因素涉及甚少,一些EDA专家指出未来的大系统FPGA设计仅是各类再应用逻辑与 IP 核 CORE 的拼装 TI 公司认为 一个ASIC 80 功能可用IP 核等现成逻辑合成 因此可在很短的时间内完成十分复杂的系统设计。 2.4 FPGA的设计流程 FPGA设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程如图2.4所示。需要说明的是,如果仿真验证不对或者某一步有错,就要返回修改。有必要检查和修改的地方有RTL级描述、系统方案、约束和测试激励等。一般情况下,对RTL级的描述即原理图或者HDL设计代码的修改最多也最有效。修改后要重新走 [5]一遍流程。有时要反复修改,经过多次这样的迭代才能完成最后的设计。 在理论上,把VLSI(Ultra Large Scale Integration,超大规模集成电路)的设计描述为6个层次[1,2],即系统级(系统功能、参数定义)、算法级(描述系统功能行为)、RTL级、门级(逻辑门)、电路级(晶体管)、版图级(物理工艺)。每一级又都分3个侧面来描述:行为域描述、结构域描述、物理域描述。但在实际情况中往往把算法级行为域描述或者RTL级行为域描述都称为行为级描述。 5 基于FPGA的电子密码锁设计 系统设计要求 模块划分及其功能描 述 各模块接口信号定义时序、同步、 算法 测试等方案 系统行为描述 系统行为仿真 系统设计方案 图2.1 系统设计流程 对于FPGA的设计而言,不需要关心电路级和版图级,只考虑系统级、算法级、RTL级、门级4个层次的行为域描述和结构域描述即可。上述的FPGA系统设计中的系统实际上是指系统级和算法级,而“RTL级描述”主要是指RTL级行为域的描述。在门级,由综合工具产生的门级网表来描述。 3 基于FPGA设计的硬件描述语言VHDL 3.1 VHDL语言简介 VHDL(Very high speed integrated circuit Hardware Description Language)硬件描述语言从高于逻辑级的抽象层次上描述硬件的功能、信号连接关系及定时关系。 目前数字系统的设计可以直接面向用户需求 ,根据系统的行为和功能要求 ,自上而下地逐层完成相应的描述、综合、优化、仿真与验证 ,直到生成器件 ,实现电子设计自动 6 基于FPGA的电子密码锁设计 化。其中电子设计自动化EDA (即Electronic Design Automation)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。VHDL(VHSIC Hardware Description Language)是用来描述从抽象到具体级别硬件的工业标准语言 ,它是由美国国防部在 20 世纪 80 年代开发的 HDL ,现在已成为 IEEE承认的标准硬件描述语言。VHDL 支持硬件的设计、验证、综合和测试 ,以及硬件设计数据的交换、维护、修改和硬件的实现 ,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用 [8]等优点。 VHDL 主要用于描述数字系统的结构、行为和功能 ,其程序结构特点是将一个电路模块或一个系统分成端口和内部功能算法实现两部分。对于一个电路模块或者数字系统而言 ,定义了外部端口后 ,一旦内部功能算法完成后 ,其他系统可以直接依据外部端口调用该电路模块或数字系统 ,而不必知道其内部结构和算法。VHDL 的特点使 [9]得电子系统新的设计方法——“自顶向下”设计方法更加容易实现。可以先对整个系统进行方案设计 ,按功能划分成若干单元模块 ,然后对每个单元模块进一步细分 ,直到简单实现的单元电路。 3.2 VHDL语言的特点 VHDL语言主要用于描述数字系统的结构、行为、功能和接口,其具有以下特点: (1)作为HDL的第一个国际标准,VHDL具有很强的可移植性; (2)具有丰富的模拟仿真语句和库函数; (3)VHDL有良好的可读性,接近高级语言,容易理解; (4)系统设计与硬件结构无关; (5)支持模块化设计; (6)用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。 3.3 VHDL语言的优点 [10] 与其他硬件描述语言相比,VHDL语言有如下优越之处: 7 基于FPGA的电子密码锁设计 (1)VHDL语言支持自上而下(Top Down)和基于库(LibraryBase )的设计方法,还支持同步电路、异步电路、FPGA以及其他随机电路的设计; (2) VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用,还可以自定义数据 类型,给编程人员带来较大的自由和方便; (3)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么; 4)VHDL具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编 ( 写如何测试相量便可以进行源代码级的调试,而且设计者可以非常方便地比较各种方案之间的可行性及其优劣,不需做任何实际的电路实验; (5) VHDL语言可以与工艺无关编程; (6)VHDL语言标准、,易于共享和复用。 3.4 VHDL语言的基本结构 [11] VHDL有五大元素组成,即实体、结构体、配置、程序包和库。具体说明如下: (1)实体 实体说明部分是说明一个器件的外观视图,即从器件外部看到的器件外貌,其中包括器件的端口,同时也可以定义参数,并把参数从外部传入模块内部,主要用于描述所设计的系统的外部接口。 (2)结构体 结构体是描述一个器件的内部视图,是次级设计单元。在其对应的初级设计单元实体说明被编译并且被并入设计库之后,它就可以单独地被并入该设计库中。结构体描述一个设计的结构和行为,把一个设计的输入和输出之间的关系建立起来。一个设计可以有多个结构,分别代表该器件的不同实现方案。根据对一个器件设计由抽象到具体的过程,可把结构体的描述方式分为三个层次:行为描述方式、寄存器传输描述方式(RTL)和结构描述方式。 (3)库 库是经编译后的实体、结构体、包集合和配置的集合。使用库时总要在设计单元的前面予以说明。一旦说明,库中的数据对该设计单元就是可见的,从而共享 8 基于FPGA的电子密码锁设计 已经编译过的设计结果。VHDL语言中存在的库大致有IEEE库、STD库、ASIC厂家提供的库、用户定义的库和现行作业库。 (4)包集合 包集合属库中的一个层次,是一种可编译的源设计单元。它收集了VHDL语言中所用到的信号、常数、数据类型、函数和过程的说明等。用户可以构造一个包集合,用以存放常数、数据类型、函数和过程,该包集合经编译后便自动加到WORK库中。使用库中的包集合时,在打开库后要用USE语句说明,例如: LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; (5)配置 配置语句从一个库中为一个实体选择一个特定的结构体,是一种放在库中的被编辑单元,并有相应的配置名。通过配置技术,可以选取多种不同的结构体,以便对一个设计任务采用仿真工具进行多种配置的性能实验。另外,配置说明和规定的特性还可以用在多层描述中。 3.5 VHDL语言的应用 硬件描述语言已成为当今以及未来电子设计自动化(EDA)解决方案的核心,特别是对于深亚微米复杂数字系统的设计,硬件描述语言具有独特的作用。VHDL在数字 [12]电子电路的设计中具有硬件描述能力强、设计方法灵活等优点。 利用硬件描述语言VHDL,数字电路系统可从系统行为级、寄存器传输级和门级三个不同层次进行设计,即上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接着,再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具,把网表转换为要实现的具体电路布线结构。目前,这种高层次设计(highleveldesign)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。VHDL的应用已成为当今以 [13]及未来EDA解决方案的核心,而且是复杂数字系统设计的核心。 3.6 VHDL的设计流程 9 基于FPGA的电子密码锁设计 硬 件总体综合:面向FPGA编写HDL代码软件模拟网表验方案和ASIC 证 图3.2 VHDL的设计流程 4 系统设计方案的研究 4.1系统功能需求分析 本系统主要集中在以FPGA以核心外围扩展设计,整个电路主要电子锁具的组成框图是以可编程逻辑器件(FPGA)为核心,配以相应硬件电路,完成密码的设置、存贮、识别和显示、驱动电磁执行器并检测其驱动电流值,报警等功能。 FPGA接收键入的代码,并与存贮在闪存中的密码进行比较,如果密码正确,则驱动电磁执行器开锁;如果密码不正确,则允许操作人员重新输入密码,最多可输入三次;如果三次都不正确,则通过FPGA产生报警,FPGA将每次开锁操作和此时电磁执行器的驱动电流值作为状态信息发送给监控器,同时将接收来自接口的报警信息也发送给监控器。 4.2系统方案的总体设计 4.2.1 系统原理框图 本系统由主控芯片(FPGA)、键盘、显示电路、报警电路和开/关门电路组成,而主控芯片又可分为按键处理部分、控制部分和译码显示部分。系统原理框图如图4.1所示: 10 基于FPGA的电子密码锁设计 图4.1 数字电子密码锁系统总体框图 4.2.2总体设计原理 实现系统大量逻辑电路的集成,在设计中使用了现场可编程逻辑门阵列器件(FPGA)。FPGA主要实现以下逻辑功能:键盘处理、数码显示、设置密码、解码开门以及报警等控制功能。 本系统有13个按键,包括0,9共10个数字键和1个确认键,1个警报复位键,1个清0键。输入正确密码后,按确认键即可开门,在门开的状态下,第一次输入新密码后再确认密码可设置密码,输入的密码在八位数码管上显示,最后输入的数字显示在最右边,每输入一位数字,密码在数码管上的显示左移一位。高位的零不用输入,因此密码可以为1,8位。初始密码为0,即上电后,按确认键即可开门。门开后可通过锁门按钮关门,门关上后要再次输入密码才能开门。在输入密码的过程中,当用户键入错误密码时,系统就会报警,由扬声器发出报警声,当连续三次出现密码错误时,则系统会长时间报警不止,这时必须按警报复位键方可停止。 11 基于FPGA的电子密码锁设计 5 电子密码锁的设计与仿真 5.1 系统的硬件模块实现 整个电子密码锁系统可划分为键盘扫描、获取键值、数码显示、设置密码和解码开门等五个子模块。通过FPGA的处理,从而实现基于FPGA的电子密码锁的设计,系统实现框图如图5.1所示。 作为电子密码锁的输入电路,数字密码输入电路可采用一个3×4的通用数字机械键盘作为本设计的输入设备。机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用电子密码锁中还是比较适宜的。 数字电子密码锁的显示信息电路可采用LED数码管显示和液晶屏幕显示两种。液晶显示具有高速显示、高可靠性、易于扩展和升级等优点,但是普通液晶显示屏存在亮度低、对复杂环境的适应能力差等缺点,在低亮度的环境下还需要加入其它辅助的照明设备,驱动电路设计相对复杂,因此本设计的显示电路使用通用的LED数码管。 5.2 几个主要功能模块的设计 5.2.1 密码锁输入电路 (1)时序产生电路 本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系 12 基于FPGA的电子密码锁设计 统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。 当一个系统中需使用多种操作频率的脉冲波形时,最方便的方法之一就是利用一计数器来产生各种需要的频率。也就是先建立一个N位计数器,N的大小根据电路的需求决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号。若输入时钟为CLK,N位计数器的输出为Q[N-1..0],则Q(0)为CLK的2分频脉冲信号,Q(1)为CLK的4分频脉冲信号,Q(2)为CLK的8分频脉冲信号„„Q(N-1)为CLK的2N分频脉冲信号;Q(5 DOWNTO 4)取得的是一个脉冲波形序列,其值依00,01,10,11,00,01周期性变化,其变化频率为CLK的32分频。我们利用以上规律即可得到各种我们所需要频率的信号或信号序列。 CLK_1K:时钟信号 SIGNAL K_SRCLK: STD_LOGIC ; --键盘输入采样时钟 SIGNAL K_POS: STD_LOGIC_VECTOR(1 DOWNTO 0); 按键位置信号 -- SIGNAL KSCAN:STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘扫描信号 KEY IN:STD_LOGIC_VECTOR(2 DOWNTO 0);--按键输入信号 KSRCLK:STD_LOGIC;--键盘输入采样时钟 (2)键盘扫描电路 扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为1110,1101,1011,0111,1110„„依序的周而复始。扫描时依序分别扫描四列按键,当扫描信号为1110时扫描KY3这一排按键;当扫描信号为1101室,扫描KY2这一排按键;当扫描信号为1011时,扫描KY1这一排按键;当扫描信号为0111时,扫描KY0这一排按键。每扫描一排按键就检查一次是否有键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键则立刻进行按键编码的动作,且将编码的结果储存于寄存器中。 --扫描信号发生器 COUNTER : BLOCK IS SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0); 13 基于FPGA的电子密码锁设计 --1110-1101-1011-0111 BEGIN PROCESS (CLK_1K) IS BEGIN IF CLK_1K'EVENT AND CLK_1K ='1' THEN Q <= Q+1; END IF; C_DEBOUNCE <= Q(2) ; --去抖时钟信号, 大约125 Hz C_KEYBOARD <= Q(6 DOWNTO 5) ; -- 产生键扫信号***“00-01-10-11”, 大约16 Hz --C_DEBOUNCE <= Q(1) ; --仿真时用 --C_KEYBOARD <= Q(5 DOWNTO 4) ; --仿真时用 CLK <= Q(0) ; END PROCESS; (3)键盘译码电路 在密码输入电路中,按键又分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除键、上锁键和解锁键等。数字按键主要是用来输入数字的,但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的,另外,不同的按键具有不同的功能,所以必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。 键盘译码电路主要将所对应的键盘值设定成所要用的功能键,其主要程序如下: Z<=K_POS & C; IF (K_SRCLK'EVENT AND K_SRCLK = '1') THEN CASE Z IS WHEN "11101"=>N<="0000"; WHEN "00011"=>N<="0001"; WHEN "00101"=>N<="0010"; WHEN "00110"=>N<="0011"; 14 基于FPGA的电子密码锁设计 WHEN "01011"=>N<="0100"; WHEN "01101"=>N<="0101"; WHEN "01110"=>N<="0110"; WHEN "10011"=>N<="0111"; WHEN "10101"=>N<="1000"; WHEN "10110"=>N<="1001"; WHEN OTHERS =>N<="1111"; END CASE; END IF; IF K_SRCLK 'EVENT AND K_SRCLK='1' THEN CASE Z IS WHEN "11011" =>F<="0100"; WHEN "11110" =>F<="0001"; WHEN OTHERS =>F<="1000"; END CASE; END IF; (4)弹跳消除电路 由于设计采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。 弹跳现象产生的原因是,虽然每次只是按下按键一次然后放掉,然而实际产生的按键信号却不知跳动一次,经过取样信号的检查后,将会造成误判断,以为键盘按了两次。 图5.1弹跳现象产生错误的抽样结果 15 基于FPGA的电子密码锁设计 如果调整抽样频率,弹跳现象就可以获得改善。 图5.2 调整抽样频率后得到的抽样结果 因此必须加上弹跳消除电路,避免误操作信号的发生。特别要注意的是,弹跳消除电路所使用的脉冲信号的频率必须比其他电路使用的脉冲信号的频率更高;通常将扫描电路的工作频率定在24Hz左右,而将弹跳消除电路的工作频率定在128Hz左右,其工作频率通常是前者的4倍或者更高。 DEBOUNUING : BLOCK IS BEGIN U1: DEBOUNCING PORT MAP (D_IN => KEY_IN(0) , D_OUT => C(0), CLK => C_DEBOUNCE); U2: DEBOUNCING PORT MAP (D_IN => KEY_IN(1) , D_OUT => C(1), CLK => C_DEBOUNCE); U3: DEBOUNCING PORT MAP (D_IN => KEY_IN(2) , D_OUT => C(2), CLK => C_DEBOUNCE ); 5.2.2 密码锁控制电路 控制锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的相应控制。 1(数字按键输入的响应控制 (1)如果按下数字键,第一个数字会从显示其的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。 (2)假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有出入的数字,再重新输入四位数。 16 基于FPGA的电子密码锁设计 (3)当输入的数字键超过预设位数时,电路不予理会,而且不再显示以后的数 字。 2。功能按键输入的响应控制 (1)清除键:清除所有的输入数字,即作归零动作。 (2)激活电锁键:按下此键时可将密码锁的门上锁。 (3)解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开 门。 使用电子密码锁的时候,只会用到三种工作模式,其中输入文字模式用的是数字 按键,只有上锁和开锁两个模式必须占用功能按键。但是在实际操作中,难免会有按 错键的情况发生,使得“清除输入”功能是用的机率很高,所以在设计中共设置了两 个功能按键,其中“接触电锁”和“清除电锁”共用一个功能按键,另一个功能按键 是“激活电锁”。 --CTRL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL IS PORT (DATA_N: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_F: IN STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N: IN STD_LOGIC; FLAG_F: IN STD_LOGIC; CLK: IN STD_LOGIC; ENLOCK: OUT STD_LOGIC; --1: LOCK, 0: UNLOCK DATA_BCD: OUT STD_LOGIC_VECTOR (15 DOWNTO 0)); END ENTITY CTRL ; ARCHITECTURE ART OF CTRL IS SIGNAL ACC, REG: STD_LOGIC_VECTOR (15 DOWNTO 0); --ACC用于暂存键盘输入的信息,REG用于存储输入的密码 SIGNAL NC: STD_LOGIC_VECTOR (2 DOWNTO 0); 17 基于FPGA的电子密码锁设计 SIGNAL RR2, CLR, BB, QA, QB: STD_LOGIC; SIGNAL R1, R0: STD_LOGIC; BEGIN --寄存器清零信号的产生进程 PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN R1<=R0; R0<=FLAG_F; END IF; RR2<=R1 AND NOT R0; CLR<=RR2; END PROCESS; --按键输入数据的存储、清零进程 KEYIN_PROCESS : BLOCK IS SIGNAL RST, D0, D1: STD_LOGIC ; BEGIN RST <= RR2; PROCESS(FLAG_N, RST) IS BEGIN IF RST = '1' THEN ACC <= "0000000000000000" ; --CLEAR INPUT NC <= "000" ; ELSE IF FLAG_N'EVENT AND FLAG_N = '1' THEN IF NC < 4 THEN ACC <= ACC(11 DOWNTO 0) & DATA_N ; NC <= NC + 1 ; END IF; END IF ; END IF ; 18 基于FPGA的电子密码锁设计 END PROCESS ; END BLOCK KEYIN_PROCESS ; --上锁/开锁控制进程 LOCK_PROCESS : BLOCK IS BEGIN PROCESS(CLK, DATA_F) IS BEGIN IF (CLK'EVENT AND CLK = '1') THEN IF NC = 4 THEN IF DATA_F(2) = '1' THEN --上锁控制信号有效 REG <= ACC ; --密码存储 QA <= '1' ; QB <= '0'; ELSIF DATA_F(0) = '1' THEN --开锁控制信号有效 IF REG = ACC THEN --密码核对 QA<= '0'; QB <= '1' ; END IF ; ELSIF ACC = "1000100010001000" THEN --设置“8888”为万用密码 QA <= '0' ; QB<= '1'; END IF ; END IF; END IF ; END PROCESS ; END BLOCK LOCK_PROCESS ; --输出上锁/开锁控制信号 ENLOCK <= QA AND NOT QB ; --输出显示信息 DATA_BCD<= ACC ; END ARCHITECTURE ART; 19 基于FPGA的电子密码锁设计 5.3系统的软件设计 5.3.1系统主控制流程框图 当用户输入密码后,按确认键即可开门,在门开的状态下,输入新密码,再按确认键可设置密码,输入的密码在八位数码管上显示,最后输入的数字显示在最右边,每输入一位数字,密码在数码管上的显示左移一位。高位的零不用输入,因此密码可以为1,8位。初始密码为0,即上电后,按确认键即可开门。 开始 Y 清显示,关门 有锁门信号, N Y 输入一位密码 是数字键, N 存入新密码,清显示 门已开, N Y 开门 密码正确, N Y 报警 不正确次数 达到三, N 不正确次数加 一 图5.3系统控制图 5.3.2 键盘扫描程序框图 20 基于FPGA的电子密码锁设计 开始 时钟上升沿触 发, 列为高电 平, 逐列扫描 图5.4 键盘扫描程序框图 5.3.3获取键值程序框图 开始 时钟上升沿, 按键按下, 清0, 判断行左移 右移清零 和列 输出 图5.5键值程序框图 21 基于FPGA的电子密码锁设计 5.3.4解码、报警模块 开始 门已开, 输入密码后确认 开门,不响警报 计数器+1,仍关门 复位, 计数器清0,警报停止 报警 图5.6 解码报警模块 5.4仿真结果 5.4.1去抖模块的仿真 22 基于FPGA的电子密码锁设计 图5.7 键盘输入防抖电路的仿真结果图 由图中可以看出,键盘扫描出的信号弹跳现象得到改善。 5.4.2(密码锁输入电路的仿真 图5.8为密码锁输入电路的仿真结果图,图中的输出信号CLK_SCAN,C_DEBOUNCE是为便于仿真时观察中间结果而增加的观测点的输出,调试好后程序中的相应语句应注释掉。 输入信号KEY_IN[2..0]依序依011,101,110,011,101的顺序周期性循环,对键盘进行扫描。如有按键发生,键盘扫描输出信号CLK_SCAN做出反应。 5.4.3密码锁控制电路的仿真 23 基于FPGA的电子密码锁设计 5.4.4系统整体仿真 设置新密码部分(图4.7的仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁接着输入万能解锁密码“8888”,最后按下解锁键解锁。),具体仿真如图5.10: 图5.10 密码锁控制电路仿真结果图(一) 图5.11的仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁,接着输入解锁密码“1234”;最后按下解锁键解锁。从仿真图上可以看出,密码控制电路的设计是正确的。 图 5.11密码锁控制电路仿真结果图(二) 24 基于FPGA的电子密码锁设计 总 结 在基于FPGA的系统设计中,不同电路系统的设计往往采用自顶向下的设计方法,亦即将一个大的系统分解成单元电路。这样做的好处是可以先调试各个单元电路,在每个单元电路设计完成后 ,采用专门的仿真工具进行功能仿真,确定每个单元电路都没有问题后再连接顶层图形文件,这样整个系统的调试就轻松得多,可节省不少设计时间。 由于考虑到体积、成本等因素,本装置在性能上功能上还存在不足,还有待于进一步提高: (1)增加语音播报功能,可以提高装置的灵敏度,同时方便用户的操作。 (2)可在装置中增加一个语音芯片,将蜂鸣报警改为语音说明指示,可以根据输入的密码数字播报,同时可以扩展锁的安全防盗报警功能。 本系统的特色与创新点: (1)从测试结果分析可知,本装置采用较低成本的器件设计制作,且误差较小,完全满足用户的基本要求。 (2)本装置结构简单、体积小、性能稳定,操作容易、使用方便,可以安装在不同的门上,具有一定推广应用价值。 (3)本系统结合了现在最有发展前景的FPGA设计的电子密码锁系统,安全可靠,科技含量高,易于扩展。 25 基于FPGA的电子密码锁设计 参考文献 [1]. 许 琦.基于FPGA 的电子密码锁设计[J ]. 中国科技信息, 2007 (1) : 240-241 [2] 刘韬,楼兴华.FPGA数字电子系统设计与开发实例导航[M].人民邮电出版社,2005. [3] 王汝文,宋政湘,杨伟等.电器智能化原理及应用[M].北京:电子工业出版 社,2003.4:45. [4] Susan A. R. Garrod, Rober J. Borns.The Application and Design of Digital logic Analysis[M]. Purdue University, Saunders College Publishing, Philadelphia, 1991:45. [5]廖裕评,陆瑞强.CPLD数字电路设计.北京:清华大学出版社,2001. [6 ]王卫兵, 刘克刚, 朱秋萍. 用FPGA 的电子密码锁[J ]. 电子技术, 2005, 32 (1) : 26- 28. [7] 李广军,孟宪元。可编程ASIC设计及其应用。成都:电子科技大学出版社,2000. [8] 潘松等编著.VHDL实用教程.电子科技大学出版社.2002.6. [9] 辛春艳,VHDL硬件描述语音。北京:国防工业出版社,2002. [10] (美)Stefan Sjoholm. 用VHDL设计电子线路.边计年,薛宏熙译。北京:清华 大学出版社,1997. ,张辉.现代可编程逻辑器件及SOPC应用设计[M].哈尔滨工业大学出版[11] 杨春玲 社,2005. [12] 尹常永编著.EDA技术与数字系统设计.西安:西安电子科技大学出版社.2004. [13]谭会生, 瞿遂春. EDA 技术综合应用实例与分析[M ].西安: 西安电子科技大学出 版社, 2004. 26 基于FPGA的电子密码锁设计 附 录 源程序 1.键盘输入去抖电路的VHDL源程序 --DCFQ.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DCFQ IS PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END ENTITY DCFQ ; ARCHITECTURE ART OF DCFQ IS BEGIN PROCESS (CLK, CLRN, PRN) BEGIN IF CLRN='0' AND PRN='1' THEN Q<='0'; ELSIF CLRN='1' AND PRN='0' THEN Q<='1'; ELSIF CLK'EVENT AND CLK='1' THEN Q <=D; END IF ; END PROCESS ; END ARCHITECTURE ART; --DEBOUNCING.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; LIBRARY ALTERA; USE ALTERA.MAXPLUS2.ALL; 27 基于FPGA的电子密码锁设计 ENTITY DEBOUNCING IS PORT(D_IN, CLK: IN STD_LOGIC; DD1, DD0, QQ1, QQ0 : OUT STD_LOGIC; D_OUT, D_OUT1: OUT STD_LOGIC ); END ENTITY DEBOUNCING ; ARCHITECTURE ART OF DEBOUNCING IS COMPONENT DCFQ IS PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT DCFQ; SIGNAL VCC, INV_D : STD_LOGIC ; SIGNAL Q0, Q1 : STD_LOGIC ; SIGNAL D1, D0 : STD_LOGIC ; BEGIN VCC <= '1' ; INV_D <= NOT D_IN ; U1: DCFQ PORT MAP (CLK => CLK, CLRN => INV_D, PRN => VCC, D =>VCC , Q => Q0); U2: DCFQ PORT MAP (CLK => CLK, CLRN => Q0, PRN => VCC, D =>VCC , Q => Q1); PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN D0 <= NOT Q1; D1 <= D0; END IF ; END PROCESS ; DD0 <= D0; DD1 <= D1; QQ1 <= Q1; QQ0 <= Q0; D_OUT <= NOT (D1 AND NOT D0); D_OUT1 <= NOT Q1 ; 28 基于FPGA的电子密码锁设计 END ARCHITECTURE ART; 2.密码锁输入电路源程序 --KEYBOARD.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY KEYBOARD IS PORT (CLK_1K: IN STD_LOGIC ; --系统原始时钟脉冲(1 kHz) KEY_IN: IN STD_LOGIC_VECTOR (2 DOWNTO 0); --按键输入 CLK_SCAN: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; --( 仿真时用)键盘扫描序列 DATA_N: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --数字输出 DATA_F: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --功能输出 FLAG_N: OUT STD_LOGIC ; --数字输出标志 FLAG_F: OUT STD_LOGIC ; --功能输出标志 CLK_CTR: OUT STD_LOGIC; --控制电路工作时钟信号 CLK_DEBOUNCE: OUT STD_LOGIC --(仿真时用)去抖电路工作时钟信号 ); END ENTITY KEYBOARD ; ARCHITECTURE ART OF KEYBOARD IS COMPONENT DEBOUNCING IS PORT(D_IN: IN STD_LOGIC ; CLK: IN STD_LOGIC ; D_OUT: OUT STD_LOGIC ) ; END COMPONENT DEBOUNCING; SIGNAL CLK: STD_LOGIC ; --电路工作时钟脉冲 29 基于FPGA的电子密码锁设计 SIGNAL C_KEYBOARD: STD_LOGIC_VECTOR(1 DOWNTO 0); --键扫信号“00-01-10-11”寄存器 SIGNAL C_DEBOUNCE: STD_LOGIC ; 去抖时钟信号 -- SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0) ; --键盘输入去抖后的寄存器 SIGNAL N , F: STD_LOGIC_VECTOR(3 DOWNTO 0) ; --数字、功能按键译码值的寄存器 SIGNAL FN , FF: STD_LOGIC ; --数字、功能按键标志值数字、功能按键 SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN -- 内部连接 DATA_N <= N ; DATA_F <= F ; FLAG_N <= FN ; FLAG_F <= FF ; CLK_CTR <= CLK ; --扫描信号发生器 COUNTER : BLOCK IS SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0); --1110-1101-1011-0111 BEGIN PROCESS (CLK_1K) IS BEGIN IF CLK_1K'EVENT AND CLK_1K ='1' THEN 30 基于FPGA的电子密码锁设计 Q <= Q+1; END IF; C_DEBOUNCE <= Q(2) ; --去抖时钟信号, 大约125 Hz C_KEYBOARD <= Q(6 DOWNTO 5) ; -- 产生键扫信号***“00-01-10-11”, 大约16 Hz --C_DEBOUNCE <= Q(1) ; --仿真时用 --C_KEYBOARD <= Q(5 DOWNTO 4) ; --仿真时用 CLK <= Q(0) ; END PROCESS; CLK_DEBOUNCE<=C_DEBOUNCE; SEL <= "1110" WHEN C_KEYBOARD=0 ELSE "1101" WHEN C_KEYBOARD=1 ELSE "1011" WHEN C_KEYBOARD=2 ELSE "0111" WHEN C_KEYBOARD=3 ELSE "1111"; CLK_SCAN <= SEL ; END BLOCK COUNTER ; --键盘去抖 DEBOUNUING : BLOCK IS BEGIN U1: DEBOUNCING PORT MAP (D_IN => KEY_IN(0) , D_OUT => C(0), CLK => C_DEBOUNCE); U2: DEBOUNCING PORT MAP (D_IN => KEY_IN(1) , D_OUT => C(1), CLK => C_DEBOUNCE); U3: DEBOUNCING PORT MAP (D_IN => KEY_IN(2) , D_OUT => C(2), CLK => C_DEBOUNCE ); END BLOCK DEBOUNUING ; 31 基于FPGA的电子密码锁设计 --键盘译码 KEY_DECODER : BLOCK SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0) ; --按键位置 BEGIN PROCESS(CLK) BEGIN Z <= C_KEYBOARD & C ; IF CLK'EVENT AND CLK = '1' THEN CASE Z IS WHEN "11101" => N <= "0000" ; --0 WHEN "00011" => N <= "0001" ; --1 WHEN "00101" => N <= "0010" ; --2 WHEN "00110" => N <= "0011" ; --3 WHEN "01011" => N <= "0100" ; --4 WHEN "01101" => N <= "0101" ; --5 WHEN "01110" => N <= "0110" ; --6 WHEN "10011" => N <= "0111" ; --7 WHEN "10101" => N <= "1000" ; --8 WHEN "10110" => N <= "1001" ; --9 WHEN OTHERS => N <= "1111" ; END CASE ; END IF ; IF CLK'EVENT AND CLK = '1' THEN CASE Z IS WHEN "11011" => F <= "0100" ; --*_LOCK WHEN "11110" => F <= "0001" ; --#_UNLOCK WHEN OTHERS => F <= "1000" ; END CASE ; END IF ; END PROCESS ; 32 基于FPGA的电子密码锁设计 FN <= NOT ( N(3) AND N(2) AND N(1) AND N(0) ) ; FF <= F(2) OR F(0) ; END BLOCK KEY_DECODER ; END ARCHITECTURE ART; 3(密码锁控制电路程序 --CTRL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CTRL IS PORT(DATA_N:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_f:IN STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N:IN STD_LOGIC; FLAG_F:IN STD_LOGIC; CLK:IN STD_LOGIC; ENLOCK:OUT STD_LOGIC; --1:LOCK,0:UNLOCK DATA_BCD:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY CTRL ; ARCHITECTURE ART OF CTRL IS SIGNAL ACC,REG:STD_LOGIC_VECTOR(15 DOWNTO 0); --ACC用于暂存键盘输入的信息,REG用于存储输入的密码 SIGNAL NC:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL RR2,CLR,BB,QA,QB:STD_LOGIC; SIGNAL R1,R0:STD_LOGIC; BEGIN --寄存器清零信号的产生进程 PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN 33 基于FPGA的电子密码锁设计 R1<=R0;R0<=FLAG_F; END IF; RR2<=R1 AND NOT R0; CLR<=RR2; END PROCESS; --按键输入数据的存储、清零进程 KEYIN_PROCESS: BLOCK IS SIGNAL RST,D0,D1:STD_LOGIC; BEGIN RST<=RR2; PROCESS(FLAG_N,RST) IS BEGIN IF RST='1' THEN ACC<="0000000000000000"; --CLEAR INPUT NC<="000"; ELSE IF FLAG_N'EVENT AND FLAG_N='1' THEN IF NC<4 THEN ACC<=ACC(11 DOWNTO 0)& DATA_N; NC<=NC+1; END IF; END IF; END IF; END PROCESS; END BLOCK KEYIN_PROCESS; --上锁/开锁控制进程 LOCK_PROCESS: BLOCK IS BEGIN 34 基于FPGA的电子密码锁设计 PROCESS(CLK,DATA_F) IS BEGIN IF(CLK'EVENT AND CLK='1') THEN IF NC=4 THEN IF DATA_F(2)='1' THEN --上锁控制信号有效 REG<=ACC; --密码存储 QA<='1';QB<='0'; ELSIF DATA_F(0)='1' THEN --开锁控制信号有效 IF REG=ACC THEN --密码核对 QA<='0';QB<='1'; END IF; ELSIF ACC="1000100010001000" THEN --设置"8888"为万用密码 QA<='0';QB<='1'; END IF; END IF; END IF; END PROCESS; END BLOCK LOCK_PROCESS; --输出上锁/开锁控制信号 ENLOCK<=QA AND NOT QB; --输出显示信息 DATA_BCD<=ACC; END ARCHITECTURE ART; 35
/
本文档为【基于FPGA的电子密码锁设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索