五邑大学—EDA密码锁课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五邑大学
基于FPGA的数字系统设计报告
题目:密码锁
院系信息学院
专业电子信息工
学号13071814
学生姓名江建钊
指导教师赵顺喜
一、设计的要求和意义
1、实验目的:
1)训练从概念到产品的设计全过程;
2)综合运用各种设计方法。
2、实验原理和要求:
图9-1 密码锁输入输出信号示意图
图 9-1 k0~k9为数字键盘,用拨码开关实现(以为实验板上只有4个轻触开关),当按下ki=1时,代表一个对应i的BCD码。
setup为密码设置开关,用拨码开关实现,start_set为开始密码设置键,用轻触开关实现,当setup为高电平且start_set按下时为密码设置状态。
Start为开始密码输入键,用轻触开关实现,当setup为低电平且start按下时为密码输入状态。
Open为密码输入完成按键,当open按下,如果密码输入错误,输出信号lock=0,led1=0,led2=1(警示灯),spk=1(报警);如果密码输入正确,输出信号lock=1,led1=1,led2=0(警示灯),spk=0(报警)。
I_setup为复位按键,用轻触开关实现,当I_setup按下,强制将输出信号清零。3、设计任务与要求:
1)设计符合上述功能的密码锁控制电路;
2)可以用各种设计方法;
3)进行仿真;
4)把设计下载到实验箱并验证。
二、系统设计
1、软件设计流程及描述:
图9-1 程序设计流程图
图9-1设计流程可以分为3部分:密码设置、密码输入、密码输入结果判断和复位。
它们都是并发执行的。
2、程序源代码
module jjz1(lock,led1,spk,led2,setup,start,start_set,open,k,I_setup);
input[9:0] k;
input start,setup,start_set,open,I_setup;
output reg lock,led1,spk,led2;
reg in,in_set;
reg[3:0] code,c,c1,c2,c3,out1,out2,out3;
reg[2:0] state,state_set;
//*****************密码设置**************//
always @(setup)
begin
begin
case(k)
10'b00_0000_0001:begin c<=4'h0;in_set<=1;end //密码按键扫描按键;
10'b00_0000_0010:begin c<=4'h1;in_set<=1;end
10'b00_0000_0100:begin c<=4'h2;in_set<=1;end
10'b00_0000_1000:begin c<=4'h3;in_set<=1;end
10'b00_0001_0000:begin c<=4'h4;in_set<=1;end
10'b00_0010_0000:begin c<=4'h5;in_set<=1;end
10'b00_0100_0000:begin c<=4'h6;in_set<=1;end
10'b00_1000_0000:begin c<=4'h7;in_set<=1;end
10'b01_0000_0000:begin c<=4'h8;in_set<=1;end
10'b10_0000_0000:begin c<=4'h9;in_set<=1;end
default: begin c<=4'ha;in_set<=0;end
endcase
end
end
always @( posedge start_set or posedge in_set)
begin
if(start_set ) //
begin
state_set<=0;
c1<=4'hb;
c2<=4'hb;
c3<=4'hb;
end
else
case(state_set)
0:begin c1<=c;state_set<=1;end
1:begin c2<=c;state_set<=2;end
2:begin c3<=c;state_set<=3;end
endcase
end
//***************************************//
//**************密码输入*****************//
always @(!setup)
begin
case(k)
10'b00_0000_0001:begin code<=4'h0;in<=1;end //按键扫描; 10'b00_0000_0010:begin code<=4'h1;in<=1;end
10'b00_0000_0100:begin code<=4'h2;in<=1;end
10'b00_0000_1000:begin code<=4'h3;in<=1;end
10'b00_0001_0000:begin code<=4'h4;in<=1;end
10'b00_0010_0000:begin code<=4'h5;in<=1;end
10'b00_0100_0000:begin code<=4'h6;in<=1;end
10'b00_1000_0000:begin code<=4'h7;in<=1;end
10'b01_0000_0000:begin code<=4'h8;in<=1;end
10'b10_0000_0000:begin code<=4'h9;in<=1;end
default:begin code<=4'ha;in<=0;end
endcase
end
always @(posedge start or posedge in)
begin
if(start)
begin
state<=0;
out1<=4'hb;
out2<=4'hb;
out3<=4'hb;
end
else
begin