文档详情

课程设计(论文)-基于Verilog的数字密码锁设计.docx

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