密码锁电路设计
采用Verilog HDL语言,按要求设计给定功能的密码锁,其功能如下:
1、设置 1 个电源开关盒4 个相同的按钮开关(设为ABCD)作为密码键,开锁的操作模式:先闭合电源开关,再按A 键8 次,接着按B 键6 次,即可输出开锁信号,并保持到电源开关断开。
2、操作中,如果按错了C 键或D 键,则A 键或B 键的原操作失效。即开锁的正确程序为:不仅要知道按哪几个键,还应知道按键的顺序和次数,上述各按键按的次序不对或者次数不对,都不会有开锁信号。用SW1~SW4 作为ABCD 密码键,LED1 显示开锁成功。
一、 设计思路
本质上,该密码锁原理与序列检测计相似。首先可以将输入密码分为两个阶段,一个是输入A的阶段,另一个则是输入B的阶段。其中state变量来表示现在输入密码的进程(初值为0),打开电源,首先进入到第一个阶段,此时按A可以使state变量加1,若在按A的过程中按到B、C、D任意一个按键state的值将直接清0。当连续按下8次A键后,将自动进入第二阶段,此时按下B键state变量加1,当按下A键,state变量将直接变成1,按下C、D键,state变量将变为0。在第二阶段连续按下6次B后即可成功解锁。
此外,设置了flag标记变量及reset复位键。为了防止在按下一次按键后由于时钟上升沿多次检测而多次录入按键设置了标基变量flag,当未按下按键时将flag标记变量置为1,若按下A、B、C、D任何一个键后,state的值改变的同时flag也会置为0,并通过一个if判断语句将其阻断在进程。复位键可以将程序置为初始状态,即flag变量、state变量均置为0。
此外,为了方便在硬件上对状态的观察,将state和flag分别绑定了管脚,state与LED5~LED8相连,flag与LED4相连。
二、 设计代码
1、 源代码(摘抄)
2、管脚绑定代码
三、 仿真结果