数字密码锁

1.设计要求: 用 verilog 语言设计一个数字密码锁,需要满足以下基本功能:

(1). 密码为 4 位,每位密码为数字 0-5,4 位密码各不相同。 (2). 具有使能输入端 en,用于控制密码锁的开启和关闭。密码锁开启, 允许输入密码;密码锁关闭,禁止输入密码。 (3). 具有清零输入端 clr,用于清除已输入的密码,重新进行密码输入。 (4). 可输出显示密码正确与否。 进阶功能: (1). 具有密码修改功能,允许修改预设的四位密码。 (2). 密码连续输错 3 次以上,密码锁输出显示锁定,不允许再进行密码 输入。 (3). 可自定义添加其他功能。 编写 testbench 验证功能并下板验证。

 

2.基本功能:

Stay状态:

    stay:begin //等待状态(测试各输出是否能够正常输出)

      unlock_led <= 1;

      error_led <= 1;

      inpw3 <= 8;

      inpw2 <= 8;

      inpw1 <= 8;

      inpw0 <= 8;

      s <= 3;

      if(en) begin //若en为1,则进入输入(inpt)状态

        state <= inpt;

        unlock_led <= 0;

        error_led <= 0;

        inpw3 <= 10; //显示横线

      end

    end

当en=1时,进入输入状态,当clr=0时清0,

inpt:begin //输入密码状态

      unlock_led <= 0;

      error_led <= 0;

      if(en) begin //使能端en为1,进行密码输入

        case(s)

         3:begin

          inpw3 <= pw;

          s <= s-1;

          inpw2 <= 10; //显示横线

 

        end

        2:begin

          inpw2 <= pw;

           s <= s-1;

          inpw1 <= 10; //显示横线

         end

        1:begin

          inpw1 <= pw;

          s <= s-1;

          inpw0 <= 10; //显示横线

        end

        0:begin

          inpw0 <= pw;

          s <= 3;

          state <= check;

 

         end

        default;

        endcase

      end

      else begin  //若en为0,返回stay状态

      state <= stay;

      end

    end

当最后一个数字输入后,进入check状态进行检测,

check:begin //密码检测状态

      if(en) begin

        inpw3 <= 10;

        inpw2 <= 10;

        inpw1 <= 10;

        inpw0 <= 10;

 

        if((inpw3==password3)&&

        (inpw2==password2)&&

        (inpw1==password1)&&

        (inpw0==password0)) begin

          state <= ulock;

          t <= 3; //错误计数重置

        end

        else begin

          state <= er;

          t <= t-1; //错误次数计数

        end

      end

      else begin

        state <= stay;

      end

    end

如果与设置的密码相符,则进入ulock状态,解锁,会有unlock_led <= 1;error_led <= 0;显示;

ulock:begin //密码正确,解锁成功状态

      unlock_led <= 1;

      error_led <= 0;

      state <= stay;

    end  

如果不符则进入er状态,会有unlock_led <= 0;error_led <= 1;显示,并且此时数码管上显示EEEE。

er:begin //密码错误

        inpw3 <= 11; //显示E

        inpw2 <= 11;

        inpw1 <= 11;

        inpw0 <= 11;

      unlock_led <= 0;

      error_led <= 1;

      state <= stay;     

    end

3.进阶功能

如果set=1,则进入密码输入状态

setpw:begin //更改密码状态

      unlock_led <= 0;

      error_led <= 0;

      inpw3 <= 10; //显示横线

      inpw2 <= 12;

      inpw1 <= 12;

      inpw0 <= 12;

     

      case(s)

         3:begin

          password3 <= pw;

          s <= s-1;

          inpw3 <= pw;

          inpw2 <= 10; //显示横线

 

        end

        2:begin

          password2 <= pw;

          s <= s-1;

          inpw3 <= password3;

          inpw2 <= pw;

          inpw1 <= 10; //显示横线

         end

        1:begin

          password1 <= pw;

          s <= s-1;

          inpw3 <= password3;

          inpw2 <= password2;

          inpw1 <= pw;

          inpw0 <= 10; //显示横线

        end

        0:begin

          password0 <= pw;

          s <= 3;

          inpw3 <= password3;

          inpw2 <= password2;

          inpw1 <= password1;

          inpw0 <= pw;

          state <= stay;

 

         end

        default;

        e

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值