五邑大学—EDA密码锁课程设计报告

  • 格式:docx
  • 大小:927.68 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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