没有合适的资源?快使用搜索试试~ 我知道了~
数字逻辑电路实验--基于有限状态机的密码锁.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
26 浏览量
2022-07-09
02:16:13
上传
评论
收藏 1.08MB DOCX 举报
数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx数字逻辑电路实验--基于有限状态机的密码锁.docx
资源推荐
资源详情
资源评论






















数电实验三报告
姓名:xxx 班级:xxx 学号:xxxx
实验:基于有限状态机的密码锁
一、实验目的
学习如何通过 Verilog HDL 编程,利用 Basys3 板上的开关控制
七段数码管实现四位密码锁。
二、实验要求
使用有限状态机设计一个 4 位密码锁。利用 Basys3 板上的滑
动开关 sw[0]到 sw[9]分别代表 0‐9 十个数字,依次输入 4 位不
重复的密码。如果密码输入顺序与设计设置的一致,则显示大写字母
P,否则显示大写字母 F。注意,即使密码输入错误,也必须在输入
完整的 4 位密码输入,才能显示大写字母 F。
三、实验设计及内容
1. 基础版实验代码
module doorlock(
input CLK,
input clr,
input [9:0] sw,
output reg [10:0] display_out
);
reg[3:0] present_state,next_state;
parameter
S0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100,
E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;
reg [29:0] count;
reg [9:0] keys=0;

always @(posedge CLK or posedge clr)
begin
if (clr) count<=0;
else count<=count+1;
end
assign clk_3=count[24];// ~3Hz
always @(posedge clk_3 or posedge clr)
begin
// STATE TRANSITION
if (keys!=sw)
keys <= sw;
if (clr) present_state <= S0;
else present_state <= next_state;
end
// Demo for Finite State Machine
// the correct password is 0->1->2->3 (Switch sw[0]->sw[1]->sw[2]->sw[3] in order.
always @(*)
begin
case (present_state)
S0: begin
if (~|keys[9:0])
next_state <=S0; // no key pressed
else if (keys[2]) next_state <=S1; // first valid key pressed
else
end
next_state <=E1;
// first invalid key pressed
S1: begin
if (~|keys[9:3]&&~|keys[1:0])
else if (keys[1])
next_state <=S1; // no key pressed
next_state <=S2;// second valid key pressed
next_state <=E2;// second invalid key pressed
else
end
S2: begin
if (~|keys[9:3]&&~|keys[0])
else if (keys[7]) next_state <=S3; // third valid key pressed
next_state <=E3;// third invalid key pressed
next_state <=S2; // no key pressed
else
end
S3: begin
if (~|keys[9:8]&&~|keys[6:3]&&~|keys[0])
next_state <=S3; // no key
pressed
else if (keys[3])
next_state <=S4;// fourth vaild key pressed
else
end
next_state <=E4;// fourth invalid key pressed
S4: begin
if (~|keys[9:8]&&~|keys[6:4]&&~|keys[0])
next_state <=S4; // no key

pressed
else
end
next_state <=E1;
// fifth key pressed, but ignored ***
// second invalid key pressed
E1:begin
if (keys!=sw) next_state <=E2;
else next_state <=E1; // no key pressed
end
E2:begin
if (keys!=sw) next_state <=E3; // third invalid key pressed
else next_state <=E2; // no key pressed
end
E3:begin
if (keys!=sw) next_state <=E4; // fourth invalid key pressed
else next_state <=E3; // no key pressed
end
E4: next_state <=E4; // the additional keys are ALL ignored
***
default:
endcase
end
next_state <=S0;
always @(*)
begin
// indicate the number of inputs and display the tag
case(present_state)
S4: display_out<=11'b0111_0011000;//
E4: display_out<=11'b1110_0111000;//
S0: display_out<=11'b1001_0011100;//
P in left-most segment
F in right-most segment
oo in the middle segments
S1,E1: display_out<=11'b1001_0111111;// confirm first input
S2,E2: display_out<=11'b1001_0011111;// confirm second input
S3,E3: display_out<=11'b1001_0011110;// confirm third input
default:display_out<=11'b1111_1111111; // no display
endcase
end
endmodule
剩余11页未读,继续阅读
资源评论

xxpr_ybgg
- 粉丝: 2058
- 资源: 2万+

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
