verilog实验之密码箱实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog实现密码箱

1.功能概述

小脚丫开发板的有4位拨码开关,可以表示数字0-9,有两个七段数码管,所以密码设为两位(00—99),初始密码00,利用四位拨码开关(sw)输入密码,,按下个位确认按键(low),在数码管上显示个位数字;再次输入密码,按下十位确认按键(high),在数码管上显示十位数字。按下确认按键(enter),比较密码正误,若正确,实现开锁功能,用led8灯亮表示;错误,实现报错功能,用led1灯亮表示;连续错三次,实现警报功能,用8个灯全亮表示,此时只有重置(rst)才能重新输入密码。初始密码为21。为保证安全性,只有在开锁状态下,才可修改密码,修改拨码开关数值,按下个位确认按键(low),设置新密码个位,再次修改拨码开关数值,按下个位确认按键(high),设置新密码十位(实际上两个位密码修改与输入顺序不影响)。再按下重置键(rst),即可重新输入密码。同时在使用按键时,注意到了消抖。

2.效果展示

密码错误

密码正确

修改后密码正确

视频展示(双击播放)

3.代码分析

一、密码显示在数码管上

always@(*)

//数码管显示控制模块

begin

case(code_low)

4'd0:seg_led1=9'b000111111;//数码管1显示0 4'd1:seg_led1=9'b000000110;//1

4'd2:seg_led1=9'b001011011;//2

4'd3:seg_led1=9'b001001111;//3

4'd4:seg_led1=9'b001100110;//4

4'd5:seg_led1=9'b001101101;//5

4'd6:seg_led1=9'b001111101;//6

4'd7:seg_led1=9'b000000111;//7

4'd8:seg_led1=9'b001111111;//8

4'd9:seg_led1=9'b001101111;//9

default:seg_led1=9'b100111111;//0

endcase

case(code_high)

4'd0:seg_led2=9'b000111111;//数码管2显示0 4'd1:seg_led2=9'b000000110;//1

4'd2:seg_led2=9'b001011011;//2

4'd3:seg_led2=9'b001001111;//3

4'd4:seg_led2=9'b001100110;//4

4'd5:seg_led2=9'b001101101;//5

4'd6:seg_led2=9'b001111101;//6

4'd7:seg_led2=9'b000000111;//7

4'd8:seg_led2=9'b001111111;//8

4'd9:seg_led2=9'b001101111;//9

default:seg_led2=9'b100111111;//0

endcase

end

二、密码比对判断

always @(posedge clk) //密码判断

begin

if(!rst)

begin

wrong_cnt<=2'b00; //初始错误次数为0

code_low<=4'b0000;

code_high<=4'b0000;

led<=8'b11111111;

end

else if(low_d)

begin

code_low<=sw;

end

else if(high_d)

begin

code_high<=sw;

end

else if(enter_d)

begin

if(wrong_cnt!=2'd2)

begin

if((code_low==Y&&code_high==X)||(code_low==newcode_low& &code_high==newcode_high))

begin

led<=8'b01111111; //密码正确,led8亮

wrong_cnt<=2'd0;

end

else

begin

led<=8'b11111110; //密码错误,led1亮错误次数加一

wrong_cnt<=wrong_cnt+1;

end

end

else

led<=8'b00000000; //密码输错三次,报警end

end

三、密码修改实现

//修改控制模块

always @(posedge clk)

begin

if(!rst)

change<=0;

else if(led<=8'b01111111)

change<=1;

if(change==1&&high_d)

begin

newcode_high<=sw;

end

else if(change==1&&low_d)

begin

newcode_low<=sw;

end

end

endmodule

四、按键消抖实现

//按键消抖模块

module debounce (clk,rst,key,key_pulse);

parameter N = 2; //要消除的按键的数量

input clk;

input rst;

input [N-1:0] key; //输入的按键

output [N-1:0] key_pulse; //按键动作产生的脉冲

相关文档
最新文档