课程设计报告
课程设计题目:基于Verilog的数字密码锁设计
学号:201520070209 学生姓名:尹景兴 专业:通信工程 班级:1521301 指导教师:钟凯
2018年1月12日
目 录
一、 课程设计内容 ........................ - 1 - 二、 实现思路 ............................ - 1 - 1. 解锁过程 ............................ - 1 - 2. 报警过程 ............................ - 1 - 3. 重置密码过程 ........................ - 1 - 三、 实现程序 ............................ - 2 - 四、 仿真验证 ............................ - 5 - 1. 解锁过程 ............................ - 5 - 2. 报警过程 ............................ - 6 - 3.重置密码过程 ........................ - 8 - 五、 设计心得 ........................... - 11 -
一、 课程设计内容
设计一个4位串行数字密码锁,要求如下: 1. 开锁密码为4位二进制,当输入密码与锁内给定的密码一致时,方可开锁。否则进入“错误”状态,发出报警信号。 2. 锁内的密码可调。
3. 串行数字密码锁的报警,直到按下复位开关,才停下。此时,数字密码锁又自动等待下一个开锁状态。
二、 实现思路
1. 解锁过程
密码锁出厂之前预设一个初始密码,在本课程设计中将其预设为0101。在密码锁上锁状态下,输入正确密码,密码锁打开。 2. 报警过程
当输入的密码与锁内密码不一致时,蜂鸣器响起,直到按下取消按键,蜂鸣器才停止鸣叫。 3. 重置密码过程
重置密码时,需先验证原密码是否正确。当输入
- 1 -
原密码正确,才可以输入新密码,设置新密码为锁内密码。
三、 实现程序
module
coded_lock(clk,in,set,pause,value1,value2,store,bee,status,temp_set,ook);
input clk,in,set,pause; output reg bee = 0; output reg status = 0; output regtemp_set = 0; output regook = 0; output reg[3:0] value1; output reg[3:0] value2; output reg[3:0] store;
regen = 1;
reg[2:0] i = 0; reg[2:0] j = 0; reg[2:0] k = 0;
reg[2:0] count1 = 0; reg[2:0] count2 = 0; reg[2:0] count3 = 0;
reg[3:0] keynum = 4'b0101;
always @(posedgeclk) begin if(set == 1) fork temp_set<= 1;
value1 <= 4'bxxxx; value2 <= 4'bxxxx; store <= 4'bxxxx; i<= 0;
j <= 0; k <= 0; ook<= 0;
count1 <= 0; count2 <= 0;
- 2 -
count3 <= 0; join end
always @(posedgeclk) begin
if(temp_set == 0) begin
case({en,in})
2'b11: begin value1[i] <= 1'b1; i<= i + 1; count1 <= count1 + 1;end
2'b10: begin value1[i] <= 1'b0; i<= i + 1; count1 <= count1 + 1;end endcase
end end
always @(posedgeclk) begin
if(count1 == 4) begin
if(value1 == keynum) status <= 1; else
bee <= 1; i<= 0;
count1 <= 0;
value1 <= 4'bxxxx; end end
always @(posedgeclk) begin if(pause == 1)
bee <= 0; end
always @(posedgeclk) begin
if(temp_set == 1 &&ook == 0) begin
case({en,in})
2'b11: begin value2[j] <= 1'b1; j <= j + 1; count2 <= count2 + 1;end
- 3 -