高级电子线路实验报告题目:基于FPGA的四位电子密码锁设计院(系):信息与通信学院专业:学生姓名:学号:2015年6月18日高级电子线路实验报告用纸第I页共3页基于FPGA的的四位电子密码锁设计摘要本文主要介绍了一种运用可编程逻辑器件(FPGA)技术来编程实现电子密码锁的设计方法。在整个系统设计实现中采用FPGA器件作为控制器,继而了解密码锁系统的总体流程、各个模块的功能与接口的分配。基于FPGA,使用VHDL语言编写模块程序,再通过QuartusII集成开发环境下进行设计、综合与仿真。要求用VerilogHDL语言实现系统中的各个模块功能,并且能够仿真,验证本次设计四位密码锁的功能。每按下一个数字键,就输入一个数值,并显示该数值,当按下密码更改键时会将目前的数字设定成新的密码。当按下激活电锁键的时候可以将密码锁上锁。当按下解除电锁键时会检查输入的密码是否正确,密码正确即开锁。电子密码锁由键盘扫描模块、分频模块、密码计数模块、比较器模块、存储模块、显示模块和控制模块七大部分组成。通过硬件描述,验证了整个设计的正确性以及系统的完整性。关键词:可编程逻辑器件;电子密码锁;硬件描述;时序仿真高级电子线路实验报告用纸第1页共3页1引言本设计利用QuartusⅡ工作平台硬件描述语言,设计一种电子密码锁,并通过用FPGA芯片实现。用VHDL语言使用自顶向下的方法对系统进行了描述,并在FPGA芯片上实现。设计充分利用了FPGA的资源可编程特性,可高效率的对系统进行升级与改进。设计的密码锁可设置任意密码,比一般的四位密码锁具有更高的安全可靠性,因此,采用FPGA开发的数字系统,不仅具有很高的工作可靠性,其升级与改进也极其的方便,应用前景十分宽广。随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高,因此导致了电子行业的蓬勃发展。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都获得了大大的提高。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。1总体方案设计1.1方案论证方案一:采用数字电路控制。利用数字逻辑电路,实现对锁的电子控制,突破了传统的机械锁的单一性、保密性低、易撬性的缺点,数字电子密码锁具有保密性高、使用灵活性好、安全系数高的优点。虽然采用数字密码锁电路的好处是设计简单,但是由于其实纯电路实际,在系统运行时,延时会比较严重。方案二:通过单片机实现。现在一种新的方案就是采用一种以AT89S51为核心的单片机控制方案。虽然有灵活的设计和丰富的IO端口,但是单片机运行的缺点是程序运行时容易出现跑飞现象。通过以上比较显然单片机方案有较大的活动空间,不但能实现所要求的功能,而且能在很大程度上扩大功能,并可以方便的对系统进行升级。但是由于所学知识不能将其有效运用,现有环境不能满足,而且以单片机为核心的密码锁有一定的不足之处,在运行时会产生PC指针错误,因此提出了第三种方案。方案三:利用FPGA设计数字密码锁。FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。通常FPGA都有着上万次的重写次数,也就是说现在的硬件设计和软件设计一样灵活、方便。相对于基于单片机技术的电子密码锁,用FPGA器件来构成系统,可高级电子线路实验报告用纸第2页共3页2靠性提高,并且由于FPGA具有的现场可编程功能,使得电子密码锁的更改与升级更为方便简单。通过以上比较描述,本设计采用基于FPGA的数字密码设计方案。1.2基于FPGA的数字密码锁系统流程图根据所要实现的数字密码锁的功能,设计出所要完成的的系统流程,系统设计的流程图如3.1所示。图3.1详细的描述了一个数字密码锁所要完成的功能,开始时,首先要对密码锁系统进行复位初始化,将所要设置的密码首先存入到存储模块当中。然后进行键盘输入,键盘输入分为密码输入和功能输入,如果是密码输入就要把输入的密码与预置的密码进行比较,如果相同则开锁,不相同则报警,而其中密码的个数由计数器限制;如果是功能输入,则看是什么功能,本设计主要设计了四个功能:设置密码键、退出键、清零键和关锁键,密码锁会根据所要求的功能进行相应的操作。如果是其他的不与功能相对应的键输入,密码锁将进行系统复位初始化阶段,重新开始操作。高级电子线路实验报告用纸第3页共3页3图3.1系统流程图3.3基于FPGA的数字密码锁总体框图通过数字密码锁系统结构的分析,我们知道通用的数字密码锁主要由八个部模块组成:分频模块、键盘扫描模块、比较模块、计数模块、寄存模块、存储模块、显示模块和控制模块。根据系统流程图的设计以及各个模块之间的逻辑关系将得到系统总体框图,如图3.2所示。开始系统复位初始化键盘输入判断为密码输入还是功能输入密码输入功能输入密码是否正确是什么功能解锁执行功能显示输入报警否是密码输入功能输入不与相应的功能键值相等什么都不是与相应的功能键值相等高级电子线路实验报告用纸第4页共3页4图3.2数字电子密码锁系统总体框图键盘扫描模块:设定数字键0—9,以及功能键;分频模块:设定系统时钟CLK的频率,对其分频,分别作为按键检测时钟和LED控制器扫描时钟;密码计数模块:统计所输密码位数;比较器模块:比较所输两数是否相等;比较结果寄存器模块:存储比较器模块的结果;存储模块:存储所设置的密码;显示模块:显示所输数字;控制模块:根据分析的数字密码结果,控制单元的算法。键盘扫描分频控制器存储器显示器计数器比较结果寄存器比较器4X4键盘高级电子线路实验报告用纸第5页共3页52系统详细设计2.1分频模块设计分频模块的主要功能是所给频率转化成系统所需频率。通常数字电路中的分频操作是采用计数来进行。就是利用一个自由计数器来产生各种需要的频率,也就是先建立一个N位计数器,N的大小根据电路的需求来决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号。本密码系统所设计的分频模块是执行十分频功能的模块,其目的是为了得到频率为时钟频率十分之一的clk_scan。主要程序如下所示。if(clk'eventandclk='1')thenif(cnt=cnt'high)thencnt=0;elsecnt=cnt+1;endif;endif;process(cnt,clk)beginif(clk'eventandclk='1')thenif(cntcnt'high/2)thenclk_scan='1';elseclk_scan='0';endif;endif;endprocess;分频模块源代码编译后所生成的示意图如图4.1所示。图4.1分频模块示意图分频模块的输入输出管脚及代表的意义如下表所示。clkclk_scanclk_geninst高级电子线路实验报告用纸第6页共3页6表4.1分频模块输入输出变量定义输入端子clk输入时钟信号输出端子clk_scan输出时钟信号源程序编译以后,建立仿真波形,所得功能仿真波形如图4.2所示。图4.2分频模块功能仿真波形图图中输入的时钟频率clk是1亿赫兹(1/10ns),经过程序编译以后,输出的波形是clk_scan为1千万赫兹(1/10ns),符合十分频的要求。2.2键盘扫描模块设计行列式键盘又叫做矩阵式键盘【4】。用带有I/O口的线组成行列结构,按键设置在行列的交点上。本次试验用到的是4×4的行列结构键盘,可以构成16个按键。这样,当按键数量平方增长是,I/O口只是线性增长,这样就可以节省I/O口。行列式键盘的原理如图4.3所示。key_col{0..3}上拉电阻key_row{3…0}图4.3行列式键盘的原理按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V的电压,即列线的输出被嵌位在高电平状态。判断按键中有无键按下时通过行线输入扫描信号,然后从列线读取到状态实现的。其CDEF89AB45670123高级电子线路实验报告用纸第7页共3页7方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。部分程序如下所示。process(temp,scan_en)beginifscan_en='0'thencasetempiswhen11101110=key_code_reg=00000;key_out_reg=0000000000000001;temp_num='1';temp_function='0';when11101101=key_code_reg=00001;key_out_reg=0000000000000010;temp_num='1';temp_function='0';when11101011=key_code_reg=00010;key_out_reg=0000000000000100;temp_num='1';temp_function='0';…设行扫描信号为key_row{3…0},列线按键输入信号key_col{0..3}与按键位置的关系如表4.2所示。表4.2行扫描信号、列线按键输入信号与按键位置的关系key_row{3…0}key_col{0..3}对应的按键111011100(key_num)11011(key_num)10112(key_num)01113(key_num)110111104(key_num)11015(key_num)10116(key_num)01117(key_num)101111108(key_num)11019(key_num)1011A(设置密码键)0111B(退出键)01111110C(清零键)1101D(没有设置)1011E(没有设置)0111F(关锁键)高级电子线路实验报告用纸第8页共3页8键盘扫描模块源代码编译后所生成的示意图如图4.4所示。clk_scankey_col[3..0]key_row[3..0]key_code[3..0]key_out[15..0]key_presskey_numkey_funcKeyPadScaninst图4.4键盘扫描模块示意图键盘扫描模块的输入输出管脚及代表的意义如下图所示。表4.3键盘扫描模块输入输出变量定义输入端子clk_scan时钟扫描信号key_col[3..0]键盘列扫描输出端子key_row[3..0]键盘行扫描key_code[3..0]键值输出key_out[15..0]键盘按键one-hot码输出key_press有键按下key_num数字键key_func功能键源程序编译以后,建立仿真波形,所得功能仿真波形如图4.5所示。图4.5键盘扫描模块功能仿真波形图在图5.5中,键盘扫描的列输入为1011,行输出为1011,由图5.3可得,此时按下的键应该是功能键A键,因此key_func、key_press变为高电平,key_num为低电平,而高级电子线路实验报告用纸第9页共3页9以one-hot码(独热码)编码的key_out输出为0000010000000000,符合源程序逻辑。2.3比较模块比较模块的主要功能是比较输入的密码和预置的开锁密码是否一致。部分程序如下所示。ifen='1'thenif(a=b)theny='1';elsey='0';endif;elsey='Z';endif;比较模块源代码编译后所生成的示意图如图4.6所示。a[3..0]b[3..0]enycomparator_4inst图4.6比较模块示意图比较模块的输入输出管脚及代表的意义如下图