《基于FPGA的电子密码锁的设计37521.pdf》由会员分享,可在线阅读,更多相关《基于FPGA的电子密码锁的设计37521.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.1 随着社会物质财富的日益增长,平安防盗已成为人们所关注的焦点。然而传统机械弹子锁平安性低,密码量少且需时刻携带钥匙使其无法满足一些特定场合的应用要求,特别是在人员经常变动的公共场所,目前使用的电子密码锁主要有两个方案:一是基于单片机用分立元件实现的,二是通过现代人体生物特征识别技术实现的,前者电路较复杂且灵活性差,无法满足应用要求;后者有其先进性但需考虑本钱和平安性等诸多因素。基于此,本文设计了一种新型电子密码锁,采用 FPGA 芯片,目前以硬件描述语言Verilog 或 VHDL所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进展测试,是现代 IC 设计验证的技术主
2、流。这些可编辑元件可以被用来实现一些根本的逻辑门电路 比方 AND、OR、*OR、NOT 或者更复杂一些的组合功能比方解码器或数学方程式。在大多数的 FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器Flipflop或者其他更加完整的记忆块。FPGA 一般来说比 ASIC专用集成芯片的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比方可以快速成品,可以被修改来改正程序中的错误和更廉价的造价。厂商也可能会提供廉价的但是编辑能力差的 FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的 FPGA 上完成的,然后将设计转移到一个类似于 ASIC 的
3、芯片上。另外一种方法是用 CPLD复杂可编程逻辑器件备。1 系统功能描述 本设计主要实现以下六个功能:1初始密码设置:系统上电后输入 4 位数字并按“*后密码设置成功系统进入上锁状态。为了实际需要,系统另设置了一个 4 位数的优先级密码,当用户忘记密码或被他人更改密码后,可以用优先级密码去除所设密码。2密码更改:为了密码平安及防止误操作,只能在开锁状态下先输入旧密码后才能更改系统密码,然后输入 4 位新密码后按“*。3解锁:输入密码或优先级密码后按“*,系统即解锁。4密码保护:密码输入错误时,系统自动记录一次错误输入,当错误输入次数等于 3 次时,系统报警并使键盘失效 5 分钟,以免密码被盗。
4、5去除输入错误:当输入数位小于 4 位时可以按“*去除前面所有的输入值,去除为“0000。6系统复位:按“*和“*后系统即复位到初始状态。考虑到实际情况,系统只在密码更改状态和系统初始状态下才能复位。2 系统设计思路 VHDL 主要用于描述数字系统的构造,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL 的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL 的程序构造特点是将一项工程设计,或称设计实体可以是一个元件,一个电路模块或一个系统分成外部或称可视局部,及端口和部或称不可视局部,既涉及实体的部功能和算法完成局部。在对一个设计实体定义了外部界面后,一旦其部开发
5、完成后,其他的设计就可以直接调用这个实体。本文采用自顶向下的模块化设计方法,先对系统级进展功能描述,再进展功能模块的划分,最后分别对各个子模块进展 VHDL 建模。所设计的电子密码锁系统构造如图 1 所示。键盘消抖 键盘编码 输入处理 显示 系统控制 键盘矩阵 时钟及扫描 图 1 系统构造图.1 2.1 时钟产生模块 此模块主要功能是产生时钟信号和键盘扫描信号。主要产生三个时钟信号16 Hz、64 Hz、100 kHz,分别为系统各个功能模块提供时钟驱动信号。其中键盘扫描模块包括在时钟产生模块中,用来产生扫描信号。由于要产生多个时钟信号。密码输入一般采用机械式和触摸式两种键盘。由于机械式键盘具
6、有本钱低、构造简单、可靠性高、应用广泛等优点,其按键分布及键值编码如图 2 所示。其中*、*为多功能组合键。键盘扫描电路用来产生扫描信号 KH,其按照 1110-1101-1011-0111 的规律循环变化,并通过 KC 来检测是否有键按下。其他键也是类似原理。特别值得注意的是键盘扫描电路扫描时钟确实立,如果扫描时钟不适宜,将产生键按下时反响太慢,或 KC 产生错误的输出。2.2 按键消抖模块 本设计采用机械键盘,其缺点是易产生抖动,因此键盘输出 KC20必须经过消抖电路后才能参加到键盘编码模块,以防止屡次识别。此模块采用状态机设计,其状态转换图如图 3 所示。只有当连续检测到 3 次低电平输
7、入,模块才输出一次低电平。消抖电路的时钟选择很关键,选择不当则不能正常工作。因为键盘扫描电路的时钟是 16 Hz 且扫描信号为 4 组循环输出,所以消抖电路要能够在 4 个键盘扫描时钟检测出是否有键按下就必须设置其时钟信号至少为键盘扫描时钟的 4 倍。2.3 键盘编码模块 上述的键盘中可分为数字键和功能键,其中数字键用来输入数字,但键盘所产生的信号 KC20并不能直接用于键盘输入处理模块,因此必须由键盘编码电路对数字按键的输出形式进展规划。同时多功能键*、*也分别被规划为“1010和“1011。另外,在系统规划时,也将系统复位电路规划在此模块,复位信号是由键盘编码模块和系统主控模块输出的系统复
8、位辅助信号 mm 共同作用产生,从而实现只能在密码更改状态和系统初始状态下才能进展系统复位,确保系统平安可靠。2.4 按键输入处理模块 按键输入处理模块用来储存每次按键产生的值,以免覆盖前面输入的数据,此模块使用串行移位存放器对依次输入的 4 位十进制数字进展存储。按键输入超过 4 位时,后面的输入将被忽略。2.5 显示模块 为了节省 I/O 管脚和芯片部资源,本设计采用动态扫描的方法进展显示。模块用100 kHz 时钟信号和人眼的视觉暂留效应使 4 位数码管看起来像是同时点亮。图 4 是根据VHDL 代码所绘制的显示模块框图。其中多路数据选择器是由按键次数NC控制选择哪一个数码管和哪一组输入
9、数据。.1 2.6 系统主控模块 此模块是系统的核心控制模块,系统的所有控制行为都是由它完成的,采用状态机FSM来描述系统的控制行为。由于多进程编程状态机的输出是由组合电路发出的,如果这些输出信号被用作时钟信号,则极易产生错误的驱动,其优势是由时序器件同步输出,输出信号不会出现毛刺现象,从而很好地防止了竞争冒险的发生。缺点是与多进程状态机相比,输出信号要晚一个时钟周期。通过反复试验在 VHDL 编程时将输出信号与状态转换同步进展,从而很好地解决了输出信号滞后的问题。图 5 为主控模块的状态转换图。其中 S0为系统上电初始化状态,也是系统复位后所转入的状态。本设计设置 S0 状态的另一主要原因是
10、考虑到一个完备的状态机应该具备初始化状态和默认状态。当芯片加电或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。但需要强调的是,大多数 FPGA有 GSRGlobal Set/Reset信号,当 FPGA 加电后,GSR 信号拉高,对所有的存放器,RAM 等单元复位/置位,这时配置于 FPGA 的逻辑并未生效;不能保证正确地进入初始化状态。所以使用 GSR 企图进入 FPGA 的初始化状态,常常会产生种种不必要的麻烦。S1为上锁状态,S2 为解锁状态,S3 为解锁错误次数记录状态,S4 为系统报警状态,S5 为开锁状态,S6 为密码更改状态。三重要程序模块分析 1,密码设置模
11、块 process(clk)-定义个存储器将密码存放在 keyin中 begin if clkevent and clk=1 then keyin=key;end if;end process;prr=pdan or rw1 or rin or ok;st:process(keyin,prr,ok1)-第一次修改密码 begin if ok1=1 then start=0;elsif(keyin/=000000 and prr=0)then start=1;else start=0;end if;end process;inkey:process(key,start,clk)begin -输入
12、密码时间进入记时状态 if clkevent and clk=1 then ok1=0;ok2=0;if start=1 then sbuf1=keyin;-将密码放入 rom1 暂存器中 if ok=1 then ok2=1;elsift=100 thent=000;ok1=1;-5 秒到将 t 值零将 ok1 值置高 elset=t+1;end if;elset=000;sbuf1=sbuf1;-当 start=1时 t 永远保持.1 0 end if;end if;end process;2,报警信号产生模块:pandan:process(ok,ok1,ok2,clk,start)-输入
13、密码用于判断密码是否正确 begin if ok2=1 or ok1=1 then pdan=1;-开锁信号 elsif clkevent and clk=1 then if pdan=1 then ift1=10011 then pdan=0;-20 秒后判断完毕,进入等待外部输入状态 else t1=t1+1;end if;else t1=00000;-等待状态时 t1 一直为0 end if;end if;end process;3显示模块 Display:process(open,rw,rin,clk1)-显示程序 begin if open=1 then -开锁信号密码正确 red=
14、0;green=1;speaker=0;-红灯灭,绿灯亮 else -密码错误 red=1;green=0;speaker=clk1;-红灯亮,绿灯灭,end if;elsif rw=1 then -第一次修改密码显示状态 red=1;green=0;speaker=0;elsif rin=1 then red=0;green=0;speaker=0;else red=1;green=0;speaker=0;end if;end process;4 主要功能模块的仿真 图 6 是键盘编码模块的时序仿真图。其号 mm 是主控模块,用来限制复位条件,即只在 S0 和 S6 状态下产生复位信号 RR
15、;信号 rst_key 和 unen_key 共同控制键盘,也是来自主控模块;sn 是模块输出信号,为高电平时表示有数字键被按下;sf 为高电平时表示有功能键被按下。从仿真图上可知,模块设计满足要求。不管你是一名逻辑设计师、硬件工程师或系统工程师,甚或拥有所有这些头衔,只要你在任何一种高速和多协议的复杂系统中使用了 FPGA,你就很可能需要努力解决好器件配置、电源管理、IP 集成、信号完整性和其他的一些关键设计问题。不过,你不必单独面对.1 这些挑战,因为在当前业领先的 FPGA 公司里工作的应用工程师每天都会面对这些问题,而且他们已经提出了一些将令你的设计工作变得更轻松的设计指导原则和解决方案。