基于FPGA电子密码锁的设计.doc_第1页
基于FPGA电子密码锁的设计.doc_第2页
基于FPGA电子密码锁的设计.doc_第3页
基于FPGA电子密码锁的设计.doc_第4页
基于FPGA电子密码锁的设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术应用课程论文论文题目: 基于FPGA电子密码锁的设计 论文类型: 论 文 设 计 学 校: 广西师范学院 姓 名: 黄 兆 航 学 号: 1112120124 班 级: 09 自 动 化 2012 年 6 月 28 日摘要基于FPGA设计的电子密码锁是一个小型的数字系统,与普通机械锁相比,具有许多独特的优点:保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件。在实际应用中,程序容易跑飞,系统的可靠性较差。本文介绍的一种基于现场可编辑门阵列FPGA器件的电子密码锁的设计方法,采用Verilog HDL语言对系统进行描述,并在EP1C6Q240C8上实现。本文主要阐述了一种基于现场可编程门阵列FPGA器件的电子密码锁的设计方法。用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。通过仿真调试,利用可编程逻辑器件FPGA的电子密码锁的设计基本达到了预期目的。当然,该系统在一些细节的设计上还需要不断地完善和改进,特别是对系统的扩展有很好的使用系统和设计的价值。本文采用EDA技术,利用Quartus II工作平台和硬件描述语言,设计了一种电子密码锁,并通过一片FPGA芯片实现。关键词:电子密码锁;FPGA;Verilog HDL语言目录第一章 前言1.1 国内外现状及其发展1.2 电子密码锁的原理第二章 现场可编程门阵列FPGA2.1 FPGA的基本结构2.2 FPGA的设计流程第三章 电子密码锁的设计思想3.1系统原理框图3.2 总体实现原理第四章 芯片主控设计4.1 FPGA有限状态机4.2设计流程4.3状态编码4.4密码的输入4.5 密码记录与比较4.6密码的显示第五章 编程、编译与仿真结束语致谢参考文献第一章 前言1.1 国内外现状及其发展随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差。基于现场可编程逻辑门阵列FPGA器件的电子密码锁,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率。1.2 电子密码锁的原理1.2.1 编码制式的选择编码制式应根据NT的大小选取,可分为如下三种:(1)密码的各位都可以重码:NT1=ai;(2)密码的非相邻位可以重码:NT2=a(a-1)i;(3)密码的任何一位都不能重码:NT3=a(a-1)(a-i+1)。其中a为基数,i为位数,a和i的选取应该满足NTNTL , a=2,3,4,10,12,14,16。现在以最常用的a=10,i=6为例,可以计算出NT2=0159NT 1,NT 3=0.15N T1,所以编码制式考虑是否重码对NT有很大影响。另外,相同制式下不同的基底对编码总量NT会有影响,而且基底的选择也会影响到硬件电路的设计。本文设计的密码锁采用十进制编码,密码各位允许重码,为简化电路设计,密码锁口令采用对串行脉冲计数的方式输入。1.2.2 误码输入的保护措施如前所述,电子密码锁的设计应考虑自身的安全保密性,由于编码和捕捉密码的实验都是随机的,若要使P=1 NT趋近于0,必须采取误码输入的保护措施。假定设定的误码输入次数不超过三次,误码达到三次时系统应关闭主控电路,拒绝大于三次的密码输入,并且系统进入死锁状态。系统正常状态的恢复也可采用以下三种方式:(1)延时后输入二级密码管理方式,即由管理员级密码作为正常输入的开锁密码,之后重新定义新的开锁密码;(2)使用一个按键使系统重新恢复到正常状态;(3)系统掉电恢复。1.3 系统设计要求1.设计一个密码锁,密码为一个8位的十六进制数,密码固化在锁内。 2.用户有三次输入密码的机会,如果正确,则开锁。 3.如果三次都输入错误,密码将报警并进入锁定状态。 4.用户在较长的一段时间内不能再次输入密码,警报时间过后,密码重新回到等待状态,用户可以再次输入密码。1.4 本设计的目的和意义随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。现在市场上主要是基于单片机技术的电子密码锁,但可靠性较差。FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。通常FPGA都有着上万次的重写次数,也就是说现在的硬件设计和软件设计一样灵活、方便。相对于基于单片机技术的电子密码锁,用FPGA器件来构成系统,可靠性提高,并且由于FPGA具有的现场可编程功能,使得电子密码锁的更改与升级更为方便简单。通过本次设计掌握FPGA系统设计的方法,熟悉FPGA设计的相关软件,以及硬件描述语言的使用,了解电子密码锁的系统构成,利用FPGA实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。第二章 现场可编程门阵列FPGA2.1 FPGA的基本结构FPGA的发展非常迅速,形成了各种不同的结构。按逻辑功能块的大小,FPGA可分为细粒度FPGA和粗粒度FPGA。细粒度FPGA的逻辑功能块较小,资源可以充分利用,但连线和开关多,速度慢;粗粒度FPGA的逻辑功能块规模大,功能强,但资源不能充分利用。从逻辑功能块的结构上分类,可分为查找表结构、多路开关结构和多级与非门结构。根据FPGA内部连线的结构不同,可分为分段互联型和连续互联型。根据编程方式,FPGA可分为一次编程和可重复编程两种。FPGA一般可由三种可编程电路和一个用于存放编程数据的SRAM组成,这三种可编程电路是:可编程逻辑块(CLB)、输入/输出模块(IOB)和互联资源(IR)。CLB是FPGA的主要组成部分,是实现逻辑功能的基本单元。它主要是由逻辑函数发生器、触发器、数据选择器等电路组成。IOB提供了器件引脚和内部逻辑阵列之间的连接,通常排列在芯片的四周。其主要是由输入触发器、输入缓冲器、输出触发/锁存器和输出缓冲器组成。每一个IOB控制一个引脚,可被配置为输入、输出活双向I/O功能。可编程互联资源包括各种长度的金属连线和一些可编程连接开关,它们将各个CLB之间和IOB之间互相连接起来,构成各种复杂功能的系统。2.2 FPGA的设计流程FPGA设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程如图2.4所示。需要说明的是,如果仿真验证不对或者某一步有错,就要返回修改。有必要检查和修改的地方有RTL级描述、系统方案、约束和测试激励等。一般情况下,对RTL级的描述即原理图或者HDL设计代码的修改最多也最有效。修改后要重新走一遍流程。有时要反复修改,经过多次这样的迭代才能完成最后的设计。在理论上,把VLSI(Ultra Large Scale Integration,超大规模集成电路)的设计描述为6个层次1,2,即系统级(系统功能、参数定义)、算法级(描述系统功能行为)、RTL级、门级(逻辑门)、电路级(晶体管)、版图级(物理工艺)。每一级又都分3个侧面来描述:行为域描述、结构域描述、物理域描述。但在实际情况中往往把算法级行为域描述或者RTL级行为域描述都称为行为级描述。系统设计要求时序、同步、算法测试等方案模块划分及其功能描述各模块接口信号定义系统行为描述系统行为仿真系统设计方案图2.4 系统设计流程对于FPGA的设计而言,不需要关心电路级和版图级,只考虑系统级、算法级、RTL级、门级4个层次的行为域描述和结构域描述即可。上述的FPGA系统设计中的系统实际上是指系统级和算法级,而“RTL级描述”主要是指RTL级行为域的描述。在门级,由综合工具产生的门级网表来描述。FPGA的设计流程如下:(1)系统行为描述系统行为描述是指使用硬件描述语言HDL (Hard-ware Description Language)语句的全集来描述算法,模拟系统的行为和功能,不要求所有的语句都能够综合成电路。事实上,有些语句是专为描述行为而创建的,不能综合(不能用电路来实现其功能)。也可以使用高级语言如C语言来进行描述,此时往往要配合专用的系统设计工具来进行描述与仿真,如SPW等。这种系统算法级行为域的描述可以尽量使用最简洁的语句而不必过多地考虑其硬件实现的诸因素,所以能较快建立系统行为模型,进行行为仿真。(2)系统行为仿真主要用来验证系统方案是否正确、是否有缺陷,并可根据仿真的结果来优化系统方案和算法。他使用系统行为描述代码、测试激励、行为级模型库等为输入,利用专用的仿真工具或者系统设计软件来进行功能仿真和优化。(3)RTL级描述指原理图(结构描述)或者使用可综合的HDL语句来描述的设计(一般是行为描述)。EDA综合软件只能将RTL级描述综合成逻辑电路。利用综合软件可以检查出所写的代码是否是RTL级代码。对简单的设计而言,可以直接从RTL级开始设计,但对大规模的设计,最好先写系统行为级代码进行行为仿真。如果系统行为仿真正确,就可以将行为级代码转化为RTL级代码。这种转化称之为高层次综合或者行为级综合。(4)功能仿真也叫RTL级仿真,是指不考虑延时信息的一种仿真,只能验证RTL级的行为描述是否能达到所要求的功能。功能仿真需要的输入是RTL级代码、测试激励和库(有时要调用工艺库中宏功能单元的行为级模型)。可利用专用的仿真工具进行仿真,如Modelsim,VCS等工具。如果仿真不对,则需要检查和修改RTL级代码或者测试激励甚至系统方案。仿真的过程是先对源代码进行编译,检查是否有语法错误。如果没有错误,就将源代码转换为一种中间格式,便于仿真工具的内部运算。编译的结果自动存放在一个指定的工作目录中,仿真的结果主要以波形文件的形式存放。(5)逻辑综合逻辑综合是将RTL级的行为描述转化为使用门级单元的结构描述。门级的结构描述称之为网表。网表文件主要记录的是所用工艺库门级单元之间的互连关系(即门级结构)。综合的输入需要RTL级描述、约束和工艺库。综合时所加的约束一般比较简单,如时钟频率、器件型号和其他综合设置等。综合的过程是translate (转换) +map(映射) +optimize (优化)。转换是将RTL级行为描述转化为RTL级结构描述(使用与工艺无关的通用逻辑门符号表示)。映射将转换后的结果使用工艺库门级单元的连接关系来表示,并根据需要进行优化,形成网表文件。映射是对某种目标器件而言是一种资源分配和优化操作。一般综合工具能将转换后的结果显示为RTL级原理图,也能将网表显示为门级原理图。网表文件中含门级单元的延时信息,对连线延时有预估值或者为零,不同的软件处理的方法可能不同,暂称之为网表文件。网表文件的格式可以表示成标准格式(edif),也可以表示成VHDL或者Verilog HDL格式(在综合工具中设置)。综合报告文件中含所用逻辑资源、预估出的时钟最高频率、关键路径(延时最长的路径,可在软件中显示)等信息。(6)布线前门级仿真布线前门级仿真是门级功能仿真,一般不考虑延时。该仿真的输入需要综合后的门级网表、工艺库和测试激励。有些EDA工具不提供此仿真功能,可以不做。(7)适配(布局布线)适配就是将网表文件映射到目标器件中的一种操作,是对目标器件的第二次映射(第一次映射是综合)。即对网表中的每一个门级单元在器件中定位(布局),并使用器件内的连线资源按照网表中的连接关系连接起来(布线)同时要满足引脚分配、时钟线的分配等约束条件。(8)时序仿真时序仿真是最接近真实情况的一种仿真,因为该仿真含所有的延时信息和约束信息(约束信息包含在网表文件中)。时序仿真的输入需要测试激励、工艺库门级单元模型、网表文件和反标文件。如果网表文件中含有延时信息,则不需要反标文件。时序仿真的结果跟延时关系极大。延时跟工艺有关,特别是深亚微米工艺,线延时大大超过门延时,所以总延时跟布局布线关系极大。如果仿真结果不对,要从约束、综合、布局布线、RTL级代码等环节上找原因,也可以借助时序分析工具找原因。(9)时序分析使用EDA软件的时序分析功能能够分析所有时钟的频率、周期、关键路径和其他所有时钟路径上的延时信息,进行建立时间和保持时间分析和输入到输出、输入到寄存器、寄存器到输出的延时分析等,从而可以找出不满足时序关系的原因所在。时序分析是一个辅助功能,有时可以不做。(10)器件编程指将适配后产生的编程文件下载到FPGA/CPLD器件中。下载的过程就是一个改写器件内逻辑结构的过程,故称之为编程。下载使用专用的编程器或者下载电缆。器件的编程接口一般使用10针JTAG插座。习惯上,对CPLD器件的下载叫编程,对FPGA器件的下载叫配置。CPLD器件基于E2PROM工艺或者FLASH工艺,掉电后信息不丢失。而FGAP器件基于SRAM查找表工艺,掉电后编程信息会丢失,在下次上电后需要重新加载编程文件。配置方式有多种模式,较常用的是PS模式(调试时用)和使用配置器件模式(产品中使用),他是使用一个EPROM型的配置芯片,先将编程数据烧写到配置芯片中,配置芯片跟FPGA使用专用接口引脚相连。这样,上电后配置芯片自动给FPGA加载编程数据。也可使用单片机进行配置。(11)系统验证先将FPGA芯片在测试板上进行功能验证,然后再到实际系统中验证。系统验证通过后就可以在产品中使用。至此,FPGA芯片设计完成。现在说明系统设计与模块设计的关系。上述的FPGA设计流程是一个具体设计的通用流程,对一个系统适用,对一个模块也是相同的。一个模块可以划分为多个子模块,子模块又可以再分。可以将模块看成一个子系统单独进行描述与仿真,但模块设计必须满足系统对他的要求。模块设计相对简单,所以有些步骤可以省去,如系统行为描述与仿真等。是否可省视具体情况而定。系统与模块的关系是:系统是顶层模块,他调用各个模块并将这些模块连接起来,然后作为一个整体进行FPGA设计流程的处理。第三章 电子密码锁的设计思想3.1系统原理框图本系统由主控芯片(FPGA),键盘,显示电路,报警电路和开/关门电路组成,而主控芯片又可分为按键处理部分,控制部分和译码显示部分。系统原理框图如图2.1所示:键盘按键处理主控部分译码显示显示开/关门电路报警电路FPGA图2.1 系统框图3.2 总体实现原理本系统有8个按键,K0,K1,K2,K3,K4,K5代表数字0-9共10个数字和1个确认键,1个复位键。密码长度为四位,并且固化在锁内,输入正确密码后,按确认键即可开门,本系统设置为LED D7灯亮。在输入密码的过程中,当用户键入错误密码时,报警灯LED D0灯亮。按下复位键,可使报警停止,同时清除所有密码显示。第四章 芯片主控设计4.1 FPGA有限状态机本设计是通过FPGA有限状态机来实现,设计有限状态机最开始的工作时要确定电路,包括哪些状态,比如某个电路包括四个状态,S0,S1,S2,S3。然后对所有状态给出一个状态编码,比如为状态S0赋予编码00,为状态S1赋予编码01,为状态S2赋予编码10,为状态S3赋予编码11。状态编码是状态的标识,保存在寄存器当中,对于此编码形式,只需一个2位的寄存器就可以了。FSM Encoding Style 主要有:Binary Encoding One Hot Encoding Gray Encoding 表4.1 二进制与一位热码的特性比较状态机可以认为是组合逻辑和寄存器逻辑的特殊租户,它一般包括两个部分:组合逻辑部分和寄存器逻辑部分。寄存器用于存储状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信号有关,而且还有寄存器当前所处的状态有关。4.2设计流程本次密码锁的设计,有限状态机应该包括以下状态:密码为输入前的等待状态、输入密码时的等待状态、输入密码正确时的通过状态、输入密码错误时的警报状态。图3.3 主有效状态机的状态转换图其中当密码输入时又可包括以下状态,正常输入状态、异常输入状态(包括命令状态)、输入确认状态。下面的图(图是在程序编译后,tools-Netlist_Vewers-RTL Vewer得到的)表示了密码输入的时候的次状态机,表示了4个密码输入的顺序状态,以及输入完成后的等待确认状态。图3.4次有效状态机的状态转换4.3状态编码状态编码主要有二进制编码、格雷编码和一位独热编码等方式。格雷编码时,相邻状态每次只有一个比特位产生变化,这样减少了瞬变的次数,也减少了产生毛刺和一些状态的可能。采用一位独热编码,虽然多用了触发器,当可以有效节省和简化组合电路。对于寄存器数量多而逻辑相对缺乏的FPGA器件来说,采用一位独热编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。将产生状态的组合逻辑电路和用于保存状态的寄存器分别写在不同的always块中。其中主要包括:输出控制部分、警报计时部分、锁打开后的计时部分、比较密码部分、记录密码部分和记录错误次数的部分4.4密码的输入本次密码锁的密码输入采用FPGA芯片上的8位单个按键,考虑到按键数目不够,采用了一位按键作为功能转换按键;即前5位按键输入04,同时按下功能转换按键时,按键04即转换为按键59,这就弥补了按键数目的不足。最后两位按键设定为确认输入按键和复位按键。密码输入完成后可以按确认键检验密码的正误,报警、输入错误或者其他情况可以按复位按键重新输入。另外由于按键的时候同时会引起状态机的转换,所以如果按键的时候对按键判断次数过多会产生状态的过快转换,记录的密码和数码管的显示就同时会出现错误,因此在按键部分加入了消除多重按键的程序,只检测一次按键的下降沿,解决了这个问题。4.5 密码记录与比较程序设定了一个寄存器用来记录输入的密码。当次有效状态机(即密码输入的状态机)发生转换并且有密码输入时,程序会记录下输入的密码在寄存器的其中4位里面,最后次有效状态转换到确认密码的状态时,会将记录下的密码与固化在锁内的密码进行对比,正确即将主状态机转换到通过阶段,错误则将状态机转换到报警阶段。其中正确错误的状态转换是通过控制相应的标志位实现的。4.6密码的显示密码显示采用数码管动态扫描显示,初始时显示密码为4位0,当输入密码后数码管的第一位、第二位、第三位、第四位会依次显示输入的密码,错误后复位可以重新输入。密码显示采用的是记录密码的寄存器的数据,显示扫描的扫描时间设置为1ms左右,这样显示不会出现闪烁或者残影。第五章 编程、编译与仿真本节主要是阐述设计在Quartus II软件中实现编译与仿真。在Quartus II在输入源程序后,我们需要建立一个工程,在工程中我们要把设计文件加入工程中;然后选择仿真器和综合器类型值得注意的是如果选择默认的“NONE”,表示选择Quartus II软件中自带的仿真器和综合器,结合自己的设计,在此我选择默认项“NONE”;最后选择目标芯片。在“Family”栏选择芯片系列,在此我选择“Cyclone”系列再选择此系列的具体芯片EP1C6Q240C8。工程建立以后,可以进行源程序的编译。选择“Processing”Start Compilation,启动全程编译。编译后产生的报告如下所示:图4.4 编译后产生的统计报告编译成功后,就可以进行波形的仿真。由程序得出仿真图:参考一下前面的输入cmd的编码便可读懂此图:/输入的数字编码 09,enter,cancelone=5b10001, two=5b10010,three=5b10011,four=5b10100,five=5b10101,six=5b10110,seven=5b10111,eight=5b11000,nine=5b11001,zero=5b11000,enter=5b11010,cancel=5b11011;可以看到,在复位以后,输入第1,2,3,4个密码(依次为1234)后,passed变成高电平当过了一定的时间后,passed变成低电平,重新计入键盘读入值,进行下一轮的密码辨别。程序清单如下:module passwd_lock(clk,resetb,cmd,alarmed,passed,);inputclk;/输入时钟信号inputresetb;/输入复位信号input 4:0cmd;/输入命令信号outputalarmed;/输出警报信号outputpassed;/输出通过信号wireclk;wireresetb;wire4:0cmd;regalarmed;regpassed;/输入与输出的声明部分,其中,clk为输入的时钟信号,resetb为密码舒服的输入信号,cmd为输入命令,需注意的时,cmd并不是总在表示密码,也表示密码的间隔,如当输入4位密码后需要一个确认“enter”信号,当密码输入错误时,需要取消“cancel”信号,这些信号之间在设计中通过有限状态转换机实现。parameterPASSWORD=16d1234;/盛放密码的参数reg15:0password;/输入数值盛放寄存器/输入的数字编码 09,enter,cancelregone=5b10001,two=5b10010,three=5b10011,four=5b10100,five=5b10101,six=5b10110,seven=5b10111,eight=5b11000,nine=5b11001,zero=5b11000,enter=5b11010,cancel=5b11011;regcmd_t;/检验是否有按键按下reg2:0main_state;/主状态reg2:0next_state;/下一个状态/主有限状态转换机的三个状态:waits、pass、alarmparameterwaits=3b001,pass=3b010,alarm=3b100;reg2:0sub_state;reg2:0next_sub_state; /主有限状态转换机的三个状态:first、second、third、fourth、finish。parameterfirst=3b000,second=3b001,third=3b010,fourth=3b011,finish=3b100;/通过计时寄存器reg7:0pass_count;/警报计时寄存器reg10:0alarm_count;/尝试次数寄存器reg1:0try_count;/输入状态寄存器:error和correctregerror;regcorrect;/以上为中间状态的一些寄存器和一些所用到的参数/主机状态机部分always(main_state or correct or error)begincase(main_state)waits:if(correct=1) /由waits转换到pass的条件next_state=pass;else if(error=1&try_count=2)next_state=alarm; /由waits转换到alarm的条件elsenext_state=waits;pass:if(pass_count7=1)/由pass转换到waits的条件next_state=waits;elsenext_state=pass;alarm:if(alarm_count10=1)/ 由alarm转换到waits的条件next_state=waits;elsenext_state=alarm;default:/默认状态:waitsnext_state=waits;endcaseend/状态转换always(posedge clk or negedge resetb)beginif(!resetb)main_state=waits;elsemain_state=next_state;end/输出控制部分always(posedge clk or negedge resetb)beginif(!resetb)/复位时,开锁输出与警报输出都为零beginpassed=0;alarmed=0;endelse if(main_state=pass)/当主机状态为pass时,开锁beginpassed=1;alarmed=0;endelse if(main_state=alarm)/当主机状态为alarm时,警报beginpassed=0;alarmed=1;endelse/其它状态复位beginpassed=0;alarmed=0;endend/alarm一段时间后,自动进入waits状态/alarm定时器always(posedge clk or negedge resetb)beginif(!resetb)alarm_count=0;else if(main_state=alarm)/alarm状态计时器alarm定时器加1alarm_count=alarm_count+1;elsealarm_count=0;end/锁pass以后计数开始,当规定的时间到达后自动上锁,并进入waits状态/pass定时器always(posedge clk or negedge resetb)beginif(!resetb)pass_count=0;else if(main_state=pass) /pass状态计时器pass定时器加1pass_count=pass_count+1;elsepass_count=0;end/从状态机,用于输入4位密码always(posedge clk or negedge resetb)begin if(!resetb)cmd_t=0;else cmd_t=-cmd4;endalways(posedge clk or negedge resetb)beginif(!resetb)sub_state=first;elsesub_state=next_sub_state;endalways(cmd or cmd_t or sub_state)/always(cmd or sub_state)beginif(cmd_t=0&cmd4=1)case(cmd)cancel:/密码输入错误时,重复上一个状态beginif(sub_state=first)/ 第1个密码输入错误next_sub_state=first;elsecase(sub_state)second: / 第2个密码输入错误next_sub_state=first;third: / 第3个密码输入错误next_sub_state=second;fourth: / 第4个密码输入错误next_sub_state=third;finish:next_sub_state=fourth;endcaseendenter:/4个密码输完时,进行确认next_sub_state=first;/以下4个命令位无效的命令,状态保持不变5b11100:next_sub_state=next_sub_state;5b11101:next_sub_state=next_sub_state;5b11110:next_sub_state=next_sub_state;5b11111:next_sub_state=next_sub_state;/default为输入了某位密码,输入完自动将状态转入下一位default:case(sub_state)first:next_sub_state=second;second:next_sub_state=third;third:next_sub_state=fourth;fourth:next_sub_state=finish;/当输入完4位密码以后状态保持不变,等待输入enter命/令finish:next_sub_state=finish;endcaseendcaseelsenext_sub_state=sub_state;end/比较密码,产生

温馨提示

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

评论

0/150

提交评论