版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1绪论1.1国内外现状及其发展随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。但较实用的还是按键式电子密码锁。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差。基于现场可编程逻辑门阵列FPGA器件的电子密码锁,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率。1.2电子密码锁的系统简介通用的电子密码锁主要由四个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。密码显示电路主要将显示数据的BCD码转换成相对应的编码。如,若选用七段数码管显示电路,主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。1.3系统设计要求设计一个具有较高安全性和较低成本的通用电子密码锁,具体功能要求如下:数码输入:每按下一个数字键,就输入一个数值,并在显示器上的显示出该数值,同时将先前输入的数据依序左移一个数字位置。数码清除:按下此键可清除前面所有的输入值,清除为“0000”。密码更改:按下此键时会将目前的数字设定成新的密码。激活电锁:按下此键可将密码锁上锁。解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。1.4本课题的研究目的和意义随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。现在市场上主要是基于单片机技术的电子密码锁,但可靠性较差。FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。相对于基于单片机技术的电子密码锁,用FPGA器件来构成系统,可靠性提高,并且由于FPGA具有的现场可编程功能,使得电子密码锁的更改与升级更为方便简单。通过本次设计掌握FPGA系统设计的方法,熟悉FPGA设计的相关软件,以及硬件描述语言的使用,了解电子密码锁的系统构成,利用FPGA实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。2FPGA与VHDL硬件描述语言此次设计是按照"自顶向下"的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。自上而下的设计方法是现代电子系统的新型设计策略,它从设计的总体要求出发,自上而下地逐步从系统数学模型的设计与仿真,到数据流级的设计与仿真,选择系统设计方案,最后完成系统硬件的整体设计。2.1FPGA的相关介绍FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物[9]。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。FPGA可做其它全定制或半定制ASIC电路的中试样片。FPGA内部有丰富的触发器和I/O引脚。FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。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设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程如图2.1所示。模模块划分及其功能描述各模块接口信号定义系统行为描述系统行为仿真时序、同步、算法测试等方案系统设计方案系统设计方案图2.1系统设计流程2.2VHDL硬件描述语言VHDL(VeryhighspeedintegratedcircuitHardwareDescriptionLanguage)硬件描述语言从高于逻辑级的抽象层次上描述硬件的功能、信号连接关系及定时关系。VHDL的设计流程如下图。图2.2VHDL的设计流程。2.2.1VHDL语言的基本结构一个完整的VHDL语言程序通常包含实体(Entity、)结构体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)五个部分。1实体实体说明部分是说明一个器件的外观视图,即从器件外部看到的器件外貌,其中包括器件的端口,同时也可以定义参数,并把参数从外部传入模块内部,主要用于描述所设计的系统的外部接口。结构体结构体是描述一个器件的内部视图,是次级设计单元。在其对应的初级设计单元实体说明被编译并且被并入设计库之后,它就可以单独地被并入该设计库中。结构体描述一个设计的结构和行为,把一个设计的输入和输出之间的关系建立起来。一个设计可以有多个结构,分别代表该器件的不同实现方案。根据对一个器件设计由抽象到具体的过程,可把结构体的描述方式分为三个层次:行为描述方式、寄存器传输描述方式(RTL)和结构描述方式。库库是经编译后的实体、结构体、包集合和配置的集合。使用库时总要在设计单元的前面予以说明。一旦说明,库中的数据对该设计单元就是可见的,从而共享已经编译过的设计结果。VHDL语言中存在的库大致有IEEE库、STD库、ASIC厂家提供的库、用户定义的库和现行作业库。包集合包集合属库中的一个层次,是一种可编译的源设计单元。它收集了VHDL语言中所用到的信号、常数、数据类型、函数和过程的说明等。用户可以构造一个包集合,用以存放常数、数据类型、函数和过程,该包集合经编译后便自动加到WORK库中。使用库中的包集合时,在打开库后要用USE语句说明,例如:LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;配置配置语句从一个库中为一个实体选择一个特定的结构体,是一种放在库中的被编辑单元,并有相应的配置名。通过配置技术,可以选取多种不同的结构体,以便对一个设计任务采用仿真工具进行多种配置的性能实验。另外,配置说明和规定的特性还可以用在多层描述中。3电子密码锁的设计与实现3.1电子密码锁设计要求设计一个基于FPGA的电子密码锁,其基本要求为:1.密码锁为四位显示,可以通过按键接受密码设置;按下数字键,第一个数字会显示器的最右端显示,随后每按下一个新数字,显示器上的已经存在的数字整体会向左移一位,并将以新的数字显示出来;2.当输入密码时,四位密码都正确,则绿灯亮,密码锁开锁;当其中任意一位不正确时,则红灯亮,密码锁不开锁,当按下复位键时,显示为最初设置,可再重新输入密码。3.若要更改输入数字,则可按复位键消除所有输入的数字,再重新输入数字。4.电子密码锁为4位,当输入超过4位时,电路不予理会,且不会显示第4个以后的数字。3.2总体设计思想首先根据电子密码锁的逻辑功能,设计逻辑电路。然后根据逻辑电路,编写FPGA程序实现逻辑功能,再用仿真软件进行仿真调试,最后下载到FPGA芯片上运行。本设计为四位电子密码锁,通过输入密码并直观地通过数显模块显示出来;对输入信号进行显示,通过控制模块判断输入密码是否正确,四位密码都正确,则密码锁开锁,只要其中有一位不正确,则密码锁不开锁,同时该系统还应有复位功能,按下复位键,允许重新输入密码。此电子密码锁的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。图3.1为数字电子密码锁系统总体框图。图3.1图3.1电子密码锁系统总体框图3.3子模块的设计思想及实现3.3.1输入模块的设计与实现作为电子密码锁的输入电路,数字密码输入电路可采用一个3×4的通用数字机械键盘作为本设计的输入设备。机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用电子密码锁中是比较适宜的。输入模块主要包括时序产生电路、键盘扫描电路和弹跳消除电路。1.时序产生电路本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。当一个系统中需使用多种操作频率的脉冲波形时,最方便的方法之一就是利用一计数器来产生各种需要的频率。也就是先建立一个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(5DOWNTO4)取得的是一个脉冲波形序列,其值依00-01-10-11-00-01周期性变化,其变化频率为CLK的32分频。我们利用以上规律即可得到各种我们所需要频率的信号或信号序列。SIGNALCLK:STD_LOGIC;--电路工作时钟脉冲 SIGNALC_KEYBOARD:STD_LOGIC_VECTOR(1DOWNTO0); --键扫信号“00-01-10-11”寄存器SIGNALC_DEBOUNCE:STD_LOGIC;--去抖时钟信号2.键盘扫描电路扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110„„依序的周而复始。扫描时依序分别扫描四列按键,当扫描信号为1110时扫描KY3这一排按键;当扫描信号为1101室,扫描KY2这一排按键;当扫描信号为1011时,扫描KY1这一排按键;当扫描信号为0111时,扫描KY0这一排按键。每扫描一排按键就检查一次是否有键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键则立刻进行按键编码的动作,且将编码的结果储存于寄存器中。--扫描信号发生器COUNTER:BLOCKIS SIGNALQ:STD_LOGIC_VECTOR(5DOWNTO0); SIGNALSEL:STD_LOGIC_VECTOR (3DOWNTO--1110-1101-1011-0111BEGINPROCESS(CLK_1K)IS0);BEGINIFCLK_1K'EVENTANDCLK_1K='1'THENQ<=Q+1;ENDIF;C_DEBOUNCE<=Q(2);--去抖时钟信号,大约125Hz C_KEYBOARD<=Q(6DOWNTO5); --产生键扫信号***“00-01-10-11”,大约16HzC_DEBOUNCE<=Q(1);--仿真时用 C_KEYBOARD<=Q(5DOWNTO4); --仿真时用CLK<=Q(0);ENDPROCESS;3.弹跳消除电路由于设计采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。弹跳现象产生的原因是,虽然每次只是按下按键一次然后放掉,然而实际产生的按键信号却不知跳动一次,经过取样信号的检查后,将会造成误判断,以为键盘按了两次。图3.2弹跳现象产生错误的抽样结果如果调整抽样频率,弹跳现象就可以获得改善。图3.3调整抽样频率后得到的抽样结果因此必须加上弹跳消除电路,避免误操作信号的发生。特别要注意的是,弹跳消除电路所使用的脉冲信号的频率必须比其他电路使用的脉冲信号的频率更高;通常将扫描电路的工作频率定在24Hz左右,而将弹跳消除电路的工作频率定在128Hz左右,其工作频率通常是前者的4倍或者更高。DEBOUNUING:BLOCKISBEGINU1:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(0),D_OUT=>C(0),CLK=>C_DEBOUNCE);U2:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(1),D_OUT=>C(1),CLK=>C_DEBOUNCE);U3:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(2),D_OUT=>C(2),CLK=>C_DEBOUNCE);3.3.2控制电路设计与实现密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的相应控制。1.数字按键输入的响应控制如果按下数字键,第一个数字会从显示其的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有出入的数字,再重新输入四位数。当输入的数字键超过预设位数时,电路不予理会,而且不再显示以后的数字。2。功能按键输入的响应控制(1)清除键:清除所有的输入数字,即作归零动作。(2)激活电锁键:按下此键时可将密码锁的门上锁。(3)解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开门。使用电子密码锁的时候,只会用到三种工作模式,其中输入文字模式用的是数字按键,只有上锁和开锁两个模式必须占用功能按键。但是在实际操作中,难免会有按错键的情况发生,使得“清除输入”功能是用的机率很高,所以在设计中共设置了两个功能按键,其中“接触电锁”和“清除电锁”共用一个功能按键,另一个功能按键是“激活电锁”。--CTRL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_ARITH.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYCTRLIS PORT(DATA_N:INSTD_LOGIC_VECTOR(3DOWNTO0); DATA_F:INSTD_LOGIC_VECTOR(3DOWNTO0); FLAG_N:INSTD_LOGIC;FLAG_F:INSTD_LOGIC;CLK:INSTD_LOGIC; ENLOCK:OUTSTD_LOGIC; --1:LOCK,0:UNLOCK DATA_BCD:OUTSTD_LOGIC_VECTOR(15DOWNTO0)); ENDENTITYCTRL;ARCHITECTUREARTOFCTRLIS SIGNALACC,REG:STD_LOGIC_VECTOR(15DOWNTO0); --ACC用于暂存键盘输入的信息,REG用于存储输入的密码 SIGNALNC:STD_LOGIC_VECTOR(2DOWNTO0); SIGNALRR2,CLR,BB,QA,QB:STD_LOGIC;SIGNALR1,R0:STD_LOGIC;BEGIN--寄存器清零信号的产生进程PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENR1<=R0;R0<=FLAG_F;ENDIF;RR2<=R1ANDNOTR0;CLR<=RR2;ENDPROCESS;--按键输入数据的存储、清零进程KEYIN_PROCESS:BLOCKISSIGNALRST,D0,D1:STD_LOGIC;BEGINRST<=RR2;PROCESS(FLAG_N,RST)ISBEGINIFRST='1'THENACC<="0000000000000000";--CLEARINPUTNC<="000";ELSEIFFLAG_N'EVENTANDFLAG_N='1'THENIFNC<4THEN ACC<=ACC(11DOWNTO0)&DATA_N; NC<=NC+1;ENDIF;ENDIF;ENDIF;ENDPROCESS; ENDBLOCKKEYIN_PROCESS; --上锁/开锁控制进程LOCK_PROCESS:BLOCKISBEGINPROCESS(CLK,DATA_F)ISBEGINIF(CLK'EVENTANDCLK='1')THENIFNC=4THENIFDATA_F(2)='1'THEN--上锁控制信号有效REG<=ACC;--密码存储QA<='1';QB<='0';ELSIFDATA_F(0)='1'THEN--开锁控制信号有效IFREG=ACCTHEN--密码核对QA<='0';QB<='1';ENDIF;ELSIFACC="1000100010001000"THEN--设置“8888”为万用密码QA<='0';QB<='1';ENDIF;ENDIF;ENDIF;ENDPROCESS; ENDBLOCKLOCK_PROCESS; --输出上锁/开锁控制信号 ENLOCK<=QAANDNOTQB; --输出显示信息DATA_BCD<=ACC; ENDARCHITECTUREART; 3.3.3显示模块设计与实现显示模块实际上是一个译码器,作用是用来显示输入的密码,其主要原理是四位二进制BCD编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,使观众能够更直观的看到结果。KEY_DECODER:BLOCK SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0);--按键位置BEGINPROCESS(CLK)BEGINZ<=C_KEYBOARD&C;IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"11101"=>N<="0000";--0WHEN"00011"=>N<="0001";--1WHEN"00101"=>N<="0010";--2WHEN"00110"=>N<="0011";--3WHEN"01011"=>N<="0100";--4WHEN"01101"=>N<="0101";--5 WHEN"01110"=>N<="0110";--6WHEN"10011"=>N<="0111";--7WHEN"10101"=>N<="1000";--8WHEN"10110"=>N<="1001";--9WHENOTHERS =>N<="1111";ENDCASE;ENDIF;3.3.4电子密码锁的系统实现单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:①元件例化。也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。在设计中选择的是这种方法。通过总的顶层元件图可以很清晰的看到模块连接的原理。4电子密码锁的时序仿真4.1电子密码锁的设计流程使用QuartusⅡ进行电子密码锁设计的流程为编写VHDL程序(使用TextEditor)(见附录);编译VHDL程序(使用Compiler);仿真验证VHDL程序(使用WaveformEditor,Simulator);进行芯片的时序分析(使用TimingAnalyzer);安排芯片管脚位置(使用FloorplanEditor);下载程序至芯片(使用Programmer)。4.2系统主要模块的仿真本节主要是阐述设计在QuartusII软件中实现编译与仿真。在QuartusII在输入源程序后,我们需要建立一个工程,在工程中我们要把设计文件加入工程中;然后选择仿真器和综合器类型。值得注意的是,选择默认的“NONE”,表示选择QuartusII软件中自带的仿真器和综合器,结合自己的设计,最后选择目标芯片。工程建立以后,可以进行源程序的编译。选择“Processing”StartCompilation,启动全程编译。编译后产生的报告如下所示:图4.1编译后产生的统计报告编译成功后,就可以进行波形的仿真。1.防抖模块的仿真图4.2为键盘输入防抖电路的仿真结果图,图中的输出信号N,ACC,REG是为了便于仿真时观察中间结果而增加的观测点的输出,调试好后程序中的相应语句应注释掉。由图上可以看出,原来的弹跳现象经过键盘输入防抖电路处理后已经清除了,必须连续两次取样检测到信号才会有反应,否则电路将其视为噪声,不予理会。图图4.2键盘输入防抖电路的仿真结果图由图中可以看出,键盘扫描出的信号弹跳现象得到改善。2.密码锁输入电路的仿真图4.3为密码锁输入电路的仿真结果图,图中的输出信号CLK_SCAN,C_DEBOUNCE 是为便于仿真时观察中间结果而增加的观测点的输出,调试好后程序中的相应语句应注释掉。图4.3密码锁输入电路仿真结果图输入信号KEY_IN[2,0]依序依011-101-110-011-101的顺序周期性循环,对键盘进行扫描。如有按键发生,键盘扫描输出信号CLK_SCAN做出反应。3.密码锁控制电路的仿真图4.4、图4.5分别是两个密码锁控制电路仿真结果图。图4.4密码锁控制电路仿真结果图(一)图4.4的仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁接着输入万能解锁密码“8888”,最后按下解锁键解锁。图4.5密码锁控制电路仿真结果图(二)图4.5的仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁,接着输入解锁密码“1234”;最后按下解锁键解锁。从仿真图上可以看出,密码控制电路的设计是正确的。通过波形仿真来验证是否完成了相应的模块功能,如果出现问题要进行相应的修改。进行完波形仿真,就可以通过QuartusII中的模块编辑器来建立相应的功能模块,将前面各个设计好的功能模块进行整合,可得到一个完整的电子密码锁系统的整体组装设计原理图。如下图所示:总结在基于FPGA的系统设计中,采用了自顶向下的设计方法,它的好处是可以先调试各个单元电路,在每个单元电路设计完成后,采用专门的仿真工具进行功能仿真,确定每个单元电路都没有问题后再连接顶层图形文件,这样整个系统的调试就轻松得多,可节省不少设计时间。此设计实现了基于FPGA的用VHDL语言编程的数字密码锁功能电路,它的优点是采用可编程逻辑器件FPGA,使得系统有相当大的灵活性,随时可以进行硬件升级、扩展,而且系统设计完善以后还可以将主控的FPGA固化成一片ASIC,那么这块ASIC就可以作为专用的数字密码锁芯片。而且由于硬件可升级,还可随时增加密码位数或增加新的功能,使得密码锁有更高的安全性、可靠性和方便性,可以安装在不同的门上,具有一定的推广应用价值。同时克服了基于单片机技术程序容易跑飞,系统的可靠性能较差的问题。由于考虑到体积、成本等因素,本装置在性能上功能上海存在不足,还有待于进一步提高:增加语音播报功能,可以提高装置的灵敏度,同时方便用户的操作。可在装置中增加一个报警和语音芯片,增加蜂鸣报警指示和语音说明指示,可以根据输入的密码数字播报,同时可以扩展锁的安全防盗报警功能。结束语毕业设计可以说是大学四年的一次总结,是所学知识的一次重要的综合性应用。在这次设计中,我把重点放在了新知识的学习以及设计流程中的程序仿真和模块分析上。在设计过程中,需要解决的问题都是些很具体的问题,这和以往有很大的区别。以往要解决问题只要求我们在局部解答,各种条件都是已知的,解决方案可以在已学的课本知识中得到。而设计中的具体的问题要求从全局解决,要求系统的考虑各种因素来解决,也有着各种未知的难点要求解决。在这次毕业设计的过程中,我得到了我的导师董素鸽老师的悉心指导和无私帮助,她严谨的治学态度和谦和的为人给我留下了深刻的印象。在论文完成之际,首先对我的导师董素鸽老师以最诚挚的谢意,在我写论文期间对我的引导和启发。在整个论文的选题、理论研究、总体设计、详细设计的过程中,自始自终得到了董素鸽老师的悉心指导和深切关怀。感谢董素鸽老师对我的论文不厌其烦的精心修改,董老师多次耐心地审阅了论文全稿,提出了许多宝贵的意见。她严谨的治学态度给我留下了深刻的印象,使我终身受益。这次毕业设计我学到了很多东西,锻炼了自己独立学习的能力。在与导师董素鸽老师和同学的讨论过程中,也看到了自己的不足,更激励我要努力。感谢我的老师和同学给与我的帮助。参考文献李连华.基于FPGA的电子密码锁设计.中国科技信息,2006许琦.基于FPGA的电子密码锁的设计.科技信息,2006王卫兵,刘克刚,朱秋萍.用FPGA的电子密码锁.电子技术,2005[4]赵益丹,徐晓林,周振峰.电子密码锁的系统原理、设计程序及流程图.嘉兴学院学报,2003陆重阳,卢东华.FPGA技术及其发展趋势.微电子技术,2003王晓勇.FPGA的基本原理及运用.舰船电子工程,2005程耀林.FPGA的系统设计方法解析.现代电子技术,2005K.Benkrid,A.BenkridandS.Belkacemi.EfficientFPGAhardwaredevelopment:Amulti-languageapproach.JournalofSystemsArchitecture,2007Altera,NovasTeamforFPGAVisibilityEnhancement.ElectronicNews(NorthAmerica).2006张忠.自顶向下的FPGA设计.电子产品世界,1998路而红.专用集成电路设计与电子设计自动化.北京:清华大学出版社,2004罗杰,康华光.两种硬件描述语言VHDL/Verilog的发展及其应用.电气电子教学学报,2002曹建国,王威,王丹.一种基于VHDL的电子密码锁的设计与实现.沈阳大学学报,2006谭会生,瞿遂春.EDA技术综合应用实例与分析.西安:西安电子科技大学出版社,2004梁丽.电子密码锁的计算机仿真设计.计算机仿真,2005附录1.键盘输入去抖电路的VHDL源程序--DCFQ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDCFQISPORT(CLK,CLRN,PRN,D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYDCFQ;ARCHITECTUREARTOFDCFQISBEGINPROCESS(CLK,CLRN,PRN)BEGINIFCLRN='0'ANDPRN='1'THENQ<='0';ELSIFCLRN='1'ANDPRN='0'THENQ<='1';ELSIFCLK'EVENTANDCLK='1'THENQ<=D;ENDIF;ENDPROCESS;ENDARCHITECTUREART; --DEBOUNCING.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;LIBRARYALTERA;USEALTERA.MAXPLUS2.ALL; ENTITYDEBOUNCINGISPORT(D_IN,CLK:INSTD_LOGIC;DD1,DD0,QQ1,QQ0:OUTSTD_LOGIC;D_OUT,D_OUT1:OUTSTD_LOGIC);ENDENTITYDEBOUNCING; ARCHITECTUREARTOFDEBOUNCINGISCOMPONENTDCFQISPORT(CLK,CLRN,PRN,D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENTDCFQ; SIGNALVCC,INV_D:STD_LOGIC;SIGNALQ0,Q1:STD_LOGIC;SIGNALD1,D0:STD_LOGIC;BEGINVCC<='1';INV_D<=NOTD_IN;U1:DCFQPORTMAP(CLK=>CLK,CLRN=>INV_D,PRN=>VCC,D=>VCC,Q=>Q0);U2:DCFQPORTMAP(CLK=>CLK,CLRN=>Q0,PRN=>VCC,D=>VCC,Q=>Q1);PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEND0<=NOTQ1;D1<=D0;ENDIF;ENDPROCESS;DD0<=D0;DD1<=D1;QQ1<=Q1;QQ0<=Q0;D_OUT<=NOT(D1ANDNOTD0);D_OUT1<=NOTQ1;ENDARCHITECTUREART;2.密码锁输入电路源程序--KEYBOARD.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYKEYBOARDISPORT(CLK_1K:INSTD_LOGIC;KEY_IN:INSTD_LOGIC_VECTOR(2DOWNTO0); CLK_SCAN:OUTSTD_LOGIC_VECTOR(3DOWNTO0); DATA_N:OUTSTD_LOGIC_VECTOR(3DOWNTO0); DATA_F:OUTSTD_LOGIC_VECTOR(3DOWNTO0); FLAG_N:OUTSTD_LOGIC;FLAG_F:OUTSTD_LOGIC;CLK_CTR:OUTSTD_LOGIC; CLK_DEBOUNCE:OUTSTD_LOGIC ;ENDENTITYKEYBOARD; ARCHITECTUREARTOFKEYBOARDISCOMPONENTDEBOUNCINGISPORT(D_IN:INSTD_LOGIC;CLK:INSTD_LOGIC;D_OUT:OUTSTD_LOGIC);ENDCOMPONENTDEBOUNCING; SIGNALCLK:STD_LOGIC;SIGNALC_KEYBOARD:STD_LOGIC_VECTOR(1DOWNTO0); SIGNALC_DEBOUNCE:STD_LOGIC; SIGNALC:STD_LOGIC_VECTOR(2DOWNTO0); SIGNALN,F:STD_LOGIC_VECTOR(3DOWNTO0); SIGNALFN,FF:STD_LOGIC;SIGNALSEL:STD_LOGIC_VECTOR(3DOWNTO0); BEGINDATA_N<=N;DATA_F<=F;FLAG_N<=FN;FLAG_F<=FF;CLK_CTR<=CLK;COUNTER:BLOCKISSIGNALQ:STD_LOGIC_VECTOR(5DOWNTO0); SIGNALSEL:STD_LOGIC_VECTOR(3DOWNTO0); BEGINPROCESS(CLK_1K)ISBEGINIFCLK_1K'EVENTANDCLK_1K='1'THENQ<=Q+1;ENDIF;C_DEBOUNCE<=Q(2);C_KEYBOARD<=Q(6DOWNTO5); C_DEBOUNCE<=Q(1);C_KEYBOARD<=Q(5DOWNTO4);CLK<=Q(0);ENDPROCESS;CLK_DEBOUNCE<=C_DEBOUNCE; SEL<="1110"WHENC_KEYBOARD=0ELSE"1101"WHENC_KEYBOARD=1ELSE"1011"WHENC_KEYBOARD=2ELSE"0111"WHENC_KEYBOARD=3ELSE"1111";CLK_SCAN<=SEL;ENDBLOCKCOUNTER; DEBOUNUING:BLOCKISBEGINU1:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(0),D_OUT=>C(0),CLK=>C_DEBOUNCE);U2:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(1),D_OUT=>C(1),CLK=>C_DEBOUNCE);U3:DEBOUNCINGPORTMAP(D_IN=>KEY_IN(2),D_OUT=>C(2),CLK=>C_DEBOUNCE);ENDBLOCKDEBOUNUING; KEY_DECODER:BLOCK SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0); BEGINPROCESS(CLK)BEGINZ<=C_KEYBOARD&C;IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"11101"=>N<="0000";--0WHEN"00011"=>N<="0001";--1WHEN"00101"=>N<="0010";--2WHEN"00110"=>N<="0011";--3WHEN"01011"=>N<="0100";--4WHEN"01101"=>N<="0101";--5WHEN"01110"=>N<="0110";--6WHEN"10011"=>N<="0111";--7WHEN"10101"=>N<="1000";--8WHEN"10110"=>N<="1001";--9WHENOTHERS =>N<="1111";ENDCASE;ENDIF;IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"11011"=>F<="0100";--*_LOCKWHEN"11110"=>F<="0001";--#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度职业技能培训学校招生代理合作协议3篇
- 2025年玻璃制品展示设计与制作合同3篇
- 2025年度仓储物流信息化系统租赁服务合同2篇
- 基于2025年度标准的知识产权许可使用合同3篇
- 2025年能源行业学徒培养与劳动合同3篇
- 通讯录课程设计简要
- 水泥大门施工方案范本
- 2025年济宁国资赛瓦特新能源项目融资租赁合同3篇
- 二零二五年度农业现代化项目贷款及违约责任协议3篇
- 2025年水果市场调研与营销策划服务合同3篇
- 2025年安徽马鞍山市两山绿色生态环境建设有限公司招聘笔试参考题库附带答案详解
- 货运企业2025年度安全检查计划
- 以发展为导向共创教育新篇章-2024年期末校长总结讲话稿
- 2025年焊工安全生产操作规程(2篇)
- 《事故快速处理协议书》电子版
- 广东省广州越秀区2023-2024学年八年级上学期期末数学试卷(含答案)
- 临床经鼻高流量湿化氧疗患者护理查房
- 2024年贵州省中考数学真题含解析
- 8小时等效A声级计算工具
- 人教版七年级下册数学计算题300道
- 社会实践登记表
评论
0/150
提交评论